diff --git a/AUTHORS b/AUTHORS index f21f35fcf..c0f36b955 100755 --- a/AUTHORS +++ b/AUTHORS @@ -1,6 +1,7 @@ -Enrico Fucile Shahram Najm Eugen Betke +Enrico Fucile +Pedro Maciel Sandor Kertesz Sebastien Villaume Florian Rathgeber diff --git a/CMakeLists.txt b/CMakeLists.txt index f60682739..2da7bf145 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,17 +73,11 @@ endif() ############################################################################### # some variables/options of this project -if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" ) - ecbuild_add_cxx_flags("-Wno-write-strings") - ecbuild_add_cxx_flags("-Wno-deprecated") -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - ecbuild_add_cxx_flags("-Wno-write-strings") - ecbuild_add_cxx_flags("-Wno-deprecated") - else() - ecbuild_add_cxx_flags("-Wno-writable-strings") - endif() -elseif( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" ) +# ecbuild_add_cxx_flags("-Wno-write-strings" NO_FAIL) +# ecbuild_add_cxx_flags("-Wno-writable-strings" NO_FAIL) +# ecbuild_add_cxx_flags("-Wno-deprecated" NO_FAIL) + +if( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" ) set(CMAKE_CXX_FLAGS "-hstd=c++11 ${CMAKE_CXX_FLAGS}") endif() @@ -201,8 +195,8 @@ ecbuild_add_option( FEATURE INSTALL_ECCODES_SAMPLES ecbuild_add_option( FEATURE MEMORY_MANAGEMENT DESCRIPTION "Enable memory management" DEFAULT OFF ADVANCED ) ecbuild_add_option( FEATURE ALIGN_MEMORY DESCRIPTION "Enable memory alignment" DEFAULT OFF ADVANCED ) ecbuild_add_option( FEATURE TIMER DESCRIPTION "Enable timer" DEFAULT OFF ADVANCED ) -ecbuild_add_option( FEATURE ECCODES_THREADS DESCRIPTION "Enable POSIX threads" DEFAULT OFF ADVANCED ) -ecbuild_add_option( FEATURE ECCODES_OMP_THREADS DESCRIPTION "Enable OpenMP threads" DEFAULT OFF ADVANCED ) +ecbuild_add_option( FEATURE ECCODES_THREADS DESCRIPTION "Enable thread-safety using POSIX threads" DEFAULT OFF ADVANCED ) +ecbuild_add_option( FEATURE ECCODES_OMP_THREADS DESCRIPTION "Enable thread-safety using OpenMP threads" DEFAULT OFF ADVANCED ) ecbuild_add_option( FEATURE EXTRA_TESTS DESCRIPTION "Enable extended regression testing" DEFAULT OFF ADVANCED ) ############################################################################### diff --git a/INSTALL b/INSTALL index b75d5b2b5..bccdbc3fb 100644 --- a/INSTALL +++ b/INSTALL @@ -33,8 +33,6 @@ However it requires that cmake be installed on your system. To add the Python3 bindings, use pip3 install from PyPI as follows: > pip3 install eccodes - or - > pip3 install --install-option="--prefix=/path/to/where/you/install/eccodes" eccodes You can also pass options to the cmake command above. Some typical examples are: diff --git a/README.md b/README.md index f63d65384..6859a1f1a 100644 --- a/README.md +++ b/README.md @@ -60,11 +60,6 @@ To add the Python3 bindings, use pip3 install from PyPI as follows: ``` pip3 install eccodes ``` - or - ``` - pip3 install --install-option="--prefix=/path/to/where/you/install/eccodes" eccodes - ``` - For more details, please see: https://confluence.ecmwf.int/display/ECC/ecCodes+installation diff --git a/VERSION b/VERSION index 1fb127446..aa5388f63 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.34.3 +2.35.0 diff --git a/bamboo/flags.cmake b/bamboo/flags.cmake index 2c5a809e2..b434036aa 100644 --- a/bamboo/flags.cmake +++ b/bamboo/flags.cmake @@ -1,3 +1,5 @@ -SET(ENABLE_EXTRA_TESTS ON CACHE BOOL "Enable extra tests") -SET(ENABLE_ECCODES_THREADS ON CACHE BOOL "Enable POSIX threads") -SET(ENABLE_MEMFS ON CACHE BOOL "Enable MEMFS") +SET(ENABLE_EXTRA_TESTS ON CACHE BOOL "Enable extra tests") +SET(ECCODES_INSTALL_EXTRA_TOOLS ON CACHE BOOL "Install extra tools") +SET(ENABLE_ECCODES_THREADS ON CACHE BOOL "Enable POSIX threads") +SET(ENABLE_MEMFS ON CACHE BOOL "Enable MEMFS") +# SET(ENABLE_JPG_LIBOPENJPEG OFF CACHE BOOL "Disable OpenJPEG") diff --git a/data/julian.out.good b/data/julian.out.good index c1321285c..c897c9476 100644 --- a/data/julian.out.good +++ b/data/julian.out.good @@ -62,4 +62,6 @@ Test2... - -47120001 -> 6 Test3... +Test4... +Test5... All OK diff --git a/definitions/boot.def b/definitions/boot.def index 61a7b7be0..bb8991382 100644 --- a/definitions/boot.def +++ b/definitions/boot.def @@ -18,12 +18,12 @@ constant defaultTypeOfLevel="unknown" : hidden; gribDataQualityChecks = getenv("ECCODES_GRIB_DATA_QUALITY_CHECKS","0") : hidden; if (gribDataQualityChecks) { - template LIMITS "param_limits.def"; + template LIMITS "param_limits.def"; } # GRIBEX special boustrophedonic mode. See GRIB-472 # If the environment variable is not defined, the key will be 0 -GRIBEX_boustrophedonic = getenv("ECCODES_GRIBEX_BOUSTROPHEDONIC","0") :hidden; +GRIBEX_boustrophedonic = getenv("ECCODES_GRIBEX_BOUSTROPHEDONIC","0") :hidden; constant zero=0 : hidden; constant one=1 : hidden; @@ -61,65 +61,65 @@ transient produceLargeConstantFields = 0 : hidden; meta libraryVersion library_version() : hidden; -lookup[4] kindOfProduct (0,identifier) : hidden; +lookup[4] kindOfProduct (0,identifier) : hidden; # grib templates # `ABCD` is a number, each letter being a byte if(kindOfProduct == `GRIB`){ - lookup[1] GRIBEditionNumber (7,editionNumber) : edition_specific ; - template GRIB "grib[GRIBEditionNumber:l]/boot.def" ; + lookup[1] GRIBEditionNumber (7,editionNumber) : edition_specific; + template GRIB "grib[GRIBEditionNumber:l]/boot.def" ; } if(kindOfProduct == `BUDG` ){ - template BUDG "budg/boot.def" ; + template BUDG "budg/boot.def" ; } if(kindOfProduct == `DIAG`){ - template DIAG "diag/boot.def" ; + template DIAG "diag/boot.def" ; } if(kindOfProduct == `TIDE`){ - template TIDE "tide/boot.def" ; + template TIDE "tide/boot.def" ; } if(kindOfProduct == `BUFR`){ - template BUFR "bufr/boot.def" ; - #constant BUFRstr="BUFR"; #ECC-742 + template BUFR "bufr/boot.def" ; + #constant BUFRstr="BUFR"; #ECC-742 #alias identifier=BUFRstr; } if(kindOfProduct == `CDFX`){ - template CDF "cdf/boot.def" ; - constant CDFstr="netCDF"; + template CDF "cdf/boot.def" ; + constant CDFstr="netCDF"; alias ls.identifier=CDFstr; } if(kindOfProduct == 17632522 ){ - template GTS "gts/boot.def" ; + template GTS "gts/boot.def" ; constant GTSstr="GTS"; alias ls.identifier=GTSstr; } if(kindOfProduct == `META` ){ - template METAR "metar/boot.def" ; + template METAR "metar/boot.def" ; constant METARstr="METAR"; alias identifier=METARstr; } if(kindOfProduct == `TAF ` ){ - template TAF "taf/boot.def" ; + template TAF "taf/boot.def" ; constant TAFstr="TAF"; alias ls.identifier=TAFstr; } if(kindOfProduct == 2303214662){ - template HDF5 "hdf5/boot.def" ; - constant HDF5str="HDF5"; + template HDF5 "hdf5/boot.def" ; + constant HDF5str="HDF5"; alias ls.identifier=HDF5str; } if(kindOfProduct == `WRAP`){ - template WRAP "wrap/boot.def" ; - constant WRAPstr="WRAP"; + template WRAP "wrap/boot.def" ; + constant WRAPstr="WRAP"; alias ls.identifier=WRAPstr; } diff --git a/definitions/bufr/section.3.def b/definitions/bufr/section.3.def index 1d9d8c7f9..d223bbbb2 100644 --- a/definitions/bufr/section.3.def +++ b/definitions/bufr/section.3.def @@ -51,7 +51,7 @@ unsigned[2] numberOfSubsets : dump; alias ls.numberOfSubsets=numberOfSubsets; if (section2Present && bufrHeaderCentre==98 && section2Length==52) { - if ( rdbType == 2 || rdbType == 3 || rdbType == 8 || rdbType == 12 ) { + if ( rdbType == 2 || rdbType == 3 || rdbType == 8 || rdbType == 12 || rdbType == 30 ) { transient isSatelliteType=1; } else { transient isSatelliteType=0; diff --git a/definitions/common/c-11.table b/definitions/common/c-11.table index 6c52dbf48..778001045 100644 --- a/definitions/common/c-11.table +++ b/definitions/common/c-11.table @@ -2,19 +2,26 @@ 0 0 WMO Secretariat 1 ammc Melbourne (WMC) 2 2 Melbourne (WMC) +3 3 Melbourne (WMC) 4 rums Moscow (WMC) 5 5 Moscow (WMC) +6 6 Moscow (WMC) 7 kwbc US National Weather Service - NCEP (WMC) 8 8 US National Weather Service - NWSTG (WMC) 9 9 US National Weather Service - Other (WMC) 10 10 Cairo (RSMC/RAFC) +11 11 Cairo (RSMC/RAFC) 12 12 Dakar (RSMC/RAFC) +13 13 Dakar (RSMC/RAFC) 14 14 Nairobi (RSMC/RAFC) -16 16 Atananarivo (RSMC) +15 15 Nairobi (RSMC/RAFC) +16 16 Casablanca (RSMC) +17 17 Tunis (RSMC) 18 18 Tunis-Casablanca (RSMC) 20 20 Las Palmas (RAFC) 21 21 Algiers (RSMC) -22 22 Lagos (RSMC) +22 22 ACMAD +23 23 Mozambique (NMC) 24 fapr Pretoria (RSMC) 26 26 Khabarovsk (RSMC) 28 vabb New Delhi (IMD) @@ -23,27 +30,38 @@ 32 32 Tashkent (RSMC) 33 33 Jeddah (RSMC) 34 rjtd Japanese Meteorological Agency - Tokyo (RSMC) -36 36 Bankok -37 37 Ulan Bator +36 36 Bangkok +37 37 Ulaanbaatar 38 babj Beijing (RSMC) 40 rksl Seoul 41 sabm Buenos Aires (RSMC/RAFC) 43 43 Brasilia (RSMC/RAFC) 45 45 Santiago 46 sbsj Brasilian Space Agency - INPE +47 47 Colombia (NMC) +48 48 Ecuador (NMC) +49 49 Peru (NMC) +50 50 Venezuela (Bolivarian Republic of) (NMC) 51 51 Miami (RSMC/RAFC) 52 52 National Hurricane Center, Miami 53 53 Canadian Meteorological Service - Montreal (RSMC) 54 cwao Canadian Meteorological Service - Montreal (RSMC) 55 55 San Francisco +56 56 ARINC Centre 57 57 U.S. Air Force - Global Weather Center 58 fnmo US Navy - Fleet Numerical Oceanography Center 59 59 NOAA Forecast Systems Lab, Boulder CO 60 60 National Center for Atmospheric Research (NCAR), Boulder, CO +61 61 Service ARGOS - Landover +62 62 US Naval Oceanographic Office +63 63 International Research Institute for Climate and Society (IRI) 64 64 Honolulu 65 65 Darwin (RSMC) 67 67 Melbourne (RSMC) 69 nzkl Wellington (RSMC/RAFC) +71 71 Nadi (RSMC) +72 72 Singapore +73 73 Malaysia (NMC) 74 egrr U.K. Met Office - Exeter 76 76 Moscow (RSMC/RAFC) 78 edzw Offenbach (RSMC) @@ -65,9 +83,34 @@ 97 97 European Space Agency (ESA) 98 ecmf European Centre for Medium-Range Weather Forecasts 99 99 DeBilt, Netherlands +100 100 Brazzaville +101 101 Abidjan +102 102 Libya (NMC) +103 103 Madagascar (NMC) +104 104 Mauritius (NMC) +105 105 Niger (NMC) +106 106 Seychelles (NMC) +107 107 Uganda (NMC) +108 108 United Republic of Tanzania (NMC) +109 109 Zimbabwe (NMC) 110 110 Hong-Kong +145 145 French Guiana +146 146 Brazilian Navy Hydrographic Centre +147 147 National Commission on Space Activities (CONAE) - Argentina +148 148 Brazilian Department of Airspace Control - DECEA 160 160 US NOAA/NESDIS +161 161 US NOAA Office of Oceanic and Atmospheric Research 173 nasa US National Aeronautics and Space Administration (NASA) + +174 174 Integrated Science Data Management/Marine Environmental Data Service (ISDM/MEDS - Canada) +175 175 University Corporation for Atmospheric Research (UCAR) - United States +176 176 Cooperative Institute for Meteorological Satellite Studies (CIMSS) - United States +177 177 NOAA National Ocean Service - United States +178 178 Spire Global, Inc. +179 179 GeoOptics, Inc. +180 180 PlanetiQ +181 181 Atmospheric and Environmental Research (AER) + 195 wiix Indonesia (NMC) 204 niwa National Institute of Water and Atmospheric Research (NIWA - New Zealand) 210 210 Frascati (ESA/ESRIN) @@ -85,6 +128,8 @@ 222 222 Albania (NMC) 223 223 Armenia (NMC) 224 lowm Austria +225 225 Azerbaijan (NMC) +226 226 Belarus (NMC) 227 ebum Belgium (NMC) 228 228 Bosnia and Herzegovina (NMC) 229 229 Bulgaria (NMC) @@ -94,6 +139,7 @@ 233 eidb Dublin 234 234 Israel (NMC) 235 ingv INGV +238 238 Lithuania (NMC) 239 crfc CERFAX 240 240 Malta (NMC) 241 241 Monaco diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def index 6e19617e2..f652e0ac8 100644 --- a/definitions/grib1/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def @@ -12659,7 +12659,7 @@ table2Version = 140 ; indicatorOfParameter = 217 ; } -#Maximum individual wave height +#Envelop-maximum individual wave height 'hmax' = { table2Version = 140 ; indicatorOfParameter = 218 ; diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def index bee6eddab..c6600060a 100644 --- a/definitions/grib1/localConcepts/ecmf/name.def +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -12659,8 +12659,8 @@ table2Version = 140 ; indicatorOfParameter = 217 ; } -#Maximum individual wave height -'Maximum individual wave height' = { +#Envelop-maximum individual wave height +'Envelop-maximum individual wave height' = { table2Version = 140 ; indicatorOfParameter = 218 ; } diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def index bd07cf762..25b2986ec 100644 --- a/definitions/grib1/localConcepts/ecmf/paramId.def +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -12659,7 +12659,7 @@ table2Version = 140 ; indicatorOfParameter = 217 ; } -#Maximum individual wave height +#Envelop-maximum individual wave height '140218' = { table2Version = 140 ; indicatorOfParameter = 218 ; diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def index 54ef51c2b..70ccd9973 100644 --- a/definitions/grib1/localConcepts/ecmf/shortName.def +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -12659,7 +12659,7 @@ table2Version = 140 ; indicatorOfParameter = 217 ; } -#Maximum individual wave height +#Envelop-maximum individual wave height 'hmax' = { table2Version = 140 ; indicatorOfParameter = 218 ; diff --git a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def index c649d29a6..e74860061 100644 --- a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def +++ b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def @@ -7,31 +7,194 @@ "accum" = {timeRangeIndicator=1;indicatorOfParameter=228;gribTablesVersionNo=128;centre=98;} "accum" = {timeRangeIndicator=10;indicatorOfParameter=228;gribTablesVersionNo=128;centre=98;} -# sshf -"accum" = {indicatorOfParameter=146;gribTablesVersionNo=128;centre=98;} -# slhf -"accum" = {indicatorOfParameter=147;gribTablesVersionNo=128;centre=98;} -# ssrd -"accum" = {indicatorOfParameter=169;gribTablesVersionNo=128;centre=98;} -# strd -"accum" = {indicatorOfParameter=175;gribTablesVersionNo=128;centre=98;} -# ssr -"accum" = {indicatorOfParameter=176;gribTablesVersionNo=128;centre=98;} -# str -"accum" = {indicatorOfParameter=177;gribTablesVersionNo=128;centre=98;} -# ttr -"accum" = {indicatorOfParameter=179;gribTablesVersionNo=128;centre=98;} -# sund -"accum" = {indicatorOfParameter=189;gribTablesVersionNo=128;centre=98;} -# runoff -"accum" = {indicatorOfParameter=205;gribTablesVersionNo=128;centre=98;} # sro -"accum" = {indicatorOfParameter=8;gribTablesVersionNo=128;centre=98;} -# e -"accum" = {indicatorOfParameter=182;gribTablesVersionNo=128;centre=98;} -# lsp -"accum" = {indicatorOfParameter=142;gribTablesVersionNo=128;centre=98;} -# pev -"accum" = {indicatorOfParameter=251;gribTablesVersionNo=228;centre=98;} +"accum"={gribTablesVersionNo=128;indicatorOfParameter=8;centre=98;} +# ssro +"accum"={gribTablesVersionNo=128;indicatorOfParameter=9;centre=98;} +# parcs +"accum"={gribTablesVersionNo=128;indicatorOfParameter=20;centre=98;} +# es +"accum"={gribTablesVersionNo=128;indicatorOfParameter=44;centre=98;} +# smlt +"accum"={gribTablesVersionNo=128;indicatorOfParameter=45;centre=98;} +# dsrp +"accum"={gribTablesVersionNo=128;indicatorOfParameter=47;centre=98;} +# 10fg +"max"={gribTablesVersionNo=128;indicatorOfParameter=49;centre=98;} +# lspf +"accum"={gribTablesVersionNo=128;indicatorOfParameter=50;centre=98;} +# mx2t24 +"max"={gribTablesVersionNo=128;indicatorOfParameter=51;centre=98;} +# mn2t24 +"min"={gribTablesVersionNo=128;indicatorOfParameter=52;centre=98;} # uvb -"accum" = {indicatorOfParameter=57;gribTablesVersionNo=128;centre=98;} +"accum"={gribTablesVersionNo=128;indicatorOfParameter=57;centre=98;} +# par +"accum"={gribTablesVersionNo=128;indicatorOfParameter=58;centre=98;} +# mx2t6 +"max"={gribTablesVersionNo=128;indicatorOfParameter=121;centre=98;} +# mn2t6 +"min"={gribTablesVersionNo=128;indicatorOfParameter=122;centre=98;} +# lsp +"accum"={gribTablesVersionNo=128;indicatorOfParameter=142;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=142;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=142;centre=98;} +# cp +"accum"={gribTablesVersionNo=128;indicatorOfParameter=143;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=143;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=143;centre=98;} +# sf +"accum"={gribTablesVersionNo=128;indicatorOfParameter=144;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=144;centre=98;} +# bld +"accum"={gribTablesVersionNo=128;indicatorOfParameter=145;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=145;centre=98;} +# sshf +"accum"={gribTablesVersionNo=128;indicatorOfParameter=146;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=146;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=146;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=146;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=146;centre=98;} +# slhf +"accum"={gribTablesVersionNo=128;indicatorOfParameter=147;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=147;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=147;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=147;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=147;centre=98;} +# snr +"accum"={gribTablesVersionNo=128;indicatorOfParameter=149;centre=98;} +# tnr +"accum"={gribTablesVersionNo=128;indicatorOfParameter=150;centre=98;} +# ssrd +"accum"={gribTablesVersionNo=128;indicatorOfParameter=169;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=169;centre=98;} +# strd +"accum"={gribTablesVersionNo=128;indicatorOfParameter=175;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=175;centre=98;} +# ssr +"accum"={gribTablesVersionNo=128;indicatorOfParameter=176;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=176;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=176;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=176;centre=98;} +# str +"accum"={gribTablesVersionNo=128;indicatorOfParameter=177;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=177;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=177;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=177;centre=98;} +# tsr +"accum"={gribTablesVersionNo=128;indicatorOfParameter=178;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=178;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=178;centre=98;} +# ttr +"accum"={gribTablesVersionNo=128;indicatorOfParameter=179;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=179;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=179;centre=98;} +# ewss +"accum"={gribTablesVersionNo=128;indicatorOfParameter=180;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=180;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=180;centre=98;} +# nsss +"accum"={gribTablesVersionNo=128;indicatorOfParameter=181;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=181;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=181;centre=98;} +# e +"accum"={gribTablesVersionNo=128;indicatorOfParameter=182;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=182;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=182;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=182;centre=98;} +# sund +"accum"={gribTablesVersionNo=128;indicatorOfParameter=189;centre=98;} +# lgws +"accum"={gribTablesVersionNo=128;indicatorOfParameter=195;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=195;centre=98;} +# mgws +"accum"={gribTablesVersionNo=128;indicatorOfParameter=196;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=196;centre=98;} +# gwd +"accum"={gribTablesVersionNo=128;indicatorOfParameter=197;centre=98;} +"accum"={gribTablesVersionNo=160;indicatorOfParameter=197;centre=98;} +# mx2t +"max"={gribTablesVersionNo=128;indicatorOfParameter=201;centre=98;} +"max"={gribTablesVersionNo=170;indicatorOfParameter=201;centre=98;} +"max"={gribTablesVersionNo=190;indicatorOfParameter=201;centre=98;} +# mn2t +"min"={gribTablesVersionNo=128;indicatorOfParameter=202;centre=98;} +"min"={gribTablesVersionNo=170;indicatorOfParameter=202;centre=98;} +"min"={gribTablesVersionNo=190;indicatorOfParameter=202;centre=98;} +# ro +"accum"={gribTablesVersionNo=128;indicatorOfParameter=205;centre=98;} +"accum"={gribTablesVersionNo=180;indicatorOfParameter=205;centre=98;} +# tsrc +"accum"={gribTablesVersionNo=128;indicatorOfParameter=208;centre=98;} +# ttrc +"accum"={gribTablesVersionNo=128;indicatorOfParameter=209;centre=98;} +# ssrc +"accum"={gribTablesVersionNo=128;indicatorOfParameter=210;centre=98;} +# strc +"accum"={gribTablesVersionNo=128;indicatorOfParameter=211;centre=98;} +# tisr +"accum"={gribTablesVersionNo=128;indicatorOfParameter=212;centre=98;} +# vimd +"accum"={gribTablesVersionNo=128;indicatorOfParameter=213;centre=98;} +# tp +"accum"={gribTablesVersionNo=160;indicatorOfParameter=228;centre=98;} +"accum"={gribTablesVersionNo=170;indicatorOfParameter=228;centre=98;} +"accum"={gribTablesVersionNo=190;indicatorOfParameter=228;centre=98;} +# csf +"accum"={gribTablesVersionNo=128;indicatorOfParameter=239;centre=98;} +# lsf +"accum"={gribTablesVersionNo=128;indicatorOfParameter=240;centre=98;} +# fdir +"accum"={gribTablesVersionNo=228;indicatorOfParameter=21;centre=98;} +# cdir +"accum"={gribTablesVersionNo=228;indicatorOfParameter=22;centre=98;} +# mx2t3 +"max"={gribTablesVersionNo=228;indicatorOfParameter=26;centre=98;} +# mn2t3 +"min"={gribTablesVersionNo=228;indicatorOfParameter=27;centre=98;} +# 10fg3 +"max"={gribTablesVersionNo=228;indicatorOfParameter=28;centre=98;} +# litota1 +"avg"={gribTablesVersionNo=228;indicatorOfParameter=51;centre=98;} +# licga1 +"avg"={gribTablesVersionNo=228;indicatorOfParameter=53;centre=98;} +# ssrdc +"accum"={gribTablesVersionNo=228;indicatorOfParameter=129;centre=98;} +# strdc +"accum"={gribTablesVersionNo=228;indicatorOfParameter=130;centre=98;} +# fzra +"accum"={gribTablesVersionNo=228;indicatorOfParameter=216;centre=98;} +# mxtpr +"max"={gribTablesVersionNo=228;indicatorOfParameter=226;centre=98;} +# mntpr +"min"={gribTablesVersionNo=228;indicatorOfParameter=227;centre=98;} +# pev +"accum"={gribTablesVersionNo=228;indicatorOfParameter=251;centre=98;} +# srta +"accum"={gribTablesVersionNo=162;indicatorOfParameter=100;centre=98;} +# trta +"accum"={gribTablesVersionNo=162;indicatorOfParameter=101;centre=98;} +# srtca +"accum"={gribTablesVersionNo=162;indicatorOfParameter=102;centre=98;} +# trtca +"accum"={gribTablesVersionNo=162;indicatorOfParameter=103;centre=98;} +# umfa +"accum"={gribTablesVersionNo=162;indicatorOfParameter=104;centre=98;} +# dmfa +"accum"={gribTablesVersionNo=162;indicatorOfParameter=105;centre=98;} +# udra +"accum"={gribTablesVersionNo=162;indicatorOfParameter=106;centre=98;} +# ddra +"accum"={gribTablesVersionNo=162;indicatorOfParameter=107;centre=98;} +# tpfa +"accum"={gribTablesVersionNo=162;indicatorOfParameter=108;centre=98;} +# tdcha +"accum"={gribTablesVersionNo=162;indicatorOfParameter=109;centre=98;} +# ttpha +"accum"={gribTablesVersionNo=162;indicatorOfParameter=110;centre=98;} +# qtpha +"accum"={gribTablesVersionNo=162;indicatorOfParameter=111;centre=98;} +# utpha +"accum"={gribTablesVersionNo=162;indicatorOfParameter=112;centre=98;} +# vtpha +"accum"={gribTablesVersionNo=162;indicatorOfParameter=113;centre=98;} diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def index c2c79b985..7fe4b06ee 100644 --- a/definitions/grib1/localConcepts/ecmf/units.def +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -12659,7 +12659,7 @@ table2Version = 140 ; indicatorOfParameter = 217 ; } -#Maximum individual wave height +#Envelop-maximum individual wave height 'm' = { table2Version = 140 ; indicatorOfParameter = 218 ; diff --git a/definitions/grib1/mars_labeling.4.def b/definitions/grib1/mars_labeling.4.def index d75df1341..e0984d22b 100644 --- a/definitions/grib1/mars_labeling.4.def +++ b/definitions/grib1/mars_labeling.4.def @@ -89,7 +89,7 @@ if (horizontalCoordinateDefinition == 0) { { meta coordinateIndexNumber evaluate(coordinate4Flag+coordinate3Flag); -# levelist latitude longitude + # levelist latitude longitude if (coordinateIndexNumber== 3) { meta marsLatitude divdouble( coordinate1Start,1000000); meta marsLongitude divdouble( coordinate2Start,1000000); @@ -145,15 +145,15 @@ if (horizontalCoordinateDefinition == 0) { alias mars.range = marsRange; } } -# product - alias mars.product = coordAveragingTims; -# date - if (marsType == TYPE_OR && averaging1Flag == P_INST) { - #remove mars.date; - alias mars.date = verificationDate; - #remove mars.step; - constant stepZero = 0; - alias mars.step =stepZero; - } + # product + alias mars.product = coordAveragingTims; + # date + if (marsType == TYPE_OR && averaging1Flag == P_INST) { + #remove mars.date; + alias mars.date = verificationDate; + #remove mars.step; + constant stepZero = 0; + alias mars.step =stepZero; + } } } diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def index 500b7de8f..2bda52ec7 100644 --- a/definitions/grib1/section.1.def +++ b/definitions/grib1/section.1.def @@ -313,7 +313,7 @@ alias time.stepType=stepType; # ECC-457: GRIB1 to GRIB2 conversion concept_nofail stepTypeForConversion (unknown, "stepTypeForConversion.def", conceptsDir2, conceptsDir1); -if (stepTypeForConversion is "accum" ) { +if (stepTypeForConversion is "accum" || stepTypeForConversion is "max" || stepTypeForConversion is "min" || stepTypeForConversion is "avg") { if (productDefinitionTemplateNumber == 1) { alias productDefinitionTemplateNumber=eleven; } diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def index 61f3c000d..d2c44fb74 100644 --- a/definitions/grib2/boot.def +++ b/definitions/grib2/boot.def @@ -16,9 +16,9 @@ constant tablesVersionLatest = 32 : edition_specific; constant false = 0 : hidden; constant true = 1 : hidden; constant million = 1000000 : hidden; -constant grib2divider = 1000000; -alias extraDimensionPresent=zero; -transient angleSubdivisions=grib2divider; # micro degrees +constant grib2divider = 1000000; +alias extraDimensionPresent = zero; +transient angleSubdivisions = grib2divider; # micro degrees transient forceStepUnits = 255 : hidden; meta gts_header gts_header() : no_copy,hidden,read_only; @@ -26,8 +26,8 @@ meta gts_TTAAii gts_header(20,6) : no_copy,hidden,read_only; meta gts_CCCC gts_header(27,4) : no_copy,hidden,read_only; meta gts_ddhh00 gts_header(32,6) : no_copy,hidden,read_only; -transient missingValue = 9999; -constant ieeeFloats = 1 : edition_specific; +transient missingValue = 9999; +constant ieeeFloats = 1 : edition_specific; constant isHindcast = 0; include "grib2/section.0.def" @@ -43,3 +43,13 @@ template core "grib2/sections.def"; #} template section_8 "grib2/section.8.def"; + +# ECC-1779: Add keys to identify experimental and deprecated templates +# The low-level transient keys template_is_XXX +# are set inside the template definition files +concept isTemplateDeprecated(false) { + 1 = { template_is_deprecated = 1; } +} +concept isTemplateExperimental(false) { + 1 = { template_is_experimental = 1; } +} diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def index 889c839e3..494c41ada 100644 --- a/definitions/grib2/cfVarName.def +++ b/definitions/grib2/cfVarName.def @@ -1239,12 +1239,6 @@ parameterCategory = 0 ; parameterNumber = 52 ; } -#Envelope-maximum individual wave height -'envhmax' = { - discipline = 10 ; - parameterCategory = 0 ; - parameterNumber = 93 ; - } #Time domain maximum individual crest height 'tdcmax' = { discipline = 10 ; @@ -1305,6 +1299,34 @@ parameterCategory = 0 ; parameterNumber = 84 ; } +#Time-mean mean zero-crossing wave period +'avg_mp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean significant height of combined wind waves and swell +'avg_swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean peak wave period +'avg_pp1d' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 34 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean wave period +'avg_mwp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + typeOfStatisticalProcessing = 0 ; + } #Mean sea water temperature in the upper 300 m 'mswt300m' = { discipline = 10 ; @@ -3786,6 +3808,71 @@ typeOfFirstFixedSurface = 187 ; typeOfSecondFixedSurface = 185 ; } +#Convective snowfall water equivalent +'csfwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-scale snowfall water equivalent +'lsfwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Lake surface temperature +'lslt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + } +#Surface bulk Richardson number +'sbrn' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#Time-maximum 2 metre relative humidity +'mx2r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Time-minimum 2 metre relative humidity +'mn2r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + } +#Surface roughness for heat +'srhe' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 47 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface roughness for moisture +'srmo' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 48 ; + typeOfFirstFixedSurface = 1 ; + } #Burned area 'fba' = { discipline = 2 ; @@ -4707,6 +4794,236 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Time-mean snow density +'mrsn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low vegetation cover +'mcvl' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 53 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high vegetation cover +'mcvh' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean sea ice area fraction +'mci' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean sea surface temperature +'msst' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean leaf area index, low vegetation +'mlai_lv' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean leaf area index, high vegetation +'mlai_hv' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column liquid water +'mtclw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column cloud ice water +'mtciw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre specific humidity +'m2sh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfSecondFixedSurface = 255 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake mix-layer temperature +'mlmlt' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean lake mix-layer depth +'mlmld' = { + discipline = 1 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 166 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre relative humidity +'m2r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean fraction of snow cover +'mfscov' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 121 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean soil temperature +'msot' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean U component of wind +'mu' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean V component of wind +'mv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean surface pressure +'msp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column water +'mtcw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean total column vertically-integrated water vapour +'mtcwv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean mean sea level pressure +'mmsl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean relative humidity +'mr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre U wind component +'m10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 10 metre V wind component +'m10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean 2 metre dewpoint temperature +'m2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean temperature of snow layer +'mtsn' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast surface roughness +'mfsr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast logarithm of surface roughness for heat +'mflsr' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Cross sectional area of flow in channel 'chcross' = { discipline = 1 ; @@ -6442,6 +6759,13 @@ parameterCategory = 3 ; parameterNumber = 19 ; } +#Leaf Area Index +'lai' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } #Accumulated surface upward short-wave radiation flux, clear sky 'auswrf_cs' = { discipline = 0 ; @@ -10007,11 +10331,11 @@ parameterCategory = 0 ; parameterNumber = 23 ; } -#Maximum individual wave height +#Envelop-maximum individual wave height 'hmax' = { discipline = 10 ; parameterCategory = 0 ; - parameterNumber = 24 ; + parameterNumber = 93 ; } #Model bathymetry 'wmb' = { @@ -10518,6 +10842,16 @@ scaleFactorOfFirstFixedSurface = 0 ; typeOfStatisticalProcessing = 0 ; } +#Mean of 10 metre wind speed +'mean10ws' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } #Lake total depth 'dl' = { discipline = 1 ; diff --git a/definitions/grib2/cfVarName.legacy.def b/definitions/grib2/cfVarName.legacy.def index 38c2868e6..40909c342 100644 --- a/definitions/grib2/cfVarName.legacy.def +++ b/definitions/grib2/cfVarName.legacy.def @@ -174,3 +174,9 @@ typeOfSecondFixedSurface = 168 ; typeOfStatisticalProcessing = 0 ; } +#Maximum individual wave height +'hmax' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 24 ; +} diff --git a/definitions/grib2/grib2LocalSectionNumber.98.table b/definitions/grib2/grib2LocalSectionNumber.98.table index dcb8e84cd..26d0b1ec0 100644 --- a/definitions/grib2/grib2LocalSectionNumber.98.table +++ b/definitions/grib2/grib2LocalSectionNumber.98.table @@ -21,6 +21,7 @@ 39 39 4DVar model errors for long window 4Dvar system 41 41 The Flood Awareness System 42 42 Lead Centre for Wave Forecast Verification +43 43 EERIE project MARS labelling 60 60 Ocean data analysis date and analysis time 192 192 Multiple ECMWF local definitions 300 300 Multi-dimensional parameters (deprecated) diff --git a/definitions/grib2/local.98.28.def b/definitions/grib2/local.98.28.def index eeb30d063..cf801b6fc 100644 --- a/definitions/grib2/local.98.28.def +++ b/definitions/grib2/local.98.28.def @@ -1,4 +1,6 @@ -# Local Definition 28 - COSMO local area EPS +# (C) Copyright 2005- ECMWF. + +# Local definition 28 - COSMO local area EPS unsigned[4] baseDateEPS : dump; unsigned[2] baseTimeEPS : dump; diff --git a/definitions/grib2/local.98.42.def b/definitions/grib2/local.98.42.def index 1bb73af47..48b891ed9 100644 --- a/definitions/grib2/local.98.42.def +++ b/definitions/grib2/local.98.42.def @@ -1,6 +1,6 @@ # (C) Copyright 2005- ECMWF. -# Definition 42 - WMO Lead Centre for Wave Forecast Verification (LC-WFV) +# Local definition 42 - WMO Lead Centre for Wave Forecast Verification (LC-WFV) codetable[2] lcwfvSuiteName "grib2/lcwfv_suiteName.table" : dump; alias mars.origin = lcwfvSuiteName; diff --git a/definitions/grib2/local.98.43.def b/definitions/grib2/local.98.43.def new file mode 100644 index 000000000..3728cd185 --- /dev/null +++ b/definitions/grib2/local.98.43.def @@ -0,0 +1,21 @@ +# (C) Copyright 2005- ECMWF. + +# Local definition 43 - Class ed EERIE project climate keywords + +# CMIP related activity keyword +codetable[2] activity "grib2/destine_activity.table" ; +alias mars.activity = activity; + +# CMIP related experiment keyword +codetable[2] experiment "grib2/destine_experiment.table" ; +alias mars.experiment = experiment; + +# Climate run realization keyword, which relates to an initial condition perturbation +unsigned[1] realization = 255 ; +alias mars.realization = realization; + +# Remove mars domain from this data +unalias mars.domain; + +# Add some padding just in case we want more keys in the future +pad padding_loc43(30); diff --git a/definitions/grib2/localConcepts/cerise/cfName.def b/definitions/grib2/localConcepts/cerise/cfName.def new file mode 100644 index 000000000..741709b44 --- /dev/null +++ b/definitions/grib2/localConcepts/cerise/cfName.def @@ -0,0 +1,53 @@ +# Automatically generated by ./create_def.pl, do not edit +#Snow depth +'lwe_thickness_of_surface_snow_amount' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + } +#Large-scale precipitation +'lwe_thickness_of_stratiform_precipitation_amount' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective precipitation +'lwe_thickness_of_convective_precipitation_amount' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snowfall +'lwe_thickness_of_snowfall_amount' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total cloud cover +'cloud_area_fraction' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Evaporation +'lwe_thickness_of_water_evaporation_amount' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; +} diff --git a/definitions/grib2/localConcepts/cerise/cfVarName.def b/definitions/grib2/localConcepts/cerise/cfVarName.def index 7861181b1..0ccc6c90f 100644 --- a/definitions/grib2/localConcepts/cerise/cfVarName.def +++ b/definitions/grib2/localConcepts/cerise/cfVarName.def @@ -1,4 +1,130 @@ # Automatically generated by ./create_def.pl, do not edit +#Surface runoff +'sro' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Sub-surface runoff +'ssro' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'mx2t24' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'mn2t24' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 24 ; + } +#Snow depth +'sd' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + } +#Large-scale precipitation +'lsp' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective precipitation +'cp' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snowfall +'sf' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total cloud cover +'tcc' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Evaporation +'e' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Low cloud cover +'lcc' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Runoff +'ro' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfStatisticalProcessing = 1 ; + } +#Total precipitation +'tp' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 1 ; + } +#Forecast albedo +'fal' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } #Mean surface runoff rate 'msror' = { localTablesVersion = 1 ; @@ -17,6 +143,73 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Potential evaporation +'pev' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-mean snow depth +'msd_m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'mlcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'mmcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'mhcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'mfal_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'mlsprt' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'cprate' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total snowfall rate 'mtsfr' = { localTablesVersion = 1 ; @@ -35,6 +228,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean runoff rate +'mrort' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total precipitation rate 'tprate' = { localTablesVersion = 1 ; @@ -43,4 +245,14 @@ parameterNumber = 193 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; + } +#Mean total cloud cover +'meantcc' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/cerise/name.def b/definitions/grib2/localConcepts/cerise/name.def index 7fb9dff6c..cac36cdea 100644 --- a/definitions/grib2/localConcepts/cerise/name.def +++ b/definitions/grib2/localConcepts/cerise/name.def @@ -1,4 +1,130 @@ # Automatically generated by ./create_def.pl, do not edit +#Surface runoff +'Surface runoff' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Sub-surface runoff +'Sub-surface runoff' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'Maximum temperature at 2 metres in the last 24 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'Minimum temperature at 2 metres in the last 24 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 24 ; + } +#Snow depth +'Snow depth' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective precipitation +'Convective precipitation' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snowfall +'Snowfall' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total cloud cover +'Total cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Evaporation +'Evaporation' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Low cloud cover +'Low cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Runoff +'Runoff' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfStatisticalProcessing = 1 ; + } +#Total precipitation +'Total precipitation' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 1 ; + } +#Forecast albedo +'Forecast albedo' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } #Mean surface runoff rate 'Mean surface runoff rate' = { localTablesVersion = 1 ; @@ -17,6 +143,73 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Potential evaporation +'Potential evaporation' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-mean snow depth +'Time-mean snow depth' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'Time-mean low cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'Time-mean medium cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'Time-mean high cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'Time-mean forecast albedo' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'Mean large-scale precipitation rate' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'Mean convective precipitation rate' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total snowfall rate 'Mean total snowfall rate' = { localTablesVersion = 1 ; @@ -35,6 +228,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean runoff rate +'Mean runoff rate' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total precipitation rate 'Mean total precipitation rate' = { localTablesVersion = 1 ; @@ -43,4 +245,14 @@ parameterNumber = 193 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; + } +#Mean total cloud cover +'Mean total cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/cerise/paramId.def b/definitions/grib2/localConcepts/cerise/paramId.def index f905e10e0..c4af1e971 100644 --- a/definitions/grib2/localConcepts/cerise/paramId.def +++ b/definitions/grib2/localConcepts/cerise/paramId.def @@ -1,4 +1,130 @@ # Automatically generated by ./create_def.pl, do not edit +#Surface runoff +'8' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Sub-surface runoff +'9' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'51' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'52' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 24 ; + } +#Snow depth +'141' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + } +#Large-scale precipitation +'142' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective precipitation +'143' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snowfall +'144' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total cloud cover +'164' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Evaporation +'182' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Low cloud cover +'186' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Runoff +'205' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfStatisticalProcessing = 1 ; + } +#Total precipitation +'228' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 1 ; + } +#Forecast albedo +'243' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } #Mean surface runoff rate '172008' = { localTablesVersion = 1 ; @@ -17,6 +143,73 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Potential evaporation +'228251' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-mean snow depth +'235141' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'235186' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'235187' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'235188' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'235243' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'172142' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'172143' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total snowfall rate '172144' = { localTablesVersion = 1 ; @@ -35,6 +228,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean runoff rate +'172205' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total precipitation rate '172228' = { localTablesVersion = 1 ; @@ -43,4 +245,14 @@ parameterNumber = 193 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; + } +#Mean total cloud cover +'228006' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/cerise/shortName.def b/definitions/grib2/localConcepts/cerise/shortName.def index 7861181b1..0ccc6c90f 100644 --- a/definitions/grib2/localConcepts/cerise/shortName.def +++ b/definitions/grib2/localConcepts/cerise/shortName.def @@ -1,4 +1,130 @@ # Automatically generated by ./create_def.pl, do not edit +#Surface runoff +'sro' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Sub-surface runoff +'ssro' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'mx2t24' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'mn2t24' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 24 ; + } +#Snow depth +'sd' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + } +#Large-scale precipitation +'lsp' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective precipitation +'cp' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snowfall +'sf' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total cloud cover +'tcc' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Evaporation +'e' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Low cloud cover +'lcc' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Runoff +'ro' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfStatisticalProcessing = 1 ; + } +#Total precipitation +'tp' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 1 ; + } +#Forecast albedo +'fal' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } #Mean surface runoff rate 'msror' = { localTablesVersion = 1 ; @@ -17,6 +143,73 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Potential evaporation +'pev' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-mean snow depth +'msd_m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'mlcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'mmcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'mhcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'mfal_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'mlsprt' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'cprate' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total snowfall rate 'mtsfr' = { localTablesVersion = 1 ; @@ -35,6 +228,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean runoff rate +'mrort' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total precipitation rate 'tprate' = { localTablesVersion = 1 ; @@ -43,4 +245,14 @@ parameterNumber = 193 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; + } +#Mean total cloud cover +'meantcc' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/cerise/units.def b/definitions/grib2/localConcepts/cerise/units.def index 36ab79310..afc663307 100644 --- a/definitions/grib2/localConcepts/cerise/units.def +++ b/definitions/grib2/localConcepts/cerise/units.def @@ -1,4 +1,130 @@ # Automatically generated by ./create_def.pl, do not edit +#Surface runoff +'m' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Sub-surface runoff +'m' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + indicatorOfUnitForTimeRange = 1 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 24 ; + } +#Snow depth +'m of water equivalent' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + } +#Large-scale precipitation +'m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective precipitation +'m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snowfall +'m of water equivalent' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Evaporation +'m of water equivalent' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Low cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Runoff +'m' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfStatisticalProcessing = 1 ; + } +#Total precipitation +'m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 255 ; + typeOfStatisticalProcessing = 1 ; + } +#Forecast albedo +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } #Mean surface runoff rate 'm s**-1' = { localTablesVersion = 1 ; @@ -17,6 +143,73 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Potential evaporation +'m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Time-mean snow depth +'m of water equivalent' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean large-scale precipitation rate +'m s**-1' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean convective precipitation rate +'m s**-1' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total snowfall rate 'm of water equivalent s**-1' = { localTablesVersion = 1 ; @@ -35,6 +228,15 @@ typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; } +#Mean runoff rate +'m s**-1' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Mean total precipitation rate 'm s**-1' = { localTablesVersion = 1 ; @@ -43,4 +245,14 @@ parameterNumber = 193 ; typeOfFirstFixedSurface = 1 ; typeOfStatisticalProcessing = 0 ; + } +#Mean total cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def index 9e62226b7..da85ede9c 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def @@ -2579,6 +2579,24 @@ parameterCategory = 171 ; parameterNumber = 122 ; } +#Mean surface runoff rate +'msror' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'mssror' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Volcanic ash aerosol mixing ratio 'aermr13' = { discipline = 192 ; @@ -13825,6 +13843,46 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Time-mean snow depth +'msd_m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'mlcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'mmcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'mhcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'mfal_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } #Covariance between 2-metre temperature and volumetric soil water layer 1 'covar_t2m_swvl1' = { localTablesVersion = 1 ; @@ -18987,21 +19045,30 @@ } #Mean large-scale precipitation rate 'mlsprt' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean convective precipitation rate 'cprate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean total snowfall rate 'mtsfr' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Boundary layer dissipation 'bldrate' = { @@ -19083,9 +19150,12 @@ } #Evaporation 'erate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean sunshine duration rate 'msdr' = { @@ -19113,9 +19183,12 @@ } #Mean runoff rate 'mrort' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Top net solar radiation, clear sky 'p208.172' = { @@ -19149,9 +19222,12 @@ } #Mean total precipitation rate 'tprate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Convective snowfall 'p239.172' = { @@ -21841,17 +21917,15 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Mean of 10 metre wind speed -'mean10ws' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; - } #Mean total cloud cover 'meantcc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } #Surface temperature significance 'sts' = { diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def index ab4af4326..93fff7f80 100644 --- a/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/cfVarName.legacy.def @@ -1369,3 +1369,33 @@ parameterCategory = 172 ; parameterNumber = 228 ; } +#Mean large-scale precipitation rate +'mlsprt' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; +} +#Mean convective precipitation rate +'cprate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; +} +#Mean runoff rate +'mrort' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; +} +#Mean total cloud cover +'meantcc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; +} +#Mean of 10 metre wind speed +'mean10ws' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def index 30466e4c5..3fd5fdf95 100644 --- a/definitions/grib2/localConcepts/ecmf/name.def +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -2579,6 +2579,24 @@ parameterCategory = 171 ; parameterNumber = 122 ; } +#Mean surface runoff rate +'Mean surface runoff rate' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'Mean sub-surface runoff rate' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Volcanic ash aerosol mixing ratio 'Volcanic ash aerosol mixing ratio' = { discipline = 192 ; @@ -13825,6 +13843,46 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Time-mean snow depth +'Time-mean snow depth' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'Time-mean low cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'Time-mean medium cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'Time-mean high cloud cover' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'Time-mean forecast albedo' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } #Covariance between 2-metre temperature and volumetric soil water layer 1 'Covariance between 2-metre temperature and volumetric soil water layer 1' = { localTablesVersion = 1 ; @@ -18987,21 +19045,30 @@ } #Mean large-scale precipitation rate 'Mean large-scale precipitation rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean convective precipitation rate 'Mean convective precipitation rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean total snowfall rate 'Mean total snowfall rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Boundary layer dissipation 'Boundary layer dissipation' = { @@ -19083,9 +19150,12 @@ } #Evaporation 'Evaporation' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean sunshine duration rate 'Mean sunshine duration rate' = { @@ -19113,9 +19183,12 @@ } #Mean runoff rate 'Mean runoff rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Top net solar radiation, clear sky 'Top net solar radiation, clear sky' = { @@ -19149,9 +19222,12 @@ } #Mean total precipitation rate 'Mean total precipitation rate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Convective snowfall 'Convective snowfall' = { @@ -21841,17 +21917,15 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Mean of 10 metre wind speed -'Mean of 10 metre wind speed' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; - } #Mean total cloud cover 'Mean total cloud cover' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } #Surface temperature significance 'Surface temperature significance' = { diff --git a/definitions/grib2/localConcepts/ecmf/name.legacy.def b/definitions/grib2/localConcepts/ecmf/name.legacy.def index c3e229a57..5881e995d 100644 --- a/definitions/grib2/localConcepts/ecmf/name.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/name.legacy.def @@ -1369,3 +1369,33 @@ parameterCategory = 172 ; parameterNumber = 228 ; } +#Mean large-scale precipitation rate +'Mean large-scale precipitation rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; +} +#Mean convective precipitation rate +'Mean convective precipitation rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; +} +#Mean runoff rate +'Mean runoff rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; +} +#Mean total cloud cover +'Mean total cloud cover' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; +} +#Mean of 10 metre wind speed +'Mean of 10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def index 6ba1493c0..4f9498d96 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -2579,6 +2579,24 @@ parameterCategory = 171 ; parameterNumber = 122 ; } +#Mean surface runoff rate +'172008' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'172009' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Volcanic ash aerosol mixing ratio '210013' = { discipline = 192 ; @@ -13825,6 +13843,46 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Time-mean snow depth +'235141' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'235186' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'235187' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'235188' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'235243' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } #Covariance between 2-metre temperature and volumetric soil water layer 1 '254001' = { localTablesVersion = 1 ; @@ -18987,21 +19045,30 @@ } #Mean large-scale precipitation rate '172142' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean convective precipitation rate '172143' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean total snowfall rate '172144' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Boundary layer dissipation '172145' = { @@ -19083,9 +19150,12 @@ } #Evaporation '172182' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean sunshine duration rate '172189' = { @@ -19113,9 +19183,12 @@ } #Mean runoff rate '172205' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Top net solar radiation, clear sky '172208' = { @@ -19149,9 +19222,12 @@ } #Mean total precipitation rate '172228' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Convective snowfall '172239' = { @@ -21841,17 +21917,15 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Mean of 10 metre wind speed -'228005' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; - } #Mean total cloud cover '228006' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } #Surface temperature significance '234139' = { diff --git a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def index aaf6da765..2326cf7b7 100644 --- a/definitions/grib2/localConcepts/ecmf/paramId.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/paramId.legacy.def @@ -1369,3 +1369,33 @@ parameterCategory = 172 ; parameterNumber = 228 ; } +#Mean large-scale precipitation rate +'172142' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; +} +#Mean convective precipitation rate +'172143' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; +} +#Mean runoff rate +'172205' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; +} +#Mean total cloud cover +'228006' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; +} +#Mean of 10 metre wind speed +'228005' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def index 1ec2bca2e..945244df8 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -2579,6 +2579,24 @@ parameterCategory = 171 ; parameterNumber = 122 ; } +#Mean surface runoff rate +'msror' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'mssror' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Volcanic ash aerosol mixing ratio 'aermr13' = { discipline = 192 ; @@ -13825,6 +13843,46 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Time-mean snow depth +'msd_m' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'mlcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'mmcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'mhcc_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'mfal_frac' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } #Covariance between 2-metre temperature and volumetric soil water layer 1 'covar_t2m_swvl1' = { localTablesVersion = 1 ; @@ -18987,21 +19045,30 @@ } #Mean large-scale precipitation rate 'mlsprt' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean convective precipitation rate 'cprate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean total snowfall rate 'mtsfr' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Boundary layer dissipation 'bldrate' = { @@ -19083,9 +19150,12 @@ } #Evaporation 'erate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean sunshine duration rate 'msdr' = { @@ -19113,9 +19183,12 @@ } #Mean runoff rate 'mrort' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Top net solar radiation, clear sky '~' = { @@ -19149,9 +19222,12 @@ } #Mean total precipitation rate 'tprate' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Convective snowfall '~' = { @@ -21841,17 +21917,15 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Mean of 10 metre wind speed -'mean10ws' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; - } #Mean total cloud cover 'meantcc' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } #Surface temperature significance 'sts' = { diff --git a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def index ec7ef430b..69ef9ec96 100644 --- a/definitions/grib2/localConcepts/ecmf/shortName.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/shortName.legacy.def @@ -1369,3 +1369,33 @@ parameterCategory = 172 ; parameterNumber = 228 ; } +#Mean large-scale precipitation rate +'mlsprt' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; +} +#Mean convective precipitation rate +'cprate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; +} +#Mean runoff rate +'mrort' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; +} +#Mean total cloud cover +'meantcc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; +} +#Mean of 10 metre wind speed +'mean10ws' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def index 506f9c365..d6286a028 100644 --- a/definitions/grib2/localConcepts/ecmf/units.def +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -2579,6 +2579,24 @@ parameterCategory = 171 ; parameterNumber = 122 ; } +#Mean surface runoff rate +'m s**-1' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Mean sub-surface runoff rate +'m s**-1' = { + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } #Volcanic ash aerosol mixing ratio 'kg kg**-1' = { discipline = 192 ; @@ -13825,6 +13843,46 @@ typeOfSecondFixedSurface = 255 ; typeOfStatisticalProcessing = 1 ; } +#Time-mean snow depth +'m of water equivalent' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 254 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean low cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean medium cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean high cloud cover +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Time-mean forecast albedo +'(0 - 1)' = { + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } #Covariance between 2-metre temperature and volumetric soil water layer 1 'K m**3 m**-3' = { localTablesVersion = 1 ; @@ -18987,21 +19045,30 @@ } #Mean large-scale precipitation rate 'm s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 142 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean convective precipitation rate 'm s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 143 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean total snowfall rate 'm of water equivalent s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 144 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Boundary layer dissipation 'W m**-2' = { @@ -19083,9 +19150,12 @@ } #Evaporation 'm of water equivalent s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 182 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Mean sunshine duration rate 's s**-1' = { @@ -19113,9 +19183,12 @@ } #Mean runoff rate 'm s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 205 ; + localTablesVersion = 1 ; + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Top net solar radiation, clear sky 'W m**-2' = { @@ -19149,9 +19222,12 @@ } #Mean total precipitation rate 'm s**-1' = { - discipline = 192 ; - parameterCategory = 172 ; - parameterNumber = 228 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; } #Convective snowfall 'm of water equivalent s**-1' = { @@ -21841,17 +21917,15 @@ parameterCategory = 220 ; parameterNumber = 228 ; } -#Mean of 10 metre wind speed -'m s**-1' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 5 ; - } #Mean total cloud cover '(0 - 1)' = { - discipline = 192 ; - parameterCategory = 228 ; - parameterNumber = 6 ; + localTablesVersion = 1 ; + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfStatisticalProcessing = 0 ; } #Surface temperature significance '%' = { diff --git a/definitions/grib2/localConcepts/ecmf/units.legacy.def b/definitions/grib2/localConcepts/ecmf/units.legacy.def index ca9926f81..36fe4bb79 100644 --- a/definitions/grib2/localConcepts/ecmf/units.legacy.def +++ b/definitions/grib2/localConcepts/ecmf/units.legacy.def @@ -1369,3 +1369,33 @@ parameterCategory = 172 ; parameterNumber = 228 ; } +#Mean large-scale precipitation rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; +} +#Mean convective precipitation rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; +} +#Mean runoff rate +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; +} +#Mean total cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; +} +#Mean of 10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; +} diff --git a/definitions/grib2/localConcepts/kwbc/cfVarName.def b/definitions/grib2/localConcepts/kwbc/cfVarName.def new file mode 100644 index 000000000..06c621dd5 --- /dev/null +++ b/definitions/grib2/localConcepts/kwbc/cfVarName.def @@ -0,0 +1,1915 @@ +# Automatically generated by ./create_def.pl, do not edit +#Convective available potential energy +'cape' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + } +#Snow phase change heat flux +'snohf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Condensate +'tcond' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + } +#Horizontal moisture convergence +'mconv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + } +#Categorical rain +'crain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Categorical freezing rain +'cfrzr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Categorical ice pellets +'cicep' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + } +#Categorical snow +'csnow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + } +#Convective precipitation rate +'cprat' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + } +#Percent frozen precipitation +'cpofp' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Potential evaporation +'pevap' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + } +#Snow cover +'snowc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + } +#Rain fraction of total cloud water +'frain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + } +#Rime factor +'rime' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#Total column integrated rain +'tcolr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Total column integrated snow +'tcols' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + } +#Water equivalent of accumulated snow depth (deprecated) +'sdwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + } +#Vertical speed shear +'vwsh' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + } +#Horizontal momentum flux +'mflx' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + } +#U-component storm motion +'ustm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + } +#V-component storm motion +'vstm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + } +#Drag coefficient +'cd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + } +#Frictional velocity +'fricv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 197 ; + } +#5-wave geopotential height +'wavh5' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#Zonal flux of gravity wave stress +'u-gwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#Meridional flux of gravity wave stress +'v-gwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#5-wave geopotential height anomaly +'wava5' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 197 ; + } +#Downward short-wave radiation flux +'dswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + } +#Upward short-wave radiation flux +'uswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + } +#UV index +'uvi' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 196 ; + } +#Downward long-wave radiation flux +'dlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + } +#Upward long-wave radiation flux +'ulwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 193 ; + } +#Non-convective cloud cover +'cdlyr' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + } +#Cloud work function +'cwork' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Convective cloud efficiency +'cuefi' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + } +#Total column-integrated cloud water +'tcolw' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + } +#Total column-integrated cloud ice +'tcoli' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 197 ; + } +#Total column-integrated condensate +'tcolc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + } +#Ice fraction of total condensate +'fice' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + } +#Surface lifted index +'lftx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + } +#Best (4-layer) lifted index +'lftx4' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + } +#Ozone mixing ratio +'o3mr' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + } +#Maximum snow albedo +'mxsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Snow free albedo +'snfalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } +#Seconds prior to initial reference time (defined in Section 1) +'tsec' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 194 ; + } +#Baseflow-groundwater runoff +'bgrun' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Storm surface runoff +'ssrun' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#Volumetric soil moisture content +'soilw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Ground heat flux +'gflux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#Moisture availability +'mstav' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#Exchange coefficient +'sfexc' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Plant canopy surface water +'cnwat' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Blackadar mixing length scale +'bmixl' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Canopy conductance +'ccond' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#Minimal stomatal resistance +'rsmin' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + } +#Solar parameter in canopy conductance +'rcs' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + } +#Temperature parameter in canopy conductance +'rct' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + } +#Soil moisture parameter in canopy conductance +'rcsol' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 205 ; + } +#Humidity parameter in canopy conductance +'rcq' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + } +#Liquid volumetric soil moisture (non-frozen) +'soill' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#Number of soil layers in root zone +'rlyrs' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#Transpiration stress-onset (soil moisture) +'smref' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Direct evaporation cease (soil moisture) +'smdry' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + } +#Soil porosity +'poros' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 197 ; + } +#Temperature tendency by all radiation +'ttrad' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#Relative Error Variance +'rev' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#Large Scale Condensate Heating rate +'lrghr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Deep Convective Heating rate +'cnvhr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Total Downward Heat Flux at Surface +'thflx' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Temperature Tendency By All Physics +'ttdia' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#Temperature Tendency By Non-radiation Physics +'ttphy' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#Standard Dev. of IR Temp. over 1x1 deg. area +'tsd1d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + } +#Shallow Convective Heating rate +'shahr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + } +#Vertical Diffusion Heating rate +'vdfhr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + } +#Potential temperature at top of viscous sublayer +'thz0' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + } +#Tropical Cyclone Heat Potential +'tchp' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + } +#Minimum Relative Humidity +'minrh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + } +#Total Icing Potential Diagnostic +'tipd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + } +#Number concentration for ice particles +'ncip' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + } +#Snow temperature +'snot' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Total column-integrated supercooled liquid water +'tclsw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 209 ; + } +#Total column-integrated melting ice +'tcolm' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 210 ; + } +#Evaporation - Precipitation +'emnp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 211 ; + } +#Sublimation (evaporation from snow) +'sbsno' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 212 ; + } +#Deep Convective Moistening Rate +'cnvmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 213 ; + } +#Shallow Convective Moistening Rate +'shamr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 214 ; + } +#Vertical Diffusion Moistening Rate +'vdfmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 215 ; + } +#Condensation Pressure of Parcali Lifted From Indicate Surface +'condp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 216 ; + } +#Large scale moistening rate +'lrgmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 217 ; + } +#Specific humidity at top of viscous sublayer +'qz0' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 218 ; + } +#Maximum specific humidity at 2m +'qmax' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 219 ; + } +#Minimum specific humidity at 2m +'qmin' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 220 ; + } +#Liquid precipitation (rainfall) +'arain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 221 ; + } +#Snow temperature, depth-avg +'snowt' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 222 ; + } +#Total precipitation (nearest grid point) +'apcpn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 223 ; + } +#Convective precipitation (nearest grid point) +'acpcpn' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 224 ; + } +#Freezing Rain +'frzr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 225 ; + } +#Latitude of U Wind Component of Velocity +'lauv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 198 ; + } +#Longitude of U Wind Component of Velocity +'louv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 199 ; + } +#Latitude of V Wind Component of Velocity +'lavv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 200 ; + } +#Longitude of V Wind Component of Velocity +'lovv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 201 ; + } +#Latitude of Pressure Point +'lapp' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 202 ; + } +#Longitude of Pressure Point +'lopp' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 203 ; + } +#Vertical Eddy Diffusivity Heat exchange +'vedh' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 204 ; + } +#Covariance between Meridional and Zonal Components of the wind. +'covmz' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 205 ; + } +#Covariance between Temperature and Zonal Components of the wind. +'covtz' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 206 ; + } +#Covariance between Temperature and Meridional Components of the wind. +'covtm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 207 ; + } +#Vertical Diffusion Zonal Acceleration +'vdfua' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 208 ; + } +#Vertical Diffusion Meridional Acceleration +'vdfva' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 209 ; + } +#Gravity wave drag zonal acceleration +'gwdu' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 210 ; + } +#Gravity wave drag meridional acceleration +'gwdv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 211 ; + } +#Convective zonal momentum mixing acceleration +'cnvu' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 212 ; + } +#Convective meridional momentum mixing acceleration +'cnvv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 213 ; + } +#Tendency of vertical velocity +'wtend' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 214 ; + } +#Omega (Dp/Dt) divide by density +'omgalf' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 215 ; + } +#Convective Gravity wave drag zonal acceleration +'cngwdu' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 216 ; + } +#Convective Gravity wave drag meridional acceleration +'cngwdv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 217 ; + } +#Velocity Point Model Surface +'lmv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 218 ; + } +#Potential Vorticity (Mass-Weighted) +'pvmww' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 219 ; + } +#MSLP (Eta model reduction) +'mslet' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#MSLP (MAPS System Reduction) +'mslma' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } +#3-hr pressure tendency (Std. Atmos. Reduction) +'tslsa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + } +#Pressure of level from which parcel was lifted +'plpl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + } +#X-gradient of Log Pressure +'lpsx' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + } +#Y-gradient of Log Pressure +'lpsy' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 202 ; + } +#X-gradient of Height +'hgtx' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 203 ; + } +#Y-gradient of Height +'hgty' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 204 ; + } +#Layer Thickness +'layth' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 205 ; + } +#Natural Log of Surface Pressure +'nlgsp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 206 ; + } +#Convective updraft mass flux +'cnvumf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 207 ; + } +#Convective downdraft mass flux +'cnvdmf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 208 ; + } +#Convective detrainment mass flux +'cnvdemf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 209 ; + } +#Mass Point Model Surface +'lmh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 210 ; + } +#Geopotential Height (nearest grid point) +'hgtn' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 211 ; + } +#Pressure (nearest grid point) +'presn' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 212 ; + } +#UV-B downward solar flux +'duvb' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 194 ; + } +#Clear sky UV-B downward solar flux +'cduvb' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 195 ; + } +#Clear Sky Downward Solar Flux +'csdsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 196 ; + } +#Solar Radiative Heating Rate +'swhr' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 197 ; + } +#Clear Sky Upward Solar Flux +'csusf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + } +#Cloud Forcing Net Solar Flux +'cfnsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 199 ; + } +#Visible Beam Downward Solar Flux +'vbdsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 200 ; + } +#Visible Diffuse Downward Solar Flux +'vddsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 201 ; + } +#Near IR Beam Downward Solar Flux +'nbdsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 202 ; + } +#Near IR Diffuse Downward Solar Flux +'nddsf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 203 ; + } +#Downward Total radiation Flux +'dtrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 204 ; + } +#Upward Total radiation Flux +'utrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 205 ; + } +#Long-Wave Radiative Heating Rate +'lwhr' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 194 ; + } +#Clear Sky Upward Long Wave Flux +'csulf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 195 ; + } +#Clear Sky Downward Long Wave Flux +'csdlf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 196 ; + } +#Cloud Forcing Net Long Wave Flux +'cfnlf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 197 ; + } +#Convective Cloud Mass Flux +'mflux' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + } +#Richardson Number +'ri' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 194 ; + } +#Convective Weather Detection Index +'cwdi' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 195 ; + } +#Updraft Helicity +'uphl' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 197 ; + } +#Leaf Area Index +'lai' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 198 ; + } +#Particulate matter (coarse) +'pmtc' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Particulate matter (fine) +'pmtf' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Particulate matter (fine) +'lpmtf' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Integrated column particulate matter (fine) +'lipmf' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Ozone Concentration (PPB) +'ozcon' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + } +#Categorical Ozone Concentration +'ozcat' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 194 ; + } +#Ozone vertical diffusion +'vdfoz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 195 ; + } +#Ozone production +'poz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 196 ; + } +#Ozone tendency +'toz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 197 ; + } +#Ozone production from temperature term +'pozt' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 198 ; + } +#Ozone production from col ozone term +'pozo' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 199 ; + } +#Derived radar reflectivity backscatter from rain +'refzr' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 192 ; + } +#Derived radar reflectivity backscatter from ice +'refzi' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 193 ; + } +#Derived radar reflectivity backscatter from parameterized convection +'refzc' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 194 ; + } +#Derived radar reflectivity +'refd' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 195 ; + } +#Maximum/Composite radar reflectivity +'refc' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 196 ; + } +#Lightning +'ltng' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 192 ; + } +#Slight risk convective outlook +'srcono' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 194 ; + } +#Moderate risk convective outlook +'mrcono' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 195 ; + } +#High risk convective outlook +'hrcono' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 196 ; + } +#Tornado probability +'torprob' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 197 ; + } +#Hail probability +'hailprob' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 198 ; + } +#Wind probability +'windprob' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 199 ; + } +#Significant Tornado probability +'storprob' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 200 ; + } +#Significant Hail probability +'shailpro' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 201 ; + } +#Significant Wind probability +'swindpro' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 202 ; + } +#Categorical Thunderstorm (1-yes, 0-no) +'tstmc' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 203 ; + } +#Number of mixed layers next to surface +'mixly' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 204 ; + } +#Flight Category +'flght' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 205 ; + } +#Confidence - Ceiling +'cicel' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 206 ; + } +#Confidence - Visibility +'civis' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 207 ; + } +#Confidence - Flight Category +'ciflt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 208 ; + } +#Low-Level aviation interest +'lavni' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 209 ; + } +#High-Level aviation interest +'havni' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 210 ; + } +#Visible, Black Sky Albedo +'sbsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 211 ; + } +#Visible, White Sky Albedo +'swsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 212 ; + } +#Near IR, Black Sky Albedo +'nbsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 213 ; + } +#Near IR, White Sky Albedo +'nwsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 214 ; + } +#Total Probability of Severe Thunderstorms (Days 2,3) +'prsvr' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 215 ; + } +#Total Probability of Extreme Severe Thunderstorms (Days 2,3) +'prsigsvr' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 216 ; + } +#Supercooled Large Droplet (SLD) Potential +'sipd' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 217 ; + } +#Radiative emissivity +'epsr' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 218 ; + } +#Turbulence Potential Forecast Index +'tpfi' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 219 ; + } +#Volcanic Ash Forecast Transport and Dispersion +'vaftd' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 232 ; + } +#Latitude (-90 to +90) +'nlat' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 192 ; + } +#East Longitude (0 - 360) +'elon' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 193 ; + } +#Model Layer number (From bottom up) +'mlyno' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 195 ; + } +#Latitude (nearest neighbor) (-90 to +90) +'nlatn' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 196 ; + } +#East Longitude (nearest neighbor) (0 - 360) +'elonn' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 197 ; + } +#Probability of Freezing Precipitation +'cpozp' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Probability of precipitation exceeding flash flood guidance values +'ppffg' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + } +#Probability of Wetting Rain, exceeding in 0.10 in a given time period +'cwr' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + } +#Vegetation Type +'vgtyp' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#Wilting Point +'wilt' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + } +#Rate of water dropping from canopy to ground +'rdrip' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 206 ; + } +#Ice-free water surface +'icwat' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 207 ; + } +#Surface exchange coefficients for T and Q divided by delta z +'akhs' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 208 ; + } +#Surface exchange coefficients for U and V divided by delta z +'akms' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 209 ; + } +#Vegetation canopy temperature +'vegt' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 210 ; + } +#Surface water storage +'sstor' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 211 ; + } +#Liquid soil moisture content (non-frozen) +'lsoil' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 212 ; + } +#Open water evaporation (standing water) +'ewatr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 213 ; + } +#Groundwater recharge +'gwrec' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 214 ; + } +#Flood plain recharge +'qrec' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 215 ; + } +#Roughness length for heat +'sfcrh' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 216 ; + } +#Normalized Difference Vegetation Index +'ndvi' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 217 ; + } +#Land-sea coverage (nearest neighbor) [land=1,sea=0] +'landn' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 218 ; + } +#Asymptotic mixing length scale +'amixl' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 219 ; + } +#Water vapor added by precip assimilation +'wvinc' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 220 ; + } +#Water condensate added by precip assimilation +'wcinc' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 221 ; + } +#Water Vapor Flux Convergence (Vertical Int) +'wvconv' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 222 ; + } +#Water Condensate Flux Convergence (Vertical Int) +'wcconv' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 223 ; + } +#Water Vapor Zonal Flux (Vertical Int) +'wvuflx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 224 ; + } +#Water Vapor Meridional Flux (Vertical Int) +'wvvflx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 225 ; + } +#Water Condensate Zonal Flux (Vertical Int) +'wcuflx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 226 ; + } +#Water Condensate Meridional Flux (Vertical Int) +'wcvflx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 227 ; + } +#Aerodynamic conductance +'acond' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 228 ; + } +#Canopy water evaporation +'evcw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 229 ; + } +#Transpiration +'trans' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 230 ; + } +#Surface Slope Type +'sltyp' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#Direct evaporation from bare soil +'evbs' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } +#Land Surface Precipitation Accumulation +'lspa' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + } +#Bare soil surface skin temperature +'baret' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + } +#Average surface skin temperature +'avsft' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + } +#Effective radiative skin temperature +'radt' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 202 ; + } +#Field Capacity +'fldcp' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 203 ; + } +#Scatterometer Estimated U Wind Component +'usct' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Scatterometer Estimated V Wind Component +'vsct' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Wave Steepness +'wstp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Ocean Mixed Layer U Velocity +'omlu' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Ocean Mixed Layer V Velocity +'omlv' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Barotropic U velocity +'ubaro' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + } +#Barotropic V velocity +'vbaro' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + } +#Storm Surge +'surge' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#Extra Tropical Storm Surge +'etsrg' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#Ocean Surface Elevation Relative to Geoid +'elevhtml' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#Sea Surface Height Relative to Geoid +'sshg' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Ocean Mixed Layer Potential Density (Reference 2000m) /dev/null +${examples_dir}/c_grib_multi_write ${data_dir}/sample.grib2 $tempGrib > /dev/null -${tools_dir}/grib_get -p step ${data_dir}/multi_sample.grib2 > ${data_dir}/multi_step.test +${tools_dir}/grib_get -p step $tempGrib > $tempText -diff ${data_dir}/multi_step.test ${data_dir}/multi_step.txt - -step=`${tools_dir}/grib_get -M -p step ${data_dir}/multi_sample.grib2` +reference=${data_dir}/multi_step.txt +diff $reference $tempText +# -M = Turn multi-field support off +step=`${tools_dir}/grib_get -M -p step $tempGrib` [ $step -eq 12 ] -rm -f ${data_dir}/multi_sample.grib2 ${data_dir}/multi_step.test +# Clean up +rm -f $tempGrib $tempText diff --git a/examples/C/grib_precision.c b/examples/C/grib_precision.c index ae39318b2..4f3657610 100644 --- a/examples/C/grib_precision.c +++ b/examples/C/grib_precision.c @@ -116,7 +116,7 @@ int main(int argc, char** argv) /* write the buffer in a file*/ if (fwrite(buffer, 1, size, out) != size) { - perror(argv[1]); + perror(outfile); exit(1); } diff --git a/examples/C/grib_set_keys.c b/examples/C/grib_set_keys.c index feea6731a..50aeff372 100644 --- a/examples/C/grib_set_keys.c +++ b/examples/C/grib_set_keys.c @@ -78,7 +78,7 @@ int main(int argc, char** argv) /* write the buffer in a file*/ if (fwrite(buffer, 1, size, out) != size) { - perror(argv[1]); + perror(outfile); exit(1); } diff --git a/examples/C/grib_set_missing.c b/examples/C/grib_set_missing.c index 82f698975..98395c120 100644 --- a/examples/C/grib_set_missing.c +++ b/examples/C/grib_set_missing.c @@ -77,7 +77,7 @@ int main(int argc, char** argv) /* write the buffer in a file*/ if (fwrite(buffer, 1, size, out) != size) { - perror(argv[1]); + perror(outfile); exit(1); } diff --git a/examples/C/grib_set_pv.c b/examples/C/grib_set_pv.c index 7ca4c32fe..e279aec8b 100644 --- a/examples/C/grib_set_pv.c +++ b/examples/C/grib_set_pv.c @@ -78,7 +78,7 @@ int main(int argc, char** argv) /* write the buffer in a file*/ if (fwrite(buffer, 1, size, out) != size) { - perror(argv[1]); + perror(outfile); exit(1); } diff --git a/examples/F90/CMakeLists.txt b/examples/F90/CMakeLists.txt index e4104bd83..30a3de0e9 100644 --- a/examples/F90/CMakeLists.txt +++ b/examples/F90/CMakeLists.txt @@ -56,7 +56,6 @@ if( HAVE_BUILD_TOOLS ) grib_clone grib_ecc-1316 bufr_attributes - bufr_copy_data bufr_clone bufr_expanded bufr_get_keys @@ -130,6 +129,12 @@ foreach( atest ${tests_sanity} ) RESOURCES bufr_read_scatterometer_f.ref COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${atest}.sh ) endforeach() + +if( HAVE_BUILD_TOOLS AND NOT CMAKE_CXX_COMPILER_ID MATCHES NVHPC ) + # Test which fails on Leonardo + list( APPEND tests_extra bufr_copy_data ) +endif() + foreach( atest ${tests_extra} ) ecbuild_add_test( TARGET eccodes_f_${atest} SOURCES ${atest}.f90 diff --git a/examples/F90/bufr_ecc-1019.f90 b/examples/F90/bufr_ecc-1019.f90 index 5974132e6..8bbceb900 100644 --- a/examples/F90/bufr_ecc-1019.f90 +++ b/examples/F90/bufr_ecc-1019.f90 @@ -18,7 +18,6 @@ program operator_3_test call codes_bufr_new_from_samples(ibufr,'BUFR4',iret) if (iret /= CODES_SUCCESS) then - print *,'ERROR creating BUFR from BUFR4' stop 1 endif diff --git a/examples/F90/bufr_ecc-1284.f90 b/examples/F90/bufr_ecc-1284.f90 index 69600a1c7..53b18b7c5 100644 --- a/examples/F90/bufr_ecc-1284.f90 +++ b/examples/F90/bufr_ecc-1284.f90 @@ -22,7 +22,6 @@ program bufr_encode call codes_bufr_new_from_samples(ibufr,'BUFR4',iret) if (iret/=CODES_SUCCESS) then - print *,'ERROR creating BUFR from BUFR4' stop 1 endif call codes_set(ibufr,'masterTableNumber',0) diff --git a/examples/F90/bufr_read_tempf.f90 b/examples/F90/bufr_read_tempf.f90 index 3d37c546e..99a8df742 100644 --- a/examples/F90/bufr_read_tempf.f90 +++ b/examples/F90/bufr_read_tempf.f90 @@ -25,9 +25,9 @@ program bufr_read_tempf integer :: ibufr integer :: i, count = 0 integer :: iflag - integer :: status_id, status_ht, status_time = 0, status_p - integer :: status_airt, status_dewt - integer :: status_rsno, status_rssoft, status_balloonwt + integer :: status_id, status_bl, status_num, status_ht, status_time = 0, status_p + integer :: status_airt, status_dewt, status_wdir, status_wsp + integer :: status_rsno, status_rssoft, status_balloonwt, statid_missing integer(kind=4) :: sizews integer(kind=4) :: blockNumber, stationNumber integer(kind=4) :: ymd, hms @@ -74,9 +74,10 @@ program bufr_read_tempf IF (status_id /= CODES_SUCCESS) statid = dropid ! call codes_is_missing(ibufr, 'shipOrMobileLandStationIdentifier', statid_missing) ! IF (statid_missing == 1) statid = "MISSING" - call codes_get(ibufr, 'blockNumber', blockNumber) - call codes_get(ibufr, 'stationNumber', stationNumber) - IF (blockNumber <= 99.0 .AND. stationNumber <= 1000) write (statid, '(I2.2,I3.3,3X)') blockNumber, stationNumber + blockNumber = 9999 + call codes_get(ibufr, 'blockNumber', blockNumber, status_bl) + call codes_get(ibufr, 'stationNumber', stationNumber, status_num) + IF (blockNumber <= 99 .AND. stationNumber <= 1000) write (statid, '(I2.2,I3.3,3X)') blockNumber, stationNumber call codes_get(ibufr, 'year', year) call codes_get(ibufr, 'month', month) @@ -118,8 +119,8 @@ program bufr_read_tempf call codes_get(ibufr, 'extendedVerticalSoundingSignificance', vssVal) call codes_get(ibufr, 'airTemperature', tVal, status_airt) call codes_get(ibufr, 'dewpointTemperature', tdVal, status_dewt) - call codes_get(ibufr, 'windDirection', wdirVal) - call codes_get(ibufr, 'windSpeed', wspVal) + call codes_get(ibufr, 'windDirection', wdirVal, status_wdir) + call codes_get(ibufr, 'windSpeed', wspVal, status_wsp) ! ---- Array sizes (pressure size can be larger - wind shear levels) sizews = size(wspVal) @@ -140,13 +141,21 @@ program bufr_read_tempf allocate(tdVal(sizews)) tdVal(:) = -999999999.0 END IF + IF (status_wdir /= CODES_SUCCESS) THEN + allocate(wdirVal(sizews)) + wdirVal(:) = -999999999.0 + END IF + IF (status_wsp /= CODES_SUCCESS) THEN + allocate(wspVal(sizews)) + wspVal(:) = -999999999.0 + END IF ! ---- Print the values -------------------------------- write (*, '(A,I7,A,A8,I9,I7.6,F9.3,F10.3,2F7.1,I4,I5)') 'Ob: ', count, & ' ', statid, ymd, hms, lat(1), lon(1), htg, htp, INT(sondeType), sizews IF (status_rsno == CODES_SUCCESS) write (*, '(A,A,A,F7.3)') & 'RS number/software/balloonwt: ', rsnumber, rssoftware, balloonwt - IF (status_ht == CODES_SUCCESS .AND. SIZE(lat) > 1) write (*, '(A,A,F9.3,F10.3,F7.1)') & + IF (status_ht == CODES_SUCCESS .AND. SIZE(lat) > 1) write (*, '(A,A10,F9.3,F10.3,F7.1)') & 'WMO list lat, lon, ht: ', statid, lat(2), lon(2), htec write (*, '(A)') 'level dtime dlat dlon pressure geopotH airTemp dewPtT windDir windSp signif' do i = 1, sizews diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c index e1835ae47..ce9298348 100644 --- a/fortran/grib_fortran.c +++ b/fortran/grib_fortran.c @@ -1604,9 +1604,8 @@ int any_f_new_from_loaded_(int* msgid, int* gid) /*****************************************************************************/ int codes_f_clear_loaded_from_file_(void) { - grib_context* c = grib_context_get_default(); /* grib_oarray_delete_content(c,binary_messages); */ - grib_oarray_delete(c, binary_messages); + grib_oarray_delete(grib_context_get_default(), binary_messages); return GRIB_SUCCESS; } @@ -1711,10 +1710,10 @@ int grib_f_headers_only_new_from_file_(int* fid, int* gid) } /*****************************************************************************/ -int grib_f_new_from_index_(int* iid, int* gid) +int grib_f_new_from_index_(int* index_id, int* gid) { int err = 0; - grib_index* i = get_index(*iid); + grib_index* i = get_index(*index_id); grib_handle *h = NULL; if (i) { @@ -1757,16 +1756,15 @@ int grib_f_index_new_from_file_(char* file, char* keys, int* gid, int lfile, int } /*****************************************************************************/ -int grib_f_index_add_file_(int* iid, char* file, int lfile) +int grib_f_index_add_file_(int* index_id, char* file, int lfile) { - grib_index *i = get_index(*iid); - int err = GRIB_SUCCESS; + grib_index *i = get_index(*index_id); char buf[1024]; if (!i) { return GRIB_INVALID_INDEX; } else { - err = grib_index_add_file(i,cast_char(buf,file,lfile)); + int err = grib_index_add_file(i,cast_char(buf,file,lfile)); return err; } } @@ -1928,9 +1926,9 @@ int grib_f_get_size_long_(int* gid, char* key, long* val, int len) } /*****************************************************************************/ -int grib_f_index_get_size_int_(int* gid, char* key, int* val, int len) +int grib_f_index_get_size_int_(int* index_id, char* key, int* val, int len) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); int err = GRIB_SUCCESS; char buf[1024]; size_t tsize = 0; @@ -1944,19 +1942,18 @@ int grib_f_index_get_size_int_(int* gid, char* key, int* val, int len) } } -int grib_f_index_get_size_long_(int* gid, char* key, long* val, int len) +int grib_f_index_get_size_long_(int* index_id, char* key, long* val, int len) { - grib_index *h = get_index(*gid); - int err = GRIB_SUCCESS; + grib_index *h = get_index(*index_id); char buf[1024]; size_t tsize = 0; - if(!h){ + if (!h){ return GRIB_INVALID_GRIB; - }else{ - err = grib_index_get_size(h, cast_char(buf,key,len), &tsize); + } else{ + int err = grib_index_get_size(h, cast_char(buf,key,len), &tsize); *val = tsize; - return err; + return err; } } @@ -2063,9 +2060,9 @@ int grib_f_get_byte_array_(int* gid, char* key, unsigned char *val, int* size, i } /*****************************************************************************/ -int grib_f_index_get_string_(int* gid, char* key, char* val, int *eachsize,int* size, int len) +int grib_f_index_get_string_(int* index_id, char* key, char* val, int *eachsize,int* size, int len) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); int err = GRIB_SUCCESS; int i; char buf[1024]; @@ -2104,23 +2101,23 @@ int grib_f_index_get_string_(int* gid, char* key, char* val, int *eachsize,int* } /*****************************************************************************/ -int grib_f_index_get_long_(int* gid, char* key, long *val, int* size, int len) +int grib_f_index_get_long_(int* index_id, char* key, long *val, int* size, int len) { - grib_index *h = get_index(*gid); - int err = GRIB_SUCCESS; + int err = 0; + grib_index* h = get_index(*index_id); char buf[1024]; size_t lsize = *size; - if(!h) return GRIB_INVALID_GRIB; + if (!h) return GRIB_INVALID_GRIB; err = grib_index_get_long(h, cast_char(buf,key,len), val, &lsize); *size = lsize; - return err; + return err; } /*****************************************************************************/ -int grib_f_index_get_int_(int* gid, char* key, int *val, int* size, int len) +int grib_f_index_get_int_(int* index_id, char* key, int *val, int* size, int len) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); int err = GRIB_SUCCESS; char buf[1024]; size_t lsize = *size, i = 0; @@ -2140,17 +2137,17 @@ int grib_f_index_get_int_(int* gid, char* key, int *val, int* size, int len) } /*****************************************************************************/ -int grib_f_index_get_real8_(int* gid, char* key, double *val, int* size, int len) +int grib_f_index_get_real8_(int* index_id, char* key, double *val, int* size, int len) { - grib_index *h = get_index(*gid); - int err = GRIB_SUCCESS; + int err = 0; + grib_index* h = get_index(*index_id); char buf[1024]; size_t lsize = *size; - if(!h) return GRIB_INVALID_GRIB; + if (!h) return GRIB_INVALID_GRIB; err = grib_index_get_double(h, cast_char(buf,key,len), val, &lsize); *size = lsize; - return err; + return err; } /*****************************************************************************/ @@ -2438,9 +2435,9 @@ int grib_f_set_real4_array_(int* gid, char* key, float* val, int* size, int len) } /*****************************************************************************/ -int grib_f_index_select_real8_(int* gid, char* key, double* val, int len) +int grib_f_index_select_real8_(int* index_id, char* key, double* val, int len) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); char buf[1024]; if(!h) return GRIB_INVALID_GRIB; @@ -2448,9 +2445,9 @@ int grib_f_index_select_real8_(int* gid, char* key, double* val, int len) } /*****************************************************************************/ -int grib_f_index_select_string_(int* gid, char* key, char* val, int len, int vallen) +int grib_f_index_select_string_(int* index_id, char* key, char* val, int len, int vallen) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); char buf[1024]; char bufval[1024]; @@ -2465,9 +2462,9 @@ int grib_f_index_select_string_(int* gid, char* key, char* val, int len, int val } /*****************************************************************************/ -int grib_f_index_select_int_(int* gid, char* key, int* val, int len) +int grib_f_index_select_int_(int* index_id, char* key, int* val, int len) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); long lval = *val; char buf[1024] = {0,}; @@ -2476,9 +2473,9 @@ int grib_f_index_select_int_(int* gid, char* key, int* val, int len) } /*****************************************************************************/ -int grib_f_index_select_long_(int* gid, char* key, long* val, int len) +int grib_f_index_select_long_(int* index_id, char* key, long* val, int len) { - grib_index *h = get_index(*gid); + grib_index *h = get_index(*index_id); char buf[1024] = {0,}; if (!h) return GRIB_INVALID_GRIB; diff --git a/samples/GRIB2.tmpl b/samples/GRIB2.tmpl index 5c7b111ce..e2f890a57 100644 Binary files a/samples/GRIB2.tmpl and b/samples/GRIB2.tmpl differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f040434b7..97cd81dfc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -80,6 +80,7 @@ list( APPEND eccodes_src_files grib_accessor_class_hash_array.cc grib_accessor_class_decimal_precision.cc grib_accessor_class_divdouble.cc + grib_accessor_class_multdouble.cc grib_accessor_class_budgdate.cc grib_accessor_class_validity_date.cc grib_accessor_class_validity_time.cc diff --git a/src/action_class_concept.cc b/src/action_class_concept.cc index 74fb25588..3f42fb9e5 100644 --- a/src/action_class_concept.cc +++ b/src/action_class_concept.cc @@ -128,7 +128,7 @@ grib_concept_value* action_concept_get_concept(grib_accessor* a) int action_concept_get_nofail(grib_accessor* a) { - grib_action_concept* self = (grib_action_concept*)a->creator; + const grib_action_concept* self = (grib_action_concept*)a->creator; return self->nofail; } @@ -397,9 +397,9 @@ int get_concept_condition_string(grib_handle* h, const char* key, const char* va grib_concept_condition* concept_condition = concept_value->conditions; if (strcmp(pValue, concept_value->name) == 0) { while (concept_condition) { - grib_expression* expression = concept_condition->expression; + //grib_expression* expression = concept_condition->expression; const char* condition_name = concept_condition->name; - Assert(expression); + //Assert(expression); if (concept_condition_expression_true(h, concept_condition, exprVal) && strcmp(condition_name, "one") != 0) { length += snprintf(result + length, 2048, "%s%s=%s", (length == 0 ? "" : ","), condition_name, exprVal); diff --git a/src/action_class_hash_array.cc b/src/action_class_hash_array.cc index b01077870..430fdd92a 100644 --- a/src/action_class_hash_array.cc +++ b/src/action_class_hash_array.cc @@ -168,13 +168,14 @@ grib_action* grib_action_create_hash_array(grib_context* context, a->hash_array = hash_array; if (hash_array) { - grib_hash_array_value* ha = hash_array; - grib_trie* index = grib_trie_new(context); - while (ha) { - ha->index = index; - grib_trie_insert_no_replace(index, ha->name, ha); - ha = ha->next; - } + grib_context_log(context, GRIB_LOG_FATAL, "%s: 'hash_array_list' not implemented", __func__); + // grib_hash_array_value* ha = hash_array; + // grib_trie* index = grib_trie_new(context); + // while (ha) { + // ha->index = index; + // grib_trie_insert_no_replace(index, ha->name, ha); + // ha = ha->next; + // } } act->name = grib_context_strdup_persistent(context, name); @@ -185,17 +186,12 @@ grib_action* grib_action_create_hash_array(grib_context* context, static void dump(grib_action* act, FILE* f, int lvl) { - int i = 0; - - for (i = 0; i < lvl; i++) - grib_context_print(act->context, f, " "); - - printf("hash_array(%s) { ", act->name); - printf("\n"); - - for (i = 0; i < lvl; i++) - grib_context_print(act->context, f, " "); - printf("}\n"); + // for (int i = 0; i < lvl; i++) + // grib_context_print(act->context, f, " "); + // printf("hash_array(%s) { \n", act->name); + // for (int i = 0; i < lvl; i++) + // grib_context_print(act->context, f, " "); + // printf("}\n"); } @@ -203,14 +199,16 @@ static void destroy(grib_context* context, grib_action* act) { grib_action_hash_array* self = (grib_action_hash_array*)act; - grib_hash_array_value* v = self->hash_array; - if (v) - grib_trie_delete(v->index); - while (v) { - grib_hash_array_value* n = v->next; - grib_hash_array_value_delete(context, v); - v = n; - } + // This is currently unset. So assert that it is NULL + const grib_hash_array_value* v = self->hash_array; + Assert(v == NULL); + // if (v) + // grib_trie_delete(v->index); + // while (v) { + // grib_hash_array_value* n = v->next; + // grib_hash_array_value_delete(context, v); + // v = n; + // } grib_context_free_persistent(context, self->masterDir); grib_context_free_persistent(context, self->localDir); @@ -338,6 +336,6 @@ grib_hash_array_value* get_hash_array(grib_handle* h, grib_action* a) const char* get_hash_array_full_path(grib_action* a) { - grib_action_hash_array* self = (grib_action_hash_array*)a; + const grib_action_hash_array* self = (grib_action_hash_array*)a; return self->full_path; } diff --git a/src/action_class_list.cc b/src/action_class_list.cc index 0a4b8a630..163a6da55 100644 --- a/src/action_class_list.cc +++ b/src/action_class_list.cc @@ -10,7 +10,6 @@ /*************************************************************************** * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" /* @@ -107,7 +106,7 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) long val = 0; if ((ret = grib_expression_evaluate_long(p->h, a->expression, &val)) != GRIB_SUCCESS) { - grib_context_log(p->h->context, GRIB_LOG_DEBUG, "List %s creating %d values unable to evaluate long", act->name, val); + grib_context_log(p->h->context, GRIB_LOG_DEBUG, "List %s creating %ld values: Unable to evaluate long", act->name, val); return ret; } @@ -161,12 +160,12 @@ static grib_action* reparse(grib_action* a, grib_accessor* acc, int* doit) { grib_action_list* self = (grib_action_list*)a; - int ret = 0; long val = 0; - if ((ret = grib_expression_evaluate_long(grib_handle_of_accessor(acc), self->expression, &val)) != GRIB_SUCCESS) { + int ret = grib_expression_evaluate_long(grib_handle_of_accessor(acc), self->expression, &val); + if (ret != GRIB_SUCCESS) { grib_context_log(acc->context, GRIB_LOG_ERROR, - "List %s creating %ld values, unable to evaluate long", acc->name, val); + "List %s creating %ld values: Unable to evaluate long", acc->name, val); } *doit = (val != acc->loop); diff --git a/src/action_class_noop.cc b/src/action_class_noop.cc index a898da06a..aa5196a46 100644 --- a/src/action_class_noop.cc +++ b/src/action_class_noop.cc @@ -73,16 +73,15 @@ grib_action* grib_action_create_noop(grib_context* context, const char* fname) { char buf[1024]; - grib_action_noop* a; grib_action_class* c = grib_action_class_noop; grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context, c->size); act->op = grib_context_strdup_persistent(context, "section"); act->cclass = c; - a = (grib_action_noop*)act; + grib_action_noop* a = (grib_action_noop*)act; act->context = context; - snprintf(buf, 1024, "_noop%p", (void*)a); + snprintf(buf, sizeof(buf), "_noop%p", (void*)a); act->name = grib_context_strdup_persistent(context, buf); diff --git a/src/action_class_remove.cc b/src/action_class_remove.cc index 26ab6760b..40f5079a7 100644 --- a/src/action_class_remove.cc +++ b/src/action_class_remove.cc @@ -111,17 +111,13 @@ static void remove_accessor(grib_accessor* a) a->next->previous = a->previous; grib_accessor_delete(s->h->context, a); - - return; } static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) { grib_action_remove* a = (grib_action_remove*)act; - grib_accessor* ga = NULL; - - ga = grib_find_accessor(p->h, grib_arguments_get_name(p->h, a->args, 0)); + grib_accessor* ga = grib_find_accessor(p->h, grib_arguments_get_name(p->h, a->args, 0)); if (ga) { remove_accessor(ga); @@ -134,15 +130,15 @@ static int create_accessor(grib_section* p, grib_action* act, grib_loader* h) static void dump(grib_action* act, FILE* f, int lvl) { - grib_action_remove* a = (grib_action_remove*)act; - - int i = 0; - - for (i = 0; i < lvl; i++) - grib_context_print(act->context, f, " "); - - grib_context_print(act->context, f, "remove %s as %s in %s\n", grib_arguments_get_name(0, a->args, 0), act->name, grib_arguments_get_name(0, a->args, 1)); + grib_context_log(act->context, GRIB_LOG_ERROR, "%s: dump not implemented", act->name); + // grib_action_remove* a = (grib_action_remove*)act; + // int i = 0; + // for (i = 0; i < lvl; i++) + // grib_context_print(act->context, f, " "); + // grib_context_print(act->context, f, "remove %s as %s in %s\n", + // grib_arguments_get_name(0, a->args, 0), act->name, grib_arguments_get_name(0, a->args, 1)); } + static void destroy(grib_context* context, grib_action* act) { grib_action_remove* a = (grib_action_remove*)act; @@ -151,4 +147,3 @@ static void destroy(grib_context* context, grib_action* act) grib_context_free_persistent(context, act->name); grib_context_free_persistent(context, act->op); } - diff --git a/src/action_class_set.cc b/src/action_class_set.cc index 1068181d5..fee2ca406 100644 --- a/src/action_class_set.cc +++ b/src/action_class_set.cc @@ -114,8 +114,8 @@ static int execute(grib_action* a, grib_handle* h) static void dump(grib_action* act, FILE* f, int lvl) { - int i = 0; - grib_action_set* self = (grib_action_set*)act; + int i = 0; + const grib_action_set* self = (grib_action_set*)act; for (i = 0; i < lvl; i++) grib_context_print(act->context, f, " "); grib_context_print(act->context, f, self->name); diff --git a/src/action_class_set_darray.cc b/src/action_class_set_darray.cc index 97211a219..bbf36f1d6 100644 --- a/src/action_class_set_darray.cc +++ b/src/action_class_set_darray.cc @@ -98,15 +98,14 @@ grib_action* grib_action_create_set_darray(grib_context* context, static int execute(grib_action* a, grib_handle* h) { - grib_action_set_darray* self = (grib_action_set_darray*)a; - + const grib_action_set_darray* self = (grib_action_set_darray*)a; return grib_set_double_array(h, self->name, self->darray->v, self->darray->n); } static void dump(grib_action* act, FILE* f, int lvl) { int i = 0; - grib_action_set_darray* self = (grib_action_set_darray*)act; + const grib_action_set_darray* self = (grib_action_set_darray*)act; for (i = 0; i < lvl; i++) grib_context_print(act->context, f, " "); grib_context_print(act->context, f, self->name); diff --git a/src/action_class_set_missing.cc b/src/action_class_set_missing.cc index 84b5fe085..03bd4ffc3 100644 --- a/src/action_class_set_missing.cc +++ b/src/action_class_set_missing.cc @@ -8,9 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/*************************************************************************** - * Enrico Fucile * - ***************************************************************************/ #include "grib_api_internal.h" /* This is used by make_class.pl @@ -73,8 +70,7 @@ static void init_class(grib_action_class* c) } /* END_CLASS_IMP */ -grib_action* grib_action_create_set_missing(grib_context* context, - const char* name) +grib_action* grib_action_create_set_missing(grib_context* context, const char* name) { char buf[1024]; @@ -98,19 +94,19 @@ grib_action* grib_action_create_set_missing(grib_context* context, static int execute(grib_action* a, grib_handle* h) { - grib_action_set_missing* self = (grib_action_set_missing*)a; - + const grib_action_set_missing* self = (grib_action_set_missing*)a; return grib_set_missing(h, self->name); } static void dump(grib_action* act, FILE* f, int lvl) { - int i = 0; - grib_action_set_missing* self = (grib_action_set_missing*)act; - for (i = 0; i < lvl; i++) - grib_context_print(act->context, f, " "); - grib_context_print(act->context, f, self->name); - printf("\n"); + grib_context_log(act->context, GRIB_LOG_ERROR, "%s %s(): Not implemented", __FILE__, __func__); + // int i = 0; + // const grib_action_set_missing* self = (grib_action_set_missing*)act; + // for (i = 0; i < lvl; i++) + // grib_context_print(act->context, f, " "); + // grib_context_print(act->context, f, self->name); + // printf("\n"); } static void destroy(grib_context* context, grib_action* act) diff --git a/src/action_class_set_sarray.cc b/src/action_class_set_sarray.cc index 3b670aa87..bc51c2475 100644 --- a/src/action_class_set_sarray.cc +++ b/src/action_class_set_sarray.cc @@ -72,9 +72,7 @@ static void init_class(grib_action_class* c) } /* END_CLASS_IMP */ -grib_action* grib_action_create_set_sarray(grib_context* context, - const char* name, - grib_sarray* sarray) +grib_action* grib_action_create_set_sarray(grib_context* context, const char* name, grib_sarray* sarray) { char buf[1024]; @@ -100,14 +98,13 @@ grib_action* grib_action_create_set_sarray(grib_context* context, static int execute(grib_action* a, grib_handle* h) { grib_action_set_sarray* self = (grib_action_set_sarray*)a; - return grib_set_string_array(h, self->name, (const char**)self->sarray->v, self->sarray->n); } static void dump(grib_action* act, FILE* f, int lvl) { - int i = 0; - grib_action_set_sarray* self = (grib_action_set_sarray*)act; + int i = 0; + const grib_action_set_sarray* self = (grib_action_set_sarray*)act; for (i = 0; i < lvl; i++) grib_context_print(act->context, f, " "); grib_context_print(act->context, f, self->name); diff --git a/src/action_class_template.cc b/src/action_class_template.cc index 8f240ea27..79fd2aeaf 100644 --- a/src/action_class_template.cc +++ b/src/action_class_template.cc @@ -10,7 +10,6 @@ /*************************************************************************** * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" @@ -115,19 +114,17 @@ static void dump(grib_action* act, FILE* f, int lvl) grib_context_print(act->context, f, "Template %s %s\n", act->name, a->arg); } -grib_action* get_empty_template(grib_context* c, int* err) +static grib_action* get_empty_template(grib_context* c, int* err) { char fname[] = "empty_template.def"; - char* path = 0; - - path = grib_context_full_defs_path(c, fname); + const char* path = grib_context_full_defs_path(c, fname); if (path) { *err = GRIB_SUCCESS; return grib_parse_file(c, path); } else { *err = GRIB_INTERNAL_ERROR; - grib_context_log(c, GRIB_LOG_ERROR, "get_empty_template: unable to get template %s", fname); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to get template %s", __func__, fname); return NULL; } } diff --git a/src/action_class_transient_darray.cc b/src/action_class_transient_darray.cc index 9990beb41..673f83502 100644 --- a/src/action_class_transient_darray.cc +++ b/src/action_class_transient_darray.cc @@ -122,8 +122,8 @@ static int execute(grib_action* act, grib_handle* h) static void dump(grib_action* act, FILE* f, int lvl) { - int i = 0; - grib_action_transient_darray* self = (grib_action_transient_darray*)act; + int i = 0; + const grib_action_transient_darray* self = (grib_action_transient_darray*)act; for (i = 0; i < lvl; i++) grib_context_print(act->context, f, " "); grib_context_print(act->context, f, self->name); diff --git a/src/bufr_util.cc b/src/bufr_util.cc index 0b4ffb0e7..95ff8eeb2 100644 --- a/src/bufr_util.cc +++ b/src/bufr_util.cc @@ -220,7 +220,7 @@ static int bufr_decode_extra_rdb_keys(const void* message, long offset_section2, DEBUG_ASSERT(hdr->ecmwfLocalSectionPresent); - if (hdr->rdbType == 2 || hdr->rdbType == 3 || hdr->rdbType == 8 || hdr->rdbType == 12) { + if (hdr->rdbType == 2 || hdr->rdbType == 3 || hdr->rdbType == 8 || hdr->rdbType == 12 || hdr->rdbType == 30) { isSatelliteType = true; } if (isSatelliteType || hdr->numberOfSubsets > 1) { diff --git a/src/codes_util.cc b/src/codes_util.cc index 1b73432f8..57613109a 100644 --- a/src/codes_util.cc +++ b/src/codes_util.cc @@ -213,6 +213,37 @@ int is_date_valid(long year, long month, long day, long hour, long minute, doubl return 1; } +// Return 1 if input date is valid. Otherwise 0 +// Note: In the 24-hour time notation, the day begins at midnight, 00:00 or 0:00, +// and the last minute of the day begins at 23:59. +// Where convenient, the notation 24:00 may also be used to refer to midnight +// at the end of a given date — that is, 24:00 of one day is the same time +// as 00:00 of the following day +int is_time_valid(long number) +{ + // Number should be 4 digits i.e., HHMM + if (number < 0 || number > 9999) { + return 0; + } + + // Extract hours and minutes + long hours = number / 100; // Get the first two digits as hours + long minutes = number % 100; // Get the last two digits as minutes + + // Check if hours are within the valid range (00-24) + if (hours < 0 || hours > 24) { + return 0; + } + + // Check if minutes are within the valid range (00-59) + if (minutes < 0 || minutes > 59) { + return 0; + } + + // All checks pass + return 1; +} + static float float_epsilon(void) { float floatEps = 1.0; diff --git a/src/grib_concept_index.cc b/src/deprecated/grib_concept_index.cc similarity index 66% rename from src/grib_concept_index.cc rename to src/deprecated/grib_concept_index.cc index 9cb8f0d1d..8ca1794a4 100644 --- a/src/grib_concept_index.cc +++ b/src/deprecated/grib_concept_index.cc @@ -1,30 +1,49 @@ -/* - * (C) Copyright 2005- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * - * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by - * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. - */ - -/* - * Description: concept index - * - */ - #include "grib_api_internal.h" +typedef struct grib_concept_index_keys grib_concept_index_keys; +typedef struct grib_concept_index grib_concept_index; +typedef struct grib_conditions_tree grib_conditions_tree; +typedef struct grib_concept_index_entry grib_concept_index_entry; +typedef struct grib_concept_index_keys grib_concept_index_keys; + +struct grib_concept_index_entry { + char* name; + char* value; + int type; + grib_concept_index_entry* next; +}; + +struct grib_concept_index_keys { + char* name; + int type; + grib_concept_index_keys* next; +}; + +struct grib_concept_index { + grib_context* context; + grib_concept_index_keys* keys; + grib_conditions_tree* conditions; +}; + +struct grib_conditions_tree { + char* value; + void* object; + grib_conditions_tree* next; + grib_conditions_tree* next_key; +}; + + static grib_concept_index_entry* index_entry_new(grib_context* c, grib_concept_index_keys* keys) { grib_concept_index_entry* entry = NULL; + grib_concept_index_entry* e; Assert(keys); if (!c) c = grib_context_get_default(); - entry = grib_context_malloc_clear(c, sizeof(grib_concept_index_entry)); + entry = (grib_concept_index_entry*)grib_context_malloc_clear(c, sizeof(grib_concept_index_entry)); if (!entry) grib_context_log(c, GRIB_LOG_FATAL, "grib_concept_index_entry unable to allocate"); e = entry; @@ -32,7 +51,7 @@ static grib_concept_index_entry* index_entry_new(grib_context* c, grib_concept_i while (keys && keys->name) { e->name = grib_context_strdup(c, keys->name); e->type = keys->type; - e->next = grib_context_malloc_clear(c, sizeof(grib_concept_index_entry)); + e->next = (grib_concept_index_entry*)grib_context_malloc_clear(c, sizeof(grib_concept_index_entry)); if (!e->next) grib_context_log(c, GRIB_LOG_FATAL, "grib_concept_index_entry unable to allocate"); @@ -65,17 +84,17 @@ static int index_insert_entry(grib_concept_index* index, grib_concept_index_entr while (keys->name) { if (!cur) { - cur = grib_context_malloc_clear_persistent(index->context, sizeof(grib_conditions_tree)); + cur = (grib_conditions_tree*)grib_context_malloc_clear_persistent(index->context, sizeof(grib_conditions_tree)); if (!cur) grib_context_log(index->context, GRIB_LOG_FATAL, "index_insert_entry unable to allocate"); prev->next = cur; } - value = entry->value ? entry->value : "*"; + char* value = entry->value ? entry->value : (char*)"*"; while (cur && (!cur->value || (found = !strcmp(cur->value, value)) == 0)) cur = cur->next; if (!found) { - cur->next = grib_context_malloc_clear_persistent(index->context, sizeof(grib_conditions_tree)); + cur->next = (grib_conditions_tree*)grib_context_malloc_clear_persistent(index->context, sizeof(grib_conditions_tree)); Assert(cur->next); cur = cur->next; } @@ -103,6 +122,9 @@ static void index_add_conditions(grib_concept_index* index, grib_concept_conditi char s[512] = {0,}; grib_concept_index_entry* e; grib_concept_index_entry* entry = index_entry_new(index->context, index->keys); + long lres; + double dres; + int err = 0; while (c) { size_t size = 512; @@ -136,7 +158,7 @@ static void index_add_conditions(grib_concept_index* index, grib_concept_conditi e->value = grib_context_strdup(index->context, s); if (!e->name) { e->name = grib_context_strdup(index->context, c->name); - e->next = grib_context_malloc_clear_persistent(index->context, sizeof(grib_concept_index_entry)); + e->next = (grib_concept_index_entry*)grib_context_malloc_clear_persistent(index->context, sizeof(grib_concept_index_entry)); if (!e->next) grib_context_log(index->context, GRIB_LOG_FATAL, "index_add_conditions unable to allocate"); } @@ -156,14 +178,13 @@ grib_concept_index* grib_concept_index_new_from_concept(grib_context* c, grib_co if (!c) c = grib_context_get_default(); - index = grib_context_malloc_clear_persistent(c, sizeof(grib_concept_index)); - index->keys = grib_context_malloc_clear_persistent(c, sizeof(grib_concept_index_key)); - index->conditions = grib_context_malloc_clear_persistent(c, sizeof(grib_conditions_tree)); - index->conditions = grib_context_malloc_clear_persistent(c, sizeof(grib_conditions_tree)); + index = (grib_concept_index*)grib_context_malloc_clear_persistent(c, sizeof(grib_concept_index)); + index->keys = (grib_concept_index_keys*)grib_context_malloc_clear_persistent(c, sizeof(grib_concept_index_keys)); + index->conditions = (grib_conditions_tree*)grib_context_malloc_clear_persistent(c, sizeof(grib_conditions_tree)); index->context = c; while (concept) { - index_add_conditions(index, concept->conditions, err); + index_add_conditions(index, concept->conditions); concept = concept->next; } diff --git a/src/grib_expression_class_column.cc b/src/deprecated/grib_expression_class_column.cc similarity index 96% rename from src/grib_expression_class_column.cc rename to src/deprecated/grib_expression_class_column.cc index b683b93a5..fefdaca0a 100644 --- a/src/grib_expression_class_column.cc +++ b/src/deprecated/grib_expression_class_column.cc @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/************************************** - * Enrico Fucile - **************************************/ - - #include "grib_api_internal.h" /* @@ -89,7 +84,7 @@ static void init_class(grib_expression_class* c) static const char* get_name(grib_expression* g) { - grib_expression_column* e = (grib_expression_column*)g; + const grib_expression_column* e = (grib_expression_column*)g; return e->name; } @@ -131,7 +126,6 @@ static void destroy(grib_context* c, grib_expression* g) grib_context_free_persistent(c, e->name); } - grib_expression* new_column_expression(grib_context* c, const char* name) { grib_expression_column* e = grib_context_malloc_clear_persistent(c, sizeof(grib_expression_column)); diff --git a/src/grib_expression_class_constant.cc b/src/deprecated/grib_expression_class_constant.cc similarity index 87% rename from src/grib_expression_class_constant.cc rename to src/deprecated/grib_expression_class_constant.cc index 7bd817678..bedacd013 100644 --- a/src/grib_expression_class_constant.cc +++ b/src/deprecated/grib_expression_class_constant.cc @@ -8,11 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/************************************** - * Enrico Fucile - **************************************/ - - #include "grib_api_internal.h" /* @@ -22,7 +17,7 @@ CLASS = expression IMPLEMENTS = destroy IMPLEMENTS = native_type - IMPLEMENTS = evaluate;print + IMPLEMENTS = print IMPLEMENTS = add_dependency MEMBERS = long value END_CLASS_DEF @@ -83,15 +78,9 @@ static void init_class(grib_expression_class* c) } /* END_CLASS_IMP */ -static long evaluate(grib_expression* g, grib_handle* h) -{ - grib_expression_constant* e = (grib_expression_constant*)g; - return e->value; -} - static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_constant* e = (grib_expression_constant*)g; + const grib_expression_constant* e = (grib_expression_constant*)g; printf("constant(%ld)", e->value); } @@ -100,7 +89,6 @@ static void destroy(grib_context* c, grib_expression* g) /* grib_expression_constant* e = (grib_expression_constant*)g; */ } - static void add_dependency(grib_expression* g, grib_accessor* observer) { /* grib_expression_constant* e = (grib_expression_constant*)g; */ diff --git a/src/grib_loader_from_array.cc b/src/deprecated/grib_loader_from_array.cc similarity index 100% rename from src/grib_loader_from_array.cc rename to src/deprecated/grib_loader_from_array.cc diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 307f29330..e98ae83c2 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -1,3 +1,13 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + #pragma once #ifdef ECCODES_ON_WINDOWS @@ -26,90 +36,80 @@ grib_action* grib_action_create_if(grib_context* context, grib_expression* expre grib_action* grib_action_create_switch(grib_context* context, grib_arguments* args, grib_case* Case, grib_action* Default); grib_case* grib_case_new(grib_context* c, grib_arguments* values, grib_action* action); -/* grib_accessor_class_g1fcperiod.cc */ - -/* grib_accessor_class_g1end_of_interval_monthly.cc */ - -/* grib_accessor_class_mars_param.cc */ - -/* action_class_section.cc */ - -/* action_class_list.cc*/ +/* action_class_list.cc */ grib_action* grib_action_create_list(grib_context* context, const char* name, grib_expression* expression, grib_action* block); -/* action_class_while.cc*/ +/* action_class_while.cc */ grib_action* grib_action_create_while(grib_context* context, grib_expression* expression, grib_action* block); -/* action_class_put.cc*/ +/* action_class_put.cc */ grib_action* grib_action_create_put(grib_context* context, const char* name, grib_arguments* args); -/* action_class_meta.cc*/ +/* action_class_meta.cc */ grib_action* grib_action_create_meta(grib_context* context, const char* name, const char* op, grib_arguments* params, grib_arguments* default_value, unsigned long flags, const char* name_space); -/* action_class_remove.cc*/ +/* action_class_remove.cc */ grib_action* grib_action_create_remove(grib_context* context, grib_arguments* args); -/* action_class_rename.cc*/ +/* action_class_rename.cc */ grib_action* grib_action_create_rename(grib_context* context, char* the_old, char* the_new); -/* action_class_assert.cc*/ +/* action_class_assert.cc */ grib_action* grib_action_create_assert(grib_context* context, grib_expression* expression); -/* action_class_template.cc*/ +/* action_class_template.cc */ grib_action* grib_action_create_template(grib_context* context, int nofail, const char* name, const char* arg1); -grib_action* get_empty_template(grib_context* c, int* err); -/* action_class_trigger.cc*/ +/* action_class_trigger.cc */ grib_action* grib_action_create_trigger(grib_context* context, grib_arguments* args, grib_action* block); -/* action_class_when.cc*/ +/* action_class_when.cc */ grib_action* grib_action_create_when(grib_context* context, grib_expression* expression, grib_action* block_true, grib_action* block_false); -/* action_class_concept.cc*/ +/* action_class_concept.cc */ grib_concept_value* action_concept_get_concept(grib_accessor* a); int action_concept_get_nofail(grib_accessor* a); grib_action* grib_action_create_concept(grib_context* context, const char* name, grib_concept_value* concept_value, const char* basename, const char* name_space, const char* defaultkey, const char* masterDir, const char* localDir, const char* ecmfDir, int flags, int nofail); int get_concept_condition_string(grib_handle* h, const char* key, const char* value, char* result); -/* action_class_hash_array.cc*/ +/* action_class_hash_array.cc */ grib_action* grib_action_create_hash_array(grib_context* context, const char* name, grib_hash_array_value* hash_array, const char* basename, const char* name_space, const char* defaultkey, const char* masterDir, const char* localDir, const char* ecmfDir, int flags, int nofail); grib_hash_array_value* get_hash_array(grib_handle* h, grib_action* a); const char* get_hash_array_full_path(grib_action* a); -/* action_class_set.cc*/ +/* action_class_set.cc */ grib_action* grib_action_create_set(grib_context* context, const char* name, grib_expression* expression, int nofail); -/* action_class_set_darray.cc*/ +/* action_class_set_darray.cc */ grib_action* grib_action_create_set_darray(grib_context* context, const char* name, grib_darray* darray); -/* action_class_set_sarray.cc*/ +/* action_class_set_sarray.cc */ grib_action* grib_action_create_set_sarray(grib_context* context, const char* name, grib_sarray* sarray); -/* action_class_noop.cc*/ +/* action_class_noop.cc */ grib_action* grib_action_create_noop(grib_context* context, const char* fname); -/* action_class_write.cc*/ +/* action_class_write.cc */ grib_action* grib_action_create_write(grib_context* context, const char* name, int append, int padtomultiple); -/* action_class_print.cc*/ +/* action_class_print.cc */ grib_action* grib_action_create_print(grib_context* context, const char* name, char* outname); -/* action_class_close.cc*/ +/* action_class_close.cc */ grib_action* grib_action_create_close(grib_context* context, char* filename); -/* action_class_variable.cc*/ +/* action_class_variable.cc */ grib_action* grib_action_create_variable(grib_context* context, const char* name, const char* op, const long len, grib_arguments* params, grib_arguments* default_value, int flags, const char* name_space); -/* action_class_modify.cc*/ +/* action_class_modify.cc */ grib_action* grib_action_create_modify(grib_context* context, const char* name, long flags); -/* action_class_transient_darray.cc*/ +/* action_class_transient_darray.cc */ grib_action* grib_action_create_transient_darray(grib_context* context, const char* name, grib_darray* darray, int flags); -/* grib_accessor.cc*/ +/* grib_accessor.cc */ void grib_accessor_dump(grib_accessor* a, grib_dumper* f); int grib_pack_missing(grib_accessor* a); -int grib_pack_zero(grib_accessor* a); int grib_is_missing_internal(grib_accessor* a); int grib_pack_double(grib_accessor* a, const double* v, size_t* len); int grib_pack_float(grib_accessor* a, const float* v, size_t* len); @@ -151,30 +151,24 @@ grib_accessor* grib_next_accessor(grib_accessor* a); void grib_resize(grib_accessor* a, size_t new_size); int grib_compare_accessors(grib_accessor* a1, grib_accessor* a2, int compare_flags); int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_if_clash); -int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr); -int grib_accessor_delete_attribute(grib_accessor* a, const char* name); -grib_accessor* grib_accessor_get_attribute_by_index(grib_accessor* a, int index); -const char* grib_accessor_get_name(grib_accessor* a); -grib_accessor* ecc__grib_accessor_get_attribute(grib_accessor* a, const char* name, int* index); +grib_accessor* grib_accessor_get_attribute_index(grib_accessor* a, const char* name, int* index); int grib_accessor_has_attributes(grib_accessor* a); grib_accessor* grib_accessor_get_attribute(grib_accessor* a, const char* name); grib_accessors_list* grib_accessors_list_create(grib_context* c); void grib_accessors_list_push(grib_accessors_list* al, grib_accessor* a, int rank); grib_accessors_list* grib_accessors_list_last(grib_accessors_list* al); -grib_accessors_list* grib_accessors_list_find(grib_accessors_list* al, const grib_accessor* a); void grib_accessors_list_delete(grib_context* c, grib_accessors_list* al); -/* grib_concept.cc*/ +/* grib_concept.cc */ grib_concept_value* grib_concept_value_new(grib_context* c, const char* name, grib_concept_condition* conditions); void grib_concept_value_delete(grib_context* c, grib_concept_value* v); grib_concept_condition* grib_concept_condition_new(grib_context* c, const char* name, grib_expression* expression, grib_iarray* iarray); void grib_concept_condition_delete(grib_context* c, grib_concept_condition* v); -/* grib_hash_array.cc*/ +/* grib_hash_array.cc */ grib_hash_array_value* grib_integer_hash_array_value_new(grib_context* c, const char* name, grib_iarray* array); -void grib_hash_array_value_delete(grib_context* c, grib_hash_array_value* v); -/* grib_bufr_descriptor.cc*/ +/* grib_bufr_descriptor.cc */ bufr_descriptor* grib_bufr_descriptor_new(grib_accessor* tables_accessor, int code, int silent, int* err); bufr_descriptor* grib_bufr_descriptor_clone(bufr_descriptor* d); int grib_bufr_descriptor_set_code(bufr_descriptor* v, int code); @@ -182,7 +176,7 @@ void grib_bufr_descriptor_set_scale(bufr_descriptor* v, long scale); int grib_bufr_descriptor_can_be_missing(const bufr_descriptor* v); void grib_bufr_descriptor_delete(bufr_descriptor* v); -/* grib_bufr_descriptors_array.cc*/ +/* grib_bufr_descriptors_array.cc */ bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t size, size_t incsize); bufr_descriptor* grib_bufr_descriptors_array_pop_front(bufr_descriptors_array* a); bufr_descriptors_array* grib_bufr_descriptors_array_push(bufr_descriptors_array* v, bufr_descriptor* val); @@ -192,7 +186,7 @@ void grib_bufr_descriptors_array_delete(bufr_descriptors_array* v); void grib_bufr_descriptors_array_delete_array(bufr_descriptors_array* v); size_t grib_bufr_descriptors_array_used_size(bufr_descriptors_array* v); -/* grib_darray.cc*/ +/* grib_darray.cc */ void grib_darray_print(const char* title, const grib_darray* darray); grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize); grib_darray* grib_darray_push(grib_context* c, grib_darray* v, double val); @@ -200,7 +194,7 @@ void grib_darray_delete(grib_context* c, grib_darray* v); int grib_darray_is_constant(grib_darray* v, double epsilon); size_t grib_darray_used_size(grib_darray* v); -/* grib_sarray.cc*/ +/* grib_sarray.cc */ void grib_sarray_print(const char* title, const grib_sarray* sarray); grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize); grib_sarray* grib_sarray_push(grib_context* c, grib_sarray* v, char* val); @@ -209,13 +203,13 @@ void grib_sarray_delete_content(grib_context* c, grib_sarray* v); char** grib_sarray_get_array(grib_context* c, grib_sarray* v); size_t grib_sarray_used_size(grib_sarray* v); -/* grib_oarray.cc*/ +/* grib_oarray.cc */ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize); grib_oarray* grib_oarray_push(grib_context* c, grib_oarray* v, void* val); void grib_oarray_delete(grib_context* c, grib_oarray* v); void* grib_oarray_get(grib_oarray* v, int i); -/* grib_iarray.cc*/ +/* grib_iarray.cc */ void grib_iarray_print(const char* title, const grib_iarray* iarray); grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize); long grib_iarray_pop(grib_iarray* a); @@ -226,7 +220,7 @@ void grib_iarray_delete_array(grib_iarray* v); long* grib_iarray_get_array(grib_iarray* v); size_t grib_iarray_used_size(grib_iarray* v); -/* grib_vdarray.cc*/ +/* grib_vdarray.cc */ void grib_vdarray_print(const char* title, const grib_vdarray* vdarray); grib_vdarray* grib_vdarray_new(grib_context* c, size_t size, size_t incsize); grib_vdarray* grib_vdarray_push(grib_context* c, grib_vdarray* v, grib_darray* val); @@ -234,7 +228,7 @@ void grib_vdarray_delete(grib_context* c, grib_vdarray* v); void grib_vdarray_delete_content(grib_context* c, grib_vdarray* v); size_t grib_vdarray_used_size(grib_vdarray* v); -/* grib_vsarray.cc*/ +/* grib_vsarray.cc */ void grib_vsarray_print(const char* title, const grib_vsarray* vdarray); grib_vsarray* grib_vsarray_new(grib_context* c, size_t size, size_t incsize); grib_vsarray* grib_vsarray_push(grib_context* c, grib_vsarray* v, grib_sarray* val); @@ -242,30 +236,20 @@ void grib_vsarray_delete(grib_context* c, grib_vsarray* v); void grib_vsarray_delete_content(grib_context* c, grib_vsarray* v); size_t grib_vsarray_used_size(grib_vsarray* v); -/* grib_viarray.cc*/ +/* grib_viarray.cc */ void grib_viarray_print(const char* title, const grib_viarray* viarray); grib_viarray* grib_viarray_new(grib_context* c, size_t size, size_t incsize); grib_viarray* grib_viarray_push(grib_context* c, grib_viarray* v, grib_iarray* val); void grib_viarray_delete(grib_context* c, grib_viarray* v); void grib_viarray_delete_content(grib_context* c, grib_viarray* v); -/* grib_accessor_class_ascii.cc*/ - -/* grib_accessor_class_bit.cc*/ - -/* grib_accessor_class_bitmap.cc*/ - -/* grib_accessor_class_bits.cc*/ - -/* grib_accessor_class_bits_per_value.cc*/ - -/* grib_accessor_class_bufr_data_array.cc*/ +/* grib_accessor_class_bufr_data_array.cc */ grib_vsarray* accessor_bufr_data_array_get_stringValues(grib_accessor* a); grib_accessors_list* accessor_bufr_data_array_get_dataAccessors(grib_accessor* a); grib_trie_with_rank* accessor_bufr_data_array_get_dataAccessorsTrie(grib_accessor* a); void accessor_bufr_data_array_set_unpackMode(grib_accessor* a, int unpackMode); -/* grib_accessor_class_bufr_data_element.cc*/ +/* grib_accessor_class_bufr_data_element.cc */ void accessor_bufr_data_element_set_index(grib_accessor* a, long index); void accessor_bufr_data_element_set_type(grib_accessor* a, int type); void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor* a, long numberOfSubsets); @@ -276,47 +260,11 @@ void accessor_bufr_data_element_set_numericValues(grib_accessor* a, grib_vdarray void accessor_bufr_data_element_set_stringValues(grib_accessor* a, grib_vsarray* stringValues); void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor* a, grib_viarray* elementsDescriptorsIndex); -/* grib_accessor_class_bufr_elements_table.cc*/ +/* grib_accessor_class_bufr_elements_table.cc */ int bufr_descriptor_is_marker(bufr_descriptor* d); bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, int code, int* err); -/* grib_accessor_class_bufr_group.cc*/ - -/* grib_accessor_class_bufr_string_values.cc*/ - -/* grib_accessor_class_pack_bufr_values.cc*/ - -/* grib_accessor_class_bufr_extract_area_subsets.cc*/ - -/* grib_accessor_class_bufr_extract_datetime_subsets.cc*/ - -/* grib_accessor_class_group.cc*/ - -/* grib_accessor_class_unpack_bufr_values.cc*/ - -/* grib_accessor_class_non_alpha.cc*/ - -/* grib_accessor_class_g1bitmap.cc*/ - -/* grib_accessor_class_g2bitmap.cc*/ - -/* grib_accessor_class_concept.cc*/ - -/* grib_accessor_class_hash_array.cc*/ - -/* grib_accessor_class_decimal_precision.cc*/ - -/* grib_accessor_class_divdouble.cc*/ - -/* grib_accessor_class_budgdate.cc*/ - -/* grib_accessor_class_validity_date.cc*/ - -/* grib_accessor_class_validity_time.cc*/ - -/* grib_accessor_class_bytes.cc*/ - -/* grib_accessor_class.cc*/ +/* grib_accessor_class.cc */ grib_section* grib_create_root_section(const grib_context* context, grib_handle* h); grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, const long len, grib_arguments* params); void grib_push_accessor(grib_accessor* a, grib_block_of_accessors* l); @@ -326,314 +274,46 @@ int grib_get_block_length(grib_section* s, size_t* l); grib_accessor* find_paddings(grib_section* s); void grib_update_paddings(grib_section* s); -/* grib_accessor_class_change_scanning_direction.cc*/ - -/* grib_accessor_class_change_scanning_direction.cc*/ - -/* grib_accessor_class_check_internal_version.cc*/ - -/* grib_accessor_class_codeflag.cc*/ - -/* grib_accessor_class_smart_table.cc*/ +/* grib_accessor_class_smart_table.cc */ void grib_smart_table_delete(grib_context* c); -/* grib_accessor_class_smart_table_column.cc*/ - -/* grib_accessor_class_codetable.cc*/ +/* grib_accessor_class_codetable.cc */ void grib_codetable_delete(grib_context* c); int codes_codetable_get_contents_malloc(const grib_handle* h, const char* key, code_table_entry** entries, size_t* num_entries); int codes_codetable_check_code_figure(const grib_handle* h, const char* key, long code_figure); int codes_codetable_check_abbreviation(const grib_handle* h, const char* key, const char* abbreviation); -/* grib_accessor_class_codetable_units.cc*/ - -/* grib_accessor_class_codetable_title.cc*/ - -/* grib_accessor_class_count_file.cc*/ - -/* grib_accessor_class_count_total.cc*/ - -/* grib_accessor_class_double.cc*/ - -/* grib_accessor_class_element.cc*/ - -/* grib_accessor_class_evaluate.cc*/ - -/* grib_accessor_class_g1date.cc*/ - -/* grib_accessor_class_g1monthlydate.cc*/ - -/* grib_accessor_class_library_version.cc*/ - -/* grib_accessor_class_when.cc*/ - -/* grib_accessor_class_g1verificationdate.cc*/ - -/* grib_accessor_class_g1day_of_the_year_date.cc*/ - -/* grib_accessor_class_g1_half_byte_codeflag.cc*/ - -/* grib_accessor_class_g1forecastmonth.cc*/ - -/* grib_accessor_class_g1step_range.cc*/ +/* grib_accessor_class_g1step_range.cc */ int grib_g1_step_get_steps(grib_accessor* a, long* start, long* theEnd); -/* grib_accessor_class_g2step_range.cc*/ - -/* grib_accessor_class_data_g22order_packing.cc*/ - -/* grib_accessor_class_mars_step.cc*/ - -/* grib_accessor_class_message_copy.cc*/ - -/* grib_accessor_class_dictionary.cc*/ - -/* grib_accessor_class_latlon_increment.cc*/ - -/* grib_accessor_class_g2date.cc*/ - -/* grib_accessor_class_g2level.cc*/ - -/* grib_accessor_class_g2end_step.cc*/ - -/* grib_accessor_class_g2latlon.cc*/ - -/* grib_accessor_class_g2lon.cc*/ - -/* grib_accessor_class_global_gaussian.cc*/ - -/* grib_accessor_class_gaussian_grid_name.cc*/ - -/* grib_accessor_class_gen.cc*/ - -/* grib_accessor_class_gts_header.cc*/ - -/* grib_accessor_class_ifs_param.cc*/ - -/* grib_accessor_class_uint16.cc*/ - -/* grib_accessor_class_uint32.cc*/ - -/* grib_accessor_class_uint32_little_endian.cc*/ - -/* grib_accessor_class_uint64.cc*/ - -/* grib_accessor_class_uint64_little_endian.cc*/ - -/* grib_accessor_class_uint8.cc*/ - -/* grib_accessor_class_blob.cc*/ - -/* grib_accessor_class_julian_day.cc*/ - -/* grib_accessor_class_julian_date.cc*/ - -/* grib_accessor_class_latlonvalues.cc*/ - -/* grib_accessor_class_latitudes.cc*/ - -/* grib_accessor_class_longitudes.cc*/ - -/* grib_accessor_class_octahedral_gaussian.cc*/ - -/* grib_accessor_class_offset_file.cc*/ - -/* grib_accessor_class_scale.cc*/ - -/* grib_accessor_class_rdbtime_guess_date.cc*/ - -/* grib_accessor_class_from_scale_factor_scaled_value.cc*/ - -/* grib_accessor_class_g2bitmap_present.cc*/ - -/* grib_accessor_class_ibmfloat.cc*/ - -/* grib_accessor_class_ieeefloat.cc*/ - -/* grib_accessor_class_constant.cc*/ - -/* grib_accessor_class_iterator.cc*/ +/* grib_accessor_class_iterator.cc */ grib_iterator* grib_iterator_new(const grib_handle* h, unsigned long flags, int* error); -/* grib_accessor_class_message.cc*/ - -/* grib_accessor_class_nearest.cc*/ +/* grib_accessor_class_nearest.cc */ grib_nearest* grib_nearest_new(const grib_handle* h, int* error); -/* grib_accessor_class_ksec1expver.cc*/ - -/* grib_accessor_class_label.cc*/ - -/* grib_accessor_class_long.cc*/ - -/* grib_accessor_class_lookup.cc*/ - -/* grib_accessor_class_octet_number.cc*/ - -/* grib_accessor_class_headers_only.cc*/ - -/* grib_accessor_class_padding.cc*/ - -/* grib_accessor_class_pad.cc*/ - -/* grib_accessor_class_padto.cc*/ - -/* grib_accessor_class_padtoeven.cc*/ - -/* grib_accessor_class_padtomultiple.cc*/ - -/* grib_accessor_class_section_padding.cc*/ - -/* grib_accessor_class_section_pointer.cc*/ - -/* grib_accessor_class_position.cc*/ - -/* grib_accessor_class_signed.cc*/ - -/* grib_accessor_class_signed_bits.cc*/ - -/* grib_accessor_class_section.cc*/ - -/* grib_accessor_class_step_in_units.cc*/ - -/* grib_accessor_class_section_length.cc*/ - -/* grib_accessor_class_g1_message_length.cc*/ +/* grib_accessor_class_g1_message_length.cc */ int grib_get_g1_message_size(grib_handle* h, grib_accessor* tl, grib_accessor* s4, long* total_length, long* sec4_len); -/* grib_accessor_class_g1_section4_length.cc*/ - -/* grib_accessor_class_size.cc*/ - -/* grib_accessor_class_scale_values.cc*/ - -/* grib_accessor_class_offset_values.cc*/ - -/* grib_accessor_class_sprintf.cc*/ - -/* grib_accessor_class_getenv.cc*/ - -/* grib_accessor_class_round.cc*/ - -/* grib_accessor_class_spectral_truncation.cc*/ - -/* grib_accessor_class_time.cc*/ - -/* grib_accessor_class_transient.cc*/ - -/* grib_accessor_class_values.cc*/ - -/* grib_accessor_class_simple_packing_error.cc*/ - -/* grib_accessor_class_data_simple_packing.cc*/ - -/* grib_accessor_class_data_ccsds_packing.cc*/ - -/* grib_accessor_class_count_missing.cc*/ - -/* grib_accessor_class_data_sh_packed.cc*/ - -/* grib_accessor_class_data_sh_unpacked.cc*/ - -/* grib_accessor_class_number_of_values_data_raw_packing.cc*/ - -/* grib_accessor_class_data_g1simple_packing.cc*/ - -/* grib_accessor_class_data_g1shsimple_packing.cc*/ - -/* grib_accessor_class_data_shsimple_packing.cc*/ - -/* grib_accessor_class_data_dummy_field.cc*/ - -/* grib_accessor_class_variable.cc*/ +/* grib_accessor_class_variable.cc */ void accessor_variable_set_type(grib_accessor* a, int type); -/* grib_accessor_class_second_order_bits_per_value.cc*/ - -/* grib_accessor_class_data_g2simple_packing.cc*/ - -/* grib_accessor_class_data_g2simple_packing_with_preprocessing.cc*/ - -/* grib_accessor_class_data_g2shsimple_packing.cc*/ - -/* grib_accessor_class_data_g2complex_packing.cc*/ - -/* grib_accessor_class_data_g1second_order_row_by_row_packing.cc*/ - -/* grib_accessor_class_data_g1second_order_constant_width_packing.cc*/ - -/* grib_accessor_class_data_g1second_order_general_packing.cc*/ - -/* grib_accessor_class_data_g1second_order_general_extended_packing.cc*/ - -/* grib_accessor_class_g2grid.cc*/ - -/* grib_accessor_class_unexpanded_descriptors.cc*/ - -/* grib_accessor_class_expanded_descriptors.cc*/ +/* grib_accessor_class_expanded_descriptors.cc */ int grib_accessor_class_expanded_descriptors_set_do_expand(grib_accessor* a, long do_expand); bufr_descriptors_array* grib_accessor_class_expanded_descriptors_get_expanded(grib_accessor* a, int* err); -/* grib_accessor_class_bufrdc_expanded_descriptors.cc*/ - -/* grib_accessor_class_data_apply_bitmap.cc*/ - -/* grib_accessor_class_data_apply_boustrophedonic.cc*/ - -/* grib_accessor_class_data_apply_boustrophedonic_bitmap.cc*/ - -/* grib_accessor_class_data_secondary_bitmap.cc*/ - -/* grib_accessor_class_data_g1secondary_bitmap.cc*/ - -/* grib_accessor_class_data_g2secondary_bitmap.cc*/ - -/* grib_accessor_class_data_jpeg2000_packing.cc*/ - -/* grib_accessor_class_data_png_packing.cc*/ - -/* grib_accessor_class_data_raw_packing.cc*/ - -/* grib_accessor_class_data_complex_packing.cc*/ - -/* grib_accessor_class_data_g1complex_packing.cc*/ - -/* grib_accessor_class_gds_not_present_bitmap.cc*/ - -/* grib_accessor_class_gds_is_present.cc*/ - -/* grib_accessor_class_select_step_template.cc*/ - -/* grib_accessor_class_local_definition.cc*/ - -/* grib_accessor_class_g2_eps.cc*/ - -/* grib_accessor_class_g2_aerosol.cc*/ - -/* grib_accessor_class_g2_chemical.cc*/ - -/* grib_accessor_class_g2_mars_labeling.cc*/ - -/* grib_accessor_class_transient_darray.cc*/ - -/* grib_accessor_class_md5.cc*/ - -/* grib_jasper_encoding.cc*/ +/* grib_jasper_encoding.cc */ int grib_jasper_decode(grib_context* c, unsigned char* buf, const size_t* buflen, double* values, const size_t* n_vals); int grib_jasper_encode(grib_context* c, j2k_encode_helper* helper); -/* grib_openjpeg_encoding.cc*/ +/* grib_openjpeg_encoding.cc */ int grib_openjpeg_decode(grib_context* c, unsigned char* buf, const size_t* buflen, double* values, const size_t* n_vals); int grib_openjpeg_encode(grib_context* c, j2k_encode_helper* helper); -/* action_class_set_missing.cc*/ +/* action_class_set_missing.cc */ grib_action* grib_action_create_set_missing(grib_context* context, const char* name); -/* grib_accessor_class_number_of_points.cc*/ - -/* grib_accessor_class_suppressed.cc*/ - -/* grib_index.cc*/ +/* grib_index.cc */ int grib_index_compress(grib_index* index); grib_field_tree* grib_read_field_tree(grib_context* c, FILE* fh, grib_file** files, int* err); grib_index* grib_index_new(grib_context* c, const char* key, int* err); @@ -642,7 +322,6 @@ int grib_index_write(grib_index* index, const char* filename); grib_index* grib_index_read(grib_context* c, const char* filename, int* err); int grib_index_search_same(grib_index* index, grib_handle* h); int grib_index_add_file(grib_index* index, const char* filename); -int ecc__codes_index_add_file(grib_index* index, const char* filename, int message_type); grib_index* grib_index_new_from_file(grib_context* c, const char* filename, const char* keys, int* err); int grib_index_get_size(const grib_index* index, const char* key, size_t* size); int grib_index_get_string(const grib_index* index, const char* key, char** values, size_t* size); @@ -657,71 +336,28 @@ void grib_index_dump(FILE* fout, grib_index* index, unsigned long flags); char* grib_get_field_file(grib_index* index, off_t* offset); grib_handle* grib_handle_new_from_index(grib_index* index, int* err); grib_handle* codes_new_from_index(grib_index* index, int message_type, int* err); -void grib_index_rewind(grib_index* index); int codes_index_set_product_kind(grib_index* index, ProductKind product_kind); int codes_index_set_unpack_bufr(grib_index* index, int unpack); int is_index_file(const char* filename); -/* grib_accessor_class_number_of_points_gaussian.cc*/ - -/* grib_accessor_class_number_of_values.cc*/ - -/* grib_accessor_class_number_of_coded_values.cc*/ - -/* grib_accessor_class_g1number_of_coded_values_sh_complex.cc*/ - -/* grib_accessor_class_g1number_of_coded_values_sh_simple.cc*/ - -/* grib_accessor_class_dirty.cc*/ - -/* grib_accessor_class_statistics.cc*/ - -/* grib_accessor_class_statistics_spectral.cc*/ - -/* grib_accessor_class_unsigned.cc*/ +/* grib_accessor_class_unsigned.cc */ int pack_long_unsigned_helper(grib_accessor* a, const long* val, size_t* len, int check); -/* grib_accessor_class_unsigned_bits.cc*/ - -/* grib_accessor_class_raw.cc*/ +/* grib_accessor_class_raw.cc */ void accessor_raw_set_length(grib_accessor* a, size_t len); long accessor_raw_get_offset(grib_accessor* a); -/* grib_accessor_class_bufr_extract_subsets.cc*/ - -/* grib_accessor_class_bufr_simple_thinning.cc*/ - -/* grib_accessor_class_spd.cc*/ - -/* grib_accessor_class_sum.cc*/ - -/* grib_accessor_class_to_integer.cc*/ - -/* grib_accessor_class_to_double.cc*/ - -/* grib_accessor_class_to_string.cc*/ - -/* grib_accessor_class_sexagesimal2decimal.cc*/ - -/* grib_accessor_class_vector.cc*/ - -/* grib_accessor_class_long_vector.cc*/ - -/* grib_gaussian_reduced.cc*/ +/* grib_gaussian_reduced.cc */ void grib_get_reduced_row_wrapper(grib_handle* h, long pl, double lon_first, double lon_last, long* npoints, long* ilon_first, long* ilon_last); void grib_get_reduced_row_legacy(long pl, double lon_first, double lon_last, long* npoints, long* ilon_first, long* ilon_last); void grib_get_reduced_row(long pl, double lon_first, double lon_last, long* npoints, long* ilon_first, long* ilon_last); void grib_get_reduced_row_p(long pl, double lon_first, double lon_last, long* npoints, double* olon_first, double* olon_last); -/* grib_accessor_class_abstract_vector.cc*/ - -/* grib_accessor_class_abstract_long_vector.cc*/ - -/* grib_loader_from_handle.cc*/ +/* grib_loader_from_handle.cc */ int grib_lookup_long_from_handle(grib_context* gc, grib_loader* loader, const char* name, long* value); int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_arguments* default_value); -/* grib_bits.cc*/ +/* grib_bits.cc */ unsigned long grib_decode_unsigned_byte_long(const unsigned char* p, long o, int l); long grib_decode_signed_long(const unsigned char* p, long o, int l); int grib_encode_signed_long(unsigned char* p, long val, long o, int l); @@ -731,7 +367,7 @@ void grib_set_bit(unsigned char* p, long bitp, int val); long grib_decode_signed_longb(const unsigned char* p, long* bitp, long nbits); int grib_encode_signed_longb(unsigned char* p, long val, long* bitp, long nb); -/* grib_timer.cc*/ +/* grib_timer.cc */ double proc_cpu(void); char* timename(double t); grib_timer* grib_get_timer(grib_context* c, const char* name, const char* statname, int elapsed); @@ -744,7 +380,7 @@ void grib_timer_partial_rate(grib_timer* t, double start, long total); void grib_print_all_timers(void); void grib_reset_all_timers(void); -/* grib_ibmfloat.cc*/ +/* grib_ibmfloat.cc */ unsigned long grib_ibm_to_long(double x); double grib_ibmfloat_error(double x); double grib_long_to_ibm(unsigned long x); @@ -753,7 +389,7 @@ double grib_ibm_table_v(unsigned long e); unsigned long grib_ibm_nearest_smaller_to_long(double x); int grib_nearest_smaller_ibm_float(double a, double* ret); -/* grib_ieeefloat.cc*/ +/* grib_ieeefloat.cc */ unsigned long grib_ieee_to_long(double x); double grib_ieeefloat_error(double x); double grib_long_to_ieee(unsigned long x); @@ -767,9 +403,7 @@ double grib_long_to_ieee64(unsigned long x); //int grib_ieee_decode_array_float(grib_context* c, unsigned char* buf, size_t nvals, int bytes, float* val); int grib_ieee_encode_array(grib_context* c, double* val, size_t nvals, int bytes, unsigned char* buf); -/* grib_accessor_class_reference_value_error.cc*/ - -/* grib_memory.cc*/ +/* grib_memory.cc */ void* grib_transient_malloc(const grib_context* c, size_t s); void* grib_transient_realloc(const grib_context* c, void* p, size_t s); void grib_transient_free(const grib_context* c, void* p); @@ -780,7 +414,7 @@ void* grib_buffer_malloc(const grib_context* c, size_t s); void grib_buffer_free(const grib_context* c, void* p); void* grib_buffer_realloc(const grib_context* c, void* p, size_t s); -/* grib_buffer.cc*/ +/* grib_buffer.cc */ grib_buffer* grib_create_growable_buffer(const grib_context* c); grib_buffer* grib_new_buffer(const grib_context* c, const unsigned char* data, size_t buflen); void grib_buffer_delete(const grib_context* c, grib_buffer* b); @@ -791,7 +425,7 @@ void grib_recompute_sections_lengths(grib_section* s); int grib_buffer_replace(grib_accessor* a, const unsigned char* data, size_t newsize, int update_lengths, int update_paddings); void grib_update_sections_lengths(grib_handle* h); -/* grib_dumper.cc*/ +/* grib_dumper.cc */ void grib_init_dumper(grib_dumper* d); void grib_dumper_delete(grib_dumper* d); void grib_dump_long(grib_dumper* d, grib_accessor* a, const char* comment); @@ -806,37 +440,7 @@ void grib_dump_values(grib_dumper* d, grib_accessor* a); void grib_dump_header(grib_dumper* d, const grib_handle* h); void grib_dump_footer(grib_dumper* d, const grib_handle* h); -/* grib_dumper_class_serialize.cc*/ - -/* grib_dumper_class_debug.cc*/ - -/* grib_dumper_class_default.cc*/ - -/* grib_dumper_class_bufr_encode_C.cc*/ - -/* grib_dumper_class_bufr_encode_filter.cc*/ - -/* grib_dumper_class_bufr_encode_fortran.cc*/ - -/* grib_dumper_class_bufr_encode_python.cc*/ - -/* grib_dumper_class_bufr_decode_C.cc*/ - -/* grib_dumper_class_bufr_decode_filter.cc*/ - -/* grib_dumper_class_bufr_decode_fortran.cc*/ - -/* grib_dumper_class_bufr_decode_python.cc*/ - -/* grib_dumper_class_bufr_simple.cc*/ - -/* grib_dumper_class_json.cc*/ - -/* grib_dumper_class_grib_encode_C.cc*/ - -/* grib_dumper_class_wmo.cc*/ - -/* grib_dumper_class.cc*/ +/* grib_dumper_class.cc */ grib_dumper* grib_dumper_factory(const char* op, const grib_handle* h, FILE* out, unsigned long option_flags, void* arg); void grib_dump_accessors_block(grib_dumper* dumper, grib_block_of_accessors* block); void grib_dump_accessors_list(grib_dumper* dumper, grib_accessors_list* al); @@ -846,7 +450,7 @@ void grib_dump_keys(grib_handle* h, FILE* f, const char* mode, unsigned long fla grib_dumper* grib_dump_content_with_dumper(grib_handle* h, grib_dumper* dumper, FILE* f, const char* mode, unsigned long flags, void* data); void codes_dump_bufr_flat(grib_accessors_list* al, grib_handle* h, FILE* f, const char* mode, unsigned long flags, void* data); -/* grib_context.cc*/ +/* grib_context.cc */ size_t grib_context_read(const grib_context* c, void* ptr, size_t size, void* stream); off_t grib_context_tell(const grib_context* c, void* stream); int grib_context_seek(const grib_context* c, off_t offset, int whence, void* stream); @@ -906,14 +510,14 @@ void grib_gts_header_off(grib_context* c); void grib_multi_support_on(grib_context* c); void grib_multi_support_off(grib_context* c); -/* grib_date.cc*/ +/* grib_date.cc */ int grib_julian_to_datetime(double jd, long* year, long* month, long* day, long* hour, long* minute, long* second); int grib_datetime_to_julian(long year, long month, long day, long hour, long minute, long second, double* jd); int grib_datetime_to_julian_d(long year, long month, long day, long hour, long minute, double second, double* jd); long grib_julian_to_date(long jdate); long grib_date_to_julian(long ddate); -/* grib_fieldset.cc*/ +/* grib_fieldset.cc */ int grib_fieldset_new_column(grib_fieldset* set, int id, char* key, int type); grib_fieldset* grib_fieldset_new_from_files(grib_context* c, const char* filenames[], int nfiles, const char** keys, int nkeys, const char* where_string, const char* order_by_string, int* err); int grib_fieldset_apply_where(grib_fieldset* set, const char* where_string); @@ -926,9 +530,8 @@ grib_handle* grib_fieldset_next_handle(grib_fieldset* set, int* err); int grib_fieldset_count(const grib_fieldset* set); grib_handle* grib_fieldset_retrieve(grib_fieldset* set, int i, int* err); -/* grib_filepool.cc*/ +/* grib_filepool.cc */ void grib_file_pool_clean(void); -grib_file* grib_file_pool_get_files(void); grib_file* grib_file_open(const char* filename, const char* mode, int* err); void grib_file_pool_delete_file(grib_file* file); void grib_file_close(const char* filename, int force, int* err); @@ -936,14 +539,14 @@ void grib_file_close_all(int* err); grib_file* grib_get_file(const char* filename, int* err); void grib_file_delete(grib_file* file); -/* grib_geography.cc*/ +/* grib_geography.cc */ int grib_get_gaussian_latitudes(long trunc, double* lats); int is_gaussian_global(double lat1, double lat2, double lon1, double lon2, long num_points_equator, const double* latitudes, double angular_precision); void rotate(const double inlat, const double inlon, const double angleOfRot, const double southPoleLat, const double southPoleLon, double* outlat, double* outlon); void unrotate(const double inlat, const double inlon, const double angleOfRot, const double southPoleLat, const double southPoleLon, double* outlat, double* outlon); double geographic_distance_spherical(double radius, double lon1, double lat1, double lon2, double lat2); -/* grib_handle.cc*/ +/* grib_handle.cc */ grib_section* grib_section_create(grib_handle* h, grib_accessor* owner); void grib_swap_sections(grib_section* the_old, grib_section* the_new); void grib_empty_section(grib_context* c, grib_section* b); @@ -991,14 +594,14 @@ int grib_handle_apply_action(grib_handle* h, grib_action* a); void grib_multi_support_reset_file(grib_context* c, FILE* f); void grib_multi_support_reset(grib_context* c); -/* grib_hash_keys.cc*/ +/* grib_hash_keys.cc */ const struct grib_keys_hash* grib_keys_hash_get(const char* str, size_t len); grib_itrie* grib_hash_keys_new(grib_context* c, int* count); void grib_hash_keys_delete(grib_itrie* t); int grib_hash_keys_get_id(grib_itrie* t, const char* key); int grib_hash_keys_get_size(grib_itrie* t); -/* grib_io.cc*/ +/* grib_io.cc */ off_t stdio_tell(void* data); int stdio_seek(void* data, off_t len); int stdio_seek_from_start(void* data, off_t len); @@ -1030,7 +633,7 @@ int codes_extract_offsets_sizes_malloc(grib_context* c, const char* filename, Pr off_t** offsets, size_t** sizes, int* num_messages, int strict_mode); -/* grib_trie.cc*/ +/* grib_trie.cc */ grib_trie* grib_trie_new(grib_context* c); void grib_trie_delete_container(grib_trie* t); void grib_trie_delete(grib_trie* t); @@ -1039,24 +642,24 @@ void* grib_trie_insert(grib_trie* t, const char* key, void* data); void* grib_trie_insert_no_replace(grib_trie* t, const char* key, void* data); void* grib_trie_get(grib_trie* t, const char* key); -/* grib_trie_with_rank.cc*/ +/* grib_trie_with_rank.cc */ grib_trie_with_rank* grib_trie_with_rank_new(grib_context* c); void grib_trie_with_rank_delete_container(grib_trie_with_rank* t); int grib_trie_with_rank_insert(grib_trie_with_rank* t, const char* key, void* data); void* grib_trie_with_rank_get(grib_trie_with_rank* t, const char* key, int rank); -/* grib_itrie.cc*/ +/* grib_itrie.cc */ grib_itrie* grib_itrie_new(grib_context* c, int* count); void grib_itrie_delete(grib_itrie* t); int grib_itrie_get_id(grib_itrie* t, const char* key); int grib_itrie_insert(grib_itrie* t, const char* key); int grib_itrie_get_size(grib_itrie* t); -/* grib_rules.cc*/ +/* grib_rules.cc */ grib_rule_entry* grib_new_rule_entry(grib_context* c, const char* name, grib_expression* expression); grib_rule* grib_new_rule(grib_context* c, grib_expression* condition, grib_rule_entry* entries); -/* grib_keys_iterator.cc*/ +/* grib_keys_iterator.cc */ grib_keys_iterator* grib_keys_iterator_new(grib_handle* h, unsigned long filter_flags, const char* name_space); int grib_keys_iterator_set_flags(grib_keys_iterator* ki, unsigned long flags); int grib_keys_iterator_rewind(grib_keys_iterator* ki); @@ -1071,7 +674,7 @@ int grib_keys_iterator_get_string(const grib_keys_iterator* kiter, char* v, size int grib_keys_iterator_get_bytes(const grib_keys_iterator* kiter, unsigned char* v, size_t* len); int grib_keys_iterator_get_native_type(const grib_keys_iterator* kiter); -/* bufr_keys_iterator.cc*/ +/* bufr_keys_iterator.cc */ bufr_keys_iterator* codes_bufr_keys_iterator_new(grib_handle* h, unsigned long filter_flags); bufr_keys_iterator* codes_bufr_data_section_keys_iterator_new(grib_handle* h); int codes_bufr_keys_iterator_rewind(bufr_keys_iterator* ki); @@ -1080,7 +683,7 @@ char* codes_bufr_keys_iterator_get_name(const bufr_keys_iterator* kiter); grib_accessor* codes_bufr_keys_iterator_get_accessor(bufr_keys_iterator* kiter); int codes_bufr_keys_iterator_delete(bufr_keys_iterator* kiter); -/* grib_parse_utils.cc*/ +/* grib_parse_utils.cc */ int grib_recompose_name(grib_handle* h, grib_accessor* observer, const char* uname, char* fname, int fail); int grib_accessors_list_print(grib_handle* h, grib_accessors_list* al, const char* name, int type, const char* format, const char* separator, int maxcols, int* newline, FILE* out); int grib_recompose_print(grib_handle* h, grib_accessor* observer, const char* uname, int fail, FILE* out); @@ -1094,32 +697,31 @@ grib_hash_array_value* grib_parse_hash_array_file(grib_context* gc, const char* grib_action* grib_parse_file(grib_context* gc, const char* filename); int grib_type_to_int(char id); -/* grib_query.cc*/ +/* grib_query.cc */ grib_accessors_list* grib_find_accessors_list(const grib_handle* h, const char* name); char* grib_split_name_attribute(grib_context* c, const char* name, char* attribute_name); grib_accessor* grib_find_accessor(const grib_handle* h, const char* name); -grib_accessor* grib_find_attribute(grib_handle* h, const char* name, const char* attr_name, int* err); grib_accessor* grib_find_accessor_fast(grib_handle* h, const char* name); -/* grib_scaling.cc*/ +/* grib_scaling.cc */ double grib_power(long s, long n); long grib_get_binary_scale_fact(double max, double min, long bpval, int* error); -/* grib_templates.cc*/ -grib_handle* codes_external_template(grib_context* c, ProductKind product_kind, const char* name); -char* get_external_template_path(grib_context* c, const char* name); +/* grib_templates.cc */ +grib_handle* codes_external_sample(grib_context* c, ProductKind product_kind, const char* name); +char* get_external_sample_path(grib_context* c, const char* name); -/* grib_dependency.cc*/ +/* grib_dependency.cc */ grib_handle* grib_handle_of_accessor(const grib_accessor* a); void grib_dependency_add(grib_accessor* observer, grib_accessor* observed); void grib_dependency_remove_observed(grib_accessor* observed); -int ecc__grib_dependency_notify_change(grib_handle* h, grib_accessor* observed); +int grib_dependency_notify_change_h(grib_handle* h, grib_accessor* observed); int grib_dependency_notify_change(grib_accessor* observed); void grib_dependency_remove_observer(grib_accessor* observer); void grib_dependency_observe_expression(grib_accessor* observer, grib_expression* e); void grib_dependency_observe_arguments(grib_accessor* observer, grib_arguments* a); -/* grib_value.cc*/ +/* grib_value.cc */ int grib_set_expression(grib_handle* h, const char* name, grib_expression* e); int grib_set_long_internal(grib_handle* h, const char* name, long val); int grib_set_long(grib_handle* h, const char* name, long val); @@ -1166,22 +768,19 @@ int grib_get_string_internal(grib_handle* h, const char* name, char* val, size_t int grib_get_string(const grib_handle* h, const char* name, char* val, size_t* length); int grib_get_bytes(const grib_handle* h, const char* name, unsigned char* val, size_t* length); int grib_get_native_type(const grib_handle* h, const char* name, int* type); -int ecc__grib_get_double_array_internal(const grib_handle* h, grib_accessor* a, double* val, size_t buffer_len, size_t* decoded_length); int grib_get_double_array_internal(const grib_handle* h, const char* name, double* val, size_t* length); int grib_get_double_array(const grib_handle* h, const char* name, double* val, size_t* length); int grib_get_float_array_internal(const grib_handle* h, const char* name, float* val, size_t* length); int grib_get_float_array(const grib_handle* h, const char* name, float* val, size_t* length); -int ecc__grib_get_string_length(grib_accessor* a, size_t* size); +int grib_get_string_length_acc(grib_accessor* a, size_t* size); int grib_get_string_length(const grib_handle* h, const char* name, size_t* size); -int ecc__grib_get_size(const grib_handle* h, grib_accessor* a, size_t* size); +int grib_get_size_acc(const grib_handle* h, grib_accessor* a, size_t* size); int grib_get_size(const grib_handle* h, const char* name, size_t* size); int grib_get_length(const grib_handle* h, const char* name, size_t* length); int grib_get_offset(const grib_handle* h, const char* key, size_t* val); -int ecc__grib_get_string_array_internal(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length); int grib_get_string_array(const grib_handle* h, const char* name, char** val, size_t* length); -int ecc__grib_get_long_array_internal(const grib_handle* h, grib_accessor* a, long* val, size_t buffer_len, size_t* decoded_length); int grib_get_long_array_internal(grib_handle* h, const char* name, long* val, size_t* length); int grib_get_long_array(const grib_handle* h, const char* name, long* val, size_t* length); int grib_set_values(grib_handle* h, grib_values* args, size_t count); @@ -1191,59 +790,59 @@ int grib_values_check(grib_handle* h, grib_values* values, int count); int codes_copy_key(grib_handle* h1, grib_handle* h2, const char* key, int type); int codes_compare_key(grib_handle* h1, grib_handle* h2, const char* key, int compare_flags); -/* grib_errors.cc*/ +/* grib_errors.cc */ const char* grib_get_error_message(int code); void grib_check(const char* call, const char* file, int line, int e, const char* msg); -/* grib_expression_class_binop.cc*/ +/* grib_expression_class_binop.cc */ grib_expression* new_binop_expression(grib_context* c, grib_binop_long_proc long_func, grib_binop_double_proc double_func, grib_expression* left, grib_expression* right); -/* grib_expression_class_logical_and.cc*/ +/* grib_expression_class_logical_and.cc */ grib_expression* new_logical_and_expression(grib_context* c, grib_expression* left, grib_expression* right); -/* grib_expression_class_logical_or.cc*/ +/* grib_expression_class_logical_or.cc */ grib_expression* new_logical_or_expression(grib_context* c, grib_expression* left, grib_expression* right); -/* grib_expression_class_is_in_dict.cc*/ +/* grib_expression_class_is_in_dict.cc */ grib_expression* new_is_in_dict_expression(grib_context* c, const char* name, const char* list); -/* grib_expression_class_true.cc*/ +/* grib_expression_class_true.cc */ grib_expression* new_true_expression(grib_context* c); -/* grib_expression_class_string_compare.cc*/ +/* grib_expression_class_string_compare.cc */ grib_expression* new_string_compare_expression(grib_context* c, grib_expression* left, grib_expression* right); -/* grib_expression_class_unop.cc*/ +/* grib_expression_class_unop.cc */ grib_expression* new_unop_expression(grib_context* c, grib_unop_long_proc long_func, grib_unop_double_proc double_func, grib_expression* exp); -/* grib_expression_class_functor.cc*/ +/* grib_expression_class_functor.cc */ grib_expression* new_func_expression(grib_context* c, const char* name, grib_arguments* args); -/* grib_expression_class_accessor.cc*/ +/* grib_expression_class_accessor.cc */ grib_expression* new_accessor_expression(grib_context* c, const char* name, long start, size_t length); -/* grib_expression_class_is_in_list.cc*/ +/* grib_expression_class_is_in_list.cc */ grib_expression* new_is_in_list_expression(grib_context* c, const char* name, const char* list); -/* grib_expression_class_is_integer.cc*/ +/* grib_expression_class_is_integer.cc */ grib_expression* new_is_integer_expression(grib_context* c, const char* name, int start, int length); -/* grib_expression_class_length.cc*/ +/* grib_expression_class_length.cc */ grib_expression* new_length_expression(grib_context* c, const char* name); -/* grib_expression_class_long.cc*/ +/* grib_expression_class_long.cc */ grib_expression* new_long_expression(grib_context* c, long value); -/* grib_expression_class_double.cc*/ +/* grib_expression_class_double.cc */ grib_expression* new_double_expression(grib_context* c, double value); -/* grib_expression_class_string.cc*/ +/* grib_expression_class_string.cc */ grib_expression* new_string_expression(grib_context* c, const char* value); -/* grib_expression_class_sub_string.cc*/ +/* grib_expression_class_sub_string.cc */ grib_expression* new_sub_string_expression(grib_context* c, const char* value, size_t start, size_t length); -/* grib_nearest.cc*/ +/* grib_nearest.cc */ int grib_nearest_find(grib_nearest* nearest, const grib_handle* h, double inlat, double inlon, unsigned long flags, double* outlats, double* outlons, double* values, double* distances, int* indexes, size_t* len); int grib_nearest_init(grib_nearest* i, grib_handle* h, grib_arguments* args); int grib_nearest_delete(grib_nearest* i); @@ -1259,28 +858,10 @@ int grib_nearest_find_generic(grib_nearest* nearest, grib_handle* h, double inla double** out_distances, double* outlats, double* outlons, double* values, double* distances, int* indexes, size_t* len); -/* grib_nearest_class.cc*/ +/* grib_nearest_class.cc */ grib_nearest* grib_nearest_factory(grib_handle* h, grib_arguments* args, int* error); -/* grib_nearest_class_gen.cc*/ - -/* grib_nearest_class_regular.cc*/ - -/* grib_nearest_class_reduced.cc*/ - -/* grib_nearest_class_latlon_reduced.cc*/ - -/* grib_nearest_class_lambert_conformal.cc*/ - -/* grib_nearest_class_polar_stereographic.cc*/ - -/* grib_iterator_class_polar_stereographic.cc*/ - -/* grib_iterator_class_lambert_azimuthal_equal_area.cc*/ - -/* grib_iterator_class_lambert_conformal.cc*/ - -/* grib_iterator.cc*/ +/* grib_iterator.cc */ int grib_get_data(const grib_handle* h, double* lats, double* lons, double* values); int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value); int grib_iterator_has_next(grib_iterator* i); @@ -1289,25 +870,13 @@ int grib_iterator_reset(grib_iterator* i); int grib_iterator_init(grib_iterator* i, grib_handle* h, grib_arguments* args); int grib_iterator_delete(grib_iterator* i); -/* grib_iterator_class.cc*/ +/* grib_iterator_class.cc */ grib_iterator* grib_iterator_factory(grib_handle* h, grib_arguments* args, unsigned long flags, int* error); -/* grib_iterator_class_gaussian.cc*/ - -/* grib_iterator_class_gaussian_reduced.cc*/ - -/* grib_iterator_class_latlon_reduced.cc*/ - -/* grib_iterator_class_gen.cc*/ +/* grib_iterator_class_gen.cc */ int transform_iterator_data(grib_context* c, double* data, long iScansNegatively, long jScansPositively, long jPointsAreConsecutive, long alternativeRowScanning, size_t numPoints, long nx, long ny); -/* grib_iterator_class_latlon.cc*/ - -/* grib_iterator_class_regular.cc*/ - -/* grib_iterator_class_space_view.cc*/ - -/* grib_expression.cc*/ +/* grib_expression.cc */ int grib_expression_native_type(grib_handle* h, grib_expression* g); int grib_expression_evaluate_long(grib_handle* h, grib_expression* g, long* result); int grib_expression_evaluate_double(grib_handle* h, grib_expression* g, double* result); @@ -1316,7 +885,6 @@ const char* grib_expression_get_name(grib_expression* g); void grib_expression_print(grib_context* ctx, grib_expression* g, grib_handle* f); void grib_expression_free(grib_context* ctx, grib_expression* g); void grib_expression_add_dependency(grib_expression* e, grib_accessor* observer); -int grib_expression_set_value(grib_handle* h, grib_expression* g, grib_values* v); grib_arguments* grib_arguments_new(grib_context* c, grib_expression* g, grib_arguments* n); void grib_arguments_free(grib_context* c, grib_arguments* g); void grib_arguments_print(grib_context* c, grib_arguments* g, grib_handle* f); @@ -1327,7 +895,7 @@ double grib_arguments_get_double(grib_handle* h, grib_arguments* args, int n); grib_expression* grib_arguments_get_expression(grib_handle* h, grib_arguments* args, int n); int grib_arguments_get_count(grib_arguments* args); -/* codes_util.cc*/ +/* codes_util.cc */ double normalise_longitude_in_degrees(double lon); char get_dir_separator_char(void); int path_is_regular_file(const char* path); @@ -1336,9 +904,10 @@ char* codes_getenv(const char* name); int codes_check_grib_ieee_packing_value(int value); int codes_flush_sync_close_file(FILE* f); int is_date_valid(long year, long month, long day, long hour, long minute, double second); +int is_time_valid(long number); // number is HHMM int compute_scaled_value_and_scale_factor(double input, int64_t scaled_value_max, int64_t scale_factor_max, int64_t* ret_value, int64_t* ret_factor); -/* grib_util.cc*/ +/* grib_util.cc */ grib_handle* grib_util_sections_copy(grib_handle* hfrom, grib_handle* hto, int what, int* err); grib_string_list* grib_util_get_param_id(const char* mars_param); grib_string_list* grib_util_get_mars_param(const char* param_id); @@ -1352,12 +921,12 @@ int grib2_is_PDTN_Aerosol(long productDefinitionTemplateNumber); int grib2_is_PDTN_AerosolOptical(long productDefinitionTemplateNumber); int grib2_select_PDTN(int is_eps, int is_instant, int is_chemical, int is_chemical_srcsink, int is_chemical_distfn, int is_aerosol, int is_aerosol_optical); size_t sum_of_pl_array(const long* pl, size_t plsize); -int grib_is_earth_oblate(grib_handle* h); +int grib_is_earth_oblate(const grib_handle* h); int grib_check_data_values_minmax(grib_handle* h, const double min_val, const double max_val); -int grib_producing_large_constant_fields(grib_handle* h, int edition); +int grib_producing_large_constant_fields(const grib_handle* h, int edition); int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max_val); -/* bufr_util.cc*/ +/* bufr_util.cc */ int compute_bufr_key_rank(grib_handle* h, grib_string_list* keys, const char* key); char** codes_bufr_copy_data_return_copied_keys(grib_handle* hin, grib_handle* hout, size_t* nkeys, int* err); int codes_bufr_copy_data(grib_handle* hin, grib_handle* hout); @@ -1367,7 +936,7 @@ int codes_bufr_key_is_header(const grib_handle* h, const char* key, int* err); int codes_bufr_key_is_coordinate(const grib_handle* h, const char* key, int* err); int codes_bufr_key_exclude_from_dump(const char* key); -/* string_util.cc*/ +/* string_util.cc */ int strcmp_nocase(const char* s1, const char* s2); void string_rtrim(char* s); void string_lrtrim(char** x, int do_left, int do_right); @@ -1381,13 +950,11 @@ const char* grib_get_type_name(int type); char* string_replace_char(char* str, char oldc, char newc); void string_remove_char(char* str, char c); -/* functions.cc*/ +/* functions.cc */ long grib_op_eq(long a, long b); long grib_op_ne(long a, long b); long grib_op_lt(long a, long b); long grib_op_gt(long a, long b); -long grib_op_and(long a, long b); -long grib_op_or(long a, long b); long grib_op_ge(long a, long b); long grib_op_le(long a, long b); long grib_op_bit(long a, long b); @@ -1412,20 +979,18 @@ double grib_op_gt_d(double a, double b); double grib_op_ge_d(double a, double b); double grib_op_le_d(double a, double b); -/* codes_memfs.cc*/ +/* codes_memfs.cc */ FILE* codes_fopen(const char* name, const char* mode); int codes_access(const char* name, int mode); -/* grib_accessor_class_data_g2bifourier_packing.cc*/ - -/* grib_optimize_decimal_factor.cc*/ +/* grib_optimize_decimal_factor.cc */ int grib_optimize_decimal_factor(grib_accessor* a, const char* reference_value, const double pmax, const double pmin, const int knbit, const int compat_gribex, const int compat_32bit, long* kdec, long* kbin, double* ref); -/* grib_api_version.cc*/ +/* grib_api_version.cc */ const char* grib_get_git_sha1(void); const char* codes_get_build_date(void); -/* grib_bits_any_endian.cc*/ +/* grib_bits_any_endian.cc */ int grib_is_all_bits_one(int64_t val, long nbits); int grib_encode_string(unsigned char* bitStream, long* bitOffset, size_t numberOfCharacters, const char* string); char* grib_decode_string(const unsigned char* bitStream, long* bitOffset, size_t numberOfCharacters, char* string); @@ -1436,7 +1001,7 @@ int grib_encode_unsigned_longb(unsigned char* p, unsigned long val, long* bitp, int grib_encode_size_tb(unsigned char* p, size_t val, long* bitp, long nb); -/* grib_bits_any_endian_simple.cc*/ +/* grib_bits_any_endian_simple.cc */ int grib_decode_long_array(const unsigned char* p, long* bitp, long bitsPerValue, size_t n_vals, long* val); //int grib_decode_double_array(const unsigned char* p, long* bitp, long bitsPerValue, double reference_value, double s, double d, size_t n_vals, double* val); //int grib_decode_float_array(const unsigned char* p, long* bitp, long bitsPerValue, double reference_value, double s, double d, size_t n_vals, float* val); diff --git a/src/expression.class b/src/expression.class index 9c11d39db..64c9a2e70 100644 --- a/src/expression.class +++ b/src/expression.class @@ -1,20 +1,14 @@ typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void init(grib_expression* e); -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); -static string get_name(grib_expression* e); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void init(grib_expression* e); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_NAME{ grib_expression base; @@ -28,7 +22,6 @@ static grib_expression_class _grib_expression_class_NAME = { "NAME", /* name */ sizeof(grib_expression_NAME),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ &init, /* constructor */ &destroy, /* destructor */ &print, @@ -44,8 +37,3 @@ grib_expression_class* grib_expression_class_NAME = &_grib_expression_class_NAME ADD_TO_FILE grib_expression_class.h extern grib_expression_class* grib_expression_class_NAME; ADD_TO_FILE grib_expression_factory.h { "NAME", &grib_expression_class_NAME, }, - -static void init_class(grib_expression_class* c) -{ -INIT -} diff --git a/src/functions.cc b/src/functions.cc index 9680d07bd..6c6bba770 100644 --- a/src/functions.cc +++ b/src/functions.cc @@ -27,14 +27,14 @@ long grib_op_gt(long a, long b) { return a > b; } -long grib_op_and(long a, long b) -{ - return a && b; -} -long grib_op_or(long a, long b) -{ - return a || b; -} +// long grib_op_and(long a, long b) +// { +// return a && b; +// } +// long grib_op_or(long a, long b) +// { +// return a || b; +// } long grib_op_ge(long a, long b) { return a >= b; @@ -43,7 +43,6 @@ long grib_op_le(long a, long b) { return a <= b; } - long grib_op_bit(long a, long b) { return a & (1 << b); @@ -52,7 +51,6 @@ long grib_op_bitoff(long a, long b) { return !grib_op_bit(a, b); } - long grib_op_not(long a) { return !a; @@ -61,15 +59,14 @@ long grib_op_neg(long a) { return -a; } - double grib_op_neg_d(double a) { return -a; } +// Note: This is actually 'a' to the power 'b' long grib_op_pow(long a, long b) { - /* Note: This is actually 'a' to the power 'b' */ return codes_power(b, a); } @@ -93,7 +90,6 @@ long grib_op_modulo(long a, long b) { return a % b; } - double grib_op_mul_d(double a, double b) { return a * b; @@ -102,7 +98,6 @@ double grib_op_div_d(double a, double b) { return a / b; } - double grib_op_add_d(double a, double b) { return a + b; @@ -111,7 +106,6 @@ double grib_op_sub_d(double a, double b) { return a - b; } - double grib_op_eq_d(double a, double b) { return a == b; diff --git a/src/grib_accessor.cc b/src/grib_accessor.cc index 58cf51c0e..a08f5348e 100644 --- a/src/grib_accessor.cc +++ b/src/grib_accessor.cc @@ -10,13 +10,12 @@ /*************************************************************************** * Jean Baptiste Filippi - 01.11.2005 - * Enrico Fucile ***************************************************************************/ #include "grib_accessor.h" -/* Note: A fast cut-down version of strcmp which does NOT return -1 */ -/* 0 means input strings are equal and 1 means not equal */ +// Note: A fast cut-down version of strcmp which does NOT return -1 +// 0 means input strings are equal and 1 means not equal GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b) { if (*a != *b) @@ -44,7 +43,7 @@ void grib_accessor_dump(grib_accessor* a, grib_dumper* f) int grib_pack_missing(grib_accessor* a) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->pack_missing) { return c->pack_missing(a); @@ -55,24 +54,24 @@ int grib_pack_missing(grib_accessor* a) return 0; } -int grib_pack_zero(grib_accessor* a) -{ - grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ - while (c) { - if (c->clear) { - return c->clear(a); - } - c = c->super ? *(c->super) : NULL; - } - DEBUG_ASSERT(0); - return 0; -} +// int grib_pack_zero(grib_accessor* a) +// { +// grib_accessor_class* c = a->cclass; +// while (c) { +// if (c->clear) { +// return c->clear(a); +// } +// c = c->super ? *(c->super) : NULL; +// } +// DEBUG_ASSERT(0); +// return 0; +// } int grib_is_missing_internal(grib_accessor* a) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + // grib_context_log(a->context, GRIB_LOG_DEBUG, + // "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->is_missing) { return c->is_missing(a); @@ -86,7 +85,7 @@ int grib_is_missing_internal(grib_accessor* a) int grib_pack_double(grib_accessor* a, const double* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->pack_double) { return c->pack_double(a, v, len); @@ -113,7 +112,7 @@ int grib_pack_float(grib_accessor* a, const float* v, size_t* len) int grib_pack_expression(grib_accessor* a, grib_expression* e) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->pack_expression) { return c->pack_expression(a, e); @@ -127,7 +126,7 @@ int grib_pack_expression(grib_accessor* a, grib_expression* e) int grib_pack_string(grib_accessor* a, const char* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)");*/ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)"); while (c) { if (c->pack_string) { return c->pack_string(a, v, len); @@ -141,7 +140,7 @@ int grib_pack_string(grib_accessor* a, const char* v, size_t* len) int grib_pack_string_array(grib_accessor* a, const char** v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)");*/ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)"); while (c) { if (c->pack_string_array) { return c->pack_string_array(a, v, len); @@ -155,7 +154,7 @@ int grib_pack_string_array(grib_accessor* a, const char** v, size_t* len) int grib_pack_long(grib_accessor* a, const long* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->pack_long) { return c->pack_long(a, v, len); @@ -169,7 +168,7 @@ int grib_pack_long(grib_accessor* a, const long* v, size_t* len) int grib_pack_bytes(grib_accessor* a, const unsigned char* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (bytes) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (bytes) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->pack_bytes) { return c->pack_bytes(a, v, len); @@ -183,7 +182,7 @@ int grib_pack_bytes(grib_accessor* a, const unsigned char* v, size_t* len) int grib_unpack_bytes(grib_accessor* a, unsigned char* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (bytes)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (bytes)",(a->parent->owner)?(a->parent->owner->name):"root", a->name); while (c) { if (c->unpack_bytes) { return c->unpack_bytes(a, v, len); @@ -210,7 +209,7 @@ int grib_unpack_double_subarray(grib_accessor* a, double* v, size_t start, size_ int grib_unpack_double(grib_accessor* a, double* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (double)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (double)",(a->parent->owner)?(a->parent->owner->name):"root", a->name); while (c) { if (c->unpack_double) { return c->unpack_double(a, v, len); @@ -225,7 +224,7 @@ int grib_unpack_float(grib_accessor* a, float* v, size_t* len) { grib_accessor_class* c = a->cclass; while (c) { - /* printf("grib_accessor.c grib_unpack_float:: c->name=%s\n",c->name); */ + //printf("grib_accessor.c grib_unpack_float:: c->name=%s\n",c->name); if (c->unpack_float) { return c->unpack_float(a, v, len); } @@ -260,20 +259,19 @@ int grib_unpack_double_element(grib_accessor* a, size_t i, double* v) } int grib_unpack_float_element(grib_accessor* a, size_t i, float* v) { - /* grib_accessor_class* c = a->cclass; - * while (c) { - * if (c->unpack_float_element) { - * return c->unpack_float_element(a, i, v); - * } - * c = c->super ? *(c->super) : NULL; - * } - */ + // grib_accessor_class* c = a->cclass; + // while (c) { + // if (c->unpack_float_element) { + // return c->unpack_float_element(a, i, v); + // } + // c = c->super ? *(c->super) : NULL; + //} + return GRIB_NOT_IMPLEMENTED; } -/* Get the values for the indices passed in. - * The length of the 'index_array' argument should be 'len' and 'val_array' should also contain at least 'len' elements - */ +// Get the values for the indices passed in. +// The length of the 'index_array' argument should be 'len' and 'val_array' should also contain at least 'len' elements int grib_unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) { grib_accessor_class* c = a->cclass; @@ -288,23 +286,22 @@ int grib_unpack_double_element_set(grib_accessor* a, const size_t* index_array, } int grib_unpack_float_element_set(grib_accessor* a, const size_t* index_array, size_t len, float* val_array) { - /* - *grib_accessor_class* c = a->cclass; - *DEBUG_ASSERT(len > 0); - *while (c) { - * if (c->unpack_float_element_set) { - * return c->unpack_float_element_set(a, index_array, len, val_array); - * } - * c = c->super ? *(c->super) : NULL; - *} - */ + // grib_accessor_class* c = a->cclass; + // DEBUG_ASSERT(len > 0); + // while (c) { + // if (c->unpack_float_element_set) { + // return c->unpack_float_element_set(a, index_array, len, val_array); + // } + // c = c->super ? *(c->super) : NULL; + // } + return GRIB_NOT_IMPLEMENTED; } int grib_unpack_string(grib_accessor* a, char* v, size_t* len) { grib_accessor_class* c = a->cclass; - /* grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (string)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (string)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); while (c) { if (c->unpack_string) { return c->unpack_string(a, v, len); @@ -399,7 +396,7 @@ int grib_accessors_list_unpack_string(grib_accessors_list* al, char** val, size_ int grib_unpack_long(grib_accessor* a, long* v, size_t* len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); while (c) { if (c->unpack_long) { return c->unpack_long(a, v, len); @@ -428,7 +425,8 @@ long grib_accessor_get_native_type(grib_accessor* a) long grib_get_next_position_offset(grib_accessor* a) { grib_accessor_class* c = NULL; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is checking next (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, + // "(%s)%s is checking next (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); if (a) c = a->cclass; @@ -528,13 +526,12 @@ int grib_accessor_notify_change(grib_accessor* a, grib_accessor* changed) c = c->super ? *(c->super) : NULL; } if (a && a->cclass) - printf("notify_change not implemented for %s %s\n", a->cclass->name, a->name); + fprintf(stderr, "Error: notify_change not implemented for %s %s\n", a->cclass->name, a->name); DEBUG_ASSERT(0); return 0; } -/* For this one, ALL init are called */ - +// For this one, ALL init are called static void init_accessor(grib_accessor_class* c, grib_accessor* a, const long len, grib_arguments* args) { if (c) { @@ -550,27 +547,26 @@ void grib_init_accessor(grib_accessor* a, const long len, grib_arguments* args) init_accessor(a->cclass, a, len, args); } -/* For this one, ALL destroy are called */ - +// For this one, ALL destroy are called void grib_accessor_delete(grib_context* ct, grib_accessor* a) { grib_accessor_class* c = a->cclass; while (c) { grib_accessor_class* s = c->super ? *(c->super) : NULL; - /*printf("grib_accessor_delete: before destroy a=%p c->name=%s ==> a->name=%s\n", (void*)a, c->name, a->name);*/ + //printf("grib_accessor_delete: before destroy a=%p c->name=%s ==> a->name=%s\n", (void*)a, c->name, a->name); if (c->destroy) { c->destroy(ct, a); } c = s; } - /*printf("grib_accessor_delete before free a=%p\n", (void*)a);*/ + // printf("grib_accessor_delete before free a=%p\n", (void*)a); grib_context_free(ct, a); } grib_accessor* grib_accessor_clone(grib_accessor* a, grib_section* s, int* err) { grib_accessor_class* c = a->cclass; - grib_context* ct = a->context; + const grib_context* ct = a->context; while (c) { grib_accessor_class* super = c->super ? *(c->super) : NULL; grib_context_log(ct, GRIB_LOG_DEBUG, "clone %s ==> %s", c->name, a->name); @@ -585,7 +581,8 @@ grib_accessor* grib_accessor_clone(grib_accessor* a, grib_section* s, int* err) void grib_update_size(grib_accessor* a, size_t len) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, + // "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->update_size) { c->update_size(a, len); @@ -613,7 +610,8 @@ int grib_nearest_smaller_value(grib_accessor* a, double val, double* nearest) size_t grib_preferred_size(grib_accessor* a, int from_handle) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + // grib_context_log(a->context, GRIB_LOG_DEBUG, + // "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->preferred_size) { return c->preferred_size(a, from_handle); @@ -640,7 +638,8 @@ grib_accessor* grib_next_accessor(grib_accessor* a) void grib_resize(grib_accessor* a, size_t new_size) { grib_accessor_class* c = a->cclass; - /*grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + //grib_context_log(a->context, GRIB_LOG_DEBUG, + // "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); while (c) { if (c->resize) { c->resize(a, new_size); @@ -703,7 +702,7 @@ int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_ grib_accessor* aloc = a; if (grib_accessor_has_attributes(a)) { - same = ecc__grib_accessor_get_attribute(a, attr->name, &id); + same = grib_accessor_get_attribute_index(a, attr->name, &id); } if (same) { @@ -714,11 +713,11 @@ int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_ for (id = 0; id < MAX_ACCESSOR_ATTRIBUTES; id++) { if (aloc->attributes[id] == NULL) { - /* attr->parent=a->parent; */ + // attr->parent=a->parent; aloc->attributes[id] = attr; attr->parent_as_attribute = aloc; if (aloc->same) - attr->same = ecc__grib_accessor_get_attribute(aloc->same, attr->name, &idx); + attr->same = grib_accessor_get_attribute_index(aloc->same, attr->name, &idx); grib_context_log(a->context, GRIB_LOG_DEBUG, "added attribute %s->%s", a->name, attr->name); return GRIB_SUCCESS; @@ -727,50 +726,49 @@ int grib_accessor_add_attribute(grib_accessor* a, grib_accessor* attr, int nest_ return GRIB_TOO_MANY_ATTRIBUTES; } -int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr) -{ - int id = 0; - int idx = 0; - if (ecc__grib_accessor_get_attribute(a, attr->name, &id) != NULL) { - grib_accessor_delete(a->context, a->attributes[id]); - a->attributes[id] = attr; - attr->parent_as_attribute = a; - if (a->same) - attr->same = ecc__grib_accessor_get_attribute(a->same, attr->name, &idx); - } - else { - grib_accessor_add_attribute(a, attr, 0); - } - return GRIB_SUCCESS; -} +// int grib_accessor_replace_attribute(grib_accessor* a, grib_accessor* attr) +// { +// int id = 0; +// int idx = 0; +// if (grib_accessor_get_attribute_index(a, attr->name, &id) != NULL) { +// grib_accessor_delete(a->context, a->attributes[id]); +// a->attributes[id] = attr; +// attr->parent_as_attribute = a; +// if (a->same) +// attr->same = grib_accessor_get_attribute_index(a->same, attr->name, &idx); +// } +// else { +// grib_accessor_add_attribute(a, attr, 0); +// } +// return GRIB_SUCCESS; +// } -int grib_accessor_delete_attribute(grib_accessor* a, const char* name) -{ - int id = 0; - if (ecc__grib_accessor_get_attribute(a, name, &id) != NULL) { - grib_accessor_delete(a->context, a->attributes[id]); - a->attributes[id] = NULL; - return GRIB_SUCCESS; - } - else { - return GRIB_NOT_FOUND; - } -} +// int grib_accessor_delete_attribute(grib_accessor* a, const char* name) +// { +// int id = 0; +// if (grib_accessor_get_attribute_index(a, name, &id) != NULL) { +// grib_accessor_delete(a->context, a->attributes[id]); +// a->attributes[id] = NULL; +// return GRIB_SUCCESS; +// } +// else { +// return GRIB_NOT_FOUND; +// } +// } -grib_accessor* grib_accessor_get_attribute_by_index(grib_accessor* a, int index) -{ - if (index < MAX_ACCESSOR_ATTRIBUTES) - return a->attributes[index]; +// grib_accessor* grib_accessor_get_attribute_by_index(grib_accessor* a, int index) +// { +// if (index < MAX_ACCESSOR_ATTRIBUTES) +// return a->attributes[index]; +// return NULL; +// } - return NULL; -} +// const char* grib_accessor_get_name(grib_accessor* a) +// { +// return a->name; +// } -const char* grib_accessor_get_name(grib_accessor* a) -{ - return a->name; -} - -grib_accessor* ecc__grib_accessor_get_attribute(grib_accessor* a, const char* name, int* index) +grib_accessor* grib_accessor_get_attribute_index(grib_accessor* a, const char* name, int* index) { int i = 0; while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { @@ -799,14 +797,14 @@ grib_accessor* grib_accessor_get_attribute(grib_accessor* a, const char* name) while (*(p + 1) != '\0' && (*p != '-' || *(p + 1) != '>')) p++; if (*(p + 1) == '\0') { - return ecc__grib_accessor_get_attribute(a, name, &index); + return grib_accessor_get_attribute_index(a, name, &index); } else { size_t size = p - name; attribute_name = p + 2; basename = (char*)grib_context_malloc_clear(a->context, size + 1); basename = (char*)memcpy(basename, name, size); - acc = ecc__grib_accessor_get_attribute(a, basename, &index); + acc = grib_accessor_get_attribute_index(a, basename, &index); grib_context_free(a->context, basename); if (acc) return grib_accessor_get_attribute(acc, attribute_name); @@ -823,7 +821,7 @@ grib_accessors_list* grib_accessors_list_create(grib_context* c) void grib_accessors_list_push(grib_accessors_list* al, grib_accessor* a, int rank) { grib_accessors_list* last; - grib_context* c = a->context; + const grib_context* c = a->context; last = grib_accessors_list_last(al); if (last && last->accessor) { @@ -842,32 +840,27 @@ void grib_accessors_list_push(grib_accessors_list* al, grib_accessor* a, int ran grib_accessors_list* grib_accessors_list_last(grib_accessors_list* al) { - /*grib_accessors_list* last=al;*/ - /*grib_accessors_list* next=al->next;*/ - - /* - while(next) { - last=next; - next=last->next; - } - */ + // grib_accessors_list* last=al; + // grib_accessors_list* next=al->next; + // while(next) { + // last=next; + // next=last->next; + // } return al->last; } -grib_accessors_list* grib_accessors_list_find(grib_accessors_list* al, const grib_accessor* a) -{ - grib_accessors_list* last = al; - grib_accessors_list* next = al->next; - - while (next) { - if (last->accessor == a) - return last; - last = next; - next = last->next; - } - - return NULL; -} +// grib_accessors_list* grib_accessors_list_find(grib_accessors_list* al, const grib_accessor* a) +// { +// grib_accessors_list* last = al; +// grib_accessors_list* next = al->next; +// while (next) { +// if (last->accessor == a) +// return last; +// last = next; +// next = last->next; +// } +// return NULL; +// } void grib_accessors_list_delete(grib_context* c, grib_accessors_list* al) { @@ -875,7 +868,7 @@ void grib_accessors_list_delete(grib_context* c, grib_accessors_list* al) while (al) { tmp = al->next; - /*grib_accessor_delete(c, al->accessor);*/ + //grib_accessor_delete(c, al->accessor); grib_context_free(c, al); al = tmp; } diff --git a/src/grib_accessor_class.cc b/src/grib_accessor_class.cc index 9de104328..9cdd04b97 100644 --- a/src/grib_accessor_class.cc +++ b/src/grib_accessor_class.cc @@ -226,7 +226,7 @@ static void link_same_attributes(grib_accessor* a, grib_accessor* b) if (!grib_accessor_has_attributes(b)) return; while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { - bAttribute = ecc__grib_accessor_get_attribute(b, a->attributes[i]->name, &idx); + bAttribute = grib_accessor_get_attribute_index(b, a->attributes[i]->name, &idx); if (bAttribute) a->attributes[i]->same = bAttribute; i++; diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h index 8352a8d27..0c569decd 100644 --- a/src/grib_accessor_class.h +++ b/src/grib_accessor_class.h @@ -131,6 +131,7 @@ extern grib_accessor_class* grib_accessor_class_mars_step; extern grib_accessor_class* grib_accessor_class_md5; extern grib_accessor_class* grib_accessor_class_message; extern grib_accessor_class* grib_accessor_class_message_copy; +extern grib_accessor_class* grib_accessor_class_multdouble; extern grib_accessor_class* grib_accessor_class_nearest; extern grib_accessor_class* grib_accessor_class_non_alpha; extern grib_accessor_class* grib_accessor_class_number_of_coded_values; diff --git a/src/grib_accessor_class_ascii.cc b/src/grib_accessor_class_ascii.cc index 9d88fa9f9..b0c90182e 100644 --- a/src/grib_accessor_class_ascii.cc +++ b/src/grib_accessor_class_ascii.cc @@ -147,19 +147,19 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) grib_handle* hand = grib_handle_of_accessor(a); const size_t alen = a->length; - if (len[0] < (alen + 1)) { + if (*len < (alen + 1)) { const char* cclass_name = a->cclass->name; grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", cclass_name, a->name, alen+1, *len); - len[0] = alen + 1; + *len = alen + 1; return GRIB_BUFFER_TOO_SMALL; } for (i = 0; i < alen; i++) val[i] = hand->buffer->data[a->offset + i]; val[i] = 0; - len[0] = i; + *len = i; return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_bit.cc b/src/grib_accessor_class_bit.cc index 17c1d3c8c..ab81eecda 100644 --- a/src/grib_accessor_class_bit.cc +++ b/src/grib_accessor_class_bit.cc @@ -17,7 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS = const char* owner MEMBERS = int bit_index END_CLASS_DEF @@ -36,7 +36,6 @@ or edit "accessor.class" and rerun ./make_class.pl static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_bit @@ -60,7 +59,7 @@ static grib_accessor_class _grib_accessor_class_bit = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -107,26 +106,20 @@ grib_accessor_class* grib_accessor_class_bit = &_grib_accessor_class_bit; static void init(grib_accessor* a, const long len, grib_arguments* arg) { grib_accessor_bit* self = (grib_accessor_bit*)a; - a->length = 0; - self->owner = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0); - self->bit_index = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1); -} - -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); + a->length = 0; + self->owner = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0); + self->bit_index = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1); } static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_bit* self = (grib_accessor_bit*)a; - int ret = 0; - + int ret = 0; long data = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit : unpack_long : Wrong size for %s it contains %d values ", a->name, 1); - *len = 0; + grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit: unpack_long: Wrong size for %s, it contains %d values ", a->name, 1); + *len = 1; return GRIB_ARRAY_TOO_SMALL; } @@ -147,23 +140,22 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) static int pack_long(grib_accessor* a, const long* val, size_t* len) { grib_accessor_bit* self = (grib_accessor_bit*)a; - grib_accessor* owner = NULL; - unsigned char* mdata = 0; + if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit : pack_long : At least one value to pack for %s", a->name); - *len = 0; + grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit: pack_long: At least one value to pack for %s", a->name); + *len = 1; return GRIB_ARRAY_TOO_SMALL; } - owner = grib_find_accessor(grib_handle_of_accessor(a), self->owner); - + grib_accessor* owner = grib_find_accessor(grib_handle_of_accessor(a), self->owner); if (!owner) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit : Cannot get the owner %s for computing the bit value of %s ", self->owner, a->name); + grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit: Cannot get the owner %s for computing the bit value of %s", + self->owner, a->name); *len = 0; return GRIB_NOT_FOUND; } - mdata = grib_handle_of_accessor(a)->buffer->data; + unsigned char* mdata = grib_handle_of_accessor(a)->buffer->data; mdata += grib_byte_offset(owner); /* Note: In the definitions, flagbit numbers go from 7 to 0 (the bit_index), while WMO convention is from 1 to 8 */ diff --git a/src/grib_accessor_class_bitmap.cc b/src/grib_accessor_class_bitmap.cc index b3c371a35..b86b34332 100644 --- a/src/grib_accessor_class_bitmap.cc +++ b/src/grib_accessor_class_bitmap.cc @@ -161,8 +161,8 @@ static void compute_size(grib_accessor* a) static void init(grib_accessor* a, const long len, grib_arguments* arg) { grib_accessor_bitmap* self = (grib_accessor_bitmap*)a; - grib_handle* hand = grib_handle_of_accessor(a); - int n = 0; + grib_handle* hand = grib_handle_of_accessor(a); + int n = 0; self->tableReference = grib_arguments_get_name(hand, arg, n++); self->missing_value = grib_arguments_get_name(hand, arg, n++); @@ -190,23 +190,21 @@ static void dump(grib_accessor* a, grib_dumper* dumper) static int unpack_long(grib_accessor* a, long* val, size_t* len) { - long pos = a->offset * 8; - long tlen = 0; - long i = 0; - int err = 0; + long pos = a->offset * 8; + long tlen = 0; const grib_handle* hand = grib_handle_of_accessor(a); - err = grib_value_count(a, &tlen); + int err = grib_value_count(a, &tlen); if (err) return err; if (*len < tlen) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name, tlen); - *len = 0; + *len = tlen; return GRIB_ARRAY_TOO_SMALL; } - for (i = 0; i < tlen; i++) { + for (long i = 0; i < tlen; i++) { val[i] = (long)grib_decode_unsigned_long(hand->buffer->data, &pos, 1); } *len = tlen; @@ -219,21 +217,19 @@ static int unpack(grib_accessor* a, T* val, size_t* len) static_assert(std::is_floating_point::value, "Requires floating points numbers"); long pos = a->offset * 8; long tlen; - long i; - int err = 0; grib_handle* hand = grib_handle_of_accessor(a); - err = grib_value_count(a, &tlen); + int err = grib_value_count(a, &tlen); if (err) return err; if (*len < tlen) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name, tlen); - *len = 0; + *len = tlen; return GRIB_ARRAY_TOO_SMALL; } - for (i = 0; i < tlen; i++) { + for (long i = 0; i < tlen; i++) { val[i] = (T)grib_decode_unsigned_long(hand->buffer->data, &pos, 1); } *len = tlen; @@ -261,8 +257,7 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val) } static int unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) { - size_t i = 0; - for (i=0; ilength; @@ -293,11 +287,11 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) return GRIB_BUFFER_TOO_SMALL; } - for (i = 0; i < a->length; i++) { + for (long i = 0; i < a->length; i++) { val[i] = hand->buffer->data[a->offset + i]; } - len[0] = a->length; + *len = a->length; return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_bufr_data_array.cc b/src/grib_accessor_class_bufr_data_array.cc index c1bff6ea6..3d044835a 100644 --- a/src/grib_accessor_class_bufr_data_array.cc +++ b/src/grib_accessor_class_bufr_data_array.cc @@ -1523,10 +1523,10 @@ static int build_bitmap(grib_accessor_bufr_data_array* self, unsigned char* data int bitmapSize = 0, iDelayedReplication = 0; int i, localReference, width, bitmapEndElementsDescriptorsIndex; long ppos, n; - grib_accessor* a = (grib_accessor*)self; - grib_context* c = a->context; + grib_accessor* a = (grib_accessor*)self; + const grib_context* c = a->context; bufr_descriptor** descriptors = self->expanded->v; - long* edi = elementsDescriptorsIndex->v; + const long* edi = elementsDescriptorsIndex->v; /* int iel=grib_iarray_used_size(elementsDescriptorsIndex)-1; */ int err = 0; @@ -1652,10 +1652,10 @@ static int build_bitmap_new_data(grib_accessor_bufr_data_array* self, unsigned c int bitmapSize = 0, iDelayedReplication = 0; int i, bitmapEndElementsDescriptorsIndex; long n; - grib_accessor* a = (grib_accessor*)self; - grib_context* c = a->context; + grib_accessor* a = (grib_accessor*)self; + const grib_context* c = a->context; bufr_descriptor** descriptors = self->expanded->v; - long* edi = elementsDescriptorsIndex->v; + const long* edi = elementsDescriptorsIndex->v; switch (descriptors[iBitmapOperator]->code) { case 222000: diff --git a/src/grib_accessor_class_bufr_data_element.cc b/src/grib_accessor_class_bufr_data_element.cc index 1e98e17d9..3301eb10f 100644 --- a/src/grib_accessor_class_bufr_data_element.cc +++ b/src/grib_accessor_class_bufr_data_element.cc @@ -191,61 +191,61 @@ static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err) void accessor_bufr_data_element_set_index(grib_accessor* a, long index) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->index = index; + self->index = index; } void accessor_bufr_data_element_set_type(grib_accessor* a, int type) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->type = type; + self->type = type; } void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor* a, long numberOfSubsets) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->numberOfSubsets = numberOfSubsets; + self->numberOfSubsets = numberOfSubsets; } void accessor_bufr_data_element_set_subsetNumber(grib_accessor* a, long subsetNumber) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->subsetNumber = subsetNumber; + self->subsetNumber = subsetNumber; } void accessor_bufr_data_element_set_compressedData(grib_accessor* a, int compressedData) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->compressedData = compressedData; + self->compressedData = compressedData; } void accessor_bufr_data_element_set_descriptors(grib_accessor* a, bufr_descriptors_array* descriptors) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->descriptors = descriptors; + self->descriptors = descriptors; } void accessor_bufr_data_element_set_numericValues(grib_accessor* a, grib_vdarray* numericValues) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->numericValues = numericValues; + self->numericValues = numericValues; } void accessor_bufr_data_element_set_stringValues(grib_accessor* a, grib_vsarray* stringValues) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->stringValues = stringValues; + self->stringValues = stringValues; } void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor* a, grib_viarray* elementsDescriptorsIndex) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - self->elementsDescriptorsIndex = elementsDescriptorsIndex; + self->elementsDescriptorsIndex = elementsDescriptorsIndex; } static void init(grib_accessor* a, const long len, grib_arguments* params) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - a->length = 0; + a->length = 0; a->flags |= GRIB_ACCESSOR_FLAG_BUFR_DATA; /* a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; */ self->cname = NULL; @@ -272,8 +272,8 @@ static int unpack_string_array(grib_accessor* a, char** val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, i, idx; - long count = 0; + int ret = 0, idx = 0; + size_t count = 0, i = 0; grib_context* c = a->context; if (self->compressedData) { @@ -289,7 +289,7 @@ static int unpack_string_array(grib_accessor* a, char** val, size_t* len) else { DEBUG_ASSERT(self->subsetNumber < self->numericValues->n); DEBUG_ASSERT(self->index < self->numericValues->v[self->subsetNumber]->n); - idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; + idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1; val[0] = grib_context_strdup(c, self->stringValues->v[idx]->v[0]); *len = 1; } @@ -308,7 +308,7 @@ static int pack_string_array(grib_accessor* a, const char** v, size_t* len) if (self->compressedData) { idx = ((int)self->numericValues->v[self->index]->v[0] / 1000 - 1) / self->numberOfSubsets; - if (*len != 1 && *len != self->numberOfSubsets) { + if (*len != 1 && *len != (size_t)self->numberOfSubsets) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %ld strings provided but expected %ld (=number of subsets)", self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[idx]]->shortName, *len, self->numberOfSubsets); return GRIB_ARRAY_TOO_SMALL; @@ -323,7 +323,7 @@ static int pack_string_array(grib_accessor* a, const char** v, size_t* len) } else { //ECC-1623 - if (*len != self->numberOfSubsets) { + if (*len != (size_t)self->numberOfSubsets) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %zu strings provided but expected %ld (=number of subsets)", a->name, *len, self->numberOfSubsets); @@ -343,8 +343,8 @@ static int pack_string_array(grib_accessor* a, const char** v, size_t* len) static int unpack_string(grib_accessor* a, char* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - char* str = NULL; - char* p = 0; + char* str = NULL; + char* p = 0; size_t slen = 0; double dval = 0; size_t dlen = 1; @@ -413,8 +413,8 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = GRIB_SUCCESS, idx = 0; - char* s = NULL; + int ret = GRIB_SUCCESS, idx = 0; + char* s = NULL; grib_context* c = a->context; if (self->compressedData) { @@ -426,7 +426,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) grib_sarray_delete_content(c, self->stringValues->v[idx]); /* ECC-1172 */ grib_sarray_delete(c, self->stringValues->v[idx]); self->stringValues->v[idx] = grib_sarray_new(c, 1, 1); - s = grib_context_strdup(c, val); + s = grib_context_strdup(c, val); grib_sarray_push(c, self->stringValues->v[idx], s); return ret; @@ -435,7 +435,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = GRIB_SUCCESS; + int ret = GRIB_SUCCESS; long count = 0, i = 0; value_count(a, &count); @@ -494,12 +494,12 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; int ret = GRIB_SUCCESS; - long count = 1, i = 0; + size_t count = 1, i = 0; grib_context* c = a->context; if (self->compressedData) { count = *len; - if (count != 1 && count != self->numberOfSubsets) { + if (count != 1 && count != (size_t)self->numberOfSubsets) { grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %ld doubles provided but expected %ld (=number of subsets)", self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[self->index]]->shortName, count, self->numberOfSubsets); return GRIB_ARRAY_TOO_SMALL; @@ -514,7 +514,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) } else { self->numericValues->v[self->subsetNumber]->v[self->index] = val[0]; - *len = 1; + *len = 1; } return ret; @@ -523,14 +523,14 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) static int pack_long(grib_accessor* a, const long* val, size_t* len) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = 0, i; - long count = 1; - grib_context* c = a->context; + int ret = 0; + size_t count = 1, i = 0; + grib_context* c = a->context; if (self->compressedData) { count = *len; - if (count != 1 && count != self->numberOfSubsets) { - grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %ld integers provided but expected %ld (=number of subsets)", + if (count != 1 && count != (size_t)self->numberOfSubsets) { + grib_context_log(c, GRIB_LOG_ERROR, "Number of values mismatch for '%s': %zu integers provided but expected %ld (=number of subsets)", self->descriptors->v[self->elementsDescriptorsIndex->v[0]->v[self->index]]->shortName, count, self->numberOfSubsets); return GRIB_ARRAY_TOO_SMALL; } @@ -544,7 +544,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) } else { self->numericValues->v[self->subsetNumber]->v[self->index] = val[0] == GRIB_MISSING_LONG ? GRIB_MISSING_DOUBLE : val[0]; - *len = 1; + *len = 1; } return ret; @@ -552,7 +552,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) static int value_count(grib_accessor* a, long* count) { - int ret = 0, type = 0, idx = 0; + int ret = 0, type = 0, idx = 0; size_t size = 0; grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; @@ -581,8 +581,8 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val) { /* ECC-415 */ grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = GRIB_SUCCESS; - long count = 0; + int ret = GRIB_SUCCESS; + long count = 0; value_count(a, &count); if (idx >= (size_t)count) { @@ -601,7 +601,7 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val) static int get_native_type(grib_accessor* a) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int ret = GRIB_TYPE_DOUBLE; + int ret = GRIB_TYPE_DOUBLE; DEBUG_ASSERT(self); switch (self->type) { case BUFR_DESCRIPTOR_TYPE_STRING: @@ -627,7 +627,7 @@ static int get_native_type(grib_accessor* a) static void destroy(grib_context* ct, grib_accessor* a) { grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a; - int i = 0; + int i = 0; if (self->cname) grib_context_free(ct, self->cname); /* ECC-765 */ while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { @@ -650,14 +650,14 @@ static int is_missing(grib_accessor* a) grib_context* c = a->context; if (ktype == GRIB_TYPE_LONG) { - long* values = NULL; - long value = 0; + long* values = NULL; + long value = 0; value_count(a, &count); size = size2 = count; if (size > 1) { values = (long*)grib_context_malloc_clear(c, sizeof(long) * size); - err = grib_unpack_long(a, values, &size2); + err = grib_unpack_long(a, values, &size2); } else { err = grib_unpack_long(a, &value, &size2); @@ -677,14 +677,14 @@ static int is_missing(grib_accessor* a) } } else if (ktype == GRIB_TYPE_DOUBLE) { - double value = 0; - double* values = NULL; + double value = 0; + double* values = NULL; value_count(a, &count); size = size2 = count; if (size > 1) { values = (double*)grib_context_malloc_clear(c, sizeof(double) * size); - err = grib_unpack_double(a, values, &size2); + err = grib_unpack_double(a, values, &size2); } else { err = grib_unpack_double(a, &value, &size2); @@ -705,7 +705,7 @@ static int is_missing(grib_accessor* a) } } else if (ktype == GRIB_TYPE_STRING) { - char** values = NULL; + char** values = NULL; value_count(a, &count); size = count; if (size > 1) { diff --git a/src/grib_accessor_class_bufr_elements_table.cc b/src/grib_accessor_class_bufr_elements_table.cc index cee7049aa..4858ff63d 100644 --- a/src/grib_accessor_class_bufr_elements_table.cc +++ b/src/grib_accessor_class_bufr_elements_table.cc @@ -379,8 +379,7 @@ bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, i DEBUG_ASSERT(c); v = (bufr_descriptor*)grib_context_malloc_clear(c, sizeof(bufr_descriptor)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "accessor_bufr_elements_table_get_descriptor: unable to allocate %ld bytes\n", sizeof(bufr_descriptor)); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(bufr_descriptor)); *err = GRIB_OUT_OF_MEMORY; return NULL; } diff --git a/src/grib_accessor_class_bufr_extract_subsets.cc b/src/grib_accessor_class_bufr_extract_subsets.cc index 599d1d7b4..567ceb61a 100644 --- a/src/grib_accessor_class_bufr_extract_subsets.cc +++ b/src/grib_accessor_class_bufr_extract_subsets.cc @@ -108,7 +108,7 @@ grib_accessor_class* grib_accessor_class_bufr_extract_subsets = &_grib_accessor_ static void get_accessors(grib_accessor* a) { grib_accessor_bufr_extract_subsets* self = (grib_accessor_bufr_extract_subsets*)a; - grib_handle* h = grib_handle_of_accessor(a); + const grib_handle* h = grib_handle_of_accessor(a); if (self->packAccessor) return; @@ -118,7 +118,7 @@ static void get_accessors(grib_accessor* a) static void init(grib_accessor* a, const long len, grib_arguments* arg) { - int n = 0; + int n = 0; grib_accessor_bufr_extract_subsets* self = (grib_accessor_bufr_extract_subsets*)a; a->length = 0; @@ -134,15 +134,14 @@ static int get_native_type(grib_accessor* a) static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int err = 0; grib_accessor_bufr_extract_subsets* self = (grib_accessor_bufr_extract_subsets*)a; - size_t l = 1; + size_t l = 1; long v[1]; get_accessors(a); v[0] = 1; - err = grib_pack_long(self->packAccessor, v, &l); + int err = grib_pack_long(self->packAccessor, v, &l); if (err) { if (err == GRIB_ENCODING_ERROR) grib_context_log(a->context, GRIB_LOG_ERROR, "Could not extract subset(s).\n\tHint: Did you forget to set unpack=1?"); diff --git a/src/grib_accessor_class_bufr_simple_thinning.cc b/src/grib_accessor_class_bufr_simple_thinning.cc index b457d0e9e..cd0181fe4 100644 --- a/src/grib_accessor_class_bufr_simple_thinning.cc +++ b/src/grib_accessor_class_bufr_simple_thinning.cc @@ -133,18 +133,17 @@ static int get_native_type(grib_accessor* a) static int apply_thinning(grib_accessor* a) { - grib_accessor_bufr_simple_thinning* self = (grib_accessor_bufr_simple_thinning*)a; - int ret = 0; + const grib_accessor_bufr_simple_thinning* self = (grib_accessor_bufr_simple_thinning*)a; + long skip; grib_handle* h = grib_handle_of_accessor(a); grib_context* c = h->context; long compressed = 0, nsubsets; - long i; grib_iarray* subsets; long* subsets_ar = 0; long start = 0, radius = 0; - ret = grib_get_long(h, "compressedData", &compressed); + int ret = grib_get_long(h, "compressedData", &compressed); if (ret) return ret; if (compressed) { @@ -168,7 +167,7 @@ static int apply_thinning(grib_accessor* a) return ret; subsets = grib_iarray_new(c, numberOfSubsets / skip + 1, 10); - for (i = 0; i < numberOfSubsets; i += skip + 1) { + for (long i = 0; i < numberOfSubsets; i += skip + 1) { grib_iarray_push(subsets, i + 1); } @@ -200,12 +199,11 @@ static int apply_thinning(grib_accessor* a) static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int err = 0; - grib_accessor_bufr_simple_thinning* self = (grib_accessor_bufr_simple_thinning*)a; + const grib_accessor_bufr_simple_thinning* self = (grib_accessor_bufr_simple_thinning*)a; if (*len == 0) return GRIB_SUCCESS; - err = apply_thinning(a); + int err = apply_thinning(a); if (err) return err; diff --git a/src/grib_accessor_class_bufrdc_expanded_descriptors.cc b/src/grib_accessor_class_bufrdc_expanded_descriptors.cc index 8476f4708..929e21724 100644 --- a/src/grib_accessor_class_bufrdc_expanded_descriptors.cc +++ b/src/grib_accessor_class_bufrdc_expanded_descriptors.cc @@ -24,7 +24,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long IMPLEMENTS = unpack_string_array -IMPLEMENTS = init;dump;destroy +IMPLEMENTS = init;destroy IMPLEMENTS = value_count MEMBERS = const char* expandedDescriptors MEMBERS = grib_accessor* expandedDescriptorsAccessor @@ -47,7 +47,6 @@ static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string_array(grib_accessor*, char**, size_t* len); static int value_count(grib_accessor*, long*); static void destroy(grib_context*, grib_accessor*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_bufrdc_expanded_descriptors @@ -71,7 +70,7 @@ static grib_accessor_class _grib_accessor_class_bufrdc_expanded_descriptors = { &init, /* init */ 0, /* post_init */ &destroy, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -125,11 +124,6 @@ static void init(grib_accessor* a, const long len, grib_arguments* args) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static grib_accessor* get_accessor(grib_accessor* a) { grib_accessor_bufrdc_expanded_descriptors* self = (grib_accessor_bufrdc_expanded_descriptors*)a; diff --git a/src/grib_accessor_class_change_alternative_row_scanning.cc b/src/grib_accessor_class_change_alternative_row_scanning.cc index 394bb8409..d8eef0eb4 100644 --- a/src/grib_accessor_class_change_alternative_row_scanning.cc +++ b/src/grib_accessor_class_change_alternative_row_scanning.cc @@ -125,7 +125,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) { int err = 0; grib_accessor_change_alternative_row_scanning* self = (grib_accessor_change_alternative_row_scanning*)a; - grib_context* c = a->context; + const grib_context* c = a->context; grib_handle* h = grib_handle_of_accessor(a); long i, j, jr, theEnd, Ni, Nj, k, kp, alternativeRowScanning; size_t size = 0; diff --git a/src/grib_accessor_class_change_scanning_direction.cc b/src/grib_accessor_class_change_scanning_direction.cc index 88fbc35fb..f951c9083 100644 --- a/src/grib_accessor_class_change_scanning_direction.cc +++ b/src/grib_accessor_class_change_scanning_direction.cc @@ -146,7 +146,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) size_t size = 0; double* values = NULL; grib_accessor_change_scanning_direction* self = (grib_accessor_change_scanning_direction*)a; - grib_context* c = a->context; + const grib_context* c = a->context; grib_handle* h = grib_handle_of_accessor(a); const char* cclass_name = a->cclass->name; diff --git a/src/grib_accessor_class_closest_date.cc b/src/grib_accessor_class_closest_date.cc index b4729822f..08ba9f333 100644 --- a/src/grib_accessor_class_closest_date.cc +++ b/src/grib_accessor_class_closest_date.cc @@ -159,6 +159,8 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) /* Sets val to the 'index' of the closes date */ static int unpack_double(grib_accessor* a, double* val, size_t* len) { + const grib_accessor_closest_date* self = (grib_accessor_closest_date*)a; + int err = 0; long num_forecasts = 0; /* numberOfForecastsUsedInLocalTime */ /* These relate to the date and time in Section 1 */ @@ -171,9 +173,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) /* These relate to the forecast dates and times in Section 4 */ long *yearArray, *monthArray, *dayArray, *hourArray, *minuteArray, *secondArray; - grib_accessor_closest_date* self = (grib_accessor_closest_date*)a; grib_handle* h = grib_handle_of_accessor(a); - grib_context* c = a->context; + const grib_context* c = a->context; *val = -1; /* initialise to an invalid index */ if ((err = grib_get_long_internal(h, self->numForecasts, &num_forecasts)) != GRIB_SUCCESS) return err; diff --git a/src/grib_accessor_class_codeflag.cc b/src/grib_accessor_class_codeflag.cc index 77789389d..ab86a64b1 100644 --- a/src/grib_accessor_class_codeflag.cc +++ b/src/grib_accessor_class_codeflag.cc @@ -110,8 +110,8 @@ grib_accessor_class* grib_accessor_class_codeflag = &_grib_accessor_class_codefl static void init(grib_accessor* a, const long len, grib_arguments* param) { grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; - a->length = len; - self->tablename = grib_arguments_get_string(grib_handle_of_accessor(a), param, 0); + a->length = len; + self->tablename = grib_arguments_get_string(grib_handle_of_accessor(a), param, 0); Assert(a->length >= 0); } @@ -123,8 +123,8 @@ static int test_bit(long a, long b) static int grib_get_codeflag(grib_accessor* a, long code, char* codename) { - grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; - FILE* f = NULL; + const grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; + FILE* f = NULL; char fname[1024]; char bval[50]; char num[50]; @@ -200,10 +200,10 @@ static int value_count(grib_accessor* a, long* count) static void dump(grib_accessor* a, grib_dumper* dumper) { - grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; - long v; - char flagname[1024]; - char fname[1024]; + const grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; + long v = 0; + char flagname[1024] = {0,}; + char fname[1024] = {0,}; size_t llen = 1; diff --git a/src/grib_accessor_class_codetable.cc b/src/grib_accessor_class_codetable.cc index 0d97efdfb..9e39ed633 100644 --- a/src/grib_accessor_class_codetable.cc +++ b/src/grib_accessor_class_codetable.cc @@ -908,9 +908,9 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) } if (*len < rlen) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%lu) for %s, it contains %ld values", + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%zu) for %s, it contains %ld values", *len, a->name, rlen); - *len = 0; + *len = rlen; return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/grib_accessor_class_concept.cc b/src/grib_accessor_class_concept.cc index c409a6f92..6fa4122f8 100644 --- a/src/grib_accessor_class_concept.cc +++ b/src/grib_accessor_class_concept.cc @@ -290,7 +290,6 @@ static int concept_conditions_expression_apply(grib_handle* h, grib_concept_cond break; default: return GRIB_NOT_IMPLEMENTED; - break; } (*n)++; return err; diff --git a/src/grib_accessor_class_data_apply_boustrophedonic.cc b/src/grib_accessor_class_data_apply_boustrophedonic.cc index 1f10885e0..e01917384 100644 --- a/src/grib_accessor_class_data_apply_boustrophedonic.cc +++ b/src/grib_accessor_class_data_apply_boustrophedonic.cc @@ -119,7 +119,7 @@ grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic = &_grib_acc static void init(grib_accessor* a, const long v, grib_arguments* args) { - int n = 0; + int n = 0; grib_accessor_data_apply_boustrophedonic* self = (grib_accessor_data_apply_boustrophedonic*)a; self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++); @@ -138,10 +138,10 @@ static void dump(grib_accessor* a, grib_dumper* dumper) static int value_count(grib_accessor* a, long* numberOfPoints) { grib_accessor_data_apply_boustrophedonic* self = (grib_accessor_data_apply_boustrophedonic*)a; - int ret = 0; + int ret = 0; *numberOfPoints = 0; - ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, numberOfPoints); + ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints, numberOfPoints); return ret; } @@ -150,12 +150,13 @@ template static int unpack(grib_accessor* a, T* val, size_t* len) { grib_accessor_data_apply_boustrophedonic* self = (grib_accessor_data_apply_boustrophedonic*)a; - size_t plSize = 0; - long* pl = 0; - double* values = 0; - double* pvalues = 0; - T* pval = 0; - size_t valuesSize = 0; + + size_t plSize = 0; + long* pl = 0; + double* values = 0; + double* pvalues = 0; + T* pval = 0; + size_t valuesSize = 0; long i, j; int ret; long numberOfPoints, numberOfRows, numberOfColumns; @@ -306,12 +307,13 @@ static int unpack_double_element_set(grib_accessor* a, const size_t* index_array static int pack_double(grib_accessor* a, const double* val, size_t* len) { grib_accessor_data_apply_boustrophedonic* self = (grib_accessor_data_apply_boustrophedonic*)a; - size_t plSize = 0; - long* pl = 0; - double* values = 0; - double* pvalues = 0; - double* pval = 0; - size_t valuesSize = 0; + + size_t plSize = 0; + long* pl = 0; + double* values = 0; + double* pvalues = 0; + double* pval = 0; + size_t valuesSize = 0; long i, j; int ret; long numberOfPoints, numberOfRows, numberOfColumns; diff --git a/src/grib_accessor_class_data_ccsds_packing.cc b/src/grib_accessor_class_data_ccsds_packing.cc index 28e961e86..ccfd48c03 100644 --- a/src/grib_accessor_class_data_ccsds_packing.cc +++ b/src/grib_accessor_class_data_ccsds_packing.cc @@ -650,7 +650,7 @@ static int unpack_float(grib_accessor* a, float* val, size_t* len) static int unpack_double_element(grib_accessor* a, size_t idx, double* val) { // The index idx relates to codedValues NOT values! - grib_accessor_data_ccsds_packing* self = (grib_accessor_data_ccsds_packing*)a; + const grib_accessor_data_ccsds_packing* self = (grib_accessor_data_ccsds_packing*)a; grib_handle* hand = grib_handle_of_accessor(a); int err = 0; size_t size = 0; @@ -686,7 +686,7 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val) static int unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array) { - grib_accessor_data_ccsds_packing* self = (grib_accessor_data_ccsds_packing*)a; + const grib_accessor_data_ccsds_packing* self = (grib_accessor_data_ccsds_packing*)a; grib_handle* hand = grib_handle_of_accessor(a); size_t size = 0, i = 0; double* values = NULL; diff --git a/src/grib_accessor_class_data_g1simple_packing.cc b/src/grib_accessor_class_data_g1simple_packing.cc index e9f4aefdc..cc810e4ae 100644 --- a/src/grib_accessor_class_data_g1simple_packing.cc +++ b/src/grib_accessor_class_data_g1simple_packing.cc @@ -194,16 +194,22 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) } if (units_factor != 1.0) { - if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] = val[i] * units_factor + units_bias; - else - for (i = 0; i < n_vals; i++) + } + } + else { + for (i = 0; i < n_vals; i++) { val[i] *= units_factor; + } + } } - else if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + else if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] += units_bias; + } + } if (c->ieee_packing && self->ieee_packing) { long precision = 0; /* Either 1(=32 bits) or 2(=64 bits) */ @@ -239,7 +245,7 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) ret = grib_buffer_replace(a, NULL, 0, 1, 1); if (ret != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; - break; + case GRIB_NO_VALUES: ret = grib_get_long(grib_handle_of_accessor(a), "constantFieldHalfByte", &constantFieldHalfByte); if (ret) @@ -256,7 +262,7 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) ret = grib_buffer_replace(a, NULL, 0, 1, 1); if (ret != GRIB_SUCCESS) return ret; return GRIB_SUCCESS; - break; + case GRIB_INVALID_BPV: grib_context_log(a->context, GRIB_LOG_ERROR, "Unable to compute packing parameters. Invalid bits per value"); return ret; diff --git a/src/grib_accessor_class_data_g22order_packing.cc b/src/grib_accessor_class_data_g22order_packing.cc index f45d9f722..4ed535d29 100644 --- a/src/grib_accessor_class_data_g22order_packing.cc +++ b/src/grib_accessor_class_data_g22order_packing.cc @@ -1772,7 +1772,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) unsigned char* sec7 = reinterpret_cast(grib_context_malloc(a->context, size_sec7)); if (sec7 == NULL) { - grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %d bytes", cclass_name, size_sec7); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Unable to allocate %d bytes", cclass_name, size_sec7); return GRIB_OUT_OF_MEMORY; } diff --git a/src/grib_accessor_class_data_g2simple_packing.cc b/src/grib_accessor_class_data_g2simple_packing.cc index 69e1bdbc9..56441fc96 100644 --- a/src/grib_accessor_class_data_g2simple_packing.cc +++ b/src/grib_accessor_class_data_g2simple_packing.cc @@ -177,16 +177,21 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) } if (units_factor != 1.0) { - if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] = val[i] * units_factor + units_bias; - else - for (i = 0; i < n_vals; i++) + } + } else { + for (i = 0; i < n_vals; i++) { val[i] *= units_factor; + } + } } - else if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + else if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] += units_bias; + } + } /* IEEE packing */ if (c->ieee_packing) { diff --git a/src/grib_accessor_class_data_jpeg2000_packing.cc b/src/grib_accessor_class_data_jpeg2000_packing.cc index 66d6f6767..a1a43b6f7 100644 --- a/src/grib_accessor_class_data_jpeg2000_packing.cc +++ b/src/grib_accessor_class_data_jpeg2000_packing.cc @@ -225,7 +225,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) grib_accessor_data_jpeg2000_packing* self = (grib_accessor_data_jpeg2000_packing*)a; int err = GRIB_SUCCESS; - int i; + size_t i = 0; size_t buflen = grib_byte_count(a); double bscale = 0; @@ -304,16 +304,21 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) val[i] = (val[i] * bscale + reference_value) * dscale; } if (units_factor != 1.0) { - if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] = val[i] * units_factor + units_bias; - else - for (i = 0; i < n_vals; i++) + } + } else { + for (i = 0; i < n_vals; i++) { val[i] *= units_factor; + } + } } - else if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + else if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] += units_bias; + } + } return err; } @@ -384,7 +389,6 @@ static int pack_double(grib_accessor* a, const double* cval, size_t* len) grib_buffer_replace(a, NULL, 0, 1, 1); err = grib_set_long_internal(grib_handle_of_accessor(a), self->number_of_values, *len); return err; - break; case GRIB_SUCCESS: break; default: diff --git a/src/grib_accessor_class_data_raw_packing.cc b/src/grib_accessor_class_data_raw_packing.cc index 336c73684..27c3d62e3 100644 --- a/src/grib_accessor_class_data_raw_packing.cc +++ b/src/grib_accessor_class_data_raw_packing.cc @@ -164,7 +164,6 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) break; default: return GRIB_NOT_IMPLEMENTED; - break; } nvals = inlen / bytes; @@ -218,7 +217,6 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) default: code = GRIB_NOT_IMPLEMENTED; goto clean_up; - break; } bufsize = bytes * inlen; @@ -282,7 +280,6 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val) default: return GRIB_NOT_IMPLEMENTED; - break; } pos = bytes * idx; diff --git a/src/grib_accessor_class_data_simple_packing.cc b/src/grib_accessor_class_data_simple_packing.cc index 0d44acd7f..e78bda53c 100644 --- a/src/grib_accessor_class_data_simple_packing.cc +++ b/src/grib_accessor_class_data_simple_packing.cc @@ -406,16 +406,21 @@ static int unpack(grib_accessor* a, T* val, size_t* len) *len = (long)n_vals; if (units_factor != 1.0) { - if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] = val[i] * units_factor + units_bias; - else - for (i = 0; i < n_vals; i++) + } + } else { + for (i = 0; i < n_vals; i++) { val[i] *= units_factor; + } + } } - else if (units_bias != 0.0) - for (i = 0; i < n_vals; i++) + else if (units_bias != 0.0) { + for (i = 0; i < n_vals; i++) { val[i] += units_bias; + } + } return err; } diff --git a/src/grib_accessor_class_divdouble.cc b/src/grib_accessor_class_divdouble.cc index e4e5442ef..8ab86e22e 100644 --- a/src/grib_accessor_class_divdouble.cc +++ b/src/grib_accessor_class_divdouble.cc @@ -7,11 +7,6 @@ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ - -/***************************************** - * Enrico Fucile - ****************************************/ - #include "grib_api_internal.h" /* This is used by make_class.pl @@ -108,7 +103,7 @@ grib_accessor_class* grib_accessor_class_divdouble = &_grib_accessor_class_divdo static void init(grib_accessor* a, const long l, grib_arguments* c) { grib_accessor_divdouble* self = (grib_accessor_divdouble*)a; - int n = 0; + int n = 0; self->val = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); self->divisor = grib_arguments_get_double(grib_handle_of_accessor(a), c, n++); @@ -116,22 +111,17 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) static int unpack_double(grib_accessor* a, double* val, size_t* len) { - grib_accessor_divdouble* self = (grib_accessor_divdouble*)a; - int ret = GRIB_SUCCESS; - double value = 0; - - if (*len < 1) { - *len = 1; - return GRIB_ARRAY_TOO_SMALL; - } + const grib_accessor_divdouble* self = (grib_accessor_divdouble*)a; + int ret = GRIB_SUCCESS; + double value = 0; ret = grib_get_double_internal(grib_handle_of_accessor(a), self->val, &value); - if (ret != GRIB_SUCCESS) return ret; - /* fprintf(stdout,"\nname %s %s %g/%g\n",a->name ,self->val,value,divisor);*/ - Assert(self->divisor != 0); + if (self->divisor == 0) { + return GRIB_INVALID_ARGUMENT; + } *val = value / self->divisor; *len = 1; diff --git a/src/grib_accessor_class_expanded_descriptors.cc b/src/grib_accessor_class_expanded_descriptors.cc index 5b7002bf8..11f4ba73b 100644 --- a/src/grib_accessor_class_expanded_descriptors.cc +++ b/src/grib_accessor_class_expanded_descriptors.cc @@ -26,7 +26,7 @@ SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long IMPLEMENTS = unpack_double IMPLEMENTS = unpack_string_array -IMPLEMENTS = init;dump;destroy +IMPLEMENTS = init;destroy IMPLEMENTS = value_count; get_native_type MEMBERS = const char* unexpandedDescriptors MEMBERS = const char* sequence @@ -59,7 +59,6 @@ static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string_array(grib_accessor*, char**, size_t* len); static int value_count(grib_accessor*, long*); static void destroy(grib_context*, grib_accessor*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_expanded_descriptors @@ -90,7 +89,7 @@ static grib_accessor_class _grib_accessor_class_expanded_descriptors = { &init, /* init */ 0, /* post_init */ &destroy, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -162,11 +161,11 @@ typedef struct change_coding_params static void init(grib_accessor* a, const long len, grib_arguments* args) { grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - int n = 0; - grib_handle* hand = grib_handle_of_accessor(a); - self->tablesAccessorName = grib_arguments_get_name(hand, args, n++); - self->expandedName = grib_arguments_get_name(hand, args, n++); - self->rank = grib_arguments_get_long(hand, args, n++); + int n = 0; + grib_handle* hand = grib_handle_of_accessor(a); + self->tablesAccessorName = grib_arguments_get_name(hand, args, n++); + self->expandedName = grib_arguments_get_name(hand, args, n++); + self->rank = grib_arguments_get_long(hand, args, n++); if (self->rank != 0) { self->expandedAccessor = grib_find_accessor(hand, self->expandedName); } @@ -180,11 +179,6 @@ static void init(grib_accessor* a, const long len, grib_arguments* args) a->length = 0; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static bufr_descriptors_array* do_expand(grib_accessor* a, bufr_descriptors_array* unexpanded, change_coding_params* ccp, int* err); #define BUFR_DESCRIPTORS_ARRAY_USED_SIZE(v) ((v)->n) @@ -223,7 +217,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ * Its max size is X (from FXY) which is 6 bits so no need for malloc */ bufr_descriptor* ur[65] = {0,}; bufr_descriptor* urc = NULL; - int idx; + size_t idx = 0; bufr_descriptor* u0 = NULL; grib_context* c = a->context; bufr_descriptor* us = NULL; @@ -237,7 +231,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ if (BUFR_DESCRIPTORS_ARRAY_USED_SIZE(unexpanded) == 0) return; - us = grib_bufr_descriptor_clone(grib_bufr_descriptors_array_get(unexpanded, 0)); + us = grib_bufr_descriptor_clone(grib_bufr_descriptors_array_get(unexpanded, 0)); us->context = c; *err = 0; @@ -268,7 +262,7 @@ static void __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, bufr_ inner_unexpanded = grib_bufr_descriptors_array_new(c, DESC_SIZE_INIT, DESC_SIZE_INCR); for (i = 0; i < size; i++) { - vv = grib_bufr_descriptor_new(self->tablesAccessor, v_array[i], !SILENT, err); + vv = grib_bufr_descriptor_new(self->tablesAccessor, v_array[i], !SILENT, err); inner_unexpanded = grib_bufr_descriptors_array_push(inner_unexpanded, vv); } grib_context_free(c, v_array); @@ -713,27 +707,27 @@ static int expand(grib_accessor* a) int grib_accessor_class_expanded_descriptors_set_do_expand(grib_accessor* a, long do_expand) { grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - self->do_expand = do_expand; + self->do_expand = do_expand; return 0; } bufr_descriptors_array* grib_accessor_class_expanded_descriptors_get_expanded(grib_accessor* a, int* err) { - grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - *err = expand(a); + const grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; + *err = expand(a); return self->expanded; } static int unpack_double(grib_accessor* a, double* val, size_t* len) { grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - int ret = 0; - int i; + int ret = 0; + size_t i = 0; size_t expandedSize; if (self->rank != 2) { long* lval = (long*)grib_context_malloc_clear(a->context, *len * sizeof(long)); - ret = unpack_long(a, lval, len); + ret = unpack_long(a, lval, len); if (ret) return ret; for (i = 0; i < *len; i++) @@ -762,9 +756,9 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - int ret = 0; - size_t rlen = 0; - size_t i; + int ret = 0; + size_t rlen = 0; + size_t i = 0; ret = expand(a); if (ret) @@ -792,7 +786,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) break; case 2: return GRIB_INVALID_TYPE; - break; case 3: for (i = 0; i < *len; i++) val[i] = self->expanded->v[i]->width; @@ -836,15 +829,15 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) static int pack_long(grib_accessor* a, const long* val, size_t* len) { grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - self->do_expand = 1; + self->do_expand = 1; return GRIB_NOT_IMPLEMENTED; } static int value_count(grib_accessor* a, long* rlen) { grib_accessor_expanded_descriptors* self = (grib_accessor_expanded_descriptors*)a; - int err = 0; - *rlen = 0; + int err = 0; + *rlen = 0; err = expand(a); if (err) { diff --git a/src/grib_accessor_class_g1_half_byte_codeflag.cc b/src/grib_accessor_class_g1_half_byte_codeflag.cc index c275253e5..c7d9828e0 100644 --- a/src/grib_accessor_class_g1_half_byte_codeflag.cc +++ b/src/grib_accessor_class_g1_half_byte_codeflag.cc @@ -115,13 +115,11 @@ static void dump(grib_accessor* a, grib_dumper* dumper) static int unpack_long(grib_accessor* a, long* val, size_t* len) { - unsigned char dat = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); - *len = 0; + *len = 1; return GRIB_ARRAY_TOO_SMALL; } - dat = grib_handle_of_accessor(a)->buffer->data[a->offset] & 0x0f; + unsigned char dat = grib_handle_of_accessor(a)->buffer->data[a->offset] & 0x0f; *val = dat; *len = 1; @@ -130,18 +128,17 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int ret = 0; if (*len < 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); - *len = 0; + *len = 1; return GRIB_ARRAY_TOO_SMALL; } - /* printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(a)->buffer->data[a->offset]);*/ + + // printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(a)->buffer->data[a->offset]); grib_handle_of_accessor(a)->buffer->data[a->offset] = (a->parent->h->buffer->data[a->offset] & 0xf0) | (*val & 0x0f); - /* printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(a)->buffer->data[a->offset]);*/ + // printf("HALF BYTE pack long %ld %02x\n",*val,grib_handle_of_accessor(a)->buffer->data[a->offset]); *len = 1; - return ret; + return GRIB_SUCCESS; } static int get_native_type(grib_accessor* a) diff --git a/src/grib_accessor_class_g1date.cc b/src/grib_accessor_class_g1date.cc index 37cd80ad5..c53b3768a 100644 --- a/src/grib_accessor_class_g1date.cc +++ b/src/grib_accessor_class_g1date.cc @@ -17,7 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long;unpack_string - IMPLEMENTS = init;dump;value_count + IMPLEMENTS = init;value_count MEMBERS=const char* century MEMBERS=const char* year MEMBERS=const char* month @@ -40,7 +40,6 @@ static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); static int value_count(grib_accessor*, long*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_g1date @@ -66,7 +65,7 @@ static grib_accessor_class _grib_accessor_class_g1date = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -122,21 +121,13 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) self->day = grib_arguments_get_name(hand, c, n++); } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { - int ret = 0; grib_accessor_g1date* self = (grib_accessor_g1date*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(a); - long year = 0; - long century = 0; - long month = 0; - long day = 0; + int ret = 0; + long year = 0, century = 0, month = 0, day = 0; if ((ret = grib_get_long_internal(hand, self->century, ¢ury)) != GRIB_SUCCESS) return ret; @@ -165,25 +156,20 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int ret = 0; - long v = val[0]; grib_accessor_g1date* self = (grib_accessor_g1date*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(a); - long year = 0; - long century = 0; - long month = 0; - long day = 0; + int ret = 0; + long v = val[0]; + long year = 0, century = 0, month = 0, day = 0; if (*len != 1) return GRIB_WRONG_ARRAY_SIZE; - { - long d = grib_julian_to_date((long)grib_date_to_julian(v)); - if (v != d) { - grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_g1date: pack_long invalid date %ld, changed to %ld", v, d); - return GRIB_ENCODING_ERROR; - } + long d = grib_julian_to_date(grib_date_to_julian(v)); + if (v != d) { + grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_g1date: pack_long invalid date %ld, changed to %ld", v, d); + return GRIB_ENCODING_ERROR; } century = v / 1000000; @@ -228,15 +214,12 @@ static const char* months[] = { static int unpack_string(grib_accessor* a, char* val, size_t* len) { - int ret = 0; - char tmp[1024]; grib_accessor_g1date* self = (grib_accessor_g1date*)a; grib_handle* hand = grib_handle_of_accessor(a); - long year = 0; - long century = 0; - long month = 0; - long day = 0; - size_t l; + + int ret = 0; + char tmp[1024]; + long year = 0, century = 0, month = 0, day = 0; if ((ret = grib_get_long_internal(hand, self->century, ¢ury)) != GRIB_SUCCESS) return ret; @@ -261,7 +244,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) snprintf(tmp, sizeof(tmp), "%ld", x); } - l = strlen(tmp) + 1; + size_t l = strlen(tmp) + 1; if (*len < l) { *len = l; return GRIB_BUFFER_TOO_SMALL; diff --git a/src/grib_accessor_class_g1monthlydate.cc b/src/grib_accessor_class_g1monthlydate.cc index 503d0daa4..57c3ea729 100644 --- a/src/grib_accessor_class_g1monthlydate.cc +++ b/src/grib_accessor_class_g1monthlydate.cc @@ -22,7 +22,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS=const char* date END_CLASS_DEF @@ -39,7 +39,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_g1monthlydate @@ -62,7 +61,7 @@ static grib_accessor_class _grib_accessor_class_g1monthlydate = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -115,11 +114,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_g1monthlydate* self = (grib_accessor_g1monthlydate*)a; diff --git a/src/grib_accessor_class_g1verificationdate.cc b/src/grib_accessor_class_g1verificationdate.cc index a3272acc2..03c871617 100644 --- a/src/grib_accessor_class_g1verificationdate.cc +++ b/src/grib_accessor_class_g1verificationdate.cc @@ -17,7 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS=const char* date MEMBERS=const char* time MEMBERS=const char* step @@ -36,7 +36,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_g1verificationdate @@ -61,7 +60,7 @@ static grib_accessor_class _grib_accessor_class_g1verificationdate = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -117,11 +116,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_g1verificationdate* self = (grib_accessor_g1verificationdate*)a; diff --git a/src/grib_accessor_class_g2_mars_labeling.cc b/src/grib_accessor_class_g2_mars_labeling.cc index f6437c279..ad0647e30 100644 --- a/src/grib_accessor_class_g2_mars_labeling.cc +++ b/src/grib_accessor_class_g2_mars_labeling.cc @@ -165,7 +165,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) grib_context_log(a->context, GRIB_LOG_ERROR, "invalid first argument of g2_mars_labeling in %s", a->name); return GRIB_INTERNAL_ERROR; - break; } return grib_get_long(grib_handle_of_accessor(a), key, val); @@ -190,7 +189,6 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) grib_context_log(a->context, GRIB_LOG_ERROR, "invalid first argument of g2_mars_labeling in %s", a->name); return GRIB_INTERNAL_ERROR; - break; } return grib_get_string(grib_handle_of_accessor(a), key, val, len); @@ -226,7 +224,6 @@ static int extra_set(grib_accessor* a, long val) case 0: /* class */ return ret; - break; case 1: /* type */ switch (val) { @@ -400,7 +397,6 @@ static int extra_set(grib_accessor* a, long val) grib_context_log(a->context, GRIB_LOG_ERROR, "invalid first argument of g2_mars_labeling in %s", a->name); return GRIB_INTERNAL_ERROR; - break; } if (productDefinitionTemplateNumberNew >= 0) { @@ -442,7 +438,6 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) grib_context_log(a->context, GRIB_LOG_ERROR, "invalid first argument of g2_mars_labeling in %s", a->name); return GRIB_INTERNAL_ERROR; - break; } ret = grib_set_string(grib_handle_of_accessor(a), key, val, len); @@ -476,7 +471,6 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) grib_context_log(a->context, GRIB_LOG_ERROR, "invalid first argument of g2_mars_labeling in %s", a->name); return GRIB_INTERNAL_ERROR; - break; } ret = grib_set_long(grib_handle_of_accessor(a), key, *val); @@ -513,7 +507,6 @@ static int get_native_type(grib_accessor* a) grib_context_log(a->context, GRIB_LOG_ERROR, "invalid first argument of g2_mars_labeling in %s", a->name); return GRIB_INTERNAL_ERROR; - break; } ret = grib_get_native_type(grib_handle_of_accessor(a), key, &type); diff --git a/src/grib_accessor_class_g2date.cc b/src/grib_accessor_class_g2date.cc index 4ed01d99e..698cd4a26 100644 --- a/src/grib_accessor_class_g2date.cc +++ b/src/grib_accessor_class_g2date.cc @@ -16,7 +16,7 @@ START_CLASS_DEF CLASS = accessor SUPER = grib_accessor_class_long - IMPLEMENTS = unpack_long;pack_long;init;dump + IMPLEMENTS = unpack_long;pack_long;init MEMBERS=const char* century MEMBERS=const char* year MEMBERS=const char* month @@ -37,7 +37,6 @@ or edit "accessor.class" and rerun ./make_class.pl static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_g2date @@ -63,7 +62,7 @@ static grib_accessor_class _grib_accessor_class_g2date = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -116,16 +115,11 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) self->day = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { - int ret = 0; - grib_accessor_g2date* self = (grib_accessor_g2date*)a; + const grib_accessor_g2date* self = (grib_accessor_g2date*)a; + int ret = 0; long year = 0; long month = 0; long day = 0; @@ -145,13 +139,12 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } -/* TODO: Check for a valid date */ static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int ret; - long v = val[0]; - grib_accessor_g2date* self = (grib_accessor_g2date*)a; + const grib_accessor_g2date* self = (grib_accessor_g2date*)a; + int ret = GRIB_SUCCESS; + long v = val[0]; long year = 0; long month = 0; long day = 0; @@ -165,6 +158,12 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) v %= 100; day = v; + if (!is_date_valid(year, month, day, 0, 0, 0)) { + // ECC-1777: For now just a warning. Will later change to an error + fprintf(stderr, "ECCODES WARNING : %s:%s: Date is not valid! year=%ld month=%ld day=%ld\n", + a->cclass->name, __func__, year, month, day); + } + if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->day, day)) != GRIB_SUCCESS) return ret; if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->month, month)) != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_g2end_step.cc b/src/grib_accessor_class_g2end_step.cc index ed47e5133..a86733eb3 100644 --- a/src/grib_accessor_class_g2end_step.cc +++ b/src/grib_accessor_class_g2end_step.cc @@ -460,19 +460,17 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) try { if (numberOfTimeRange == 1) { ret = unpack_one_time_range_long_(a, val, len); - return ret; } else { ret = unpack_multiple_time_ranges_long_(a, val, len); - return ret; } } catch (std::exception& e) { grib_context_log(h->context, GRIB_LOG_ERROR, "grib_accessor_g2end_step::unpack_long: %s", e.what()); - return GRIB_DECODING_ERROR; + ret = GRIB_DECODING_ERROR; } - return GRIB_SUCCESS; + return ret; } static int unpack_double(grib_accessor* a, double* val, size_t* len) @@ -500,19 +498,17 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) try { if (numberOfTimeRange == 1) { ret = unpack_one_time_range_double_(a, val, len); - return ret; } else { ret = unpack_multiple_time_ranges_double_(a, val, len); - return ret; } } catch (std::exception& e) { grib_context_log(h->context, GRIB_LOG_ERROR, "grib_accessor_g2end_step::unpack_double: %s", e.what()); - return GRIB_DECODING_ERROR; + ret = GRIB_DECODING_ERROR; } - return GRIB_SUCCESS; + return ret; } static int pack_long_(grib_accessor* a, const long end_step_value, const long end_step_unit) diff --git a/src/grib_accessor_class_g2level.cc b/src/grib_accessor_class_g2level.cc index e1d8aaa38..39bd79033 100644 --- a/src/grib_accessor_class_g2level.cc +++ b/src/grib_accessor_class_g2level.cc @@ -17,7 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_double;pack_double - IMPLEMENTS = unpack_long;pack_long;init;dump;is_missing + IMPLEMENTS = unpack_long;pack_long;init;is_missing MEMBERS=const char* type_first MEMBERS=const char* scale_first MEMBERS=const char* value_first @@ -41,7 +41,6 @@ static int pack_double(grib_accessor*, const double* val, size_t* len); static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_double(grib_accessor*, double* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_g2level @@ -67,7 +66,7 @@ static grib_accessor_class _grib_accessor_class_g2level = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -126,11 +125,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static bool is_tigge(grib_handle* h) { long productionStatus = 0; diff --git a/src/grib_accessor_class_gen.cc b/src/grib_accessor_class_gen.cc index d74babf19..b611f5043 100644 --- a/src/grib_accessor_class_gen.cc +++ b/src/grib_accessor_class_gen.cc @@ -385,7 +385,7 @@ static int unpack_string_array(grib_accessor* a, char** v, size_t* len) { size_t length = 0; - int err = ecc__grib_get_string_length(a, &length); + int err = grib_get_string_length_acc(a, &length); if (err) return err; v[0] = (char*)grib_context_malloc_clear(a->context, length); @@ -455,16 +455,14 @@ static int pack_long(grib_accessor* a, const long* v, size_t* len) { grib_context* c = a->context; if (a->cclass->pack_double && a->cclass->pack_double != &pack_double) { - int i = 0, ret = 0; double* val = (double*)grib_context_malloc(c, *len * (sizeof(double))); if (!val) { - grib_context_log(c, GRIB_LOG_ERROR, - "Unable to allocate %zu bytes", *len * (sizeof(double))); + grib_context_log(c, GRIB_LOG_ERROR, "Unable to allocate %zu bytes", *len * (sizeof(double))); return GRIB_OUT_OF_MEMORY; } - for (i = 0; i < *len; i++) - val[i] = (long)v[i]; - ret = grib_pack_double(a, val, len); + for (size_t i = 0; i < *len; i++) + val[i] = v[i]; + int ret = grib_pack_double(a, val, len); grib_context_free(c, val); return ret; } @@ -479,14 +477,13 @@ static int pack_double_array_as_long(grib_accessor* a, const double* v, size_t* { grib_context* c = a->context; int ret = GRIB_SUCCESS; - size_t i = 0; size_t numBytes = *len * (sizeof(long)); long* lValues = (long*)grib_context_malloc(c, numBytes); if (!lValues) { grib_context_log(c, GRIB_LOG_ERROR, "Unable to allocate %ld bytes", numBytes); return GRIB_OUT_OF_MEMORY; } - for (i = 0; i < *len; i++) + for (size_t i = 0; i < *len; i++) lValues[i] = (long)v[i]; /* convert from double to long */ ret = grib_pack_long(a, lValues, len); grib_context_free(c, lValues); diff --git a/src/grib_accessor_class_group.cc b/src/grib_accessor_class_group.cc index a64362968..df2118bff 100644 --- a/src/grib_accessor_class_group.cc +++ b/src/grib_accessor_class_group.cc @@ -238,42 +238,32 @@ static int unpack_double(grib_accessor* a, double* v, size_t* len) static int compare(grib_accessor* a, grib_accessor* b) { - int retval = 0; - char* aval = 0; - char* bval = 0; - int err = 0; + grib_context_log(a->context, GRIB_LOG_ERROR, "%s:%s not implemented", __func__, a->name); + return GRIB_NOT_IMPLEMENTED; - size_t alen = 0; - size_t blen = 0; - long count = 0; - - err = grib_value_count(a, &count); - if (err) - return err; - alen = count; - - err = grib_value_count(b, &count); - if (err) - return err; - blen = count; - - if (alen != blen) - return GRIB_COUNT_MISMATCH; - - aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); - bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); - - grib_unpack_string(a, aval, &alen); - grib_unpack_string(b, bval, &blen); - - retval = GRIB_SUCCESS; - if (strcmp(aval, bval)) - retval = GRIB_STRING_VALUE_MISMATCH; - - grib_context_free(a->context, aval); - grib_context_free(b->context, bval); - - return retval; + // int retval = 0; + // char* aval = 0; + // char* bval = 0; + // int err = 0; + // size_t alen = 0; + // size_t blen = 0; + // long count = 0; + // err = grib_value_count(a, &count); + // if (err) return err; + // alen = count; + // err = grib_value_count(b, &count); + // if (err) return err; + // blen = count; + // if (alen != blen) return GRIB_COUNT_MISMATCH; + // aval = (char*)grib_context_malloc(a->context, alen * sizeof(char)); + // bval = (char*)grib_context_malloc(b->context, blen * sizeof(char)); + // grib_unpack_string(a, aval, &alen); + // grib_unpack_string(b, bval, &blen); + // retval = GRIB_SUCCESS; + // if (strcmp(aval, bval)) retval = GRIB_STRING_VALUE_MISMATCH; + // grib_context_free(a->context, aval); + // grib_context_free(b->context, bval); + // return retval; } static long next_offset(grib_accessor* a) diff --git a/src/grib_accessor_class_latitudes.cc b/src/grib_accessor_class_latitudes.cc index 4131ff066..555fb5b19 100644 --- a/src/grib_accessor_class_latitudes.cc +++ b/src/grib_accessor_class_latitudes.cc @@ -221,6 +221,13 @@ static int value_count(grib_accessor* a, long* len) } *len = size; + // See ECC-1792 + // Give priority to the Grid Section (rather than the Data Section) + long numberOfDataPoints = 0; + if (grib_get_long(h, "numberOfDataPoints", &numberOfDataPoints) == GRIB_SUCCESS) { + *len = numberOfDataPoints; + } + if (self->distinct) { ret = get_distinct(a, &val, len); if (ret != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_long.cc b/src/grib_accessor_class_long.cc index aeccdac78..5eb10fec5 100644 --- a/src/grib_accessor_class_long.cc +++ b/src/grib_accessor_class_long.cc @@ -116,18 +116,15 @@ static void dump(grib_accessor* a, grib_dumper* dumper) static int unpack_string(grib_accessor* a, char* v, size_t* len) { - int err = 0; long val = 0; size_t l = 1; char repres[1024]; char format[32] = "%ld"; grib_handle* h = grib_handle_of_accessor(a); - err = grib_unpack_long(a, &val, &l); + grib_unpack_long(a, &val, &l); /* TODO: We should catch all errors but in this case the test ERA_Gen.sh will fail * as the output from grib_ls will be different */ - /* if (err) return err; */ - (void)err; if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)) { snprintf(repres, sizeof(repres), "MISSING"); diff --git a/src/grib_accessor_class_longitudes.cc b/src/grib_accessor_class_longitudes.cc index 083d40138..78fc7a733 100644 --- a/src/grib_accessor_class_longitudes.cc +++ b/src/grib_accessor_class_longitudes.cc @@ -196,6 +196,13 @@ static int value_count(grib_accessor* a, long* len) } *len = size; + // See ECC-1792 + // Give priority to the Grid Section (rather than the Data Section) + long numberOfDataPoints = 0; + if (grib_get_long(h, "numberOfDataPoints", &numberOfDataPoints) == GRIB_SUCCESS) { + *len = numberOfDataPoints; + } + if (self->distinct) { ret = get_distinct(a, &val, len); if (ret != GRIB_SUCCESS) diff --git a/src/grib_accessor_class_md5.cc b/src/grib_accessor_class_md5.cc index dfb08a7fb..6a57c1329 100644 --- a/src/grib_accessor_class_md5.cc +++ b/src/grib_accessor_class_md5.cc @@ -183,7 +183,7 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) if (*len < 32) { const char* cclass_name = a->cclass->name; grib_context_log(a->context, GRIB_LOG_ERROR, - "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", + "%s: Buffer too small for %s. It is %d bytes long (len=%zu)", cclass_name, a->name, 32, *len); *len = 32; return GRIB_BUFFER_TOO_SMALL; diff --git a/src/grib_accessor_class_message.cc b/src/grib_accessor_class_message.cc index 8dd580d3e..6c5587b22 100644 --- a/src/grib_accessor_class_message.cc +++ b/src/grib_accessor_class_message.cc @@ -142,7 +142,7 @@ static int value_count(grib_accessor* a, long* count) static int unpack_string(grib_accessor* a, char* val, size_t* len) { long i = 0; - size_t l = a->length + 1; + size_t l = string_length(a) + 1; grib_handle* h = grib_handle_of_accessor(a); if (*len < l) { diff --git a/src/grib_accessor_class_multdouble.cc b/src/grib_accessor_class_multdouble.cc new file mode 100644 index 000000000..ac5771627 --- /dev/null +++ b/src/grib_accessor_class_multdouble.cc @@ -0,0 +1,127 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double + IMPLEMENTS = init + MEMBERS = const char* val + MEMBERS = double multiplier + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val, size_t* len); +static void init(grib_accessor*, const long, grib_arguments*); + +typedef struct grib_accessor_multdouble +{ + grib_accessor att; + /* Members defined in gen */ + /* Members defined in double */ + /* Members defined in multdouble */ + const char* val; + double multiplier; +} grib_accessor_multdouble; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_multdouble = { + &grib_accessor_class_double, /* super */ + "multdouble", /* name */ + sizeof(grib_accessor_multdouble), /* size */ + 0, /* inited */ + 0, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* destroy */ + 0, /* dump */ + 0, /* next_offset */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* pack_missing */ + 0, /* is_missing */ + 0, /* pack_long */ + 0, /* unpack_long */ + 0, /* pack_double */ + 0, /* pack_float */ + &unpack_double, /* unpack_double */ + 0, /* unpack_float */ + 0, /* pack_string */ + 0, /* unpack_string */ + 0, /* pack_string_array */ + 0, /* unpack_string_array */ + 0, /* pack_bytes */ + 0, /* unpack_bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value (double) */ + 0, /* unpack only ith value (float) */ + 0, /* unpack a given set of elements (double) */ + 0, /* unpack a given set of elements (float) */ + 0, /* unpack a subarray */ + 0, /* clear */ + 0, /* clone accessor */ +}; + + +grib_accessor_class* grib_accessor_class_multdouble = &_grib_accessor_class_multdouble; + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long l, grib_arguments* c) +{ + grib_accessor_multdouble* self = (grib_accessor_multdouble*)a; + int n = 0; + + self->val = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++); + self->multiplier = grib_arguments_get_double(grib_handle_of_accessor(a), c, n++); +} + +static int unpack_double(grib_accessor* a, double* val, size_t* len) +{ + const grib_accessor_multdouble* self = (grib_accessor_multdouble*)a; + int ret = GRIB_SUCCESS; + double value = 0; + + ret = grib_get_double_internal(grib_handle_of_accessor(a), self->val, &value); + if (ret != GRIB_SUCCESS) + return ret; + + *val = value * self->multiplier; + + *len = 1; + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_non_alpha.cc b/src/grib_accessor_class_non_alpha.cc index 55ee9f917..821f2311f 100644 --- a/src/grib_accessor_class_non_alpha.cc +++ b/src/grib_accessor_class_non_alpha.cc @@ -149,20 +149,20 @@ static int get_native_type(grib_accessor* a) static int unpack_string(grib_accessor* a, char* val, size_t* len) { grib_handle* hand = grib_handle_of_accessor(a); - int i = 0; + long i = 0; - if (len[0] < (a->length + 1)) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s it contains %ld values", - len[0], a->name, a->length + 1); - len[0] = 0; - return GRIB_ARRAY_TOO_SMALL; + if (*len < (a->length + 1)) { + grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", + *len, a->name, a->length + 1); + *len = a->length + 1; + return GRIB_BUFFER_TOO_SMALL; } for (i = 0; i < a->length; i++) { val[i] = hand->buffer->data[a->offset + i]; } val[i] = 0; - len[0] = i; + *len = i; return GRIB_SUCCESS; } @@ -190,7 +190,6 @@ static int unpack_long(grib_accessor* a, long* v, size_t* len) *v = strtol(val, &last, 10); - grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name); return GRIB_SUCCESS; } @@ -204,7 +203,6 @@ static int unpack_double(grib_accessor* a, double* v, size_t* len) *v = strtod(val, &last); if (*last == 0) { - grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name); return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_number_of_points_gaussian.cc b/src/grib_accessor_class_number_of_points_gaussian.cc index 5d952b937..2114a9c87 100644 --- a/src/grib_accessor_class_number_of_points_gaussian.cc +++ b/src/grib_accessor_class_number_of_points_gaussian.cc @@ -276,7 +276,7 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) if (plpresent) { long max_pl = 0; int j = 0; - double lon_first_row = 0, lon_last_row = 0; + // double lon_first_row = 0, lon_last_row = 0; /*reduced*/ if ((err = grib_get_long_internal(h, self->order, &order)) != GRIB_SUCCESS) @@ -324,11 +324,9 @@ static int unpack_long_new(grib_accessor* a, long* val, size_t* len) return GRIB_GEOCALCULUS_PROBLEM; } grib_get_reduced_row_wrapper(h, pl[j], lon_first, lon_last, &row_count, &ilon_first, &ilon_last); - lon_first_row = ((ilon_first)*360.0) / pl[j]; - lon_last_row = ((ilon_last)*360.0) / pl[j]; + //lon_first_row = ((ilon_first)*360.0) / pl[j]; + //lon_last_row = ((ilon_last)*360.0) / pl[j]; *val += row_count; - (void)lon_last_row; - (void)lon_first_row; } } else { @@ -388,7 +386,7 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* if (plpresent) { long max_pl = 0; int j = 0; - double lon_first_row = 0, lon_last_row = 0; + // double lon_first_row = 0, lon_last_row = 0; /*reduced*/ if ((err = grib_get_long_internal(h, self->order, &order)) != GRIB_SUCCESS) @@ -452,11 +450,9 @@ static int unpack_long_with_legacy_support(grib_accessor* a, long* val, size_t* // if ( row_count != pl[j] ) { // printf("oops...... rc=%ld but pl[%d]=%ld\n", row_count, j,pl[j]); // } - lon_first_row = ((ilon_first)*360.0) / pl[j]; - lon_last_row = ((ilon_last)*360.0) / pl[j]; + // lon_first_row = ((ilon_first)*360.0) / pl[j]; + // lon_last_row = ((ilon_last)*360.0) / pl[j]; *val += row_count; - (void)lon_last_row; - (void)lon_first_row; #if EFDEBUG printf(" ilon_first=%ld lon_first=%.10e ilon_last=%ld lon_last=%.10e count=%ld row_count=%ld\n", ilon_first, lon_first_row, ilon_last, lon_last_row, *val, row_count); diff --git a/src/grib_accessor_class_number_of_values_data_raw_packing.cc b/src/grib_accessor_class_number_of_values_data_raw_packing.cc index 5bde2a163..5652797ac 100644 --- a/src/grib_accessor_class_number_of_values_data_raw_packing.cc +++ b/src/grib_accessor_class_number_of_values_data_raw_packing.cc @@ -152,7 +152,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) default: return GRIB_NOT_IMPLEMENTED; - break; } *val = byte_count / bytes; diff --git a/src/grib_accessor_class_optimal_step_units.cc b/src/grib_accessor_class_optimal_step_units.cc index 9bcf338be..261ff4c80 100644 --- a/src/grib_accessor_class_optimal_step_units.cc +++ b/src/grib_accessor_class_optimal_step_units.cc @@ -192,7 +192,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) std::string msg = std::string{"Invalid unit: "} + std::to_string(*val) + " (" + e.what() + ")" + ". Available units are: " + supported_units_str; - grib_context_log(a->context, GRIB_LOG_ERROR, msg.c_str()); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s", msg.c_str()); return GRIB_INVALID_ARGUMENT; } @@ -235,7 +235,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) } } catch (std::exception& e) { - grib_context_log(a->context, GRIB_LOG_ERROR, e.what()); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s", e.what()); return GRIB_INTERNAL_ERROR; } @@ -256,7 +256,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len) supported_units_str.pop_back(); std::string msg = "Invalid unit: " + std::string(val) + " (" + e.what() + ")" + ". Available units are: " + supported_units_str; - grib_context_log(a->context, GRIB_LOG_ERROR, msg.c_str()); + grib_context_log(a->context, GRIB_LOG_ERROR, "%s", msg.c_str()); return GRIB_INVALID_ARGUMENT; } diff --git a/src/grib_accessor_class_rdbtime_guess_date.cc b/src/grib_accessor_class_rdbtime_guess_date.cc index 7bd8a3c4a..8a3bfa2a1 100644 --- a/src/grib_accessor_class_rdbtime_guess_date.cc +++ b/src/grib_accessor_class_rdbtime_guess_date.cc @@ -17,7 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS=const char* typicalYear MEMBERS=const char* typicalMonth MEMBERS=const char* typicalDay @@ -39,7 +39,6 @@ or edit "accessor.class" and rerun ./make_class.pl static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_rdbtime_guess_date @@ -66,7 +65,7 @@ static grib_accessor_class _grib_accessor_class_rdbtime_guess_date = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -124,11 +123,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) /* a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; */ } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_rdbtime_guess_date* self = (grib_accessor_rdbtime_guess_date*)a; diff --git a/src/grib_accessor_class_section_pointer.cc b/src/grib_accessor_class_section_pointer.cc index e9b81614a..861ab12e7 100644 --- a/src/grib_accessor_class_section_pointer.cc +++ b/src/grib_accessor_class_section_pointer.cc @@ -107,7 +107,7 @@ grib_accessor_class* grib_accessor_class_section_pointer = &_grib_accessor_class static void init(grib_accessor* a, const long len, grib_arguments* arg) { - int n = 0; + int n = 0; grib_accessor_section_pointer* self = (grib_accessor_section_pointer*)a; self->sectionOffset = grib_arguments_get_name(grib_handle_of_accessor(a), arg, n++); @@ -162,13 +162,13 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len) static long byte_count(grib_accessor* a) { grib_accessor_section_pointer* self = (grib_accessor_section_pointer*)a; - long sectionLength = 0; - int ret = 0; + long sectionLength = 0; + int ret = 0; ret = grib_get_long(grib_handle_of_accessor(a), self->sectionLength, §ionLength); if (ret) { grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to get %s %s", + "Unable to get %s %s", self->sectionLength, grib_get_error_message(ret)); return -1; } @@ -179,13 +179,13 @@ static long byte_count(grib_accessor* a) static long byte_offset(grib_accessor* a) { grib_accessor_section_pointer* self = (grib_accessor_section_pointer*)a; - long sectionOffset = 0; - int ret = 0; + long sectionOffset = 0; + int ret = 0; ret = grib_get_long(grib_handle_of_accessor(a), self->sectionOffset, §ionOffset); if (ret) { grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to get %s %s", + "Unable to get %s %s", self->sectionOffset, grib_get_error_message(ret)); return -1; } diff --git a/src/grib_accessor_class_signed_bits.cc b/src/grib_accessor_class_signed_bits.cc index 1750af3eb..dc8ccf488 100644 --- a/src/grib_accessor_class_signed_bits.cc +++ b/src/grib_accessor_class_signed_bits.cc @@ -16,7 +16,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init IMPLEMENTS = next_offset IMPLEMENTS = byte_count IMPLEMENTS = value_count @@ -45,7 +45,6 @@ static long byte_count(grib_accessor*); static long byte_offset(grib_accessor*); static long next_offset(grib_accessor*); static int value_count(grib_accessor*, long*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); static void update_size(grib_accessor*, size_t); @@ -70,7 +69,7 @@ static grib_accessor_class _grib_accessor_class_signed_bits = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ &next_offset, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -152,11 +151,6 @@ static void init(grib_accessor* a, const long len, grib_arguments* args) a->length = compute_byte_count(a); } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { return GRIB_NOT_IMPLEMENTED; diff --git a/src/grib_accessor_class_smart_table.cc b/src/grib_accessor_class_smart_table.cc index dd6cfcd41..a3f257312 100644 --- a/src/grib_accessor_class_smart_table.cc +++ b/src/grib_accessor_class_smart_table.cc @@ -8,10 +8,6 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/***************************************** - * Enrico Fucile - ****************************************/ - #include "grib_api_internal.h" #include @@ -165,9 +161,9 @@ static int grib_load_smart_table(grib_context* c, const char* filename, const ch static void init(grib_accessor* a, const long len, grib_arguments* params) { - int n = 0; + int n = 0; grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; - grib_handle* hand = grib_handle_of_accessor(a); + grib_handle* hand = grib_handle_of_accessor(a); self->values = grib_arguments_get_name(hand, params, n++); self->tablename = grib_arguments_get_string(hand, params, n++); @@ -179,25 +175,25 @@ static void init(grib_accessor* a, const long len, grib_arguments* params) a->length = 0; a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; - self->dirty = 1; + self->dirty = 1; self->tableCodesSize = 0; - self->tableCodes = 0; + self->tableCodes = 0; } static grib_smart_table* load_table(grib_accessor* a) { grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; - size_t size = 0; - grib_handle* h = ((grib_accessor*)self)->parent->h; - grib_context* c = h->context; - grib_smart_table* t = NULL; + size_t size = 0; + grib_handle* h = ((grib_accessor*)self)->parent->h; + grib_context* c = h->context; + grib_smart_table* t = NULL; grib_smart_table* next = NULL; - char* filename = 0; + char* filename = 0; char recomposed[1024] = {0,}; char localRecomposed[1024] = {0,}; - char* localFilename = 0; + char* localFilename = 0; char extraRecomposed[1024] = {0,}; - char* extraFilename = 0; + char* extraFilename = 0; char masterDir[1024] = {0,}; char localDir[1024] = {0,}; char extraDir[1024] = {0,}; @@ -253,13 +249,13 @@ static grib_smart_table* load_table(grib_accessor* a) next = next->next; } - /* Note: self->widthOfCode is chosen so that 2^width is bigger than the maximum descriptor code, - * which for BUFR4 is the Table C operator 243255 - */ - size = (1ULL << self->widthOfCode); /* = 2^self->widthOfCode (as a 64 bit number) */ + // Note: self->widthOfCode is chosen so that 2^width is bigger than the maximum descriptor code, + // which for BUFR4 is the Table C operator 243255 + // + size = (1ULL << self->widthOfCode); // = 2^self->widthOfCode (as a 64 bit number) - t = (grib_smart_table*)grib_context_malloc_clear_persistent(c, sizeof(grib_smart_table)); - t->entries = (grib_smart_table_entry*)grib_context_malloc_clear_persistent(c, size * sizeof(grib_smart_table_entry)); + t = (grib_smart_table*)grib_context_malloc_clear_persistent(c, sizeof(grib_smart_table)); + t->entries = (grib_smart_table_entry*)grib_context_malloc_clear_persistent(c, size * sizeof(grib_smart_table_entry)); t->numberOfEntries = size; if (filename != 0) @@ -296,21 +292,21 @@ static int grib_load_smart_table(grib_context* c, const char* filename, Assert(t != NULL); if (t->filename[0] == NULL) { - t->filename[0] = grib_context_strdup_persistent(c, filename); + t->filename[0] = grib_context_strdup_persistent(c, filename); t->recomposed_name[0] = grib_context_strdup_persistent(c, recomposed_name); - t->next = c->smart_table; - t->numberOfEntries = size; + t->next = c->smart_table; + t->numberOfEntries = size; GRIB_MUTEX_INIT_ONCE(&once, &thread_init); GRIB_MUTEX_LOCK(&mutex); c->smart_table = t; GRIB_MUTEX_UNLOCK(&mutex); } else if (t->filename[1] == NULL) { - t->filename[1] = grib_context_strdup_persistent(c, filename); + t->filename[1] = grib_context_strdup_persistent(c, filename); t->recomposed_name[1] = grib_context_strdup_persistent(c, recomposed_name); } else { - t->filename[2] = grib_context_strdup_persistent(c, filename); + t->filename[2] = grib_context_strdup_persistent(c, filename); t->recomposed_name[2] = grib_context_strdup_persistent(c, recomposed_name); } @@ -344,7 +340,7 @@ static int grib_load_smart_table(grib_context* c, const char* filename, *p = 0; numberOfColumns = 0; - /* The highest possible descriptor code must fit into t->numberOfEntries */ + // The highest possible descriptor code must fit into t->numberOfEntries DEBUG_ASSERT(code < t->numberOfEntries); while (*s) { char* tcol = t->entries[code].column[numberOfColumns]; @@ -405,7 +401,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper) static int unpack_string(grib_accessor* a, char* buffer, size_t* len) { grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; - grib_smart_table* table = NULL; + grib_smart_table* table = NULL; size_t size = 1; long value; @@ -435,7 +431,7 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) } strcpy(buffer, tmp); - *len = l; + *len = l; self->dirty = 0; return GRIB_SUCCESS; @@ -444,9 +440,9 @@ static int unpack_string(grib_accessor* a, char* buffer, size_t* len) static int get_table_codes(grib_accessor* a) { grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; - size_t size = 0; - long* v = 0; - int err = 0; + size_t size = 0; + long* v = 0; + int err = 0; int count, j; size_t i; @@ -455,7 +451,7 @@ static int get_table_codes(grib_accessor* a) if (!self->dirty) return 0; - table_size = (1 << self->widthOfCode); /* 2 ^ self->widthOfCode */ + table_size = (1 << self->widthOfCode); // 2 ^ self->widthOfCode if (!self->table) self->table = load_table(a); @@ -479,7 +475,7 @@ static int get_table_codes(grib_accessor* a) if (self->tableCodes) grib_context_free(a->context, self->tableCodes); self->tableCodes = (long*)grib_context_malloc_clear(a->context, count * sizeof(long)); - j = 0; + j = 0; for (i = 0; i < size; i++) { if (v[i] < table_size) self->tableCodes[j++] = v[i]; @@ -488,16 +484,16 @@ static int get_table_codes(grib_accessor* a) grib_context_free(a->context, v); self->tableCodesSize = count; - self->dirty = 0; + self->dirty = 0; return 0; } static int value_count(grib_accessor* a, long* count) { - int err = 0; + int err = 0; grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; - *count = 0; + *count = 0; if (!self->values) return 0; @@ -523,8 +519,8 @@ static void destroy(grib_context* context, grib_accessor* a) static int get_native_type(grib_accessor* a) { int type = GRIB_TYPE_LONG; - /*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", - a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ + //printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", + // a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE); if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) type = GRIB_TYPE_STRING; return type; @@ -532,7 +528,7 @@ static int get_native_type(grib_accessor* a) static int unpack_long(grib_accessor* a, long* val, size_t* len) { - int err = 0; + int err = 0; grib_accessor_smart_table* self = (grib_accessor_smart_table*)a; size_t i; @@ -545,8 +541,8 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) if (*len < self->tableCodesSize) { grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%lu) for %s it contains %lu values", *len, a->name, self->tableCodesSize); - *len = 0; + "Wrong size (%zu) for %s, it contains %zu values", *len, a->name, self->tableCodesSize); + *len = self->tableCodesSize; return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/grib_accessor_class_smart_table_column.cc b/src/grib_accessor_class_smart_table_column.cc index 11ff964d3..295f29281 100644 --- a/src/grib_accessor_class_smart_table_column.cc +++ b/src/grib_accessor_class_smart_table_column.cc @@ -130,11 +130,11 @@ typedef struct grib_accessor_smart_table static void init(grib_accessor* a, const long len, grib_arguments* params) { - int n = 0; + int n = 0; grib_accessor_smart_table_column* self = (grib_accessor_smart_table_column*)a; self->smartTable = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++); - self->index = grib_arguments_get_long(grib_handle_of_accessor(a), params, n++); + self->index = grib_arguments_get_long(grib_handle_of_accessor(a), params, n++); a->length = 0; a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; @@ -158,22 +158,22 @@ static int unpack_string_array(grib_accessor* a, char** buffer, size_t* len) { grib_accessor_smart_table_column* self = (grib_accessor_smart_table_column*)a; grib_accessor_smart_table* tableAccessor = NULL; - grib_smart_table* table = NULL; + grib_smart_table* table = NULL; size_t size = 1; long* code; - int err = GRIB_SUCCESS; + int err = GRIB_SUCCESS; char tmp[1024] = {0,}; int i = 0; tableAccessor = (grib_accessor_smart_table*)grib_find_accessor(grib_handle_of_accessor(a), self->smartTable); if (!tableAccessor) { grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to find accessor %s", self->smartTable); + "Unable to find accessor %s", self->smartTable); return GRIB_NOT_FOUND; } - err = ecc__grib_get_size(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); + err = grib_get_size_acc(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); if (err) return err; if (*len < size) { @@ -213,7 +213,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_smart_table_column* self = (grib_accessor_smart_table_column*)a; grib_accessor_smart_table* tableAccessor = NULL; - grib_smart_table* table = NULL; + grib_smart_table* table = NULL; size_t size = 1; long* code; @@ -226,11 +226,11 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) tableAccessor = (grib_accessor_smart_table*)grib_find_accessor(grib_handle_of_accessor(a), self->smartTable); if (!tableAccessor) { grib_context_log(a->context, GRIB_LOG_ERROR, - "unable to find accessor %s", self->smartTable); + "Unable to find accessor %s", self->smartTable); return GRIB_NOT_FOUND; } - err = ecc__grib_get_size(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); + err = grib_get_size_acc(grib_handle_of_accessor(a), (grib_accessor*)tableAccessor, &size); if (err) return err; if (*len < size) { @@ -263,14 +263,14 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) static int value_count(grib_accessor* a, long* count) { grib_accessor_smart_table_column* self = (grib_accessor_smart_table_column*)a; - size_t size = 0; - int err = 0; - *count = 0; + size_t size = 0; + int err = 0; + *count = 0; if (!self->smartTable) return 0; - err = grib_get_size(grib_handle_of_accessor(a), self->smartTable, &size); + err = grib_get_size(grib_handle_of_accessor(a), self->smartTable, &size); *count = size; return err; } diff --git a/src/grib_accessor_class_spd.cc b/src/grib_accessor_class_spd.cc index 22fa03dc5..e0f4a20a7 100644 --- a/src/grib_accessor_class_spd.cc +++ b/src/grib_accessor_class_spd.cc @@ -16,7 +16,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init IMPLEMENTS = next_offset IMPLEMENTS = byte_count IMPLEMENTS = value_count @@ -45,7 +45,6 @@ static long byte_count(grib_accessor*); static long byte_offset(grib_accessor*); static long next_offset(grib_accessor*); static int value_count(grib_accessor*, long*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); static void update_size(grib_accessor*, size_t); @@ -70,7 +69,7 @@ static grib_accessor_class _grib_accessor_class_spd = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ &next_offset, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -153,11 +152,6 @@ static void init(grib_accessor* a, const long len, grib_arguments* args) a->length = compute_byte_count(a); } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_spd* self = (grib_accessor_spd*)a; @@ -173,8 +167,8 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) if (*len < rlen) { grib_context_log(a->context, GRIB_LOG_ERROR, - "Wrong size (%ld) for %s it contains %ld values", *len, a->name, rlen); - *len = 0; + "Wrong size (%zu) for %s, it contains %ld values", *len, a->name, rlen); + *len = rlen; return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/grib_accessor_class_time.cc b/src/grib_accessor_class_time.cc index a90f4415a..3251fdd33 100644 --- a/src/grib_accessor_class_time.cc +++ b/src/grib_accessor_class_time.cc @@ -18,7 +18,7 @@ SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long IMPLEMENTS = unpack_string - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS=const char* hour MEMBERS=const char* minute MEMBERS=const char* second @@ -39,7 +39,6 @@ or edit "accessor.class" and rerun ./make_class.pl static int pack_long(grib_accessor*, const long* val, size_t* len); static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_time @@ -64,7 +63,7 @@ static grib_accessor_class _grib_accessor_class_time = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -119,19 +118,13 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) self->second = grib_arguments_get_name(hand, c, n++); } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { - int ret = 0; - grib_accessor_time* self = (grib_accessor_time*)a; - long hour = 0; - long minute = 0; - long second = 0; - grib_handle* hand = grib_handle_of_accessor(a); + const grib_accessor_time* self = (grib_accessor_time*)a; + + int ret = 0; + long hour = 0, minute = 0, second = 0; + grib_handle* hand = grib_handle_of_accessor(a); if ((ret = grib_get_long_internal(hand, self->hour, &hour)) != GRIB_SUCCESS) return ret; @@ -160,21 +153,25 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) return GRIB_SUCCESS; } -/* TODO: Check for a valid date */ - static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int ret = 0; - long v = val[0]; - grib_accessor_time* self = (grib_accessor_time*)a; - grib_handle* hand = grib_handle_of_accessor(a); - long hour = 0; - long minute = 0; - long second = 0; + const grib_accessor_time* self = (grib_accessor_time*)a; + + int ret = 0; + long v = val[0]; + grib_handle* hand = grib_handle_of_accessor(a); + long hour = 0, minute = 0, second = 0; if (*len != 1) return GRIB_WRONG_ARRAY_SIZE; + if (!is_time_valid(v)) { + // ECC-1777: For now just a warning. Will later change to an error + fprintf(stderr, "ECCODES WARNING : %s:%s: Time is not valid! hour=%ld min=%ld sec=%ld\n", + a->cclass->name, __func__, hour, minute, second); + // return GRIB_ENCODING_ERROR; + } + hour = v / 100; minute = v % 100; second = 0; /* We ignore the 'seconds' in our time calculation! */ diff --git a/src/grib_accessor_class_to_double.cc b/src/grib_accessor_class_to_double.cc index 3f04524c6..69b06add9 100644 --- a/src/grib_accessor_class_to_double.cc +++ b/src/grib_accessor_class_to_double.cc @@ -150,7 +150,7 @@ static size_t string_length(grib_accessor* a) if (self->length) return self->length; - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); return size; } @@ -166,18 +166,17 @@ static int get_native_type(grib_accessor* a) static int unpack_string(grib_accessor* a, char* val, size_t* len) { - int err = 0; grib_accessor_to_double* self = (grib_accessor_to_double*)a; - char buff[512] = {0,}; - size_t length; + + int err = 0; + char buff[512] = {0,}; size_t size = 512; + size_t length = string_length(a); - length = string_length(a); - - if (len[0] < length + 1) { + if (*len < length + 1) { grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); - len[0] = 0; + *len, a->name, a->length + 1); + *len = length + 1; return GRIB_ARRAY_TOO_SMALL; } @@ -192,7 +191,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) memcpy(val, buff + self->start, length); val[length] = 0; - len[0] = length; + *len = length; return err; } diff --git a/src/grib_accessor_class_to_integer.cc b/src/grib_accessor_class_to_integer.cc index 787b122b8..76ce1205d 100644 --- a/src/grib_accessor_class_to_integer.cc +++ b/src/grib_accessor_class_to_integer.cc @@ -164,19 +164,21 @@ static int get_native_type(grib_accessor* a) static int unpack_string(grib_accessor* a, char* val, size_t* len) { - int err = 0; grib_accessor_to_integer* self = (grib_accessor_to_integer*)a; - char buff[512] = {0,}; - size_t length; + + int err = 0; + char buff[512] = {0,}; size_t size = 512; - length = string_length(a); + size_t length = string_length(a); - if (len[0] < length + 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); - len[0] = 0; - return GRIB_ARRAY_TOO_SMALL; + if (*len < length + 1) { + const char* cclass_name = a->cclass->name; + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", + cclass_name, a->name, length+1, *len); + *len = length + 1; + return GRIB_BUFFER_TOO_SMALL; } err = grib_get_string(grib_handle_of_accessor(a), self->key, buff, &size); @@ -190,7 +192,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) memcpy(val, buff + self->start, length); val[length] = 0; - len[0] = length; + *len = length; return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_to_string.cc b/src/grib_accessor_class_to_string.cc index 818ad386d..648edd1aa 100644 --- a/src/grib_accessor_class_to_string.cc +++ b/src/grib_accessor_class_to_string.cc @@ -163,16 +163,18 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) { grib_accessor_to_string* self = (grib_accessor_to_string*)a; - int err = 0; + int err = 0; char buff[512] = {0,}; size_t length = string_length(a); - if (len[0] < length + 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%lu) for %s, it contains %ld values", - len[0], a->name, a->length + 1); - len[0] = 0; - return GRIB_ARRAY_TOO_SMALL; + if (*len < length + 1) { + const char* cclass_name = a->cclass->name; + grib_context_log(a->context, GRIB_LOG_ERROR, + "%s: Buffer too small for %s. It is %zu bytes long (len=%zu)", + cclass_name, a->name, length+1, *len); + *len = length + 1; + return GRIB_BUFFER_TOO_SMALL; } size_t size = sizeof(buff); @@ -187,7 +189,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) memcpy(val, buff + self->start, length); val[length] = 0; - len[0] = length; + *len = length; return GRIB_SUCCESS; } diff --git a/src/grib_accessor_class_transient_darray.cc b/src/grib_accessor_class_transient_darray.cc index ba830849a..51dbc2433 100644 --- a/src/grib_accessor_class_transient_darray.cc +++ b/src/grib_accessor_class_transient_darray.cc @@ -159,7 +159,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) value_count(a, &count); if (*len < count) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s (setting %ld, required %ld) ", a->name, *len, count); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s (setting %zu, required %ld)", a->name, *len, count); + *len = count; return GRIB_ARRAY_TOO_SMALL; } @@ -178,7 +179,8 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) value_count(a, &count); if (*len < count) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s (setting %ld, required %ld) ", a->name, *len, count); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s (setting %zu, required %ld)", a->name, *len, count); + *len = count; return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/grib_accessor_class_unexpanded_descriptors.cc b/src/grib_accessor_class_unexpanded_descriptors.cc index b583ce5cd..a026388f2 100644 --- a/src/grib_accessor_class_unexpanded_descriptors.cc +++ b/src/grib_accessor_class_unexpanded_descriptors.cc @@ -16,7 +16,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init IMPLEMENTS = next_offset IMPLEMENTS = value_count IMPLEMENTS = byte_offset @@ -43,7 +43,6 @@ static int unpack_long(grib_accessor*, long* val, size_t* len); static long byte_offset(grib_accessor*); static long next_offset(grib_accessor*); static int value_count(grib_accessor*, long*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); static void update_size(grib_accessor*, size_t); @@ -68,7 +67,7 @@ static grib_accessor_class _grib_accessor_class_unexpanded_descriptors = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ &next_offset, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -122,11 +121,6 @@ static void init(grib_accessor* a, const long len, grib_arguments* args) a->length = 0; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_unexpanded_descriptors* self = (grib_accessor_unexpanded_descriptors*)a; diff --git a/src/grib_accessor_class_unsigned_bits.cc b/src/grib_accessor_class_unsigned_bits.cc index 026d4ff67..38c3425cf 100644 --- a/src/grib_accessor_class_unsigned_bits.cc +++ b/src/grib_accessor_class_unsigned_bits.cc @@ -16,7 +16,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long;pack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init IMPLEMENTS = next_offset IMPLEMENTS = byte_count IMPLEMENTS = value_count @@ -45,7 +45,6 @@ static long byte_count(grib_accessor*); static long byte_offset(grib_accessor*); static long next_offset(grib_accessor*); static int value_count(grib_accessor*, long*); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); static void update_size(grib_accessor*, size_t); @@ -70,7 +69,7 @@ static grib_accessor_class _grib_accessor_class_unsigned_bits = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ &next_offset, /* next_offset */ 0, /* get length of string */ &value_count, /* get number of values */ @@ -149,11 +148,6 @@ static void init(grib_accessor* a, const long len, grib_arguments* args) a->length = compute_byte_count(a); } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_unsigned_bits* self = (grib_accessor_unsigned_bits*)a; @@ -169,7 +163,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) if (*len < rlen) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size (%ld) for %s, it contains %ld values", *len, a->name, rlen); - *len = 0; + *len = rlen; return GRIB_ARRAY_TOO_SMALL; } diff --git a/src/grib_accessor_class_validity_date.cc b/src/grib_accessor_class_validity_date.cc index 8182228ae..760b7bccd 100644 --- a/src/grib_accessor_class_validity_date.cc +++ b/src/grib_accessor_class_validity_date.cc @@ -17,7 +17,7 @@ CLASS = accessor SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS=const char* date MEMBERS=const char* time MEMBERS=const char* step @@ -40,7 +40,6 @@ or edit "accessor.class" and rerun ./make_class.pl */ static int unpack_long(grib_accessor*, long* val, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_validity_date @@ -69,7 +68,7 @@ static grib_accessor_class _grib_accessor_class_validity_date = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -165,11 +164,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_validity_date* self = (grib_accessor_validity_date*)a; diff --git a/src/grib_accessor_class_validity_time.cc b/src/grib_accessor_class_validity_time.cc index 0b2c9697f..34eb78128 100644 --- a/src/grib_accessor_class_validity_time.cc +++ b/src/grib_accessor_class_validity_time.cc @@ -18,7 +18,7 @@ SUPER = grib_accessor_class_long IMPLEMENTS = unpack_long IMPLEMENTS = unpack_string - IMPLEMENTS = init;dump + IMPLEMENTS = init MEMBERS=const char* date MEMBERS=const char* time MEMBERS=const char* step @@ -41,7 +41,6 @@ or edit "accessor.class" and rerun ./make_class.pl static int unpack_long(grib_accessor*, long* val, size_t* len); static int unpack_string(grib_accessor*, char*, size_t* len); -static void dump(grib_accessor*, grib_dumper*); static void init(grib_accessor*, const long, grib_arguments*); typedef struct grib_accessor_validity_time @@ -69,7 +68,7 @@ static grib_accessor_class _grib_accessor_class_validity_time = { &init, /* init */ 0, /* post_init */ 0, /* destroy */ - &dump, /* dump */ + 0, /* dump */ 0, /* next_offset */ 0, /* get length of string */ 0, /* get number of values */ @@ -164,11 +163,6 @@ static void init(grib_accessor* a, const long l, grib_arguments* c) a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; } -static void dump(grib_accessor* a, grib_dumper* dumper) -{ - grib_dump_long(dumper, a, NULL); -} - static int unpack_long(grib_accessor* a, long* val, size_t* len) { grib_accessor_validity_time* self = (grib_accessor_validity_time*)a; diff --git a/src/grib_accessor_class_values.cc b/src/grib_accessor_class_values.cc index 3e69cf56e..384282317 100644 --- a/src/grib_accessor_class_values.cc +++ b/src/grib_accessor_class_values.cc @@ -231,10 +231,8 @@ static int compare(grib_accessor* a, grib_accessor* b) grib_unpack_double(b, bval, &blen); retval = GRIB_SUCCESS; - while (alen != 0) { - if (*bval != *aval) - retval = GRIB_DOUBLE_VALUE_MISMATCH; - alen--; + for (size_t i=0; icontext, aval); @@ -245,15 +243,13 @@ static int compare(grib_accessor* a, grib_accessor* b) static int pack_long(grib_accessor* a, const long* val, size_t* len) { - int ret = 0; grib_accessor_values* self = (grib_accessor_values*)a; - int i; double* dval = (double*)grib_context_malloc(a->context, *len * sizeof(double)); - for (i = 0; i < *len; i++) + for (size_t i = 0; i < *len; i++) dval[i] = (double)val[i]; - ret = grib_pack_double(a, dval, len); + int ret = grib_pack_double(a, dval, len); grib_context_free(a->context, dval); diff --git a/src/grib_accessor_class_variable.cc b/src/grib_accessor_class_variable.cc index 9d12e04cf..8c5bbe7b0 100644 --- a/src/grib_accessor_class_variable.cc +++ b/src/grib_accessor_class_variable.cc @@ -126,6 +126,12 @@ grib_accessor_class* grib_accessor_class_variable = &_grib_accessor_class_variab /* END_CLASS_IMP */ +// +// This accessor is used for: +// constant +// transient +// + #define MAX_VARIABLE_STRING_LENGTH 255 static void init(grib_accessor* a, const long length, grib_arguments* args) @@ -180,7 +186,7 @@ void accessor_variable_set_type(grib_accessor* a, int type) static void dump(grib_accessor* a, grib_dumper* dumper) { - grib_accessor_variable* self = (grib_accessor_variable*)a; + const grib_accessor_variable* self = (grib_accessor_variable*)a; switch (self->type) { case GRIB_TYPE_DOUBLE: grib_dump_double(dumper, a, NULL); @@ -202,11 +208,16 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len) const double dval = *val; if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values", a->name, 1); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains 1 value", a->name); *len = 1; return GRIB_ARRAY_TOO_SMALL; } + //if (std::isnan(dval)) { + // grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Invalid number for %s: %g", __func__, a->name, dval); + // return GRIB_INVALID_ARGUMENT; + //} + self->dval = dval; if (dval < (double)LONG_MIN || dval > (double)LONG_MAX) self->type = GRIB_TYPE_DOUBLE; @@ -222,7 +233,7 @@ static int pack_float(grib_accessor* a, const float* val, size_t* len) const double fval = *val; if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains 1 value", a->name); *len = 1; return GRIB_ARRAY_TOO_SMALL; } @@ -241,7 +252,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) grib_accessor_variable* self = (grib_accessor_variable*)a; if (*len != 1) { - grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); + grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains 1 value", a->name); *len = 1; return GRIB_ARRAY_TOO_SMALL; } @@ -255,7 +266,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len) static int unpack_double(grib_accessor* a, double* val, size_t* len) { - grib_accessor_variable* self = (grib_accessor_variable*)a; + const grib_accessor_variable* self = (grib_accessor_variable*)a; if (*len < 1) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); @@ -269,7 +280,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len) static int unpack_float(grib_accessor* a, float* val, size_t* len) { - grib_accessor_variable* self = (grib_accessor_variable*)a; + const grib_accessor_variable* self = (grib_accessor_variable*)a; if (*len < 1) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1); @@ -283,7 +294,7 @@ static int unpack_float(grib_accessor* a, float* val, size_t* len) static int unpack_long(grib_accessor* a, long* val, size_t* len) { - grib_accessor_variable* self = (grib_accessor_variable*)a; + const grib_accessor_variable* self = (grib_accessor_variable*)a; if (*len < 1) { grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1); @@ -297,7 +308,7 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len) static int get_native_type(grib_accessor* a) { - grib_accessor_variable* self = (grib_accessor_variable*)a; + const grib_accessor_variable* self = (grib_accessor_variable*)a; return self->type; } @@ -350,7 +361,7 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len) static int pack_string(grib_accessor* a, const char* val, size_t* len) { grib_accessor_variable* self = (grib_accessor_variable*)a; - grib_context* c = a->context; + const grib_context* c = a->context; grib_context_free(c, self->cval); self->cval = grib_context_strdup(c, val); @@ -369,7 +380,7 @@ static int value_count(grib_accessor* a, long* count) static size_t string_length(grib_accessor* a) { - grib_accessor_variable* self = (grib_accessor_variable*)a; + const grib_accessor_variable* self = (grib_accessor_variable*)a; if (self->type == GRIB_TYPE_STRING) return strlen(self->cval); else @@ -383,7 +394,7 @@ static long byte_count(grib_accessor* a) static int compare(grib_accessor* a, grib_accessor* b) { - int retval = 0; + int retval = GRIB_SUCCESS; double* aval = 0; double* bval = 0; @@ -412,10 +423,9 @@ static int compare(grib_accessor* a, grib_accessor* b) grib_unpack_double(b, bval, &blen); retval = GRIB_SUCCESS; - while (alen != 0) { - if (*bval != *aval) - retval = GRIB_DOUBLE_VALUE_MISMATCH; - alen--; + retval = GRIB_SUCCESS; + for (size_t i=0; icontext, aval); @@ -426,13 +436,13 @@ static int compare(grib_accessor* a, grib_accessor* b) static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err) { - grib_accessor* the_clone = NULL; - grib_accessor_variable* self = (grib_accessor_variable*)a; + grib_accessor* the_clone = NULL; + const grib_accessor_variable* self = (grib_accessor_variable*)a; grib_accessor_variable* variableAccessor = NULL; - grib_action creator = {0,}; - creator.op = (char*)"variable"; + grib_action creator = {0,}; + creator.op = (char*)"variable"; creator.name_space = (char*)""; - creator.set = 0; + creator.set = 0; creator.name = grib_context_strdup(a->context, a->name); the_clone = grib_accessor_factory(s, &creator, 0, NULL); diff --git a/src/grib_accessor_classes_hash.cc b/src/grib_accessor_classes_hash.cc index cb9a8b437..5617c9456 100644 --- a/src/grib_accessor_classes_hash.cc +++ b/src/grib_accessor_classes_hash.cc @@ -35,9 +35,9 @@ #include "grib_accessor_class.h" #line 6 "accessor_class_list.gperf" -struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; +struct accessor_class_hash { const char *name; grib_accessor_class **cclass;}; -#define TOTAL_KEYWORDS 204 +#define TOTAL_KEYWORDS 205 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 44 #define MIN_HASH_VALUE 1 @@ -117,21 +117,21 @@ static const struct accessor_class_hash classes[] = #line 9 "accessor_class_list.gperf" {" "}, {""}, {""}, {""}, {""}, -#line 178 "accessor_class_list.gperf" +#line 179 "accessor_class_list.gperf" {"size", &grib_accessor_class_size}, #line 12 "accessor_class_list.gperf" {"ascii", &grib_accessor_class_ascii}, -#line 175 "accessor_class_list.gperf" +#line 176 "accessor_class_list.gperf" {"signed", &grib_accessor_class_signed}, -#line 155 "accessor_class_list.gperf" +#line 156 "accessor_class_list.gperf" {"pad", &grib_accessor_class_pad}, -#line 181 "accessor_class_list.gperf" +#line 182 "accessor_class_list.gperf" {"spd", &grib_accessor_class_spd}, {""}, #line 75 "accessor_class_list.gperf" {"dirty", &grib_accessor_class_dirty}, {""}, -#line 176 "accessor_class_list.gperf" +#line 177 "accessor_class_list.gperf" {"signed_bits", &grib_accessor_class_signed_bits}, {""}, #line 66 "accessor_class_list.gperf" @@ -141,7 +141,7 @@ static const struct accessor_class_hash classes[] = {"data_simple_packing", &grib_accessor_class_data_simple_packing}, #line 68 "accessor_class_list.gperf" {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, -#line 169 "accessor_class_list.gperf" +#line 170 "accessor_class_list.gperf" {"section", &grib_accessor_class_section}, #line 43 "accessor_class_list.gperf" {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, @@ -155,36 +155,36 @@ static const struct accessor_class_hash classes[] = {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, #line 65 "accessor_class_list.gperf" {"data_png_packing", &grib_accessor_class_data_png_packing}, -#line 171 "accessor_class_list.gperf" - {"section_padding", &grib_accessor_class_section_padding}, #line 172 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_class_section_padding}, +#line 173 "accessor_class_list.gperf" {"section_pointer", &grib_accessor_class_section_pointer}, #line 44 "accessor_class_list.gperf" {"data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic}, {""}, {""}, {""}, {""}, #line 80 "accessor_class_list.gperf" {"expanded_descriptors", &grib_accessor_class_expanded_descriptors}, -#line 156 "accessor_class_list.gperf" +#line 157 "accessor_class_list.gperf" {"padding", &grib_accessor_class_padding}, #line 45 "accessor_class_list.gperf" {"data_apply_boustrophedonic_bitmap", &grib_accessor_class_data_apply_boustrophedonic_bitmap}, #line 110 "accessor_class_list.gperf" {"gds_is_present", &grib_accessor_class_gds_is_present}, -#line 168 "accessor_class_list.gperf" +#line 169 "accessor_class_list.gperf" {"second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value}, -#line 170 "accessor_class_list.gperf" +#line 171 "accessor_class_list.gperf" {"section_length", &grib_accessor_class_section_length}, #line 113 "accessor_class_list.gperf" {"getenv", &grib_accessor_class_getenv}, #line 57 "accessor_class_list.gperf" {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, -#line 190 "accessor_class_list.gperf" +#line 191 "accessor_class_list.gperf" {"time", &grib_accessor_class_time}, {""}, #line 61 "accessor_class_list.gperf" {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, {""}, -#line 154 "accessor_class_list.gperf" +#line 155 "accessor_class_list.gperf" {"packing_type", &grib_accessor_class_packing_type}, #line 62 "accessor_class_list.gperf" {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, @@ -198,28 +198,28 @@ static const struct accessor_class_hash classes[] = {"g2end_step", &grib_accessor_class_g2end_step}, #line 98 "accessor_class_list.gperf" {"g2_eps", &grib_accessor_class_g2_eps}, -#line 141 "accessor_class_list.gperf" +#line 142 "accessor_class_list.gperf" {"nearest", &grib_accessor_class_nearest}, {""}, -#line 157 "accessor_class_list.gperf" +#line 158 "accessor_class_list.gperf" {"padto", &grib_accessor_class_padto}, -#line 188 "accessor_class_list.gperf" +#line 189 "accessor_class_list.gperf" {"sum", &grib_accessor_class_sum}, {""}, #line 107 "accessor_class_list.gperf" {"g2lon", &grib_accessor_class_g2lon}, -#line 202 "accessor_class_list.gperf" +#line 203 "accessor_class_list.gperf" {"uint8", &grib_accessor_class_uint8}, {""}, -#line 187 "accessor_class_list.gperf" +#line 188 "accessor_class_list.gperf" {"step_in_units", &grib_accessor_class_step_in_units}, #line 63 "accessor_class_list.gperf" {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, -#line 200 "accessor_class_list.gperf" +#line 201 "accessor_class_list.gperf" {"uint64", &grib_accessor_class_uint64}, #line 47 "accessor_class_list.gperf" {"data_complex_packing", &grib_accessor_class_data_complex_packing}, -#line 198 "accessor_class_list.gperf" +#line 199 "accessor_class_list.gperf" {"uint32", &grib_accessor_class_uint32}, #line 13 "accessor_class_list.gperf" {"bit", &grib_accessor_class_bit}, @@ -233,7 +233,7 @@ static const struct accessor_class_hash classes[] = {"julian_day", &grib_accessor_class_julian_day}, #line 123 "accessor_class_list.gperf" {"julian_date", &grib_accessor_class_julian_date}, -#line 142 "accessor_class_list.gperf" +#line 143 "accessor_class_list.gperf" {"non_alpha", &grib_accessor_class_non_alpha}, {""}, #line 29 "accessor_class_list.gperf" @@ -245,14 +245,14 @@ static const struct accessor_class_hash classes[] = #line 16 "accessor_class_list.gperf" {"bits_per_value", &grib_accessor_class_bits_per_value}, {""}, {""}, {""}, {""}, {""}, -#line 166 "accessor_class_list.gperf" +#line 167 "accessor_class_list.gperf" {"scale", &grib_accessor_class_scale}, {""}, -#line 184 "accessor_class_list.gperf" +#line 185 "accessor_class_list.gperf" {"statistics", &grib_accessor_class_statistics}, #line 102 "accessor_class_list.gperf" {"g2date", &grib_accessor_class_g2date}, -#line 144 "accessor_class_list.gperf" +#line 145 "accessor_class_list.gperf" {"number_of_points", &grib_accessor_class_number_of_points}, #line 100 "accessor_class_list.gperf" {"g2bitmap", &grib_accessor_class_g2bitmap}, @@ -265,13 +265,13 @@ static const struct accessor_class_hash classes[] = {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, #line 122 "accessor_class_list.gperf" {"iterator", &grib_accessor_class_iterator}, -#line 185 "accessor_class_list.gperf" +#line 186 "accessor_class_list.gperf" {"statistics_spectral", &grib_accessor_class_statistics_spectral}, #line 46 "accessor_class_list.gperf" {"data_ccsds_packing", &grib_accessor_class_data_ccsds_packing}, -#line 145 "accessor_class_list.gperf" +#line 146 "accessor_class_list.gperf" {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, -#line 205 "accessor_class_list.gperf" +#line 206 "accessor_class_list.gperf" {"unsigned", &grib_accessor_class_unsigned}, #line 138 "accessor_class_list.gperf" {"md5", &grib_accessor_class_md5}, @@ -280,30 +280,30 @@ static const struct accessor_class_hash classes[] = {"g2_aerosol", &grib_accessor_class_g2_aerosol}, #line 139 "accessor_class_list.gperf" {"message", &grib_accessor_class_message}, -#line 206 "accessor_class_list.gperf" +#line 207 "accessor_class_list.gperf" {"unsigned_bits", &grib_accessor_class_unsigned_bits}, -#line 173 "accessor_class_list.gperf" +#line 174 "accessor_class_list.gperf" {"select_step_template", &grib_accessor_class_select_step_template}, #line 136 "accessor_class_list.gperf" {"mars_param", &grib_accessor_class_mars_param}, -#line 203 "accessor_class_list.gperf" +#line 204 "accessor_class_list.gperf" {"unexpanded_descriptors", &grib_accessor_class_unexpanded_descriptors}, -#line 192 "accessor_class_list.gperf" +#line 193 "accessor_class_list.gperf" {"to_integer", &grib_accessor_class_to_integer}, {""}, {""}, {""}, -#line 177 "accessor_class_list.gperf" +#line 178 "accessor_class_list.gperf" {"simple_packing_error", &grib_accessor_class_simple_packing_error}, -#line 186 "accessor_class_list.gperf" +#line 187 "accessor_class_list.gperf" {"step_human_readable", &grib_accessor_class_step_human_readable}, #line 140 "accessor_class_list.gperf" {"message_copy", &grib_accessor_class_message_copy}, -#line 162 "accessor_class_list.gperf" +#line 163 "accessor_class_list.gperf" {"raw", &grib_accessor_class_raw}, {""}, {""}, -#line 201 "accessor_class_list.gperf" +#line 202 "accessor_class_list.gperf" {"uint64_little_endian", &grib_accessor_class_uint64_little_endian}, {""}, -#line 199 "accessor_class_list.gperf" +#line 200 "accessor_class_list.gperf" {"uint32_little_endian", &grib_accessor_class_uint32_little_endian}, #line 114 "accessor_class_list.gperf" {"global_gaussian", &grib_accessor_class_global_gaussian}, @@ -311,20 +311,20 @@ static const struct accessor_class_hash classes[] = #line 76 "accessor_class_list.gperf" {"divdouble", &grib_accessor_class_divdouble}, {""}, -#line 174 "accessor_class_list.gperf" +#line 175 "accessor_class_list.gperf" {"sexagesimal2decimal", &grib_accessor_class_sexagesimal2decimal}, #line 99 "accessor_class_list.gperf" {"g2_mars_labeling", &grib_accessor_class_g2_mars_labeling}, #line 78 "accessor_class_list.gperf" {"element", &grib_accessor_class_element}, -#line 159 "accessor_class_list.gperf" +#line 160 "accessor_class_list.gperf" {"padtomultiple", &grib_accessor_class_padtomultiple}, #line 127 "accessor_class_list.gperf" {"latitudes", &grib_accessor_class_latitudes}, -#line 163 "accessor_class_list.gperf" +#line 164 "accessor_class_list.gperf" {"rdbtime_guess_date", &grib_accessor_class_rdbtime_guess_date}, {""}, {""}, {""}, -#line 193 "accessor_class_list.gperf" +#line 194 "accessor_class_list.gperf" {"to_string", &grib_accessor_class_to_string}, #line 132 "accessor_class_list.gperf" {"long", &grib_accessor_class_long}, @@ -348,20 +348,20 @@ static const struct accessor_class_hash classes[] = {""}, #line 28 "accessor_class_list.gperf" {"bufrdc_expanded_descriptors", &grib_accessor_class_bufrdc_expanded_descriptors}, -#line 160 "accessor_class_list.gperf" +#line 161 "accessor_class_list.gperf" {"position", &grib_accessor_class_position}, {""}, {""}, {""}, #line 17 "accessor_class_list.gperf" {"blob", &grib_accessor_class_blob}, #line 109 "accessor_class_list.gperf" {"gaussian_grid_name", &grib_accessor_class_gaussian_grid_name}, -#line 196 "accessor_class_list.gperf" +#line 197 "accessor_class_list.gperf" {"trim", &grib_accessor_class_trim}, {""}, {""}, #line 119 "accessor_class_list.gperf" {"ibmfloat", &grib_accessor_class_ibmfloat}, {""}, {""}, -#line 194 "accessor_class_list.gperf" +#line 195 "accessor_class_list.gperf" {"transient", &grib_accessor_class_transient}, #line 55 "accessor_class_list.gperf" {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, @@ -370,15 +370,15 @@ static const struct accessor_class_hash classes[] = {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, #line 49 "accessor_class_list.gperf" {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, -#line 165 "accessor_class_list.gperf" +#line 166 "accessor_class_list.gperf" {"round", &grib_accessor_class_round}, -#line 195 "accessor_class_list.gperf" +#line 196 "accessor_class_list.gperf" {"transient_darray", &grib_accessor_class_transient_darray}, #line 18 "accessor_class_list.gperf" {"budgdate", &grib_accessor_class_budgdate}, -#line 209 "accessor_class_list.gperf" +#line 210 "accessor_class_list.gperf" {"values", &grib_accessor_class_values}, -#line 143 "accessor_class_list.gperf" +#line 144 "accessor_class_list.gperf" {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, #line 126 "accessor_class_list.gperf" {"label", &grib_accessor_class_label}, @@ -386,30 +386,30 @@ static const struct accessor_class_hash classes[] = #line 38 "accessor_class_list.gperf" {"concept", &grib_accessor_class_concept}, {""}, -#line 182 "accessor_class_list.gperf" +#line 183 "accessor_class_list.gperf" {"spectral_truncation", &grib_accessor_class_spectral_truncation}, {""}, {""}, #line 83 "accessor_class_list.gperf" {"g1_message_length", &grib_accessor_class_g1_message_length}, -#line 183 "accessor_class_list.gperf" +#line 184 "accessor_class_list.gperf" {"sprintf", &grib_accessor_class_sprintf}, -#line 189 "accessor_class_list.gperf" +#line 190 "accessor_class_list.gperf" {"suppressed", &grib_accessor_class_suppressed}, {""}, -#line 212 "accessor_class_list.gperf" +#line 213 "accessor_class_list.gperf" {"when", &grib_accessor_class_when}, {""}, {""}, -#line 179 "accessor_class_list.gperf" +#line 180 "accessor_class_list.gperf" {"smart_table", &grib_accessor_class_smart_table}, {""}, #line 39 "accessor_class_list.gperf" {"constant", &grib_accessor_class_constant}, {""}, {""}, -#line 161 "accessor_class_list.gperf" +#line 162 "accessor_class_list.gperf" {"proj_string", &grib_accessor_class_proj_string}, -#line 149 "accessor_class_list.gperf" +#line 150 "accessor_class_list.gperf" {"octet_number", &grib_accessor_class_octet_number}, -#line 180 "accessor_class_list.gperf" +#line 181 "accessor_class_list.gperf" {"smart_table_column", &grib_accessor_class_smart_table_column}, {""}, #line 135 "accessor_class_list.gperf" @@ -426,7 +426,7 @@ static const struct accessor_class_hash classes[] = {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, #line 27 "accessor_class_list.gperf" {"bufr_string_values", &grib_accessor_class_bufr_string_values}, -#line 197 "accessor_class_list.gperf" +#line 198 "accessor_class_list.gperf" {"uint16", &grib_accessor_class_uint16}, {""}, {""}, #line 71 "accessor_class_list.gperf" @@ -439,26 +439,27 @@ static const struct accessor_class_hash classes[] = {""}, #line 54 "accessor_class_list.gperf" {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, -#line 191 "accessor_class_list.gperf" +#line 192 "accessor_class_list.gperf" {"to_double", &grib_accessor_class_to_double}, #line 101 "accessor_class_list.gperf" {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, #line 120 "accessor_class_list.gperf" {"ieeefloat", &grib_accessor_class_ieeefloat}, -#line 150 "accessor_class_list.gperf" +#line 151 "accessor_class_list.gperf" {"offset_file", &grib_accessor_class_offset_file}, -#line 207 "accessor_class_list.gperf" - {"validity_date", &grib_accessor_class_validity_date}, #line 208 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, +#line 209 "accessor_class_list.gperf" {"validity_time", &grib_accessor_class_validity_time}, {""}, #line 130 "accessor_class_list.gperf" {"library_version", &grib_accessor_class_library_version}, -#line 211 "accessor_class_list.gperf" +#line 212 "accessor_class_list.gperf" {"vector", &grib_accessor_class_vector}, #line 84 "accessor_class_list.gperf" {"g1_section4_length", &grib_accessor_class_g1_section4_length}, - {""}, +#line 141 "accessor_class_list.gperf" + {"multdouble", &grib_accessor_class_multdouble}, #line 52 "accessor_class_list.gperf" {"data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing}, {""}, {""}, @@ -467,7 +468,7 @@ static const struct accessor_class_hash classes[] = {""}, #line 24 "accessor_class_list.gperf" {"bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets}, -#line 158 "accessor_class_list.gperf" +#line 159 "accessor_class_list.gperf" {"padtoeven", &grib_accessor_class_padtoeven}, #line 50 "accessor_class_list.gperf" {"data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing}, @@ -483,7 +484,7 @@ static const struct accessor_class_hash classes[] = #line 21 "accessor_class_list.gperf" {"bufr_elements_table", &grib_accessor_class_bufr_elements_table}, {""}, {""}, {""}, {""}, -#line 153 "accessor_class_list.gperf" +#line 154 "accessor_class_list.gperf" {"pack_bufr_values", &grib_accessor_class_pack_bufr_values}, #line 35 "accessor_class_list.gperf" {"codetable", &grib_accessor_class_codetable}, @@ -495,7 +496,7 @@ static const struct accessor_class_hash classes[] = {""}, #line 88 "accessor_class_list.gperf" {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, -#line 146 "accessor_class_list.gperf" +#line 147 "accessor_class_list.gperf" {"number_of_values", &grib_accessor_class_number_of_values}, {""}, #line 116 "accessor_class_list.gperf" @@ -503,26 +504,26 @@ static const struct accessor_class_hash classes[] = {""}, #line 33 "accessor_class_list.gperf" {"closest_date", &grib_accessor_class_closest_date}, -#line 152 "accessor_class_list.gperf" +#line 153 "accessor_class_list.gperf" {"optimal_step_units", &grib_accessor_class_optimal_step_units}, {""}, -#line 210 "accessor_class_list.gperf" +#line 211 "accessor_class_list.gperf" {"variable", &grib_accessor_class_variable}, #line 133 "accessor_class_list.gperf" {"long_vector", &grib_accessor_class_long_vector}, -#line 167 "accessor_class_list.gperf" +#line 168 "accessor_class_list.gperf" {"scale_values", &grib_accessor_class_scale_values}, {""}, {""}, {""}, #line 128 "accessor_class_list.gperf" {"latlon_increment", &grib_accessor_class_latlon_increment}, {""}, {""}, {""}, -#line 147 "accessor_class_list.gperf" +#line 148 "accessor_class_list.gperf" {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing}, {""}, #line 79 "accessor_class_list.gperf" {"evaluate", &grib_accessor_class_evaluate}, {""}, {""}, {""}, {""}, {""}, -#line 151 "accessor_class_list.gperf" +#line 152 "accessor_class_list.gperf" {"offset_values", &grib_accessor_class_offset_values}, #line 69 "accessor_class_list.gperf" {"data_sh_packed", &grib_accessor_class_data_sh_packed}, @@ -535,7 +536,7 @@ static const struct accessor_class_hash classes[] = {""}, {""}, #line 41 "accessor_class_list.gperf" {"count_missing", &grib_accessor_class_count_missing}, -#line 204 "accessor_class_list.gperf" +#line 205 "accessor_class_list.gperf" {"unpack_bufr_values", &grib_accessor_class_unpack_bufr_values}, {""}, {""}, #line 121 "accessor_class_list.gperf" @@ -569,7 +570,7 @@ static const struct accessor_class_hash classes[] = #line 31 "accessor_class_list.gperf" {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 148 "accessor_class_list.gperf" +#line 149 "accessor_class_list.gperf" {"octahedral_gaussian", &grib_accessor_class_octahedral_gaussian}, #line 10 "accessor_class_list.gperf" {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, @@ -600,7 +601,7 @@ static const struct accessor_class_hash classes[] = #line 87 "accessor_class_list.gperf" {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, {""}, {""}, {""}, {""}, {""}, -#line 164 "accessor_class_list.gperf" +#line 165 "accessor_class_list.gperf" {"reference_value_error", &grib_accessor_class_reference_value_error}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -621,11 +622,11 @@ static const struct accessor_class_hash classes[] = }; static const struct accessor_class_hash* grib_accessor_classes_hash(const char *str, size_t len) -{ - unsigned int key = grib_accessor_classes_get_id (str, len); + { + unsigned int key = grib_accessor_classes_get_id (str, len); #ifdef DEBUG - { + { const char *s; Assert( len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH ); Assert( key <= MAX_HASH_VALUE ); @@ -634,5 +635,5 @@ static const struct accessor_class_hash* grib_accessor_classes_hash(const char * } #endif - return &classes[key]; + return &classes[key]; } diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h index 00112e240..2f889a0c6 100644 --- a/src/grib_accessor_factory.h +++ b/src/grib_accessor_factory.h @@ -130,6 +130,7 @@ { "md5", &grib_accessor_class_md5, }, { "message", &grib_accessor_class_message, }, { "message_copy", &grib_accessor_class_message_copy, }, +{ "multdouble", &grib_accessor_class_multdouble, }, { "nearest", &grib_accessor_class_nearest, }, { "non_alpha", &grib_accessor_class_non_alpha, }, { "number_of_coded_values", &grib_accessor_class_number_of_coded_values, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list index 54627c6ad..1f7687f38 100644 --- a/src/grib_accessor_factory_hash_list +++ b/src/grib_accessor_factory_hash_list @@ -131,6 +131,7 @@ mars_step, &grib_accessor_class_mars_step md5, &grib_accessor_class_md5 message, &grib_accessor_class_message message_copy, &grib_accessor_class_message_copy +multdouble, &grib_accessor_class_multdouble nearest, &grib_accessor_class_nearest non_alpha, &grib_accessor_class_non_alpha number_of_coded_values, &grib_accessor_class_number_of_coded_values diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h index cea8a7de1..d13edbc46 100644 --- a/src/grib_api_internal.h +++ b/src/grib_api_internal.h @@ -171,20 +171,6 @@ extern int pthread_mutexattr_settype(pthread_mutexattr_t* attr, int type); if (!(a)) codes_assertion_failed(#a, __FILE__, __LINE__); \ } while (0) -#ifdef __gnu_hurd__ -#define COMPILE_TIME_ASSERT(condition) \ - extern int compile_time_assert[!!(condition)-1] -#else -/* Compile time assertion - Thanks to Ralf Holly */ -#define COMPILE_TIME_ASSERT(condition) \ - do { \ - enum \ - { \ - assert_static__ = 1 / (condition) \ - }; \ - } while (0) -#endif - #ifdef DEBUG #define DEBUG_ASSERT(a) Assert(a) #define DEBUG_ASSERT_ACCESS(array, index, size) \ @@ -258,7 +244,6 @@ typedef struct grib_accessor_class grib_accessor_class; typedef struct grib_action grib_action; typedef struct grib_action_class grib_action_class; typedef struct grib_section grib_section; -typedef struct grib_packer grib_packer; typedef struct grib_codetable grib_codetable; typedef struct grib_smart_table grib_smart_table; @@ -268,12 +253,10 @@ typedef struct grib_nearest_class grib_nearest_class; typedef struct grib_dumper grib_dumper; typedef struct grib_dumper_class grib_dumper_class; typedef struct grib_dependency grib_dependency; -typedef struct string_feed string_feed; typedef struct codes_condition codes_condition; -/* typedef void (*dynamic_key_proc) (const char*, void*) -*/ +/* typedef void (*dynamic_key_proc) (const char*, void*) */ typedef void (*nearest_init_class_proc)(grib_nearest_class*); typedef int (*nearest_init_proc)(grib_nearest* i, grib_handle*, grib_arguments*); @@ -352,9 +335,6 @@ typedef double (*grib_unop_double_proc)(double); typedef int (*grib_binop_string_proc)(char*, char*); -typedef struct second_order_packed second_order_packed; -typedef void grib_expression_visit_proc(void* udata, grib_expression* e); - struct grib_key_value_list { const char* name; @@ -369,7 +349,7 @@ struct grib_key_value_list grib_key_value_list* next; }; -struct second_order_packed +/* struct second_order_packed { unsigned long nbits_per_widths; unsigned long nbits_per_group_size; @@ -378,20 +358,7 @@ struct second_order_packed unsigned long* array_of_group_size; unsigned long* array_of_group_width; long* array_of_group_refs; -}; - -/** -* an grib_compression -* Structure supporting the packing and unpacking procedures -* -* @see grib_action_create_data -*/ -struct grib_packer -{ - const char* name; - grib_pack_proc pack; /** < packing procedure */ - grib_unpack_proc unpack; /** < unpacking procedure */ -}; +}; */ /* --------------- */ typedef struct grib_loader grib_loader; @@ -408,7 +375,7 @@ struct grib_loader }; /** -* an action +* An action * Structure supporting the creation of accessor, resulting of a statement during a definition file parsing * * @see grib_action_class @@ -451,7 +418,7 @@ typedef grib_action* (*action_reparse_proc)(grib_action* a, grib_accessor*, int* typedef int (*action_execute_proc)(grib_action* a, grib_handle*); /** -* an action_class +* An action_class * Structure supporting the specific behaviour of an action * * @see grib_action @@ -478,22 +445,22 @@ struct grib_action_class }; /** -* a buffer +* A buffer * Structure containing the data of a message */ struct grib_buffer { - int property; /** < property parameter of buffer */ - int validity; /** < validity parameter of buffer */ - int growable; /** < buffer can be grown */ - size_t length; /** < Buffer length */ - size_t ulength; /** < length used of the buffer */ - size_t ulength_bits; /** < length used of the buffer in bits */ - unsigned char* data; /** < the data byte array */ + int property; /** < property parameter of buffer */ + int validity; /** < validity parameter of buffer */ + int growable; /** < buffer can be grown */ + size_t length; /** < Buffer length */ + size_t ulength; /** < length used of the buffer */ + size_t ulength_bits; /** < length used of the buffer in bits */ + unsigned char* data; /** < the data byte array */ }; /** -* an Accessor +* An accessor * Structure supporting each single data unit and allowing its access * @see grib_accessor_class */ @@ -514,18 +481,18 @@ struct grib_virtual_value struct grib_accessor { - const char* name; /** < name of the accessor */ - const char* name_space; /** < namespace to which the accessor belongs */ + const char* name; /** < name of the accessor */ + const char* name_space; /** < namespace to which the accessor belongs */ grib_context* context; grib_handle* h; - grib_action* creator; /** < action that created the accessor */ - long length; /** < byte length of the accessor */ - long offset; /** < offset of the data in the buffer */ - grib_section* parent; /** < section to which the accessor is attached */ - grib_accessor* next; /** < next accessor in list */ - grib_accessor* previous; /** < next accessor in list */ - grib_accessor_class* cclass; /** < behaviour of the accessor */ - unsigned long flags; /** < Various flags */ + grib_action* creator; /** < action that created the accessor */ + long length; /** < byte length of the accessor */ + long offset; /** < offset of the data in the buffer */ + grib_section* parent; /** < section to which the accessor is attached */ + grib_accessor* next; /** < next accessor in list */ + grib_accessor* previous; /** < next accessor in list */ + grib_accessor_class* cclass; /** < behaviour of the accessor */ + unsigned long flags; /** < Various flags */ grib_section* sub_section; const char* all_names[MAX_ACCESSOR_NAMES]; /** < name of the accessor */ @@ -561,7 +528,7 @@ struct grib_accessor #define GRIB_ACCESSOR_FLAG_COPY_IF_CHANGING_EDITION (1 << 19) /** -* a section accessor +* A section accessor * Structure supporting hierarchical naming of the accessors * @see grib_accessor */ @@ -569,9 +536,9 @@ struct grib_section { grib_accessor* owner; grib_handle* h; /** < Handles of all accessors and buffer */ - grib_accessor* aclength; /** < block of the length of the block */ - grib_block_of_accessors* block; /** < block */ - grib_action* branch; /** < branch that created the block */ + grib_accessor* aclength; /** < block of the length of the block */ + grib_block_of_accessors* block; /** < block */ + grib_action* branch; /** < branch that created the block */ size_t length; size_t padding; }; @@ -581,17 +548,14 @@ struct grib_iterator_class grib_iterator_class** super; const char* name; size_t size; - int inited; iterator_init_class_proc init_class; - - iterator_init_proc init; - iterator_destroy_proc destroy; - - iterator_next_proc next; - iterator_previous_proc previous; - iterator_reset_proc reset; - iterator_has_next_proc has_next; + iterator_init_proc init; + iterator_destroy_proc destroy; + iterator_next_proc next; + iterator_previous_proc previous; + iterator_reset_proc reset; + iterator_has_next_proc has_next; }; struct grib_nearest_class @@ -599,14 +563,11 @@ struct grib_nearest_class grib_nearest_class** super; const char* name; size_t size; - int inited; nearest_init_class_proc init_class; - - nearest_init_proc init; - nearest_destroy_proc destroy; - - nearest_find_proc find; + nearest_init_proc init; + nearest_destroy_proc destroy; + nearest_find_proc find; }; /* --------------- */ @@ -654,18 +615,18 @@ struct grib_dumper_class struct grib_iterator { - grib_arguments* args; /** args of iterator */ + grib_arguments* args; /** args of iterator */ grib_handle* h; - long e; /** current element */ - size_t nv; /** number of values */ - double* data; /** data values */ + long e; /** current element */ + size_t nv; /** number of values */ + double* data; /** data values */ grib_iterator_class* cclass; unsigned long flags; }; struct grib_nearest { - grib_arguments* args; /** args of iterator */ + grib_arguments* args; /** args of iterator */ grib_handle* h; grib_context* context; double* values; @@ -837,10 +798,9 @@ void codes_assertion_failed(const char* message, const char* file, int line); struct grib_handle { - grib_context* context; /** < context attached to this handle */ - grib_buffer* buffer; /** < buffer attached to the handle */ + grib_context* context; /** < context attached to this handle */ + grib_buffer* buffer; /** < buffer attached to the handle */ grib_section* root; /** the root section*/ - grib_section* rules; /** the rules section*/ grib_dependency* dependencies; /** List of dependencies */ grib_handle* main; /** Used during reparsing */ grib_handle* kid; /** Used during reparsing */ @@ -867,13 +827,12 @@ struct grib_handle /* For GRIB2 multi-field messages */ struct grib_multi_handle { - grib_context* context; /** < context attached to this handle */ - grib_buffer* buffer; /** < buffer attached to the handle */ + grib_context* context; /** < context attached to this handle */ + grib_buffer* buffer; /** < buffer attached to the handle */ size_t offset; size_t length; }; - struct grib_accessor_class { grib_accessor_class** super; @@ -1103,24 +1062,17 @@ struct grib_expression_class const char* name; size_t size; int inited; - - expression_class_init_proc init_class; - expression_init_proc init; - expression_destroy_proc destroy; - - - expression_print_proc print; - expression_add_dependency_proc add_dependency; - - expression_native_type_proc native_type; - expression_get_name_proc get_name; - - expression_evaluate_long_proc evaluate_long; + expression_init_proc init; + expression_destroy_proc destroy; + expression_print_proc print; + expression_add_dependency_proc add_dependency; + expression_native_type_proc native_type; + expression_get_name_proc get_name; + expression_evaluate_long_proc evaluate_long; expression_evaluate_double_proc evaluate_double; expression_evaluate_string_proc evaluate_string; }; - struct grib_arguments { struct grib_arguments* next; @@ -1237,44 +1189,6 @@ struct grib_fieldset grib_field** fields; }; -/* concept index structures */ - -typedef struct grib_concept_index_key grib_concept_index_key; -typedef struct grib_concept_index grib_concept_index; -typedef struct grib_conditions_tree grib_conditions_tree; -typedef struct grib_concept_entry grib_concept_entry; -typedef struct grib_concept_key grib_concept_key; - -struct grib_concept_index_entry -{ - char* name; - char* value; - int type; - grib_concept_entry* next; -}; - -struct grib_concept_index_key -{ - char* name; - int type; - grib_concept_key* next; -}; - -struct grib_concept_index -{ - grib_context* context; - grib_concept_key* keys; - grib_conditions_tree* conditions; -}; - -struct grib_conditions_tree -{ - char* value; - void* object; - grib_conditions_tree* next; - grib_conditions_tree* next_key; -}; - /* support for in-memory definition and tables */ extern int codes_memfs_exists(const char* path); @@ -1315,7 +1229,6 @@ struct grib_field_list grib_field_list* next; }; - struct grib_index { grib_context* context; @@ -1402,10 +1315,8 @@ struct bufr_keys_iterator grib_trie* seen; }; -/* ----------*/ -/* md5 */ +/* --------- md5 --------*/ typedef unsigned long cvs_uint32; - struct cvs_MD5Context { cvs_uint32 buf[4]; @@ -1439,7 +1350,6 @@ struct grib_case }; /* ----------*/ - typedef struct code_table_entry { char* abbreviation; @@ -1458,7 +1368,7 @@ struct grib_codetable typedef struct grib_smart_table_entry { - /*int code;*/ + /*int code;*/ char* abbreviation; char* column[MAX_SMART_TABLE_COLUMNS]; } grib_smart_table_entry; diff --git a/src/grib_bufr_descriptors_array.cc b/src/grib_bufr_descriptors_array.cc index 0134048a2..637cf14eb 100644 --- a/src/grib_bufr_descriptors_array.cc +++ b/src/grib_bufr_descriptors_array.cc @@ -22,8 +22,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t v = (bufr_descriptors_array*)grib_context_malloc(c, sizeof(bufr_descriptors_array)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "bufr_descriptors_array_new unable to allocate %ld bytes\n", sizeof(bufr_descriptors_array)); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(bufr_descriptors_array)); return NULL; } v->context = c; @@ -34,7 +33,7 @@ bufr_descriptors_array* grib_bufr_descriptors_array_new(grib_context* c, size_t v->number_of_pop_front = 0; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_bufr_descriptors_array_new unable to allocate %ld bytes\n", sizeof(bufr_descriptor) * size); + "%s: Unable to allocate %zu bytes", __func__, sizeof(bufr_descriptor) * size); return NULL; } return v; @@ -73,8 +72,7 @@ static bufr_descriptors_array* grib_bufr_descriptors_array_resize_to(bufr_descri newv = (bufr_descriptor**)grib_context_malloc_clear(c, newsize * sizeof(bufr_descriptor*)); if (!newv) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_bufr_descriptors_array_resize unable to allocate %ld bytes\n", sizeof(bufr_descriptor*) * newsize); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(bufr_descriptor*) * newsize); return NULL; } diff --git a/src/grib_context.cc b/src/grib_context.cc index 0c1921138..a22fcc654 100644 --- a/src/grib_context.cc +++ b/src/grib_context.cc @@ -453,7 +453,7 @@ grib_context* grib_context_get_default() #ifdef ECCODES_SAMPLES_PATH if (!default_grib_context.grib_samples_path) - default_grib_context.grib_samples_path = ECCODES_SAMPLES_PATH; + default_grib_context.grib_samples_path = (char*)ECCODES_SAMPLES_PATH; #endif default_grib_context.grib_definition_files_path = codes_getenv("ECCODES_DEFINITION_PATH"); @@ -535,11 +535,10 @@ grib_context* grib_context_get_default() } #endif - grib_context_log(&default_grib_context, GRIB_LOG_DEBUG, "Definitions path: %s", - default_grib_context.grib_definition_files_path); - grib_context_log(&default_grib_context, GRIB_LOG_DEBUG, "Samples path: %s", - default_grib_context.grib_samples_path); - + if (default_grib_context.debug) { + fprintf(stderr, "ECCODES DEBUG Definitions path: %s\n", default_grib_context.grib_definition_files_path); + fprintf(stderr, "ECCODES DEBUG Samples path: %s\n", default_grib_context.grib_samples_path); + } default_grib_context.keys_count = 0; default_grib_context.keys = grib_hash_keys_new(&(default_grib_context), &(default_grib_context.keys_count)); @@ -840,7 +839,6 @@ void grib_context_reset(grib_context* c) void grib_context_delete(grib_context* c) { - size_t i = 0; if (!c) c = grib_context_get_default(); @@ -852,7 +850,7 @@ void grib_context_delete(grib_context* c) if (c != &default_grib_context) grib_context_free_persistent(&default_grib_context, c); - for(i=0; ihash_array[i] = NULL; c->hash_array_count = 0; grib_itrie_delete(c->hash_array_index); diff --git a/src/grib_darray.cc b/src/grib_darray.cc index f2250862d..5aac8265a 100644 --- a/src/grib_darray.cc +++ b/src/grib_darray.cc @@ -45,8 +45,7 @@ grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) c = grib_context_get_default(); v = (grib_darray*)grib_context_malloc_clear(c, sizeof(grib_darray)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_darray_new unable to allocate %zu bytes", sizeof(grib_darray)); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_darray)); return NULL; } v->size = size; @@ -55,8 +54,7 @@ grib_darray* grib_darray_new(grib_context* c, size_t size, size_t incsize) v->context = c; v->v = (double*)grib_context_malloc_clear(c, sizeof(double) * size); if (!v->v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_darray_new unable to allocate %zu bytes", sizeof(double) * size); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(double) * size); return NULL; } return v; @@ -73,7 +71,7 @@ static grib_darray* grib_darray_resize(grib_darray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_darray_resize unable to allocate %zu bytes", sizeof(double) * newsize); + "%s: Unable to allocate %zu bytes", __func__, sizeof(double) * newsize); return NULL; } return v; diff --git a/src/grib_dependency.cc b/src/grib_dependency.cc index 769ec49ce..4c417173e 100644 --- a/src/grib_dependency.cc +++ b/src/grib_dependency.cc @@ -134,7 +134,7 @@ int grib_dependency_notify_change(grib_accessor* observed) /* This version takes in the handle so does not need to work it out from the 'observed' */ /* See ECC-778 */ -int ecc__grib_dependency_notify_change(grib_handle* h, grib_accessor* observed) +int grib_dependency_notify_change_h(grib_handle* h, grib_accessor* observed) { grib_dependency* d = h->dependencies; int ret = GRIB_SUCCESS; diff --git a/src/grib_dumper_class_bufr_encode_C.cc b/src/grib_dumper_class_bufr_encode_C.cc index de68b423f..568a035bb 100644 --- a/src/grib_dumper_class_bufr_encode_C.cc +++ b/src/grib_dumper_class_bufr_encode_C.cc @@ -102,13 +102,14 @@ static void init_class(grib_dumper_class* c) {} static int init(grib_dumper* d) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - grib_context* c = d->context; - self->section_offset = 0; - self->empty = 1; - d->count = 1; - self->isLeaf = 0; - self->isAttribute = 0; - self->keys = (grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list)); + + grib_context* c = d->context; + self->section_offset = 0; + self->empty = 1; + d->count = 1; + self->isLeaf = 0; + self->isAttribute = 0; + self->keys = (grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list)); return GRIB_SUCCESS; } @@ -116,9 +117,9 @@ static int init(grib_dumper* d) static int destroy(grib_dumper* d) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - grib_string_list* next = self->keys; - grib_string_list* cur = NULL; - grib_context* c = d->context; + grib_string_list* next = self->keys; + grib_string_list* cur = NULL; + grib_context* c = d->context; while (next) { cur = next; next = next->next; @@ -152,10 +153,11 @@ static char* dval_to_string(grib_context* c, double v) static void dump_values(grib_dumper* d, grib_accessor* a) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - double value = 0; + + double value = 0; size_t size = 0, size2 = 0; - double* values = NULL; - int err = 0; + double* values = NULL; + int err = 0; int i, r, icount; int cols = 2; long count = 0; @@ -248,10 +250,11 @@ static void dump_values(grib_dumper* d, grib_accessor* a) static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* prefix) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - double value = 0; + + double value = 0; size_t size = 0, size2 = 0; - double* values = NULL; - int err = 0; + double* values = NULL; + int err = 0; int i, icount; int cols = 2; long count = 0; @@ -333,16 +336,17 @@ static int is_hidden(grib_accessor* a) static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - long value = 0; + + long value = 0; size_t size = 0, size2 = 0; - long* values = NULL; - int err = 0; + long* values = NULL; + int err = 0; int i, r, icount; - int cols = 4; - long count = 0; - char* sval = NULL; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + int cols = 4; + long count = 0; + char* sval = NULL; + grib_context* c = a->context; + grib_handle* h = grib_handle_of_accessor(a); int doing_unexpandedDescriptors = 0; if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ @@ -471,10 +475,11 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* prefix) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - long value = 0; + + long value = 0; size_t size = 0, size2 = 0; - long* values = NULL; - int err = 0; + long* values = NULL; + int err = 0; int i, icount; int cols = 4; long count = 0; @@ -552,8 +557,9 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - double value = 0; - size_t size = 1; + + double value = 0; + size_t size = 1; int r; char* sval; grib_handle* h = grib_handle_of_accessor(a); @@ -667,15 +673,16 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - char* value = NULL; - char* p = NULL; - size_t size = 0; - grib_context* c = a->context; + + char* value = NULL; + char* p = NULL; + size_t size = 0; + grib_context* c = a->context; int r = 0, err = 0; - grib_handle* h = grib_handle_of_accessor(a); + grib_handle* h = grib_handle_of_accessor(a); const char* acc_name = a->name; - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); if (size == 0) return; @@ -814,7 +821,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix) { - int i = 0; + int i = 0; grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; unsigned long flags; while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { @@ -846,7 +853,7 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix static void header(grib_dumper* d, grib_handle* h) { grib_dumper_bufr_encode_C* self = (grib_dumper_bufr_encode_C*)d; - char sampleName[200] = { 0 }; + char sampleName[200] = { 0 }; long localSectionPresent, edition, bufrHeaderCentre, isSatellite; Assert(h->product_kind == PRODUCT_BUFR); diff --git a/src/grib_dumper_class_bufr_encode_filter.cc b/src/grib_dumper_class_bufr_encode_filter.cc index d55eb767a..49c4d19ef 100644 --- a/src/grib_dumper_class_bufr_encode_filter.cc +++ b/src/grib_dumper_class_bufr_encode_filter.cc @@ -611,7 +611,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 || (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) return; - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); if (size == 0) return; diff --git a/src/grib_dumper_class_bufr_encode_fortran.cc b/src/grib_dumper_class_bufr_encode_fortran.cc index b0f462019..e76bd0872 100644 --- a/src/grib_dumper_class_bufr_encode_fortran.cc +++ b/src/grib_dumper_class_bufr_encode_fortran.cc @@ -103,13 +103,14 @@ static void init_class(grib_dumper_class* c) {} static int init(grib_dumper* d) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - grib_context* c = d->context; - self->section_offset = 0; - self->empty = 1; - d->count = 1; - self->isLeaf = 0; - self->isAttribute = 0; - self->keys = (grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list)); + + grib_context* c = d->context; + self->section_offset = 0; + self->empty = 1; + d->count = 1; + self->isLeaf = 0; + self->isAttribute = 0; + self->keys = (grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list)); return GRIB_SUCCESS; } @@ -117,9 +118,10 @@ static int init(grib_dumper* d) static int destroy(grib_dumper* d) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - grib_string_list* next = self->keys; - grib_string_list* cur = NULL; - grib_context* c = d->context; + + grib_string_list* next = self->keys; + grib_string_list* cur = NULL; + grib_context* c = d->context; while (next) { cur = next; next = next->next; @@ -200,10 +202,11 @@ static char* break_line(grib_context* c, const char* input) static void dump_values(grib_dumper* d, grib_accessor* a) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - double value = 0; + + double value = 0; size_t size = 0, size2 = 0; - double* values = NULL; - int err = 0; + double* values = NULL; + int err = 0; int i, r, icount; int cols = 2; long count = 0; @@ -295,10 +298,11 @@ static void dump_values(grib_dumper* d, grib_accessor* a) static void dump_values_attribute(grib_dumper* d, grib_accessor* a, const char* prefix) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - double value = 0; + + double value = 0; size_t size = 0, size2 = 0; - double* values = NULL; - int err = 0; + double* values = NULL; + int err = 0; int i, icount; int cols = 2; long count = 0; @@ -381,16 +385,17 @@ static int is_hidden(grib_accessor* a) static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - long value = 0; + + long value = 0; size_t size = 0, size2 = 0; - long* values = NULL; - int err = 0; + long* values = NULL; + int err = 0; int i, r, icount; - int cols = 4; - long count = 0; - char* sval = NULL; - grib_context* c = a->context; - grib_handle* h = grib_handle_of_accessor(a); + int cols = 4; + long count = 0; + char* sval = NULL; + grib_context* c = a->context; + grib_handle* h = grib_handle_of_accessor(a); int doing_unexpandedDescriptors = 0; if ((a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) { /* key does not have the dump attribute */ @@ -516,10 +521,11 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_long_attribute(grib_dumper* d, grib_accessor* a, const char* prefix) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - long value = 0; + + long value = 0; size_t size = 0, size2 = 0; - long* values = NULL; - int err = 0; + long* values = NULL; + int err = 0; int i, icount; int cols = 4; long count = 0; @@ -603,8 +609,9 @@ static void dump_bits(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - double value = 0; - size_t size = 1; + + double value = 0; + size_t size = 1; int r; char* sval; grib_handle* h = grib_handle_of_accessor(a); @@ -715,16 +722,17 @@ static void dump_string_array(grib_dumper* d, grib_accessor* a, const char* comm static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - char* value = NULL; - char* p = NULL; - size_t size = 0; - grib_context* c = a->context; + + char* value = NULL; + char* p = NULL; + size_t size = 0; + grib_context* c = a->context; int r; int err = 0; grib_handle* h = grib_handle_of_accessor(a); const char* acc_name = a->name; - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); if (size == 0) return; @@ -860,7 +868,7 @@ static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accesso static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix) { - int i = 0; + int i = 0; grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; unsigned long flags; while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) { @@ -892,7 +900,7 @@ static void dump_attributes(grib_dumper* d, grib_accessor* a, const char* prefix static void header(grib_dumper* d, grib_handle* h) { grib_dumper_bufr_encode_fortran* self = (grib_dumper_bufr_encode_fortran*)d; - char sampleName[200] = { 0 }; + char sampleName[200] = { 0 }; long localSectionPresent, edition, bufrHeaderCentre, isSatellite; grib_get_long(h, "localSectionPresent", &localSectionPresent); diff --git a/src/grib_dumper_class_bufr_encode_python.cc b/src/grib_dumper_class_bufr_encode_python.cc index f4bcba49b..34367c913 100644 --- a/src/grib_dumper_class_bufr_encode_python.cc +++ b/src/grib_dumper_class_bufr_encode_python.cc @@ -665,7 +665,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) grib_handle* h = grib_handle_of_accessor(a); const char* acc_name = a->name; - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); if (size == 0) return; diff --git a/src/grib_dumper_class_debug.cc b/src/grib_dumper_class_debug.cc index cf92e9e28..77206c829 100644 --- a/src/grib_dumper_class_debug.cc +++ b/src/grib_dumper_class_debug.cc @@ -341,7 +341,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) if (a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) return; - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); if ((size < 2) && grib_is_missing_internal(a)) { /* GRIB-302: transients and missing keys. Need to re-adjust the size */ size = 10; /* big enough to hold the string "missing" */ diff --git a/src/grib_dumper_class_default.cc b/src/grib_dumper_class_default.cc index 61aface7f..e9bfdc702 100644 --- a/src/grib_dumper_class_default.cc +++ b/src/grib_dumper_class_default.cc @@ -410,7 +410,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) return; } - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); if (size == 0) return; diff --git a/src/grib_dumper_class_json.cc b/src/grib_dumper_class_json.cc index 3615595b2..a3b052844 100644 --- a/src/grib_dumper_class_json.cc +++ b/src/grib_dumper_class_json.cc @@ -454,11 +454,11 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) /* ECC-710: It is MUCH slower determining the string length here * than using a maximum size (and no need for malloc). * Specially for BUFR elements */ - /* err = ecc__grib_get_string_length(a,&size); + /* err = grib_get_string_length_acc(a,&size); * if (size==0) return; * value=(char*)grib_context_malloc_clear(a->context,size); * if (!value) { - * grib_context_log(a->context,GRIB_LOG_ERROR,"unable to allocate %d bytes",(int)size); + * grib_context_log(a->context,GRIB_LOG_ERROR,"Unable to allocate %zu bytes",size); * return; * } */ diff --git a/src/grib_dumper_class_serialize.cc b/src/grib_dumper_class_serialize.cc index 163a01f6b..6dc4d5c87 100644 --- a/src/grib_dumper_class_serialize.cc +++ b/src/grib_dumper_class_serialize.cc @@ -408,11 +408,10 @@ static void dump_label(grib_dumper* d, grib_accessor* a, const char* comment) static void dump_section(grib_dumper* d, grib_accessor* a, grib_block_of_accessors* block) { - const char* secstr = "section"; - int len = 0; + const char* secstr = "section"; grib_dumper_serialize* self = (grib_dumper_serialize*)d; - len = strlen(secstr); + size_t len = strlen(secstr); if (a->name[0] == '_') { grib_dump_accessors_block(d, block); diff --git a/src/grib_dumper_class_wmo.cc b/src/grib_dumper_class_wmo.cc index 4eab6d91d..814ed016f 100644 --- a/src/grib_dumper_class_wmo.cc +++ b/src/grib_dumper_class_wmo.cc @@ -311,7 +311,7 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment) return; } - ecc__grib_get_string_length(a, &size); + grib_get_string_length_acc(a, &size); value = (char*)grib_context_malloc_clear(a->context, size); if (!value) { grib_context_log(a->context, GRIB_LOG_ERROR, "unable to allocate %zu bytes", size); diff --git a/src/grib_expression.cc b/src/grib_expression.cc index c3cd36305..4c1109640 100644 --- a/src/grib_expression.cc +++ b/src/grib_expression.cc @@ -19,8 +19,7 @@ int grib_expression_native_type(grib_handle* h, grib_expression* g) c = c->super ? *(c->super) : NULL; } if (g->cclass) - grib_context_log(h->context, GRIB_LOG_ERROR, "No native_type() in %s", g->cclass->name); - Assert(1 == 0); + grib_context_log(h->context, GRIB_LOG_FATAL, "%s: No native_type() in %s", __func__, g->cclass->name); return 0; } @@ -55,7 +54,7 @@ const char* grib_expression_evaluate_string(grib_handle* h, grib_expression* g, c = c->super ? *(c->super) : NULL; } if (g->cclass) - grib_context_log(h->context, GRIB_LOG_ERROR, "No evaluate_string() in %s", g->cclass->name); + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: No evaluate_string() in %s", __func__, g->cclass->name); *err = GRIB_INVALID_TYPE; return 0; @@ -69,8 +68,9 @@ const char* grib_expression_get_name(grib_expression* g) return c->get_name(g); c = c->super ? *(c->super) : NULL; } - if (g->cclass) printf("No expression_get_name() in %s\n", g->cclass->name); - Assert(1 == 0); + if (g->cclass) { + grib_context_log(grib_context_get_default(), GRIB_LOG_FATAL, "%s: No get_name() in %s", __func__, g->cclass->name); + } return 0; } @@ -84,7 +84,6 @@ void grib_expression_print(grib_context* ctx, grib_expression* g, grib_handle* f } c = c->super ? *(c->super) : NULL; } - Assert(1 == 0); } void grib_expression_free(grib_context* ctx, grib_expression* g) @@ -110,43 +109,37 @@ void grib_expression_add_dependency(grib_expression* e, grib_accessor* observer) } c = c->super ? *(c->super) : NULL; } - Assert(1 == 0); } -/*----------------------------------------*/ -int grib_expression_set_value(grib_handle* h, grib_expression* g, grib_values* v) -{ - char buffer[1024]; - int ret = 0; - size_t size = sizeof(buffer); - - switch (v->type = grib_expression_native_type(h, g)) { - case GRIB_TYPE_LONG: - return grib_expression_evaluate_long(h, g, &v->long_value); - break; - - case GRIB_TYPE_DOUBLE: - return grib_expression_evaluate_double(h, g, &v->double_value); - break; - - case GRIB_TYPE_STRING: - v->string_value = grib_expression_evaluate_string(h, g, buffer, &size, &ret); - if (ret != GRIB_SUCCESS) { - grib_context_log(h->context, GRIB_LOG_ERROR, - "grib_expression_set_value: unable to evaluate %s as string", - grib_expression_get_name(g)); - return ret; - } - Assert(v->string_value != buffer); - Assert(v->string_value); - break; - - default: - Assert(1 == 0); - break; - } - return 0; -} +// int grib_expression_set_value(grib_handle* h, grib_expression* g, grib_values* v) +// { +// char buffer[1024]; +// int ret = 0; +// size_t size = sizeof(buffer); +// switch (v->type = grib_expression_native_type(h, g)) { +// case GRIB_TYPE_LONG: +// return grib_expression_evaluate_long(h, g, &v->long_value); +// break; +// case GRIB_TYPE_DOUBLE: +// return grib_expression_evaluate_double(h, g, &v->double_value); +// break; +// case GRIB_TYPE_STRING: +// v->string_value = grib_expression_evaluate_string(h, g, buffer, &size, &ret); +// if (ret != GRIB_SUCCESS) { +// grib_context_log(h->context, GRIB_LOG_ERROR, +// "grib_expression_set_value: unable to evaluate %s as string", +// grib_expression_get_name(g)); +// return ret; +// } +// Assert(v->string_value != buffer); +// Assert(v->string_value); +// break; +// default: +// Assert(!"grib_expression_set_value"); +// break; +// } +// return 0; +// } /*----------------------------------------*/ grib_arguments* grib_arguments_new(grib_context* c, grib_expression* g, grib_arguments* n) diff --git a/src/grib_expression_class.h b/src/grib_expression_class.h index 6856b1b06..8660a7864 100644 --- a/src/grib_expression_class.h +++ b/src/grib_expression_class.h @@ -1,8 +1,6 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ extern grib_expression_class* grib_expression_class_accessor; extern grib_expression_class* grib_expression_class_binop; -extern grib_expression_class* grib_expression_class_column; -extern grib_expression_class* grib_expression_class_constant; extern grib_expression_class* grib_expression_class_double; extern grib_expression_class* grib_expression_class_functor; extern grib_expression_class* grib_expression_class_is_in_dict; diff --git a/src/grib_expression_class_accessor.cc b/src/grib_expression_class_accessor.cc index e806a3e1a..39fe4f109 100644 --- a/src/grib_expression_class_accessor.cc +++ b/src/grib_expression_class_accessor.cc @@ -41,20 +41,14 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); -static string get_name(grib_expression* e); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_accessor{ grib_expression base; @@ -70,7 +64,6 @@ static grib_expression_class _grib_expression_class_accessor = { "accessor", /* name */ sizeof(grib_expression_accessor),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -84,33 +77,29 @@ static grib_expression_class _grib_expression_class_accessor = { grib_expression_class* grib_expression_class_accessor = &_grib_expression_class_accessor; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static const char* get_name(grib_expression* g) { - grib_expression_accessor* e = (grib_expression_accessor*)g; + const grib_expression_accessor* e = (grib_expression_accessor*)g; return e->name; } static int evaluate_long(grib_expression* g, grib_handle* h, long* result) { - grib_expression_accessor* e = (grib_expression_accessor*)g; + const grib_expression_accessor* e = (grib_expression_accessor*)g; return grib_get_long_internal(h, e->name, result); } static int evaluate_double(grib_expression* g, grib_handle* h, double* result) { - grib_expression_accessor* e = (grib_expression_accessor*)g; + const grib_expression_accessor* e = (grib_expression_accessor*)g; return grib_get_double_internal(h, e->name, result); } static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, size_t* size, int* err) { - grib_expression_accessor* e = (grib_expression_accessor*)g; + const grib_expression_accessor* e = (grib_expression_accessor*)g; char mybuf[1024] = {0,}; long start = e->start; if (e->length > sizeof(mybuf)) { @@ -141,7 +130,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_accessor* e = (grib_expression_accessor*)g; + const grib_expression_accessor* e = (grib_expression_accessor*)g; printf("access('%s", e->name); if (f) { long s = 0; @@ -159,8 +148,8 @@ static void destroy(grib_context* c, grib_expression* g) static void add_dependency(grib_expression* g, grib_accessor* observer) { - grib_expression_accessor* e = (grib_expression_accessor*)g; - grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); + const grib_expression_accessor* e = (grib_expression_accessor*)g; + grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); if (!observed) { /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ diff --git a/src/grib_expression_class_binop.cc b/src/grib_expression_class_binop.cc index e95bebbd3..328bb2ac4 100644 --- a/src/grib_expression_class_binop.cc +++ b/src/grib_expression_class_binop.cc @@ -41,18 +41,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_binop{ grib_expression base; @@ -70,7 +64,6 @@ static grib_expression_class _grib_expression_class_binop = { "binop", /* name */ sizeof(grib_expression_binop),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -84,10 +77,6 @@ static grib_expression_class _grib_expression_class_binop = { grib_expression_class* grib_expression_class_binop = &_grib_expression_class_binop; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) diff --git a/src/grib_expression_class_double.cc b/src/grib_expression_class_double.cc index f904c887e..89747194b 100644 --- a/src/grib_expression_class_double.cc +++ b/src/grib_expression_class_double.cc @@ -37,18 +37,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_double{ grib_expression base; @@ -62,7 +56,6 @@ static grib_expression_class _grib_expression_class_double = { "double", /* name */ sizeof(grib_expression_double),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -76,29 +69,25 @@ static grib_expression_class _grib_expression_class_double = { grib_expression_class* grib_expression_class_double = &_grib_expression_class_double; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) { - grib_expression_double* e = (grib_expression_double*)g; - *lres = e->value; + const grib_expression_double* e = (grib_expression_double*)g; + *lres = e->value; return GRIB_SUCCESS; } static int evaluate_double(grib_expression* g, grib_handle* h, double* dres) { - grib_expression_double* e = (grib_expression_double*)g; - *dres = e->value; + const grib_expression_double* e = (grib_expression_double*)g; + *dres = e->value; return GRIB_SUCCESS; } static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_double* e = (grib_expression_double*)g; + const grib_expression_double* e = (grib_expression_double*)g; printf("double(%g)", e->value); } @@ -115,8 +104,8 @@ static void add_dependency(grib_expression* g, grib_accessor* observer) grib_expression* new_double_expression(grib_context* c, double value) { grib_expression_double* e = (grib_expression_double*)grib_context_malloc_clear_persistent(c, sizeof(grib_expression_double)); - e->base.cclass = grib_expression_class_double; - e->value = value; + e->base.cclass = grib_expression_class_double; + e->value = value; return (grib_expression*)e; } diff --git a/src/grib_expression_class_functor.cc b/src/grib_expression_class_functor.cc index 89c4d8a6a..4664def10 100644 --- a/src/grib_expression_class_functor.cc +++ b/src/grib_expression_class_functor.cc @@ -37,17 +37,11 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); typedef struct grib_expression_functor{ grib_expression base; @@ -62,7 +56,6 @@ static grib_expression_class _grib_expression_class_functor = { "functor", /* name */ sizeof(grib_expression_functor),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -76,10 +69,6 @@ static grib_expression_class _grib_expression_class_functor = { grib_expression_class* grib_expression_class_functor = &_grib_expression_class_functor; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) @@ -134,7 +123,7 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) const char* p = grib_arguments_get_name(h, e->args, 0); if (p) { - grib_accessor* a = grib_find_accessor(h, p); + const grib_accessor* a = grib_find_accessor(h, p); *lres = a != NULL ? 1 : 0; return GRIB_SUCCESS; } @@ -149,7 +138,7 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) // 2. Cannot deal with string values const char* p = grib_arguments_get_name(h, e->args, 0); if (p) { - char* env = getenv(p); + const char* env = getenv(p); if (env) { long lval = 0; if (string_to_long(env, &lval, 1) == GRIB_SUCCESS) { @@ -177,7 +166,7 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_functor* e = (grib_expression_functor*)g; + const grib_expression_functor* e = (grib_expression_functor*)g; printf("%s(", e->name); // grib_expression_print(c,e->args,f); printf(")"); diff --git a/src/grib_expression_class_is_in_dict.cc b/src/grib_expression_class_is_in_dict.cc index a2ad355ab..142287cdc 100644 --- a/src/grib_expression_class_is_in_dict.cc +++ b/src/grib_expression_class_is_in_dict.cc @@ -39,19 +39,13 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); -static string get_name(grib_expression* e); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_is_in_dict{ grib_expression base; @@ -66,7 +60,6 @@ static grib_expression_class _grib_expression_class_is_in_dict = { "is_in_dict", /* name */ sizeof(grib_expression_is_in_dict),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ 0, /* destructor */ &print, @@ -80,10 +73,6 @@ static grib_expression_class _grib_expression_class_is_in_dict = { grib_expression_class* grib_expression_class_is_in_dict = &_grib_expression_class_is_in_dict; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ @@ -94,10 +83,10 @@ static grib_trie* load_dictionary(grib_context* c, grib_expression* e, int* err) char* filename = NULL; char line[1024] = {0,}; char key[1024] = {0,}; - char* list = 0; + char* list = 0; grib_trie* dictionary = NULL; - FILE* f = NULL; - int i = 0; + FILE* f = NULL; + int i = 0; *err = GRIB_SUCCESS; @@ -148,15 +137,15 @@ static grib_trie* load_dictionary(grib_context* c, grib_expression* e, int* err) static const char* get_name(grib_expression* g) { - grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; + const grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; return e->key; } static int evaluate_long(grib_expression* g, grib_handle* h, long* result) { - grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; - int err = 0; - char mybuf[1024] = {0,}; + const grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; + int err = 0; + char mybuf[1024] = {0,}; size_t size = 1024; grib_trie* dict = load_dictionary(h->context, g, &err); @@ -213,7 +202,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; + const grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; printf("access('%s", e->key); if (f) { long s = 0; @@ -239,8 +228,8 @@ static int native_type(grib_expression* g, grib_handle* h) static void add_dependency(grib_expression* g, grib_accessor* observer) { - grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; - grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->key); + const grib_expression_is_in_dict* e = (grib_expression_is_in_dict*)g; + grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->key); if (!observed) { /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ diff --git a/src/grib_expression_class_is_in_list.cc b/src/grib_expression_class_is_in_list.cc index 0d61cf82c..f5339c309 100644 --- a/src/grib_expression_class_is_in_list.cc +++ b/src/grib_expression_class_is_in_list.cc @@ -40,20 +40,14 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); -static string get_name(grib_expression* e); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_is_in_list{ grib_expression base; @@ -68,7 +62,6 @@ static grib_expression_class _grib_expression_class_is_in_list = { "is_in_list", /* name */ sizeof(grib_expression_is_in_list),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -82,10 +75,6 @@ static grib_expression_class _grib_expression_class_is_in_list = { grib_expression_class* grib_expression_class_is_in_list = &_grib_expression_class_is_in_list; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ @@ -147,15 +136,15 @@ static grib_trie* load_list(grib_context* c, grib_expression* e, int* err) static const char* get_name(grib_expression* g) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + const grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; return e->name; } static int evaluate_long(grib_expression* g, grib_handle* h, long* result) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - int err = 0; - char mybuf[1024] = {0,}; + const grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + int err = 0; + char mybuf[1024] = {0,}; size_t size = 1024; grib_trie* list = load_list(h->context, g, &err); @@ -178,24 +167,20 @@ static int evaluate_double(grib_expression* g, grib_handle* h, double* result) // int err = 0; // char mybuf[1024] = {0,}; // size_t size = 1024; - // grib_trie* list = load_list(h->context, g, &err); - // if ((err = grib_get_string_internal(h, e->name, mybuf, &size)) != GRIB_SUCCESS) // return err; - // if (grib_trie_get(list, mybuf)) // *result = 1; // else // *result = 0; - // return err; } static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, size_t* size, int* err) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - char mybuf[1024] = {0,}; + const grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + char mybuf[1024] = {0,}; size_t sizebuf = 1024; long result; @@ -216,7 +201,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + const grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; printf("access('%s", e->name); if (f) { long s = 0; @@ -232,8 +217,8 @@ static void destroy(grib_context* c, grib_expression* g) static void add_dependency(grib_expression* g, grib_accessor* observer) { - grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); + const grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; + grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); if (!observed) { /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ @@ -257,7 +242,7 @@ grib_expression* new_is_in_list_expression(grib_context* c, const char* name, co static int native_type(grib_expression* g, grib_handle* h) { grib_expression_is_in_list* e = (grib_expression_is_in_list*)g; - int type = 0; + int type = 0; int err; if ((err = grib_get_native_type(h, e->name, &type)) != GRIB_SUCCESS) grib_context_log(h->context, GRIB_LOG_ERROR, diff --git a/src/grib_expression_class_is_integer.cc b/src/grib_expression_class_is_integer.cc index 03554ece7..da81cc4cb 100644 --- a/src/grib_expression_class_is_integer.cc +++ b/src/grib_expression_class_is_integer.cc @@ -41,20 +41,14 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); -static string get_name(grib_expression* e); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_is_integer{ grib_expression base; @@ -70,7 +64,6 @@ static grib_expression_class _grib_expression_class_is_integer = { "is_integer", /* name */ sizeof(grib_expression_is_integer),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -84,26 +77,21 @@ static grib_expression_class _grib_expression_class_is_integer = { grib_expression_class* grib_expression_class_is_integer = &_grib_expression_class_is_integer; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static const char* get_name(grib_expression* g) { - grib_expression_is_integer* e = (grib_expression_is_integer*)g; + const grib_expression_is_integer* e = (grib_expression_is_integer*)g; return e->name; } static int evaluate_long(grib_expression* g, grib_handle* h, long* result) { grib_expression_is_integer* e = (grib_expression_is_integer*)g; - int err = 0; - char mybuf[1024] = {0,}; + int err = 0; + char mybuf[1024] = {0,}; size_t size = 1024; char* p = 0; - long val = 0; char* start = 0; if ((err = grib_get_string_internal(h, e->name, mybuf, &size)) != GRIB_SUCCESS) @@ -114,23 +102,22 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* result) if (e->length > 0) start[e->length] = 0; - val = strtol(start, &p, 10); + strtol(start, &p, 10); if (*p != 0) *result = 0; else *result = 1; - (void)val; return err; } static int evaluate_double(grib_expression* g, grib_handle* h, double* result) { - int err = 0; + int err = 0; long lresult = 0; - err = evaluate_long(g, h, &lresult); + err = evaluate_long(g, h, &lresult); *result = lresult; return err; } @@ -174,7 +161,7 @@ static void destroy(grib_context* c, grib_expression* g) static void add_dependency(grib_expression* g, grib_accessor* observer) { - grib_expression_is_integer* e = (grib_expression_is_integer*)g; + const grib_expression_is_integer* e = (grib_expression_is_integer*)g; grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); if (!observed) { diff --git a/src/grib_expression_class_length.cc b/src/grib_expression_class_length.cc index c685f2186..c9e967c77 100644 --- a/src/grib_expression_class_length.cc +++ b/src/grib_expression_class_length.cc @@ -41,20 +41,14 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); -static string get_name(grib_expression* e); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_length{ grib_expression base; @@ -70,7 +64,6 @@ static grib_expression_class _grib_expression_class_length = { "length", /* name */ sizeof(grib_expression_length),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -84,23 +77,19 @@ static grib_expression_class _grib_expression_class_length = { grib_expression_class* grib_expression_class_length = &_grib_expression_class_length; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static const char* get_name(grib_expression* g) { - grib_expression_length* e = (grib_expression_length*)g; + const grib_expression_length* e = (grib_expression_length*)g; return e->name; } static int evaluate_long(grib_expression* g, grib_handle* h, long* result) { - grib_expression_length* e = (grib_expression_length*)g; - int err = 0; - char mybuf[1024] = {0,}; + const grib_expression_length* e = (grib_expression_length*)g; + int err = 0; + char mybuf[1024] = {0,}; size_t size = 1024; if ((err = grib_get_string_internal(h, e->name, mybuf, &size)) != GRIB_SUCCESS) return err; @@ -111,10 +100,10 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* result) static int evaluate_double(grib_expression* g, grib_handle* h, double* result) { - grib_expression_length* e = (grib_expression_length*)g; - char mybuf[1024] = {0,}; + const grib_expression_length* e = (grib_expression_length*)g; + char mybuf[1024] = {0,}; size_t size = 1024; - int err = 0; + int err = 0; if ((err = grib_get_string_internal(h, e->name, mybuf, &size)) != GRIB_SUCCESS) return err; @@ -124,8 +113,8 @@ static int evaluate_double(grib_expression* g, grib_handle* h, double* result) static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, size_t* size, int* err) { - grib_expression_length* e = (grib_expression_length*)g; - char mybuf[1024] = {0,}; + const grib_expression_length* e = (grib_expression_length*)g; + char mybuf[1024] = {0,}; Assert(buf); if ((*err = grib_get_string_internal(h, e->name, mybuf, size)) != GRIB_SUCCESS) return NULL; @@ -136,7 +125,7 @@ static string evaluate_string(grib_expression* g, grib_handle* h, char* buf, siz static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_length* e = (grib_expression_length*)g; + const grib_expression_length* e = (grib_expression_length*)g; printf("access('%s", e->name); if (f) { long s = 0; @@ -154,8 +143,8 @@ static void destroy(grib_context* c, grib_expression* g) static void add_dependency(grib_expression* g, grib_accessor* observer) { - grib_expression_length* e = (grib_expression_length*)g; - grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); + const grib_expression_length* e = (grib_expression_length*)g; + grib_accessor* observed = grib_find_accessor(grib_handle_of_accessor(observer), e->name); if (!observed) { /* grib_context_log(observer->context, GRIB_LOG_ERROR, */ @@ -170,8 +159,8 @@ static void add_dependency(grib_expression* g, grib_accessor* observer) grib_expression* new_length_expression(grib_context* c, const char* name) { grib_expression_length* e = (grib_expression_length*)grib_context_malloc_clear_persistent(c, sizeof(grib_expression_length)); - e->base.cclass = grib_expression_class_length; - e->name = grib_context_strdup_persistent(c, name); + e->base.cclass = grib_expression_class_length; + e->name = grib_context_strdup_persistent(c, name); return (grib_expression*)e; } diff --git a/src/grib_expression_class_logical_and.cc b/src/grib_expression_class_logical_and.cc index 5cf98db69..902119a5e 100644 --- a/src/grib_expression_class_logical_and.cc +++ b/src/grib_expression_class_logical_and.cc @@ -15,7 +15,6 @@ START_CLASS_DEF CLASS = expression - IMPLEMENTS = init_class IMPLEMENTS = destroy IMPLEMENTS = native_type IMPLEMENTS = evaluate_long @@ -39,18 +38,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_logical_and{ grib_expression base; @@ -65,7 +58,6 @@ static grib_expression_class _grib_expression_class_logical_and = { "logical_and", /* name */ sizeof(grib_expression_logical_and),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -79,10 +71,6 @@ static grib_expression_class _grib_expression_class_logical_and = { grib_expression_class* grib_expression_class_logical_and = &_grib_expression_class_logical_and; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) @@ -94,7 +82,6 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) int ret; grib_expression_logical_and* e = (grib_expression_logical_and*)g; - switch (grib_expression_native_type(h, e->left)) { case GRIB_TYPE_LONG: ret = grib_expression_evaluate_long(h, e->left, &v1); @@ -141,11 +128,8 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) static int evaluate_double(grib_expression* g, grib_handle* h, double* dres) { long lres = 0; - int ret = 0; - - ret = evaluate_long(g, h, &lres); + int ret = evaluate_long(g, h, &lres); *dres = (double)lres; - return ret; } diff --git a/src/grib_expression_class_logical_or.cc b/src/grib_expression_class_logical_or.cc index 75c2a6520..772a73d8a 100644 --- a/src/grib_expression_class_logical_or.cc +++ b/src/grib_expression_class_logical_or.cc @@ -15,7 +15,6 @@ START_CLASS_DEF CLASS = expression - IMPLEMENTS = init_class IMPLEMENTS = destroy IMPLEMENTS = native_type IMPLEMENTS = evaluate_long @@ -39,18 +38,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_logical_or{ grib_expression base; @@ -65,7 +58,6 @@ static grib_expression_class _grib_expression_class_logical_or = { "logical_or", /* name */ sizeof(grib_expression_logical_or),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -79,10 +71,6 @@ static grib_expression_class _grib_expression_class_logical_or = { grib_expression_class* grib_expression_class_logical_or = &_grib_expression_class_logical_or; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) @@ -141,11 +129,8 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) static int evaluate_double(grib_expression* g, grib_handle* h, double* dres) { long lres = 0; - int ret = 0; - - ret = evaluate_long(g, h, &lres); + int ret = evaluate_long(g, h, &lres); *dres = (double)lres; - return ret; } @@ -154,7 +139,7 @@ static void print(grib_context* c, grib_expression* g, grib_handle* f) grib_expression_logical_or* e = (grib_expression_logical_or*)g; printf("("); grib_expression_print(c, e->left, f); - printf(" && "); + printf(" || "); grib_expression_print(c, e->right, f); printf(")"); } diff --git a/src/grib_expression_class_long.cc b/src/grib_expression_class_long.cc index 481e143c8..3b61a83d1 100644 --- a/src/grib_expression_class_long.cc +++ b/src/grib_expression_class_long.cc @@ -37,18 +37,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_long{ grib_expression base; @@ -62,7 +56,6 @@ static grib_expression_class _grib_expression_class_long = { "long", /* name */ sizeof(grib_expression_long),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -76,29 +69,25 @@ static grib_expression_class _grib_expression_class_long = { grib_expression_class* grib_expression_class_long = &_grib_expression_class_long; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) { - grib_expression_long* e = (grib_expression_long*)g; - *lres = e->value; + const grib_expression_long* e = (grib_expression_long*)g; + *lres = e->value; return GRIB_SUCCESS; } static int evaluate_double(grib_expression* g, grib_handle* h, double* dres) { - grib_expression_long* e = (grib_expression_long*)g; - *dres = e->value; + const grib_expression_long* e = (grib_expression_long*)g; + *dres = e->value; return GRIB_SUCCESS; } static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_long* e = (grib_expression_long*)g; + const grib_expression_long* e = (grib_expression_long*)g; printf("long(%ld)", e->value); } @@ -115,8 +104,8 @@ static void add_dependency(grib_expression* g, grib_accessor* observer) grib_expression* new_long_expression(grib_context* c, long value) { grib_expression_long* e = (grib_expression_long*)grib_context_malloc_clear_persistent(c, sizeof(grib_expression_long)); - e->base.cclass = grib_expression_class_long; - e->value = value; + e->base.cclass = grib_expression_class_long; + e->value = value; return (grib_expression*)e; } diff --git a/src/grib_expression_class_string.cc b/src/grib_expression_class_string.cc index 1d6734c4c..79d42e247 100644 --- a/src/grib_expression_class_string.cc +++ b/src/grib_expression_class_string.cc @@ -36,17 +36,11 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_string{ grib_expression base; @@ -60,7 +54,6 @@ static grib_expression_class _grib_expression_class_string = { "string", /* name */ sizeof(grib_expression_string),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -74,22 +67,18 @@ static grib_expression_class _grib_expression_class_string = { grib_expression_class* grib_expression_class_string = &_grib_expression_class_string; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static const char* evaluate_string(grib_expression* g, grib_handle* h, char* buf, size_t* size, int* err) { - grib_expression_string* e = (grib_expression_string*)g; - *err = 0; + const grib_expression_string* e = (grib_expression_string*)g; + *err = 0; return e->value; } static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_string* e = (grib_expression_string*)g; + const grib_expression_string* e = (grib_expression_string*)g; printf("string('%s')", e->value); } diff --git a/src/grib_expression_class_string_compare.cc b/src/grib_expression_class_string_compare.cc index 1c6202b23..421669aca 100644 --- a/src/grib_expression_class_string_compare.cc +++ b/src/grib_expression_class_string_compare.cc @@ -38,18 +38,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_string_compare{ grib_expression base; @@ -64,7 +58,6 @@ static grib_expression_class _grib_expression_class_string_compare = { "string_compare", /* name */ sizeof(grib_expression_string_compare),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -78,10 +71,6 @@ static grib_expression_class _grib_expression_class_string_compare = { grib_expression_class* grib_expression_class_string_compare = &_grib_expression_class_string_compare; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ /* Note: A fast cut-down version of strcmp which does NOT return -1 */ diff --git a/src/grib_expression_class_sub_string.cc b/src/grib_expression_class_sub_string.cc index 0a53638bc..a5a0da732 100644 --- a/src/grib_expression_class_sub_string.cc +++ b/src/grib_expression_class_sub_string.cc @@ -36,17 +36,11 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); typedef struct grib_expression_sub_string{ grib_expression base; @@ -60,7 +54,6 @@ static grib_expression_class _grib_expression_class_sub_string = { "sub_string", /* name */ sizeof(grib_expression_sub_string),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -74,22 +67,18 @@ static grib_expression_class _grib_expression_class_sub_string = { grib_expression_class* grib_expression_class_sub_string = &_grib_expression_class_sub_string; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static const char* evaluate_string(grib_expression* g, grib_handle* h, char* buf, size_t* size, int* err) { - grib_expression_sub_string* e = (grib_expression_sub_string*)g; - *err = 0; + const grib_expression_sub_string* e = (grib_expression_sub_string*)g; + *err = 0; return e->value; } static void print(grib_context* c, grib_expression* g, grib_handle* f) { - grib_expression_sub_string* e = (grib_expression_sub_string*)g; + const grib_expression_sub_string* e = (grib_expression_sub_string*)g; printf("string('%s')", e->value); } diff --git a/src/grib_expression_class_true.cc b/src/grib_expression_class_true.cc index a57ce9c60..6b418cb2c 100644 --- a/src/grib_expression_class_true.cc +++ b/src/grib_expression_class_true.cc @@ -36,18 +36,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_true{ grib_expression base; @@ -60,7 +54,6 @@ static grib_expression_class _grib_expression_class_true = { "true", /* name */ sizeof(grib_expression_true),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -74,10 +67,6 @@ static grib_expression_class _grib_expression_class_true = { grib_expression_class* grib_expression_class_true = &_grib_expression_class_true; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) diff --git a/src/grib_expression_class_unop.cc b/src/grib_expression_class_unop.cc index 2abd4dbc9..6188b4586 100644 --- a/src/grib_expression_class_unop.cc +++ b/src/grib_expression_class_unop.cc @@ -39,18 +39,12 @@ or edit "expression.class" and rerun ./make_class.pl typedef const char* string; /* to keep make_class.pl happy */ - -static void init_class (grib_expression_class*); - -static void destroy(grib_context*,grib_expression* e); - -static void print(grib_context*,grib_expression*,grib_handle*); -static void add_dependency(grib_expression* e, grib_accessor* observer); - -static int native_type(grib_expression*,grib_handle*); - -static int evaluate_long(grib_expression*,grib_handle*,long*); -static int evaluate_double(grib_expression*,grib_handle*,double*); +static void destroy(grib_context*,grib_expression* e); +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static int native_type(grib_expression*,grib_handle*); +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); typedef struct grib_expression_unop{ grib_expression base; @@ -66,7 +60,6 @@ static grib_expression_class _grib_expression_class_unop = { "unop", /* name */ sizeof(grib_expression_unop),/* size of instance */ 0, /* inited */ - &init_class, /* init_class */ 0, /* constructor */ &destroy, /* destructor */ &print, @@ -80,18 +73,13 @@ static grib_expression_class _grib_expression_class_unop = { grib_expression_class* grib_expression_class_unop = &_grib_expression_class_unop; - -static void init_class(grib_expression_class* c) -{ -} /* END_CLASS_IMP */ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) { - int ret; - long v = 0; + long v = 0; grib_expression_unop* e = (grib_expression_unop*)g; - ret = grib_expression_evaluate_long(h, e->exp, &v); + int ret = grib_expression_evaluate_long(h, e->exp, &v); if (ret != GRIB_SUCCESS) return ret; *lres = e->long_func(v); @@ -100,10 +88,9 @@ static int evaluate_long(grib_expression* g, grib_handle* h, long* lres) static int evaluate_double(grib_expression* g, grib_handle* h, double* dres) { - int ret; - double v = 0; + double v = 0; grib_expression_unop* e = (grib_expression_unop*)g; - ret = grib_expression_evaluate_double(h, e->exp, &v); + int ret = grib_expression_evaluate_double(h, e->exp, &v); if (ret != GRIB_SUCCESS) return ret; *dres = e->double_func ? e->double_func(v) : e->long_func(v); diff --git a/src/grib_expression_factory.h b/src/grib_expression_factory.h index 0f5cd83bb..7cacd3ac1 100644 --- a/src/grib_expression_factory.h +++ b/src/grib_expression_factory.h @@ -1,8 +1,6 @@ /* This file is automatically generated by ./make_class.pl, do not edit */ { "accessor", &grib_expression_class_accessor, }, { "binop", &grib_expression_class_binop, }, -{ "column", &grib_expression_class_column, }, -{ "constant", &grib_expression_class_constant, }, { "double", &grib_expression_class_double, }, { "functor", &grib_expression_class_functor, }, { "is_in_dict", &grib_expression_class_is_in_dict, }, diff --git a/src/grib_filepool.cc b/src/grib_filepool.cc index 8d55f3d3d..28606e8c9 100644 --- a/src/grib_filepool.cc +++ b/src/grib_filepool.cc @@ -132,10 +132,10 @@ void grib_file_pool_clean() // return grib_write_file(fh, file->next); // } -grib_file* grib_file_pool_get_files() -{ - return file_pool.first; -} +// grib_file* grib_file_pool_get_files() +// { +// return file_pool.first; +// } // int grib_file_pool_read(grib_context* c, FILE* fh) // { diff --git a/src/grib_handle.cc b/src/grib_handle.cc index 8a7719234..732537f12 100644 --- a/src/grib_handle.cc +++ b/src/grib_handle.cc @@ -10,7 +10,6 @@ /*************************************************************************** * Jean Baptiste Filippi - 01.11.2005 * - * Enrico Fucile * ***************************************************************************/ #include "grib_api_internal.h" @@ -228,7 +227,7 @@ grib_handle* codes_handle_new_from_samples(grib_context* c, const char* name) fprintf(stderr, "ECCODES DEBUG codes_handle_new_from_samples '%s'\n", name); } - g = codes_external_template(c, PRODUCT_ANY, name); + g = codes_external_sample(c, PRODUCT_ANY, name); if (!g) { grib_context_log(c, GRIB_LOG_ERROR, "Unable to load sample file '%s.tmpl'\n" @@ -256,7 +255,7 @@ grib_handle* grib_handle_new_from_samples(grib_context* c, const char* name) fprintf(stderr, "ECCODES DEBUG grib_handle_new_from_samples '%s'\n", name); } - g = codes_external_template(c, PRODUCT_GRIB, name); + g = codes_external_sample(c, PRODUCT_GRIB, name); if (!g) grib_context_log(c, GRIB_LOG_ERROR, "Unable to load GRIB sample file '%s.tmpl'\n" @@ -279,7 +278,7 @@ grib_handle* codes_bufr_handle_new_from_samples(grib_context* c, const char* nam fprintf(stderr, "ECCODES DEBUG bufr_handle_new_from_samples '%s'\n", name); } - g = codes_external_template(c, PRODUCT_BUFR, name); + g = codes_external_sample(c, PRODUCT_BUFR, name); if (!g) { grib_context_log(c, GRIB_LOG_ERROR, "Unable to load BUFR sample file '%s.tmpl'\n" @@ -375,7 +374,7 @@ grib_handle* grib_handle_clone_headers_only(const grib_handle* h) const int sections_to_copy = GRIB_SECTION_PRODUCT | GRIB_SECTION_LOCAL | GRIB_SECTION_GRID; result = grib_util_sections_copy((grib_handle*)h, h_sample, sections_to_copy, &err); if (!result || err) { - grib_context_log(c, GRIB_LOG_ERROR, "Failed to create headers_only clone: Unable to copy sections"); + grib_context_log(c, GRIB_LOG_ERROR, "%s failed: Unable to copy sections (%s)", __func__, grib_get_error_message(err)); grib_handle_delete(h_sample); return NULL; } diff --git a/src/grib_hash_array.cc b/src/grib_hash_array.cc index 54ba4294f..ec556c904 100644 --- a/src/grib_hash_array.cc +++ b/src/grib_hash_array.cc @@ -30,19 +30,19 @@ grib_hash_array_value* grib_integer_hash_array_value_new(grib_context* c, const // return v; // } -void grib_hash_array_value_delete(grib_context* c, grib_hash_array_value* v) -{ - switch (v->type) { - case GRIB_HASH_ARRAY_TYPE_INTEGER: - grib_iarray_delete(v->iarray); - break; - case GRIB_HASH_ARRAY_TYPE_DOUBLE: - grib_darray_delete(c, v->darray); - break; - default: - grib_context_log(c, GRIB_LOG_ERROR, - "wrong type in grib_hash_array_value_delete"); - } - grib_context_free_persistent(c, v->name); - grib_context_free_persistent(c, v); -} +// void grib_hash_array_value_delete(grib_context* c, grib_hash_array_value* v) +// { +// switch (v->type) { +// case GRIB_HASH_ARRAY_TYPE_INTEGER: +// grib_iarray_delete(v->iarray); +// break; +// case GRIB_HASH_ARRAY_TYPE_DOUBLE: +// grib_darray_delete(c, v->darray); +// break; +// default: +// grib_context_log(c, GRIB_LOG_ERROR, +// "wrong type in grib_hash_array_value_delete"); +// } +// grib_context_free_persistent(c, v->name); +// grib_context_free_persistent(c, v); +// } diff --git a/src/grib_hash_keys.cc b/src/grib_hash_keys.cc index 72ea01ba8..ba26dbe03 100644 --- a/src/grib_hash_keys.cc +++ b/src/grib_hash_keys.cc @@ -31,15 +31,15 @@ #include "grib_api_internal.h" -struct grib_keys_hash { char* name; int id;}; +struct grib_keys_hash { const char* name; int id;}; #include -#define TOTAL_KEYWORDS 2515 +#define TOTAL_KEYWORDS 2535 #define MIN_WORD_LENGTH 1 #define MAX_WORD_LENGTH 74 -#define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 35025 -/* maximum key range = 35025, duplicates = 0 */ +#define MIN_HASH_VALUE 5 +#define MAX_HASH_VALUE 31933 +/* maximum key range = 31929, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -49,38 +49,38 @@ inline #endif #endif static unsigned int -hash_keys (const char *str, size_t len) +hash_keys ( const char *str, size_t len) { static const unsigned short asso_values[] = { - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 0, 35026, 35026, 0, 35026, 35026, 234, 2699, - 2224, 1675, 1605, 3094, 675, 1950, 12, 8, 0, 0, - 1, 35026, 35026, 35026, 35026, 1804, 4449, 2653, 255, 2074, - 287, 4792, 2756, 1496, 719, 601, 347, 2199, 596, 311, - 988, 96, 321, 172, 102, 5477, 1495, 4148, 2234, 4002, - 2, 0, 2, 35026, 35026, 2631, 35026, 5, 560, 46, - 3, 1, 131, 91, 130, 7, 2778, 3209, 35, 3, - 0, 20, 27, 1086, 3, 7, 2, 85, 267, 184, - 1169, 137, 1006, 70, 1045, 0, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, - 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026, 35026 + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 4, 31934, 31934, 3, 31934, 31934, 128, 2530, + 2404, 2966, 1876, 4070, 2455, 1706, 29, 8, 3, 2, + 2, 31934, 31934, 31934, 31934, 1215, 5157, 2523, 271, 2023, + 345, 5101, 4026, 1640, 545, 118, 46, 2382, 974, 289, + 1046, 28, 528, 161, 96, 4953, 1277, 3682, 373, 5709, + 2, 3, 2, 31934, 31934, 1817, 31934, 2, 372, 30, + 5, 3, 92, 103, 97, 8, 2721, 3959, 75, 3, + 2, 23, 18, 1060, 5, 14, 4, 48, 321, 249, + 1467, 224, 572, 5, 1867, 2, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, + 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934, 31934 }; - unsigned int hval = len; + unsigned int hval = len; switch (hval) { @@ -164,1164 +164,1288 @@ hash_keys (const char *str, size_t len) static const unsigned char lengthtable[] = { - 0, 1, 0, 3, 0, 1, 2, 1, 2, 2, 2, 0, 2, 3, - 4, 2, 4, 0, 4, 0, 5, 0, 0, 0, 4, 3, 0, 0, - 5, 4, 6, 0, 0, 0, 7, 5, 0, 0, 4, 8, 0, 0, - 0, 0, 6, 3, 0, 7, 0, 5, 7, 5, 0, 0, 0, 0, - 9, 9, 4, 0, 6, 9, 9, 0, 0, 0, 8, 0, 4, 0, - 7, 7, 10, 0, 10, 4, 6, 0, 0, 7, 0, 0, 5, 0, - 0, 0, 6, 0, 10, 0, 7, 8, 0, 0, 0, 0, 4, 10, - 9, 2, 0, 0, 5, 0, 5, 6, 5, 6, 0, 10, 0, 4, - 5, 5, 7, 8, 0, 0, 7, 0, 0, 6, 10, 6, 0, 7, - 0, 9, 0, 0, 0, 0, 0, 8, 6, 0, 0, 8, 0, 0, - 10, 0, 0, 5, 0, 0, 0, 5, 3, 8, 0, 10, 0, 4, - 7, 0, 0, 0, 10, 0, 5, 0, 0, 9, 0, 0, 6, 0, - 6, 0, 0, 0, 4, 0, 3, 10, 5, 0, 0, 4, 0, 5, - 15, 1, 0, 5, 0, 0, 0, 9, 10, 4, 0, 13, 0, 7, - 0, 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 9, 0, 0, 10, 0, 0, 10, 0, 8, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 3, 14, 0, 0, 0, 7, 7, 0, 8, - 5, 0, 7, 0, 0, 0, 10, 4, 0, 0, 0, 8, 10, 0, - 0, 0, 9, 8, 0, 9, 0, 7, 0, 0, 0, 8, 9, 0, - 0, 0, 10, 0, 4, 2, 0, 0, 11, 2, 0, 0, 0, 2, - 0, 5, 6, 0, 0, 3, 0, 8, 0, 0, 5, 8, 0, 7, - 8, 0, 11, 8, 9, 0, 6, 0, 0, 0, 0, 0, 0, 8, - 2, 0, 0, 6, 7, 8, 10, 0, 10, 0, 10, 0, 5, 0, - 0, 13, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 10, 0, - 0, 11, 0, 0, 0, 0, 6, 9, 0, 0, 8, 9, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 10, 0, - 10, 8, 5, 0, 0, 0, 0, 0, 0, 5, 0, 0, 12, 0, - 0, 5, 8, 7, 0, 10, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 14, 6, 8, 14, 0, 0, - 0, 0, 0, 3, 9, 0, 0, 6, 9, 11, 0, 8, 0, 0, - 10, 0, 0, 14, 3, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 10, 0, 9, 0, - 2, 0, 0, 6, 0, 0, 0, 6, 0, 3, 6, 8, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 11, 0, 0, 13, 0, - 17, 0, 6, 14, 12, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 5, 18, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, - 8, 15, 0, 10, 0, 10, 24, 8, 0, 0, 0, 0, 0, 2, - 8, 0, 0, 0, 0, 0, 17, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 10, 0, 13, 0, 10, 0, 0, 0, 13, - 11, 0, 0, 2, 0, 0, 0, 11, 14, 0, 0, 0, 10, 3, - 4, 4, 0, 0, 0, 0, 12, 14, 0, 13, 0, 12, 0, 7, - 0, 14, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 2, 0, 0, 10, 15, 19, 0, 0, 2, 20, 0, 0, - 9, 0, 8, 0, 5, 10, 14, 2, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 13, 0, 0, 0, 12, 0, - 13, 0, 17, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 10, 6, 0, 11, 0, 0, 0, 0, 0, 0, 3, 0, - 10, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 8, 0, 13, - 0, 0, 17, 0, 0, 13, 0, 0, 12, 0, 0, 14, 0, 12, - 12, 0, 0, 0, 0, 0, 0, 18, 0, 3, 0, 0, 0, 9, - 0, 0, 0, 9, 8, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 19, 9, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 13, 0, - 12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 14, 17, 0, 13, - 0, 10, 14, 23, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 9, 12, 0, 0, 0, 12, 0, - 0, 15, 0, 6, 0, 6, 15, 0, 0, 0, 0, 0, 15, 0, - 0, 23, 0, 0, 2, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 0, 0, 22, 25, 0, 13, 11, 0, 15, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, - 10, 0, 0, 0, 2, 0, 13, 10, 0, 0, 0, 17, 0, 0, - 0, 0, 14, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 12, 17, 0, 16, 13, 0, 3, 0, 0, 0, 14, - 0, 14, 0, 0, 0, 0, 12, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 10, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 3, 19, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 22, 13, 0, 0, 0, 0, 0, - 0, 27, 0, 11, 0, 21, 0, 0, 22, 0, 0, 0, 0, 18, - 0, 16, 0, 3, 0, 0, 0, 0, 0, 0, 0, 39, 40, 0, - 11, 0, 0, 0, 3, 13, 0, 0, 18, 0, 0, 0, 0, 18, - 15, 0, 0, 0, 0, 0, 0, 37, 0, 0, 22, 14, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 5, - 12, 13, 8, 10, 4, 0, 0, 0, 14, 0, 0, 0, 8, 15, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 0, 17, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 18, 15, 0, - 19, 19, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 15, 0, - 0, 0, 14, 0, 17, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 10, 0, 15, 0, 15, 0, 0, - 0, 25, 0, 1, 0, 0, 0, 0, 0, 15, 0, 0, 0, 1, - 8, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 31, 13, - 0, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, 8, 13, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 16, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 1, 2, 1, 0, 3, 2, 0, + 2, 2, 2, 4, 3, 4, 0, 4, 0, 0, 0, 4, 2, 0, + 0, 0, 0, 5, 0, 0, 3, 8, 0, 0, 5, 0, 6, 0, + 4, 5, 5, 7, 0, 0, 0, 0, 5, 6, 3, 0, 4, 0, + 6, 0, 4, 9, 7, 4, 7, 0, 0, 0, 7, 4, 4, 5, + 9, 0, 0, 7, 0, 0, 0, 6, 0, 9, 0, 0, 5, 10, + 0, 7, 9, 3, 6, 6, 10, 0, 0, 7, 2, 5, 10, 4, + 0, 9, 0, 0, 6, 8, 0, 0, 6, 10, 3, 3, 0, 0, + 10, 0, 8, 0, 5, 0, 4, 5, 5, 0, 9, 5, 7, 0, + 10, 3, 7, 0, 4, 0, 7, 0, 8, 8, 0, 0, 9, 0, + 0, 6, 5, 4, 7, 10, 6, 0, 0, 0, 8, 0, 0, 10, + 5, 0, 0, 6, 9, 0, 8, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 2, 0, 0, 9, 0, 10, 0, 7, 0, 0, 0, 0, + 4, 0, 10, 4, 9, 0, 5, 5, 0, 6, 0, 0, 5, 0, + 0, 8, 4, 0, 15, 9, 0, 7, 10, 0, 11, 1, 8, 0, + 0, 0, 0, 0, 0, 10, 0, 10, 6, 10, 0, 7, 6, 0, + 5, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 0, 8, 1, + 6, 10, 10, 0, 9, 4, 8, 0, 0, 17, 0, 0, 13, 12, + 0, 7, 0, 10, 4, 0, 0, 10, 0, 0, 0, 0, 0, 8, + 0, 11, 0, 0, 0, 6, 0, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 5, 0, 0, 0, 2, 2, 9, 0, 7, + 0, 0, 0, 0, 0, 5, 0, 0, 3, 0, 8, 5, 0, 0, + 0, 10, 6, 2, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 9, 0, 9, 0, 11, 0, 0, 0, 6, + 0, 9, 0, 0, 0, 0, 9, 0, 8, 10, 0, 0, 0, 6, + 8, 12, 0, 0, 0, 7, 12, 0, 0, 20, 0, 0, 0, 0, + 14, 8, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 0, + 0, 4, 0, 5, 0, 9, 10, 7, 13, 0, 0, 0, 4, 8, + 10, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 12, 0, 10, 7, 2, 10, 8, 0, 6, 0, 0, 0, 13, + 2, 2, 0, 8, 14, 0, 0, 0, 0, 0, 6, 6, 0, 0, + 0, 0, 19, 0, 10, 0, 10, 0, 2, 0, 6, 0, 0, 0, + 0, 7, 0, 0, 9, 0, 0, 2, 0, 0, 3, 0, 0, 18, + 0, 0, 0, 11, 0, 0, 9, 0, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, + 13, 0, 24, 0, 14, 0, 2, 9, 0, 0, 11, 0, 8, 0, + 10, 0, 0, 0, 0, 0, 0, 6, 5, 0, 0, 8, 12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, + 3, 0, 0, 0, 11, 0, 14, 0, 0, 0, 17, 11, 11, 3, + 0, 0, 15, 0, 0, 0, 10, 16, 0, 0, 9, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 7, 0, 0, 0, 0, 12, 0, + 0, 0, 8, 0, 0, 11, 14, 0, 11, 0, 0, 0, 10, 0, + 0, 13, 0, 0, 0, 3, 11, 0, 0, 12, 14, 0, 0, 0, + 0, 8, 0, 20, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 8, 11, 15, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 4, 0, 17, 0, 15, 0, 5, 0, 17, 0, 0, 0, 0, 13, + 0, 0, 0, 0, 0, 8, 17, 0, 17, 23, 0, 0, 10, 0, + 7, 8, 14, 0, 2, 18, 0, 0, 12, 0, 7, 0, 0, 0, + 0, 0, 9, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 14, + 0, 19, 0, 9, 13, 0, 0, 13, 0, 13, 12, 0, 0, 0, + 23, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 14, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, + 18, 14, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, + 13, 0, 12, 0, 0, 0, 15, 0, 0, 8, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 17, 19, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 17, 0, 0, 24, 0, 0, 0, + 11, 0, 0, 0, 19, 0, 9, 15, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 23, 9, 22, 0, 8, 10, 0, 0, 0, 0, 0, + 12, 0, 9, 0, 0, 7, 0, 14, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 25, 0, 12, 0, + 0, 2, 14, 0, 0, 0, 0, 0, 0, 12, 0, 9, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 7, 0, 0, - 10, 11, 21, 11, 2, 0, 9, 0, 16, 24, 0, 0, 0, 16, - 30, 0, 13, 0, 0, 0, 0, 48, 0, 0, 27, 0, 0, 0, - 11, 0, 0, 0, 15, 0, 16, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, - 0, 24, 9, 0, 23, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 15, 0, 0, 0, 0, 0, 14, 0, 0, 0, 14, 0, + 0, 11, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 27, 2, 0, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 10, 19, + 0, 14, 0, 0, 5, 37, 0, 0, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 11, 0, 0, 0, 18, + 0, 0, 0, 0, 0, 0, 10, 0, 0, 13, 0, 14, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, + 0, 0, 12, 0, 2, 17, 22, 9, 0, 0, 0, 12, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 18, 0, 18, 1, + 10, 0, 9, 0, 12, 10, 0, 0, 0, 15, 0, 9, 0, 0, + 0, 3, 0, 0, 0, 15, 11, 6, 8, 21, 21, 0, 0, 0, + 0, 18, 0, 0, 14, 0, 0, 0, 3, 0, 8, 10, 0, 0, + 22, 20, 0, 9, 0, 9, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 8, 39, 40, 0, 0, 0, 2, 3, + 0, 0, 0, 0, 21, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 13, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 30, 0, 8, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 15, 0, 10, 0, 0, 0, 0, 21, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 20, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, + 0, 0, 10, 16, 0, 0, 0, 12, 0, 0, 0, 0, 16, 12, + 0, 0, 14, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 18, 0, 11, 0, 0, 0, 0, 0, 0, 0, 13, 0, 19, + 0, 0, 0, 21, 0, 0, 0, 0, 13, 0, 0, 6, 0, 0, + 11, 0, 0, 0, 12, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 10, 13, 0, 0, 0, 0, 0, 13, 0, 21, 0, 15, 0, 0, + 0, 30, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 16, 0, + 0, 0, 24, 0, 23, 0, 14, 0, 11, 0, 0, 15, 0, 0, + 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 0, 0, 13, + 0, 0, 0, 0, 48, 8, 0, 0, 0, 0, 2, 15, 30, 30, + 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 15, 27, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 10, 3, + 10, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 16, 12, 0, 0, 0, 0, 0, 31, 16, + 0, 0, 0, 0, 0, 0, 0, 31, 12, 0, 0, 0, 0, 0, + 0, 16, 9, 0, 30, 0, 23, 14, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 12, 0, 23, 0, + 0, 15, 5, 0, 7, 20, 0, 0, 44, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 13, 11, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, 0, 11, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 31, 0, 1, 0, 8, - 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 14, 0, 0, 18, - 8, 0, 12, 16, 0, 0, 21, 0, 0, 0, 0, 0, 18, 44, - 12, 0, 0, 0, 0, 0, 0, 6, 0, 0, 11, 0, 0, 6, - 0, 0, 0, 0, 16, 0, 26, 0, 0, 30, 0, 23, 21, 25, - 0, 0, 9, 0, 23, 0, 0, 0, 11, 0, 42, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 6, - 30, 0, 0, 0, 0, 9, 23, 11, 0, 0, 0, 5, 0, 0, - 0, 57, 19, 0, 0, 0, 0, 0, 0, 11, 13, 14, 7, 0, - 0, 0, 19, 12, 0, 0, 0, 10, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 10, 22, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 27, 0, 0, 0, 16, 0, 0, 0, 24, 24, - 0, 0, 13, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 15, 9, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 15, - 0, 18, 18, 0, 0, 16, 0, 0, 10, 0, 18, 17, 0, 0, - 0, 0, 22, 0, 39, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 30, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 18, 0, 0, 0, 0, 0, 0, 17, 18, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 13, 13, 0, 0, 19, - 30, 0, 19, 0, 15, 0, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 24, 32, 14, 0, 13, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 14, 0, 26, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, - 21, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 19, 13, 0, 0, 0, 0, 0, 31, 6, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 33, 0, 22, 0, 0, 0, 32, 0, 0, - 0, 0, 13, 0, 0, 10, 19, 0, 0, 0, 14, 14, 0, 0, - 0, 0, 26, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 15, 13, 0, - 0, 11, 0, 0, 0, 6, 15, 0, 0, 0, 0, 0, 9, 0, - 16, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, - 16, 14, 0, 1, 14, 11, 0, 0, 0, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 0, 22, 0, 20, 31, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 9, 14, - 0, 15, 0, 0, 0, 0, 7, 0, 0, 0, 23, 13, 0, 0, - 0, 12, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 18, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 35, 11, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 32, 0, 19, 14, 0, 15, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 25, 0, 0, - 0, 25, 0, 0, 12, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 33, 0, - 27, 13, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 19, 0, - 0, 0, 0, 0, 11, 10, 12, 0, 0, 16, 0, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 28, 0, 10, 0, 10, 0, 0, 0, 0, 23, 0, 23, - 20, 0, 19, 0, 15, 11, 13, 0, 15, 0, 0, 0, 0, 0, - 0, 19, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 7, 0, 0, 17, 2, 0, 0, 0, 0, 0, - 27, 0, 18, 0, 27, 0, 0, 0, 2, 0, 0, 0, 28, 9, - 0, 15, 0, 25, 9, 0, 0, 0, 0, 25, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 25, 0, - 14, 0, 0, 0, 0, 2, 0, 0, 0, 32, 9, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 17, 0, 11, 16, 23, 0, 0, 0, - 16, 11, 19, 16, 39, 27, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 12, 0, 0, 0, 0, 17, 17, 0, 0, 0, 20, 0, 15, - 15, 20, 15, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 12, 42, 15, 10, 0, - 0, 0, 13, 0, 0, 10, 0, 0, 0, 13, 0, 0, 0, 15, - 13, 21, 0, 0, 20, 15, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 18, 0, - 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 0, 0, 11, 18, 0, 0, 0, 0, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 22, 0, 0, 2, 14, 0, - 0, 0, 24, 0, 0, 25, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 2, 17, - 11, 9, 0, 12, 0, 0, 21, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 12, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 22, - 10, 13, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, - 18, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 30, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 17, 0, - 0, 0, 28, 0, 0, 11, 0, 0, 0, 0, 0, 22, 0, 2, - 0, 0, 0, 23, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 10, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 12, 0, 23, - 14, 16, 0, 0, 3, 0, 0, 0, 0, 0, 19, 9, 0, 0, - 0, 23, 0, 9, 0, 12, 0, 0, 13, 0, 0, 8, 0, 31, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 28, 0, 0, - 0, 3, 14, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, - 0, 16, 23, 0, 0, 0, 12, 3, 0, 13, 21, 0, 0, 0, - 0, 30, 0, 23, 0, 0, 25, 0, 16, 0, 20, 0, 13, 10, - 10, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 12, 0, 13, 2, 0, 0, 0, 0, - 0, 10, 0, 0, 9, 0, 0, 18, 0, 0, 10, 12, 21, 0, - 0, 0, 0, 0, 0, 28, 21, 0, 0, 21, 0, 0, 0, 0, - 12, 0, 8, 0, 0, 9, 0, 0, 2, 0, 22, 0, 10, 15, - 0, 0, 34, 10, 0, 0, 0, 0, 0, 20, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 11, 0, 18, 0, 38, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 15, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 12, 0, 18, 37, 0, 12, 13, 0, - 17, 12, 0, 0, 0, 22, 10, 0, 0, 16, 0, 16, 17, 0, - 10, 3, 0, 0, 18, 29, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 13, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 9, 0, 22, 0, 0, 3, 11, - 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 14, 0, 0, 0, 0, 31, 0, - 9, 0, 0, 10, 0, 0, 0, 0, 12, 0, 0, 16, 0, 0, - 0, 15, 0, 0, 0, 20, 0, 16, 0, 0, 0, 23, 0, 0, - 3, 0, 0, 20, 17, 0, 11, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 0, 0, 0, 0, 28, 32, 0, 0, 17, 19, 22, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 27, 20, 0, 0, 0, 0, - 0, 15, 0, 0, 11, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 24, 13, - 0, 0, 0, 16, 13, 0, 0, 0, 0, 0, 36, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, - 0, 0, 0, 26, 0, 0, 12, 19, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 6, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 17, 0, 14, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 30, 0, 0, 0, 0, - 7, 0, 0, 15, 0, 0, 0, 0, 19, 0, 0, 0, 22, 16, - 9, 0, 0, 0, 15, 0, 0, 19, 22, 0, 0, 8, 0, 0, - 0, 4, 0, 0, 22, 0, 0, 0, 0, 17, 0, 0, 0, 31, - 0, 0, 0, 15, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 0, 0, 15, 2, 0, 0, 8, 16, 0, 0, 0, - 3, 0, 16, 0, 22, 0, 0, 18, 11, 0, 0, 11, 0, 23, - 0, 0, 0, 0, 0, 7, 0, 17, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 25, 0, 21, 0, 0, 0, 0, 6, 0, 0, - 12, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 0, 0, 0, - 21, 0, 0, 16, 0, 22, 0, 0, 18, 5, 11, 0, 0, 0, - 0, 8, 0, 23, 0, 0, 0, 0, 0, 0, 28, 15, 0, 0, - 0, 15, 16, 20, 0, 0, 20, 0, 23, 9, 0, 0, 0, 0, - 22, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 24, 0, 0, 0, 0, 28, 0, 9, 0, 0, 0, - 0, 18, 0, 0, 0, 7, 0, 0, 0, 16, 0, 0, 0, 0, - 15, 0, 0, 34, 0, 18, 23, 10, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 11, 25, 0, - 0, 0, 16, 0, 15, 0, 15, 31, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 30, 0, 34, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 21, - 0, 15, 0, 0, 2, 4, 0, 23, 0, 0, 40, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 37, 0, 35, 0, 0, 0, 13, 0, 0, - 0, 0, 29, 0, 14, 9, 14, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 20, 0, 0, 38, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 18, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 23, 0, 0, 12, 10, - 37, 0, 0, 0, 11, 15, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 25, 0, + 0, 0, 0, 0, 11, 0, 30, 0, 0, 10, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 17, 14, 42, 20, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 21, 0, 14, 17, 0, 24, 14, - 0, 15, 0, 0, 0, 0, 0, 48, 0, 25, 15, 0, 30, 11, - 0, 0, 0, 0, 0, 0, 14, 20, 16, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 24, 0, 0, 24, 0, 13, 0, 0, - 27, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 17, 0, 36, - 12, 0, 0, 0, 0, 11, 0, 0, 13, 14, 0, 0, 23, 24, - 15, 0, 0, 20, 33, 0, 0, 14, 0, 20, 0, 31, 0, 12, - 0, 0, 14, 0, 16, 0, 15, 0, 0, 0, 15, 0, 0, 0, - 9, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, - 27, 0, 0, 0, 0, 15, 0, 0, 0, 14, 0, 14, 0, 0, - 0, 17, 0, 0, 0, 13, 0, 0, 29, 0, 0, 0, 0, 31, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 0, 0, 19, - 0, 13, 0, 0, 0, 0, 0, 0, 35, 21, 47, 0, 10, 0, - 0, 8, 13, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 19, 0, 37, 19, 0, 0, 0, 24, 0, 14, 0, - 0, 0, 23, 0, 31, 15, 0, 26, 0, 0, 15, 8, 0, 0, - 18, 0, 0, 0, 16, 0, 15, 12, 0, 0, 11, 0, 2, 0, - 0, 0, 0, 0, 19, 0, 0, 23, 0, 0, 0, 0, 2, 0, - 0, 0, 33, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 9, - 25, 0, 32, 0, 0, 0, 18, 25, 0, 15, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 0, 14, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 17, - 0, 16, 10, 0, 0, 0, 0, 0, 0, 12, 13, 25, 0, 0, - 13, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 12, 0, 0, - 20, 0, 0, 0, 28, 16, 19, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 15, 12, 15, 9, 12, 0, 0, 15, 0, 0, 0, - 0, 18, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 21, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 14, 0, 10, 0, 0, 22, - 0, 0, 0, 11, 0, 15, 33, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 23, 0, 0, 0, 14, 22, 18, 0, 18, 0, - 0, 14, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 0, 10, 0, 0, 0, 29, 0, 15, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 26, 0, 0, 0, 16, 0, 0, 0, 0, 10, 25, 19, 0, - 0, 0, 35, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 13, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 0, 1, 21, 0, 22, 14, 0, 0, 25, 0, 0, 0, - 0, 14, 0, 0, 21, 12, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 35, 24, 19, 31, 0, 0, 0, 0, 0, 0, 0, 26, 22, - 0, 0, 0, 22, 0, 0, 16, 0, 0, 0, 17, 0, 2, 29, - 0, 0, 0, 0, 0, 0, 26, 0, 15, 0, 22, 11, 0, 14, - 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, - 27, 0, 17, 15, 23, 3, 0, 0, 14, 18, 2, 13, 0, 25, - 0, 0, 0, 6, 0, 0, 0, 0, 32, 0, 0, 14, 0, 0, - 23, 0, 0, 0, 29, 16, 0, 18, 0, 11, 0, 11, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 25, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 27, 0, 0, 26, 0, 30, 11, 14, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 38, 0, 0, 0, 14, 0, 0, - 0, 14, 0, 18, 0, 14, 0, 9, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 31, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 20, 0, 0, 20, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 23, - 0, 0, 20, 17, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 0, 0, 16, 0, 19, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 11, 15, 0, 6, 11, 13, 15, 22, - 0, 0, 13, 0, 0, 28, 0, 0, 0, 15, 0, 0, 0, 13, - 27, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 30, 35, - 15, 0, 0, 0, 0, 0, 0, 0, 13, 0, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 29, - 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 19, 13, 0, 0, - 12, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 3, 0, 14, 0, 4, 0, 0, 0, 0, 12, 0, 17, 6, - 0, 0, 3, 21, 0, 0, 4, 0, 0, 21, 15, 0, 0, 0, - 33, 0, 0, 0, 8, 0, 0, 0, 9, 12, 22, 0, 0, 11, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 0, 27, 0, 0, 24, 0, 0, 14, 0, 11, 0, 0, 11, + 0, 0, 0, 0, 0, 0, 26, 0, 11, 8, 0, 0, 0, 0, + 21, 0, 0, 17, 15, 13, 0, 0, 0, 23, 0, 25, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 16, 13, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 34, 0, - 12, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 18, 15, 15, 0, 0, 0, 14, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 0, 33, 18, 0, 0, 0, 16, 15, 15, 0, - 0, 0, 0, 28, 0, 32, 42, 0, 0, 0, 0, 0, 0, 0, - 0, 35, 20, 0, 15, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 14, 23, 0, 0, 0, 37, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 30, 11, 0, 0, 26, 24, - 0, 0, 18, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 8, 0, 0, 15, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 0, 0, 22, 42, 0, 0, 14, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 28, 15, 0, 0, 0, 0, 0, 13, 0, 0, 0, 22, 15, 0, - 0, 0, 0, 23, 46, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 17, 0, + 0, 0, 13, 16, 0, 6, 0, 7, 0, 19, 6, 9, 0, 16, + 12, 0, 0, 0, 0, 7, 9, 0, 0, 26, 0, 0, 0, 0, + 0, 23, 0, 0, 0, 0, 10, 0, 0, 57, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 30, 0, 23, + 0, 0, 3, 0, 0, 19, 0, 0, 14, 32, 0, 0, 42, 18, + 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 8, 11, 13, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 18, 0, 34, 0, 22, + 0, 15, 0, 19, 15, 0, 14, 13, 15, 0, 0, 0, 13, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 11, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 0, 6, 0, 11, 0, 12, 0, + 0, 0, 0, 0, 14, 0, 0, 22, 0, 0, 0, 0, 18, 10, + 14, 31, 32, 0, 13, 6, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 20, 13, 0, 0, 0, 0, 0, 26, 35, 0, 12, + 0, 0, 14, 0, 0, 0, 15, 0, 31, 0, 0, 0, 0, 0, + 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 20, 0, 8, 0, 0, 0, 15, 0, + 0, 0, 11, 0, 23, 0, 0, 0, 0, 0, 29, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 31, 0, 15, 0, 7, 0, 11, 0, - 0, 18, 18, 0, 0, 3, 10, 0, 0, 29, 14, 0, 19, 0, - 0, 0, 33, 27, 0, 19, 0, 0, 0, 0, 0, 0, 37, 0, - 17, 0, 15, 0, 0, 0, 0, 12, 0, 0, 0, 0, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 13, 21, 0, 0, 0, 0, 0, - 0, 18, 0, 11, 0, 50, 0, 12, 12, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 22, 0, 12, 0, 12, 15, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, - 15, 0, 0, 0, 0, 0, 27, 0, 0, 0, 15, 0, 0, 24, - 0, 0, 8, 0, 13, 43, 0, 0, 22, 31, 0, 26, 33, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 34, 0, 11, 10, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 27, 16, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 20, 32, 23, 0, 0, 29, 0, - 0, 8, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 32, 8, 0, 14, 0, 0, 23, 0, 18, 0, 0, 16, 0, - 43, 0, 30, 0, 0, 0, 27, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 19, 0, 9, 0, 0, 11, 0, 0, 0, 0, 0, 24, 0, 32, - 0, 15, 13, 0, 0, 15, 0, 0, 0, 0, 12, 0, 16, 0, - 0, 0, 27, 0, 11, 0, 7, 0, 0, 0, 19, 0, 0, 0, - 12, 35, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 0, 14, 0, 31, 0, 0, 0, 30, 25, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 14, 0, 0, 0, 19, 0, 0, 0, 21, - 0, 0, 0, 0, 0, 0, 31, 16, 0, 0, 0, 0, 0, 23, - 0, 0, 0, 0, 0, 0, 32, 0, 9, 9, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 9, 0, 32, 0, 0, 35, 11, 0, 0, - 24, 0, 43, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 21, 0, 0, 0, 0, - 14, 25, 0, 0, 14, 0, 0, 0, 0, 0, 16, 0, 0, 3, - 0, 0, 0, 4, 0, 0, 0, 0, 30, 0, 0, 6, 0, 0, - 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 22, 15, 18, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 2, 0, 18, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 12, 16, 14, 0, 0, 0, 73, 74, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 15, 22, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 18, 13, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 14, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 16, - 14, 0, 0, 26, 0, 0, 0, 0, 0, 0, 23, 10, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 19, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 9, 0, 0, - 8, 0, 28, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 22, 0, 0, 0, 0, 15, 0, 0, 18, 24, 0, 0, 6, 0, - 13, 28, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 12, 28, 0, 0, 0, 0, 23, - 12, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 0, 0, 6, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 0, 0, 0, 0, 44, 2, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 16, 0, 11, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 2, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 25, 0, 0, 13, - 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 11, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 38, 20, 13, 0, 0, 0, 31, 0, 14, 0, 0, - 0, 0, 0, 10, 0, 0, 28, 15, 0, 0, 0, 12, 0, 0, - 0, 0, 14, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 3, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 25, 0, 0, 0, 0, 27, 15, 10, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 15, 0, - 0, 0, 0, 18, 0, 12, 0, 21, 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 21, 0, 38, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 0, 0, 27, 0, 0, 0, 0, 18, 0, 0, - 0, 0, 23, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 0, 31, 0, 26, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 15, 0, 0, 0, 14, 0, 0, 28, 0, 0, 0, 4, 0, 11, - 0, 0, 36, 0, 0, 0, 0, 30, 0, 0, 0, 18, 0, 0, - 30, 0, 0, 0, 16, 0, 0, 0, 0, 0, 28, 11, 14, 29, - 0, 26, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 26, 0, 13, - 0, 0, 0, 15, 0, 0, 0, 30, 0, 0, 0, 14, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 37, - 0, 31, 0, 0, 0, 0, 24, 6, 0, 11, 0, 0, 0, 23, - 0, 0, 0, 0, 0, 0, 15, 0, 8, 0, 28, 25, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 19, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 20, 0, 19, 0, 0, 0, 0, 0, 0, 43, 0, 24, - 14, 0, 0, 0, 0, 0, 2, 0, 19, 0, 7, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 19, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 24, 37, 0, 0, 0, - 0, 0, 32, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0, 13, - 0, 13, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 24, 0, 0, 10, 0, 0, - 18, 36, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 0, 11, 12, 1, 0, 0, 0, 13, 0, 39, 0, 0, 0, 18, + 0, 22, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 29, 0, + 0, 9, 0, 13, 0, 0, 0, 0, 12, 10, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 19, + 0, 0, 3, 0, 0, 26, 0, 0, 0, 2, 0, 0, 9, 0, + 0, 0, 23, 0, 0, 18, 0, 0, 0, 14, 0, 0, 0, 13, + 15, 0, 2, 0, 0, 0, 0, 0, 26, 8, 0, 16, 0, 0, + 0, 0, 0, 19, 0, 25, 0, 0, 0, 0, 0, 10, 0, 0, + 27, 0, 0, 10, 9, 0, 13, 27, 10, 0, 10, 10, 25, 0, + 9, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 1, 32, 0, 5, 10, 12, 9, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 23, - 0, 0, 0, 0, 0, 0, 43, 0, 5, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 18, 14, 0, 0, 0, - 30, 0, 0, 0, 0, 16, 0, 0, 0, 27, 0, 0, 10, 0, - 8, 0, 0, 0, 19, 0, 0, 23, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 11, 0, 0, 0, 0, 23, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 26, 19, 0, 18, 0, 0, 0, 35, - 0, 14, 0, 0, 40, 0, 0, 0, 0, 0, 0, 22, 11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 23, 0, - 0, 0, 13, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 32, 0, 19, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 26, 29, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 14, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 18, 0, 36, 0, 0, 33, 0, 0, 0, 0, 28, - 18, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 17, 0, 23, 0, 0, 11, 0, 0, 0, 0, 11, 23, 0, 0, - 0, 0, 0, 17, 16, 0, 15, 16, 0, 29, 0, 0, 0, 0, - 0, 14, 0, 0, 14, 0, 0, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 15, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 22, 0, 0, - 0, 0, 0, 0, 14, 72, 39, 0, 0, 0, 29, 0, 0, 0, - 0, 28, 0, 0, 0, 35, 15, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 15, 29, 23, 29, 0, - 0, 0, 0, 9, 31, 0, 0, 0, 0, 14, 0, 0, 0, 21, - 24, 10, 22, 0, 0, 0, 11, 29, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 26, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 10, 0, 22, 0, 0, 0, + 14, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 31, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 28, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 14, 0, 30, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 16, - 24, 0, 24, 0, 0, 0, 22, 0, 0, 0, 0, 0, 26, 0, + 0, 22, 0, 18, 0, 19, 0, 0, 0, 0, 0, 10, 9, 0, + 0, 0, 12, 13, 15, 0, 0, 0, 0, 0, 0, 0, 23, 18, + 0, 0, 15, 0, 0, 0, 30, 0, 0, 0, 0, 25, 0, 0, + 23, 0, 17, 0, 18, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 9, 12, 0, 12, 0, 0, 0, 0, 21, 3, 20, + 0, 0, 0, 0, 0, 25, 10, 33, 0, 0, 10, 0, 0, 0, + 16, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 23, 0, + 0, 15, 12, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, + 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 26, 0, 28, 0, 19, 0, 0, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 13, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 16, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 27, 14, 22, 0, 0, 0, - 10, 0, 0, 28, 0, 0, 15, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 25, + 35, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 15, 0, 10, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 23, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 35, 0, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 23, 0, 14, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 21, 0, 0, 21, 0, 0, 16, + 0, 29, 11, 0, 0, 0, 0, 0, 22, 0, 0, 10, 0, 27, + 0, 24, 0, 0, 0, 0, 11, 0, 0, 0, 0, 21, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 18, + 0, 13, 10, 0, 0, 22, 25, 32, 0, 9, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 22, 13, 0, 10, 0, 0, 28, 10, 0, + 0, 33, 38, 0, 23, 13, 0, 0, 0, 30, 0, 31, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, + 0, 27, 0, 0, 22, 0, 9, 11, 16, 0, 0, 0, 17, 42, + 0, 0, 0, 0, 19, 0, 10, 0, 0, 0, 0, 0, 16, 0, + 0, 15, 17, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 13, 10, 6, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 18, 11, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 34, 0, 0, 0, 36, 0, 0, 0, 0, 24, 0, 0, 0, 18, + 0, 9, 0, 13, 0, 0, 0, 17, 0, 24, 0, 0, 0, 31, + 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 23, 0, 0, + 14, 18, 16, 0, 2, 0, 0, 11, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, + 14, 0, 0, 0, 0, 0, 13, 0, 28, 0, 0, 0, 0, 9, + 0, 0, 11, 0, 0, 16, 0, 39, 0, 0, 0, 0, 0, 12, + 0, 0, 13, 15, 0, 0, 0, 15, 0, 0, 0, 12, 0, 31, + 0, 24, 20, 0, 12, 0, 15, 0, 10, 0, 0, 0, 0, 30, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 38, + 42, 0, 18, 0, 21, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 13, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 14, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 11, + 30, 11, 0, 0, 16, 0, 16, 0, 19, 13, 26, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 0, 33, 25, 0, 0, 0, 19, - 0, 0, 0, 0, 0, 36, 0, 13, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 29, 0, + 0, 0, 17, 18, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 15, 0, 15, 0, 0, 16, 0, 0, 0, 22, + 0, 15, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 18, 2, 3, 0, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 0, 0, 12, 0, 12, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 2, 23, 7, 20, 9, 0, 0, 0, 0, 17, 0, 37, 0, 0, + 14, 0, 18, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 10, 21, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 16, 15, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 20, 13, 0, 0, 0, 0, 0, 14, 0, + 34, 0, 2, 0, 15, 0, 0, 0, 0, 0, 0, 20, 0, 17, + 0, 0, 0, 0, 0, 12, 0, 13, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 43, 11, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 35, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 3, 0, 28, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 20, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 22, 0, 0, 30, 0, 0, 0, 26, 0, + 0, 0, 22, 0, 13, 0, 0, 0, 0, 0, 18, 16, 23, 10, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 6, 0, 0, 0, 0, + 0, 22, 27, 0, 0, 0, 0, 0, 0, 0, 15, 32, 15, 28, + 0, 0, 0, 0, 0, 31, 0, 0, 0, 24, 0, 17, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 11, 0, + 0, 0, 0, 0, 0, 28, 17, 0, 0, 28, 0, 25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 14, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 22, 0, 0, 0, 17, 15, + 0, 0, 0, 0, 36, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 28, 31, 0, 0, + 0, 0, 0, 0, 17, 15, 0, 0, 0, 21, 0, 0, 0, 17, + 0, 9, 0, 15, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 22, 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 24, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 28, 17, 0, 0, 0, 0, 12, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 9, 0, 24, + 23, 0, 5, 0, 0, 0, 0, 0, 0, 0, 21, 0, 23, 0, + 0, 0, 0, 13, 0, 0, 24, 0, 18, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 24, 0, 0, 0, 0, 0, 17, 0, 31, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 19, 26, 35, 0, 0, + 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 4, 0, 8, 0, 0, 0, 0, 0, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 13, 22, 2, 0, 0, 0, 40, 0, 14, 0, 16, 0, 21, 0, + 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 0, 0, 20, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 29, 16, 4, 0, 0, 0, 0, 0, 0, 23, + 31, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 26, 0, 24, 0, 0, 0, 0, 0, 0, 38, 31, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 0, + 0, 42, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 11, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 3, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 11, 0, 0, 0, 0, 37, 0, 0, 0, 0, 21, 13, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, + 0, 27, 0, 0, 0, 0, 0, 0, 0, 25, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, + 0, 21, 0, 0, 0, 18, 17, 14, 24, 12, 0, 0, 0, 0, + 0, 0, 25, 30, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 14, 0, 0, 6, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 12, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 20, 0, 0, 0, 0, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 30, 0, - 0, 21, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 30, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 22, 0, 0, 0, 28, - 0, 22, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 24, 30, 29, 0, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 33, 0, 0, 28, - 0, 29, 0, 0, 0, 12, 0, 0, 30, 15, 0, 0, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 22, 0, 16, 0, 34, - 17, 7, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 35, 0, 0, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 22, 0, - 0, 23, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 4, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 28, 0, 0, 10, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 20, 22, 0, 0, 15, 10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 29, 0, - 0, 0, 0, 0, 27, 14, 27, 0, 0, 23, 27, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 33, 0, 0, 0, 0, 0, 0, 25, 0, 0, 2, 0, 25, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 25, 0, - 16, 0, 29, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 29, - 19, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 39, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, - 28, 0, 0, 0, 0, 0, 0, 29, 0, 13, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 11, 0, 0, - 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, - 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 32, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 16, 0, 19, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 9, 0, 0, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 11, - 0, 0, 0, 0, 0, 29, 0, 0, 33, 0, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 25, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 22, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 0, 0, 10, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, - 0, 0, 29, 0, 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 24, 0, 0, 0, 27, 0, 0, 0, - 0, 0, 37, 19, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 22, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 24, 20, - 25, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 17, 0, 0, 0, 29, 0, 0, 25, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 16, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 27, 0, 16, 0, 18, 0, 0, - 25, 0, 0, 0, 25, 0, 0, 0, 0, 22, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 12, 0, 27, 0, 27, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 14, 0, + 19, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 25, 0, 15, + 21, 0, 16, 18, 0, 0, 30, 14, 0, 0, 0, 14, 0, 0, + 14, 37, 0, 0, 0, 29, 0, 3, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, + 0, 12, 35, 0, 0, 0, 31, 0, 0, 0, 0, 15, 0, 0, + 0, 15, 0, 0, 23, 0, 0, 0, 0, 15, 25, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 22, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 25, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 16, 43, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 16, - 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 0, 15, 24, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 16, 14, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 22, 0, 27, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 17, 7, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 17, 0, 0, 0, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 31, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 38, 0, 0, 13, 0, 0, 0, 16, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 32, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 32, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 70, 31, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 17, 0, 0, 8, 37, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 15, 17, 25, 0, 0, 0, 0, 14, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 17, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 15, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 14, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 13, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 23, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 24, 0, 0, 0, 0, 4, 23, 15, 0, 0, 0, 15, 0, + 0, 13, 0, 33, 0, 0, 0, 26, 24, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 20, 13, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 15, + 0, 0, 0, 15, 0, 0, 22, 0, 0, 26, 0, 0, 14, 0, + 18, 0, 0, 0, 0, 0, 13, 0, 0, 8, 0, 15, 10, 0, + 36, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 0, 0, 18, 21, 0, 0, 0, 0, 0, 10, 0, 16, + 27, 0, 0, 0, 14, 27, 0, 16, 16, 0, 0, 0, 0, 0, + 18, 0, 0, 14, 0, 0, 0, 0, 0, 0, 16, 14, 0, 17, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 14, 0, 33, + 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 18, 0, 15, 0, 0, 0, + 0, 0, 47, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 26, 0, 29, 18, + 18, 0, 31, 0, 0, 17, 0, 0, 0, 34, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 14, 0, + 13, 0, 0, 0, 0, 15, 20, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 23, 0, 13, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 11, 32, 0, 12, 0, + 0, 0, 0, 0, 17, 0, 18, 0, 31, 9, 0, 0, 22, 0, + 15, 0, 0, 0, 11, 0, 15, 11, 13, 0, 0, 0, 35, 11, + 15, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, + 0, 0, 10, 15, 0, 23, 0, 0, 0, 6, 0, 0, 7, 19, + 0, 0, 14, 31, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, + 0, 0, 0, 12, 0, 0, 23, 0, 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 15, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 14, 0, + 0, 14, 0, 10, 0, 0, 0, 0, 0, 46, 12, 0, 0, 0, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 15, 29, 14, + 17, 14, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, + 18, 0, 18, 15, 34, 0, 0, 0, 7, 0, 16, 19, 4, 0, + 0, 0, 0, 0, 19, 0, 42, 0, 13, 0, 0, 0, 0, 13, + 0, 16, 25, 0, 15, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 18, 20, 0, 0, 22, 0, 0, 0, 0, 0, + 11, 0, 0, 0, 0, 13, 0, 0, 0, 24, 0, 15, 0, 15, + 0, 0, 12, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 35, + 11, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 10, 23, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 22, 0, 10, 17, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 19, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 12, + 0, 0, 22, 0, 0, 0, 0, 19, 0, 0, 0, 21, 29, 22, + 27, 0, 0, 0, 25, 0, 29, 9, 14, 11, 0, 0, 14, 0, + 23, 24, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, + 0, 0, 0, 0, 13, 0, 0, 0, 28, 0, 0, 0, 13, 0, + 0, 0, 23, 28, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 18, 13, 0, 0, 16, 0, 0, 22, 0, 31, + 32, 39, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 24, 0, 22, 0, 0, 0, + 0, 15, 0, 26, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 24, 0, 2, 0, 26, 0, + 0, 0, 0, 0, 0, 0, 12, 25, 17, 0, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 13, 3, + 0, 0, 0, 0, 0, 0, 15, 0, 32, 15, 0, 0, 6, 0, + 30, 3, 0, 0, 21, 13, 0, 4, 0, 0, 0, 12, 20, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 14, 0, 0, + 4, 0, 0, 0, 0, 25, 0, 12, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 27, 0, 15, 0, 0, 0, + 19, 0, 14, 0, 0, 0, 0, 0, 2, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 27, 0, 0, 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 11, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 0, 33, 0, 0, 0, 0, + 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 14, 0, 0, 13, + 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 3, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 28, 0, 13, + 0, 0, 0, 0, 6, 0, 16, 0, 3, 0, 12, 0, 0, 34, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 20, 8, 0, 0, 0, 0, 0, 0, 6, 0, 27, + 17, 0, 9, 0, 0, 0, 17, 0, 0, 0, 9, 0, 0, 73, + 74, 0, 9, 2, 0, 0, 19, 0, 0, 11, 0, 0, 0, 0, + 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, + 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 23, 18, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, + 20, 27, 0, 10, 0, 0, 0, 0, 0, 23, 22, 33, 0, 0, + 0, 50, 24, 22, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 9, 0, 0, 20, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 21, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 14, 0, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 15, 0, + 0, 6, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 11, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 11, 29, 15, 0, 0, 9, 0, 13, 0, + 14, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, + 0, 0, 0, 12, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 15, + 0, 0, 21, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 0, 3, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 16, 0, 11, 16, 0, 0, 0, 14, 0, + 0, 0, 22, 11, 0, 34, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 24, + 0, 0, 16, 27, 0, 0, 29, 0, 0, 15, 0, 12, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 9, 0, 0, 8, 0, 0, 31, 20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 28, 0, 26, 0, 0, 0, 19, 0, 0, 25, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, + 0, 30, 0, 2, 15, 25, 12, 0, 0, 0, 0, 7, 0, 0, + 0, 14, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 25, 0, 11, 0, 2, 0, 0, 23, 0, 0, 0, + 0, 0, 0, 2, 24, 0, 0, 0, 0, 0, 10, 22, 0, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 21, 0, 15, 0, + 28, 0, 2, 0, 0, 0, 0, 15, 24, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 0, 32, 0, 0, 10, 13, 0, 0, 0, 0, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 14, 0, 29, 0, 6, 0, + 13, 0, 0, 0, 34, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 2, 0, 0, 0, 12, 0, 14, 12, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 12, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 0, 38, 0, 0, 0, 0, 0, 21, 0, 0, 32, 0, 24, 0, + 12, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 12, 0, 19, + 30, 0, 0, 0, 0, 28, 11, 0, 0, 32, 0, 0, 0, 0, + 2, 18, 9, 0, 0, 0, 0, 0, 19, 0, 11, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 0, + 0, 30, 15, 3, 0, 0, 23, 31, 0, 0, 31, 0, 0, 0, + 21, 0, 6, 0, 18, 30, 0, 0, 0, 0, 18, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 16, 15, 0, 0, 0, 0, 14, 26, 22, 0, 0, 24, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 11, 23, 0, 6, 14, + 0, 0, 2, 0, 32, 25, 0, 0, 0, 0, 0, 0, 34, 0, + 19, 0, 0, 28, 0, 0, 0, 28, 0, 4, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 0, 14, 0, 0, 30, 0, 8, + 0, 0, 23, 0, 2, 18, 0, 25, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 32, 11, 0, 0, + 6, 12, 0, 19, 22, 13, 0, 11, 0, 0, 0, 13, 25, 0, + 0, 0, 0, 12, 0, 0, 0, 0, 0, 17, 0, 0, 8, 29, + 0, 20, 8, 16, 0, 0, 0, 0, 0, 0, 0, 13, 34, 0, + 0, 27, 0, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 34, 0, 28, 0, 13, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 19, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 30, + 0, 0, 31, 0, 0, 0, 0, 13, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 17, 0, 0, 43, + 0, 0, 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 34, 0, 0, 8, 0, 0, 0, 21, 0, + 0, 11, 0, 0, 0, 25, 0, 0, 0, 0, 38, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 19, 26, + 11, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 29, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 29, 39, 30, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 39, 0, 31, 0, 15, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 16, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 14, 43, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 23, 0, 0, 0, 16, 0, 0, 0, 0, 19, 23, + 29, 0, 0, 18, 0, 23, 31, 0, 0, 13, 7, 0, 0, 0, + 27, 0, 30, 0, 0, 0, 18, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 14, 0, 0, 13, 0, 21, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 22, + 0, 14, 0, 0, 0, 0, 0, 17, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 30, 44, 0, 0, 7, 15, 11, 0, 0, 16, + 0, 0, 10, 33, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 18, 0, 36, 3, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 24, 0, 0, 15, + 14, 0, 0, 0, 0, 0, 0, 21, 15, 0, 17, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 9, 24, + 11, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 20, 0, 0, + 19, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 28, 0, 0, 0, 15, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 23, 0, 2, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 5, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 22, 0, 0, 24, 32, 0, 0, 21, 0, 29, 19, 0, + 0, 0, 9, 0, 0, 0, 0, 13, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 27, 0, + 0, 10, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, + 14, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, + 0, 0, 26, 0, 15, 0, 0, 12, 0, 0, 21, 0, 18, 0, + 0, 0, 0, 3, 15, 10, 0, 8, 0, 19, 0, 0, 23, 24, + 0, 0, 0, 12, 0, 0, 0, 0, 16, 0, 0, 24, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 27, 0, 0, 0, 0, + 11, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 21, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, + 0, 0, 0, 24, 0, 0, 19, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 31, 0, 0, 0, 0, 10, + 14, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, + 35, 12, 15, 0, 0, 0, 15, 23, 14, 0, 0, 0, 0, 0, + 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 7, 12, 0, + 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 29, 17, + 0, 0, 0, 0, 0, 8, 0, 24, 0, 0, 0, 0, 11, 0, + 0, 0, 0, 25, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 12, 0, 23, 0, 0, 0, 0, 0, + 0, 11, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 35, 0, 0, 13, 0, 0, 0, 29, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 19, 0, + 24, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, + 14, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, + 22, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 43, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 28, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 72, 0, 0, + 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 12, 14, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 8, 0, 35, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 24, 0, 22, 0, 30, 0, 0, 14, 0, 0, 0, 0, + 12, 34, 0, 23, 0, 33, 22, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 13, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 20, 0, 23, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 35, + 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 14, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 26, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 31, 0, 0, + 0, 24, 29, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 29, 0, + 0, 0, 0, 0, 18, 10, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 16, 29, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 28, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 0, 21, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 14, 0, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 14, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 29, 21, 31, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 22, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 19, 0, 27, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, + 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 0, 0, 36, 0, 0, 27, 0, 0, 0, 0, + 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, + 0, 28, 0, 0, 0, 11, 0, 33, 0, 0, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 0, 0, 13, 7, 0, 0, 29, 0, 0, + 30, 0, 0, 0, 0, 30, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 43, 0, 0, 0, 3, 0, 0, 0, 0, 0, 6, + 43, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 15, 0, 0, 0, 0, 18, 0, 0, 0, 18, 14, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 17, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 18, + 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 30, 0, 0, 0, 17, 0, 0, 0, 0, + 37, 26, 0, 0, 11, 0, 0, 0, 0, 23, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 25, + 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 25, 0, 14, 0, 0, 0, 0, 0, 0, + 16, 16, 0, 0, 0, 0, 0, 0, 0, 35, 27, 0, 0, 0, + 0, 18, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 20, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 17, 25, 19, 0, 0, 23, 20, 0, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 35, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 36, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 0, 36, 0, 27, 14, 0, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 29, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 30, 0, 0, 0, 0, 0, 36, 22, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 35, + 0, 0, 0, 11, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 24, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 35, 27, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 14, 0, 0, 4, 0, 23, - 0, 0, 0, 15, 0, 0, 0, 0, 30, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, + 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 21, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 29, 11, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 15, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 20, 22, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 17, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 26, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 20, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 10, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 33, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, + 0, 26, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 28, 0, 0, + 27, 11, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 14, 0, + 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 0, 17, 0, 0, 26, 0, 20, 11, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 0, 0, 33, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 33, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 15, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 25, 0, 0, 0, 0, 20, 0, 0, 0, 25, 0, 0, 16, + 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, + 0, 24, 0, 0, 0, 0, 16, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 28, + 0, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 19, 0, 2, 0, 0, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 24, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 26, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 26, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 24, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 0, 23, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, + 0, 13, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 17, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, + 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 24, 0, 0, 0, 17, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 22, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 37, 0, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 13, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, + 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 27, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, + 16, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 14, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 23, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, + 0, 8, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 28, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1344,17 +1468,8 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1363,16 +1478,48 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1394,7 +1541,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1405,7 +1551,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1421,21 +1566,16 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1444,7 +1584,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1464,997 +1603,11 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2473,6 +1626,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2480,10 +1634,13 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2559,6 +1716,7 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2608,7 +1766,6 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2665,4719 +1822,5549 @@ static const unsigned char lengthtable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31 }; static const struct grib_keys_hash wordlist[] = { + {""}, {""}, {""}, {""}, {""}, + {"n",1368}, {""}, - {"n",1366}, + {"m",1244}, + {"na",1374}, + {"t",2242}, {""}, - {"nnn",1380}, + {"nnn",1385}, + {"nt",1400}, {""}, - {"t",2231}, - {"nt",1395}, - {"m",1242}, - {"nd",1376}, - {"ed",738}, - {"td",2242}, - {""}, - {"na",1369}, - {"min",1325}, - {"name",1370}, - {"sd",2011}, - {"date",654}, - {""}, - {"time",2268}, - {""}, - {"ident",981}, - {""}, {""}, {""}, + {"nd",1381}, + {"ed",737}, + {"td",2253}, + {"name",1375}, + {"min",1327}, {"data",633}, - {"one",1577}, - {""}, {""}, - {"names",1375}, - {"mars",1245}, - {"stream",2203}, + {""}, + {"date",654}, {""}, {""}, {""}, - {"dataset",651}, - {"enorm",780}, - {""}, {""}, - {"sort",2147}, - {"metadata",1321}, + {"time",2283}, + {"sd",2020}, {""}, {""}, {""}, {""}, - {"domain",720}, + {"ident",982}, + {""}, {""}, + {"one",1584}, + {"metadata",1323}, + {""}, {""}, + {"param",1699}, + {""}, + {"stream",2214}, + {""}, + {"mars",1247}, + {"names",1380}, + {"enorm",780}, + {"dataset",651}, + {""}, {""}, {""}, {""}, + {"spare",2173}, + {"domain",719}, {"eps",785}, {""}, - {"edition",739}, + {"sort",2156}, {""}, - {"spare",2164}, - {"present",1745}, - {"param",1692}, - {""}, {""}, {""}, {""}, - {"iteration",1058}, - {"dimension",703}, - {"oper",1588}, + {"centre",406}, {""}, - {"centre",407}, - {"assertion",323}, - {"parameter",1698}, + {"oper",1595}, + {"parameter",1706}, + {"present",1754}, + {"step",2202}, + {"edition",738}, {""}, {""}, {""}, - {"leadtime",1123}, - {""}, - {"step",2192}, - {""}, - {"opttime",1595}, - {"rectime",1833}, - {"timerepres",2282}, - {""}, - {"parameters",1706}, + {"rectime",1842}, + {"true",2322}, {"core",608}, - {"points",1732}, + {"Latin",112}, + {"iteration",1059}, {""}, {""}, - {"radials",1806}, + {"opttime",1602}, + {""}, {""}, {""}, + {"minute",1329}, + {""}, + {"dimension",702}, {""}, {""}, {"const",581}, - {""}, {""}, {""}, - {"second",2012}, + {"parameters",1714}, {""}, - {"restricted",1876}, - {""}, - {"section",2037}, - {"stepZero",2202}, - {""}, {""}, {""}, {""}, - {"true",2305}, - {"partitions",1711}, - {"direction",706}, - {"pl",1729}, + {"minimum",1328}, + {"assertion",322}, + {"Lap",107}, + {"second",2021}, + {"points",1741}, + {"timerepres",2297}, {""}, {""}, - {"model",1346}, + {"section",2046}, + {"Lo",122}, + {"units",2391}, + {"restricted",1885}, + {"tile",2277}, {""}, - {"total",2284}, - {"minute",1327}, - {"range",1812}, - {"normal",1383}, - {""}, - {"statistics",2190}, - {""}, - {"grid",928}, - {"class",435}, - {"units",2373}, - {"million",1324}, - {"section8",2076}, + {"direction",705}, {""}, {""}, - {"minimum",1326}, + {"radius",1816}, + {"stepZero",2212}, {""}, {""}, - {"status",2191}, - {"instrument",1013}, - {"radius",1807}, - {""}, - {"process",1775}, - {""}, - {"precision",1740}, - {""}, {""}, {""}, {""}, {""}, - {"dateTime",664}, - {"origin",1602}, + {"status",2201}, + {"instrument",1014}, + {"Lop",142}, + {"ucs",2382}, {""}, {""}, - {"dataTime",648}, - {""}, {""}, - {"generation",915}, - {""}, {""}, - {"three",2255}, - {""}, {""}, {""}, - {"hdate",951}, - {"ucs",2364}, - {"latitude",1088}, + {"partitions",1720}, {""}, - {"discipline",712}, - {""}, - {"year",2505}, - {"refdate",1839}, - {""}, {""}, {""}, - {"correction",613}, + {"leadtime",1124}, {""}, {"count",622}, - {""}, {""}, - {"latitudes",1119}, - {""}, {""}, - {"system",2229}, {""}, - {"method",1322}, + {"uuid",2423}, + {"hdate",952}, + {"three",2266}, + {""}, + {"precision",1749}, + {"range",1821}, + {"refdate",1848}, + {""}, + {"statistics",2200}, + {"uco",2381}, + {"process",1784}, + {""}, + {"grid",929}, + {""}, + {"radials",1815}, + {""}, + {"dataTime",648}, + {"dateTime",664}, + {""}, {""}, + {"stepunits",2213}, + {""}, {""}, + {"daLoop",632}, + {"phase",1734}, + {"char",431}, + {"product",1786}, + {"correction",613}, + {"method",1324}, {""}, {""}, {""}, - {"type",2316}, - {""}, - {"uco",2363}, - {"identifier",985}, - {"phase",1725}, + {"section8",2085}, {""}, {""}, - {"file",865}, - {""}, - {"local",1165}, - {"datasetTemplate",653}, - {"g",904}, - {""}, - {"false",858}, - {""}, {""}, {""}, - {"consensus",579}, - {"resolution",1867}, - {"char",432}, - {""}, - {"elementsTable",744}, - {""}, - {"product",1777}, - {""}, - {"reference",1840}, + {"identifier",986}, + {"class",434}, {""}, {""}, - {"categories",390}, + {"origin",1609}, + {"reference",1849}, + {""}, + {"latitude",1089}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isSens",1043}, - {""}, {""}, {""}, - {"signature",2130}, + {"generation",916}, {""}, {""}, - {"dataStream",646}, + {"pl",1738}, {""}, {""}, - {"marsStream",1270}, + {"consensus",579}, {""}, - {"landtype",1080}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ordering",1598}, + {"upperLimit",2413}, {""}, - {"two",2314}, - {"partitionTable",1710}, - {""}, {""}, {""}, - {"padding",1621}, - {"hundred",973}, + {"hundred",974}, + {""}, {""}, {""}, {""}, + {"hour",964}, {""}, - {"platform",1730}, - {"eight",743}, + {"discipline",711}, + {"file",865}, + {"latitudes",1120}, {""}, - {"endStep",772}, - {""}, {""}, {""}, - {"diagnostic",699}, - {"hour",963}, - {""}, {""}, {""}, + {"total",2299}, + {"model",1348}, + {""}, + {"normal",1388}, + {""}, {""}, + {"false",858}, + {""}, {""}, {"fcperiod",862}, - {"operStream",1589}, - {""}, {""}, {""}, - {"longitude",1201}, - {"marsStep",1269}, + {"nref",1399}, {""}, - {"startStep",2184}, + {"datasetTemplate",653}, + {"signature",2139}, {""}, - {"channel",430}, - {""}, {""}, {""}, - {"thousand",2254}, - {"localTime",1193}, - {""}, {""}, {""}, - {"longitudes",1232}, + {"million",1326}, + {"dataStream",646}, {""}, - {"nref",1394}, + {"temperature",2255}, + {"g",905}, + {"thousand",2265}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"marsStream",1272}, + {""}, + {"resolution",1876}, + {"nTiles",1373}, + {"categories",389}, + {""}, + {"endStep",771}, + {"isSens",1044}, + {""}, + {"eight",742}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"month",1355}, + {""}, + {"platform",1739}, + {""}, {""}, + {"marsStep",1271}, + {"K",94}, + {"offset",1547}, + {"diagnostic",698}, + {"operStream",1596}, + {""}, + {"startStep",2193}, + {"year",2525}, + {"anoffset",317}, + {""}, {""}, + {"truncateLaplacian",2325}, + {""}, {""}, + {"elementsTable",743}, + {"marsQuantile",1268}, + {""}, + {"padding",1628}, + {""}, + {"offsetdate",1581}, + {"type",2333}, + {""}, {""}, + {"offsettime",1582}, + {""}, {""}, {""}, {""}, {""}, + {"ordering",1605}, + {""}, + {"oceanStream",1545}, + {""}, {""}, {""}, + {"system",2240}, + {""}, + {"partitionTable",1719}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitude",1203}, + {""}, + {"local",1167}, + {""}, {""}, {""}, {"Di",30}, - {""}, {""}, - {"temperature",2244}, - {"gg",917}, - {""}, {""}, {""}, - {"dy",727}, + {"TT",240}, + {"paramtype",1716}, {""}, - {"flags",882}, - {"Dstart",38}, + {"channel",429}, + {""}, {""}, {""}, {""}, {""}, + {"yLast",2524}, {""}, {""}, - {"day",666}, + {"two",2331}, {""}, {"dataDate",636}, + {"flags",882}, + {""}, {""}, {""}, + {"longitudes",1234}, + {"Dstart",38}, + {"gg",918}, {""}, {""}, - {"month",1353}, - {"dataType",649}, - {""}, - {"marsDir",1249}, - {"marsType",1273}, - {""}, - {"oceanStream",1538}, - {"reserved",1858}, - {"masterDir",1278}, - {""}, - {"offset",1540}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"anoffset",318}, - {"TT",241}, - {""}, {""}, - {"eleven",746}, - {"version",2428}, - {"stepType",2198}, - {"offsetdate",1574}, - {""}, - {"offsettime",1575}, - {""}, - {"marsDomain",1250}, - {""}, - {"varno",2423}, - {""}, {""}, - {"dataSelection",645}, - {""}, {""}, {""}, {""}, {""}, - {"dummyc",725}, - {""}, {""}, {""}, {""}, - {"reportType",1854}, - {""}, {""}, - {"endTimeStep",774}, - {""}, {""}, {""}, {""}, {"fgTime",864}, - {"threshold",2256}, - {""}, {""}, - {"codeType",559}, - {"elevation",745}, - {""}, {""}, - {"isSpectral",1044}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"flag",877}, - {""}, - {"levels",1146}, - {""}, {""}, - {"countTotal",625}, - {""}, - {"notDecoded",1393}, - {"levelist",1145}, - {"Latin",113}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"dummy",722}, - {""}, {""}, - {"marsQuantile",1266}, - {""}, {""}, - {"level",1140}, - {"gridType",938}, - {"average",327}, - {""}, - {"ieeeFloats",986}, {""}, {""}, {""}, {""}, {""}, - {"Lo",123}, - {""}, {""}, {""}, {""}, - {"matchSort",1285}, - {""}, {""}, {""}, {""}, {""}, - {"aerosolpacking",308}, + {"marsDir",1251}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"localTime",1195}, + {""}, + {"masterDir",1280}, + {""}, + {"endTimeStep",774}, + {""}, {""}, {""}, {"crcrlf",627}, - {"hideThis",956}, - {"forecastperiod",894}, - {""}, {""}, {""}, {""}, {""}, - {"Lap",108}, - {"windSpeed",2475}, - {""}, {""}, - {"values",2411}, - {"localDate",1166}, - {"isSatellite",1041}, {""}, - {"localDir",1174}, - {""}, {""}, - {"conceptDir",571}, - {""}, {""}, - {"selectedSecond",2113}, - {"Lop",143}, + {"threshold",2267}, + {""}, {""}, {""}, {""}, + {"matchSort",1287}, + {""}, + {"landtype",1081}, + {"marsDomain",1252}, {""}, {""}, {""}, - {"additionalParameter",303}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"country",626}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"dataOrigin",640}, - {""}, - {"marsRange",1267}, - {""}, - {"TS",239}, - {""}, {""}, - {"yFirst",2503}, - {""}, {""}, {""}, - {"daLoop",632}, - {""}, - {"avg",331}, - {"TScalc",240}, - {"ccsdsRsi",397}, - {""}, {""}, {""}, {""}, {""}, - {"stepRange",2196}, + {"dummyc",724}, + {"hideThis",957}, + {"marsLatitude",1262}, {""}, {""}, {""}, {"fcmonth",861}, - {""}, - {"efiOrder",742}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"levtype",1147}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"localSecond",1188}, + {"siteLatitude",2147}, {""}, {""}, - {"userTimeStart",2404}, - {""}, - {"standardDeviation",2176}, - {""}, - {"fgDate",863}, - {"destineSection",697}, - {"forecastTime",893}, + {"instrumentIdentifier",1015}, {""}, {""}, {""}, {""}, - {"aerosolType",305}, - {""}, {""}, {""}, {""}, {""}, - {"yLast",2504}, - {"statisticalProcess",2188}, + {"forecastperiod",895}, + {"dataType",649}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalTime",2359}, - {""}, - {"spectralType",2174}, + {"reserved",1867}, {""}, {""}, - {"accuracy",297}, - {"satelliteSeries",1941}, - {""}, - {"upperLimit",2395}, - {""}, - {"coefsFirst",563}, - {"statisticalProcessesList",2189}, - {"isFillup",1036}, - {""}, {""}, {""}, {""}, {""}, - {"Dy",42}, - {"dataFlag",637}, - {""}, {""}, {""}, {""}, {""}, - {"centreDescription",408}, + {"dataLength",639}, + {"marsType",1275}, {""}, {""}, - {"logTransform",1200}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coefsSecond",564}, + {"flag",877}, {""}, - {"ccsdsFlags",396}, + {"varno",2443}, {""}, - {"forecastSteps",892}, - {""}, - {"codeFigure",558}, + {"paramType",1703}, + {"notDecoded",1398}, + {"version",2448}, + {"dataSelection",645}, {""}, {""}, {""}, - {"windDirection",2464}, - {"unitsFactor",2379}, - {""}, {""}, - {"pv",1791}, - {""}, {""}, {""}, - {"recDateTime",1830}, - {"endDescriptors",751}, - {""}, {""}, {""}, - {"upperRange",2396}, - {"lev",1138}, - {"nlev",1379}, - {"band",335}, - {""}, {""}, {""}, {""}, - {"optionalData",1594}, - {"offsetSection9",1571}, + {"band",334}, + {"stepType",2208}, + {"countTotal",625}, {""}, - {"localDateTime",1167}, - {""}, - {"isOctahedral",1039}, - {""}, - {"rdbtime",1818}, - {""}, - {"offsetSection8",1570}, - {""}, {""}, {""}, {""}, - {"productType",1782}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"truncateLaplacian",2308}, - {""}, {""}, - {"Nr",201}, - {""}, {""}, - {"rectimeDay",1834}, - {"aerosolTypeName",306}, - {"latitudeSexagesimal",1116}, - {""}, {""}, - {"Ni",199}, - {"instrumentIdentifier",1014}, - {""}, {""}, - {"levelType",1142}, - {""}, - {"activity",299}, - {""}, - {"Nside",204}, - {"lowerLimit",1235}, - {"longitudesList",1233}, - {"Ly",154}, - {""}, - {"overlayTemplate",1615}, + {"dataKeys",638}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"bitmap",373}, - {"userDateStart",2400}, + {""}, + {"isSpectral",1045}, + {""}, + {"forecastTime",894}, + {""}, + {"conceptDir",571}, + {"rdbtime",1827}, + {"Xp",274}, + {"reportType",1863}, + {"codeType",558}, + {""}, + {"eleven",745}, {""}, {""}, {""}, + {"userTimeStart",2422}, + {"TS",238}, + {"Xo",273}, + {""}, + {"efiOrder",741}, + {"selectedSecond",2122}, + {""}, {""}, {""}, {""}, {""}, + {"TScalc",239}, + {"bitmap",372}, + {""}, {""}, {""}, {""}, + {"additionalParameter",302}, + {""}, + {"lowerLimit",1237}, + {""}, + {"dataOrigin",640}, + {""}, + {"KS",95}, + {""}, + {"number",1401}, + {""}, {""}, {""}, {""}, + {"average",326}, + {""}, {""}, + {"elevation",744}, + {""}, {""}, + {"dy",726}, + {""}, {""}, + {"day",666}, + {""}, {""}, + {"statisticalProcess",2198}, + {""}, {""}, {""}, + {"isSatellite",1042}, + {""}, {""}, + {"windSpeed",2495}, + {""}, {""}, {""}, {""}, + {"gridType",939}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"values",2431}, + {"fgDate",863}, + {""}, {""}, {""}, {""}, {""}, + {"forecastSteps",893}, + {""}, + {"statisticalProcessesList",2199}, + {""}, + {"aerosolpacking",307}, + {""}, + {"Ly",153}, + {"localDate",1168}, + {""}, {""}, + {"coefsSecond",563}, + {""}, + {"localDir",1176}, + {""}, + {"ieeeFloats",987}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"levels",1147}, + {"dummy",721}, + {""}, {""}, + {"levelist",1146}, + {"logTransform",1202}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Lcy",119}, + {""}, {""}, {""}, {""}, + {"avg",330}, + {""}, {""}, {""}, + {"recDateTime",1839}, + {""}, + {"offsetSection9",1578}, + {""}, {""}, {""}, + {"centreDescription",407}, + {"localSecond",1190}, + {"unitsFactor",2397}, + {"Luy",149}, + {""}, {""}, + {"satelliteSeries",1950}, + {""}, {""}, {""}, + {"coefsFirst",562}, + {"forecastLeadTime",886}, + {""}, {""}, + {"marsLevel",1263}, + {"level",1141}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unitOfTime",2388}, + {"country",626}, + {""}, {""}, {""}, {""}, + {"isOctahedral",1040}, + {""}, {""}, {""}, + {"topLevel",2298}, + {""}, {""}, + {"typicalTime",2377}, + {"offsetSection8",1577}, + {""}, + {"productType",1791}, + {""}, {""}, {""}, + {"codeFigure",557}, + {""}, {""}, + {"userDateStart",2418}, + {""}, {""}, {""}, + {"LaD",104}, + {"aerosolType",304}, + {""}, {""}, + {"spectralType",2183}, + {"destineSection",696}, + {""}, {""}, {""}, {""}, + {"accuracy",296}, + {""}, + {"indicatorOfParameter",1000}, + {""}, {""}, {""}, {""}, + {"yFirst",2523}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"isFillup",1037}, + {"rdbtimeTime",1834}, + {"centreLongitude",412}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudesList",1121}, + {""}, {""}, {""}, + {"zero",2534}, + {""}, + {"distinctLatitudes",713}, + {""}, + {"aerosolTypeName",305}, + {""}, + {"zeros",2535}, + {""}, + {"gridSpecification",938}, + {""}, {""}, {""}, {""}, + {"pressureLevel",1774}, + {""}, {""}, {""}, {""}, {""}, + {"dataFlag",637}, + {"standardDeviation",2185}, + {""}, + {"laplacianOperator",1082}, + {"referenceSampleInterval",1857}, + {""}, {""}, + {"ccsdsFlags",395}, + {""}, + {"levtype",1148}, + {"ccsdsRsi",396}, + {"endDescriptors",750}, + {""}, + {"pv",1800}, + {"setLocalDefinition",2129}, + {""}, {""}, {"fireTemplate",867}, {""}, - {"referenceDate",1841}, - {""}, - {"laplacianOperator",1081}, - {""}, {""}, {""}, - {"indicatorOfParameter",999}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localFlag",1176}, - {"unitOfTime",2370}, - {"number",1396}, - {""}, - {"typicalDate",2352}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Lcy",120}, - {""}, - {"lowerRange",1236}, - {""}, {""}, {""}, {""}, - {"modelName",1349}, + {"obstype",1542}, {""}, {""}, {""}, {""}, {""}, - {"localDay",1168}, + {"marsRange",1269}, + {""}, {""}, + {"periodOfTime",1730}, + {""}, {""}, {""}, {""}, + {"windDirection",2484}, + {""}, {""}, + {"longitudesList",1235}, {""}, - {"startTimeStep",2186}, - {""}, {""}, - {"gridSpecification",937}, - {""}, {""}, - {"parameterName",1703}, - {""}, {""}, - {"categoryType",391}, - {""}, {""}, - {"pointsOrdering",1733}, + {"latitudeSexagesimal",1117}, + {""}, + {"stepRange",2206}, + {"referenceDate",1850}, + {""}, {""}, + {"localDateTime",1169}, + {""}, + {"startTimeStep",2196}, + {"optionalData",1601}, + {""}, {""}, {""}, + {"unitsDecimalScaleFactor",2395}, + {""}, + {"referenceStep",1858}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"templatesLocalDir",2257}, + {""}, + {"pointsOrdering",1742}, + {""}, {""}, {""}, {""}, + {"Dy",42}, + {""}, + {"lev",1139}, + {""}, {""}, + {"nlev",1384}, {""}, - {"siteLatitude",2138}, - {"marsLatitude",1260}, - {""}, {""}, {""}, {""}, {""}, {""}, {"coordinatesPresent",607}, + {"centreForLocal",408}, {""}, - {"Luy",150}, - {""}, {""}, {""}, - {"marsLevel",1261}, - {""}, {""}, {""}, - {"suiteName",2222}, - {"gridName",935}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dataLength",639}, + {"global",919}, {""}, - {"parameterDiscipline",1701}, - {"Nassigned",194}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayState",1935}, - {""}, {""}, - {"referenceStep",1849}, - {""}, - {"validityTime",2410}, - {"topLevel",2283}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"firstDimension",868}, - {"computeStatistics",570}, - {""}, - {"marsStartStep",1268}, - {""}, - {"waveDomain",2452}, - {"gridDefinition",930}, - {"unitsDecimalScaleFactor",2377}, - {""}, {""}, - {"obstype",1535}, + {"rdbType",1825}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"upperRange",2414}, {""}, {""}, {""}, {""}, - {"dataKeys",638}, - {"shortName",2126}, - {"angleDivisor",312}, - {""}, {""}, {""}, - {"periodOfTime",1721}, - {""}, {""}, - {"datasetForLocal",652}, - {""}, - {"global",918}, - {""}, - {"cfName",418}, - {"matchTimeRepres",1286}, - {""}, {""}, {""}, {""}, {""}, - {"localDefinition",1172}, - {""}, {""}, - {"localDecimalScaleFactor",1169}, - {""}, {""}, - {"NT",191}, - {"typicalDay",2354}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudesList",1120}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"setLocalDefinition",2120}, - {""}, {""}, {""}, {""}, {""}, - {"laplacianOperatorIsSet",1082}, - {"generatingProcessTemplate",913}, - {""}, - {"pressureLevel",1765}, - {"rdbtimeTime",1825}, - {""}, - {"centreLongitude",413}, - {""}, {""}, {""}, {""}, {""}, - {"rdbType",1816}, - {""}, {""}, {""}, {""}, - {"lengthDescriptors",1128}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Nf",198}, - {""}, {""}, {""}, {""}, - {"LaD",105}, - {""}, {""}, - {"energyNorm",779}, - {""}, {""}, {""}, - {"Ny",209}, - {""}, - {"editionNumber",740}, - {"endOfRange",771}, - {""}, {""}, {""}, - {"offsetDescriptors",1554}, - {""}, {""}, {""}, {""}, - {"groupSplitting",942}, - {""}, {""}, - {"derivedForecast",694}, - {""}, - {"distinctLatitudes",714}, + {"tubeDomain",2329}, + {"typicalDate",2370}, {""}, {""}, {""}, {""}, {""}, {""}, - {"referenceSampleInterval",1848}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"userDateTimeStart",2402}, - {""}, {""}, {""}, {""}, - {"freeFormData",899}, - {"templatesLocalDir",2246}, + {"marsStartStep",1270}, {""}, - {"forecastLeadTime",885}, - {"sectionNumber",2085}, - {""}, - {"Ncy",197}, - {""}, {""}, {""}, - {"dateOfForecast",656}, - {""}, - {"timeOfForecast",2275}, - {""}, {""}, {""}, {""}, {"ensembleSize",783}, - {""}, {""}, - {"centreForLocal",409}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"climatologicalRegime",439}, - {"KS",96}, - {"tubeDomain",2312}, + {"heightLevelName",954}, {""}, {""}, - {"analysisOffsets",311}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Nuy",207}, - {"setDecimalPrecision",2119}, - {"anoffsetFirst",319}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"generatingProcessIdentifier",912}, - {"verticalDomainTemplate",2438}, - {"reservedOctet",1863}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"originalSubCentreIdentifier",1606}, - {""}, - {"rdbtimeDate",1819}, - {""}, - {"localTimeForecastList",1194}, - {""}, {""}, - {"longitudeOfCentrePoint",1205}, - {""}, {""}, {""}, {""}, - {"incrementOfLengths",990}, - {""}, - {"scaledDirections",1972}, - {""}, - {"LaR",107}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"integerScalingFactorAppliedToDirections",1018}, - {"integerScalingFactorAppliedToFrequencies",1019}, - {""}, - {"defaultName",680}, + {"meanSize",1315}, {""}, {""}, {""}, - {"LoR",128}, - {"clusterNumber",551}, - {""}, {""}, - {"decimalScaleFactor",676}, - {""}, {""}, {""}, {""}, - {"integerScaleFactor",1017}, - {"correction3Part",619}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"generatingProcessIdentificationNumber",911}, - {""}, {""}, - {"controlForecastCluster",586}, - {"offsetSection0",1560}, - {"marsParam",1265}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"lcwfvSuiteName",1122}, - {"zeros",2515}, - {"validityDate",2408}, - {"channelNumber",431}, - {"realPart",1827}, - {"oldSubtype",1576}, - {"zero",2514}, - {""}, {""}, {""}, - {"yearOfForecast",2509}, - {""}, {""}, {""}, - {"epsPoint",787}, - {"boustrophedonic",380}, - {""}, - {"JS",94}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeSexagesimal",1231}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"rdbDateTime",1814}, - {""}, {""}, {""}, {""}, - {"spectralDataRepresentationMode",2171}, - {""}, - {"anoffsetFrequency",320}, - {""}, {""}, {""}, - {"gridDefinitionSection",932}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"anoffsetLast",321}, - {""}, {""}, - {"referenceOfLengths",1844}, - {"heightLevelName",953}, - {""}, - {"preferLocalConcepts",1744}, - {"conceptsLocalDirAll",574}, - {""}, - {"rdbtimeDay",1820}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"computeStatistics",570}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsLevelist",1262}, + {"offsetSection0",1567}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"rectimeDay",1843}, + {"rdbtimeDate",1828}, {""}, {""}, {""}, {""}, - {"angleOfRotation",314}, - {""}, {""}, {""}, - {"hourOfForecast",966}, - {""}, - {"minuteOfReference",1333}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ifsParam",987}, - {""}, {""}, {""}, - {"latitudeOfCentrePoint",1093}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"newSubtype",1378}, - {""}, {""}, - {"visibility",2442}, - {""}, - {"dateOfReference",661}, - {""}, - {"timeOfReference",2278}, - {""}, {""}, {""}, - {"gridDefinitionDescription",931}, - {""}, - {"N",172}, + {"offsetDescriptors",1561}, + {"preferLocalConcepts",1753}, {""}, {""}, {""}, {""}, {""}, - {"monthOfForecast",1356}, - {""}, {""}, {""}, - {"K",95}, - {"meanSize",1313}, - {"spectralDataRepresentationType",2172}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"faFieldName",855}, - {"longitudinalDirectionGridLength",1234}, - {"dimensionType",705}, + {"boustrophedonic",379}, {""}, {""}, {""}, {""}, - {"qfe",1793}, - {""}, {""}, {""}, - {"experiment",804}, - {""}, {""}, {""}, - {"quantile",1803}, - {"dayOfForecast",669}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NR",189}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sequences",2116}, - {"standardParallel",2177}, - {""}, {""}, {""}, {""}, - {"northernLatitudeOfDomain",1391}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondSize",2026}, - {""}, {""}, {""}, {""}, - {"bufrTemplate",385}, - {""}, {""}, {""}, {""}, {""}, - {"maximum",1291}, + {"userDateTimeStart",2420}, {""}, {""}, - {"modeNumber",1345}, - {"bottomLevel",379}, - {"overlayTemplateNumber",1616}, - {"typeOfLevel",2330}, - {"NL",187}, + {"centreLongitudeInDegrees",413}, + {""}, {""}, {""}, + {"runwayState",1944}, + {""}, {""}, {""}, + {"parameterDiscipline",1709}, {""}, {"datumSize",665}, - {""}, - {"validityDateTime",2409}, - {"centreLongitudeInDegrees",414}, - {""}, {""}, {""}, - {"secondOfForecast",2019}, - {"multiplicationFactorForLatLong",1365}, - {""}, - {"createNewData",628}, - {""}, {""}, {""}, {""}, - {"typeOfStatisticalPostProcessingOfEnsembleMembers",2342}, - {""}, {""}, - {"typeOfStatisticalProcessing",2343}, - {""}, {""}, {""}, - {"levTypeName",1139}, - {""}, {""}, {""}, - {"yearOfReference",2512}, - {""}, - {"minuteOfForecast",1330}, - {""}, {""}, {""}, - {"observedData",1534}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"overlayTemplate",1622}, {""}, {""}, {""}, {""}, {""}, - {"marsKeywords",1257}, + {"typeOfTile",2362}, {""}, {""}, {""}, - {"southernLatitudeOfDomain",2158}, + {"localDecimalScaleFactor",1171}, + {"levelType",1143}, + {"laplacianOperatorIsSet",1083}, + {""}, + {"activity",298}, + {"secondSize",2035}, + {""}, {""}, {""}, {""}, {""}, + {"categoryType",390}, + {""}, + {"localFlag",1178}, + {""}, {""}, + {"subSetK",2229}, + {""}, + {"firstDimension",868}, + {""}, + {"lengthDescriptors",1129}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"conceptsLocalDirAll",574}, + {""}, {""}, + {"generatingProcessTemplate",914}, + {""}, + {"anoffsetLast",320}, + {""}, {""}, + {"JS",93}, + {"gridDefinition",931}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"angleDivisor",311}, + {""}, {"firstSize",876}, - {""}, - {"listOfScaledFrequencies",1162}, - {"qnh",1796}, + {"rdbDateTime",1823}, + {"validityTime",2430}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sectionPosition",2086}, - {""}, {""}, {""}, {""}, - {"forecastPeriod",888}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"legNumber",1126}, - {""}, {""}, - {"rectimeSecond",1837}, - {"windPresent",2474}, - {""}, {""}, {""}, {""}, - {"defaultParameter",681}, {""}, {""}, {""}, {""}, {""}, - {"crraSection",630}, + {"waveDomain",2472}, + {""}, + {"datasetForLocal",652}, {""}, {""}, {""}, {""}, {""}, - {"totalNumber",2288}, + {"dateOfForecast",656}, {""}, {""}, {""}, - {"hourOfReference",969}, + {"timeOfForecast",2290}, + {""}, {""}, + {"bottomLevel",378}, + {"longitudinalDirectionGridLength",1236}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"uerraSection",2366}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"optimisationTime",1592}, - {""}, - {"generatingProcessTemplateNumber",914}, - {""}, - {"J",93}, - {""}, - {"section6",2068}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"stepTypeForConversion",2199}, - {""}, {""}, {""}, - {"numberOfFloats",1444}, - {""}, {""}, - {"representationType",1856}, - {"extraDim",812}, - {""}, - {"oceanLevName",1537}, - {"monthOfReference",1359}, - {""}, {""}, - {"localDefinitionNumber",1173}, - {""}, {""}, {""}, {""}, {""}, - {"epsStatisticsPoint",789}, - {"atmosphericChemicalOrPhysicalConstituentType",324}, - {"localSection",1189}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"expver",810}, - {""}, {""}, - {"waveLevType",2454}, - {""}, {""}, - {"xFirst",2496}, - {""}, {""}, {""}, {""}, - {"forecastPeriodTo",890}, - {""}, - {"orderOfSpatialDifferencing",1597}, - {""}, {""}, - {"scaleFactorOfStandardDeviation",1963}, - {""}, - {"scaleFactorOfSecondSize",1961}, - {"longitudeOfGridPoints",1212}, - {"standardParallelInDegrees",2178}, - {""}, {""}, - {"expoffset",809}, - {""}, - {"originalParameterNumber",1604}, - {""}, {""}, {""}, - {"clusterSize",552}, - {""}, - {"scaleFactorOfStandardDeviationInTheCluster",1964}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"tiggeSection",2262}, - {""}, {""}, {""}, - {"siteId",2137}, - {"latitudeOfCentrePointInDegrees",1094}, - {""}, {""}, {""}, {""}, - {"marsIdent",1256}, - {"boustrophedonicOrdering",381}, - {"faLevelName",856}, - {""}, {""}, {""}, - {"xLast",2497}, - {""}, {""}, {""}, - {"typeOfStatisticalProcessingForTimeRangeForReferencePeriod",2344}, - {"waveDirectionNumber",2451}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"selectedDay",2108}, - {"indexTemplate",991}, - {"neitherPresent",1377}, - {"paramId",1693}, - {""}, {""}, {""}, - {"dewPointTemperature",698}, - {"indexingTime",995}, - {""}, {""}, {""}, - {"rdbSubtype",1815}, - {""}, {""}, {""}, {""}, - {"numberOfTimeSteps",1511}, - {""}, {""}, {""}, {""}, - {"iIncrement",978}, - {"scaleFactorOfFirstSize",1950}, - {""}, {""}, {""}, {""}, - {"angleOfRotationOfProjection",316}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalSecond",2358}, + {"localDay",1170}, + {""}, + {"matchTimeRepres",1288}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"auxiliary",326}, - {"significanceOfReferenceTime",2132}, - {""}, {""}, {""}, - {"defaultShortName",683}, - {""}, {""}, {""}, - {"numberingOrderOfDiamonds",1527}, - {"angleOfRotationInDegrees",315}, - {""}, {""}, - {"expandedTypes",802}, - {""}, {""}, - {"numberOfRadials",1493}, - {""}, {""}, {""}, - {"postProcessing",1736}, + {"oldSubtype",1583}, {""}, {""}, {""}, {""}, - {"numberOfSection",1501}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"systemNumber",2230}, - {""}, - {"methodNumber",1323}, - {""}, - {"modelIdentifier",1348}, - {"frequency",900}, - {""}, - {"probPoint",1771}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"defaultTypeOfLevel",685}, - {""}, {""}, - {"numberOfSubsets",1506}, - {""}, - {"dataRepresentation",641}, - {"numberOfDirections",1434}, - {""}, {""}, - {"clusteringMethod",554}, - {""}, {""}, - {"dataValues",650}, - {""}, - {"defaultFaFieldName",677}, - {"changingPrecision",429}, - {""}, {""}, {""}, {""}, - {"treatmentOfMissingData",2304}, - {""}, - {"inputDelayedDescriptorReplicationFactor",1007}, - {""}, {""}, - {"SPD",229}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"derivedForecast",693}, {""}, {""}, {""}, - {"trueLengthOfLastGroup",2306}, - {""}, {""}, - {"headersOnly",952}, + {"localDefinition",1174}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDiamonds",1433}, - {""}, {""}, - {"numberOfStatisticallyProcessedFieldsForLocalTime",1504}, - {""}, {""}, - {"horizontalCoordinateSupplement",959}, - {""}, {""}, {""}, {""}, - {"matchLandType",1284}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Nb",195}, + {"generatingProcessIdentifier",913}, {""}, {""}, - {"averagingPeriod",330}, + {"anoffsetFirst",318}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Nr",200}, + {""}, {""}, {""}, {""}, + {"originalSubCentreIdentifier",1613}, + {"Ni",198}, + {""}, {""}, {""}, {""}, + {"northernLatitudeOfDomain",1396}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"productDefinition",1778}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondDimension",2013}, + {"lowerRange",1238}, + {"setDecimalPrecision",2128}, {""}, - {"forecastPeriodFrom",889}, + {"groupSplitting",943}, + {""}, {""}, + {"Nside",203}, + {"generatingProcessIdentificationNumber",912}, {""}, {""}, {""}, {""}, {""}, {""}, - {"masterTableNumber",1279}, - {"simpleThinningSkip",2134}, - {""}, {""}, {""}, {""}, {""}, - {"referencePeriodList",1846}, + {"freeFormData",900}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfCentrePoint",1207}, + {""}, {""}, {""}, + {"clusterSize",551}, + {""}, {""}, {""}, + {"incrementOfLengths",991}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endOfRange",770}, + {""}, {""}, + {"reservedOctet",1872}, + {""}, + {"lcwfvSuiteName",1123}, {""}, {""}, {""}, {""}, - {"siteLongitude",2139}, - {"marsLongitude",1263}, - {""}, {""}, - {"optimizeScaleFactor",1593}, - {"horizontalCoordinateDefinition",958}, + {"southernLatitudeOfDomain",2167}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"parameterName",1711}, {""}, - {"numberOfFrequencies",1451}, - {""}, - {"ccccIdentifiers",393}, + {"hourOfForecast",967}, {""}, {""}, - {"floatVal",883}, + {"marsLevelist",1264}, + {""}, + {"NL",186}, + {"anoffsetFrequency",319}, + {"verticalDomainTemplate",2458}, + {"suiteName",2233}, + {""}, {""}, {""}, + {"bufrTemplate",384}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localLatitude",1179}, + {"tileName",2282}, {""}, {""}, {""}, {""}, - {"computeLaplacianOperator",569}, - {"typeOfRelationToReferenceDataset",2338}, - {"centreLatitude",411}, + {"decimalScaleFactor",676}, {""}, - {"firstLatitude",871}, - {"dayOfStartOfReferencePeriod",673}, + {"integerScaleFactor",1018}, + {"J",92}, + {"typicalDay",2372}, + {""}, + {"marsParam",1267}, + {""}, + {"marsKeywords",1259}, + {"newSubtype",1383}, + {""}, {""}, {""}, + {"analysisOffsets",310}, + {""}, + {"modelName",1351}, + {""}, {""}, {""}, + {"LaR",106}, + {""}, {""}, {""}, + {"monthOfForecast",1358}, + {"typeOfLevel",2347}, + {"cfName",417}, + {"gridName",936}, + {"latitudeOfCentrePoint",1094}, + {"localTimeForecastList",1196}, + {""}, {""}, {""}, {""}, + {"referenceOfLengths",1853}, + {""}, {""}, + {"yearOfForecast",2529}, + {""}, {""}, {""}, + {"LoR",127}, + {""}, + {"epsPoint",787}, + {"rdbtimeDay",1829}, + {""}, {""}, + {"controlForecastCluster",586}, + {"longitudeSexagesimal",1233}, + {""}, + {"shortName",2135}, + {""}, + {"Nassigned",193}, + {""}, + {"scaledDirections",1981}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"defaultStepUnits",684}, + {""}, {""}, {""}, {""}, + {"realPart",1836}, + {"integerScalingFactorAppliedToDirections",1019}, + {"integerScalingFactorAppliedToFrequencies",1020}, + {""}, {""}, {""}, + {"Nf",197}, + {"qfe",1802}, + {""}, {""}, {""}, {""}, + {"gridDefinitionSection",933}, + {""}, + {"NT",190}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"changeDecimalPrecision",424}, - {""}, - {"referenceValue",1850}, - {""}, - {"dataRepresentationTemplate",642}, - {""}, - {"secondLatitude",2016}, + {"ifsParam",988}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"defaultFaLevelName",678}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"charValues",433}, - {""}, {""}, {""}, {""}, - {"applicationIdentifier",322}, - {""}, {""}, {""}, {""}, - {"secondOfForecastUsedInLocalTime",2020}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"inputDataPresentIndicator",1006}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"satelliteIdentifier",1939}, - {"perturbedType",1724}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"sequences",2125}, + {"editionNumber",739}, {""}, {""}, {""}, {""}, {""}, - {"minuteOfForecastUsedInLocalTime",1331}, + {"minuteOfReference",1335}, + {""}, {""}, {""}, + {"multiplicationFactorForLatLong",1367}, + {""}, + {"quantile",1812}, + {""}, {""}, {""}, {""}, {""}, + {"dateOfReference",661}, + {""}, {""}, {""}, + {"timeOfReference",2293}, + {""}, + {"rdbSubtype",1824}, + {""}, {""}, {""}, {""}, + {"overlayTemplateNumber",1623}, + {""}, + {"sectionNumber",2094}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"masterTableNumber",1281}, + {"climatologicalRegime",438}, + {""}, + {"numberOfTimeSteps",1516}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"qnh",1805}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"trueLengthOfLastGroup",2323}, + {""}, {""}, {""}, + {"visibility",2462}, + {"minuteOfForecast",1332}, + {""}, {""}, {""}, + {"validityDate",2428}, + {""}, {""}, {""}, {""}, + {"secondOfForecast",2028}, + {"observedData",1541}, + {""}, {""}, + {"numberOfFloats",1449}, + {""}, {""}, {""}, {""}, + {"gridDefinitionDescription",932}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"Adelta",13}, - {""}, {""}, {""}, - {"indexingDate",994}, + {""}, {""}, {""}, {""}, + {"numberOfDirections",1439}, + {""}, + {"defaultName",680}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pvlLocation",1792}, - {"endOfProduct",770}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"iDirectionIncrement",974}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterNumber",550}, + {""}, + {"optimizeScaleFactor",1600}, + {""}, {""}, {""}, + {"longitudeOfGridPoints",1214}, {""}, {""}, {""}, {""}, - {"versionNumOfFilesFreeSpaceStorage",2429}, - {""}, - {"dataRepresentationType",644}, + {"rectimeSecond",1846}, + {""}, {""}, + {"isAuto",1027}, + {""}, {""}, + {"crraSection",630}, {""}, {""}, {""}, - {"dataRepresentationTemplateNumber",643}, + {"uerraSection",2384}, {""}, {""}, {""}, {""}, - {"rdbtimeSecond",1824}, - {""}, {""}, - {"tubeNumber",2313}, - {"simpleThinningStart",2135}, - {""}, {""}, {""}, - {"partitionItems",1708}, - {"offsetSection6",1568}, + {"numberingOrderOfDiamonds",1534}, {""}, {""}, {""}, {""}, - {"coordinate3OfLastGridPoint",600}, - {"numberOfForcasts",1445}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"energyNorm",779}, + {"channelNumber",430}, + {""}, {""}, {""}, {""}, {""}, + {"dayOfForecast",669}, + {""}, + {"localDefinitionNumber",1175}, + {""}, + {"numberOfSection",1506}, {""}, {""}, {""}, - {"totalNumberOfdimensions",2303}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfLocalDefinitions",1461}, - {""}, {""}, - {"internalVersion",1021}, - {"FirstLatitude",67}, - {""}, {""}, - {"tableNumber",2234}, - {""}, {""}, {""}, - {"isAuto",1026}, - {"correction1Part",615}, - {""}, {""}, {""}, {""}, {""}, - {"corr4Data",612}, - {""}, - {"stretchingFactor",2205}, - {""}, - {"temperatureAndDewpointPresent",2245}, - {"scaleFactorOfFirstFixedSurface",1949}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ensembleForecastNumbers",781}, - {""}, - {"verificationDate",2424}, - {"SecondLatitude",230}, - {""}, - {"P",213}, - {"localLongitude",1182}, - {"codedValues",562}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfForecastsInTube",1449}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"expandedNames",797}, - {""}, {""}, {""}, {""}, {""}, - {"orientationOfTheGrid",1600}, - {""}, {""}, {""}, {""}, {""}, - {"stretchingFactorScaled",2206}, - {""}, - {"bitmapSectionPresent",375}, - {"scaleFactorOfSecondFixedSurface",1960}, - {"listOfDistributionFunctionParameter",1158}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"observablePropertyTemplate",1529}, - {""}, {""}, {""}, {""}, {""}, - {"corr3Data",611}, - {"formatForLongs",896}, - {""}, - {"climateDateFrom",437}, + {"spectralDataRepresentationMode",2180}, {""}, {""}, {""}, {""}, - {"subSetK",2218}, + {"hourOfReference",970}, + {""}, + {"optimisationTime",1599}, {""}, {""}, {""}, - {"widthOfFirstOrderValues",2460}, + {"defaultParameter",681}, + {""}, {""}, {""}, + {"computeLaplacianOperator",569}, + {""}, + {"listOfScaledFrequencies",1163}, + {""}, + {"forecastPeriod",889}, + {""}, + {"waveLevType",2474}, + {""}, {""}, + {"numberOfSubsets",1511}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfLocalDefinitions",1466}, + {""}, {""}, {""}, + {"standardParallel",2186}, + {""}, {""}, {""}, {""}, {""}, {"dataAccessors",634}, - {""}, {""}, {""}, - {"memberNumber",1319}, - {""}, {""}, {""}, {""}, {""}, - {"yDirectionGridLength",2500}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfTubes",2299}, - {""}, {""}, - {"longitudeOfIcosahedronPole",1213}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitOfOffsetFromReferenceTime",2369}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"secondsOfReference",2036}, - {""}, {""}, {""}, - {"scaleFactorOfRadiusOfSphericalEarth",1959}, - {"floatValues",884}, - {""}, - {"totalNumberOfQuantiles",2296}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfDistributionFunction",2321}, - {""}, {""}, {""}, {""}, {""}, - {"observablePropertyTemplateNumber",1530}, - {""}, - {"expandedDescriptors",796}, - {"levelIndicator",1141}, - {""}, - {"missingDataFlag",1337}, - {"diagnosticNumber",700}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"isEps",1035}, {""}, {""}, {""}, {""}, - {"numberOfDistinctSection9s",1441}, - {""}, {""}, {""}, - {"numberOfDistinctSection8s",1440}, - {""}, {""}, - {"stringValues",2207}, - {""}, {""}, {""}, {""}, {""}, - {"orderOfSPD",1596}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"globalDomain",919}, + {"typeOfStatisticalPostProcessingOfEnsembleMembers",2359}, + {"nTileAtt",1371}, {""}, {""}, {""}, {""}, - {"tablesVersion",2238}, - {"numberOfReferencePeriodTimeRanges",1494}, + {"Ny",208}, + {"angleOfRotation",313}, + {"horizontalCoordinateDefinition",959}, + {"horizontalCoordinateSupplement",960}, {""}, - {"scaleFactorAtReferencePoint",1942}, - {"endOfInterval",768}, + {"monthOfReference",1361}, + {""}, + {"XR",271}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfOperationalForecastTube",1472}, - {""}, {""}, - {"unitOfTimeIncrement",2371}, - {""}, {""}, {""}, {""}, {""}, - {"realization",1829}, - {"diffInDays",701}, - {"scanPosition",2003}, - {""}, {""}, - {"stepTypeInternal",2200}, - {""}, {""}, {""}, {""}, - {"lengthOfProjectLocalTemplate",1135}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfReservedBytes",1498}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TAFstr",237}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfRepetitions",2297}, - {""}, {""}, {""}, {""}, {""}, - {"verticalDomainTemplateNumber",2439}, - {""}, - {"qnhPresent",1798}, - {""}, - {"qfePresent",1794}, - {""}, {""}, {""}, {""}, - {"monthlyVerificationTime",1363}, - {""}, - {"totalNumberOfDirections",2291}, - {"identificationNumber",982}, - {""}, - {"destineLocalVersion",695}, - {""}, - {"section9Pointer",2081}, - {"levelValues",1143}, - {"falseNorthing",860}, - {""}, - {"section8Pointer",2078}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfTimeIncrement",2345}, - {""}, - {"secondDimensionPhysicalSignificance",2015}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"indexTemplateNumber",992}, - {""}, {""}, - {"subSetJ",2217}, - {""}, {""}, - {"angleSubdivisions",317}, - {"Xo",274}, - {""}, {""}, {""}, {""}, {""}, - {"sampleSizeOfReferencePeriod",1937}, - {""}, - {"centuryOfReference",416}, - {""}, - {"scalingFactorForFrequencies",2002}, - {""}, {""}, {""}, - {"Xp",275}, - {""}, {""}, {""}, - {"gridDefinitionTemplateNumber",933}, - {"cfVarName",421}, - {""}, - {"correction4Part",621}, - {""}, - {"ensembleStandardDeviation",784}, - {"molarMass",1352}, - {""}, {""}, {""}, {""}, - {"longitudeOfFirstGridPoint",1210}, - {"totalNumberOfFrequencies",2293}, + {"yearOfReference",2532}, + {"typeOfStatisticalProcessing",2360}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsEndStep",1251}, + {"indicatorOfUnitOfTimeRange",1006}, {""}, {""}, {""}, {""}, - {"marsModel",1264}, - {""}, - {"dayOfReference",672}, + {"modeNumber",1347}, + {"Ncy",196}, + {"dataValues",650}, + {"numberOfFrequencies",1456}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Nuy",206}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"uuidOfDataGroup",2424}, + {""}, {""}, {""}, {""}, + {"validityDateTime",2429}, + {"localSection",1191}, + {""}, {""}, {""}, {""}, {""}, + {"minuteOfForecastUsedInLocalTime",1333}, + {"numberOfDiamonds",1438}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondOfForecastUsedInLocalTime",2029}, + {"tiggeSection",2273}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"forecastPeriodTo",891}, + {"probPoint",1780}, + {""}, + {"latitudeOfCentrePointInDegrees",1095}, + {""}, + {"originalParameterNumber",1611}, + {"referenceValue",1859}, + {"boustrophedonicOrdering",380}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"experiment",804}, + {""}, {""}, {""}, {""}, {""}, + {"oceanLevName",1544}, + {""}, + {"iteratorDisableUnrotate",1061}, + {""}, {""}, + {"sectionPosition",2095}, + {"xLast",2517}, + {""}, + {"maximum",1293}, + {"yDirectionGridLength",2520}, + {""}, {""}, + {"atmosphericChemicalOrPhysicalConstituentType",323}, + {""}, {""}, + {"iDirectionIncrement",975}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"totalNumber",2303}, + {""}, + {"spectralDataRepresentationType",2181}, + {""}, {""}, + {"charValues",432}, + {""}, + {"epsStatisticsPoint",789}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"applicationIdentifier",321}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"legNumber",1127}, + {"windPresent",2494}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfStatisticallyProcessedFieldsForLocalTime",1509}, + {""}, + {"significanceOfReferenceTime",2141}, + {""}, {""}, + {"angleOfRotationInDegrees",314}, + {""}, {""}, + {"neitherPresent",1382}, + {""}, + {"faFieldName",855}, + {""}, {""}, + {"pvlLocation",1801}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"orderOfSpatialDifferencing",1604}, + {""}, + {"faLevelName",856}, + {"floatVal",883}, + {""}, {""}, {""}, {""}, + {"stepTypeForConversion",2209}, + {""}, {""}, + {"changingPrecision",428}, + {"numberOfRadials",1498}, + {"typicalSecond",2376}, + {""}, {""}, {""}, + {"scaleFactorOfSecondSize",1970}, + {""}, + {"standardParallelInDegrees",2187}, + {"defaultTypeOfLevel",685}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"groupLeafNodeK",941}, + {""}, {""}, + {"productDefinition",1787}, + {""}, {""}, {""}, + {"rdbtimeSecond",1833}, + {"clusteringMethod",553}, + {""}, + {"siteId",2146}, + {""}, + {"paramId",1700}, + {""}, + {"referencePeriodList",1855}, + {"TAFstr",236}, + {"marsIdent",1258}, + {""}, + {"numberOfForcasts",1450}, + {"methodNumber",1325}, + {""}, {""}, {""}, {""}, + {"subSetJ",2228}, + {"frequency",901}, + {""}, {""}, + {"observablePropertyTemplate",1536}, + {""}, {""}, {""}, {""}, {""}, + {"ensembleForecastNumbers",781}, + {""}, {""}, {""}, {""}, + {"iIncrement",979}, + {""}, {""}, + {"typeOfStatisticalProcessingForTimeRangeForReferencePeriod",2361}, + {""}, {""}, + {"Nb",194}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"expoffset",809}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"unitOfTimeIncrement",2389}, + {""}, {""}, {""}, {""}, + {"scaleFactorOfStandardDeviation",1972}, + {""}, + {"numberOfForecastsInTube",1454}, + {""}, {""}, + {"SPD",228}, + {""}, {""}, + {"dewPointTemperature",697}, + {""}, {""}, + {"formatForLongs",897}, + {"observablePropertyTemplateNumber",1537}, + {""}, {""}, + {"scaleFactorOfStandardDeviationInTheCluster",1973}, + {"simpleThinningSkip",2143}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"ensembleForecastNumbersList",782}, - {""}, {""}, {""}, - {"longitudeOfStretchingPole",1222}, - {""}, - {"tableReference",2235}, + {""}, {""}, + {"extraDim",812}, + {"realization",1838}, + {"firstLatitude",871}, {""}, {""}, {""}, {""}, - {"dx",726}, - {""}, {""}, {""}, - {"numberOfForecastsUsedInLocalTime",1450}, - {"PLPresent",216}, - {"max",1289}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"productDefinitionTemplateNumber",1779}, + {"treatmentOfMissingData",2321}, {""}, {""}, {""}, {""}, {""}, - {"orientationOfTheGridInDegrees",1601}, - {""}, {""}, {""}, {""}, {""}, - {"offsetFreeFormData",1556}, - {""}, {""}, {""}, {""}, {""}, - {"isAccumulation",1025}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sizeOfOffsets",2141}, + {"forecastPeriodFrom",890}, {""}, - {"localDefNumberTwo",1171}, + {"powerOfTenUsedToScaleClimateWeight",1746}, {""}, - {"userTimeEnd",2403}, - {"unsignedIntegers",2388}, - {"monthlyVerificationDate",1361}, + {"scaleFactorOfFirstSize",1959}, + {""}, + {"secondDimension",2022}, + {""}, + {"destineLocalVersion",694}, + {"averagingPeriod",329}, + {""}, + {"postProcessing",1745}, + {"marsLongitude",1265}, + {"internalVersion",1022}, {""}, {""}, {""}, - {"decimalPrecision",675}, - {"DiInDegrees",32}, - {"subcentreOfAnalysis",2220}, - {"secondOrderFlags",2023}, - {"productDefinitionTemplateNumberInternal",1780}, - {"meaningOfVerticalCoordinate",1318}, - {"numberOfPartitions",1476}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"nosigPresent",1392}, - {""}, {""}, {""}, {""}, - {"dateOfForecastRun",657}, - {"gridPointPosition",936}, - {""}, {""}, {""}, - {"typeOfPostProcessing",2334}, - {""}, - {"iterationNumber",1059}, - {"dimensionNumber",704}, - {"latitudeOfGridPoints",1097}, - {"parameterNumber",1704}, - {""}, {""}, {""}, - {"g2grid",907}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"clutterFilterIndicator",555}, - {""}, {""}, {""}, {""}, {""}, - {"latLonValues",1087}, - {"scaleFactorOfDistributionFunctionParameter",1946}, - {"partitionNumber",1709}, - {"widthOfSPD",2462}, - {""}, {""}, {""}, - {"siteElevation",2136}, - {""}, {""}, - {"theMessage",2249}, - {""}, {""}, {""}, - {"extractSubset",843}, - {""}, {""}, {""}, - {"directionNumber",707}, - {"operatingMode",1590}, - {"periodOfTimeIntervals",1722}, - {""}, {""}, - {"radialAngularSpacing",1805}, - {"satelliteNumber",1940}, - {"section0Pointer",2039}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"TAF",236}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"perturbationNumber",1723}, - {""}, {""}, {""}, {""}, - {"tiggeModel",2261}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"eastLongitudeOfCluster",733}, - {""}, {""}, - {"correction3",618}, - {"representationMode",1855}, - {""}, {""}, {""}, {""}, - {"coordinate3Flag",598}, - {"angleMultiplier",313}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DyInDegrees",43}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"userDateEnd",2399}, - {""}, {""}, {""}, - {"northLatitudeOfCluster",1384}, - {""}, {""}, - {"MS",159}, - {"clusterMember9",550}, - {""}, {""}, {""}, - {"latitudeOfStretchingPole",1107}, - {""}, {""}, - {"unitsOfSecondFixedSurface",2382}, - {"clusterMember8",549}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"complexPacking",566}, - {""}, {""}, - {"NP",188}, - {"spatialProcessing",2169}, - {"localMinute",1185}, - {"corr2Data",610}, - {""}, - {"spectralMode",2173}, - {""}, {""}, - {"numberOfRemaininChars",1496}, - {""}, {""}, - {"libraryVersion",1148}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Dx",39}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"NAT",175}, - {""}, - {"scanningMode",2004}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"groupLeafNodeK",940}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfLastGridPoint",1214}, - {""}, {""}, {""}, {""}, {""}, - {"southLatitudeOfCluster",2154}, - {"localMonth",1186}, - {"scanningMode8",2009}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetAfterPadding",1545}, - {""}, - {"sensitiveAreaDomain",2115}, - {""}, - {"oneMillionConstant",1579}, - {""}, {""}, {""}, - {"iScansNegatively",979}, - {""}, {""}, {""}, {""}, {""}, - {"localDefNumberOne",1170}, - {""}, - {"interpretationOfNumberOfPoints",1023}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"totalNumberOfTileAttributePairs",2298}, - {""}, - {"binaryScaleFactor",371}, - {""}, {""}, {""}, - {"internationalDataSubCategory",1022}, - {""}, {""}, - {"baseAddress",336}, - {""}, {""}, {""}, {""}, {""}, - {"westLongitudeOfCluster",2456}, - {""}, - {"Lx",152}, - {""}, {""}, {""}, - {"biFourierTruncationType",370}, - {""}, {""}, {""}, {""}, {""}, - {"minutesAfterDataCutoff",1335}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"tablesVersionLatest",2239}, - {""}, - {"isConstant",1032}, - {""}, {""}, {""}, {""}, - {"userDateTimeEnd",2401}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfRows",1499}, - {""}, - {"heightOrPressureOfLevel",954}, - {"earthMinorAxis",731}, - {"streamOfAnalysis",2204}, - {""}, {""}, - {"Lcx",118}, - {""}, {""}, {""}, {""}, {""}, - {"localSectionPresent",1190}, - {"marsClass",1246}, - {""}, {""}, {""}, - {"scaleFactorOfLowerLimit",1954}, - {""}, - {"section_8",2105}, - {""}, - {"thisMarsType",2253}, - {""}, {""}, - {"earthIsOblate",728}, - {""}, {""}, - {"is_uerra",1053}, - {""}, - {"longitudeOfCentrePointInDegrees",1206}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"outerLoopLengthOfTimeRange",1612}, - {""}, {""}, - {"yearOfStartOfReferencePeriod",2513}, - {""}, {""}, {""}, - {"Lux",148}, - {"thisMarsStream",2252}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"is_aerosol",1045}, - {""}, {""}, {""}, {""}, {""}, - {"formatForDoubles",895}, - {"offsetAfterLocalSection",1544}, - {""}, {""}, {""}, - {"marsLamModel",1259}, - {"ITN",92}, - {""}, - {"timeIncrement",2272}, - {"additionalFlagPresent",302}, - {""}, {""}, {""}, {""}, - {"scaledValueOfStandardDeviation",1994}, - {""}, - {"scaledValueOfSecondSize",1992}, - {""}, {""}, - {"numberOfDistinctSection6s",1438}, - {""}, - {"minuteOfAnalysis",1328}, - {""}, - {"plusOneinOrdersOfSPD",1731}, - {""}, - {"parameterCode",1700}, - {"short_name",2129}, - {"ecpt_model",737}, - {""}, - {"scaledValueOfStandardDeviationInTheCluster",1995}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"siteLongitude",2148}, {""}, {"Azi",15}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle3",530}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"createNewData",628}, {""}, - {"bitmapPresent",374}, - {"_T",290}, - {""}, {""}, {""}, {""}, {""}, - {"tigge_name",2264}, - {""}, {""}, - {"cnmc_isac",557}, - {""}, {""}, - {"numberOfIterations",1459}, - {""}, {""}, - {"isHindcast",1038}, - {"grib3divider",924}, - {"latitudeLastInDegrees",1090}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"hourOfStartOfReferencePeriod",970}, - {"windVariableDirection",2485}, - {""}, {""}, - {"extraDimensionPresent",813}, - {""}, {""}, {""}, {""}, - {"LaDInDegrees",106}, - {""}, - {"_endStep",293}, - {""}, {""}, - {"local_use",1199}, - {""}, {""}, - {"XR",272}, - {""}, - {"scaledValueOfFirstSize",1981}, - {""}, - {"efas_model",741}, - {"defaultSequence",682}, - {""}, {""}, - {"totalNumberOfForecastProbabilities",2292}, - {"gts_header",949}, - {""}, {""}, {""}, {""}, {""}, - {"representativeMember",1857}, + {"codedValues",561}, {""}, {""}, {""}, - {"dayOfAnalysis",667}, + {"systemNumber",2241}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"expver",810}, + {""}, + {"levTypeName",1140}, + {""}, + {"indexingTime",996}, + {""}, {""}, {""}, {""}, {""}, + {"isAccumulation",1026}, + {""}, {""}, + {"changeDecimalPrecision",423}, + {""}, {""}, {""}, {""}, + {"dataRepresentation",641}, + {"tubeNumber",2330}, + {"centreLatitude",410}, + {"generatingProcessTemplateNumber",915}, + {"numberOfForecastsUsedInLocalTime",1455}, + {""}, + {"sizeOfOffsets",2150}, + {"xFirst",2516}, + {""}, {""}, {""}, {""}, + {"localLatitude",1181}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"bitmapSectionPresent",374}, + {"tablesVersion",2249}, + {""}, {""}, {""}, {""}, {""}, + {"longitudeOfIcosahedronPole",1215}, + {"listOfDistributionFunctionParameter",1159}, + {""}, + {"endOfProduct",769}, + {""}, {""}, + {"secondLatitude",2025}, + {""}, {""}, {""}, + {"modelIdentifier",1350}, + {""}, + {"numberOfOperationalForecastTube",1477}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"inputDataPresentIndicator",1007}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"defaultShortName",683}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oneConstant",1578}, + {"radialAngularSpacing",1814}, {""}, - {"tileClassification",2266}, - {""}, - {"observationGeneratingProcessIdentifier",1532}, - {""}, - {"section6Pointer",2070}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cnmc_cmcc",556}, - {"modelVersionTime",1351}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"is_uerra",1054}, {""}, {""}, {""}, - {"Nx",208}, - {""}, - {"localTimeMethod",1195}, - {"_anoffset",292}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"is_chemical",1047}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"addressOfFileFreeSpaceInfo",304}, - {"endDayTrend3",749}, - {""}, - {"verticalVisibility",2440}, - {"versionNumOfRootGroupSymbolTableEntry",2430}, - {""}, - {"is_localtime",1050}, - {"integerValues",1020}, - {""}, - {"calendarIdPresent",387}, - {"missingValue",1338}, + {"ccccIdentifiers",392}, {""}, {""}, {""}, - {"numberOfVerticalPoints",1522}, - {"section_09",2095}, - {""}, {""}, - {"defaultStepUnits",684}, + {"tableNumber",2245}, {""}, - {"iScansPositively",980}, - {"scaledFrequencies",1973}, - {""}, - {"section_08",2094}, - {"Ncx",196}, - {""}, {""}, - {"parameterIndicator",1702}, - {"monthOfStartOfReferencePeriod",1360}, + {"scaleFactorOfLowerLimit",1963}, {""}, {""}, {""}, {""}, {""}, - {"tiggeCentre",2258}, + {"unitOfOffsetFromReferenceTime",2387}, + {"typeOfTimeIncrement",2363}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NDSP",180}, - {""}, {""}, - {"numericValues",1528}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfVerticalCoordinateValues",1520}, - {""}, {""}, {""}, {""}, - {"localHour",1178}, - {""}, - {"calendarIdentification",388}, - {""}, {""}, - {"Nux",206}, - {"rectimeHour",1835}, - {""}, {""}, - {"offsetAfterCentreLocalSection",1542}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NFSP",182}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitsOfFirstFixedSurface",2381}, - {"startOfMessage",2182}, - {""}, {""}, {""}, {""}, - {"numberOfVerticalGridDescriptors",1521}, - {""}, - {"corr1Data",609}, - {""}, {""}, - {"jdSelected",1070}, - {""}, {""}, {""}, {""}, - {"numberOfInts",1458}, - {""}, {""}, - {"endOfFileAddress",766}, + {"verificationDate",2444}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"floatValues",884}, + {"memberNumber",1321}, + {"N",171}, {""}, {""}, {""}, - {"section4Padding",2061}, - {""}, {""}, {""}, - {"roundedMarsLongitude",1882}, + {"indexTemplate",992}, {""}, - {"modelVersionDate",1350}, + {"inputDelayedDescriptorReplicationFactor",1008}, {""}, {""}, {""}, - {"conceptsLocalMarsDirAll",576}, - {""}, {""}, - {"_TS",291}, - {""}, {""}, - {"xDirectionGridLength",2493}, - {"extractSubsetList",846}, + {"offsetAfterPadding",1552}, {""}, - {"extraValues",816}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"targetCompressionRatio",2241}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"indicatorOfUnitOfTimeRange",1005}, - {""}, {""}, {""}, {""}, - {"centuryOfReferenceTimeOfData",417}, - {"extractedDateTimeNumberOfSubsets",848}, - {""}, {""}, - {"conceptsMasterDir",577}, - {"roundedMarsLatitude",1880}, - {"typeOfEnsembleForecast",2322}, + {"minutesAfterDataCutoff",1337}, {""}, {""}, {""}, {""}, {""}, {""}, - {"forecastProbabilityNumber",891}, + {"section_8",2114}, + {""}, {""}, {""}, + {"temperatureAndDewpointPresent",2256}, {""}, {""}, - {"tablesVersionLatestOfficial",2240}, - {"accumulationInterval",296}, + {"cnmc_isac",556}, + {""}, + {"expandedTypes",802}, + {""}, {""}, {""}, {""}, + {"stringValues",2218}, + {"short_name",2138}, + {"baseAddress",335}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"latLonValues",1088}, + {""}, {""}, + {"simpleThinningStart",2144}, + {""}, {""}, + {"TAF",235}, + {""}, {""}, + {"typeOfDistributionFunction",2338}, + {""}, {""}, {""}, + {"_T",289}, + {""}, {""}, + {"cnmc_cmcc",555}, + {""}, {""}, {""}, + {"offsetAfterLocalSection",1551}, + {""}, {""}, + {"defaultFaLevelName",678}, + {""}, {""}, {""}, + {"SecondLatitude",229}, + {""}, {""}, {""}, + {"FirstLatitude",66}, + {"correction4Part",621}, + {""}, + {"NR",188}, {""}, {""}, {""}, {""}, {""}, - {"section3Padding",2056}, + {"dataRepresentationTemplate",642}, + {"_endStep",292}, + {""}, + {"stretchingFactor",2216}, + {""}, {""}, {""}, {""}, {""}, + {"waveDirectionNumber",2471}, + {""}, + {"numberOfDistinctSection9s",1446}, + {""}, {""}, {""}, {""}, {""}, + {"section_09",2104}, {""}, {""}, - {"faModelName",857}, - {"referenceReflectivityForEchoTop",1847}, + {"angleOfRotationOfProjection",315}, + {""}, {""}, + {"tigge_name",2275}, + {"_anoffset",291}, + {""}, + {"dimensionType",704}, + {"meaningOfVerticalCoordinate",1320}, + {"ecpt_model",736}, + {""}, + {"gts_header",950}, + {"is_aerosol",1046}, + {"numberOfDistinctSection8s",1445}, + {""}, + {"auxiliary",325}, + {""}, + {"sensitiveAreaDomain",2124}, + {""}, {""}, {""}, {""}, + {"satelliteIdentifier",1948}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"orientationOfTheGrid",1607}, + {""}, {""}, + {"P",212}, + {"dataRepresentationTemplateNumber",643}, + {""}, + {"isEps",1036}, + {"section_08",2103}, + {"globalDomain",920}, + {"local_use",1201}, + {""}, {""}, {""}, {""}, {""}, + {"partitionItems",1717}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"is_chemical",1048}, + {"efas_model",740}, + {""}, + {"stretchingFactorScaled",2217}, + {""}, {""}, {""}, + {"localLongitude",1184}, + {"typeOfRelationToReferenceDataset",2355}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"diagnosticNumber",699}, + {""}, {""}, {""}, + {"scaleFactorOfSecondFixedSurface",1969}, + {""}, + {"dayOfStartOfReferencePeriod",673}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"dataRepresentationType",644}, + {""}, + {"defaultFaFieldName",677}, + {""}, + {"tablesVersionLatest",2250}, + {""}, {""}, {""}, {""}, {""}, + {"orderOfSPD",1603}, + {"PLPresent",215}, + {""}, {""}, {""}, + {"is_localtime",1051}, + {"matchLandType",1286}, + {"climateDateFrom",436}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"widthOfFirstOrderValues",2480}, + {"secondsOfReference",2045}, + {""}, {""}, + {"correction1Part",615}, + {""}, {""}, {""}, + {"scaleFactorOfFirstFixedSurface",1958}, + {""}, {""}, {""}, {""}, + {"ensembleStandardDeviation",784}, + {""}, {""}, + {"monthlyVerificationTime",1365}, + {""}, + {"angleSubdivisions",316}, + {""}, + {"numberOfPartitions",1481}, + {""}, + {"sampleSizeOfReferencePeriod",1946}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"levelValues",1144}, + {"corr4Data",612}, + {"scanPosition",2012}, + {""}, + {"indexingDate",995}, + {""}, {""}, {""}, {""}, + {"numberOfReservedBytes",1503}, + {"_TS",290}, + {"latitudeOfGridPoints",1098}, + {""}, {""}, {""}, {""}, {""}, + {"longitudeOfStretchingPole",1224}, + {"qfePresent",1803}, + {"numberOfReferencePeriodTimeRanges",1499}, + {""}, {""}, + {"qnhPresent",1807}, + {""}, {""}, {""}, + {"streamOfAnalysis",2215}, + {""}, {""}, {""}, {""}, + {"lengthOfProjectLocalTemplate",1136}, + {""}, {""}, {""}, {""}, {""}, + {"marsEndStep",1253}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"outerLoopLengthOfTimeRange",1619}, + {""}, + {"totalNumberOfdimensions",2319}, + {""}, {""}, + {"startingAzimuth",2197}, + {"numberOfRows",1504}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"minuteOfAnalysis",1330}, + {""}, {""}, + {"tableReference",2246}, + {""}, {""}, + {"offsetAfterCentreLocalSection",1549}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"verticalCoordinate",2436}, - {""}, {""}, - {"groupSplittingMethodUsed",943}, - {"setCalendarId",2118}, + {"userTimeEnd",2421}, {""}, {""}, {""}, - {"reservedSection3",1865}, - {"destineOrigin",696}, + {"section9Pointer",2090}, + {""}, + {"localDefNumberTwo",1173}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section8Pointer",2087}, + {""}, + {"unitsOfSecondFixedSurface",2400}, + {"secondDimensionPhysicalSignificance",2024}, + {""}, {""}, + {"totalNumberOfTubes",2315}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"calendarIdentificationTemplateNumber",389}, - {"gridDescriptionSectionPresent",934}, + {"latitudeOfStretchingPole",1108}, + {""}, + {"missingDataFlag",1339}, + {""}, + {"diffInDays",700}, + {""}, + {"totalNumberOfQuantiles",2311}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NAT",174}, + {""}, {""}, + {"monthlyVerificationDate",1363}, + {""}, {""}, {""}, {""}, + {"representationType",1865}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cfVarName",420}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sphericalHarmonics",2175}, + {"libraryVersion",1149}, + {""}, {""}, {""}, + {"scaleFactorOfRadiusOfSphericalEarth",1968}, + {""}, {""}, {""}, {""}, + {"centuryOfReference",415}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"scalingFactorForFrequencies",2011}, + {""}, {""}, {""}, + {"endOfInterval",767}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"section0Pointer",2048}, + {""}, + {"dayOfReference",672}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"perturbedType",1733}, + {""}, + {"heightOrPressureOfLevel",955}, + {""}, + {"levelIndicator",1142}, {""}, {""}, {""}, {""}, {""}, {""}, + {"decimalPrecision",675}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"verticalDomainTemplateNumber",2459}, + {""}, {""}, {""}, {""}, + {"windVariableDirection",2505}, + {""}, {""}, + {"numberOfRemaininChars",1501}, + {""}, {""}, + {"stepTypeInternal",2210}, + {""}, + {"orientationOfTheGridInDegrees",1608}, + {"userDateEnd",2417}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfVerticalPoints",1529}, + {""}, {""}, + {"widthOfSPD",2482}, + {""}, + {"scaleFactorAtReferencePoint",1951}, + {""}, + {"longitudeOfLastGridPoint",1216}, + {""}, {""}, {""}, {""}, + {"selectedDay",2117}, + {""}, {""}, {""}, {""}, + {"periodOfTimeIntervals",1731}, + {""}, + {"expandedDescriptors",796}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"typeOfPostProcessing",2351}, + {""}, + {"offsetFreeFormData",1563}, + {""}, + {"extractSubset",843}, + {"gts_ddhh00",949}, + {""}, {""}, + {"northLatitudeOfCluster",1389}, + {"longitudeOfFirstGridPoint",1212}, + {"numberOfVerticalCoordinateValues",1527}, + {""}, + {"molarMass",1354}, + {""}, {""}, + {"nosigPresent",1397}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"eastLongitudeOfCluster",732}, + {"siteElevation",2145}, + {""}, + {"lsdate_bug",1242}, + {""}, {""}, + {"gridDefinitionTemplateNumber",934}, + {"lstime_bug",1243}, + {""}, {""}, + {"versionNumOfFilesFreeSpaceStorage",2449}, + {"observationGeneratingProcessIdentifier",1539}, + {""}, + {"totalNumberOfDirections",2306}, + {"dayOfAnalysis",667}, + {""}, {""}, {""}, + {"interpretationOfNumberOfPoints",1024}, + {""}, + {"numberOfVerticalGridDescriptors",1528}, + {""}, {""}, + {"is_aerosol_optical",1047}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"perturbationNumber",1732}, + {""}, {""}, {""}, {""}, {""}, + {"tablesVersionLatestOfficial",2251}, + {""}, {""}, + {"southLatitudeOfCluster",2163}, + {""}, + {"marsModel",1266}, + {"headersOnly",953}, + {"secondOrderFlags",2032}, + {""}, {""}, {""}, + {"spatialProcessing",2178}, + {"scaleFactorOfDistributionFunctionParameter",1955}, + {""}, {""}, {""}, {""}, + {"numberOfLevelValues",1465}, + {""}, + {"isConstant",1033}, + {""}, {""}, {""}, {""}, {""}, + {"endOfFileAddress",765}, + {""}, {""}, + {"userDateTimeEnd",2419}, + {"gridPointPosition",937}, + {""}, {""}, {""}, {""}, {""}, + {"LoV",128}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unsignedIntegers",2406}, + {""}, + {"expandedNames",797}, + {"theMessage",2260}, + {"g2grid",908}, + {""}, {""}, {""}, + {"falseNorthing",860}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"bitmapPresent",373}, + {"numberOfIterations",1464}, + {"DiInDegrees",32}, + {"numberOfAnalysis",1409}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"marsClass",1248}, + {""}, + {"operatingMode",1597}, + {""}, {""}, {""}, + {"binaryScaleFactor",370}, + {""}, + {"totalNumberOfFrequencies",2308}, + {""}, {""}, {""}, + {"productDefinitionTemplateNumber",1788}, + {""}, {""}, {""}, {""}, + {"marsLamModel",1261}, + {""}, {""}, + {"parameterCode",1708}, + {""}, {""}, {""}, + {"scaledValueOfSecondSize",2001}, + {""}, {""}, + {"clusterMember9",549}, + {"is_chemical_distfn",1049}, + {"modelVersionTime",1353}, + {""}, + {"MS",158}, + {""}, {""}, + {"sfc_levtype",2132}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clutterFilterIndicator",554}, + {""}, {""}, + {"matchAerosolPacking",1285}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"clusterMember8",548}, + {""}, {""}, {""}, {""}, {""}, + {"setCalendarId",2127}, + {""}, + {"internationalDataSubCategory",1023}, + {""}, {""}, {""}, {""}, + {"corr2Data",610}, + {""}, {""}, + {"localMinute",1187}, + {""}, {""}, + {"crraLocalVersion",629}, + {""}, + {"productDefinitionTemplateNumberInternal",1789}, + {""}, {""}, {""}, {""}, {""}, + {"spectralMode",2182}, + {""}, {""}, + {"earthIsOblate",727}, + {"angleMultiplier",312}, + {""}, {""}, {""}, + {"correction3Part",619}, + {""}, {""}, {""}, + {"scanningMode",2013}, + {""}, + {"totalNumberOfTileAttributePairs",2314}, + {""}, + {"totalNumberOfRepetitions",2312}, + {"xDirectionGridLength",2513}, + {""}, + {"LaDInDegrees",105}, + {""}, + {"param_value_min",1705}, + {""}, + {"tiggeModel",2272}, + {""}, {""}, {""}, {""}, + {"scaledValueOfStandardDeviation",2003}, + {"westLongitudeOfCluster",2476}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfSizeInterval",2358}, + {""}, {""}, {""}, + {"totalNumberOfTileAttributeCombinations",2313}, + {"scaledValueOfStandardDeviationInTheCluster",2004}, + {""}, + {"representationMode",1864}, + {""}, + {"latitudeLastInDegrees",1091}, + {""}, + {"localMonth",1188}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierTruncationType",369}, + {"scanningMode8",2018}, + {""}, {""}, {""}, + {"scaledValueOfFirstSize",1990}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"earthMinorAxis",730}, + {"thisMarsStream",2263}, + {""}, {""}, {""}, + {"oneConstant",1585}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"tiggeCentre",2269}, + {"indicatorOfUnitForForecastTime",1002}, + {"DyInDegrees",43}, + {""}, {""}, + {"modelVersionDate",1352}, + {""}, + {"dirty_statistics",709}, + {""}, + {"localSectionPresent",1192}, + {"timeIncrement",2287}, {"coordinate4OfLastGridPoint",603}, {""}, {""}, - {"functionCode",903}, - {"typeOfPreProcessing",2335}, - {""}, {""}, {""}, {""}, - {"projString",1785}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"roundedMarsLevelist",1881}, - {""}, {""}, {""}, - {"CDFstr",22}, - {""}, {""}, - {"typicalHour",2355}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"originalParameterTableNumber",1605}, + {"corr1Data",609}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"parameterCategory",1699}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"dateOfForecastRun",657}, + {"verticalVisibility",2460}, {""}, {""}, - {"clusterIdentifier",540}, + {"parameterNumber",1712}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractSubsetList",846}, + {""}, + {"default_max_val",686}, + {""}, + {"iterationNumber",1060}, + {""}, {""}, + {"tigge_short_name",2276}, + {""}, {""}, {""}, + {"targetCompressionRatio",2252}, + {""}, + {"dimensionNumber",703}, + {""}, {""}, {""}, {""}, {""}, + {"partitionNumber",1718}, {""}, {""}, {""}, {""}, {""}, {""}, - {"productIdentifier",1781}, + {"tileClassification",2279}, + {"dx",725}, + {"max",1291}, + {""}, {""}, {""}, {""}, + {"directionNumber",706}, + {""}, {""}, {""}, + {"bufrDataEncoded",381}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfCentrePointInDegrees",1208}, + {""}, {""}, + {"functionCode",904}, {""}, - {"numberOfPoints",1477}, - {""}, {""}, {""}, {""}, {""}, - {"spare4",2168}, + {"thisMarsType",2264}, + {""}, + {"scaledValueOfLowerLimit",1994}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"thresholdIndicator",2257}, - {""}, {""}, {""}, - {"scaledValueOfFirstFixedSurface",1980}, + {"Lx",151}, + {"conceptsLocalMarsDirAll",576}, + {"jdLocal",1070}, + {"identificationNumber",983}, + {"subCentre",2219}, {""}, {""}, {""}, {""}, - {"jdLocal",1069}, + {"localDefNumberOne",1172}, + {""}, + {"minutesAfterReferenceTimeOfDataCutoff",1338}, {""}, {""}, - {"bufrDataEncoded",382}, + {"complexPacking",566}, + {""}, + {"oneMillionConstant",1586}, + {""}, {""}, {""}, {""}, {""}, + {"significanceOfReferenceDateAndTime",2140}, + {""}, + {"indexTemplateNumber",993}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Lcx",117}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"tableCode",2244}, + {""}, {""}, + {"jdSelected",1071}, + {"additionalFlagPresent",301}, {""}, {""}, {""}, {""}, - {"matchAerosolPacking",1283}, + {"Lux",147}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"subcentreOfAnalysis",2231}, {""}, {""}, {""}, - {"directionScalingFactor",709}, - {"numberOfIntegers",1457}, - {"tableCode",2233}, - {""}, {""}, {""}, - {"truncateDegrees",2307}, - {""}, {""}, - {"numberOfLevelValues",1460}, - {"originOfPostProcessing",1603}, - {""}, {""}, - {"section4",2059}, - {""}, {""}, {""}, - {"kurt",1077}, - {""}, {""}, - {"listOfModelIdentifiers",1160}, + {"formatForDoubles",896}, + {"satelliteNumber",1949}, {""}, {""}, {""}, {""}, - {"originatingCentre",1607}, - {""}, {""}, {""}, - {"scaledValueOfSecondFixedSurface",1991}, - {""}, {""}, {""}, - {"tablesMasterDir",2237}, - {"subCentre",2208}, + {"numberOfInts",1463}, + {""}, {""}, {""}, {""}, + {"plusOneinOrdersOfSPD",1740}, + {"numericValues",1535}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfPoints",1482}, + {""}, + {"totalNumberOfForecastProbabilities",2307}, + {""}, + {"NP",187}, + {""}, + {"defaultSequence",682}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"projectLocalTemplate",1796}, + {""}, + {"calendarIdPresent",386}, + {""}, {""}, {""}, {""}, {""}, + {"missingValue",1340}, + {""}, + {"integerValues",1021}, + {"verticalCoordinate",2456}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"monthOfStartOfReferencePeriod",1362}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierMakeTemplate",363}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"extraLocalSectionPresent",815}, - {""}, {""}, - {"startingAzimuth",2187}, - {"n3",1368}, - {""}, {""}, - {"kurtosis",1078}, - {"crraLocalVersion",629}, - {""}, {""}, {""}, - {"LoV",129}, - {""}, - {"numberOfAnalysis",1404}, - {""}, - {"laplacianScalingFactor",1083}, - {""}, {""}, - {"timeRangeIndicator",2279}, - {"md5Section9",1306}, - {""}, {""}, - {"md5Section8",1305}, - {""}, - {"longitudeFirstInDegrees",1202}, - {""}, {""}, {""}, {""}, {""}, - {"md5Data",1292}, - {""}, - {"marsForecastMonth",1254}, - {""}, {""}, {""}, {""}, {""}, - {"sp3",2161}, - {""}, {""}, {""}, {""}, - {"localNumberOfObservations",1187}, - {""}, {"coordinateIndexNumber",606}, {""}, {""}, {""}, {""}, - {"spare3",2167}, + {"extraLocalSectionPresent",815}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"gridDescriptionSectionPresent",935}, + {"calendarIdentification",387}, {""}, {""}, - {"grib2divider",923}, + {"versionNumberOfGribLocalTables",2453}, {""}, {""}, {""}, - {"scaledValueOfRadiusOfSphericalEarth",1990}, + {"addressOfFileFreeSpaceInfo",303}, {""}, {""}, {""}, - {"versionNumberOfGribLocalTables",2433}, + {"latitudeOfSouthernPole",1106}, + {""}, + {"destineOrigin",695}, {""}, {""}, {""}, {""}, {""}, - {"paleontologicalOffset",1691}, - {""}, {""}, - {"coordinate1Start",594}, - {""}, - {"preProcessingParameter",1739}, - {""}, {""}, - {"typeOfSizeInterval",2341}, - {"isEPS",1034}, - {"sfc_levtype",2123}, - {""}, {""}, {""}, {""}, - {"skewness",2145}, - {""}, + {"parameterIndicator",1710}, + {"centralLongitude",403}, {"extraLocalSectionNumber",814}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"verticalCoordinateDefinition",2437}, - {"correction2Part",617}, - {""}, {""}, {""}, - {"coordinate1Flag",593}, - {"dirty_statistics",710}, - {"typeOfHorizontalLine",2327}, - {""}, {""}, - {"projectLocalTemplate",1787}, + {"projString",1794}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondsOfAnalysis",2044}, {""}, - {"iteratorDisableUnrotate",1060}, - {"julianDay",1071}, - {""}, {""}, {""}, {""}, - {"latitudeOfSouthernPole",1105}, - {"classOfAnalysis",436}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"constantFieldHalfByte",583}, - {""}, {""}, {""}, - {"startOfHeaders",2181}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"CDF",21}, + {"CDFstr",22}, + {""}, {""}, {""}, {""}, {""}, + {"typeOfEnsembleForecast",2339}, + {"indicatorOfUnitForTimeRange",1004}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"localTimeMethod",1197}, + {"extractedDateTimeNumberOfSubsets",848}, + {"truncateDegrees",2324}, + {"centuryOfReferenceTimeOfData",416}, + {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfSecondFixedSurface",2000}, {""}, {""}, {""}, {"extractAreaWestLongitude",822}, - {""}, {""}, {""}, {""}, - {"iDirectionIncrementInDegrees",977}, {""}, - {"PVPresent",218}, - {""}, {""}, {""}, {""}, - {"defaultFaModelName",679}, + {"normAtInitialTime",1387}, {""}, {""}, {""}, - {"unknown",2383}, - {""}, {""}, {""}, - {"centralLongitude",404}, - {""}, {""}, {""}, {""}, - {"monthOfAnalysis",1354}, - {""}, {""}, - {"powerOfTenUsedToScaleClimateWeight",1737}, - {""}, - {"is_aerosol_optical",1046}, - {"totalNumberOfIterations",2295}, - {"lsdate_bug",1240}, - {""}, - {"lstime_bug",1241}, + {"Dx",39}, + {""}, {""}, {""}, {""}, {""}, + {"directionScalingFactor",708}, + {""}, {""}, {""}, {""}, {""}, + {"representativeMember",1866}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"keySat",1075}, - {""}, {""}, {""}, - {"postAuxiliary",1734}, - {"rdbtimeHour",1821}, - {"scanningModeForOneDiamond",2010}, - {""}, {""}, {""}, - {"originatingClass",1609}, + {"accumulationInterval",295}, {""}, - {"predefined_grid",1742}, - {""}, - {"lengthOfMessage",1133}, - {"productionStatusOfProcessedData",1783}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DxInDegrees",40}, - {""}, - {"standardParallelInMicrodegrees",2179}, - {""}, - {"significanceOfReferenceDateAndTime",2131}, + {"extraValues",816}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"hourOfStartOfReferencePeriod",971}, + {"parameterCategory",1707}, {""}, {""}, - {"normAtInitialTime",1382}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsExpver",1253}, + {"originalParameterTableNumber",1612}, + {""}, + {"forecastProbabilityNumber",892}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"scaledValueOfFirstFixedSurface",1989}, + {""}, + {"startOfMessage",2191}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfIntegers",1462}, + {""}, {""}, {""}, {""}, {""}, + {"listOfModelIdentifiers",1161}, + {""}, {""}, {""}, + {"scaledFrequencies",1982}, + {"predefined_grid",1751}, + {""}, {""}, {""}, {""}, + {"calendarIdentificationTemplateNumber",388}, + {"monthOfForecastUsedInLocalTime",1359}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPackedValues",1478}, + {""}, {""}, + {"yearOfStartOfReferencePeriod",2533}, + {"referenceReflectivityForEchoTop",1856}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"originatingCentre",1614}, + {"offsetSection10",1569}, + {""}, {""}, {""}, + {"extraDimensionPresent",813}, + {""}, {""}, {""}, + {"productIdentifier",1790}, + {""}, + {"corr3Data",611}, + {""}, + {"tablesMasterDir",2248}, + {""}, {""}, + {"roundedMarsLongitude",1891}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"iDirectionIncrementInDegrees",978}, + {"laplacianScalingFactor",1084}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"boot_edition",377}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierMakeTemplate",362}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterIdentifier",539}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"messageLength",1322}, + {""}, {""}, {""}, {""}, {""}, + {"typeOfPreProcessing",2352}, + {""}, + {"roundedMarsLatitude",1889}, + {""}, {""}, {""}, {""}, {""}, + {"easternLongitudeOfDomain",735}, + {"numberInTheGridCoordinateList",1405}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"aerosolbinnumber",307}, - {""}, - {"typeOfCompressionUsed",2320}, - {""}, - {"lengthOfHeaders",1131}, - {""}, {""}, - {"NV",193}, - {"skew",2144}, - {""}, - {"identificationOfProject",984}, - {""}, {""}, - {"secondDimensionCoordinateValueDefinition",2014}, - {""}, {""}, - {"numberOfModels",1469}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"projectionCenterFlag",1789}, - {""}, {""}, {""}, - {"nameOfSecondFixedSurface",1374}, - {""}, {""}, {""}, {""}, {""}, - {"keyData",1073}, + {"postAuxiliary",1743}, + {"verticalCoordinateDefinition",2457}, + {"centuryOfAnalysis",414}, {""}, {""}, {""}, {""}, - {"minutesAfterReferenceTimeOfDataCutoff",1336}, - {""}, - {"codedNumberOfFirstOrderPackedValues",560}, - {""}, {""}, {""}, - {"rectimeMinute",1836}, + {"grib2divider",924}, {""}, {""}, {""}, {""}, - {"biFourierResolutionParameterN",366}, - {""}, - {"dateOfAnalysis",655}, - {"reserved3",1861}, - {"timeOfAnalysis",2274}, + {"local_padding",1200}, {""}, {""}, {""}, {""}, {""}, {""}, - {"upperThreshold",2397}, - {""}, {""}, {""}, - {"secondsOfAnalysis",2035}, + {"PVPresent",217}, + {""}, + {"unitsOfFirstFixedSurface",2399}, + {"shapeOfVerificationArea",2134}, + {""}, + {"isEPS",1035}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfCompressionUsed",2337}, + {""}, + {"numberOfEffectiveValues",1448}, + {""}, {""}, {""}, {""}, + {"tileAttribute",2278}, + {""}, {""}, + {"groupSplittingMethodUsed",944}, + {""}, + {"thresholdIndicator",2268}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section4Padding",2070}, + {""}, {""}, + {"numberOfMembersInCluster",1468}, {""}, {""}, {""}, {""}, {""}, - {"projectionCentreFlag",1790}, + {"conceptsMasterDir",577}, + {""}, + {"productionStatusOfProcessedData",1792}, + {""}, {""}, {""}, + {"startStepInHours",2194}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"roundedMarsLevelist",1890}, + {"projectLocalTemplateNumber",1797}, + {"scaledValueOfRadiusOfSphericalEarth",1999}, + {""}, {""}, {""}, {""}, {""}, + {"centralLongitudeInDegrees",404}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"originOfPostProcessing",1610}, + {""}, {""}, {""}, {""}, + {"CDF",21}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"aerosolbinnumber",306}, + {"NDSP",179}, + {""}, + {"section7",2081}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfDataPoints",1434}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"grib1divider",921}, + {"numberOfChars",1420}, + {"preProcessingParameter",1748}, + {"NV",192}, + {""}, {""}, {""}, + {"secondDimensionCoordinateValueDefinition",2023}, + {""}, + {"numberOfModels",1474}, + {""}, + {"coordinate1Start",594}, + {""}, + {"expandedAbbreviations",791}, + {""}, {""}, {""}, {""}, + {"indicatorOfUnitForTimeRangeForReferencePeriod",1005}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfTimeIncrementsOfForecastsUsedInLocalTime",1513}, {""}, {""}, - {"numberOfDistributionFunctionParameters",1442}, - {"numberOfDataPoints",1429}, + {"projectionCenterFlag",1798}, + {""}, {""}, + {"distanceFromTubeToEnsembleMean",712}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"driverInformationBlockAddress",720}, + {"level_value_list",1145}, + {"NFSP",181}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"identificationOfProject",985}, + {"northernLatitudeOfClusterDomain",1395}, + {""}, + {"julianDay",1072}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"referenceValueError",1860}, + {""}, {""}, + {"listMembersUsed",1154}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"projectionCentreFlag",1799}, + {"longitudeFirstInDegrees",1204}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfValues",1526}, + {"coordinate3OfLastGridPoint",600}, + {""}, + {"westernLongitudeOfDomain",2479}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDistributionFunctionParameters",1447}, + {"southernLatitudeOfClusterDomain",2166}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"AA",6}, + {""}, {""}, {""}, {""}, + {"numberOfCharacters",1419}, + {""}, {""}, + {"scaledValueOfDistributionFunctionParameter",1986}, + {"localNumberOfObservations",1189}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"offsetAfterBitmap",1548}, + {""}, {""}, {""}, + {"faModelName",857}, + {"originatingClass",1616}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"dayOfEndOfOverallTimeInterval",668}, - {""}, {""}, {""}, - {"is_chemical_distfn",1048}, - {""}, {""}, {""}, - {"section2Padding",2050}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"monthOfAnalysis",1356}, {""}, {""}, - {"messageLength",1320}, + {"ITN",91}, + {""}, {""}, + {"classOfAnalysis",435}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfEffectiveValues",1443}, - {""}, {""}, - {"startOfRange",2183}, - {"gts_ddhh00",948}, - {"scaleFactorOfDistanceFromEnsembleMean",1945}, + {"longitudeOfSubSatellitePoint",1226}, + {""}, {""}, {""}, + {"deletePV",692}, + {"isCorrection",1034}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"qnhAPresent",1806}, + {""}, {""}, {""}, {""}, + {"longitudeOfSubSatellitePointInDegrees",1227}, + {""}, {""}, {""}, {""}, + {"paleontologicalOffset",1698}, + {"mars_labeling",1278}, {""}, {""}, {""}, {"correction4",620}, - {"section2Present",2052}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Structure",1307}, - {""}, - {"easternLongitudeOfDomain",736}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetSection10",1562}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfAdditionalParameterForReferencePeriod",1952}, {""}, {""}, - {"numberOfDistinctSection4s",1436}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lengthOfIndexTemplate",1132}, - {""}, {""}, {""}, {""}, {""}, - {"referenceOfWidths",1845}, - {"lowerThreshold",1237}, - {"scaledValueOfDistributionFunctionParameter",1977}, - {"numberOfPackedValues",1473}, - {"centralClusterDefinition",403}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isotopeIdentificationNumber",1058}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDistinctSection7s",1444}, {""}, - {"deleteExtraLocalSection",691}, - {""}, {""}, {""}, {""}, {""}, - {"unitsConversionOffset",2375}, - {""}, - {"offsetSection4",1566}, - {"julianForecastDay",1072}, - {""}, - {"typeOfSecondFixedSurface",2340}, - {"yearOfAnalysis",2506}, - {""}, - {"param_value_min",1697}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfTimeIncrementsOfForecastsUsedInLocalTime",1508}, - {""}, - {"centralLongitudeInDegrees",405}, {"coordinate4Flag",601}, - {""}, - {"implementationDateOfModelCycle",989}, - {"packingType",1620}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfAnalysis",2317}, - {"marsExperimentOffset",1252}, - {"startStepInHours",2185}, - {""}, {""}, {""}, - {"numberOfDistinctSection3s",1435}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfValues",1519}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"basicAngleOfTheInitialProductionDomain",340}, {""}, {""}, {""}, + {"biFourierCoefficients",361}, + {""}, {""}, {""}, + {"timeRangeIndicator",2294}, + {"marsForecastMonth",1256}, + {"twoOrdersOfSPD",2332}, + {"centralClusterDefinition",402}, + {"startOfRange",2192}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfMembersInEnsemble",1469}, + {"sectionLengthLimitForEnsembles",2092}, {"conceptsLocalDirECMF",575}, - {""}, {""}, - {"reservedNeedNotBePresent",1862}, - {""}, {""}, - {"numberOfMembersInCluster",1463}, {""}, - {"typicalMinute",2356}, - {""}, {""}, - {"isotopeIdentificationNumber",1057}, - {""}, {""}, - {"md5DataSection",1293}, - {""}, - {"section4Pointer",2062}, - {""}, {""}, {""}, {""}, {""}, - {"centuryOfAnalysis",415}, - {""}, - {"outerLoopTypeOfStatisticalProcessing",1613}, - {"isCorrection",1033}, - {""}, {""}, {""}, {""}, - {"totalLength",2287}, - {""}, {""}, - {"selectedMonth",2112}, - {"twoOrdersOfSPD",2315}, - {""}, {""}, - {"nameOfFirstFixedSurface",1373}, - {"latitudeOfFirstGridPoint",1095}, - {"frequencyNumber",901}, - {""}, {""}, - {"numberOfDataMatrices",1428}, - {"lengthIncrementForTheGroupLengths",1129}, - {""}, {""}, - {"hourOfAnalysis",964}, - {""}, - {"md5TimeDomainSection",1308}, - {""}, - {"timeRangeIndicatorFromStepRange",2280}, - {""}, - {"grib1divider",920}, - {""}, {""}, - {"clusterMember6",547}, - {""}, - {"tigge_short_name",2265}, - {""}, - {"shapeOfTheEarth",2124}, - {""}, {""}, {""}, - {"default_max_val",686}, - {""}, {""}, {""}, - {"tileIndex",2267}, - {""}, - {"biFourierSubTruncationType",369}, + {"predefined_grid_values",1752}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"westernLongitudeOfDomain",2459}, - {""}, - {"simpleThinningMissingRadius",2133}, - {""}, {""}, {""}, {""}, - {"section3Pointer",2057}, - {""}, {""}, {""}, - {"offsetSection3",1565}, - {""}, - {"gridCoordinate",929}, - {""}, {""}, {""}, - {"doExtractDateTime",717}, - {""}, {""}, {""}, - {"quantileValue",1804}, + {"implementationDateOfModelCycle",990}, + {"gridCoordinate",930}, {""}, {""}, - {"numberInTheGridCoordinateList",1400}, - {""}, {""}, {""}, {""}, - {"northernLatitudeOfClusterDomain",1390}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windSpeedTrend4",2479}, - {""}, {""}, - {"stepHumanReadable",2194}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"scanningMode6",2007}, - {""}, {""}, - {"cloudsTitle3Trend4",534}, + {"spare4",2177}, + {"nameOfSecondFixedSurface",1379}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"driverInformationBlockAddress",721}, - {"distanceFromTubeToEnsembleMean",713}, - {""}, {""}, - {"referenceValueError",1851}, - {""}, - {"forecastMonth",886}, + {"versionNumOfRootGroupSymbolTableEntry",2450}, {""}, {""}, {""}, {""}, {""}, {""}, - {"biFourierResolutionSubSetParameterN",368}, - {"expandedAbbreviations",791}, - {"inputExtendedDelayedDescriptorReplicationFactor",1008}, - {""}, - {"DiInMetres",33}, - {""}, {""}, - {"section7",2072}, - {"numberOfChars",1415}, - {""}, {""}, - {"longitudeOfSubSatellitePoint",1224}, + {"LoVInDegrees",129}, + {"lengthOfMessage",1134}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"missing_values",1344}, + {"numberOfDataMatrices",1433}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfAdditionalParameterForReferencePeriod",1943}, - {""}, {""}, {""}, - {"waveFrequencyNumber",2453}, + {"typeOfAuxiliaryInformation",2335}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section4",2068}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfSubSatellitePointInDegrees",1225}, - {"windDirectionTrend4",2468}, - {""}, {""}, {""}, - {"sampleSizeOfModelClimate",1936}, - {""}, - {"consensusCount",580}, - {""}, {""}, {""}, - {"typeOfFirstFixedSurface",2324}, - {""}, - {"southernLatitudeOfClusterDomain",2157}, - {"tsectionNumber4",2310}, - {""}, - {"projectLocalTemplateNumber",1788}, + {"julianForecastDay",1073}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isectionNumber4",1056}, - {"deletePV",693}, - {""}, {""}, - {"cloudsTitle3Trend3",533}, - {""}, {""}, {""}, - {"stepRangeInHours",2197}, + {"marsExpver",1255}, {""}, - {"numberOfMissing",1465}, - {"cloudsTitle4",535}, - {""}, {""}, - {"md5Section6",1303}, + {"yDirectionGridLengthInMetres",2521}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"standardParallelInMicrodegrees",2188}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Yo",285}, + {"latitudeOfFirstGridPoint",1096}, {""}, {""}, {""}, {""}, {""}, - {"g1conceptsMasterDir",906}, + {"widthOfLengths",2481}, + {""}, + {"g1conceptsMasterDir",907}, + {""}, {""}, {""}, + {"Nx",207}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfDistinctSection4s",1441}, + {""}, + {"coordinate1Flag",593}, + {"unitsConversionOffset",2393}, + {""}, + {"stepRangeInHours",2207}, + {"numberOfCategories",1418}, {""}, {""}, - {"scaledValueOfLowerLimit",1985}, + {"numberOfOctetsExtraDescriptors",1476}, + {"dateOfAnalysis",655}, + {""}, {""}, {""}, + {"timeOfAnalysis",2289}, + {""}, {""}, + {"offsetSection7",1576}, + {"scaleFactorOfDistanceFromEnsembleMean",1954}, + {""}, {""}, {""}, + {"dayOfEndOfOverallTimeInterval",668}, + {""}, + {"Ncx",195}, {""}, {""}, {""}, {""}, - {"Yp",286}, - {""}, {""}, {""}, - {"latitudeOfStretchingPoleInDegrees",1108}, - {""}, {""}, {""}, - {"dataCategory",635}, - {""}, {""}, {""}, - {"longitudeOfFirstGridPointInDegrees",1211}, - {""}, {""}, - {"section_6",2103}, - {"masterTablesVersionNumber",1280}, - {""}, - {"longitudeOfNorthWestCornerOfArea",1216}, - {""}, {""}, {""}, - {"orderingConvention",1599}, - {"numberOfDistinctSection7s",1439}, - {""}, - {"windSpeedTrend3",2478}, - {""}, {""}, {""}, {""}, {""}, - {"lengthOfTimeRange",1136}, + {"section10Pointer",2051}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfStretchingPoleInDegrees",1223}, - {""}, - {"radiusInMetres",1808}, + {"Nux",205}, {""}, {""}, {""}, - {"missingValuesPresent",1341}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"verificationMonth",2425}, - {""}, - {"bufrHeaderCentre",383}, - {"DyInMetres",44}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"LoVInDegrees",130}, - {"local_padding",1198}, - {"typeOfOriginalFieldValues",2332}, - {""}, {""}, - {"expandedCodes",792}, - {""}, {""}, {""}, {""}, {""}, - {"longitudeOfLastGridPointInDegrees",1215}, - {""}, {""}, {""}, {""}, - {"selectedHour",2110}, - {""}, {""}, - {"addExtraLocalSection",301}, + {"grib3divider",925}, + {"codedNumberOfFirstOrderPackedValues",559}, {""}, {""}, {""}, - {"yDirectionGridLengthInMetres",2501}, - {"section10Pointer",2042}, - {"windDirectionTrend3",2467}, - {""}, {""}, - {"rdbtimeMinute",1822}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section1Padding",2047}, - {"groupLengths",941}, - {"tsectionNumber3",2309}, - {"localYear",1197}, - {"endDayTrend4",750}, - {""}, {""}, - {"isectionNumber3",1055}, + {"listOfContributingSpectralBands",1158}, {""}, {""}, {""}, {""}, - {"numberOfCharacters",1414}, + {"section2Padding",2059}, + {""}, {""}, {""}, + {"default_min_val",687}, + {""}, {""}, + {"totalNumberOfIterations",2310}, {""}, {""}, {""}, {""}, - {"groupInternalNodeK",939}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section7Pointer",2074}, - {""}, {""}, - {"biFourierCoefficients",362}, - {""}, {""}, - {"epsContinous",786}, + {"section2Present",2061}, + {"masterTablesVersionNumber",1282}, + {""}, {""}, {""}, + {"quantileValue",1813}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"marsExperimentOffset",1254}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"selectedYear",2114}, - {""}, {""}, {""}, {""}, {""}, - {"verifyingMonth",2427}, {""}, - {"LyInMetres",155}, + {"scanningModeForOneDiamond",2019}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"yDirectionGridLengthInMillimetres",2522}, + {"sampleSizeOfModelClimate",1945}, + {""}, {""}, {""}, {""}, + {"kurt",1078}, + {"deleteExtraLocalSection",690}, + {"section7Pointer",2083}, + {""}, {""}, {""}, + {"_numberOfValues",294}, + {""}, {""}, + {"nTileAttCombo",1372}, + {""}, + {"latitudeOfStretchingPoleInDegrees",1109}, + {""}, {""}, {""}, + {"biFourierSubTruncationType",368}, + {"typeOfSecondFixedSurface",2357}, + {"masterTablesVersionNumberLatest",1283}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"typeOfOriginalFieldValues",2349}, + {""}, {""}, {""}, + {"addExtraLocalSection",300}, + {"selectedMonth",2121}, + {""}, {""}, {""}, + {"lengthIncrementForTheGroupLengths",1130}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle4",534}, + {""}, {""}, {""}, + {"patch_precip_fp",1725}, + {""}, {""}, {""}, + {"numberOfMissing",1470}, {""}, {""}, {"epsStatisticsContinous",788}, - {""}, {""}, {""}, - {"qnhAPresent",1797}, - {""}, - {"selectedFcIndex",2109}, - {"yDirectionGridLengthInMillimetres",2502}, - {""}, {""}, {""}, {""}, {""}, - {"parametersVersion",1707}, - {""}, {""}, {""}, {""}, {""}, - {"shapeOfVerificationArea",2125}, - {""}, {""}, {""}, - {"widthOfLengths",2461}, - {"predefined_grid_values",1743}, - {"listMembersMissing",1149}, - {""}, - {"numberOfCategories",1413}, {""}, {""}, - {"missing_values",1342}, - {""}, {""}, {""}, - {"timeCoordinateDefinition",2269}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listOfContributingSpectralBands",1157}, - {""}, - {"md5Product",1296}, - {""}, {""}, {""}, - {"listOfEnsembleForecastNumbers",1159}, - {""}, - {"percentileValue",1720}, - {""}, {""}, {""}, {""}, - {"numberOfDataValues",1431}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"sectionLengthLimitForEnsembles",2083}, - {""}, {""}, {""}, {""}, - {"typeOfAuxiliaryInformation",2318}, - {""}, {""}, {""}, - {"level_value_list",1144}, - {""}, {""}, {""}, {""}, - {"section_06",2092}, - {"numberOfMembersInEnsemble",1464}, - {"primaryMissingValue",1768}, - {""}, {""}, {""}, - {"lengthOfTimeRangeForReferencePeriod",1137}, - {""}, {""}, {""}, - {"numberOfOctetsExtraDescriptors",1471}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"numberOfModeOfDistribution",1468}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"jIncrement",1065}, - {"scaleValuesBy",1971}, - {""}, {""}, {""}, {""}, {""}, - {"matrixOfValues",1288}, - {""}, {""}, {""}, {""}, - {"boot_edition",378}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"southEastLatitudeOfLPOArea",2159}, {""}, {""}, - {"typicalYear",2360}, + {"hourOfAnalysis",965}, + {""}, + {"orderingConvention",1606}, {""}, {""}, {""}, {""}, {""}, - {"reservedSection4",1866}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"forecastMonth",887}, {""}, {""}, - {"table2Version",2232}, + {"kurtosis",1079}, {""}, - {"extendedFlag",811}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section1Padding",2056}, + {"groupWidth",945}, {""}, - {"scaleFactorOfPrimeMeridianOffset",1958}, - {""}, - {"M",156}, - {"expandedOriginalCodes",798}, - {""}, - {"expandedOriginalWidths",801}, - {"qualityControl",1800}, - {""}, {""}, - {"latitudeOfIcosahedronPole",1098}, - {""}, {""}, {""}, {""}, - {"averaging2Flag",329}, - {""}, {""}, - {"Experiment_Identifier",55}, - {"bitsPerValue",376}, + {"outerLoopTypeOfStatisticalProcessing",1620}, {""}, {""}, {""}, - {"totalInitialConditions",2286}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfMissingInStatisticalProcess",1466}, - {"extractSubsetIntervalEnd",844}, - {"runwayDepositState4",1894}, - {"masterTablesVersionNumberLatest",1281}, + {"timeCoordinateDefinition",2284}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractSubsetIntervalStart",845}, - {"expandedOriginalScales",800}, - {""}, {""}, {""}, - {"inputOriginatingCentre",1009}, - {""}, {""}, - {"mAngleMultiplier",1243}, - {""}, {""}, {""}, - {"offsetAfterBitmap",1541}, + {"DxInDegrees",40}, + {""}, {""}, {""}, {""}, {""}, + {"distinctLongitudes",714}, + {"lengthOfIndexTemplate",1133}, + {""}, {""}, {""}, {""}, {""}, + {"isHindcast",1039}, {""}, - {"n2",1367}, - {"extremeClockwiseWindDirection",849}, + {"iScansNegatively",980}, + {"numberOfForecastsInEnsemble",1452}, + {""}, {""}, {""}, + {"section9Length",2089}, + {"simpleThinningMissingRadius",2142}, + {""}, + {"numberOfLogicals",1467}, + {"iScansPositively",981}, + {""}, {""}, {""}, {""}, {""}, + {"defaultFaModelName",679}, + {""}, {""}, + {"yearOfAnalysis",2526}, {""}, {""}, {""}, {""}, {""}, {""}, - {"operationalForecastCluster",1591}, + {"mAngleMultiplier",1245}, + {"section8Length",2086}, {""}, - {"section2Pointer",2051}, - {""}, - {"inputProcessIdentifier",1011}, - {"correction1",614}, - {""}, - {"offsetSection7",1569}, - {""}, - {"directionOfVariation",708}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwaySideCodeState4",1934}, - {""}, - {"windVariableDirectionTrend4",2489}, - {""}, - {"numberOfTimeRange",1509}, - {"bitMapIndicator",372}, - {"centreLatitudeInDegrees",412}, - {"sp2",2160}, - {""}, {""}, - {"coordinate1End",592}, - {"numberOfTimeRanges",1510}, - {"II",88}, - {"probContinous",1770}, - {""}, - {"numberInTheAuxiliaryArray",1399}, - {""}, {""}, {""}, - {"spare2",2166}, + {"lengthOfTimeRange",1137}, {""}, {""}, {""}, {""}, - {"numberOfOctectsForNumberOfPoints",1470}, - {""}, {""}, - {"typeOfCalendar",2319}, - {""}, {""}, - {"secondLatitudeInDegrees",2017}, - {""}, {""}, {""}, - {"primaryMissingValueSubstitute",1769}, - {"doSimpleThinning",719}, + {"typeOfAnalysis",2334}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"consensusCount",580}, {""}, - {"distinctLongitudes",715}, - {""}, - {"LcyInMetres",121}, - {""}, - {"marsStream1",1271}, - {""}, {""}, - {"updateSequenceNumber",2394}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"maxLevelValue",1290}, - {""}, {""}, {""}, - {"spatialSmoothingOfProduct",2170}, - {""}, - {"versionNumberOfExperimentalSuite",2432}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentTrend4",1749}, - {""}, {""}, - {"windVariableDirectionTrend3",2488}, - {""}, {""}, - {"numberOfForecastsInCluster",1446}, - {""}, - {"indicatorOfUnitForForecastTime",1001}, - {"LuyInMetres",151}, - {"typicalCentury",2351}, - {""}, - {"numberOfForecastsInEnsemble",1447}, + {"longitudeOfLastGridPointInDegrees",1217}, + {""}, {""}, {""}, {""}, + {"longitudeOfStretchingPoleInDegrees",1225}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"rectimeMinute",1845}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepositState3",1893}, - {""}, {""}, {""}, - {"basicAngleOfTheInitialProductionDomain",341}, - {""}, {""}, {""}, - {"selectedMinute",2111}, - {""}, {""}, {""}, - {"section9Length",2080}, + {"numberOfMissingInStatisticalProcess",1471}, + {""}, {""}, + {"numberOfDataValues",1436}, {""}, - {"cloudsTitle3Trend2",532}, + {"section4Pointer",2071}, + {""}, {""}, {""}, {""}, {""}, + {"inputExtendedDelayedDescriptorReplicationFactor",1009}, {""}, - {"section8Length",2077}, + {"numberOfForecastsInCluster",1451}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"rectimeHour",1844}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfModeOfDistribution",1473}, {""}, - {"unitsBias",2374}, + {"biFourierResolutionParameterN",365}, + {"groupInternalNodeK",940}, + {"timeDomainTemplate",2285}, + {""}, + {"indicatorOfUnitForTimeIncrement",1003}, + {""}, {""}, + {"doExtractDateTime",716}, + {""}, {""}, {""}, + {"southEastLatitudeOfVerficationArea",2160}, + {""}, {""}, + {"climateDateTo",437}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Experiment_Identifier",54}, + {""}, {""}, {""}, + {"section0Length",2047}, + {""}, + {"table2Version",2243}, + {""}, {""}, {""}, {""}, + {"section10Length",2050}, + {"missingValuesPresent",1343}, + {""}, + {"jDirectionIncrement",1062}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetSection4",1573}, + {""}, {""}, {""}, {""}, {""}, + {"skewness",2154}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeLongitudeValues",1092}, + {""}, + {"expandedCodes",792}, + {""}, + {"unknown",2401}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfTimeRange",1514}, + {"_leg_number",293}, + {"sectionLengthLimitForProbability",2093}, + {""}, + {"endDayTrend4",749}, + {""}, {""}, {""}, {""}, {""}, + {"verificationMonth",2445}, + {""}, + {"numberOfTimeRanges",1515}, + {""}, + {"timeRangeIndicatorFromStepRange",2295}, + {"localHour",1180}, + {""}, {""}, + {"inputOriginatingCentre",1010}, + {""}, + {"frequencyNumber",902}, + {""}, {""}, {""}, + {"md5Section9",1308}, + {""}, + {"constituentType",584}, + {"totalLength",2302}, + {"scaleValuesBy",1980}, + {""}, {""}, {""}, + {"lengthOfTimeRangeForReferencePeriod",1138}, + {"groupWidths",946}, + {"swapScanningLat",2236}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"LyInMetres",154}, + {""}, {""}, {""}, + {"md5Section8",1307}, + {""}, {""}, {""}, {""}, + {"DiInMetres",33}, + {"swapScanningLon",2237}, + {""}, + {"nameOfFirstFixedSurface",1378}, + {""}, {""}, {""}, + {"keySat",1076}, + {""}, {""}, + {"md5Data",1294}, + {"constituentTypeName",585}, + {""}, {""}, + {"upperThreshold",2415}, + {"lengthOfOriginatorLocalTemplate",1135}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend4",2509}, + {""}, {""}, {""}, {""}, + {"bitsPerValue",375}, + {""}, {""}, + {"originatorLocalTemplate",1617}, + {""}, {""}, {""}, {""}, {""}, + {"correction2Part",617}, + {""}, + {"isSatelliteType",1043}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"numberOfForecastsInTheCluster",1453}, + {""}, {""}, {""}, {""}, + {"typeOfCalendar",2336}, + {""}, {""}, + {"verifyingMonth",2447}, + {""}, + {"jIncrement",1066}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfAdditionalParametersForReferencePeriod",1408}, + {"epsContinous",786}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfIntervalForFirstAndSecondSize",2345}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typicalDateTime",2371}, + {"listOfEnsembleForecastNumbers",1160}, + {"radiusInMetres",1817}, + {"referenceOfWidths",1854}, + {"qualityControl",1809}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"operationalForecastCluster",1598}, + {""}, {""}, {""}, {""}, {""}, + {"sphericalHarmonics",2184}, + {""}, + {"listMembersMissing",1150}, + {"windSpeedTrend4",2499}, + {"longitudeOfFirstGridPointInDegrees",1213}, + {""}, {""}, {""}, + {"keyData",1074}, + {""}, + {"doSimpleThinning",718}, + {"primaryMissingValue",1777}, + {"skew",2153}, + {""}, {""}, {""}, {""}, {""}, + {"waveFrequencyNumber",2473}, + {""}, + {"numberOfParallelsBetweenAPoleAndTheEquator",1479}, + {""}, + {"typicalMinute",2374}, + {""}, {""}, {""}, {""}, + {"probContinous",1779}, + {""}, + {"reservedSection4",1875}, + {"numberOfDistinctSection6s",1443}, + {""}, + {"coordinate3Flag",598}, + {""}, {""}, {""}, {""}, {""}, + {"minuteOfModelVersion",1334}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfComponents",1428}, + {"secondOfModelVersion",2030}, + {""}, {""}, + {"totalInitialConditions",2301}, + {""}, {""}, {""}, {""}, {""}, + {"typicalHour",2373}, + {""}, {""}, {""}, {""}, + {"rdbtimeMinute",1831}, + {""}, {""}, {""}, + {"grib2LocalSectionPresent",923}, + {""}, + {"attributeOfTile",324}, + {""}, + {"section3Padding",2065}, + {""}, {""}, + {"md5Structure",1309}, + {""}, {""}, {""}, + {"typeOfIntervalForFirstAndSecondWavelength",2346}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierResolutionSubSetParameterN",367}, + {"correction1",614}, + {""}, {""}, {""}, + {"spatialSmoothingOfProduct",2179}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"rdbtimeHour",1830}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"packingType",1627}, + {"DyInMetres",44}, + {"grib2LocalSectionNumber",922}, + {""}, + {"selectedFcIndex",2118}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"bitMapIndicator",371}, + {""}, + {"frequencyScalingFactor",903}, + {""}, + {"gts_TTAAii",948}, + {"totalTileAttCombo",2320}, + {""}, {""}, + {"typeOfFirstFixedSurface",2341}, + {""}, {""}, {""}, + {"reservedNeedNotBePresent",1871}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"marsStream1",1273}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"lowerThreshold",1239}, + {""}, {""}, + {"windDirectionTrend4",2488}, + {""}, {""}, {""}, {""}, + {"combinationOfAttributesOfTile",564}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfOctectsForNumberOfPoints",1475}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"SecondOfModelVersion",230}, + {"groupLengths",942}, + {""}, {""}, + {"inputProcessIdentifier",1012}, + {""}, {""}, {""}, {""}, + {"monthOfModelVersion",1360}, + {""}, {""}, {""}, + {"expandedOriginalCodes",798}, + {"extremeClockwiseWindDirection",849}, + {"expandedOriginalWidths",801}, + {"resolutionAndComponentFlags",1877}, + {""}, {""}, {""}, + {"ijDirectionIncrementGiven",989}, + {""}, + {"primaryMissingValueSubstitute",1778}, + {"tileIndex",2281}, + {"matrixOfValues",1290}, + {"LcyInMetres",120}, + {""}, {""}, + {"startOfHeaders",2190}, + {""}, + {"centreLatitudeInDegrees",411}, + {"monthlyVerificationMonth",1364}, + {""}, {""}, {""}, {""}, {""}, + {"section_10",2106}, + {""}, {""}, {""}, {""}, {""}, + {"LuyInMetres",150}, + {""}, {""}, {""}, {""}, + {"maxLevelValue",1292}, + {""}, {""}, {""}, + {"extractedAreaNumberOfSubsets",847}, + {""}, {""}, {""}, + {"Lar2InDegrees",111}, + {""}, {""}, {""}, + {"secondLatitudeInDegrees",2026}, + {"resolutionAndComponentFlags8",1884}, + {""}, {""}, + {"section2Pointer",2060}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"forecastOrSingularVectorNumber",888}, + {""}, {""}, {""}, + {"coordAveragingTims",591}, + {"Lor2InDegrees",146}, + {""}, {""}, + {"is_ocean2d_param",1052}, + {""}, {""}, + {"expandedOriginalScales",800}, + {""}, + {"latitudeOfNorthWestCornerOfArea",1102}, + {"longitudeOfNorthWestCornerOfArea",1218}, + {"firstDimensionCoordinateValueDefinition",869}, + {""}, {""}, {""}, {""}, {""}, + {"extendedFlag",811}, + {""}, {""}, {""}, {""}, + {"typeOfHorizontalLine",2344}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"M",155}, + {""}, {""}, + {"extractSubsetIntervalEnd",844}, + {""}, + {"radiusOfCentralCluster",1818}, + {""}, {""}, {""}, {""}, + {"section6Pointer",2079}, + {""}, + {"extractSubsetIntervalStart",845}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"listOfParametersUsedForClustering",1162}, + {""}, {""}, {""}, + {"scaledValueOfAdditionalParameterForReferencePeriod",1983}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unitsConversionScaleFactor",2394}, + {""}, {""}, {""}, {""}, {""}, + {"coordAveraging0",587}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongXAxis",1490}, + {""}, + {"n2",1369}, {""}, {"expandedOriginalReferences",799}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"monthlyVerificationMonth",1362}, + {"dataCategory",635}, + {"latitudeOfIcosahedronPole",1099}, + {"stepForClustering",2203}, {""}, {""}, {""}, - {"lengthOfOriginatorLocalTemplate",1134}, - {""}, - {"mars_labeling",1276}, + {"numberOfCoordinatesValues",1431}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"averaging2Flag",328}, {""}, {""}, {""}, - {"totalNumberOfDataValuesMissingInStatisticalProcess",2290}, - {"secondOfModelVersion",2021}, - {""}, {""}, - {"runwaySideCodeState3",1933}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"formatVersionMajorNumber",897}, - {""}, {""}, {""}, {""}, {""}, - {"latitudeLongitudeValues",1091}, - {""}, {""}, - {"minuteOfModelVersion",1332}, - {"backgroundProcess",334}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"YR",281}, - {""}, {""}, {""}, - {"numberOfLogicals",1462}, - {""}, - {"jDirectionIncrement",1061}, - {""}, {""}, {""}, - {"groupWidth",944}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"timeDomainTemplate",2270}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags",1868}, - {""}, {""}, {""}, {""}, - {"stepInHours",2195}, - {"constituentType",584}, - {""}, - {"dummy2",724}, - {"rdbtimeYear",1826}, - {"presentTrend3",1748}, - {"swapScanningLat",2225}, - {"frequencyScalingFactor",902}, - {""}, {""}, - {"climateDateTo",438}, - {""}, {""}, - {"resolutionAndComponentFlags8",1875}, - {""}, {""}, {""}, - {"swapScanningLon",2226}, - {""}, {""}, {""}, - {"shortNameECMF",2127}, - {"indicatorOfUnitForTimeRange",1003}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Lar2InDegrees",112}, + {"Lar1InDegrees",109}, + {"sp2",2169}, {""}, {""}, {""}, {""}, {""}, {""}, - {"uerraLocalVersion",2365}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Lor2InDegrees",147}, - {""}, {""}, - {"yCoordinateOfSubSatellitePoint",2499}, - {"typeOfIntervalForFirstAndSecondSize",2328}, - {"isSatelliteType",1042}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"primaryBitmap",1767}, + {"section1Pointer",2057}, {""}, - {"marsType2",1275}, - {"reserved2",1860}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"monthOfModelVersion",1358}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirection",2413}, - {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirectionAngle",2414}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfForecastsInTheCluster",1448}, + {"scaleFactorOfPrimeMeridianOffset",1967}, + {"lengthOfHeaders",1132}, {""}, {""}, - {"stepForClustering",2193}, + {"spare2",2175}, + {""}, + {"yCoordinateOfSubSatellitePoint",2519}, + {"La2",102}, + {""}, {""}, + {"constantFieldHalfByte",583}, + {"Lor1InDegrees",144}, + {""}, + {"Lar2",110}, {""}, {""}, {""}, - {"SecondOfModelVersion",231}, - {""}, {""}, {""}, - {"constituentTypeName",585}, - {"yearOfCentury",2507}, - {""}, {""}, - {"cloudsTitle1",520}, - {""}, {""}, {""}, {""}, - {"originatorLocalTemplate",1610}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"groupWidths",945}, - {""}, - {"La2",103}, - {""}, - {"section0Length",2038}, - {""}, - {"Lar2",111}, - {""}, {""}, {""}, {""}, {"conceptsDir1",572}, - {""}, - {"tiggeLocalVersion",2260}, - {"Latin2",116}, - {""}, {""}, - {"Lo2",126}, - {"localExtensionPadding",1175}, - {""}, {""}, - {"Lor2",146}, - {""}, {""}, - {"variationOfVisibility",2412}, - {"typicalDateTime",2353}, + {"md5TimeDomainSection",1310}, + {""}, {""}, {""}, {""}, {""}, + {"Latin2",115}, {""}, {""}, {""}, - {"listOfParametersUsedForClustering",1161}, - {""}, {""}, {""}, - {"marsGrid",1255}, - {""}, {""}, {""}, - {"isGridded",1037}, - {"La2InDegrees",104}, - {"radiusOfCentralCluster",1809}, + {"Lo2",125}, {""}, {""}, - {"legBaseTime",1125}, + {"azimuthalWidth",331}, + {""}, {""}, + {"Lor2",145}, {""}, {""}, {""}, {""}, - {"gribDataQualityChecks",925}, + {"numberInTheAuxiliaryArray",1404}, + {""}, + {"cloudsTitle1",519}, + {""}, {""}, {""}, {""}, + {"numberOfColumns",1427}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"tsectionNumber4",2327}, + {""}, + {"windVariableDirectionTrend2",2507}, + {""}, + {"isectionNumber4",1057}, + {""}, {""}, {""}, + {"numberOfCodedValues",1424}, + {""}, + {"md5DataSection",1295}, {""}, {""}, {""}, {""}, {""}, - {"Lo2InDegrees",127}, + {"II",87}, + {"La2InDegrees",103}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"doExtractArea",715}, + {""}, {""}, {""}, + {"Lo2InDegrees",126}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfIntervalForFirstAndSecondWavelength",2329}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"averaging1Flag",328}, - {"firstOrderValues",875}, - {"section3Flags",2054}, - {""}, {""}, {""}, - {"cloudsTitle1Trend4",524}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"halfByte",950}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"default_min_val",687}, - {""}, - {"coordinate2Start",597}, - {""}, {""}, {""}, - {"southEastLatitudeOfVerficationArea",2151}, - {""}, - {"endDayTrend1",747}, + {"formatVersionMajorNumber",898}, + {"originatingCentreOfAnalysis",1615}, {""}, {""}, - {"diffInHours",702}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondOrderValuesDifferentWidths",2025}, + {"shapeOfTheEarth",2133}, + {""}, {""}, {""}, + {"averaging1Flag",327}, {""}, {""}, {""}, {""}, {""}, - {"numberOfComponents",1423}, - {"coordinate2Flag",596}, - {"section1Pointer",2048}, + {"tiggeLAMName",2270}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"XRInMetres",272}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfDistanceFromEnsembleMean",1985}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"section6",2077}, + {""}, {""}, {""}, {""}, + {"numberOfDistinctSection3s",1440}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"updateSequenceNumber",2412}, + {""}, {""}, + {"baseTimeEPS",338}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"swapScanningX",2238}, + {""}, {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend1",2506}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"stepUnits",2211}, + {""}, {""}, {""}, {""}, {""}, + {"La1InDegrees",101}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"longitudeOfFirstDiamondCenterLine",1209}, + {""}, + {"longitudeOfFirstDiamondCentreLine",1210}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Lo1InDegrees",124}, + {""}, + {"typicalCentury",2369}, + {""}, {""}, {""}, {""}, {""}, + {"selectedMinute",2120}, + {""}, {""}, + {"presentTrend4",1758}, + {""}, + {"longitudeOfFirstDiamondCentreLineInDegrees",1211}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfSouthernPoleInDegrees",1107}, + {""}, + {"sp1",2168}, + {""}, + {"dummy2",723}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"spare1",2174}, + {""}, {""}, + {"La1",100}, + {""}, {""}, {""}, {""}, {""}, + {"Lar1",108}, + {""}, {""}, {""}, + {"xDirectionGridLengthInMetres",2514}, + {""}, + {"yearOfCentury",2527}, + {""}, {""}, {""}, {""}, + {"Latin1",113}, + {""}, + {"bufrHeaderCentre",382}, + {""}, + {"Lo1",123}, + {""}, + {"endDayTrend1",746}, + {""}, {""}, + {"scaleFactorOfLengthOfSemiMinorAxis",1962}, + {"Lor1",143}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"section1",2049}, + {""}, {""}, + {"fileConsistencyFlags",866}, + {"marsGrid",1257}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"LLCOSP",98}, + {""}, + {"secondOrderOfDifferentWidth",2033}, + {"backgroundProcess",333}, + {""}, + {"isGridded",1038}, + {""}, {""}, {""}, + {"stepHumanReadable",2204}, + {""}, {""}, {""}, + {"reserved2",1869}, + {""}, {""}, + {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",1425}, + {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",1426}, + {""}, + {"marsType2",1277}, + {"X2",269}, + {""}, {""}, + {"runwayDepositState4",1903}, + {""}, {""}, + {"baseDateEPS",336}, + {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfWaveDirections",1977}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfWaveDirectionSequenceParameter",1976}, + {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfWaveFrequencies",1978}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfWavePeriodInterval",2367}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"totalNumberOfValuesInUnpackedSubset",2316}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"verticalVisibilityCoded",2461}, + {"cloudsTitle4Trend4",538}, + {""}, {""}, + {"shortNameECMF",2136}, {""}, {""}, {""}, {"compressedData",568}, + {""}, {""}, {""}, + {"runwaySideCodeState4",1943}, + {"latitudeOfSubSatellitePoint",1110}, + {""}, + {"md5Product",1298}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfWaveFrequencies",1532}, + {"indicatorOfTypeOfLevel",1001}, + {"xDirectionGridLengthInMillimetres",2515}, + {""}, {""}, {""}, + {"totalNumberOfDataValuesMissingInStatisticalProcess",2305}, + {"timeDomainTemplateNumber",2286}, + {"numberOfWaveDirections",1531}, + {"windUnits",2500}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ls_labeling",1241}, + {""}, + {"unitsBias",2392}, + {""}, {""}, + {"typeOfEnsembleMember",2340}, + {""}, {""}, + {"section3Pointer",2066}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"numberOfRepresentativeMember",1502}, + {""}, {""}, {""}, {""}, + {"is_ocean3d_param",1053}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section10Length",2041}, + {"localExtensionPadding",1177}, + {""}, + {"latitudeOfCentralPointInClusterDomain",1093}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_7",2113}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetSection2",1571}, + {""}, + {"reducedGrid",1847}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfFirstDiamondCenterLine",1207}, + {"wrongPadding",2510}, {""}, - {"longitudeOfFirstDiamondCentreLine",1208}, - {"cloudsTitle1Trend3",523}, - {""}, {""}, {""}, - {"doExtractSubsets",718}, - {"secondaryBitmap",2028}, - {"centreForTable2",410}, - {""}, {""}, {""}, {""}, - {"extractedAreaNumberOfSubsets",847}, - {""}, - {"sectionLengthLimitForProbability",2084}, - {"longitudeOfFirstDiamondCentreLineInDegrees",1209}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"totalNumberOfValuesInUnpackedSubset",2300}, - {"fileConsistencyFlags",866}, - {""}, - {"numberOfColumns",1422}, - {""}, {""}, {""}, {""}, - {"legBaseDate",1124}, + {"normAtFinalTime",1386}, + {""}, {""}, + {"dummy1",722}, + {""}, {""}, + {"scaleFactorOfSecondWavelength",1971}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"indicatorOfUnitForTimeRangeForReferencePeriod",1004}, - {""}, - {"offsetSection2",1564}, - {"unpackedSubsetPrecision",2386}, - {""}, {""}, {""}, - {"scaledValueOfDistanceFromEnsembleMean",1976}, - {""}, {""}, - {"is_ocean3d_param",1052}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"firstDimensionCoordinateValueDefinition",869}, - {""}, - {"ijDirectionIncrementGiven",988}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"N2",174}, - {""}, - {"forecastOrSingularVectorNumber",887}, - {"reducedGrid",1838}, - {""}, {""}, - {"unitsConversionScaleFactor",2376}, - {"grib2LocalSectionPresent",922}, - {""}, {""}, - {"cloudsTitle3Trend1",531}, - {""}, {""}, - {"monthOfForecastUsedInLocalTime",1357}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"realPartOf00",1828}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"GTSstr",79}, - {""}, {""}, - {"windGust",2469}, - {""}, {""}, - {"rangeBinSpacing",1813}, {""}, {""}, {""}, {""}, {""}, - {"windVariableDirectionTrend2",2487}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"typeOfEnsembleMember",2323}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfLengthOfSemiMinorAxis",1953}, - {""}, - {"integerPointValues",1016}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondaryBitmapPresent",2029}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"grib2LocalSectionNumber",921}, - {""}, {""}, - {"localFlagLatestVersion",1177}, - {"numberOfParallelsBetweenAPoleAndTheEquator",1474}, - {""}, {""}, - {"componentIndex",567}, - {""}, {""}, {""}, {""}, - {"DxInMetres",41}, - {""}, {""}, {""}, {""}, - {"upperThresholdValue",2398}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, + {"integerPointValues",1017}, {"DjInDegrees",36}, - {""}, - {"BufrTemplate",19}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"localTablesVersion",1191}, - {""}, {""}, - {"xDirectionGridLengthInMetres",2494}, - {"windSpeedTrend2",2477}, - {""}, {""}, {""}, {""}, {""}, - {"Lar1InDegrees",110}, - {""}, {""}, {""}, - {"missingValueManagement",1339}, - {"attributeOfTile",325}, {""}, {""}, {""}, {""}, - {"NrInRadiusOfEarthScaled",203}, - {"numberOfAdditionalParametersForReferencePeriod",1403}, - {""}, {""}, {""}, - {"Lor1InDegrees",145}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"secondaryBitmaps",2030}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDistinctSection5s",1437}, - {""}, {""}, - {"latitudeOfSouthernPoleInDegrees",1106}, - {""}, - {"offsetBSection9",1549}, - {""}, - {"subSetM",2219}, - {""}, - {"cloudsCode3",510}, - {""}, {""}, - {"cloudsTitle4Trend4",539}, - {"coordAveragingTims",591}, - {""}, {""}, - {"GTS",78}, - {"LxInMetres",153}, - {""}, {""}, - {"biFourierResolutionParameterM",365}, - {"section6Length",2069}, - {""}, - {"windDirectionTrend2",2466}, - {""}, {""}, {""}, - {"xDirectionGridLengthInMillimetres",2495}, - {"latitudeOfSubSatellitePoint",1109}, - {""}, - {"lowerThresholdValue",1238}, + {"subSetM",2230}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfCentralPointInClusterDomain",1092}, - {""}, - {"NrInRadiusOfEarth",202}, - {""}, - {"isectionNumber2",1054}, - {""}, {""}, {""}, {""}, - {"wrongPadding",2490}, - {""}, {""}, {""}, {""}, {"flagForIrregularGridCoordinateList",879}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"GTSstr",78}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"conceptsMasterMarsDir",578}, - {""}, {""}, - {"isRotatedGrid",1040}, - {"secondaryBitmapsCount",2031}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend3",538}, - {""}, - {"md5Section7",1304}, - {""}, - {"scaledValueOfAdditionalParameterForReferencePeriod",1974}, - {""}, - {"tiggeLAMName",2259}, - {"La1InDegrees",102}, - {""}, {""}, {""}, {""}, {""}, - {"dayOfTheYearDate",674}, - {""}, {""}, {""}, {""}, - {"earthMinorAxisInMetres",732}, - {""}, - {"packedValues",1618}, - {""}, - {"Lo1InDegrees",125}, - {"section5Pointer",2066}, - {""}, {""}, {""}, {""}, {""}, - {"DiGiven",31}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"thisMarsClass",2251}, - {"instrumentType",1015}, - {""}, - {"listMembersUsed",1153}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfWaveDirections",1968}, - {""}, {""}, {""}, - {"_numberOfValues",295}, - {""}, {""}, - {"timeDomainTemplateNumber",2271}, - {""}, {""}, - {"meanRVR4",1312}, - {""}, - {"doExtractArea",716}, - {"scaleFactorOfWaveDirectionSequenceParameter",1967}, - {""}, {""}, - {"indicatorOfTypeOfLevel",1000}, - {"monthOfEndOfOverallTimeInterval",1355}, - {""}, - {"southEastLatitudeOfLPOArea",2150}, - {"latitudeOfFirstGridPointInDegrees",1096}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfWaveFrequencies",1969}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"indexedStorageInternalNodeK",993}, - {""}, {""}, - {"offsetBeforeData",1551}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfRepresentativeMember",1497}, - {""}, {""}, {""}, {""}, - {"AA",6}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"jScansNegatively",1067}, - {""}, {""}, - {"firstDimensionPhysicalSignificance",870}, - {""}, - {"baseTimeEPS",339}, - {"typeOfGrid",2326}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"sp1",2159}, - {""}, - {"sizeOfLength",2140}, - {"P2",215}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"spare1",2165}, - {""}, {""}, - {"originatingCentreOfAnalysis",1608}, - {"unstructuredGrid",2389}, - {""}, {""}, {""}, {""}, - {"remarkPresent",1853}, + {"cloudsTitle1Trend4",523}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"correction2",616}, {""}, {""}, {""}, - {"unstructuredGridType",2391}, - {"secondOfEndOfOverallTimeInterval",2018}, - {"experimentVersionNumber",805}, + {"scaleFactorOfWaveFrequencySequenceParameter",1979}, + {"endStepUnit",773}, + {"originatorLocalTemplateNumber",1618}, + {"centreForTable2",409}, {""}, {""}, - {"originatorLocalTemplateNumber",1611}, - {""}, {""}, - {"section1",2040}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfCoordinatesValues",1426}, + {"reserved1",1868}, + {""}, + {"pressureUnits",1775}, + {""}, + {"offsetSection6",1575}, + {""}, + {"marsType1",1276}, + {"X1",267}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"minuteOfEndOfOverallTimeInterval",1329}, - {"meanRVR3",1311}, - {""}, - {"earthMajorAxis",729}, - {""}, {""}, - {"verticalVisibilityCoded",2441}, - {""}, - {"cloudsTitle1Trend2",522}, - {""}, {""}, - {"numberOfClusters",1418}, - {""}, - {"scaleFactorOfWaveFrequencySequenceParameter",1970}, - {""}, - {"yearOfEndOfOverallTimeInterval",2508}, - {""}, {""}, {""}, - {"secondOrderOfDifferentWidth",2024}, + {"windGust",2489}, {""}, {""}, {""}, {""}, {""}, - {"deleteCalendarId",690}, - {""}, {""}, {""}, {""}, - {"marsStream2",1272}, - {""}, {""}, {""}, {""}, {""}, - {"offsetEndSection4",1555}, - {""}, {""}, {""}, {""}, - {"numberOfCodedValues",1419}, + {"sizeOfLength",2149}, {""}, - {"stepUnits",2201}, + {"section_07",2102}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windVariableDirectionTrend3",2508}, {""}, {""}, - {"LcxInMetres",119}, - {""}, {""}, {""}, {""}, {""}, - {"typeOfWavePeriodInterval",2349}, - {""}, - {"longitudeOfSouthEastCornerOfArea",1219}, - {""}, - {"coordAveraging0",587}, - {"unpackedError",2385}, + {"clusterMember10",541}, {""}, {""}, - {"subDefinitions2",2210}, - {""}, {""}, {""}, {""}, - {"packingError",1619}, + {"gribDataQualityChecks",926}, + {""}, {""}, + {"southEastLongitudeOfVerficationArea",2162}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"thisMarsClass",2262}, {""}, - {"is_ocean2d_param",1051}, - {""}, {""}, {""}, - {"windVariableDirectionTrend1",2486}, - {""}, - {"baseDateEPS",337}, - {""}, - {"keyMore",1074}, - {""}, {""}, {""}, - {"gribTablesVersionNo",927}, - {""}, {""}, {""}, - {"endOfMessage",769}, - {"biFourierResolutionSubSetParameterM",367}, - {"LuxInMetres",149}, + {"missingValueManagement",1341}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"rootTablesDir",1879}, - {""}, {""}, - {"beginDayTrend4",345}, - {""}, - {"runwayFrictionCoefficientState4",1930}, - {""}, {""}, {""}, - {"hourOfEndOfOverallTimeInterval",965}, - {"heightPressureEtcOfLevels",955}, + {"primaryBitmap",1776}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"postAuxiliaryArrayPresent",1744}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GTS",77}, + {""}, {""}, + {"windSpeedTrend2",2497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {"flagForAnyFurtherInformation",878}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfNorthWestCornerOfArea",1101}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"dummy1",723}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfSecondWavelength",1962}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"secondaryMissingValue",2033}, - {""}, {""}, {""}, - {"endStepInHours",773}, - {""}, {""}, {""}, - {"runwayDepositState2",1892}, - {""}, {""}, {""}, - {"theHindcastMarsStream",2248}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientState3",1929}, - {"verificationYear",2426}, - {""}, {""}, {""}, {""}, {""}, - {"oceanAtmosphereCoupling",1536}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"yCoordinateOfOriginOfSectorImage",2498}, - {""}, - {"marsType1",1274}, - {"reserved1",1859}, - {""}, {""}, {""}, {""}, - {"clusterMember10",542}, - {""}, {""}, {""}, {""}, - {"windUnits",2480}, - {""}, - {"scaledValueOfPrimeMeridianOffset",1989}, - {""}, {""}, - {"southEastLongitudeOfVerficationArea",2153}, - {"md5Section3",1300}, - {""}, {""}, - {"formatVersionMinorNumber",898}, - {""}, - {"identificationOfOriginatingGeneratingCentre",983}, - {""}, - {"runwaySideCodeState2",1932}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudinalDirectionGridLength",1121}, - {"totalNumberOfClusters",2289}, - {""}, {""}, {""}, {""}, - {"clusterMember4",545}, - {"bufrdcExpandedDescriptors",386}, - {""}, {""}, - {"beginDayTrend3",344}, - {""}, {""}, {""}, {""}, {""}, - {"jScansPositively",1068}, - {""}, {""}, - {"La1",101}, - {""}, {""}, {""}, - {"Lar1",109}, - {""}, {""}, {""}, {""}, - {"xCoordinateOfSubSatellitePoint",2492}, - {""}, {""}, - {"Latin1",114}, - {""}, {""}, - {"Lo1",124}, - {""}, {""}, {""}, - {"Lor1",144}, - {""}, {""}, {""}, {""}, {""}, - {"versionOfModelClimate",2435}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"presentTrend2",1747}, - {""}, {""}, {""}, {""}, - {"definitionFilesVersion",689}, - {"patch_precip_fp",1716}, - {"endOfHeadersMarker",767}, - {"cavokOrVisibility",392}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsTitle2",525}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"LLCOSP",99}, - {"Dj",34}, - {""}, - {"default_step_units",688}, - {""}, {""}, {""}, - {"scanningMode4",2005}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"conceptsDir2",573}, - {"pastTendencyRVR3",1714}, - {"azimuthalWidth",332}, - {""}, {""}, {""}, - {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",1420}, - {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",1421}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"indicatorOfUnitForTimeIncrement",1002}, - {""}, {""}, - {"endMinuteTrend4",761}, - {"numberOfPointsInDomain",1489}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"centralLongitudeInMicrodegrees",406}, - {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend2",537}, - {"pressureUnits",1766}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"tiggeSuiteID",2263}, - {""}, - {"tablesLocalDir",2236}, - {""}, {""}, {""}, - {"localTablesVersionNumber",1192}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"gaussianGridName",908}, - {"clusterMember3",544}, - {""}, {""}, - {"southPoleOnProjectionPlane",2156}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfWaveFrequencies",1525}, - {"section_10",2097}, - {""}, - {"md5Headers",1295}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"NC",177}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section1Flags",2045}, - {""}, - {"subLocalDefinition2",2212}, - {""}, {""}, - {"thisExperimentVersionNumber",2250}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"endDayTrend2",748}, - {""}, {""}, {""}, {""}, - {"section_4",2101}, - {""}, {""}, - {"expandBy",790}, - {""}, - {"scaleFactorOfFirstWavelength",1951}, - {""}, {""}, - {"getNumberOfValues",916}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"latitudeOfFirstGridPointInDegrees",1097}, + {"numberOfClusters",1423}, + {""}, + {"correction3",618}, + {"doExtractSubsets",717}, {""}, {""}, {""}, - {"offsetSection1",1561}, + {"earthMajorAxis",728}, + {""}, {""}, {""}, + {"earthMinorAxisInMetres",731}, + {"legBaseTime",1126}, {""}, - {"numberOfWaveDirections",1524}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"coordinate2End",595}, - {"sourceOfGridDefinition",2148}, - {""}, {""}, {""}, {""}, - {"endMinuteTrend3",760}, - {""}, {""}, - {"cloudsTitle1Trend1",521}, - {"extractDateTimeYearStart",842}, - {""}, {""}, - {"LIMITS",98}, - {""}, - {"kindOfProduct",1076}, - {"rootGroupObjectHeaderAddress",1877}, - {""}, {""}, - {"N1",173}, - {""}, - {"SOH",228}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"TIDE",238}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typicalMonth",2357}, - {"numberOfClusterLowResolution",1417}, - {""}, {""}, {""}, {""}, - {"unstructuredGridSubtype",2390}, - {"numberOfBits",1405}, - {"resolutionAndComponentFlags6",1873}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"flagShowingPostAuxiliaryArrayInUse",881}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"offsetSection1",1568}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_3",2100}, - {""}, {""}, {""}, - {"spaceUnitFlag",2162}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"longitudeOfTangencyPoint",1226}, - {""}, {""}, {""}, - {"P_INST",219}, - {"unpackedValues",2387}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberIncludedInAverage",1401}, - {""}, {""}, {""}, {""}, - {"inputShortDelayedDescriptorReplicationFactor",1012}, - {"NH",184}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"param_value_max",1696}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"windSpeedTrend1",2476}, - {""}, {""}, {""}, - {"reservedSection2",1864}, - {""}, - {"_leg_number",294}, - {""}, {""}, {""}, - {"monthlyVerificationYear",1364}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"typeOfReferenceDataset",2337}, - {"Nj",200}, - {""}, {""}, - {"preBitmapValues",1738}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"section_04",2090}, - {""}, - {"selectStepTemplateInstant",2106}, - {""}, {""}, - {"typeOfPacking",2333}, - {""}, {""}, - {"section4Length",2060}, + {"LxInMetres",152}, {""}, {""}, {""}, {""}, {""}, - {"coordinateFlag2",605}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"clusteringDomain",553}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"ls_labeling",1239}, - {""}, - {"windDirectionTrend1",2465}, + {"offsetEndSection4",1562}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"totalNumberOfWaveDirections",2301}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfCentralPointInClusterDomain",1204}, - {"secondaryBitmapsSize",2032}, - {"cfVarNameECMF",422}, - {""}, {""}, {""}, - {"runwayFrictionCoefficientState2",1928}, - {""}, - {"localLatitude2",1181}, - {""}, {""}, {""}, {""}, {""}, - {"GDSPresent",68}, {""}, {""}, - {"totalNumberOfWaveFrequencies",2302}, - {"unitOfTimeRange",2372}, + {"spaceUnitFlag",2171}, + {"numberOfPointsAlongASide",1485}, + {""}, {""}, + {"deleteCalendarId",689}, + {"thisExperimentVersionNumber",2261}, + {""}, {""}, + {"biFourierResolutionParameterM",364}, + {""}, {""}, + {"unitOfTimeRange",2390}, + {""}, + {"endOfMessage",768}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"unstructuredGrid",2407}, {""}, {""}, {""}, - {"falseEasting",859}, - {""}, {""}, {""}, {""}, - {"section3Length",2055}, - {"extractAreaEastLongitude",817}, - {"numberOfHorizontalPoints",1456}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongAMeridian",1483}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"jDirectionIncrementInDegrees",1064}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"section5",2064}, - {"NUT",192}, - {"XRInMetres",273}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"upperThresholdValue",2416}, {""}, {""}, {""}, - {"runwayDesignatorState4",1910}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"postAuxiliaryArrayPresent",1735}, - {""}, {""}, {""}, {""}, - {"variationOfVisibilityTrend4",2422}, - {"observationType",1533}, - {"section_03",2089}, - {""}, {""}, {""}, {""}, - {"scaleFactorOfCentralWaveNumber",1944}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondaryMissingValueSubstitute",2034}, + {"section_4",2110}, {""}, {""}, - {"normAtFinalTime",1381}, - {""}, {""}, {""}, {""}, - {"cloudsTitle4Trend1",536}, + {"halfByte",951}, + {""}, {""}, + {"monthOfEndOfOverallTimeInterval",1357}, + {"unstructuredGridType",2409}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"rdbtimeMonth",1823}, - {""}, - {"jPointsAreConsecutive",1066}, - {""}, {""}, {""}, {""}, - {"longitudeOfReferencePoint",1217}, + {"instrumentType",1016}, {""}, {""}, {""}, {""}, {""}, - {"numberOfDataBinsAlongRadials",1427}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"endGridDefinition",752}, - {""}, {""}, {""}, {""}, - {"unexpandedDescriptors",2367}, + {"scaleFactorOfFirstWavelength",1960}, {""}, - {"longitudeOfTheSouthernPoleOfProjection",1230}, + {"northWestLatitudeOfLPOArea",1391}, {""}, {""}, {""}, - {"runwayDesignatorState3",1909}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityDirectionTrend4",2418}, - {""}, {""}, {""}, - {"variationOfVisibilityTrend3",2421}, - {""}, {""}, {""}, {""}, - {"cloudsTitle2Trend4",529}, - {""}, {""}, {""}, {""}, - {"longitudeOfSouthernPole",1220}, + {"windDirectionTrend2",2486}, + {""}, {""}, + {"bufrdcExpandedDescriptors",385}, {""}, - {"P1",214}, + {"indexedStorageInternalNodeK",994}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"subLocalDefinitionLength2",2214}, - {""}, - {"easternLongitudeOfClusterDomain",735}, - {""}, - {"startDateOfReferencePeriod",2180}, - {""}, {""}, - {"extractAreaNorthLatitude",820}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"HDF5str",81}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"scaledValueOfLengthOfSemiMinorAxis",1984}, - {"localLongitude2",1184}, - {""}, {""}, {""}, - {"clusterMember7",548}, - {""}, {""}, - {"unexpandedDescriptorsEncoded",2368}, - {""}, {""}, {""}, - {"mask",1277}, - {""}, - {"cloudsCode4",515}, - {""}, {""}, - {"variationOfVisibilityDirectionTrend3",2417}, - {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositCodeState4",1898}, - {""}, {""}, {""}, - {"cloudsTitle2Trend3",528}, - {""}, {""}, - {"longitudeOfThePoleOfStretching",1227}, - {""}, {""}, {""}, - {"dateSSTFieldUsed",663}, + {"latitudinalDirectionGridLength",1122}, {""}, {""}, {""}, {""}, {""}, - {"visibilityInKilometresTrend4",2446}, - {"md5Section5",1302}, - {"nameLegacyECMF",1372}, - {"numberOfClusterHighResolution",1416}, + {"centralLongitudeInMicrodegrees",405}, {""}, - {"produceLargeConstantFields",1776}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"NRj",190}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"PUnset",217}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pack",1617}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"selectStepTemplateInterval",2107}, - {""}, - {"scanningMode7",2008}, - {""}, {""}, {""}, - {"subDefinitions1",2209}, - {""}, {""}, {""}, - {"runwayDepthOfDepositCodeState3",1897}, - {""}, {""}, {""}, - {"section7Length",2073}, - {""}, - {"METARstr",158}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Dj",34}, + {"param_value_max",1704}, + {"heightPressureEtcOfLevels",956}, + {"selectedHour",2119}, {""}, {""}, {""}, {""}, - {"deleteLocalDefinition",692}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"alternativeRowScanning",309}, - {""}, {""}, - {"offsetBSection6",1548}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"gts_TTAAii",947}, - {""}, {""}, {""}, {""}, - {"backgroundGeneratingProcessIdentifier",333}, - {""}, - {"westernLongitudeOfClusterDomain",2458}, - {""}, {""}, {""}, {""}, - {"extractDateTimeHourStart",829}, - {"unpack",2384}, - {""}, - {"mBasicAngle",1244}, + {"DiGiven",31}, {""}, {""}, {""}, - {"referenceForGroupWidths",1843}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"probabilityType",1773}, - {""}, - {"meanRVR2",1310}, - {""}, - {"visibilityInKilometresTrend3",2445}, - {"subLocalDefinitionNumber2",2216}, + {"tablesLocalDir",2247}, + {""}, {""}, {""}, {""}, + {"coordinate2Start",597}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section11Pointer",2044}, - {"runwayDepositState1",1891}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_7",2104}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"satelliteID",1938}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwaySideCodeState1",1931}, + {"subDefinitions2",2221}, {""}, - {"cloudsAbbreviation4",455}, + {"longitudeOfReferencePoint",1219}, + {""}, + {"legBaseDate",1125}, + {""}, + {"Yp",285}, + {""}, {""}, + {"unpackedSubsetPrecision",2404}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfWaveDirectionSequenceParameter",1998}, - {""}, - {"iDirectionIncrementGiven",975}, - {"parameterUnits",1705}, + {"Yo",284}, + {"longitudeOfTangencyPoint",1228}, {""}, {""}, {""}, {""}, {""}, - {"X2",270}, + {"typeOfGrid",2343}, + {"numberOfPointsInDomain",1494}, {""}, - {"codedNumberOfGroups",561}, + {"cloudsTitle4Trend2",536}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windSpeedTrend1",2496}, + {"conceptsMasterMarsDir",578}, {""}, - {"rdb_key",1817}, - {"Product_Identifier",222}, + {"observationType",1540}, + {""}, + {"rootGroupObjectHeaderAddress",1886}, + {""}, + {"N2",173}, + {""}, {""}, {""}, {""}, + {"rangeBinSpacing",1822}, + {"extractDateTimeYearStart",842}, + {"section_04",2099}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section1Flags",2054}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"startDateOfReferencePeriod",2189}, + {""}, + {"minuteOfEndOfOverallTimeInterval",1331}, + {""}, {""}, + {"DxInMetres",41}, + {"rootTablesDir",1888}, + {""}, {""}, {""}, {""}, + {"secondOfEndOfOverallTimeInterval",2027}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"southPoleOnProjectionPlane",2165}, + {"section7Length",2082}, + {""}, + {"numberOfPointsAlongSecondAxis",1487}, + {""}, + {"P_INST",218}, + {""}, + {"isRotatedGrid",1041}, + {""}, {""}, {""}, + {"northWestLatitudeOfVerficationArea",1392}, + {""}, {""}, + {"secondaryBitmap",2037}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"jPointsAreConsecutive",1067}, + {"P2",214}, + {""}, {""}, {""}, + {"BufrTemplate",19}, + {""}, + {"componentIndex",567}, + {"packedValues",1625}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientState1",1927}, - {"probabilityTypeName",1774}, + {"selectStepTemplateInstant",2115}, + {"tiggeSuiteID",2274}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"subLocalDefinition2",2223}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle4Trend1",535}, + {""}, + {"longitudeOfTheSouthernPoleOfProjection",1232}, + {""}, {""}, {""}, {""}, {""}, + {"versionOfModelClimate",2455}, + {""}, {""}, + {"scaledValueOfPrimeMeridianOffset",1998}, + {""}, + {"extractDateTimeHourStart",829}, + {""}, + {"cloudsTitle3",529}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"parametersVersion",1715}, + {""}, {""}, + {"selectedYear",2123}, + {""}, + {"lowerThresholdValue",1240}, + {"hourOfEndOfOverallTimeInterval",966}, + {""}, {""}, {""}, {""}, + {"numberOfPointsAlongAParallel",1484}, + {"LcxInMetres",118}, + {""}, {""}, + {"yCoordinateOfOriginOfSectorImage",2518}, + {""}, {""}, {""}, {""}, + {"n3",1370}, + {"cloudsTitle1Trend2",521}, + {"localYear",1199}, + {""}, {""}, {""}, {""}, {""}, + {"windDirectionTrend1",2485}, + {""}, + {"LuxInMetres",148}, + {""}, + {"offsetBeforeData",1558}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierResolutionSubSetParameterM",366}, + {""}, + {"offsetBSection9",1556}, + {""}, {""}, {""}, {""}, {""}, + {"longitudeOfThePoleOfStretching",1229}, + {"isectionNumber2",1055}, + {"sp3",2170}, + {""}, {""}, + {"oceanAtmosphereCoupling",1543}, + {"easternLongitudeOfClusterDomain",734}, + {""}, {""}, + {"runwayFrictionCoefficientState4",1939}, + {""}, {""}, {""}, + {"secondaryMissingValue",2042}, + {""}, + {"spare3",2176}, + {""}, + {"Product_Identifier",221}, + {"yearOfEndOfOverallTimeInterval",2528}, + {""}, {""}, {""}, {""}, + {"cloudsTitle3Trend4",533}, + {""}, {""}, {""}, {""}, + {"subDefinitions1",2220}, + {""}, {""}, {""}, {""}, + {"padding_sec1_loc",1692}, + {""}, {""}, {""}, + {"section4Length",2069}, + {""}, {""}, {""}, {""}, {""}, + {"dateSSTFieldUsed",663}, + {"percentileValue",1729}, + {""}, {""}, {""}, {""}, + {"beginDayTrend4",344}, + {"produceLargeConstantFields",1785}, + {"secondaryBitmapPresent",2038}, + {""}, {""}, + {"formatVersionMinorNumber",899}, + {""}, {""}, + {"NC",176}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Section7",1306}, + {"unstructuredGridSubtype",2408}, + {""}, + {"PUnset",216}, + {"coordinate1End",592}, + {""}, {""}, + {"N1",172}, + {""}, + {"longitudeOfSouthEastCornerOfArea",1221}, + {"subLocalDefinitionLength2",2225}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"firstMonthUsedToBuildClimateMonth2",874}, + {""}, + {"expandedCrex_scales",793}, + {""}, {""}, + {"jDirectionIncrementInDegrees",1065}, + {""}, {""}, {""}, + {"Model_Additional_Information",167}, + {""}, + {"TIDE",237}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle1Trend1",520}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"identificationOfOriginatingGeneratingCentre",984}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"uerraLocalVersion",2383}, + {""}, + {"clusterMember7",547}, + {""}, {""}, + {"xCoordinateOfSubSatellitePoint",2512}, + {""}, + {"meanRVR4",1314}, + {""}, {""}, + {"NrInRadiusOfEarthScaled",202}, + {""}, + {"P1",213}, + {"expandedCrex_units",794}, + {""}, + {"numberOfDistinctSection5s",1442}, + {""}, + {"coordinate2Flag",596}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NUT",191}, + {""}, {""}, {""}, {""}, {""}, + {"versionNumberOfExperimentalSuite",2452}, + {"stepInHours",2205}, + {""}, {""}, + {"LIMITS",97}, + {"falseEasting",859}, + {""}, + {"subLocalDefinition1",2222}, + {"alternativeRowScanning",308}, + {"presentTrend2",1756}, + {""}, + {"typicalYear",2378}, + {""}, {""}, {""}, + {"marsKeywords1",1260}, + {"Sub-Experiment_Identifier",234}, + {""}, {""}, {""}, {""}, + {"endDayTrend3",748}, + {""}, {""}, {""}, {""}, {""}, + {"NrInRadiusOfEarth",201}, + {""}, {""}, + {"qfeUnits",1804}, + {"numberOfClusterHighResolution",1421}, + {""}, + {"directionOfVariation",707}, + {"qnhUnits",1808}, + {"secondaryBitmaps",2039}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"unpackedError",2403}, + {"firstMonthUsedToBuildClimateMonth1",873}, + {""}, {""}, + {"totalNumberOfWaveDirections",2317}, + {""}, {""}, + {"rdbtimeYear",1835}, + {"parameterUnits",1713}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfLengthOfSemiMinorAxis",1993}, + {""}, + {"totalNumberOfWaveFrequencies",2318}, + {""}, + {"scanningMode7",2017}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfClusterLowResolution",1422}, + {""}, {""}, {""}, + {"Ensemble_Identifier",50}, + {""}, {""}, {""}, {""}, + {"secondaryBitmapsCount",2040}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetFromReferenceOfFirstTime",1565}, + {""}, {""}, + {"westernLongitudeOfClusterDomain",2478}, + {""}, {""}, {""}, {""}, + {"remarkPresent",1862}, + {""}, + {"packingError",1626}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"section3Flags",2063}, + {""}, {""}, {""}, {""}, + {"runwayDepositState2",1901}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityInKilometresTrend4",2466}, + {""}, {""}, {""}, {""}, + {"tiggeLocalVersion",2271}, + {""}, {""}, + {"scaledValueOfWaveDirectionSequenceParameter",2007}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"sourceOfGridDefinition",2157}, + {"scaleFactorOfUpperLimit",1974}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"firstDimensionPhysicalSignificance",870}, + {""}, {""}, + {"METARstr",157}, + {""}, {""}, {""}, + {"totalNumberOfClusters",2304}, + {""}, {""}, + {"diffInHours",701}, + {""}, {""}, {""}, + {"subLocalDefinitionLength1",2224}, + {""}, {""}, {""}, {""}, + {"longitudeOfCentralPointInClusterDomain",1206}, + {""}, {""}, {""}, + {"reserved3",1870}, + {""}, {""}, {""}, {""}, {""}, + {"runwaySideCodeState2",1941}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"startStepUnit",2195}, + {""}, {""}, {""}, {""}, + {"cloudsTitle4Trend3",537}, + {""}, {""}, {""}, {""}, + {"reservedSection3",1874}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4",454}, + {"selectStepTemplateInterval",2116}, + {"cloudsCode4",514}, + {""}, {""}, {""}, {""}, {""}, + {"section11Pointer",2053}, + {""}, {""}, {""}, {""}, + {"numberOfUnexpandedDescriptors",1517}, + {""}, {""}, {""}, {""}, {""}, + {"expandedCrex_widths",795}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfUsedTileAttributes",1521}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"presentTrend1",1755}, + {"section5Pointer",2075}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"scaledValueOfSecondWavelength",2002}, + {"numberOfWaveFrequencySequenceParameters",1533}, + {"numberOfStepsUsedForClustering",1510}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfUsedTileAttributesForTileAttributeCombination",1522}, + {""}, {""}, {""}, + {"scaledValuesOfWaveDirections",2009}, + {"Nj",199}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfWaveDirectionSequenceParameters",1530}, + {""}, + {"secondaryMissingValueSubstitute",2043}, {""}, {"dataSubCategory",647}, - {""}, {""}, - {"referenceForGroupLengths",1842}, - {"versionNumOfSharedHeaderMessageFormat",2431}, {""}, {""}, {""}, {""}, {""}, - {"xCoordinateOfOriginOfSectorImage",2491}, - {""}, - {"qnhUnits",1799}, - {""}, - {"qfeUnits",1795}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"marsKeywords1",1258}, - {""}, - {"presentTrend1",1746}, + {"clusterMember4",544}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberMissingFromAveragesOrAccumulations",1407}, {""}, {""}, {""}, {""}, - {"totalNumberOfGridPoints",2294}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"offsetSection5",1567}, + {"Model_Identifier",168}, {""}, {""}, - {"mixedCoordinateFieldFlag",1344}, - {""}, {""}, - {"DjInMetres",37}, - {""}, {""}, - {"dateOfModelVersion",660}, - {"latitudeOfSubSatellitePointInDegrees",1110}, - {"timeOfModelVersion",2277}, + {"offsetSection3",1572}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"expandedCrex_scales",793}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section2Length",2049}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforePL",1552}, - {""}, {""}, {""}, - {"cloudsAbbreviation3",450}, - {""}, {""}, {""}, - {"matrixBitmapsPresent",1287}, - {""}, {""}, {""}, {""}, - {"latitudeOfLastGridPoint",1099}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfWaveFrequencySequenceParameter",1999}, - {""}, - {"METAR",157}, - {""}, {""}, {""}, {""}, {""}, - {"MinuteOfModelVersion",160}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"expandedCrex_units",794}, - {"beginDayTrend2",343}, - {""}, {""}, {""}, - {"offsetFromReferenceOfFirstTime",1558}, - {""}, {""}, {""}, {""}, - {"Model_Identifier",169}, - {""}, {""}, {""}, - {"swapScanningAlternativeRows",2224}, + {"endMinuteTrend4",760}, + {"forceStepUnits",885}, + {"scaledValueOfWaveFrequencySequenceParameter",2008}, {""}, {""}, - {"section_07",2093}, - {""}, - {"ITERATOR",91}, + {"numberOfPointsAlongXAxisInCouplingArea",1491}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfTangencyPoint",1112}, {""}, {""}, {""}, - {"subLocalDefinition1",2211}, - {""}, {""}, - {"longitudeOfThePolePoint",1228}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"md5Section10",1298}, - {""}, {""}, {""}, - {"crraSuiteID",631}, + {"clusteringDomain",552}, {""}, {""}, {""}, {""}, - {"scaleFactorOfUpperLimit",1965}, - {"extractDateTimeMinuteEnd",830}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"northWestLatitudeOfVerficationArea",1387}, - {"extractDateTimeMinuteStart",832}, - {"typeOfProcessedData",2336}, - {""}, - {"yearOfModelVersion",2511}, - {""}, {""}, {""}, - {"physicalMeaningOfVerticalCoordinate",1728}, - {""}, - {"endMonthTrend4",765}, + {"runwayDepositState1",1900}, + {"numberIncludedInAverage",1406}, + {"scaledValuesOfWaveFrequencies",2010}, {""}, {""}, - {"numberMissingFromAveragesOrAccumulations",1402}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorState2",1908}, - {"md5Section4",1301}, + {"cloudsTitle1Trend3",522}, + {""}, + {"longitudeOfThePolePoint",1230}, + {"runwayFrictionCoefficientState2",1937}, + {""}, {""}, + {"cfVarNameECMF",421}, + {"WRAPstr",266}, + {""}, {""}, {""}, + {"swapScanningAlternativeRows",2235}, + {""}, + {"variationOfVisibilityDirection",2433}, + {""}, {""}, {""}, + {"cloudsTitle3Trend2",531}, + {""}, + {"variationOfVisibilityDirectionAngle",2434}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondOrderValuesDifferentWidths",2034}, + {""}, {""}, {""}, + {"section2Length",2058}, + {""}, {""}, + {"scanningMode4",2014}, + {""}, + {"deleteLocalDefinition",691}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityTrend2",2420}, - {""}, {""}, - {"extractDateTimeMonthEnd",833}, - {""}, {""}, {""}, - {"expandedUnits",803}, - {""}, {""}, {""}, - {"extractDateTimeMonthStart",835}, + {"tempPressureUnits",2254}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfTangencyPoint",1111}, - {""}, - {"latitudeWhereDxAndDyAreSpecified",1117}, - {""}, - {"MonthOfModelVersion",171}, - {""}, - {"scaledValueOfSecondWavelength",1993}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeWhereDxAndDyAreSpecifiedInDegrees",1118}, - {""}, {""}, {""}, {""}, - {"numberOfDataPointsExpected",1430}, - {"runwayFrictionCodeValueState4",1922}, - {""}, {""}, {""}, {""}, - {"WMO",265}, - {""}, {""}, {""}, {""}, {""}, - {"clusterMember2",543}, - {""}, - {"numberOfPointsAlongASide",1480}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"hourOfModelVersion",968}, - {""}, - {"variationOfVisibilityDirectionTrend2",2416}, {""}, {""}, - {"numberOfContributingSpectralBands",1424}, - {""}, {""}, {""}, {""}, - {"numberOfPointsAlongAMeridian",1478}, - {"cloudsTitle2Trend2",527}, - {"tsectionNumber5",2311}, + {"runwaySideCodeState1",1940}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"expandedCrex_widths",795}, - {""}, {""}, - {"dayOfModelVersion",671}, - {""}, - {"qualityControlIndicator",1801}, - {""}, {""}, - {"cloudsBase3",470}, {""}, {""}, {""}, {""}, - {"uuidOfVGrid",2406}, - {"runwayDepositCodeState4",1890}, - {""}, {""}, {""}, {""}, {""}, - {"tempPressureUnits",2243}, - {"pastTendencyRVR4",1715}, - {""}, - {"localUsePresent",1196}, - {"radiusOfTheEarth",1811}, - {""}, - {"runwayFrictionCodeValueState3",1921}, - {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend3",764}, + {"gaussianGridName",909}, {""}, {""}, - {"offsetValuesBy",1573}, + {"numberOfBits",1410}, + {""}, {""}, {""}, + {"typeOfReferenceDataset",2354}, + {""}, + {"section6Length",2078}, {""}, {""}, {""}, {""}, {""}, + {"cavokOrVisibility",391}, + {"runwayDesignatorState4",1919}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"keyMore",1075}, + {""}, {""}, + {"scaleFactorOfCentralWaveNumber",1953}, + {"inputShortDelayedDescriptorReplicationFactor",1013}, + {""}, {""}, + {"rdb_key",1826}, + {"preBitmapValues",1747}, + {"correction2",616}, + {""}, {""}, + {"firstOrderValues",875}, + {""}, {""}, + {"GDSPresent",67}, + {"scaleFactorOfLowerWavePeriodLimit",1964}, + {""}, {""}, + {"runwayFrictionCoefficientState1",1936}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfUsedSpatialTiles",1519}, + {""}, {""}, {""}, {""}, + {"cloudsTitle3Trend1",530}, + {""}, {"************_PRODUCT_***************",3}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositCodeState2",1896}, + {"WMO",264}, + {""}, {""}, {""}, + {"windSpeedTrend3",2498}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section1Length",2055}, + {""}, {""}, {""}, + {"iDirectionIncrementGiven",976}, + {""}, {""}, + {"section11Length",2052}, + {"localLatitude2",1183}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"variationOfVisibility",2432}, + {"localUsePresent",1198}, {""}, - {"beginHourTrend4",349}, - {""}, - {"Ensemble_Identifier",51}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"endMinuteTrend2",759}, - {""}, {""}, {""}, {""}, - {"scaledValuesOfWaveDirections",2000}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endGridDefinition",751}, + {"dayOfForecastUsedInLocalTime",670}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBytesPerInteger",1412}, - {""}, - {"latitudeFirstInDegrees",1089}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfGroups",1454}, - {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",2346}, - {"numberOfWaveFrequencySequenceParameters",1526}, - {""}, {""}, {""}, - {"constantAntennaElevationAngle",582}, - {""}, {""}, {""}, {""}, - {"numberOfPointsAlongAParallel",1479}, - {""}, {""}, {""}, - {"numberOfDaysInClimateSamplingWindow",1432}, - {"coordinateFlag1",604}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetAfterData",1543}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Model_Additional_Information",168}, + {"marsStream2",1274}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinateFlag2",605}, + {""}, {""}, + {"probabilityType",1782}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"dateOfSSTFieldUsed",662}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"secondaryBitMap",2027}, - {"iDirectionIncrementGridLength",976}, - {"runwayDepositCodeState3",1889}, - {"scaledValuesOfWaveFrequencies",2001}, - {""}, {""}, {""}, {""}, - {"section_2",2099}, - {"reflectivityCalibrationConstant",1852}, - {""}, {""}, {""}, {""}, - {"localLatitude1",1180}, - {""}, {""}, {""}, - {"matchAerosolBinNumber",1282}, - {"horizontalDomainTemplate",961}, - {"marsClass2",1248}, - {"longitudeLastInDegrees",1203}, - {""}, {""}, {""}, - {"cloudsCode1",500}, - {"numberOfPointsAlongSecondAxis",1482}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfWaveDirectionSequenceParameters",1523}, - {""}, {""}, {""}, {""}, - {"numberOfUsedTileAttributes",1515}, + {"offsetAfterData",1550}, {""}, - {"beginHourTrend3",348}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfUnexpandedDescriptors",1512}, - {""}, {""}, - {"Latin2InDegrees",117}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"totalAerosolBinsNumbers",2285}, - {"scaledValueOfFirstWavelength",1982}, - {""}, {""}, {""}, {""}, {""}, - {"NEAREST",181}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend4",494}, + {"section_2",2108}, + {"extractDateTimeMinuteEnd",830}, + {"mBasicAngle",1246}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"DayOfModelVersion",29}, + {"extractDateTimeMinuteStart",832}, + {""}, {""}, + {"secondaryBitmapsSize",2041}, + {""}, {""}, + {"probabilityTypeName",1783}, {""}, {""}, {""}, - {"section1Length",2046}, + {"scaledValueOfFirstWavelength",1991}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeMonthEnd",833}, {""}, - {"numberOfStepsUsedForClustering",1505}, - {""}, {""}, {""}, - {"Sub-Experiment_Identifier",235}, + {"YR",280}, + {""}, {""}, {""}, {""}, + {"extractDateTimeMonthStart",835}, + {""}, {""}, {""}, {""}, + {"METAR",156}, + {""}, {""}, {""}, {""}, {""}, + {"md5Section6",1305}, {""}, {""}, {""}, {""}, {""}, {""}, - {"WRAPstr",267}, + {"numberOfContributingSpectralBands",1429}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeStart",839}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfSSTFieldUsed",2339}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section9UniqueIdentifier",2082}, + {"offsetBeforePL",1559}, + {""}, {""}, {""}, {""}, {""}, + {"localFlagLatestVersion",1179}, {""}, {""}, - {"cloudsBaseCoded3",490}, - {"section8UniqueIdentifier",2079}, + {"extractAreaNorthLatitude",820}, + {"latitudeWhereDxAndDyAreSpecified",1118}, + {""}, {""}, + {"theHindcastMarsStream",2259}, {""}, + {"iDirectionIncrementGridLength",977}, + {"windDirectionTrend3",2487}, + {""}, {""}, {""}, + {"section_6",2112}, + {""}, {""}, {""}, {""}, + {"expandedUnits",803}, + {""}, {""}, + {"latitudeWhereDxAndDyAreSpecifiedInDegrees",1119}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"jScansNegatively",1068}, + {""}, + {"southEastLongitudeOfLPOArea",2161}, + {""}, {""}, + {"section_02",2097}, + {""}, {""}, {""}, + {"jScansPositively",1069}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfReferencePoint",1103}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfRadarSitesUsed",1497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"unpackedValues",2405}, + {""}, + {"MinuteOfModelVersion",159}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"extractDateTimeStart",839}, + {""}, {""}, {""}, {""}, + {"localTablesVersion",1193}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"latitudeOfSubSatellitePointInDegrees",1111}, + {""}, {""}, {""}, {""}, {""}, + {"localLatitude1",1182}, + {""}, {""}, + {"subLocalDefinitionNumber2",2227}, + {""}, {""}, {""}, {"extractDateTimeSecondEnd",836}, {""}, {""}, {""}, - {"cloudsBaseCoded3Trend3",493}, - {""}, {""}, {""}, {""}, {""}, + {"numberOfDataBinsAlongRadials",1432}, + {""}, {""}, {""}, {""}, {"extractDateTimeSecondStart",838}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"subLocalDefinitionLength1",2213}, - {""}, {""}, {""}, - {"northWestLatitudeOfLPOArea",1386}, {""}, - {"dayOfForecastUsedInLocalTime",670}, + {"localLongitude2",1186}, + {""}, {""}, + {"conceptsDir2",573}, + {""}, {""}, + {"unexpandedDescriptors",2385}, {""}, - {"listMembersMissing4",1152}, + {"typeOfSSTFieldUsed",2356}, {""}, {""}, {""}, {""}, - {"numberOfUsedSpatialTiles",1514}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"templatesMasterDir",2247}, - {""}, {""}, - {"endHourTrend4",756}, + {"NRj",189}, + {"coordinateFlag1",604}, + {"section_06",2101}, {""}, - {"localLongitude1",1183}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ITERATOR",90}, + {""}, + {"gribTablesVersionNo",928}, {""}, {""}, - {"runwayDesignatorState1",1907}, - {"numberOfRadarSitesUsed",1492}, - {"padding_sec1_loc",1685}, + {"longitudeOfSouthernPole",1222}, + {"numberOfHorizontalPoints",1461}, {""}, {""}, {""}, - {"sizeOfPostAuxiliaryArray",2142}, + {"cloudsTitle2",524}, + {""}, {""}, {""}, {""}, + {"dayOfTheYearDate",674}, + {""}, {""}, + {"section9UniqueIdentifier",2091}, + {"section_1",2105}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"section8UniqueIdentifier",2088}, + {""}, {""}, {""}, {""}, + {"numberOfControlForecastTube",1430}, + {""}, {""}, {""}, {""}, + {"uuidOfVGrid",2426}, + {""}, {""}, + {"unexpandedDescriptorsEncoded",2386}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"kindOfProduct",1077}, {""}, {""}, {""}, {""}, {""}, - {"variationOfVisibilityTrend1",2419}, - {"modelErrorType",1347}, - {"ceilingAndVisibilityOK",398}, - {""}, {""}, {""}, - {"section_02",2088}, - {""}, {""}, - {"horizontalDimensionProcessed",960}, - {""}, {""}, - {"section11Length",2043}, - {""}, {""}, - {"numberOfControlForecastTube",1425}, + {"matchAerosolBinNumber",1284}, + {"typeOfPacking",2350}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongXAxis",1485}, + {"numberOfDataPointsExpected",1435}, + {""}, {""}, {""}, + {"horizontalDomainTemplate",962}, + {""}, {""}, + {"MonthOfModelVersion",170}, + {""}, {""}, {""}, + {"pentagonalResolutionParameterK",1727}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"backgroundGeneratingProcessIdentifier",332}, + {"runwayFrictionCoefficientState3",1938}, + {""}, {""}, {""}, {""}, + {"DjInMetres",37}, + {"beginDayTrend2",342}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle3Trend3",532}, + {""}, {""}, {""}, {""}, {""}, + {"northWestLongitudeOfVerficationArea",1394}, + {"typicalMonth",2375}, + {"tsectionNumber3",2326}, + {""}, {""}, {""}, + {"isectionNumber3",1056}, + {"latitudeOfLastGridPoint",1100}, + {"section3Length",2064}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"section_01",2096}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"expandBy",790}, + {""}, {""}, {""}, {""}, {""}, + {"runwayDesignatorState2",1917}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"NEAREST",180}, + {"rdbtimeMonth",1832}, + {""}, {""}, {""}, {""}, + {"qualityControlIndicator",1810}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"minuteOfStartOfReferencePeriod",1336}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"secondOfStartOfReferencePeriod",2031}, + {""}, {""}, {""}, {""}, + {"runwayFrictionCodeValueState4",1931}, + {"padding_local40_1",1689}, + {""}, {""}, {""}, {""}, {""}, + {"meanRVR2",1312}, + {""}, + {"mixedCoordinateFieldFlag",1346}, + {""}, {""}, {""}, {""}, + {"cloudsCode1",499}, + {""}, {""}, {""}, {""}, + {"subLocalDefinitionNumber1",2226}, + {""}, {""}, + {"xCoordinateOfOriginOfSectorImage",2511}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersUsed4",1157}, + {""}, {""}, + {"localLongitude1",1185}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Latin2InDegrees",116}, + {""}, + {"endDayTrend2",747}, + {""}, + {"referenceForGroupWidths",1852}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"satelliteID",1947}, + {""}, + {"endOfHeadersMarker",766}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"extractAreaEastLongitude",817}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDesignatorState1",1916}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"inputOverriddenReferenceValues",1011}, + {""}, + {"physicalMeaningOfVerticalCoordinate",1737}, + {""}, {""}, + {"presentTrend3",1757}, + {""}, {""}, {""}, + {"Original_Parameter_Identifier",211}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"crraSuiteID",631}, + {""}, {""}, + {"codedNumberOfGroups",560}, + {""}, + {"referenceForGroupLengths",1851}, + {""}, {""}, {""}, + {"typeOfProcessedData",2353}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityInKilometresTrend2",2464}, + {""}, {""}, {""}, {""}, + {"totalAerosolBinsNumbers",2300}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfUpperLimit",2005}, + {""}, {""}, {""}, + {"beginDayTrend1",341}, + {""}, {""}, {""}, + {"Latin1InDegrees",114}, + {""}, {""}, + {"verificationYear",2446}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"sizeOfPostAuxiliaryArray",2151}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"constantAntennaElevationAngle",582}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"projTargetString",1795}, + {""}, {""}, {""}, {""}, + {"runwayDepositState3",1902}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordinate3OfFirstGridPoint",599}, + {"endStepInHours",772}, + {""}, {""}, {""}, + {"reservedSection2",1873}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation2",444}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unstructuredGridUUID",2392}, - {""}, {""}, {""}, - {"firstMonthUsedToBuildClimateMonth2",874}, - {""}, {""}, {""}, - {"variationOfVisibilityDirectionTrend1",2415}, - {""}, {""}, {""}, {""}, - {"latitudeOfReferencePoint",1102}, - {""}, {""}, {""}, - {"cloudsTitle2Trend1",526}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"listMembersMissing3",1151}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"meanRVR1",1311}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endHourTrend3",755}, + {"projSourceString",1793}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetICEFieldsUsed",1566}, {""}, {""}, - {"nameECMF",1371}, + {"runwaySideCodeState3",1942}, + {""}, {""}, {""}, + {"longitudeLastInDegrees",1205}, + {""}, {""}, {""}, + {"experimentVersionNumber",805}, + {"totalNumberOfGridPoints",2309}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1965}, + {""}, {""}, + {"numberOfGroups",1459}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"horizontalDimensionProcessed",961}, {""}, {""}, {""}, {""}, {""}, {""}, - {"disableGrib1LocalSection",711}, + {"marsClass2",1250}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositCodeState1",1895}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"meanRVR1",1309}, - {""}, - {"scaleFactorOfLowerWavePeriodLimit",1955}, - {"subLocalDefinitionNumber1",2215}, - {""}, {""}, {""}, - {"shortNameLegacyECMF",2128}, - {""}, {""}, {""}, {""}, {""}, - {"timeIncrementBetweenSuccessiveFields",2273}, - {""}, - {"recentWeather",1831}, - {""}, {""}, {""}, {""}, - {"numberOfSecondOrderPackedValues",1500}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfGroupsOfDataValues",1455}, - {""}, {""}, {""}, {""}, - {"runwayFrictionCodeValueState2",1920}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"projTargetString",1786}, - {""}, {""}, {""}, - {"unitsECMF",2378}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"scaledValueOfCentralWaveNumber",1975}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"southEastLongitudeOfLPOArea",2152}, - {""}, {""}, {""}, - {"X1",268}, - {""}, {""}, {""}, {""}, - {"visibilityTrend3",2449}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"accuracyMultipliedByFactor",298}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberInMixedCoordinateDefinition",1398}, - {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1956}, - {"md5Section1",1297}, - {""}, - {"section5Length",2065}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"checkInternalVersion",434}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pentagonalResolutionParameterK",1718}, - {"northWestLongitudeOfVerficationArea",1389}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersUsed3",1155}, - {""}, {""}, {""}, - {"NC2",179}, - {""}, - {"visibilityInKilometresTrend2",2444}, - {""}, {""}, {""}, - {"Latin1InDegrees",115}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"changeIndicatorTrend4",428}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"legacyGaussSubarea",1127}, - {""}, {""}, - {"generalExtended2ordr",910}, - {""}, - {"projSourceString",1784}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"experimentVersionNumberOfAnalysis",808}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongFirstAxis",1486}, + {"pentagonalResolutionParameterJ",1726}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"pastTendencyRVR1",1712}, - {"secondOfStartOfReferencePeriod",2022}, - {""}, {""}, - {"changeIndicatorTrend3",427}, + {"clusterMember2",542}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Threshold_Or_Distribution_Units",250}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"WRAP",265}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginDayTrend1",342}, + {"endMinuteTrend2",758}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"minuteOfStartOfReferencePeriod",1334}, - {""}, {""}, - {"pentagonalResolutionParameterJ",1717}, - {"outerLoopTypeOfTimeIncrement",1614}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"commonBlock",565}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositState4",1902}, - {"cloudsBaseCoded3Trend2",492}, + {"numberInMixedCoordinateDefinition",1403}, {""}, {""}, {""}, - {"resolutionAndComponentFlags4",1872}, + {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",2364}, + {""}, {""}, {""}, + {"endMonthTrend4",764}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityInKilometresTrend1",2463}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongTheXAxis",1488}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"realPartOf00",1837}, + {"clusterMember6",546}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsTitle2Trend4",528}, + {""}, {""}, {""}, + {"changeIndicatorTrend4",427}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"numberOfSingularVectorsComputed",1507}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ZLMULT",288}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"nameECMF",1376}, + {""}, + {"hoursAfterReferenceTimeOfDataCutoff",973}, + {""}, {""}, {""}, {"extractDateTimeYearEnd",840}, - {""}, {""}, {""}, {""}, - {"extractAreaSouthLatitude",821}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfLengthOfSemiMajorAxis",1952}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsAbbreviation2",445}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"clusterMember1",541}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"firstMonthUsedToBuildClimateMonth1",873}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"physicalFlag2",1727}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section6UniqueIdentifier",2071}, - {"inputOverriddenReferenceValues",1010}, - {"eastLongitudeOfDomainOfTubing",734}, - {""}, {""}, {""}, - {"numberOfGridInReference",1452}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"probProductDefinition",1772}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayDepthOfDepositState3",1901}, - {""}, - {"numberOfBitsForScaledGroupLengths",1407}, - {""}, {""}, - {"resolutionAndComponentFlags3",1871}, - {""}, - {"northLatitudeOfDomainOfTubing",1385}, - {""}, {""}, {""}, - {"section2Used",2053}, - {""}, {""}, - {"numberOfBytesInLocalDefinition",1410}, - {"endMinuteTrend1",758}, - {""}, {""}, {""}, - {"observationDiagnostic",1531}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"numberOfMissingValues",1467}, - {"YRInMetres",282}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayFrictionCodeValueState1",1919}, - {""}, - {"numberOfSingularVectorsEvolved",1503}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"flagForNormalOrStaggeredGrid",880}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState4",1926}, {""}, {""}, {""}, {""}, {""}, - {"firstLatitudeInDegrees",872}, - {""}, {""}, {""}, {""}, {""}, - {"earthMajorAxisInMetres",730}, - {""}, - {"addEmptySection2",300}, - {""}, - {"longitudeOfReferencePointInDegrees",1218}, - {"padding_local40_1",1682}, - {"DjGiven",35}, - {""}, {""}, {""}, {""}, - {"southLatitudeOfDomainOfTubing",2155}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"section_1",2096}, + {"cloudsAbbreviation1",439}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"marsClass1",1247}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend2",763}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"disableGrib1LocalSection",710}, + {""}, + {"latitudeFirstInDegrees",1090}, + {""}, + {"scaledValueOfCentralWaveNumber",1984}, + {""}, {""}, + {"offsetValuesBy",1580}, {""}, {""}, {""}, {""}, - {"indexingTimeMM",998}, - {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState3",1925}, + {"section2Used",2062}, + {"longitudeOfReferencePointInDegrees",1220}, + {""}, + {"runwayDepositCodeState4",1899}, + {""}, + {"scaledValueOfLowerWavePeriodLimit",1995}, + {"runwayDesignatorState3",1918}, + {""}, + {"runwayFrictionCodeValueState2",1929}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"legacyGaussSubarea",1128}, + {"scanningMode6",2016}, + {"numberOfBytesPerInteger",1417}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"unitsECMF",2396}, + {""}, {""}, {""}, {""}, + {"numberOfSingularVectorsEvolved",1508}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"definitionFilesVersion",688}, + {""}, {""}, {""}, {""}, + {"marsClass1",1249}, + {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Combination_Number",49}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterMember1",540}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"modelErrorType",1349}, + {"extractDateTimeHourEnd",827}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"westLongitudeOfDomainOfTubing",2457}, + {"getNumberOfValues",917}, + {""}, {""}, {""}, {""}, {""}, + {"endMinuteTrend1",757}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositCodeState4",1907}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCodeValueState1",1928}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"recentWeather",1840}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used",138}, + {"unstructuredGridUUID",2410}, + {""}, + {"monthlyVerificationYear",1366}, + {""}, {""}, {""}, {""}, + {"numberOfSecondOrderPackedValues",1505}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_3",2109}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Total_Number_Members_Used",259}, + {""}, {""}, + {"numberOfDaysInClimateSamplingWindow",1437}, + {""}, {""}, + {"scaleFactorOfLengthOfSemiMajorAxis",1961}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"matrixBitmapsPresent",1289}, + {""}, {""}, + {"nameLegacyECMF",1377}, + {""}, {""}, {""}, {"Date_E4",28}, - {""}, {""}, - {"cloudsBaseCoded1Trend4",484}, - {""}, {""}, - {"scaledValueOfUpperLimit",1996}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfSingularVectorsComputed",1502}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2",505}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR4",1906}, + {"md5Section4",1303}, + {""}, {""}, {""}, {""}, + {"numberOfGroupsOfDataValues",1460}, {""}, {""}, {""}, - {"beginYearTrend4",361}, + {"numberOfPressureLevelsUsedForClustering",1496}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4",475}, + {"outerLoopTypeOfTimeIncrement",1621}, + {""}, {""}, {""}, {""}, {""}, + {"reflectivityCalibrationConstant",1861}, + {""}, {""}, {""}, + {"localTablesVersionNumber",1194}, + {"Local_Number_Members_Possible",134}, + {"mask",1279}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"longitudeOfSouthernPoleInDegrees",1221}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {"dateOfIceFieldUsed",659}, {""}, - {"WRAP",266}, + {"Total_Number_Members_Possible",258}, + {""}, {""}, {""}, {""}, {""}, + {"templatesMasterDir",2258}, + {"section_03",2098}, + {"pack",1624}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"northLatitudeOfDomainOfTubing",1390}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded1Trend3",483}, - {""}, {""}, {""}, {""}, - {"runwayDepositCodeState2",1888}, + {"eastLongitudeOfDomainOfTubing",733}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"paramIdLegacyECMF",1695}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"uuidOfHGrid",2405}, - {""}, {""}, {""}, - {"offsetFromOriginToInnerBound",1557}, - {""}, {""}, - {"cfNameECMF",419}, - {""}, {""}, - {"sizeOfPostAuxiliaryArrayPlusOne",2143}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"beginHourTrend2",347}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Date_E3",27}, + {"unpack",2402}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfWaveFrequencySequence",2366}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lengthOf4DvarWindow",1130}, - {""}, - {"changeIndicatorTrend2",426}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"widthOfWidths",2463}, - {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR3",1905}, - {"cloudsBaseCoded3Trend1",491}, - {""}, {""}, - {"beginYearTrend3",360}, - {"section_01",2087}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, + {"pastTendencyRVR4",1724}, {"dateOfForecastUsedInLocalTime",658}, - {""}, - {"timeOfForecastUsedInLocalTime",2276}, - {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfEarthMajorAxis",1947}, - {"md5GridSection",1294}, - {"scaleFactorOfEarthMinorAxis",1948}, - {""}, {""}, - {"typeOfGeneratingProcess",2325}, - {"typeOfWaveFrequencySequence",2348}, - {""}, - {"cloudsAbbreviation4Trend4",459}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"horizontalDomainTemplateNumber",962}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"coordAveraging3",590}, - {"sourceSinkChemicalPhysicalProcess",2149}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"spacingOfBinsAlongRadials",2163}, - {""}, {""}, - {"Y2",279}, - {""}, - {"cloudsAbbreviation3Trend4",454}, {""}, {""}, {""}, - {"numberOfPointsAlongFirstAxis",1481}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"timeOfForecastUsedInLocalTime",2291}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Missing",130}, + {""}, {""}, {""}, {""}, + {"southLatitudeOfDomainOfTubing",2164}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"extractDateTimeHourEnd",827}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"INBITS",89}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"yearOfForecastUsedInLocalTime",2510}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endYearTrend4",778}, + {"ceilingAndVisibilityOK",397}, {""}, {""}, - {"cloudsAbbreviation4Trend3",458}, - {""}, - {"cloudsBaseCoded4",495}, - {""}, - {"numberOfBytesOfFreeFormatData",1411}, - {""}, {""}, {""}, {""}, - {"cloudsBaseCoded4Trend4",499}, + {"resolutionAndComponentFlags7",1883}, + {"Total_Number_Members_Missing",257}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"extractDateTimeEnd",826}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags7",1874}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"ZLMULT",289}, - {""}, - {"typeOfWavelengthInterval",2350}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend3",453}, - {"hourOfForecastUsedInLocalTime",967}, - {"listMembersMissing2",1150}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded4Trend3",498}, + {"extractAreaSouthLatitude",821}, + {"paramIdLegacyECMF",1702}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"offsetSection11",1570}, + {""}, {""}, {""}, {""}, + {"listMembersMissing4",1153}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"cloudsTitle2Trend2",526}, + {""}, {""}, {""}, + {"changeIndicatorTrend2",425}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"probProductDefinition",1781}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endHourTrend2",754}, - {"numberOfPressureLevelsUsedForClustering",1491}, + {"md5Headers",1297}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"observationDiagnostic",1538}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode3",509}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"beginDayTrend3",343}, + {""}, + {"section5Length",2074}, + {""}, {""}, + {"hourOfForecastUsedInLocalTime",968}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"secondaryBitMap",2036}, + {""}, {""}, + {"coordinate2End",595}, + {""}, {""}, {""}, {""}, + {"section5",2073}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCodeValueState3",1930}, + {""}, {""}, {""}, + {"timeUnitFlag",2296}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsTitle2Trend1",525}, + {""}, {""}, + {"yearOfForecastUsedInLocalTime",2530}, + {"changeIndicatorTrend1",424}, + {"sizeOfPostAuxiliaryArrayPlusOne",2152}, + {"westLongitudeOfDomainOfTubing",2477}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"meanRVR3",1313}, + {""}, {""}, {""}, + {"earthMajorAxisInMetres",729}, + {"checkInternalVersion",433}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"NC2",178}, + {""}, {""}, {""}, {""}, + {"lengthOf4DvarWindow",1131}, + {""}, + {"laplacianScalingFactorUnset",1085}, + {"runwayDepthOfDepositCodeState2",1905}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend4",458}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsUsed",1495}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState4",1935}, + {"variationOfVisibilityTrend4",2442}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityTrend4",2470}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaleFactorOfEarthMajorAxis",1956}, + {""}, {""}, + {"variationOfVisibilityDirectionTrend4",2438}, + {""}, {""}, + {"scaleFactorOfEarthMinorAxis",1957}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfGridInReference",1457}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"timeIncrementBetweenSuccessiveFields",2288}, + {""}, {""}, {""}, + {"resolutionAndComponentFlags4",1881}, + {""}, {""}, {""}, + {"md5Section5",1304}, + {""}, + {"numberOfBitsForScaledGroupLengths",1412}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityInKilometresTrend3",2465}, {""}, {""}, {""}, {""}, {""}, - {"gribMasterTablesVersionNumber",926}, + {"physicalFlag2",1736}, + {"DjGiven",35}, + {""}, {""}, + {"gribMasterTablesVersionNumber",927}, + {""}, {""}, + {"runwayDepthOfDepositCodeState1",1904}, + {""}, {""}, {""}, {""}, + {"horizontalDomainTemplateNumber",963}, + {""}, + {"northWestLongitudeOfLPOArea",1393}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfMajorAxisOfOblateSpheroidEarth",1996}, + {""}, {""}, {""}, + {"SOH",227}, + {""}, {""}, {""}, {""}, {""}, + {"DELETE",24}, + {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1966}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3",449}, + {""}, {""}, {""}, + {"latitudeOfReferencePointInDegrees",1104}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"7777",5}, + {""}, + {"longitudeOfThePolePointInDegrees",1231}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"firstLatitudeInDegrees",872}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"NC1",177}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endMonthTrend2",762}, + {""}, + {"beginHourTrend4",348}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"clusterMember3",543}, + {""}, {""}, + {"padding_grid90_1",1635}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typeOfGeneratingProcess",2342}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"CLNOMA",23}, + {""}, + {"endMinuteTrend3",759}, + {""}, {""}, {""}, {""}, + {"dateOfModelVersion",660}, + {""}, {""}, {""}, + {"timeOfModelVersion",2292}, + {"offsetSection5",1574}, + {""}, {""}, {""}, {""}, + {"section7UniqueIdentifier",2084}, + {""}, {""}, {""}, {""}, + {"padding_local_7_1",1691}, + {""}, + {"flagForNormalOrStaggeredGrid",880}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"physicalFlag1",1735}, + {"widthOfWidths",2483}, + {""}, {""}, {""}, {""}, + {"cloudsTitle2Trend3",527}, + {""}, {""}, {""}, + {"changeIndicatorTrend3",426}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBytesInLocalDefinition",1415}, + {""}, {""}, {""}, + {"beginMinuteTrend4",352}, + {""}, {""}, {""}, {""}, + {"versionNumOfSharedHeaderMessageFormat",2451}, + {"accuracyMultipliedByFactor",297}, + {""}, {""}, + {"md5Section1",1299}, + {""}, {""}, {""}, {""}, + {"runwayDepositCodeState2",1897}, + {"cfNameECMF",418}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"HDF5str",80}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endMark",757}, + {"padding_loc9_2",1685}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"NC1",178}, - {""}, - {"visibilityInKilometresTrend1",2443}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"baseTimeOfThisLeg",339}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"hourOfModelVersion",969}, + {""}, {""}, + {"spacingOfBinsAlongRadials",2172}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Original_Parameter_Identifier",212}, - {""}, - {"endYearTrend3",777}, - {""}, - {"offsetSection11",1563}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfLastGridPointInDegrees",1100}, - {""}, {""}, {""}, - {"md5Section2",1299}, - {""}, {""}, {""}, {""}, {"countOfICEFieldsUsed",624}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"timeUnitFlag",2281}, - {""}, {""}, - {"runwayFrictionCoefficientCodeState2",1924}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"clusterMember5",546}, - {""}, {""}, {""}, {""}, - {"longitudeOfThePolePointInDegrees",1229}, - {""}, {""}, {""}, - {"coordinate4OfFirstGridPoint",602}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1957}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"pastTendencyRVR2",1713}, - {""}, - {"scanningMode5",2006}, - {"swapScanningX",2227}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded1Trend2",482}, - {""}, - {"changeIndicatorTrend1",425}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"typicalYearOfCentury",2362}, - {""}, {""}, - {"visibilityTrend4",2450}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"laplacianScalingFactorUnset",1084}, - {"recentWeatherTry",1832}, - {""}, - {"cloudsAbbreviation1",440}, - {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfLowerWavePeriodLimit",1986}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"listMembersUsed4",1156}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"physicalFlag1",1726}, - {""}, {""}, - {"section_5",2102}, - {""}, {""}, {""}, - {"section4UniqueIdentifier",2063}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"superblockExtensionAddress",2223}, - {""}, {""}, - {"beginMinuteTrend4",353}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongXAxisInCouplingArea",1486}, + {"section4UniqueIdentifier",2072}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfMajorAxisOfOblateSpheroidEarth",1987}, - {""}, {""}, - {"cloudsBase1",460}, - {""}, {""}, {""}, {""}, {""}, - {"numberInHorizontalCoordinates",1397}, - {""}, {""}, - {"latitudeOfReferencePointInDegrees",1103}, - {""}, {""}, - {"section3UniqueIdentifier",2058}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfPointsUsed",1490}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend4",449}, - {""}, {""}, - {"DELETE",24}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation2Trend4",448}, {""}, - {"beginMinuteTrend3",352}, - {""}, - {"latitudeOfThePolePoint",1113}, + {"endMonthTrend1",761}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"radiusOfTheEarth",1820}, + {"pastTendencyRVR1",1721}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"hoursAfterReferenceTimeOfDataCutoff",972}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState2",1933}, + {"variationOfVisibilityTrend2",2440}, {""}, {""}, {""}, {""}, - {"cfVarNameLegacyECMF",423}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"baseTimeOfThisLeg",340}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"endMonthTrend1",762}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforePV",1553}, + {"yearOfModelVersion",2531}, + {"runwayDepthOfDepositCodeState3",1906}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositState2",1900}, - {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags2",1870}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"subdivisionsOfBasicAngle",2221}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"numberOfUsedTileAttributeCombinationsForTypeOfTile",1520}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfLengthOfSemiMajorAxis",1992}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"variationOfVisibilityDirectionTrend2",2436}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend3",448}, - {""}, {""}, - {"section_05",2091}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded4Trend2",497}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Total_Number_Members_Used",260}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"runwayFrictionCoefficientCodeState1",1923}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"numberOfPointsAlongYAxis",1487}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfLengthOfSemiMajorAxis",1983}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepositCodeState1",1887}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"numberOfReforecastYearsInModelClimate",1495}, - {""}, {""}, - {"Total_Number_Members_Possible",259}, - {""}, {""}, {""}, - {"windUnitsTrend4",2484}, - {""}, - {"baseDateOfThisLeg",338}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"beginHourTrend1",346}, - {""}, {""}, {""}, - {"section7UniqueIdentifier",2075}, - {""}, {""}, {""}, - {"Ensemble_Combination_Number",50}, - {""}, {""}, {""}, {""}, {""}, - {"listOfWaveFrequencySequenceParameters",1164}, - {"offsetICEFieldsUsed",1559}, - {""}, {""}, {""}, - {"cloudsBaseCoded1",480}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded1Trend1",481}, - {""}, {""}, {""}, - {"pentagonalResolutionParameterM",1719}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBBitmap",1546}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Total_Number_Members_Missing",258}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"windUnitsTrend3",2483}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"isCavok",1027}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y1",277}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"cloudsCode3Trend4",514}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"Date_E2",26}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"typeOfLevelECMF",2331}, - {""}, {""}, {""}, {""}, {""}, - {"jDirectionIncrementGiven",1062}, - {"runwayDesignatorRVR2",1904}, - {"Local_Number_Members_Used",139}, - {""}, {""}, - {"beginYearTrend2",359}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather3Present",1760}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1Trend4",444}, + {"listOfWaveFrequencySequenceParameters",1166}, + {""}, {""}, {""}, {""}, {""}, + {"dayOfModelVersion",671}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend3",513}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"HDF5",80}, - {""}, {""}, {""}, {""}, {""}, - {"NB",176}, + {"generalExtended2ordr",911}, + {""}, + {"cloudsBase4",474}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"indexingTimeMM",999}, + {"baseDateOfThisLeg",337}, + {"cloudsAbbreviation1Trend4",443}, + {"shortNameLegacyECMF",2137}, + {""}, {""}, + {"runwayDepositCodeState1",1896}, + {"runwayDesignatorRVR4",1915}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"longitudeOfSouthernPoleInDegrees",1223}, + {""}, {""}, {""}, {""}, + {"runwayFrictionCoefficientCodeState1",1932}, + {"variationOfVisibilityTrend1",2439}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"radiusOfClusterDomain",1810}, + {"typeOfWavelengthInterval",2368}, + {""}, {""}, {""}, + {"Less_Than_Or_To_Overall_Distribution",121}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listMembersUsed3",1156}, + {""}, {""}, {""}, {""}, {""}, + {"NH",183}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Possible",135}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc9_1",1684}, + {"padding_loc7_1",1683}, + {""}, + {"variationOfVisibilityDirectionTrend1",2435}, + {""}, + {"coordinate4OfFirstGridPoint",602}, + {"padding_loc6_1",1682}, + {""}, {""}, {""}, {""}, {""}, + {"experimentVersionNumberOfAnalysis",808}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc5_1",1681}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"numberOfUsefulPointsAlongXAxis",1523}, + {""}, {""}, {""}, {""}, + {"subdivisionsOfBasicAngle",2232}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"latitudeOfLastGridPointInDegrees",1101}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endHourTrend4",755}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"listMembersMissing2",1151}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"tileGrouping",2280}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc50_1",1680}, + {""}, {""}, {""}, {""}, + {"visibilityTrend1",2467}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"DayOfModelVersion",29}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsCode2",504}, + {""}, {""}, {""}, {""}, + {"numberOfBytesOfFreeFormatData",1416}, + {""}, {""}, {""}, {""}, {""}, + {"beginMinuteTrend2",350}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend4",2504}, + {""}, + {"offsetBeforePV",1560}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetFromOriginToInnerBound",1564}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Section10",1300}, + {""}, {""}, + {"tsectionNumber5",2328}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"addEmptySection2",299}, + {""}, {""}, {""}, + {"pentagonalResolutionParameterM",1728}, + {""}, {""}, {""}, {""}, {""}, + {"Threshold_Or_Distribution_0_no_1_yes",249}, + {"latitudeOfThePolePoint",1114}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded4",494}, + {""}, {""}, {""}, {""}, + {"Original_CodeTable_2_Version_Number",209}, + {""}, {""}, {""}, + {"commonBlock",565}, + {""}, + {"cloudsBaseCoded4Trend4",498}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"coordAveraging2",589}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"endHourTrend1",753}, - {""}, {""}, {""}, - {"beginMinuteTrend2",351}, - {""}, {""}, {""}, - {"latitudeOfThePoleOfStretching",1112}, - {""}, {""}, - {"versionNumberOfSuperblock",2434}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"setPackingType",2121}, - {"visibilityTrend1",2447}, - {""}, - {"offsetToEndOf4DvarWindow",1572}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"setBitsPerValue",2117}, - {""}, - {"northWestLongitudeOfLPOArea",1388}, - {""}, - {"beginMonthTrend3",356}, - {""}, - {"HourOfModelVersion",82}, - {""}, {""}, - {"cloudsAbbreviation1Trend3",443}, - {""}, {""}, {""}, - {"cloudsAbbreviation4Trend2",457}, - {""}, {""}, {""}, {""}, - {"cloudsBaseCoded4Trend1",496}, - {"windGustTrend4",2473}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBeforeBitmap",1550}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Local_Number_Members_Missing",131}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend4",489}, - {""}, {""}, {""}, {""}, - {"typicalYear2",2361}, - {""}, - {"scaledValueOfEarthMajorAxis",1978}, - {""}, - {"scaledValueOfEarthMinorAxis",1979}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend2",452}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"CLNOMA",23}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"countOfGroupLengths",623}, + {"beginMinuteTrend1",349}, {""}, - {"cloudsBaseCoded2Trend3",488}, + {"jDirectionIncrementGiven",1063}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend2",456}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"7777",5}, - {""}, {""}, {""}, {""}, - {"endYearTrend2",776}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windGustTrend3",2472}, + {"cloudsAbbreviation3Trend4",453}, + {"section6UniqueIdentifier",2080}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ccsdsCompressionOptionsMask",395}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"indexingTimeHH",996}, + {"qualityValueAssociatedWithParameter",1811}, {""}, {""}, {""}, {""}, {""}, {""}, - {"unitsLegacyECMF",2380}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"mixedCoordinateDefinition",1343}, - {"latitudeOfSouthEastCornerOfArea",1104}, + {"runwayFrictionCoefficientCodeState3",1934}, + {"variationOfVisibilityTrend3",2441}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfEarthMajorAxis",1987}, + {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfEarthMinorAxis",1988}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationState4",1918}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Threshold_Or_Distribution_Units",251}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"setToMissingIfOutOfRange",2122}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"experimentVersionNumber2",807}, - {""}, {""}, {""}, {""}, {""}, - {"jDirectionIncrementGridLength",1063}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"extractAreaLongitudeRank",819}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationState3",1917}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2",465}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"presentWeather2Present",1755}, - {""}, {""}, {""}, {""}, {""}, - {"g1conceptsLocalDirAll",905}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend2",512}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"beginMinuteTrend1",350}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc9_2",1678}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"uvRelativeToGrid",2407}, - {"scaledValueOfMinorAxisOfOblateSpheroidEarth",1988}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayDepthOfDepositState1",1899}, - {""}, {""}, {""}, {""}, - {"resolutionAndComponentFlags1",1869}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {"*********_EXTRA_DATA_***************",4}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend4",402}, + {"resolutionAndComponentFlags2",1879}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"variationOfVisibilityDirectionTrend3",2437}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayDepthOfDepositState4",1911}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section_11",2107}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBaseCoded1Trend4",483}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"jDirectionIncrementGridLength",1064}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"intervalBetweenTimes",1024}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"scaledValueOfMinorAxisOfOblateSpheroidEarth",1997}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags6",1882}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid90_1",1628}, - {""}, - {"NG",183}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Minute_E4",163}, - {""}, {""}, {""}, {""}, - {"is_chemical_srcsink",1049}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend2",447}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"paramIdECMF",1694}, - {"ceilingAndVisibilityOKTrend3",401}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"skipExtraKeyAttributes",2146}, - {"cloudsBaseCoded2",485}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend2",487}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"extractAreaLatitudeRank",818}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsCode1Trend4",504}, - {""}, {""}, {""}, {""}, {""}, - {"qualityValueAssociatedWithParameter",1802}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Minute_E3",162}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayDesignatorRVR1",1903}, - {""}, {""}, {""}, - {"beginYearTrend1",358}, - {"section5UniqueIdentifier",2067}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend3",503}, - {""}, {""}, {""}, {""}, {""}, - {"padding_local_35",1683}, - {"ccsdsBlockSize",394}, - {""}, {""}, - {"typeOfWaveDirectionSequence",2347}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"windUnitsTrend2",2482}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"coordAveraging1",588}, - {""}, {""}, {""}, {""}, {""}, - {"presentWeather1Present",1750}, - {""}, - {"numberOfPointsAlongTheXAxis",1483}, - {""}, - {"runwayExtentOfContaminationState2",1916}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode3Trend1",511}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bufrHeaderSubCentre",384}, {""}, {""}, {""}, {""}, {""}, {""}, - {"weightAppliedToClimateMonth1",2455}, + {"cloudsAbbreviation4Trend1",455}, + {"extractDateTimeEnd",826}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR4",1583}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation4Trend1",456}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"visibilityTrend2",2448}, {""}, - {"unusedBitsInBitmap",2393}, + {"g1conceptsLocalDirAll",906}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"beginHourTrend2",346}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation3Trend1",451}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"listMembersUsed2",1154}, - {"TYPE_FF",245}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend4",1031}, + {"offsetToEndOf4DvarWindow",1579}, + {"numberInHorizontalCoordinates",1402}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"missingValueManagementUsed",1340}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"resolutionAndComponentFlags1",1878}, {""}, {""}, {""}, - {"cloudsCode4Trend4",519}, - {"TYPE_OF",247}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"latitudeOfTheSouthernPoleOfProjection",1115}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR3",1582}, + {"endMonthTrend3",763}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"endYearTrend1",775}, + {"md5Section3",1302}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"uuidOfHGrid",2425}, + {""}, {""}, {""}, {""}, + {"numberOfMissingValues",1472}, + {""}, + {"md5GridSection",1296}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"latitudeOfThePoleOfStretching",1113}, + {"cloudsBase1",459}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"coordinate3OfFirstGridPoint",599}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMinuteTrend3",351}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E4",137}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Local_Number_Members_Missing_E4",133}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation1Trend2",442}, + {"INBITS",88}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayDepositCodeState3",1898}, + {""}, {""}, {""}, + {"hook_post_meta_data",958}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBaseCoded4Trend2",496}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"pastTendencyRVR3",1723}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Identifier_E4",53}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfPointsAlongYAxisInCouplingArea",1488}, + {"cloudsAbbreviation2Trend2",446}, + {""}, {""}, {""}, + {"beginHourTrend1",345}, + {""}, {""}, {""}, + {"countOfGroupLengths",623}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section3UniqueIdentifier",2067}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"weightAppliedToClimateMonth1",2475}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"sourceSinkChemicalPhysicalProcess",2158}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"radiusOfClusterDomain",1819}, + {""}, + {"cloudsBaseCoded4Trend1",495}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"recentWeatherTry",1841}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation1Trend2",441}, + {""}, {""}, {""}, {""}, + {"runwayDesignatorRVR2",1913}, + {"cloudsBaseCoded1Trend2",481}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Minute_E4",162}, + {""}, + {"section_5",2111}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Date_E3",27}, + {""}, + {"latitudeOfSouthEastCornerOfArea",1105}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfParametersUsedForClustering",1480}, + {""}, {""}, {""}, + {"listMembersUsed2",1155}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_OR",248}, - {"cloudsCode4Trend3",518}, + {"cloudsBaseCoded3Trend4",493}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"intervalBetweenTimes",1025}, + {"cloudsCode4Trend4",518}, + {""}, {""}, + {"numberOfPointsAlongYAxis",1492}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded1",479}, + {""}, {""}, {""}, {""}, + {"cloudsAbbreviation2Trend1",445}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded1Trend1",480}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"section_05",2100}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"endHourTrend2",753}, + {"superblockExtensionAddress",2234}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_local11_1",1686}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"visibilityTrend3",2469}, + {""}, {""}, + {"beginYearTrend4",360}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"uvRelativeToGrid",2427}, + {""}, {""}, {""}, {""}, + {"cfVarNameLegacyECMF",422}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Number_Combination_Ensembles_1_none",204}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation1Trend1",440}, + {""}, {""}, {""}, {""}, + {"runwayDesignatorRVR1",1912}, + {""}, {""}, {""}, {""}, {""}, + {"listMembersMissing3",1152}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsCode1Trend4",503}, + {"YRInMetres",281}, + {""}, + {"windUnitsTrend2",2502}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endMark",756}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMonthTrend4",356}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Possible_E2",135}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Local_Number_Members_Missing_E2",131}, + {"runwayExtentOfContaminationState4",1927}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"typeOfWaveDirectionSequence",2365}, + {""}, {""}, + {"mixedCoordinateDefinition",1345}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_loc190_1",1650}, + {""}, {""}, {""}, {""}, {""}, + {"************_EXPERIMENT_************",2}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Identifier_E2",51}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBaseCoded4Trend3",497}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endHourTrend1",752}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windGustTrend4",2493}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsAbbreviation3Trend2",451}, + {""}, + {"missingValueManagementUsed",1342}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"coordAveraging3",590}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc4_2",1679}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation4Trend3",457}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Y2",278}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayDepthOfDepositState2",1909}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"presentWeather2Present",1764}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windUnitsTrend1",2501}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"setToMissingIfOutOfRange",2131}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"resolutionAndComponentFlags3",1880}, + {""}, {""}, + {"ccsdsCompressionOptionsMask",394}, + {"paramIdECMF",1701}, {""}, {""}, {""}, - {"YearOfModelVersion",284}, + {"cloudsBaseCoded1Trend3",482}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded3Trend2",491}, + {""}, {""}, {""}, {""}, {""}, + {"offsetBBitmap",1553}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"ZLBASE",287}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"typeOfLevelECMF",2348}, + {""}, {""}, {""}, + {"padding_sec4_1",1697}, + {""}, {""}, {""}, {""}, + {"cloudsCode4Trend2",516}, + {""}, {""}, + {"padding_loc19_2",1655}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"presentWeather1Present",1759}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBaseCoded2Trend1",486}, + {"padding_loc18_2",1649}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"is_chemical_srcsink",1050}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3Trend1",450}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cloudsBaseCoded3Trend1",490}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"setPackingType",2130}, + {""}, {""}, + {"endYearTrend4",778}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Y1",276}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"beginHourTrend3",347}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"md5Section2",1301}, + {""}, {""}, + {"cloudsCode4Trend1",515}, + {""}, {""}, + {"runwayDepthOfDepositState1",1908}, + {""}, + {"typicalYearOfCentury",2380}, + {"cloudsBase3",469}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"isCavok",1028}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"clusterMember5",545}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsCode1Trend2",501}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"offsetBSection6",1555}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBeforeBitmap",1557}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {"extractDateTimeDayStart",825}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Hour_E4",85}, - {""}, - {"latitudeOfThePolePointInDegrees",1114}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"numberOfTensOfThousandsOfYearsOfOffset",1507}, {""}, {""}, - {"isCavokTrend3",1030}, - {""}, {""}, {""}, - {"beginMonthTrend4",357}, - {""}, {""}, - {"section_11",2098}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_local_7_1",1684}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Original_CodeTable_2_Version_Number",210}, - {""}, - {"BUFR",18}, + {"runwayExtentOfContaminationState2",1925}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windGustTrend2",2471}, + {"cloudsCode3Trend4",513}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"hoursAfterDataCutoff",972}, + {""}, + {"Local_Number_Members_Possible_E3",136}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Local_Number_Members_Missing_E3",132}, + {""}, {""}, + {"scanningMode5",2015}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"pastTendencyRVR2",1722}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"skipExtraKeyAttributes",2155}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc18_1",1648}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsCode1Trend1",500}, + {""}, + {"scaleFactorOfUpperWavePeriodLimit",1975}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Identifier_E3",52}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_local1_1",1687}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayExtentOfContaminationState1",1924}, + {""}, {""}, + {"padding_grid4_1",1632}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"section5UniqueIdentifier",2076}, + {""}, + {"cloudsAbbreviation2Trend3",447}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc10_1",1636}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"RVR4_1",226}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Minute_E2",160}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ICPLSIZE",86}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather3Present",1769}, + {""}, {""}, {""}, + {"XpInGridLengths",275}, + {""}, + {"padding_local_35",1690}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"beginMonthTrend1",353}, + {"cloudsAbbreviation1Trend3",442}, + {""}, {""}, {""}, {""}, + {"runwayDesignatorRVR3",1914}, + {""}, {""}, {""}, + {"versionNumberOfSuperblock",2454}, + {""}, {""}, + {"cloudsBaseCoded3",489}, + {""}, {""}, + {"RENAME",222}, + {""}, {""}, {""}, + {"NG",182}, + {""}, {""}, {""}, + {"cloudsBaseCoded3Trend3",492}, + {""}, {""}, {""}, {""}, + {"extractAreaLongitudeRank",819}, + {""}, {""}, {""}, {""}, + {"numberOfGridUsed",1458}, + {""}, {""}, {""}, + {"numberOfReforecastYearsInModelClimate",1500}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Time_Range_One_E4",253}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode4Trend3",517}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"latitudeOfThePolePointInDegrees",1115}, + {""}, {""}, {""}, {""}, {""}, + {"Extra_Data_FreeFormat_0_none",55}, + {""}, {""}, + {"visibilityTrend2",2468}, + {""}, {""}, {""}, {""}, {""}, + {"beginYearTrend2",358}, + {""}, {""}, + {"ccsdsBlockSize",393}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"bufrHeaderSubCentre",383}, + {""}, + {"NB",175}, + {""}, {""}, {""}, {""}, {""}, + {"listOfWaveDirectionSequenceParameters",1165}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ECMWF",45}, + {""}, {""}, + {"latitudeOfTheSouthernPoleOfProjection",1116}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"endHourTrend3",754}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius",309}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc30_2",1674}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"biFourierPackingModeForAxes",363}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"************_ENSEMBLE_**************",1}, + {""}, {""}, + {"cloudsCode1Trend3",502}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_sec3_1",1696}, + {"padding_grid1_2",1630}, + {""}, {""}, {""}, + {"cloudsCode3Trend2",511}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"windUnitsTrend3",2503}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationState3",1926}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc3_1",1678}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"BUFR",18}, + {"windGustTrend2",2491}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc38_1",1677}, + {""}, {""}, {""}, + {"beginYearTrend1",357}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode3Trend1",510}, + {""}, {""}, {""}, + {"numberOfBitsContainingEachPackedValue",1411}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_local1_31",1688}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsAbbreviation3Trend3",452}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"RVR2_1",224}, + {""}, {""}, {""}, {""}, + {"padding_loc30_1",1673}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"unusedBitsInBitmap",2411}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_grid1_1",1629}, + {""}, {""}, {""}, + {"runwayDepthOfDepositState3",1910}, + {""}, {""}, {""}, {""}, + {"TYPE_OF",246}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Hour_E4",84}, + {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR4",1590}, + {""}, + {"cloudsBaseCoded2Trend4",488}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_FF",244}, + {"Time_Range_One_E2",251}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"RVR1_1",223}, + {""}, {""}, + {"P_TACC",219}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"unitsLegacyECMF",2398}, + {""}, {""}, {""}, + {"extractAreaLatitudeRank",818}, + {"windGustTrend1",2490}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"TYPE_FX",245}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongYAxisInCouplingArea",1493}, + {""}, {""}, {""}, + {"endYearTrend2",776}, + {"ceilingAndVisibilityOKTrend4",401}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase2",464}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"FMULTE",64}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"isCavokTrend4",1032}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode3Trend3",512}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"rootGroupSymbolTableEntry",1887}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"scaledValueOfUpperWavePeriodLimit",2006}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ICEFieldsUsed",85}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"TYPE_OR",247}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfBitsUsedForTheScaledGroupLengths",1414}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"endYearTrend1",775}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_grid3_1",1631}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"setBitsPerValue",2126}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E4",48}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"cfNameLegacyECMF",419}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"beginMonthTrend3",355}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"RVR3_1",225}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded2",484}, + {""}, {""}, {""}, + {"Minute_E3",161}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBaseCoded2Trend2",486}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"experimentVersionNumber2",807}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Time_Range_One_E3",252}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBaseCoded2Trend1",485}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_loc17_2",1647}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"beginYearTrend3",359}, + {""}, {""}, {""}, + {"numberOfVGridUsed",1525}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"TYPE_PF",248}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {"experimentVersionNumber1",806}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"Hour_E3",84}, - {""}, - {"ZLBASE",288}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc30_2",1667}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend2",502}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfParametersUsedForClustering",1475}, - {""}, {""}, {""}, {""}, - {"runwayExtentOfContaminationState1",1915}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc7_1",1676}, - {"padding_loc9_1",1677}, + {"cloudsCode2Trend4",508}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc14_2",1644}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc6_1",1675}, - {""}, {""}, {""}, - {"padding_loc5_1",1674}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"LSTCUM",99}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_One_E4",254}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"biFourierPackingModeForAxes",364}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Time_Range_One_E3",253}, - {"Local_Number_Members_Possible_E4",138}, - {""}, {""}, - {"cfNameLegacyECMF",420}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"RENAME",223}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"numberOfBitsContainingEachPackedValue",1406}, - {""}, {""}, - {"Local_Number_Members_Missing_E4",134}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc13_4",1641}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsAbbreviation2Trend1",446}, - {""}, {""}, - {"Local_Number_Members_Possible_E3",137}, - {""}, {""}, {""}, - {"cloudsBase3Trend4",474}, + {"FMULTM",65}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"typicalYear2",2379}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"CCCC",20}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"hoursAfterDataCutoff",971}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius",310}, - {"Local_Number_Members_Missing_E3",133}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc50_1",1673}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3Trend3",473}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"windGustTrend3",2492}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E4",54}, - {"cloudsCode4Trend2",517}, - {""}, {""}, - {"ICPLSIZE",87}, - {"listOfWaveDirectionSequenceParameters",1163}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"rootGroupSymbolTableEntry",1878}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend2",400}, - {""}, {""}, {""}, {""}, - {"TYPE_PF",249}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Identifier_E3",53}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsefulPointsAlongXAxis",1516}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"offsetBSection5",1547}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"windUnitsTrend1",2481}, + {"Ensemble_Combinat_Number_0_none_E2",46}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode1Trend1",501}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Minute_E2",161}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"beginMonthTrend1",354}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc192_1",1654}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR4",1587}, + {"padding_grid50_1",1633}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfGridUsed",1453}, - {""}, - {"hook_post_meta_data",957}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_sec3_1",1689}, - {""}, {""}, {""}, - {"************_ENSEMBLE_**************",1}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"ECMWF",45}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc19_2",1648}, - {""}, {""}, {""}, - {"padding_loc18_2",1642}, - {"padding_local11_1",1679}, - {"cloudsAbbreviation1Trend1",441}, - {""}, {""}, {""}, {""}, - {"padding_loc3_1",1671}, - {"Time_Range_One_E2",252}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc38_1",1670}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaleFactorOfUpperWavePeriodLimit",1966}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_local1_31",1681}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR3",1586}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Local_Number_Members_Possible_E2",136}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc190_1",1643}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR4_1",227}, - {""}, {""}, {""}, {""}, - {"cloudsCode4Trend1",516}, - {""}, {""}, - {"Local_Number_Members_Missing_E2",132}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR2",1581}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"windGustTrend1",2470}, - {"cloudsBase3Trend2",472}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend4",509}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"RVR3_1",226}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend3",508}, - {""}, {""}, {""}, - {"padding_loc30_1",1666}, - {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend2",1029}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"Ensemble_Identifier_E2",52}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Number_Combination_Ensembles_1_none",205}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBitsUsedForTheScaledGroupLengths",1409}, - {""}, {""}, {""}, {""}, - {"padding_sec2_3",1688}, - {"padding_loc4_2",1672}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"YY",283}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Hour_E2",83}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_3",1663}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc13_4",1634}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsBase1Trend4",464}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase1Trend3",463}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc13_3",1633}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_3",1646}, - {""}, {""}, - {"numberOfPointsAlongTheYAxis",1484}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase3Trend1",471}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ceilingAndVisibilityOKTrend1",399}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationCodeState4",1923}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"swapScanningY",2228}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"runwayExtentOfContaminationCodeState4",1914}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"RVR2_1",225}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayExtentOfContaminationCodeState3",1913}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend2",507}, - {""}, {""}, {""}, {""}, - {"ICEFieldsUsed",86}, - {""}, - {"indexingTimeHHMM",997}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend4",479}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Threshold_Or_Distribution_0_no_1_yes",250}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend3",478}, - {""}, {""}, - {"extractDateTimeYearRank",841}, - {""}, {""}, {""}, - {"Less_Than_Or_To_Overall_Distribution",122}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"FMULTE",65}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"beginMonthTrend2",355}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"padding_loc18_1",1641}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Extra_Data_FreeFormat_0_none",56}, - {""}, {""}, {""}, {""}, - {"padding_grid4_1",1625}, - {""}, {""}, {""}, {""}, - {"padding_local1_1",1680}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extractDateTimeDayEnd",823}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"HourOfModelVersion",81}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc37_2",1669}, + {"Hour_E2",82}, + {""}, {""}, {""}, + {"oneMinuteMeanMaximumRVR2",1588}, + {""}, {""}, {""}, + {"cloudsBase4Trend4",478}, + {"oneMinuteMeanMinimumRVR4",1594}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid3_1",1624}, + {""}, {""}, + {"padding_sec2_2",1694}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"HDF5",79}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc14_1",1643}, + {""}, {""}, + {"cloudsBaseCoded2Trend3",487}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_1",1651}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"cloudsBase1Trend2",462}, - {""}, {""}, {""}, {""}, - {"oneMinuteMeanMaximumRVR1",1580}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"listOfUsedTileAttributesInCombination",1164}, + {""}, + {"padding_loc2_2",1672}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc29_2",1669}, + {""}, {""}, {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend2",399}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid1_2",1623}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend4",1764}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_AN",242}, + {"numberOfTensOfThousandsOfYearsOfOffset",1512}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"numberOfPointsAlongTheYAxis",1489}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"FMULTM",66}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR2",1585}, + {"cloudsBase1Trend4",463}, + {""}, {""}, + {"isCavokTrend2",1030}, + {""}, {""}, + {"endYearTrend3",777}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc37_2",1676}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc10_1",1629}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"isCavokTrend1",1028}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"RVR1_1",224}, + {"oneMinuteMeanMaximumRVR1",1587}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec4_1",1690}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsCode2Trend1",506}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_sec2_1",1693}, {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend3",1763}, - {""}, {""}, {""}, - {"XpInGridLengths",276}, + {"cloudsCode2Trend2",506}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extremeValuesRVR4",854}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc2_1",1671}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc29_1",1668}, + {""}, {""}, {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend1",398}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc28_1",1667}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"runwayExtentOfContaminationCodeState2",1912}, - {""}, {""}, {""}, {""}, - {"octetAtWichPackedDataBegins",1539}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"scaledValueOfUpperWavePeriodLimit",1997}, + {"cloudsCode2Trend1",505}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"At_least__Or_Distribut_Proportion_Of",14}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"isCavokTrend1",1029}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc37_1",1675}, + {""}, {""}, {""}, {""}, + {"padding_grid5_1",1634}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Ensemble_Combinat_Number_0_none_E3",47}, + {""}, {""}, {""}, + {"beginMonthTrend2",354}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc20_1",1656}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"runwayExtentOfContaminationCodeState2",1921}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4Trend2",476}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"padding_loc12_1",1637}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"DIAG",25}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc16_1",1646}, + {"octetAtWichPackedDataBegins",1546}, + {""}, {""}, + {"runwayExtentOfContaminationCodeState1",1920}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used_E4",141}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4Trend1",475}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC",163}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase1Trend2",461}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"X2InGridLengths",270}, + {""}, + {"cloudsBase3Trend4",473}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"cloudsBase1Trend1",460}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsCode2Trend3",507}, + {""}, + {"extremeValuesRVR2",852}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"padding_loc13_2",1639}, + {""}, {""}, {""}, {""}, {""}, + {"X1InGridLengths",268}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"extremeValuesRVR1",851}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayExtentOfContaminationCodeState3",1922}, + {""}, {""}, {""}, {""}, + {"padding_loc191_3",1653}, + {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR2",1592}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"cloudsBase4Trend3",477}, + {""}, {""}, {""}, {""}, {""}, + {"TYPE_AN",241}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Hour_E3",83}, + {""}, {""}, + {"padding_loc13_1",1638}, + {"oneMinuteMeanMaximumRVR3",1589}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_sec2_3",1695}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"indexingTimeHH",997}, + {""}, + {"TYPE_CF",242}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Original_Parameter_Iden_CodeTable2",210}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc29_3",1670}, + {""}, {""}, {""}, {""}, {""}, + {"ceilingAndVisibilityOKTrend3",400}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase1Trend3",462}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase3Trend2",471}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeYearRank",841}, + {"isCavokTrend3",1031}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"oneMinuteMeanMinimumRVR1",1591}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"offsetBSection5",1554}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extremeValuesRVR3",853}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_CF",243}, + {"cloudsBase3Trend1",470}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"extractDateTimeHourRank",828}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"LBC_Initial_Conditions",96}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"genVertHeightCoords",909}, + {"YearOfModelVersion",283}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase4Trend2",477}, - {"padding_sec2_2",1687}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfVGridUsed",1518}, - {""}, - {"padding_loc2_2",1665}, - {""}, {""}, - {"DIAG",25}, - {""}, - {"extractDateTimeHourRank",828}, {""}, {""}, {""}, - {"padding_loc29_2",1662}, + {"presentWeather2PresentTrend4",1768}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfUsefulPointsAlongYAxis",1524}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUsefulPointsAlongYAxis",1517}, - {"LSTCUM",100}, + {"Local_Number_Members_Used_E2",139}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7385,555 +7372,316 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"cloudsBase1Trend1",461}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc14_2",1637}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid50_1",1626}, - {""}, {""}, - {"CCCC",20}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc16_1",1639}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend4",1763}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"bitsPerValueAndRepack",376}, + {""}, {""}, {""}, + {"gts_CCCC",947}, + {""}, {""}, {""}, {""}, + {"padding_loc27_2",1666}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase3Trend3",472}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Time_Range_Two_E4",256}, + {""}, {""}, {"extractDateTimeMinuteRank",831}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc13_2",1632}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"presentWeather2PresentTrend4",1759}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"extractDateTimeMonthRank",834}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"genVertHeightCoords",910}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc13_3",1640}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lBB",1079}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayExtentOfContaminationCodeState1",1911}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather2PresentTrend3",1758}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"P_TACC",220}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"extremeValuesRVR2",852}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"cloudsBase4Trend1",476}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"************_EXPERIMENT_************",2}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc17_2",1640}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend4",469}, + {"padding_loc27_1",1665}, {""}, {""}, {""}, {""}, - {"padding_loc37_1",1668}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"precisionOfTheUnpackedSubset",1750}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend3",468}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_grid1_1",1622}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc192_1",1647}, {"extractDateTimeSecondRank",837}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc191_2",1652}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E4",49}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"oneMinuteMeanMinimumRVR1",1584}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"oneMinuteMeanMinimumRVR3",1593}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend4",1754}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E3",48}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend3",1753}, + {"presentWeather3PresentTrend4",1773}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR4",60}, + {"padding_loc15_1",1645}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"ECMWF_s",46}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather3PresentTrend2",1762}, - {"extremeValuesRVR1",851}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_sec2_1",1686}, + {"lastMonthUsedToBuildClimateMonth2",1087}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"padding_loc2_1",1664}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc29_1",1661}, - {""}, - {"ExtremeValuesInMaximumRVR3",59}, - {""}, - {"padding_loc28_1",1660}, + {"ExtremeValuesRVR4",63}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"padding_grid5_1",1627}, - {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase2Trend4",468}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Time_Range_Two_E2",254}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"lastMonthUsedToBuildClimateMonth1",1086}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {"extractDateTimeDayRank",824}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesInMaximumRVR4",59}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GG",68}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc14_1",1636}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_1",1644}, + {"presentWeather2PresentTrend2",1766}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"lBB",1080}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc26_1",1664}, + {"Model_LBC_Member_Identifier",169}, + {""}, {""}, {""}, {""}, + {"Local_Number_Members_Used_E3",140}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend2",467}, + {"presentWeather1PresentTrend2",1761}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc244_3",1654}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc13_1",1631}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc20_1",1649}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Ensemble_Combinat_Number_0_none_E2",47}, - {""}, {""}, {""}, {""}, - {"GG",69}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_FX",246}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather2PresentTrend2",1757}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"meanValueRVR4",1317}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"YpInGridLengths",287}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"cloudsBase2Trend1",466}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"NINT_RITZ_EXP",186}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState4",1886}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"padding_loc26_1",1657}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR3",1316}, + {"ExtremeValuesRVR2",61}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"padding_loc21_1",1657}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc12_1",1630}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"runwayBrakingActionState3",1885}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"bitsPerValueAndRepack",377}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"presentWeather3PresentTrend1",1761}, - {""}, {""}, {""}, {""}, - {"lastMonthUsedToBuildClimateMonth2",1086}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"LBC_Initial_Conditions",97}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"ExtremeValuesRVR4",64}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather1PresentTrend2",1752}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc13_5",1635}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"ExtremeValuesRVR3",63}, - {""}, {""}, {""}, - {"Time_Range_Two_E4",257}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc27_2",1659}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"X2InGridLengths",271}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Missing_Model_LBC",164}, - {""}, {""}, {""}, {""}, - {"GRIBEditionNumber",74}, + {"cloudsBase2Trend2",466}, {""}, - {"Time_Range_Two_E3",256}, + {"P_TAVG",220}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"indexingTimeHHMM",998}, + {""}, {""}, {""}, {""}, + {"swapScanningY",2239}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Time_Range_Two_E3",255}, + {"NINT_RITZ_EXP",185}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather2PresentTrend1",1765}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesRVR1",60}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"cloudsBase2Trend1",465}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend1",1760}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR2",58}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc191_2",1645}, + {"presentWeather3PresentTrend2",1771}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc23_1",1658}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E4",142}, + {""}, + {"TYPE_FC",243}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"GRIBEditionNumber",73}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"precisionOfTheUnpackedSubset",1741}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"TYPE_FC",244}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E3",141}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"lastMonthUsedToBuildClimateMonth1",1085}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB",70}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"presentWeather2PresentTrend1",1756}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"X1InGridLengths",269}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesRVR2",62}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc15_1",1638}, - {""}, {""}, {""}, {""}, {""}, - {"Time_Range_Two_E2",255}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {"extremeCounterClockwiseWindDirection",850}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc23_1",1651}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR2",1315}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"runwayBrakingActionState2",1884}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, - {"presentWeather1PresentTrend1",1751}, - {"gts_CCCC",946}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc27_1",1658}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Original_Parameter_Iden_CodeTable2",211}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesRVR1",61}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"ExtremeValuesInMaximumRVR1",57}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"padding_loc244_1",1652}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Local_Number_Members_Used_E2",140}, + {"ExtremeValuesRVR3",62}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"padding_loc244_1",1659}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"cloudsBase2Trend3",467}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"P_TAVG",221}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfUnusedBitsAtEndOfSection3",1513}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc21_1",1650}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"meanValueRVR1",1314}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Y2InGridLengths",280}, + {"presentWeather3PresentTrend1",1770}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Model_LBC_Member_Identifier",170}, + {"ExtremeValuesInMaximumRVR2",57}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"runwayBrakingActionState1",1883}, + {"runwayBrakingActionState4",1895}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"meanValueRVR4",1319}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"YpInGridLengths",286}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"ExtremeValuesInMaximumRVR1",56}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"presentWeather2PresentTrend3",1767}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7946,31 +7694,10 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC_E4",166}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc244_2",1653}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"presentWeather1PresentTrend3",1762}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -7985,7 +7712,21 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Y1InGridLengths",278}, + {"Show_Combination_Ensem_E4_0_no_1_yes",233}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc13_5",1642}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8004,6 +7745,13 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"YY",282}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"presentWeather3PresentTrend3",1772}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8011,8 +7759,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"INGRIB",90}, + {"padding_loc244_3",1661}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8023,11 +7770,24 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Show_Combination_Ensem_E2_0_no_1_yes",231}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayBrakingActionState2",1893}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc245_1",1655}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"At_least__Or_Distribut_Proportion_Of",14}, + {"meanValueRVR2",1317}, + {""}, {""}, {""}, + {"ExtremeValuesInMaximumRVR3",58}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8035,14 +7795,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E4",167}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"BBB",16}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8054,7 +7806,54 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E3",166}, + {"GRIB",69}, + {""}, {""}, {""}, {""}, + {"numberOfUnusedBitsAtEndOfSection3",1518}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"runwayBrakingActionState1",1892}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"meanValueRVR1",1316}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Missing_Model_LBC_E2",164}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"Show_Combination_Ensem_E3_0_no_1_yes",232}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8092,6 +7891,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"padding_loc244_2",1660}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8105,6 +7906,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc245_1",1662}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8116,6 +7919,18 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"runwayBrakingActionState3",1894}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"meanValueRVR3",1318}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8143,13 +7958,17 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"padding_loc245_2",1656}, + {"GRIBEXSection1Problem",70}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"Y2InGridLengths",279}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Missing_Model_LBC_E3",165}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8158,6 +7977,10 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"AEC_PAD_RSI_OPTION_MASK",11}, + {""}, {""}, {""}, {""}, + {"Y1InGridLengths",277}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8178,7 +8001,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Missing_Model_LBC_E2",165}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8227,8 +8049,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEXSection1Problem",71}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8263,652 +8083,105 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Used_Model_LBC",260}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"INGRIB",89}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"padding_loc245_2",1663}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"BUDG",17}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E4_0_no_1_yes",234}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E3_0_no_1_yes",233}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"numberOfBitsUsedForTheGroupWidths",1408}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Show_Combination_Ensem_E2_0_no_1_yes",232}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"Used_Model_LBC",261}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"NINT_LOG10_RITZ",185}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"GRIBEX_boustrophedonic",73}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIB_DEPTH",75}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"GRIBEXShBugPresent",72}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"AEC_PAD_RSI_OPTION_MASK",11}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"numberOfBitsUsedForTheGroupWidths",1413}, {""}, - {"Used_Model_LBC_E4",264}, + {"BBB",16}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"NINT_LOG10_RITZ",184}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, - {"Used_Model_LBC_E3",263}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -8969,8 +8242,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"Used_Model_LBC_E2",262}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9025,6 +8296,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"GRIBEX_boustrophedonic",72}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9199,91 +8472,8 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, - {"GRIB_LATITUDE",76}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIBEXShBugPresent",71}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9484,7 +8674,244 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, + {"Used_Model_LBC_E4",263}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"GRIB_DEPTH",74}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Used_Model_LBC_E2",261}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, + {"Used_Model_LBC_E3",262}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"GRIB_LATITUDE",75}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {"AEC_RESTRICTED_OPTION_MASK",12}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9533,100 +8960,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"AEC_DATA_3BYTE_OPTION_MASK",7}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9649,8 +8982,6 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, - {"GRIB_LONGITUDE",77}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9666,236 +8997,7 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"AEC_DATA_MSB_OPTION_MASK",8}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, @@ -9985,21 +9087,380 @@ static const struct grib_keys_hash wordlist[] = {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"GRIB_LONGITUDE",76}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {"AEC_DATA_PREPROCESS_OPTION_MASK",9} }; const struct grib_keys_hash * -grib_keys_hash_get (const char *str, size_t len) +grib_keys_hash_get ( const char *str, size_t len) { if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { - unsigned int key = hash_keys (str, len); + unsigned int key = hash_keys (str, len); if (key <= MAX_HASH_VALUE) if (len == lengthtable[key]) { - const char *s = wordlist[key].name; + const char *s = wordlist[key].name; if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) return &wordlist[key]; diff --git a/src/grib_iarray.cc b/src/grib_iarray.cc index 50d16bcaa..f69adfffd 100644 --- a/src/grib_iarray.cc +++ b/src/grib_iarray.cc @@ -46,8 +46,7 @@ grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_iarray*)grib_context_malloc(c, sizeof(grib_iarray)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_iarray_new unable to allocate %zu bytes", sizeof(grib_iarray)); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_iarray)); return NULL; } v->context = c; @@ -57,8 +56,7 @@ grib_iarray* grib_iarray_new(grib_context* c, size_t size, size_t incsize) v->v = (long*)grib_context_malloc(c, sizeof(long) * size); v->number_of_pop_front = 0; if (!v->v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_iarray_new unable to allocate %zu bytes", sizeof(long) * size); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(long) * size); return NULL; } return v; @@ -98,8 +96,7 @@ static grib_iarray* grib_iarray_resize_to(grib_iarray* v, size_t newsize) newv = (long*)grib_context_malloc_clear(c, newsize * sizeof(long)); if (!newv) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_iarray_resize unable to allocate %zu bytes", sizeof(long) * newsize); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(long) * newsize); return NULL; } diff --git a/src/grib_index.cc b/src/grib_index.cc index 9998ac843..b6eb0b3a2 100644 --- a/src/grib_index.cc +++ b/src/grib_index.cc @@ -9,6 +9,8 @@ */ #include "grib_api_internal.h" +#include +#include #define UNDEF_LONG -99999 #define UNDEF_DOUBLE -99999 @@ -62,6 +64,9 @@ static int grib_filesid = -1; static int index_count; static long values_count = 0; +static int codes_index_add_file_internal(grib_index* index, const char* filename, int message_type); +static void grib_index_rewind(grib_index* index); + static char* get_key(char** keys, int* type) { char* key = NULL; @@ -240,17 +245,13 @@ static grib_index_key* grib_index_new_key(grib_context* c, grib_index_key* keys, next = (grib_index_key*)grib_context_malloc_clear(c, sizeof(grib_index_key)); if (!next) { - grib_context_log(c, GRIB_LOG_ERROR, - "unable to allocate %ld bytes", - sizeof(grib_index_key)); + grib_context_log(c, GRIB_LOG_ERROR, "Unable to allocate %zu bytes", sizeof(grib_index_key)); *err = GRIB_OUT_OF_MEMORY; return NULL; } values = (grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list)); if (!values) { - grib_context_log(c, GRIB_LOG_ERROR, - "unable to allocate %ld bytes", - sizeof(grib_string_list)); + grib_context_log(c, GRIB_LOG_ERROR, "Unable to allocate %zu bytes", sizeof(grib_string_list)); *err = GRIB_OUT_OF_MEMORY; return NULL; } @@ -544,7 +545,7 @@ grib_index* grib_index_new(grib_context* c, const char* key, int* err) index = (grib_index*)grib_context_malloc_clear(c, sizeof(grib_index)); if (!index) { - grib_context_log(c, GRIB_LOG_ERROR, "unable to create index"); + grib_context_log(c, GRIB_LOG_ERROR, "Unable to create index"); *err = GRIB_OUT_OF_MEMORY; return NULL; } @@ -1034,7 +1035,7 @@ int grib_index_search_same(grib_index* index, grib_handle* h) } if (err && err != GRIB_NOT_FOUND) { grib_context_log(c, GRIB_LOG_ERROR, - "unable to create index. \"%s\": %s", + "Unable to create index. \"%s\": %s", keys->name, grib_get_error_message(err)); return err; } @@ -1052,7 +1053,7 @@ int grib_index_add_file(grib_index* index, const char* filename) else if (index->product_kind == PRODUCT_BUFR) message_type = CODES_BUFR; else return GRIB_INVALID_ARGUMENT; - return ecc__codes_index_add_file(index, filename, message_type); + return codes_index_add_file_internal(index, filename, message_type); } static grib_handle* new_message_from_file(int message_type, grib_context* c, FILE* f, int* error) @@ -1067,7 +1068,7 @@ static grib_handle* new_message_from_file(int message_type, grib_context* c, FIL #define MAX_NUM_KEYS 40 -int ecc__codes_index_add_file(grib_index* index, const char* filename, int message_type) +static int codes_index_add_file_internal(grib_index* index, const char* filename, int message_type) { double dval; size_t svallen; @@ -1084,6 +1085,7 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa grib_field_tree* field_tree; grib_file* file = NULL; grib_context* c; + bool warn_about_duplicates = true; if (!index) return GRIB_NULL_INDEX; @@ -1122,6 +1124,7 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa fseeko(file->handle, 0, SEEK_SET); + std::map map_of_offsets; while ((h = new_message_from_file(message_type, c, file->handle, &err)) != NULL) { grib_string_list* v = 0; index_key = index->keys; @@ -1130,18 +1133,25 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa message_count++; { - char* envsetkeys = getenv("ECCODES_INDEX_SET_KEYS"); + const char* set_keys_env_var = "ECCODES_INDEX_SET_KEYS"; + char* envsetkeys = getenv(set_keys_env_var); if (envsetkeys) { grib_values set_values[MAX_NUM_KEYS]; int set_values_count = MAX_NUM_KEYS; + std::string copy_of_env(envsetkeys); //parse_keyval_string changes envsetkeys! int error = parse_keyval_string(NULL, envsetkeys, 1, GRIB_TYPE_UNDEFINED, set_values, &set_values_count); if (!error && set_values_count != 0) { err = grib_set_values(h, set_values, set_values_count); if (err) { - grib_context_log(c, GRIB_LOG_ERROR,"codes_index_add_file: unable to set %s\n", envsetkeys); + grib_context_log(c, GRIB_LOG_ERROR, + "codes_index_add_file: Unable to set %s", copy_of_env.c_str()); return err; } + } else { + grib_context_log(c, GRIB_LOG_ERROR, "codes_index_add_file: Unable to parse %s (%s)", + set_keys_env_var, grib_get_error_message(error)); + return error; } } } @@ -1149,7 +1159,7 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa if (index->product_kind == PRODUCT_BUFR && index->unpack_bufr) { err = grib_set_long(h, "unpack", 1); if (err) { - grib_context_log(c, GRIB_LOG_ERROR, "unable to unpack BUFR to create index. \"%s\": %s", + grib_context_log(c, GRIB_LOG_ERROR, "Unable to unpack BUFR to create index. \"%s\": %s", index_key->name, grib_get_error_message(err)); return err; } @@ -1187,7 +1197,7 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa return err; } if (err && err != GRIB_NOT_FOUND) { - grib_context_log(c, GRIB_LOG_ERROR, "unable to create index. key=\"%s\" (message #%lu): %s", + grib_context_log(c, GRIB_LOG_ERROR, "Unable to create index. key=\"%s\" (message #%lu): %s", index_key->name, message_count, grib_get_error_message(err)); return err; } @@ -1241,6 +1251,18 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa field->file = file; index->count++; field->offset = h->offset; + if (warn_about_duplicates) { + const bool offset_is_unique = map_of_offsets.insert( std::pair(h->offset, h) ).second; + if (!offset_is_unique) { + fprintf(stderr, "ECCODES WARNING : File '%s': field offset %ld is not unique.\n", filename, (long)h->offset); + long edition = 0; + if (grib_get_long(h, "edition", &edition) == GRIB_SUCCESS && edition == 2) { + fprintf(stderr, "ECCODES WARNING : This can happen if the file contains multi-field GRIB messages.\n"); + fprintf(stderr, "ECCODES WARNING : Indexing multi-field messages is not fully supported.\n"); + } + warn_about_duplicates = false; + } + } err = grib_get_long(h, "totalLength", &length); if (err) @@ -1360,7 +1382,7 @@ int ecc__codes_index_add_file(grib_index* index, const char* filename, int messa // return err; // } // if (err && err != GRIB_NOT_FOUND) { -// grib_context_log(c,GRIB_LOG_ERROR,"unable to create index. \"%s\": %s",index_key->name,grib_get_error_message(err)); +// grib_context_log(c,GRIB_LOG_ERROR,"Unable to create index. \"%s\": %s",index_key->name,grib_get_error_message(err)); // return err; // } @@ -1496,7 +1518,7 @@ int grib_index_get_long(const grib_index* index, const char* key, long* values, if (!k) return GRIB_NOT_FOUND; if (k->type != GRIB_TYPE_LONG) { - grib_context_log(index->context, GRIB_LOG_ERROR, "unable to get index %s as long", key); + grib_context_log(index->context, GRIB_LOG_ERROR, "Unable to get index %s as long", key); return GRIB_WRONG_TYPE; } if (k->values_count > *size) @@ -1525,7 +1547,7 @@ int grib_index_get_double(const grib_index* index, const char* key, double* valu if (!k) return GRIB_NOT_FOUND; if (k->type != GRIB_TYPE_DOUBLE) { - grib_context_log(index->context, GRIB_LOG_ERROR, "unable to get index %s as double", key); + grib_context_log(index->context, GRIB_LOG_ERROR, "Unable to get index %s as double", key); return GRIB_WRONG_TYPE; } if (k->values_count > *size) @@ -1883,7 +1905,8 @@ grib_handle* codes_new_from_index(grib_index* index, int message_type, int* err) return NULL; c = index->context; if (!index->rewind) { - if (!index->current) { + // ECC-1764 + if (!index->current || !index->current->field) { *err = GRIB_END_OF_INDEX; return NULL; } @@ -1906,7 +1929,7 @@ grib_handle* codes_new_from_index(grib_index* index, int message_type, int* err) sizeof(grib_field_list)); if (!index->fieldset) { grib_context_log(index->context, GRIB_LOG_ERROR, - "unable to allocate %lu bytes", sizeof(grib_field_list)); + "Unable to allocate %zu bytes", sizeof(grib_field_list)); return NULL; } index->current = index->fieldset; @@ -1939,7 +1962,7 @@ grib_handle* codes_new_from_index(grib_index* index, int message_type, int* err) return h; } -void grib_index_rewind(grib_index* index) +static void grib_index_rewind(grib_index* index) { index->rewind = 1; } diff --git a/src/grib_io.cc b/src/grib_io.cc index 64c197a29..64477d39e 100644 --- a/src/grib_io.cc +++ b/src/grib_io.cc @@ -421,7 +421,6 @@ static int read_GRIB(reader* r, int no_alloc) r->seek_from_start(r->read_data, r->offset + 4); grib_buffer_delete(c, buf); return GRIB_UNSUPPORTED_EDITION; - break; } /* Assert(i <= buf->length); */ @@ -820,6 +819,9 @@ static int read_BUFR(reader* r, int no_alloc) GROW_BUF_IF_REQUIRED(sec1len + sec2len + sec3len + 4 + 3); /* Read section 3 */ + if (sec3len < 5) { + return GRIB_INVALID_MESSAGE; // ECC-1778 + } if ((r->read(r->read_data, tmp + i, sec3len - 3, &err) != sec3len - 3) || err) return err; i += sec3len - 3; @@ -949,7 +951,7 @@ static int read_any_gts(reader* r) unsigned long magic = 0; unsigned long start = 0x010d0d0a; /* SOH CR CR LF */ unsigned long theEnd = 0x0d0d0a03; /* CR CR LF ETX */ - unsigned char tmp[1024] = {0,}; /* See ECC-735 */ + unsigned char tmp[16384] = {0,}; /* See ECC-735 */ size_t message_size = 0; size_t already_read = 0; int i = 0; @@ -1229,12 +1231,12 @@ int wmo_read_bufr_from_file_fast(FILE* f, size_t* msg_len, off_t* msg_offset) int wmo_read_gts_from_file_fast(FILE* f, size_t* msg_len, off_t* msg_offset) { //TODO(masn): Needs proper implementation; no malloc - unsigned char buffer[1024] = {0,}; + //unsigned char buffer[1024] = {0,}; void* mesg = NULL; int err = GRIB_SUCCESS; grib_context* c = grib_context_get_default(); - *msg_len = sizeof(buffer); + *msg_len = 1024; // sizeof(buffer) mesg = wmo_read_gts_from_file_malloc(f, 0, msg_len, msg_offset, &err); grib_context_free(c, mesg); return err; @@ -1336,7 +1338,7 @@ static size_t stream_read(void* data, void* buffer, size_t len, int* err) if (len > LONG_MAX) { /* size_t cannot be coded into long */ *err = GRIB_INTERNAL_ERROR; - return -1; + return 0; } n = s->stream_proc(s->stream_data, buffer, len); diff --git a/src/grib_iterator.cc b/src/grib_iterator.cc index 9f4fadd95..0d253bc68 100644 --- a/src/grib_iterator.cc +++ b/src/grib_iterator.cc @@ -9,7 +9,6 @@ */ /*************************************************************************** - * Enrico Fucile * * Jean Baptiste Filippi - 01.11.2005 * ***************************************************************************/ #include "grib_api_internal.h" @@ -71,7 +70,8 @@ int grib_iterator_next(grib_iterator* i, double* lat, double* lon, double* value return c->next(i, lat, lon, value); c = s; } - Assert(0); + + grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No next() function in iterator '%s'", __func__, i->cclass->name); return 0; } @@ -84,7 +84,7 @@ int grib_iterator_has_next(grib_iterator* i) return c->has_next(i); c = s; } - Assert(0); + grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No has_next() function in iterator '%s'", __func__, i->cclass->name); return 0; } @@ -97,7 +97,7 @@ int grib_iterator_previous(grib_iterator* i, double* lat, double* lon, double* v return c->previous(i, lat, lon, value); c = s; } - Assert(0); + grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No previous() function in iterator '%s'", __func__, i->cclass->name); return 0; } @@ -110,7 +110,7 @@ int grib_iterator_reset(grib_iterator* i) return c->reset(i); c = s; } - Assert(0); + grib_context_log(i->h->context, GRIB_LOG_FATAL, "%s: No reset() function in iterator '%s'", __func__, i->cclass->name); return 0; } diff --git a/src/grib_iterator_class_gaussian_reduced.cc b/src/grib_iterator_class_gaussian_reduced.cc index cde71f746..b21f680b1 100644 --- a/src/grib_iterator_class_gaussian_reduced.cc +++ b/src/grib_iterator_class_gaussian_reduced.cc @@ -22,6 +22,11 @@ MEMBERS = double *las MEMBERS = double *los MEMBERS = long Nj + MEMBERS = long isRotated + MEMBERS = double angleOfRotation + MEMBERS = double southPoleLat + MEMBERS = double southPoleLon + MEMBERS = long disableUnrotate END_CLASS_DEF */ @@ -53,6 +58,11 @@ typedef struct grib_iterator_gaussian_reduced{ double *las; double *los; long Nj; + long isRotated; + double angleOfRotation; + double southPoleLat; + double southPoleLon; + long disableUnrotate; } grib_iterator_gaussian_reduced; extern grib_iterator_class* grib_iterator_class_gen; @@ -87,16 +97,29 @@ static void init_class(grib_iterator_class* c) static int next(grib_iterator* iter, double* lat, double* lon, double* val) { grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; + double ret_lat=0, ret_lon=0; if (iter->e >= (long)(iter->nv - 1)) return 0; iter->e++; - *lat = self->las[iter->e]; - *lon = self->los[iter->e]; + ret_lat = self->las[iter->e]; + ret_lon = self->los[iter->e]; if (val && iter->data) { *val = iter->data[iter->e]; } + + if (self->isRotated && !self->disableUnrotate) { + double new_lat = 0, new_lon = 0; + unrotate(ret_lat, ret_lon, + self->angleOfRotation, self->southPoleLat, self->southPoleLon, + &new_lat, &new_lon); + ret_lat = new_lat; + ret_lon = new_lon; + } + *lat = ret_lat; + *lon = ret_lon; + return 1; } @@ -104,7 +127,7 @@ typedef void (*get_reduced_row_proc)(long pl, double lon_first, double lon_last, /* For a reduced Gaussian grid which is GLOBAL, the number of points is the sum of the 'pl' array */ /* i.e. the total number of points on all latitudes */ -static size_t count_global_points(long* pl, size_t plsize) +static size_t count_global_points(const long* pl, size_t plsize) { return sum_of_pl_array(pl, plsize); } @@ -288,9 +311,9 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) long* pl; long max_pl = 0; long nj = 0, order = 0, i; - long row_count = 0; - long angleSubdivisions = 0; - grib_context* c = h->context; + long row_count = 0; + long angleSubdivisions = 0; + const grib_context* c = h->context; grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; const char* slat_first = grib_arguments_get_name(h, args, self->carg++); const char* slon_first = grib_arguments_get_name(h, args, self->carg++); @@ -300,6 +323,22 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) const char* spl = grib_arguments_get_name(h, args, self->carg++); const char* snj = grib_arguments_get_name(h, args, self->carg++); + self->angleOfRotation = 0; + self->isRotated = 0; + self->southPoleLat = 0; + self->southPoleLon = 0; + self->disableUnrotate = 0; /* unrotate enabled by default */ + + ret = grib_get_long(h, "isRotatedGrid", &self->isRotated); + if (ret == GRIB_SUCCESS && self->isRotated) { + if ((ret = grib_get_double_internal(h, "angleOfRotation", &self->angleOfRotation))) + return ret; + if ((ret = grib_get_double_internal(h, "latitudeOfSouthernPoleInDegrees", &self->southPoleLat))) + return ret; + if ((ret = grib_get_double_internal(h, "longitudeOfSouthernPoleInDegrees", &self->southPoleLon))) + return ret; + } + if ((ret = grib_get_double_internal(h, slat_first, &lat_first)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_double_internal(h, slon_first, &lon_first)) != GRIB_SUCCESS) diff --git a/src/grib_iterator_class_gen.cc b/src/grib_iterator_class_gen.cc index 02fe38c28..7124e8cf9 100644 --- a/src/grib_iterator_class_gen.cc +++ b/src/grib_iterator_class_gen.cc @@ -193,12 +193,21 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if ((err = grib_get_long_internal(h, s_numPoints, &numberOfPoints)) != GRIB_SUCCESS) return err; - if (numberOfPoints != dli) { - grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: %s != size(%s) (%ld!=%ld)", - s_numPoints, s_rawData, numberOfPoints, dli); - return GRIB_WRONG_GRID; + // See ECC-1792. If we don't want to decode the Data Section, we should not do a check + // to see if it is consistent with the Grid Section + if (iter->flags & GRIB_GEOITERATOR_NO_VALUES) { + // Iterator's number of values taken from the Grid Section + iter->nv = numberOfPoints; + } else { + // Check for consistency between the Grid and Data Sections + if (numberOfPoints != dli) { + grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: %s != size(%s) (%ld!=%ld)", + s_numPoints, s_rawData, numberOfPoints, dli); + return GRIB_WRONG_GRID; + } + iter->nv = dli; } - iter->nv = dli; + if (iter->nv == 0) { grib_context_log(h->context, GRIB_LOG_ERROR, "Geoiterator: size(%s) is %ld", s_rawData, dli); return GRIB_WRONG_GRID; diff --git a/src/grib_iterator_class_healpix.cc b/src/grib_iterator_class_healpix.cc index f2e9c0766..7befaf894 100644 --- a/src/grib_iterator_class_healpix.cc +++ b/src/grib_iterator_class_healpix.cc @@ -9,9 +9,13 @@ */ #include "grib_api_internal.h" -#include -#include + #include +#include +#include +#include +#include +#include /* This is used by make_class.pl @@ -24,6 +28,7 @@ MEMBERS = double *lats MEMBERS = double *lons MEMBERS = long Nsides + MEMBERS = bool nested END_CLASS_DEF */ @@ -54,6 +59,7 @@ typedef struct grib_iterator_healpix{ double *lats; double *lons; long Nsides; + bool nested; } grib_iterator_healpix; extern grib_iterator_class* grib_iterator_class_gen; @@ -77,14 +83,84 @@ grib_iterator_class* grib_iterator_class_healpix = &_grib_iterator_class_healpix static void init_class(grib_iterator_class* c) { - c->previous = (*(c->super))->previous; - c->reset = (*(c->super))->reset; - c->has_next = (*(c->super))->has_next; + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; } /* END_CLASS_IMP */ #define ITER "HEALPix Geoiterator" -#define RAD2DEG 57.29577951308232087684 // 180 over pi +constexpr double RAD2DEG = 57.29577951308232087684; // 180 over pi + +namespace +{ + +struct CodecFijNest +{ + static constexpr uint64_t __masks[] = { 0x00000000ffffffff, 0x0000ffff0000ffff, 0x00ff00ff00ff00ff, + 0x0f0f0f0f0f0f0f0f, 0x3333333333333333, 0x5555555555555555 }; + + inline static int nest_encode_bits(int n) + { + auto b = static_cast(n) & __masks[0]; + b = (b ^ (b << 16)) & __masks[1]; + b = (b ^ (b << 8)) & __masks[2]; + b = (b ^ (b << 4)) & __masks[3]; + b = (b ^ (b << 2)) & __masks[4]; + b = (b ^ (b << 1)) & __masks[5]; + return static_cast(b); + } + + // inline static int nest_decode_bits(int n) + // { + // auto b = static_cast(n) & __masks[5]; + // b = (b ^ (b >> 1)) & __masks[4]; + // b = (b ^ (b >> 2)) & __masks[3]; + // b = (b ^ (b >> 4)) & __masks[2]; + // b = (b ^ (b >> 8)) & __masks[1]; + // b = (b ^ (b >> 16)) & __masks[0]; + // return static_cast(b); + // } + + // static std::tuple nest_to_fij(int n, int k) + // { + // Assert(0 <= n); + // auto f = n >> (2 * k); // f = n / (Nside * Nside) + // n &= (1 << (2 * k)) - 1; // n = n % (Nside * Nside) + // auto i = nest_decode_bits(n); + // auto j = nest_decode_bits(n >> 1); + // return { f, i, j }; + // } + + static int fij_to_nest(int f, int i, int j, int k) + { + return (f << (2 * k)) + nest_encode_bits(i) + (nest_encode_bits(j) << 1); + } +}; + +inline int int_sqrt(int n) +{ + return static_cast(std::sqrt(static_cast(n) + 0.5)); +} + +// for division result within [0; 3] +inline int div_03(int a, int b) +{ + int t = (a >= (b << 1)) ? 1 : 0; + a -= t * (b << 1); + return (t << 1) + (a >= b ? 1 : 0); +} + +inline bool is_power_of_2(int n) +{ + return std::bitset(n).count() == 1; +} + +inline int pll(int f) +{ + constexpr int __pll[] = { 1, 3, 5, 7, 0, 2, 4, 6, 1, 3, 5, 7 }; + return __pll[f]; +} size_t HEALPix_nj(size_t N, size_t i) { @@ -92,7 +168,7 @@ size_t HEALPix_nj(size_t N, size_t i) size_t ni = 4 * N - 1; Assert(i < ni); return i < N ? 4 * (i + 1) : i < 3 * N ? 4 * N - : HEALPix_nj(N, ni - 1 - i); + : HEALPix_nj(N, ni - 1 - i); } // Thanks to Willem Deconinck and Pedro Maciel @@ -137,52 +213,139 @@ static std::vector HEALPix_longitudes(size_t N, size_t i) static int iterate_healpix(grib_iterator_healpix* self, long N) { - size_t ny, nx; - ny = nx = 4*N - 1; - std::vector latitudes(ny); + size_t Ny = 4 * static_cast(N) - 1; + auto Nd = static_cast(N); + + std::vector latitudes(Ny); for (long r = 1; r < N; r++) { - latitudes[r - 1] = 90.0 - RAD2DEG * std::acos(1.0 - r * r / (3.0 * N * N)); + auto rd = static_cast(r); + latitudes[r - 1] = 90.0 - RAD2DEG * std::acos(1.0 - rd * rd / (3.0 * Nd * Nd)); latitudes[4 * N - 1 - r] = -latitudes[r - 1]; } + // Polar caps for (long r = 1; r < N; r++) { - latitudes[r - 1] = 90.0 - RAD2DEG * std::acos(1.0 - r * r / (3.0 * N * N)); + auto rd = static_cast(r); + latitudes[r - 1] = 90.0 - RAD2DEG * std::acos(1.0 - rd * rd / (3.0 * Nd * Nd)); latitudes[4 * N - 1 - r] = -latitudes[r - 1]; } + // Equatorial belt for (long r = N; r < 2 * N; r++) { - latitudes[r - 1] = 90.0 - RAD2DEG * std::acos((4.0 * N - 2.0 * r) / (3.0 * N)); + auto rd = static_cast(r); + latitudes[r - 1] = 90.0 - RAD2DEG * std::acos((4.0 * Nd - 2.0 * rd) / (3.0 * Nd)); latitudes[4 * N - 1 - r] = -latitudes[r - 1]; } // Equator latitudes[2 * N - 1] = 0.0; - size_t k = 0; - for (size_t i = 0; i < ny; i++) { - // Compute the longitudes at a given latitude - std::vector longitudes = HEALPix_longitudes(N, i); - for (size_t j = 0; j < longitudes.size(); j++) { - self->lons[k] = longitudes[j]; - self->lats[k] = latitudes[i]; - ++k; + if (self->nested) { + if (!is_power_of_2(N)) { + grib_context* c = grib_context_get_default(); + grib_context_log(c, GRIB_LOG_ERROR, "%s: For nested ordering, Nside must be a power of 2", ITER); + return GRIB_WRONG_GRID; + } + + const auto Nside = static_cast(N); + const auto k = static_cast(std::log2(Nside)); + const int Npix = 12 * Nside * Nside; + const int Ncap = (Nside * (Nside - 1)) << 1; + + auto to_nest = [&](int f, //!< base pixel index + int ring, //!< 1-based ring number + int Nring, //!< number of pixels in ring + int phi, //!< index in longitude + int shift //!< if ring's first pixel is not at phi=0 + ) -> int { + int r = ((2 + (f >> 2)) << k) - ring - 1; + int p = 2 * phi - pll(f) * Nring - shift - 1; + if (p >= 2 * Nside) { + p -= 8 * Nside; + } + + int i = std::max(0, (r + p)) >> 1; + int j = std::max(0, (r - p)) >> 1; + + Assert(f < 12 && i < Nside && j < Nside); + return CodecFijNest::fij_to_nest(f, i, j, k); + }; + + std::vector ring_to_nest(Npix); + for (int r = 0; r < Npix; ++r) { + if (r < Ncap) { + // North polar cap + int Nring = (1 + int_sqrt(2 * r + 1)) >> 1; + int phi = 1 + r - 2 * Nring * (Nring - 1); + int f = div_03(phi - 1, Nring); + + ring_to_nest[r] = to_nest(f, Nring, Nring, phi, 0); + continue; + } + + if (Npix - Ncap <= r) { + // South polar cap + int Nring = (1 + int_sqrt(2 * Npix - 2 * r - 1)) >> 1; + int phi = 1 + r + 2 * Nring * (Nring - 1) + 4 * Nring - Npix; + int ring = 4 * Nside - Nring; // (from South pole) + int f = div_03(phi - 1, Nring) + 8; + + ring_to_nest[r] = to_nest(f, ring, Nring, phi, 0); + continue; + } + + // Equatorial belt + int ip = r - Ncap; + int tmp = ip >> (k + 2); + + int phi = ip - tmp * 4 * Nside + 1; + int ring = tmp + Nside; + + int ifm = 1 + ((phi - 1 - ((1 + tmp) >> 1)) >> k); + int ifp = 1 + ((phi - 1 - ((1 - tmp + 2 * Nside) >> 1)) >> k); + int f = (ifp == ifm) ? (ifp | 4) : ((ifp < ifm) ? ifp : (ifm + 8)); + + ring_to_nest[r] = to_nest(f, ring, Nside, phi, ring & 1); + } + + for (size_t i = 0, j=0; i < Ny; i++) { + // Compute the longitudes at a given latitude + for (double longitude : HEALPix_longitudes(N, i)) { + Assert( ring_to_nest.at(j) < Npix ); + self->lons[ring_to_nest.at(j)] = longitude; + self->lats[ring_to_nest.at(j)] = latitudes[i]; + ++j; + } + } + } else { + for (size_t i = 0, j = 0; i < Ny; i++) { + // Compute the longitudes at a given latitude + for (double longitude : HEALPix_longitudes(N, i)) { + self->lons[j] = longitude; + self->lats[j] = latitudes[i]; + ++j; + } } } return GRIB_SUCCESS; } +} // anonymous namespace + static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) { - int err = 0; + int err = 0; grib_iterator_healpix* self = (grib_iterator_healpix*)iter; const char* snside = grib_arguments_get_name(h, args, self->carg++); const char* sorder = grib_arguments_get_name(h, args, self->carg++); long N = 0; - if ((err = grib_get_long_internal(h, snside, &N)) != GRIB_SUCCESS) return err; + if ((err = grib_get_long_internal(h, snside, &N)) != GRIB_SUCCESS) { + return err; + } if (N <= 0) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Key %s must be greater than zero", ITER, snside); return GRIB_WRONG_GRID; @@ -190,14 +353,20 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) char ordering[32] = {0,}; size_t slen = sizeof(ordering); - if ((err = grib_get_string_internal(h, sorder, ordering, &slen)) != GRIB_SUCCESS) + if ((err = grib_get_string_internal(h, sorder, ordering, &slen)) != GRIB_SUCCESS) { return err; - - if (!STR_EQUAL(ordering, "ring")) { - grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only ring ordering is supported", ITER); - return GRIB_WRONG_GRID; } + self->nested = STR_EQUAL(ordering, "nested"); + if (!STR_EQUAL(ordering, "ring") && !self->nested) { + grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only orderingConvention=(ring|nested) are supported", ITER); + return GRIB_GEOCALCULUS_PROBLEM; + } + // if (self->nested && N == 1) { + // grib_context_log(h->context, GRIB_LOG_ERROR, "%s: For orderingConvention=nested, N must be greater than 1", ITER); + // return GRIB_GEOCALCULUS_PROBLEM; + // } + if (grib_is_earth_oblate(h)) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Only spherical earth is supported", ITER); return GRIB_WRONG_GRID; @@ -205,14 +374,19 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) if (iter->nv != 12 * N * N) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Wrong number of points (%zu!=12x%ldx%ld)", - ITER, iter->nv, N, N); + ITER, iter->nv, N, N); return GRIB_WRONG_GRID; } self->lats = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (self->lats == NULL) return GRIB_OUT_OF_MEMORY; + if (self->lats == nullptr) { + return GRIB_OUT_OF_MEMORY; + } + self->lons = (double*)grib_context_malloc(h->context, iter->nv * sizeof(double)); - if (self->lons == NULL) return GRIB_OUT_OF_MEMORY; + if (self->lons == nullptr) { + return GRIB_OUT_OF_MEMORY; + } try { err = iterate_healpix(self, N); @@ -228,24 +402,26 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) static int next(grib_iterator* iter, double* lat, double* lon, double* val) { - grib_iterator_healpix* self = (grib_iterator_healpix*)iter; + auto* self = (grib_iterator_healpix*)iter; - if ((long)iter->e >= (long)(iter->nv - 1)) + if (iter->e >= static_cast(iter->nv - 1)) { return 0; + } + iter->e++; *lat = self->lats[iter->e]; *lon = self->lons[iter->e]; - if (val && iter->data) { + if (val != nullptr && iter->data != nullptr) { *val = iter->data[iter->e]; } return 1; } -static int destroy(grib_iterator* i) +static int destroy(grib_iterator* iter) { - grib_iterator_healpix* self = (grib_iterator_healpix*)i; - const grib_context* c = i->h->context; + auto* self = (grib_iterator_healpix*)iter; + const auto* c = iter->h->context; grib_context_free(c, self->lats); grib_context_free(c, self->lons); diff --git a/src/grib_iterator_class_polar_stereographic.cc b/src/grib_iterator_class_polar_stereographic.cc index b9c0314a3..1f0c59d69 100644 --- a/src/grib_iterator_class_polar_stereographic.cc +++ b/src/grib_iterator_class_polar_stereographic.cc @@ -123,7 +123,8 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) double *lats, *lons; /* arrays for latitudes and longitudes */ double lonFirstInDegrees, latFirstInDegrees, radius; double x, y, Dx, Dy; - long nx, ny, centralLongitudeInDegrees, centralLatitudeInDegrees; + long nx, ny; + double centralLongitudeInDegrees, centralLatitudeInDegrees; long alternativeRowScanning, iScansNegatively, i, j; long jScansPositively, jPointsAreConsecutive, southPoleOnPlane; double centralLongitude, centralLatitude; /* in radians */ @@ -173,9 +174,9 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args) return ret; if ((ret = grib_get_long_internal(h, s_southPoleOnPlane, &southPoleOnPlane)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, s_centralLongitude, ¢ralLongitudeInDegrees)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, s_centralLongitude, ¢ralLongitudeInDegrees)) != GRIB_SUCCESS) return ret; - if ((ret = grib_get_long_internal(h, s_centralLatitude, ¢ralLatitudeInDegrees)) != GRIB_SUCCESS) + if ((ret = grib_get_double_internal(h, s_centralLatitude, ¢ralLatitudeInDegrees)) != GRIB_SUCCESS) return ret; if ((ret = grib_get_double_internal(h, s_Dx, &Dx)) != GRIB_SUCCESS) return ret; diff --git a/src/grib_loader_from_handle.cc b/src/grib_loader_from_handle.cc index db2721598..a423c31cc 100644 --- a/src/grib_loader_from_handle.cc +++ b/src/grib_loader_from_handle.cc @@ -24,16 +24,13 @@ static int copy_values(grib_handle* h, grib_accessor* ga) switch (h->values[j][i].type) { case GRIB_TYPE_LONG: return grib_pack_long(ga, &h->values[j][i].long_value, &len); - break; case GRIB_TYPE_DOUBLE: return grib_pack_double(ga, &h->values[j][i].double_value, &len); - break; case GRIB_TYPE_STRING: len = strlen(h->values[j][i].string_value); return grib_pack_string(ga, h->values[j][i].string_value, &len); - break; } } } @@ -166,7 +163,7 @@ int grib_init_accessor_from_handle(grib_loader* loader, grib_accessor* ga, grib_ switch (ga_type) { case GRIB_TYPE_STRING: - /*ecc__grib_get_string_length(ga,&len); See ECC-490 */ + /*grib_get_string_length_acc(ga,&len); See ECC-490 */ grib_get_string_length(h, name, &len); sval = (char*)grib_context_malloc(h->context, len); ret = grib_get_string_internal(h, name, sval, &len); diff --git a/src/grib_nearest.cc b/src/grib_nearest.cc index 1367daaf3..d440771f7 100644 --- a/src/grib_nearest.cc +++ b/src/grib_nearest.cc @@ -341,8 +341,8 @@ int grib_nearest_find_generic( double lat1 = 0, lat2 = 0; /* inlat will be between these */ const double LAT_DELTA = 10.0; /* in degrees */ - *out_lons_count = nvalues; /* Maybe overestimate but safe */ - *out_lats_count = nvalues; + *out_lons_count = (int)nvalues; /* Maybe overestimate but safe */ + *out_lats_count = (int)nvalues; if (*out_lats) grib_context_free(nearest->context, *out_lats); diff --git a/src/grib_nearest_class_latlon_reduced.cc b/src/grib_nearest_class_latlon_reduced.cc index 992b29f2e..e5c503e99 100644 --- a/src/grib_nearest_class_latlon_reduced.cc +++ b/src/grib_nearest_class_latlon_reduced.cc @@ -210,11 +210,11 @@ static int find_global(grib_nearest* nearest, grib_handle* h, iter = grib_iterator_new(h, GRIB_GEOITERATOR_NO_VALUES, &ret); if (ret) { - grib_context_log(h->context, GRIB_LOG_ERROR, "unable to create iterator"); + grib_context_log(h->context, GRIB_LOG_ERROR, "Unable to create iterator"); return ret; } while (grib_iterator_next(iter, &lat, &lon, NULL)) { - if (olat != lat) { + if (ilat < self->lats_count && olat != lat) { self->lats[ilat++] = lat; olat = lat; } @@ -409,7 +409,7 @@ static int find_global(grib_nearest* nearest, grib_handle* h, if (values) { /* ECC-499 */ grib_get_double_element_internal(h, self->values_key, self->k[kk], &(values[kk])); } - indexes[kk] = self->k[kk]; + indexes[kk] = (int)self->k[kk]; kk++; } } diff --git a/src/grib_nearest_class_reduced.cc b/src/grib_nearest_class_reduced.cc index 603c1a441..713570264 100644 --- a/src/grib_nearest_class_reduced.cc +++ b/src/grib_nearest_class_reduced.cc @@ -29,6 +29,7 @@ MEMBERS = double lon_first MEMBERS = double lon_last MEMBERS = int legacy + MEMBERS = int rotated END_CLASS_DEF */ @@ -69,6 +70,7 @@ typedef struct grib_nearest_reduced{ double lon_first; double lon_last; int legacy; + int rotated; } grib_nearest_reduced; extern grib_nearest_class* grib_nearest_class_gen; @@ -101,6 +103,7 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args) self->pl = grib_arguments_get_name(h, args, self->cargs++); self->j = (size_t*)grib_context_malloc(h->context, 2 * sizeof(size_t)); self->legacy = -1; + self->rotated = -1; if (!self->j) return GRIB_OUT_OF_MEMORY; self->k = (size_t*)grib_context_malloc(nearest->context, NUM_NEIGHBOURS * sizeof(size_t)); @@ -138,10 +141,21 @@ static int find_global(grib_nearest* nearest, grib_handle* h, static int is_legacy(grib_handle* h, int* legacy) { int err = 0; - long lLegacy = 0; - err = grib_get_long(h, "legacyGaussSubarea", &lLegacy); + long lVal = 0; + *legacy = 0; // false by default + err = grib_get_long(h, "legacyGaussSubarea", &lVal); if (err) return err; - *legacy = (int)lLegacy; + *legacy = (int)lVal; + return GRIB_SUCCESS; +} +static int is_rotated(grib_handle* h, int* rotated) +{ + int err = 0; + long lVal = 0; + *rotated = 0; // false by default + err = grib_get_long(h, "isRotatedGrid", &lVal); + if (err) return err; + *rotated = (int)lVal; return GRIB_SUCCESS; } @@ -153,7 +167,12 @@ static int find(grib_nearest* nearest, grib_handle* h, int err = 0; grib_nearest_reduced* self = (grib_nearest_reduced*)nearest; - if (self->global) { + if (self->rotated == -1 || (flags & GRIB_NEAREST_SAME_GRID) == 0) { + err = is_rotated(h, &(self->rotated)); + if (err) return err; + } + + if (self->global && self->rotated == 0) { err = find_global(nearest, h, inlat, inlon, flags, outlats, outlons, values, @@ -251,7 +270,7 @@ static int find_global(grib_nearest* nearest, grib_handle* h, return err; } while (grib_iterator_next(iter, &lat, &lon, NULL)) { - if (olat != lat) { + if (ilat < self->lats_count && olat != lat) { self->lats[ilat++] = lat; olat = lat; } @@ -262,6 +281,7 @@ static int find_global(grib_nearest* nearest, grib_handle* h, if (lon > 180 && lon < 360) lon -= 360; } + DEBUG_ASSERT_ACCESS(self->lons, (long)ilon, (long)nearest->values_count); self->lons[ilon++] = lon; } self->lats_count = ilat; @@ -490,7 +510,7 @@ static int find_global(grib_nearest* nearest, grib_handle* h, grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_reduced: Unable to compute index. Value too large"); return GRIB_OUT_OF_RANGE; } else { - indexes[kk] = self->k[kk]; + indexes[kk] = (int)self->k[kk]; } kk++; } diff --git a/src/grib_nearest_class_regular.cc b/src/grib_nearest_class_regular.cc index 4e007ce7a..adb5320a1 100644 --- a/src/grib_nearest_class_regular.cc +++ b/src/grib_nearest_class_regular.cc @@ -214,7 +214,6 @@ static int find(grib_nearest* nearest, grib_handle* h, } while (grib_iterator_next(iter, &lat, &lon, NULL)) { if (ilat < self->lats_count && olat != lat) { - /* Assert(ilat < self->lats_count); */ self->lats[ilat++] = lat; olat = lat; } @@ -351,7 +350,7 @@ static int find(grib_nearest* nearest, grib_handle* h, grib_context_log(h->context, GRIB_LOG_ERROR, "grib_nearest_regular: Unable to compute index. Value too large"); return GRIB_OUT_OF_RANGE; } else { - indexes[kk] = self->k[kk]; + indexes[kk] = (int)self->k[kk]; } kk++; } diff --git a/src/grib_oarray.cc b/src/grib_oarray.cc index 91e7d9f33..6c5e06d45 100644 --- a/src/grib_oarray.cc +++ b/src/grib_oarray.cc @@ -17,8 +17,6 @@ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) c = grib_context_get_default(); v = (grib_oarray*)grib_context_malloc_clear(c, sizeof(grib_oarray)); if (!v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_oarray_new unable to allocate %zu bytes", sizeof(grib_oarray)); return NULL; } v->size = size; @@ -27,8 +25,7 @@ grib_oarray* grib_oarray_new(grib_context* c, size_t size, size_t incsize) v->v = (void**)grib_context_malloc_clear(c, sizeof(char*) * size); v->context = c; if (!v->v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_oarray_new unable to allocate %zu bytes", sizeof(char*) * size); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(char*) * size); return NULL; } return v; @@ -44,8 +41,7 @@ static grib_oarray* grib_oarray_resize(grib_oarray* v) v->v = (void**)grib_context_realloc(c, v->v, newsize * sizeof(char*)); v->size = newsize; if (!v->v) { - grib_context_log(c, GRIB_LOG_ERROR, - "grib_oarray_resize unable to allocate %zu bytes", sizeof(char*) * newsize); + grib_context_log(c, GRIB_LOG_ERROR, "%s: Unable to allocate %zu bytes", __func__, sizeof(char*) * newsize); return NULL; } return v; diff --git a/src/grib_openjpeg_encoding.cc b/src/grib_openjpeg_encoding.cc index 6b726a97a..f03ba2fcb 100644 --- a/src/grib_openjpeg_encoding.cc +++ b/src/grib_openjpeg_encoding.cc @@ -14,6 +14,13 @@ #include "openjpeg.h" +// The older versions did not have the opj_config.h file +// So we use a more recent macro to detect whether it is there. +// Also see https://github.com/uclouvain/openjpeg/issues/1514 +#if defined(OPJ_IMG_INFO) + #include "opj_config.h" +#endif + static void openjpeg_warning(const char* msg, void* client_data) { grib_context_log((grib_context*)client_data, GRIB_LOG_WARNING, "openjpeg: %s", msg); diff --git a/src/grib_parse_utils.cc b/src/grib_parse_utils.cc index db8897930..1d014995c 100644 --- a/src/grib_parse_utils.cc +++ b/src/grib_parse_utils.cc @@ -210,7 +210,7 @@ int grib_recompose_name(grib_handle* h, grib_accessor* observer, const char* una // size = count; // } // else { -// ret = ecc__grib_get_size(h, a, &size); +// ret = grib_get_size_(h, a, &size); // } // if (ret) return ret; // dval = (double*)grib_context_malloc_clear(h->context, sizeof(double) * size); @@ -251,7 +251,7 @@ int grib_recompose_name(grib_handle* h, grib_accessor* observer, const char* una // size = count; // } // else { -// ret = ecc__grib_get_size(h, a, &size); +// ret = grib_get_size_(h, a, &size); // } // if (ret) return ret; // lval = (long*)grib_context_malloc_clear(h->context, sizeof(long) * size); @@ -872,19 +872,14 @@ int grib_type_to_int(char id) switch (id) { case 'd': return GRIB_TYPE_DOUBLE; - break; case 'f': return GRIB_TYPE_DOUBLE; - break; case 'l': return GRIB_TYPE_LONG; - break; case 'i': return GRIB_TYPE_LONG; - break; case 's': return GRIB_TYPE_STRING; - break; } return GRIB_TYPE_UNDEFINED; } diff --git a/src/grib_query.cc b/src/grib_query.cc index 634f0e600..253217c0b 100644 --- a/src/grib_query.cc +++ b/src/grib_query.cc @@ -592,22 +592,20 @@ grib_accessor* grib_find_accessor(const grib_handle* h, const char* name) return aret; } -grib_accessor* grib_find_attribute(grib_handle* h, const char* name, const char* attr_name, int* err) -{ - grib_accessor* a = NULL; - grib_accessor* act = NULL; - - if ((a = grib_find_accessor(h, name)) == NULL) { - *err = GRIB_NOT_FOUND; - return NULL; - } - - if ((act = grib_accessor_get_attribute(a, attr_name)) == NULL) { - *err = GRIB_ATTRIBUTE_NOT_FOUND; - return NULL; - } - return act; -} +// grib_accessor* grib_find_attribute(grib_handle* h, const char* name, const char* attr_name, int* err) +// { +// grib_accessor* a = NULL; +// grib_accessor* act = NULL; +// if ((a = grib_find_accessor(h, name)) == NULL) { +// *err = GRIB_NOT_FOUND; +// return NULL; +// } +// if ((act = grib_accessor_get_attribute(a, attr_name)) == NULL) { +// *err = GRIB_ATTRIBUTE_NOT_FOUND; +// return NULL; +// } +// return act; +// } /* Only look in trie. Used only in alias. Should not be used in other cases.*/ grib_accessor* grib_find_accessor_fast(grib_handle* h, const char* name) diff --git a/src/grib_sarray.cc b/src/grib_sarray.cc index 93e372e94..2159af7b3 100644 --- a/src/grib_sarray.cc +++ b/src/grib_sarray.cc @@ -30,7 +30,7 @@ grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) v = (grib_sarray*)grib_context_malloc_clear(c, sizeof(grib_sarray)); if (!v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_sarray_new unable to allocate %lu bytes\n", sizeof(grib_sarray)); + "%s: Unable to allocate %zu bytes", __func__, sizeof(grib_sarray)); return NULL; } v->size = size; @@ -40,7 +40,7 @@ grib_sarray* grib_sarray_new(grib_context* c, size_t size, size_t incsize) v->v = (char**)grib_context_malloc_clear(c, sizeof(char*) * size); if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_sarray_new unable to allocate %lu bytes\n", sizeof(char*) * size); + "%s: Unable to allocate %zu bytes", __func__, sizeof(char*) * size); return NULL; } return v; @@ -57,7 +57,7 @@ static grib_sarray* grib_sarray_resize(grib_sarray* v) v->size = newsize; if (!v->v) { grib_context_log(c, GRIB_LOG_ERROR, - "grib_sarray_resize unable to allocate %lu bytes\n", sizeof(char*) * newsize); + "%s: Unable to allocate %zu bytes", __func__, sizeof(char*) * newsize); return NULL; } return v; diff --git a/src/grib_scaling.h b/src/grib_scaling.h index c48b3aa2c..3aebfe78f 100644 --- a/src/grib_scaling.h +++ b/src/grib_scaling.h @@ -1,3 +1,13 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + #pragma once /* Return n to the power of s */ diff --git a/src/grib_templates.cc b/src/grib_templates.cc index 3e357382c..ca2076a2a 100644 --- a/src/grib_templates.cc +++ b/src/grib_templates.cc @@ -35,15 +35,15 @@ // return NULL; // } -/* Windows always has a colon in pathnames e.g. C:\temp\file. It uses semi-colons as delimiter */ +// Windows always has a colon in pathnames e.g. C:\temp\file. It uses semi-colons as delimiter #ifdef ECCODES_ON_WINDOWS #define ECC_PATH_DELIMITER_CHAR ';' #else #define ECC_PATH_DELIMITER_CHAR ':' #endif -/* if product_kind is PRODUCT_ANY, the type of sample file is determined at runtime */ -static grib_handle* try_product_template(grib_context* c, ProductKind product_kind, const char* dir, const char* name) +// if product_kind is PRODUCT_ANY, the type of sample file is determined at runtime +static grib_handle* try_product_sample(grib_context* c, ProductKind product_kind, const char* dir, const char* name) { char path[1024]; grib_handle* g = NULL; @@ -55,10 +55,10 @@ static grib_handle* try_product_template(grib_context* c, ProductKind product_ki snprintf(path, sizeof(path), "%s/%s.tmpl", dir, name); if (c->debug) { - fprintf(stderr, "ECCODES DEBUG try_product_template product=%s, path='%s'\n", codes_get_product_name(product_kind), path); + fprintf(stderr, "ECCODES DEBUG try_product_sample product=%s, path='%s'\n", codes_get_product_name(product_kind), path); } - if (codes_access(path, F_OK) == 0) { /* 0 means file exists */ + if (codes_access(path, F_OK) == 0) { // 0 means file exists FILE* f = codes_fopen(path, "r"); if (!f) { grib_context_log(c, GRIB_LOG_PERROR, "cannot open %s", path); @@ -66,7 +66,7 @@ static grib_handle* try_product_template(grib_context* c, ProductKind product_ki } if (product_kind == PRODUCT_ANY) { - /* Determine the product kind from sample file */ + // Determine the product kind from sample file char* mesg = NULL; size_t size = 0; off_t offset = 0; @@ -89,7 +89,7 @@ static grib_handle* try_product_template(grib_context* c, ProductKind product_ki if (product_kind == PRODUCT_BUFR) { g = codes_bufr_handle_new_from_file(c, f, &err); } else { - /* Note: Pseudo GRIBs like DIAG and BUDG also come here */ + // Note: Pseudo GRIBs like DIAG and BUDG also come here DEBUG_ASSERT(product_kind == PRODUCT_GRIB); g = grib_handle_new_from_file(c, f, &err); } @@ -102,22 +102,24 @@ static grib_handle* try_product_template(grib_context* c, ProductKind product_ki return g; } -static char* try_template_path(grib_context* c, const char* dir, const char* name) +static char* try_sample_path(grib_context* c, const char* dir, const char* name) { + // The ".tmpl" extension is historic. It should have been ".sample" char path[2048]; if (string_ends_with(name, ".tmpl")) snprintf(path, sizeof(path), "%s/%s", dir, name); else snprintf(path, sizeof(path), "%s/%s.tmpl", dir, name); - if (codes_access(path, F_OK) == 0) { /* 0 means file exists */ + if (codes_access(path, F_OK) == 0) { // 0 means file exists return grib_context_strdup(c, path); } return NULL; } -grib_handle* codes_external_template(grib_context* c, ProductKind product_kind, const char* name) +// External here means on disk +grib_handle* codes_external_sample(grib_context* c, ProductKind product_kind, const char* name) { const char* base = c->grib_samples_path; char buffer[1024]; @@ -130,21 +132,21 @@ grib_handle* codes_external_template(grib_context* c, ProductKind product_kind, while (*base) { if (*base == ECC_PATH_DELIMITER_CHAR) { *p = 0; - g = try_product_template(c, product_kind, buffer, name); + g = try_product_sample(c, product_kind, buffer, name); if (g) return g; p = buffer; - base++; /*advance past delimiter*/ + base++; //advance past delimiter } *p++ = *base++; } *p = 0; - g = try_product_template(c, product_kind, buffer, name); + g = try_product_sample(c, product_kind, buffer, name); return g; } -char* get_external_template_path(grib_context* c, const char* name) +char* get_external_sample_path(grib_context* c, const char* name) { const char* base = c->grib_samples_path; char buffer[1024]; @@ -157,7 +159,7 @@ char* get_external_template_path(grib_context* c, const char* name) while (*base) { if (*base == ECC_PATH_DELIMITER_CHAR) { *p = 0; - g = try_template_path(c, buffer, name); + g = try_sample_path(c, buffer, name); if (g) return g; p = buffer; @@ -167,5 +169,5 @@ char* get_external_template_path(grib_context* c, const char* name) } *p = 0; - return g = try_template_path(c, buffer, name); + return g = try_sample_path(c, buffer, name); } diff --git a/src/grib_trie_with_rank.cc b/src/grib_trie_with_rank.cc index d999f9f1f..8b74b6ca6 100644 --- a/src/grib_trie_with_rank.cc +++ b/src/grib_trie_with_rank.cc @@ -485,7 +485,7 @@ int grib_trie_with_rank_insert(grib_trie_with_rank* t, const char* key, void* da grib_oarray_push(t->context, t->objs, data); /* grib_trie_with_rank_insert_in_list(t,data); */ GRIB_MUTEX_UNLOCK(&mutex); - return t->objs->n; + return (int)t->objs->n; } /* diff --git a/src/grib_util.cc b/src/grib_util.cc index ab6283987..9ff8e7270 100644 --- a/src/grib_util.cc +++ b/src/grib_util.cc @@ -10,6 +10,8 @@ #include "grib_api_internal.h" #include +#include +#include typedef enum { @@ -90,18 +92,18 @@ static grib_handle* grib_sections_copy_internal(grib_handle* hfrom, grib_handle* p = buffer; off = 0; for (i = 0; i <= hfrom->sections_count; i++) { - grib_handle* hand = NULL; + const grib_handle* hand = NULL; if (sections[i]) hand = hfrom; else hand = hto; - p = (unsigned char*)memcpy(p, hand->buffer->data + section_offset[i], section_length[i]); + p = (unsigned char*)memcpy(p, hand->buffer->data + section_offset[i], section_length[i]); section_offset[i] = off; off += section_length[i]; p += section_length[i]; } - /* copy section 3 present flag*/ + // copy section 3 present flag if (edition == 1) { const void* buffer_to = NULL; size_t size_to = 0; @@ -113,7 +115,7 @@ static grib_handle* grib_sections_copy_internal(grib_handle* hfrom, grib_handle* h = grib_handle_new_from_message(hfrom->context, buffer, totalLength); - /*to allow free of buffer*/ + // to allow freeing of buffer h->buffer->property = CODES_MY_BUFFER; switch (edition) { @@ -279,7 +281,7 @@ grib_handle* grib_util_sections_copy(grib_handle* hfrom, grib_handle* hto, int w static grib_trie* init_list(const char* name); static grib_trie* param_id_list = NULL; static grib_trie* mars_param_list = NULL; -/* TODO thread safe */ + grib_string_list* grib_util_get_param_id(const char* mars_param) { if (!mars_param_list && (mars_param_list = init_list("mars_param.table")) == NULL) @@ -382,13 +384,13 @@ static const char* get_packing_spec_packing_type_name(long packing_spec_packing_ return NULL; } -/* For debugging purposes */ -static void print_values(grib_context* c, +// For debugging purposes +static void print_values(const grib_context* c, const grib_util_grid_spec* spec, const grib_util_packing_spec* packing_spec, const char* input_packing_type, - const double* data_values, const size_t data_values_count, /* the data pay load */ - const grib_values* keyval_pairs, const size_t count) /* keys and their values */ + const double* data_values, const size_t data_values_count, // the data pay load + const grib_values* keyval_pairs, const size_t count) // keys and their values { size_t i = 0; int isConstant = 1; @@ -464,14 +466,12 @@ static void print_values(grib_context* c, } -/* -static int DBL_EQUAL(double d1, double d2, double tolerance) -{ - return fabs(d1-d2) < tolerance; -} -*/ +// static int DBL_EQUAL(double d1, double d2, double tolerance) +// { +// return fabs(d1-d2) < tolerance; +// } -// /* Returns a boolean: 1 if angle can be encoded, 0 otherwise */ +// Returns a boolean: 1 if angle can be encoded, 0 otherwise // static int grib1_angle_can_be_encoded(const double angle) // { // const double angle_milliDegrees = angle * 1000; @@ -480,10 +480,10 @@ static int DBL_EQUAL(double d1, double d2, double tolerance) // rounded = (int)(angle_milliDegrees-0.5)/1000.0; // } // if (angle == rounded) return 1; -// return 0; /* sub millidegree. Cannot be encoded in grib1 */ +// return 0; // sub millidegree. Cannot be encoded in grib1 // } -// /* Returns a boolean: 1 if angle can be encoded, 0 otherwise */ +// Returns a boolean: 1 if angle can be encoded, 0 otherwise // static int angle_can_be_encoded(const double angle, const double angular_precision) // { // const double angle_expanded = angle * angular_precision; @@ -493,18 +493,18 @@ static int DBL_EQUAL(double d1, double d2, double tolerance) // rounded = (long)(angle_expanded-0.5)/angular_precision; // } // if (angle == rounded) return 1; -// /*printf(" ......... angle cannot be encoded: %.10e\n", angle);*/ -// return 0; /* Cannot be encoded */ +// //printf(" ......... angle cannot be encoded: %.10e\n", angle); +// return 0; // Cannot be encoded // } -/* Returns a boolean: 1 if angle can be encoded, 0 otherwise */ -static int angle_can_be_encoded(grib_handle* h, const double angle) +// Returns a boolean: 1 if angle can be encoded, 0 otherwise +static int angle_can_be_encoded(const grib_handle* h, const double angle) { int ret = 0; int retval = 1; grib_handle* h2 = NULL; char sample_name[16] = {0,}; - long angle_subdivisions = 0; /* e.g. 1e3 for grib1 and 1e6 for grib2 */ + long angle_subdivisions = 0; // e.g. 1e3 for grib1 and 1e6 for grib2 long edition = 0, coded = 0; double expanded, diff; @@ -545,20 +545,19 @@ static double adjust_angle(const double angle, const RoundingPolicy policy, cons return result; } -/* Search key=value array for: - * latitudeOfFirstGridPointInDegrees - * longitudeOfFirstGridPointInDegrees - * latitudeOfLastGridPointInDegrees - * longitudeOfLastGridPointInDegrees - * and change their values to expand the bounding box - */ -static int expand_bounding_box(grib_handle* h, grib_values* values, const size_t count) +// Search key=value array for: +// * latitudeOfFirstGridPointInDegrees +// * longitudeOfFirstGridPointInDegrees +// * latitudeOfLastGridPointInDegrees +// * longitudeOfLastGridPointInDegrees +// and change their values to expand the bounding box +static int expand_bounding_box(const grib_handle* h, grib_values* values, const size_t count) { int ret = GRIB_SUCCESS; size_t i = 0; double new_angle = 0; RoundingPolicy roundingPolicy = eROUND_ANGLE_UP; - long angle_subdivisions = 0; /* e.g. 1e3 for grib1 and 1e6 for grib2 */ + long angle_subdivisions = 0; // e.g. 1e3 for grib1 and 1e6 for grib2 if ((ret = grib_get_long(h, "angleSubdivisions", &angle_subdivisions)) != 0) return ret; @@ -625,7 +624,7 @@ static int check_values(const double* data_values, size_t data_values_count) }*/ static int check_geometry(grib_handle* handle, const grib_util_grid_spec* spec, - size_t data_values_count, int specified_as_global) + size_t data_values_count, bool specified_as_global) { int err = 0; @@ -646,11 +645,10 @@ static int check_geometry(grib_handle* handle, const grib_util_grid_spec* spec, return err; } - #if defined(CHECK_HANDLE_AGAINST_SPEC) /* Check what is coded in the handle is what is requested by the spec. */ /* Return GRIB_SUCCESS if the geometry matches, otherwise the error code */ -static int check_handle_against_spec(grib_handle* handle, const long edition, +static int check_handle_against_spec(const grib_handle* handle, const long edition, const grib_util_grid_spec* spec, int global_grid) { int err = 0; @@ -833,10 +831,10 @@ static const char* get_grid_type_name(const int spec_grid_type) return NULL; } -static int is_constant_field(const double missingValue, const double* data_values, size_t data_values_count) +static bool is_constant_field(const double missingValue, const double* data_values, size_t data_values_count) { size_t ii = 0; - int constant = 1; + bool constant = true; double value = missingValue; for (ii = 0; ii < data_values_count; ii++) { @@ -846,7 +844,7 @@ static int is_constant_field(const double missingValue, const double* data_value } else { if (value != data_values[ii]) { - constant = 0; + constant = false; break; } } @@ -884,10 +882,10 @@ static int get_grib_sample_name(grib_handle* h, long editionNumber, switch (spec->grid_type) { case GRIB_UTIL_GRID_SPEC_REDUCED_GG: case GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG: - /* Choose a sample with the right Gaussian number and edition */ + // Choose a sample with the right Gaussian number and edition snprintf(sample_name, sample_name_len, "%s_pl_%ld_grib%ld", grid_type, spec->N, editionNumber); if (spec->pl && spec->pl_size) { - /* GRIB-834: pl is given so can use any of the reduced_gg_pl samples */ + // GRIB-834: pl is given so can use any of the reduced_gg_pl samples snprintf(sample_name, sample_name_len, "%s_pl_grib%ld", grid_type, editionNumber); } break; @@ -897,12 +895,15 @@ static int get_grib_sample_name(grib_handle* h, long editionNumber, case GRIB_UTIL_GRID_SPEC_HEALPIX: snprintf(sample_name, sample_name_len, "GRIB%ld", editionNumber); break; + case GRIB_UTIL_GRID_SPEC_REDUCED_LL: + snprintf(sample_name, sample_name_len, "%s_sfc_grib%ld", grid_type, editionNumber); + break; default: snprintf(sample_name, sample_name_len, "%s_pl_grib%ld", grid_type, editionNumber); } if (spec->pl && spec->grid_name) { - /* Cannot have BOTH pl and grid name specified */ + // Cannot have BOTH pl and grid name specified fprintf(stderr, "%s: Cannot set BOTH spec.pl and spec.grid_name!\n", __func__); return GRIB_INTERNAL_ERROR; } @@ -964,25 +965,25 @@ grib_handle* grib_util_set_spec(grib_handle* h, } while (0) grib_values values[1024] = {{0,},}; - grib_context* c = grib_context_get_default(); + const grib_context* c = grib_context_get_default(); grib_handle* h_out = NULL; grib_handle* h_sample = NULL; const char* grid_type = NULL; - char sample_name[1024]; /* name of the GRIB sample file */ + char sample_name[1024]; // name of the GRIB sample file char input_grid_type[100]; char input_packing_type[100]; long editionNumber = 0; size_t count = 0, len = 100, slen = 20, input_grid_type_len = 100; double laplacianOperator; int i = 0, packingTypeIsSet = 0, setSecondOrder = 0, setJpegPacking = 0, setCcsdsPacking = 0; - int convertEditionEarlier = 0; /* For cases when we cannot set some keys without converting */ - int grib1_high_resolution_fix = 0; /* boolean: See GRIB-863 */ - int global_grid = 0; /* boolean */ + bool convertEditionEarlier = false; // For cases when we cannot set some keys without converting + bool grib1_high_resolution_fix = false; // See GRIB-863 + bool global_grid = false; int expandBoundingBox = 0; Assert(h); - /* Get edition number from input handle */ + // Get edition number from input handle if ((*err = grib_get_long(h, "edition", &editionNumber)) != 0) { if (c->write_on_fail) grib_write_message(h, "error.grib", "w"); return NULL; @@ -994,7 +995,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, grib_get_string(h, "packingType", input_packing_type, &len); - /* ECC-1201, ECC-1529, ECC-1530: Make sure input packing type is preserved */ + // ECC-1201, ECC-1529, ECC-1530: Make sure input packing type is preserved if (packing_spec->packing == GRIB_UTIL_PACKING_SAME_AS_INPUT && packing_spec->packing_type == GRIB_UTIL_PACKING_TYPE_SAME_AS_INPUT) { @@ -1028,7 +1029,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, } SET_STRING_VALUE("gridType", grid_type); - /* The "pl" is given from the template, but "section_copy" will take care of setting the right headers */ + // The "pl" is given from the template, but "section_copy" will take care of setting the right headers if (get_grib_sample_name(h, editionNumber, spec, grid_type, sample_name) != GRIB_SUCCESS) { goto cleanup; } @@ -1037,7 +1038,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, fprintf(stderr, "ECCODES WARNING %s: '%s' specified " "but input is GRIB edition %ld. Output must be a higher edition!\n", __func__, grid_type, editionNumber); - convertEditionEarlier = 1; + convertEditionEarlier = true; } h_sample = grib_handle_new_from_samples(NULL, sample_name); @@ -1046,7 +1047,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, return NULL; } - /* Set grid */ + // Set grid switch (spec->grid_type) { case GRIB_UTIL_GRID_SPEC_REGULAR_LL: case GRIB_UTIL_GRID_SPEC_ROTATED_LL: @@ -1057,16 +1058,16 @@ grib_handle* grib_util_set_spec(grib_handle* h, SET_LONG_VALUE("ijDirectionIncrementGiven", 1); if (editionNumber == 1) { - /* GRIB-863: GRIB1 cannot represent increments less than a millidegree */ + // GRIB-863: GRIB1 cannot represent increments less than a millidegree if (!angle_can_be_encoded(h, spec->iDirectionIncrementInDegrees) || !angle_can_be_encoded(h, spec->jDirectionIncrementInDegrees)) { - grib1_high_resolution_fix = 1; - /* Set flag to compute the increments */ + grib1_high_resolution_fix = true; + // Set flag to compute the increments SET_LONG_VALUE("ijDirectionIncrementGiven", 0); } } - /* default iScansNegatively=0 jScansPositively=0 is ok */ + // default iScansNegatively=0 jScansPositively=0 is ok COPY_SPEC_LONG(iScansNegatively); COPY_SPEC_LONG(jScansPositively); @@ -1091,7 +1092,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); SET_LONG_VALUE("ijDirectionIncrementGiven", 1); - /* TODO: add Assert */ + // TODO(masn): add Assert COPY_SPEC_LONG(Ni); COPY_SPEC_DOUBLE(iDirectionIncrementInDegrees); COPY_SPEC_LONG(Nj); @@ -1126,7 +1127,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, COPY_SPEC_LONG(Ni); COPY_SPEC_LONG(Nj); - /* default iScansNegatively=0 jScansPositively=0 is ok */ + // default iScansNegatively=0 jScansPositively=0 is ok COPY_SPEC_LONG(iScansNegatively); COPY_SPEC_LONG(jScansPositively); COPY_SPEC_DOUBLE(orientationOfTheGridInDegrees); @@ -1140,8 +1141,8 @@ grib_handle* grib_util_set_spec(grib_handle* h, COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); - COPY_SPEC_LONG(Ni); /* same as Nx */ - COPY_SPEC_LONG(Nj); /* same as Ny */ + COPY_SPEC_LONG(Ni); // same as Nx + COPY_SPEC_LONG(Nj); // same as Ny COPY_SPEC_LONG(iScansNegatively); COPY_SPEC_LONG(jScansPositively); @@ -1157,15 +1158,15 @@ grib_handle* grib_util_set_spec(grib_handle* h, case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED: COPY_SPEC_LONG(bitmapPresent); if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); - /* TODO(masn): Other keys */ + // TODO(masn): Other keys break; case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL: COPY_SPEC_LONG(bitmapPresent); if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); - COPY_SPEC_LONG(Ni); /* same as Nx */ - COPY_SPEC_LONG(Nj); /* same as Ny */ + COPY_SPEC_LONG(Ni); // same as Nx + COPY_SPEC_LONG(Nj); // same as Ny COPY_SPEC_LONG(iScansNegatively); COPY_SPEC_LONG(jScansPositively); @@ -1236,7 +1237,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, break; } - /* Set rotation */ + // Set rotation switch (spec->grid_type) { case GRIB_UTIL_GRID_SPEC_ROTATED_LL: case GRIB_UTIL_GRID_SPEC_ROTATED_GG: @@ -1248,7 +1249,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, break; } - /* process packing options */ + // process packing options if (!packingTypeIsSet && packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && strcmp(input_packing_type, "grid_simple_matrix")) { @@ -1268,7 +1269,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX: if (!STR_EQUAL(input_packing_type, "grid_complex")) { SET_STRING_VALUE("packingType", "grid_complex"); - convertEditionEarlier=1; + convertEditionEarlier = true; } break; case GRIB_UTIL_PACKING_TYPE_JPEG: @@ -1300,14 +1301,13 @@ grib_handle* grib_util_set_spec(grib_handle* h, fprintf(stderr, "%s: invalid packing_spec.packing_type (%ld)\n", __func__, packing_spec->packing_type); *err = GRIB_INTERNAL_ERROR; goto cleanup; - break; } } if (strcmp(input_packing_type, "grid_simple_matrix") == 0) { long numberOfDirections, numberOfFrequencies; int keep_matrix = h->context->keep_matrix; if (packing_spec->packing_type == GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE) { - keep_matrix = 0; /* ECC-911 */ + keep_matrix = 0; // ECC-911 } if (keep_matrix) { SET_STRING_VALUE("packingType", "grid_simple_matrix"); @@ -1362,7 +1362,6 @@ grib_handle* grib_util_set_spec(grib_handle* h, grib_handle_delete(h_sample); *err = GRIB_INTERNAL_ERROR; goto cleanup; - break; } if (packing_spec->extra_settings_count) { @@ -1381,14 +1380,14 @@ grib_handle* grib_util_set_spec(grib_handle* h, packing_spec->extra_settings[i].long_value == 1) { /* GRIB-922: Request is for a global grid. Setting this key will * calculate the lat/lon values. So the spec's lat/lon can be ignored */ - global_grid = 1; + global_grid = true; } } } } - /* grib_write_message(h,"input.grib","w"); */ - /* grib_write_message(h_sample,"geo.grib","w"); */ - /* copy product and local sections from h to h_sample handle and store in h_out */ + // grib_write_message(h,"input.grib","w"); + // grib_write_message(h_sample,"geo.grib","w"); + // copy product and local sections from h to h_sample handle and store in h_out if ((h_out = grib_util_sections_copy(h, h_sample, GRIB_SECTION_PRODUCT | GRIB_SECTION_LOCAL, err)) == NULL) { goto cleanup; } @@ -1396,7 +1395,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, grib_handle_delete(h_sample); Assert(*err == 0); - /* GRIB-857: Set "pl" array if provided (For reduced Gaussian grids) */ + // GRIB-857: Set "pl" array if provided (For reduced Gaussian grids) Assert(spec->pl_size >= 0); if (spec->pl && spec->pl_size == 0) { fprintf(stderr, "%s: pl array not NULL but pl_size == 0!\n", __func__); @@ -1431,7 +1430,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, print_values(h->context, spec, packing_spec, input_packing_type, data_values, data_values_count, values, count); } - /* Apply adjustments to bounding box if needed */ + // Apply adjustments to bounding box if needed if (expandBoundingBox) { if ((*err = expand_bounding_box(h_out, values, count)) != 0) { fprintf(stderr, "%s: Cannot expand bounding box: %s\n", __func__, grib_get_error_message(*err)); @@ -1442,6 +1441,14 @@ grib_handle* grib_util_set_spec(grib_handle* h, } if (convertEditionEarlier && packing_spec->editionNumber > 1) { + // Note: + // If the input is GRIB1 and the requested grid type is HealPix or ORCA etc, + // we deliberately fail unless the user specifies edition conversion. + // i.e., we do not automatically convert edition + // If we later change our mind, we need to change editionNumber to 2 here: + // long new_edition = packing_spec->editionNumber; + // if (new_edition == 0) new_edition = 2; + // *err = grib_set_long(h_out, "edition", packing_spec->editionNumber); if (*err) { fprintf(stderr, "%s: Cannot convert to edition %ld.\n", __func__, packing_spec->editionNumber); @@ -1474,8 +1481,8 @@ grib_handle* grib_util_set_spec(grib_handle* h, } */ if (grib1_high_resolution_fix) { - /* GRIB-863: must set increments to MISSING */ - /* increments are not coded in message but computed */ + // GRIB-863: must set increments to MISSING + // increments are not coded in message but computed if ((*err = grib_set_missing(h_out, "iDirectionIncrement")) != 0) { fprintf(stderr, "%s: Cannot set Di to missing: %s\n", __func__, grib_get_error_message(*err)); goto cleanup; @@ -1486,13 +1493,12 @@ grib_handle* grib_util_set_spec(grib_handle* h, } } - /*grib_dump_content(h_out, stdout,"debug", ~0, NULL);*/ - /* convert to second_order if not constant field. (Also see ECC-326) */ + //grib_dump_content(h_out, stdout,"debug", ~0, NULL); + // convert to second_order if not constant field. (Also see ECC-326) if (setSecondOrder) { - int constant = 0; double missingValue = 0; grib_get_double(h_out, "missingValue", &missingValue); - constant = is_constant_field(missingValue, data_values, data_values_count); + bool constant = is_constant_field(missingValue, data_values, data_values_count); if (!constant) { if (editionNumber == 1) { @@ -1502,7 +1508,7 @@ grib_handle* grib_util_set_spec(grib_handle* h, slen = 17; grib_set_string(htmp, "packingType", "grid_second_order", &slen); grib_get_long(htmp, "numberOfGroups", &numberOfGroups); - /* GRIBEX is not able to decode overflown numberOfGroups with SPD */ + // GRIBEX is not able to decode overflown numberOfGroups with SPD if (numberOfGroups > 65534 && h_out->context->no_spd) { slen = 24; grib_set_string(h_out, "packingType", "grid_second_order_no_SPD", &slen); @@ -1543,8 +1549,8 @@ grib_handle* grib_util_set_spec(grib_handle* h, } } - if (editionNumber > 1 || packing_spec->editionNumber > 1) { /* ECC-353 */ - /* Some packing types are not available in GRIB1 and have to be done AFTER we set data values */ + if (editionNumber > 1 || packing_spec->editionNumber > 1) { // ECC-353 + // Some packing types are not available in GRIB1 and have to be done AFTER we set data values if (setJpegPacking == 1) { *err = grib_set_string(h_out, "packingType", "grid_jpeg", &slen); if (*err != GRIB_SUCCESS) { @@ -1567,9 +1573,9 @@ grib_handle* grib_util_set_spec(grib_handle* h, grib_set_long(h_out, "deleteLocalDefinition", 1); } - /* ECC-445 */ + // ECC-445 if (expandBoundingBox) { - Assert(!global_grid); /* ECC-576: "global" should not be set */ + Assert(!global_grid); // ECC-576: "global" should not be set } if ((*err = check_geometry(h_out, spec, data_values_count, global_grid)) != GRIB_SUCCESS) { @@ -1629,9 +1635,7 @@ cleanup: // } // } // grib_iterator_delete(iter); - // ret = grib_get_double(h, "missingValue", &missingValue); - // centroidX = 0; // centroidY = 0; // mass = 0; @@ -1647,10 +1651,8 @@ cleanup: // centroidX /= mass; // centroidY /= mass; // mass /= *count; - // for (j = 0; j < order * order; j++) // moments[j] = 0; - // for (i = 0; i < numberOfPoints; i++) { // if (values[i] != missingValue) { // dx = (lon[i] - centroidX); @@ -1690,7 +1692,7 @@ static void set_value(grib_values* value, char* str, int equal) { char *p = 0, *q = 0, *s = 0; char buf[1000] = {0,}; - grib_context* c = grib_context_get_default(); + const grib_context* c = grib_context_get_default(); value->equal = equal; q = str; @@ -1721,6 +1723,7 @@ static void set_value(grib_values* value, char* str, int equal) } break; case GRIB_TYPE_LONG: + errno = 0; // must clear errno before calling strtol value->long_value = strtol(buf, &p, 10); if (*p != 0) value->has_value = 1; @@ -1744,8 +1747,15 @@ static void set_value(grib_values* value, char* str, int equal) } break; case GRIB_TYPE_UNDEFINED: + errno = 0; // must clear errno before calling strtol value->long_value = strtol(buf, &p, 10); if (*p == 0) { + // check the conversion from string to long + if (errno == ERANGE && (value->long_value == LONG_MAX || value->long_value == LONG_MIN)) { + fprintf(stderr, "ECCODES WARNING : Setting %s=%s causes overflow/underflow\n", value->name, buf); + fprintf(stderr, "ECCODES WARNING : Value adjusted to %ld\n", value->long_value); + //perror("strtol"); + } value->type = GRIB_TYPE_LONG; value->has_value = 1; } @@ -1811,7 +1821,7 @@ int parse_keyval_string(const char* grib_tool, int equal = 1; char* value = NULL; if (values_required) { - /* Can be either k=v or k!=v */ + // Can be either k=v or k!=v p = (char*)values[i].name; while (*p != '=' && *p != '!' && *p != '\0') p++; @@ -2043,7 +2053,7 @@ size_t sum_of_pl_array(const long* pl, size_t plsize) return count; } -int grib_is_earth_oblate(grib_handle* h) +int grib_is_earth_oblate(const grib_handle* h) { long oblate = 0; int err = grib_get_long(h, "earthIsOblate", &oblate); @@ -2055,8 +2065,8 @@ int grib_is_earth_oblate(grib_handle* h) int grib_check_data_values_minmax(grib_handle* h, const double min_val, const double max_val) { - int result = GRIB_SUCCESS; - grib_context* ctx = h->context; + int result = GRIB_SUCCESS; + const grib_context* ctx = h->context; if (!(min_val < DBL_MAX && min_val > -DBL_MAX)) { grib_context_log(ctx, GRIB_LOG_ERROR, "Minimum value out of range: %g", min_val); @@ -2076,10 +2086,10 @@ int grib_check_data_values_minmax(grib_handle* h, const double min_val, const do } // Return true(1) if large constant fields are to be created, otherwise false(0) -int grib_producing_large_constant_fields(grib_handle* h, int edition) +int grib_producing_large_constant_fields(const grib_handle* h, int edition) { // First check if the transient key is set - grib_context* c = h->context; + const grib_context* c = h->context; long produceLargeConstantFields = 0; if (grib_get_long(h, "produceLargeConstantFields", &produceLargeConstantFields) == GRIB_SUCCESS && produceLargeConstantFields != 0) { @@ -2094,16 +2104,38 @@ int grib_producing_large_constant_fields(grib_handle* h, int edition) return c->large_constant_fields; } +static std::string grib_data_quality_check_extra_info(const grib_handle* h) +{ + char step[32] = "unknown"; + char marsClass[32] = {0,}; + char marsStream[32] = {0,}; + char marsType[32] = {0,}; + std::string result; + std::stringstream ss; + size_t len = 32; + int err1 = grib_get_string(h, "step", step, &len); + len = 32; + int err2 = grib_get_string(h, "class", marsClass, &len); + len = 32; + int err3 = grib_get_string(h, "stream", marsStream, &len); + len = 32; + int err4 = grib_get_string(h, "type", marsType, &len); + if (!err1 && !err2 && !err3 && !err4) { + ss << "step=" << step << ", class=" << marsClass << ", stream=" << marsStream << ", type=" << marsType; + result = ss.str(); + } + + return result; +} int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max_val) { - int err = 0; + int err = 0; double min_field_value_allowed = 0, max_field_value_allowed = 0; long paramId = 0; - grib_context* ctx = h->context; + const grib_context* ctx = h->context; bool is_error = true; char description[1024] = {0,}; - char step[32] = "unknown"; char shortName[64] = {0,}; char name[526] = {0,}; size_t len = 0; @@ -2119,8 +2151,9 @@ int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max len = sizeof(shortName); err = grib_get_string(h, "shortName", shortName, &len); if (err || STR_EQUAL(shortName, invalid_shortName)) { - fprintf(stderr, "ECCODES %s : Invalid metadata: shortName='%s'\n", - (is_error ? "ERROR" : "WARNING"), invalid_shortName); + std::string info( grib_data_quality_check_extra_info(h) ); + fprintf(stderr, "ECCODES %s : (%s) Invalid metadata: shortName='%s'\n", + (is_error ? "ERROR" : "WARNING"), info.c_str(), invalid_shortName); if (is_error) return GRIB_INVALID_MESSAGE; } @@ -2148,21 +2181,20 @@ int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max if (get_concept_condition_string(h, "param_value_max", NULL, description) == GRIB_SUCCESS) { printf("ECCODES DEBUG grib_data_quality_check: Checking condition '%s' (allowed=%g, %g) (actual=%g, %g)\n", description, min_field_value_allowed, max_field_value_allowed, - min_val, max_val - ); + min_val, max_val); } } if (min_val < min_field_value_allowed) { - grib_get_string(h, "step", step, &len); + std::string info( grib_data_quality_check_extra_info(h) ); if (get_concept_condition_string(h, "param_value_min", NULL, description) == GRIB_SUCCESS) { - fprintf(stderr, "ECCODES %s : (%s, step=%s): minimum (%g) is less than the allowable limit (%g)\n", - (is_error ? "ERROR" : "WARNING"), description, step, min_val, min_field_value_allowed); + fprintf(stderr, "ECCODES %s : (%s, %s): minimum (%g) is less than the allowable limit (%g)\n", + (is_error ? "ERROR" : "WARNING"), description, info.c_str(), min_val, min_field_value_allowed); } else { if (grib_get_long(h, "paramId", ¶mId) == GRIB_SUCCESS) { - fprintf(stderr, "ECCODES %s : (paramId=%ld, step=%s): minimum (%g) is less than the default allowable limit (%g)\n", - (is_error ? "ERROR" : "WARNING"), paramId, step, min_val, min_field_value_allowed); + fprintf(stderr, "ECCODES %s : (paramId=%ld, %s): minimum (%g) is less than the default allowable limit (%g)\n", + (is_error ? "ERROR" : "WARNING"), paramId, info.c_str(), min_val, min_field_value_allowed); } } if (is_error) { @@ -2170,15 +2202,15 @@ int grib_util_grib_data_quality_check(grib_handle* h, double min_val, double max } } if (max_val > max_field_value_allowed) { - grib_get_string(h, "step", step, &len); + std::string info( grib_data_quality_check_extra_info(h) ); if (get_concept_condition_string(h, "param_value_max", NULL, description) == GRIB_SUCCESS) { - fprintf(stderr, "ECCODES %s : (%s, step=%s): maximum (%g) is more than the allowable limit (%g)\n", - (is_error ? "ERROR" : "WARNING"), description, step, max_val, max_field_value_allowed); + fprintf(stderr, "ECCODES %s : (%s, %s): maximum (%g) is more than the allowable limit (%g)\n", + (is_error ? "ERROR" : "WARNING"), description, info.c_str(), max_val, max_field_value_allowed); } else { if (grib_get_long(h, "paramId", ¶mId) == GRIB_SUCCESS) { - fprintf(stderr, "ECCODES %s : (paramId=%ld, step=%s): maximum (%g) is more than the default allowable limit (%g)\n", - (is_error ? "ERROR" : "WARNING"), paramId, step, max_val, max_field_value_allowed); + fprintf(stderr, "ECCODES %s : (paramId=%ld, %s): maximum (%g) is more than the default allowable limit (%g)\n", + (is_error ? "ERROR" : "WARNING"), paramId, info.c_str(), max_val, max_field_value_allowed); } } if (is_error) { diff --git a/src/grib_value.cc b/src/grib_value.cc index dba9852fa..1320bc9b7 100644 --- a/src/grib_value.cc +++ b/src/grib_value.cc @@ -701,7 +701,7 @@ static int _grib_set_double_array_internal(grib_handle* h, grib_accessor* a, *encoded_length += len; if (err == GRIB_SUCCESS) { /* See ECC-778 */ - return ecc__grib_dependency_notify_change(h, a); + return grib_dependency_notify_change_h(h, a); } } else { @@ -739,7 +739,7 @@ static int _grib_set_double_array(grib_handle* h, const char* name, err = GRIB_ARRAY_TOO_SMALL; if (err == GRIB_SUCCESS) - return ecc__grib_dependency_notify_change(h, a); /* See ECC-778 */ + return grib_dependency_notify_change_h(h, a); /* See ECC-778 */ return err; } @@ -1144,7 +1144,7 @@ int grib_get_double_elements(const grib_handle* h, const char* name, const int* if (!act) return GRIB_NOT_FOUND; - err = ecc__grib_get_size(h, act, &size); + err = grib_get_size_acc(h, act, &size); if (err != GRIB_SUCCESS) { grib_context_log(h->context, GRIB_LOG_ERROR, "%s: Cannot get size of %s", __func__, name); @@ -1358,7 +1358,7 @@ int grib_get_array(const grib_handle* h, const char* name, double* val, return grib_get_double_array(h, name, val, length); } -int ecc__grib_get_string_length(grib_accessor* a, size_t* size) +int grib_get_string_length_acc(grib_accessor* a, size_t* size) { size_t s = 0; @@ -1384,7 +1384,7 @@ int grib_get_string_length(const grib_handle* h, const char* name, size_t* size) al = grib_find_accessors_list(h, name); if (!al) return GRIB_NOT_FOUND; - ret = ecc__grib_get_string_length(al->accessor, size); + ret = grib_get_string_length_acc(al->accessor, size); grib_context_free(h->context, al); return ret; } @@ -1392,11 +1392,11 @@ int grib_get_string_length(const grib_handle* h, const char* name, size_t* size) a = grib_find_accessor(h, name); if (!a) return GRIB_NOT_FOUND; - return ecc__grib_get_string_length(a, size); + return grib_get_string_length_acc(a, size); } } -int ecc__grib_get_size(const grib_handle* h, grib_accessor* a, size_t* size) +int grib_get_size_acc(const grib_handle* h, grib_accessor* a, size_t* size) { long count = 0; int err = 0; @@ -1444,7 +1444,7 @@ int grib_get_size(const grib_handle* ch, const char* name, size_t* size) return ret; } else - return ecc__grib_get_size(h, a, size); + return grib_get_size_acc(h, a, size); } } @@ -1477,10 +1477,10 @@ int grib_get_offset(const grib_handle* ch, const char* key, size_t* val) return GRIB_NOT_FOUND; } -int ecc__grib_get_string_array_internal(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length) +static int grib_get_string_array_internal_(const grib_handle* h, grib_accessor* a, char** val, size_t buffer_len, size_t* decoded_length) { if (a) { - int err = ecc__grib_get_string_array_internal(h, a->same, val, buffer_len, decoded_length); + int err = grib_get_string_array_internal_(h, a->same, val, buffer_len, decoded_length); if (err == GRIB_SUCCESS) { size_t len = buffer_len - *decoded_length; @@ -1519,7 +1519,7 @@ int grib_get_string_array(const grib_handle* h, const char* name, char** val, si } else { *length = 0; - return ecc__grib_get_string_array_internal(h, a, val, len, length); + return grib_get_string_array_internal_(h, a, val, len, length); } } } diff --git a/src/make_accessor_class_hash.sh b/src/make_accessor_class_hash.sh index 8a3f26f79..72955ae4a 100755 --- a/src/make_accessor_class_hash.sh +++ b/src/make_accessor_class_hash.sh @@ -6,7 +6,7 @@ cat > accessor_class_list.gperf < $fLog 2>&1 status=$? diff --git a/tests/bufr_ecc-1028.sh b/tests/bufr_ecc-1028.sh index a68b1c43c..36016648a 100755 --- a/tests/bufr_ecc-1028.sh +++ b/tests/bufr_ecc-1028.sh @@ -11,15 +11,15 @@ . ./include.ctest.sh set -u label="bufr_ecc-1028_test" -tempFilter=temp.$label.filt +tempFilt=temp.$label.filt tempError=temp.$label.err sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR4.tmpl # Incorrect replication. Encoding should fail -echo "set unexpandedDescriptors={ 101000, 31002 }; write;" > $tempFilter +echo "set unexpandedDescriptors={ 101000, 31002 }; write;" > $tempFilt set +e -${tools_dir}/bufr_filter $tempFilter $sample_bufr4 2>$tempError +${tools_dir}/bufr_filter $tempFilt $sample_bufr4 2>$tempError status=$? set -e [ $status -ne 0 ] @@ -27,4 +27,4 @@ set -e grep -q "Delayed replication: 101000: expected 1 but only found 0 elements" $tempError -rm -f $tempFilter $tempError +rm -f $tempFilt $tempError diff --git a/tests/bufr_ecc-1785.sh b/tests/bufr_ecc-1785.sh new file mode 100755 index 000000000..1a4ae4a2c --- /dev/null +++ b/tests/bufr_ecc-1785.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +# --------------------------------------------------------- +# This is the test for the JIRA issue ECC-1785 +# BUFR: Allow encoding satelliteID when rdbType=30 +# --------------------------------------------------------- + +label="bufr_ecc-1785_test" + +tempBufr=temp.$label.bufr +tempFilt=temp.$label.filt +tempLog=temp.$label.log + +sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR3_local_satellite.tmpl + +echo 'set numberOfSubsets=1; set rdbType=30; set satelliteID=78; write;' > $tempFilt + +${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 + +result=$(${tools_dir}/bufr_get -p isSatelliteType,isSatellite,satelliteID $tempBufr) +[ "$result" = "1 1 78" ] + +# Clean up +rm -f $tempBufr $tempFilt $tempLog diff --git a/tests/bufr_ecc-517.cc b/tests/bufr_ecc-517.cc index e4dc5d563..2ad8d7ab4 100644 --- a/tests/bufr_ecc-517.cc +++ b/tests/bufr_ecc-517.cc @@ -20,10 +20,9 @@ int main(int argc, char** argv) codes_handle* h = NULL; long* ivalues = NULL; const char* sampleName = "BUFR3_local"; - char* outfilename = NULL; assert(argc == 2); - outfilename = argv[1]; + char* outfilename = argv[1]; // Test non-existent sample file. Should fail h = codes_bufr_handle_new_from_samples(NULL, "some rubbish"); @@ -33,10 +32,8 @@ int main(int argc, char** argv) assert(h); ivalues = (long*)malloc(1 * sizeof(long)); - if (!ivalues) { - fprintf(stderr, "Failed to allocate memory (ivalues).\n"); - return 1; - } + assert(ivalues); + size = 1; ivalues[0] = 1; CODES_CHECK(codes_set_long_array(h, "inputDelayedDescriptorReplicationFactor", ivalues, size), 0); @@ -89,10 +86,8 @@ int main(int argc, char** argv) free(ivalues); ivalues = (long*)malloc(9 * sizeof(long)); - if (!ivalues) { - fprintf(stderr, "Failed to allocate memory (ivalues).\n"); - return 1; - } + assert(ivalues); + size = 4; ivalues[0] = 309052; ivalues[1] = 5001; @@ -104,11 +99,8 @@ int main(int argc, char** argv) CODES_CHECK(codes_set_long(h, "pack", 1), 0); fout = fopen(outfilename, "wb"); - if (!fout) { - fprintf(stderr, "Failed to open (create) output file.\n"); - free(ivalues); - return 1; - } + assert(fout); + CODES_CHECK(codes_get_message(h, &buffer, &size), 0); CODES_CHECK(codes_check_message_header(buffer, size, PRODUCT_BUFR), 0); CODES_CHECK(codes_check_message_footer(buffer, size, PRODUCT_BUFR), 0); @@ -120,8 +112,17 @@ int main(int argc, char** argv) } fclose(fout); + + // expandedOriginalCodes + long orig[100]; + size = 100; + CODES_CHECK(codes_get_long_array(h, "expandedOriginalCodes", orig, &size), 0); + printf("Size of expandedOriginalCodes = %zu\n", size); + codes_handle_delete(h); free(ivalues); + codes_context_delete(0); + return 0; } diff --git a/tests/bufr_threads_ecc-604.cc b/tests/bufr_encode_pthreads.cc similarity index 100% rename from tests/bufr_threads_ecc-604.cc rename to tests/bufr_encode_pthreads.cc diff --git a/tests/bufr_threads_ecc-604.sh b/tests/bufr_encode_pthreads.sh similarity index 95% rename from tests/bufr_threads_ecc-604.sh rename to tests/bufr_encode_pthreads.sh index 7b7a886a9..b6262e76d 100755 --- a/tests/bufr_threads_ecc-604.sh +++ b/tests/bufr_encode_pthreads.sh @@ -10,13 +10,13 @@ . ./include.ctest.sh -label="bufr_threads_ecc-604" +label="bufr_encode_pthreads_test" temp_dir=tempdir.${label} NUM_THREADS=3 NUM_ITER=5 OUTPUT=output -PROG="${test_dir}/bufr_threads_ecc-604" +PROG="${test_dir}/bufr_encode_pthreads" validate() { diff --git a/tests/bufr_extract_headers.cc b/tests/bufr_extract_headers.cc index a963a32f0..aacc7f1bc 100644 --- a/tests/bufr_extract_headers.cc +++ b/tests/bufr_extract_headers.cc @@ -13,31 +13,6 @@ #include #define MAX_KEYS 100 -#if 0 -int main(int argc, char* argv[]) -{ - char *filename; - int err = 0; - int num_messages = 0, i =0; - off_t* offsets = NULL; - codes_context* c = codes_context_get_default(); - const int strict_mode = 1; - - /* Usage: prog file */ - assert(argc == 2); - - filename = argv[1]; - err = codes_extract_offsets_malloc(c, filename, PRODUCT_GRIB, &offsets, &num_messages, strict_mode); - assert(!err); - - for (i = 0; i < num_messages; ++i) { - printf("Message #%d: %lu\n", i, offsets[i]); - } - free(offsets); - return 0; -} -#endif -#if 1 int main(int argc, char* argv[]) { char *filename, *keys; @@ -85,4 +60,3 @@ int main(int argc, char* argv[]) return 0; } -#endif diff --git a/tests/bufr_extract_headers.sh b/tests/bufr_extract_headers.sh index 6b6f0a907..481a5cd2f 100755 --- a/tests/bufr_extract_headers.sh +++ b/tests/bufr_extract_headers.sh @@ -14,6 +14,8 @@ label="bufr_extract_headers_test" temp1="temp.${label}.1" temp2="temp.${label}.2" +tempBufr=temp.$label.bufr +tempFilt=temp.$label.filt # Multi-message BUFR # -------------------- @@ -115,26 +117,16 @@ amsu_55.bufr amv2_87.bufr asbh_139.bufr asbl_139.bufr -asca_139.bufr -asch_139.bufr -ascs_139.bufr -aseh_139.bufr asel_139.bufr ashs_139.bufr atap_55.bufr ateu_155.bufr atms_201.bufr atov_55.bufr -avhm_87.bufr -avhn_87.bufr -avhr_58.bufr b003_56.bufr b005_89.bufr -cmwi_87.bufr cmwn_87.bufr cori_156.bufr -crit_202.bufr -csrh_189.bufr emsg_189.bufr euwv_87.bufr fy3a_154.bufr @@ -150,20 +142,14 @@ hirb_55.bufr hirs_55.bufr ias1_240.bufr iasi_241.bufr -ifco_208.bufr ikco_217.bufr imssnow.bufr itrg_208.bufr itwt_233.bufr -j2eo_216.bufr j2nb_216.bufr jaso_214.bufr kond_209.bufr maer_207.bufr -mloz_206.bufr -modi_87.bufr -modw_87.bufr -monw_87.bufr nomi_206.bufr nos1_208.bufr pgps_110.bufr @@ -172,8 +158,6 @@ s4kn_165.bufr sb19_206.bufr sbu8_206.bufr smin_49.bufr -smiu_49.bufr -smos_203.bufr sn4k_165.bufr ssbt_127.bufr tmr7_129.bufr @@ -208,6 +192,14 @@ ${tools_dir}/bufr_set -s restricted=1 $input $temp1 r=`$EXEC ${test_dir}/bufr_extract_headers restricted $temp1` [ "$r" = "1" ] +# ECC-1785 Allow encoding satelliteID when rdbType=30 +# ---------------------------------------------------- +sample_bufr4=$ECCODES_SAMPLES_PATH/BUFR3_local_satellite.tmpl +echo 'set numberOfSubsets=1; set rdbType=30; set satelliteID=78; write;' > $tempFilt +${tools_dir}/codes_bufr_filter -o $tempBufr $tempFilt $sample_bufr4 +r=$(${test_dir}/bufr_extract_headers isSatellite,satelliteID $tempBufr) +[ "$r" = "1 78" ] + echo "Test with invalid inputs..." # --------------------------------- @@ -217,4 +209,39 @@ status=$? set -e [ $status -ne 0 ] + +echo "Test with nonexistent file..." +# --------------------------------- +set +e +$EXEC ${test_dir}/bufr_extract_headers centre nosuchfile > $temp1 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Unable to read file" $temp1 + + +echo "Test with bad BUFR file..." +# --------------------------------- +echo BUFR > $temp1 +set +e +$EXEC ${test_dir}/bufr_extract_headers centre $temp1 > $temp2 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Unable to count BUFR messages" $temp2 + + +echo "Test with GRIB file..." +# --------------------------------- +input=${data_dir}/sample.grib2 +set +e +$EXEC ${test_dir}/bufr_extract_headers centre $input > $temp2 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "No BUFR messages in file" $temp2 + + +# Clean up rm -f $temp1 $temp2 +rm -f $tempBufr $tempFilt diff --git a/tests/bufr_filter_misc.sh b/tests/bufr_filter_misc.sh index f1edf0368..f2021a3f5 100755 --- a/tests/bufr_filter_misc.sh +++ b/tests/bufr_filter_misc.sh @@ -1290,6 +1290,15 @@ cat > $fRules < $fLog +# smart table unpack_string +tempBufr=temp.$label.bufr +f="$ECCODES_SAMPLES_PATH/BUFR4.tmpl" +cat > $fRules < $fLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Input file seems to be GRIB" $fLog + +f=$ECCODES_SAMPLES_PATH/budg.tmpl +set +e +${tools_dir}/bufr_get -p edition $f > $fLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Input file seems to be GRIB" $fLog + # ---------------------------------------- # Unreadable message diff --git a/tests/bufr_indexing.sh b/tests/bufr_indexing.sh index 297f71bba..cc1c4cb39 100755 --- a/tests/bufr_indexing.sh +++ b/tests/bufr_indexing.sh @@ -45,6 +45,15 @@ ${tools_dir}/bufr_index_build -k mars.ident -o $tempIndex $infile |\ # ------------------ # Error conditions # ------------------ +infile=${data_dir}/bufr/vos308014_v3_26.bufr +set +e +${tools_dir}/bufr_index_build -o $tempIndex $infile > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Unable to unpack BUFR to create index" $tempOut + + echo BUFR > $tempBufr set +e ${tools_dir}/bufr_index_build $tempBufr > $tempOut 2>&1 diff --git a/tests/bufr_keys_iter.cc b/tests/bufr_keys_iter.cc index f2ab295b7..9938fcdd5 100644 --- a/tests/bufr_keys_iter.cc +++ b/tests/bufr_keys_iter.cc @@ -12,12 +12,6 @@ #undef NDEBUG #include -static void usage(const char* prog) -{ - printf("usage: %s [-a|-d] infile\n", prog); - exit(1); -} - #define ITER_ALL_KEYS 1 #define ITER_DATA_KEYS 2 @@ -28,12 +22,11 @@ int main(int argc, char* argv[]) codes_handle* h = NULL; codes_bufr_keys_iterator* kiter = NULL; char* input_filename = NULL; - const char* prog = argv[0]; FILE* f = NULL; int iterator_mode = ITER_ALL_KEYS; if (argc == 1 || argc > 3) - usage(prog); + return 1; // usage: prog [-a|-d] infile for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-a") == 0) { diff --git a/tests/codes_compare_keys.cc b/tests/codes_compare_keys.cc index 116998de7..2b930ea11 100644 --- a/tests/codes_compare_keys.cc +++ b/tests/codes_compare_keys.cc @@ -54,6 +54,8 @@ int main(int argc, char* argv[]) codes_compare_key(h1, h2, "computeStatistics", 0); // statistics codes_compare_key(h1, h2, "paramId", 0); // concept codes_compare_key(h1, h2, "identifier", 0); // ascii + err = codes_compare_key(h1, h2, "abcdefghij", 0); // no such key + Assert(err == GRIB_NOT_FOUND); if (list_provided_keys) { for (i = 0; list_provided_keys[i] != NULL; ++i) { diff --git a/tests/codes_compare_keys.sh b/tests/codes_compare_keys.sh index 9a2a39aef..b07e6edc0 100755 --- a/tests/codes_compare_keys.sh +++ b/tests/codes_compare_keys.sh @@ -37,6 +37,7 @@ key: hoursAfterDataCutoff (Long values are different) key: minutesAfterDataCutoff (Long values are different) key: numberOfValues (Long values are different) key: referenceValue (Double values are different) +ECCODES ERROR : Key abcdefghij not found in first message Comparison failed: 13 differences EOF @@ -57,6 +58,7 @@ cat $tempLog cat > $tempRef < 1); codes_handle_delete(h); fclose(in); diff --git a/tests/codes_get_string.sh b/tests/codes_get_string.sh index 011224253..188c81a3e 100755 --- a/tests/codes_get_string.sh +++ b/tests/codes_get_string.sh @@ -15,29 +15,33 @@ tempGrib=temp.$label.grib tempText=temp.$label.txt input=$ECCODES_SAMPLES_PATH/GRIB1.tmpl -$EXEC ${test_dir}/codes_get_string $input dataDate +$EXEC ${test_dir}/codes_get_string GRIB $input dataDate ${tools_dir}/grib_set -s marsType=s3,marsStream=mpic $input $tempGrib -$EXEC ${test_dir}/codes_get_string $tempGrib dayOfTheYearDate # 2> $tempText +$EXEC ${test_dir}/codes_get_string GRIB $tempGrib dayOfTheYearDate # 2> $tempText input=$data_dir/reduced_latlon_surface.grib2 -keys="identifier projString bitmap class year gridDefinitionDescription +keys="hundred identifier projString bitmap class year gridDefinitionDescription time validityTime packingType md5Headers parameterUnits" for k in $keys; do - $EXEC ${test_dir}/codes_get_string $input $k 2> $tempText + $EXEC ${test_dir}/codes_get_string GRIB $input $k 2> $tempText grep -q "Buffer too small" $tempText done input=$ECCODES_SAMPLES_PATH/reduced_gg_ml_grib2.tmpl -$EXEC ${test_dir}/codes_get_string "$input" gridName 2> $tempText +$EXEC ${test_dir}/codes_get_string GRIB "$input" gridName 2> $tempText grep -q "Buffer too small" $tempText # shortName = swh input=$data_dir/reduced_latlon_surface.grib1 -$EXEC ${test_dir}/codes_get_string "$input" shortName 2> $tempText +$EXEC ${test_dir}/codes_get_string GRIB "$input" shortName 2> $tempText grep -q "Buffer too small" $tempText +input=$data_dir/gts/EGRR20150317121020_00493212.DAT +$EXEC ${test_dir}/codes_get_string GTS "$input" theMessage 2> $tempText +grep -q "Buffer too small" $tempText +# Clean up rm -f $tempText diff --git a/tests/gauss_sub.cc b/tests/gauss_sub.cc index b1114e964..b743b5d3c 100644 --- a/tests/gauss_sub.cc +++ b/tests/gauss_sub.cc @@ -10,12 +10,6 @@ #include "grib_api.h" -static void usage(char* prog) -{ - printf("usage: %s file1.grib file2.grib\n", prog); - exit(1); -} - int main(int argc, char* argv[]) { grib_handle *h1, *h2; @@ -34,7 +28,7 @@ int main(int argc, char* argv[]) c = grib_context_get_default(); - if (argc < 3) usage(argv[0]); + if (argc < 3) return 1;//usage: %s file1.grib file2.grib infile1 = argv[1]; infile2 = argv[2]; diff --git a/tests/grib2_templates.sh b/tests/grib2_templates.sh index 437eb36b1..64b43e4ad 100755 --- a/tests/grib2_templates.sh +++ b/tests/grib2_templates.sh @@ -180,6 +180,61 @@ test_PDTN_conversions 57 67 test_PDTN_conversions 58 68 test_PDTN_conversions 71 73 +# ECC-1779: Deprecated and experimental templates +# ------------------------------------------------ +grib_check_key_equals $sample2 isTemplateDeprecated,isTemplateExperimental '0 0' + +$tools_dir/grib_set -s productDefinitionTemplateNumber=44 $sample2 $temp +grib_check_key_equals $temp isTemplateDeprecated,isTemplateExperimental '1 0' + +$tools_dir/grib_set -s productDefinitionTemplateNumber=10 $sample2 $temp +grib_check_key_equals $temp isTemplateDeprecated,isTemplateExperimental '0 1' + +$tools_dir/grib_set -s gridType=cross_section $sample2 $temp +grib_check_key_equals $temp isTemplateDeprecated,isTemplateExperimental '0 1' +$tools_dir/grib_set -s gridType=time_section $sample2 $temp +grib_check_key_equals $temp isTemplateDeprecated,isTemplateExperimental '0 1' + +# Use of eps key (for local section) +# ----------------------------------- +input=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl +$tools_dir/grib_set -s stepType=accum,eps=1 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '11' + +#17 Ensemble mean +#18 Ensemble standard deviation +$tools_dir/grib_set -s type=17,stepType=accum,eps=1 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber,derivedForecast '12 0' + +$tools_dir/grib_set -s type=18,stepType=accum,eps=1 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber,derivedForecast '12 4' + +# Chemicals +$tools_dir/grib_set -s paramId=217019,stepType=instant,eps=0 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '40' + +$tools_dir/grib_set -s paramId=217019,stepType=instant,eps=1 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '41' + +$tools_dir/grib_set -s paramId=217019,stepType=accum,eps=0 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '42' + +$tools_dir/grib_set -s paramId=217019,stepType=accum,eps=1 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '43' + +# Aerosol 210072 +$tools_dir/grib_set -s paramId=210072,stepType=instant,eps=0 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '48' + +$tools_dir/grib_set -s paramId=210072,stepType=instant,eps=1 $input $temp +grib_check_key_equals $temp productDefinitionTemplateNumber '45' + +#$tools_dir/grib_set -s paramId=210072,stepType=accum,eps=0 $input $temp +#grib_check_key_equals $temp productDefinitionTemplateNumber '42' + +#$tools_dir/grib_set -s paramId=210072,stepType=accum,eps=1 $input $temp +#grib_check_key_equals $temp productDefinitionTemplateNumber '43' + # Clean up rm -f $temp $temp1 $temp2 $tempFilt $tempText diff --git a/tests/grib2_version.sh b/tests/grib2_version.sh index 1f7cbe8b5..6e6daef42 100755 --- a/tests/grib2_version.sh +++ b/tests/grib2_version.sh @@ -17,6 +17,8 @@ if [ ! -d "$ECCODES_DEFINITION_PATH" ]; then fi temp=temp.$label.grib2 +tempFilt=temp.$label.filt +tempText=temp.$label.txt sample1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl tables_dir="$ECCODES_DEFINITION_PATH/grib2/tables" @@ -34,7 +36,6 @@ fi cd $test_dir # Check table 1.0 # Check it has the latest with description matching "Version implemented on DD MM YYYY" -tempText=temp.$label.txt ${tools_dir}/grib_set -s tablesVersion=$latest $sample2 $temp ${tools_dir}/grib_dump -O -p tablesVersion $temp > $tempText grep -q "Version implemented on" $tempText @@ -50,4 +51,18 @@ if [ "$tablesVersion" != "$latestOfficial" ]; then exit 1 fi -rm -f $temp +# Library and definitions versions +cat >$tempFilt< $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +cat $tempText +grep -q "Definition files version .* is greater than engine version" $tempText + +rm -f $tempFilt $temp $tempText diff --git a/tests/grib2_wave_spectra.sh b/tests/grib2_wave_spectra.sh index f610a08bb..44b58add8 100755 --- a/tests/grib2_wave_spectra.sh +++ b/tests/grib2_wave_spectra.sh @@ -45,6 +45,12 @@ grib_check_key_equals $temp scaleFactorOfLowerWavePeriodLimit,scaledValueOfLower ${tools_dir}/grib_set -s tablesVersion=$latest,productDefinitionTemplateNumber=104 $sample2 $temp grib_check_key_equals $temp scaleFactorOfLowerWavePeriodLimit,scaledValueOfLowerWavePeriodLimit,perturbationNumber 'MISSING MISSING 0' +${tools_dir}/grib_set -s \ + tablesVersion=$latest,productDefinitionTemplateNumber=108,scaleFactorOfFirstWavelength=9,scaledValueOfFirstWavelength=12 \ +$sample2 $temp +grib_check_key_equals $temp firstWavelengthInNanometres '12' +grib_check_key_equals $temp firstWavelengthInMetres '1.2e-08' + # Clean up rm -f $tempSample $temp diff --git a/tests/grib_bpv_limit.cc b/tests/grib_bpv_limit.cc index b5a3af0f6..896e0cff7 100644 --- a/tests/grib_bpv_limit.cc +++ b/tests/grib_bpv_limit.cc @@ -25,12 +25,6 @@ static double compare_double_absolute(double a, double b, double tolerance) return ret; } -static void usage(const char* prog) -{ - fprintf(stderr, "usage: %s input\n", prog); - exit(1); -} - static int check_error_code(int err) { if (err == GRIB_INVALID_BPV || err == GRIB_DECODING_ERROR) @@ -40,28 +34,24 @@ static int check_error_code(int err) int main(int argc, char** argv) { - int err = 0, i; + int err = 0, i; size_t values_len = 0; - double* values = NULL; - char error_msg[100]; const double tolerance = 1e-5; - size_t slong = sizeof(long) * 8; - grib_handle* h; - char* filename; + size_t slong = sizeof(long) * 8; - if (argc < 2) usage(argv[0]); - filename = argv[1]; + Assert(argc == 2); + char* filename = argv[1]; for (i = 0; i < 255; i++) { FILE* in = fopen(filename, "rb"); Assert(in); - h = grib_handle_new_from_file(0, in, &err); + grib_handle* h = grib_handle_new_from_file(0, in, &err); Assert(h); /* get the size of the values array*/ GRIB_CHECK(grib_get_size(h, "values", &values_len), 0); - values = (double*)malloc(values_len * sizeof(double)); + double* values = (double*)malloc(values_len * sizeof(double)); err = grib_get_double_array(h, "values", values, &values_len); if (compare_double_absolute(values[0], 2.7900000000e+02, tolerance) != 0) @@ -88,9 +78,8 @@ int main(int argc, char** argv) /* do nothing */ } else { - snprintf(error_msg, sizeof(error_msg), "Error decoding when bpv=%d. Error message:%s", i, grib_get_error_message(err)); - perror(error_msg); - exit(1); + fprintf(stderr, "Error decoding when bpv=%d. Error message:%s\n", i, grib_get_error_message(err)); + return 1; } values = (double*)malloc(values_len * sizeof(double)); @@ -108,9 +97,8 @@ int main(int argc, char** argv) /* do nothing */ } else { - snprintf(error_msg, sizeof(error_msg), "Error decoding when bpv=%d. Error message:%s", i, grib_get_error_message(err)); - perror(error_msg); - exit(1); + fprintf(stderr, "Error decoding when bpv=%d. Error message:%s\n", i, grib_get_error_message(err)); + return 1; } free(values); diff --git a/tests/grib_ccsds.sh b/tests/grib_ccsds.sh index bb37f060c..13533ab90 100755 --- a/tests/grib_ccsds.sh +++ b/tests/grib_ccsds.sh @@ -22,6 +22,11 @@ logfile=temp.$label.log rm -f $outfile1 $outfile2 +# Debug info +ECCODES_DEBUG=-1 ${tools_dir}/grib_copy -r $infile $outfile1 > $logfile 2>&1 +grep -q "ECCODES DEBUG CCSDS .* aec_stream.flags" $logfile + + # Convert a non-constant grib2 file (Note: not using -r) grib2_sample=$ECCODES_SAMPLES_PATH/gg_sfc_grib2.tmpl ${tools_dir}/grib_set -s packingType=grid_ccsds $grib2_sample $outfile1 diff --git a/tests/grib_check_gaussian_grids.sh b/tests/grib_check_gaussian_grids.sh index 474eaf726..4f16966e4 100755 --- a/tests/grib_check_gaussian_grids.sh +++ b/tests/grib_check_gaussian_grids.sh @@ -28,6 +28,17 @@ for gg in ${samples_dir}/reduced_gg_*tmpl; do done +# Set wrong Nj. Should fail +input=$samples_dir/reduced_gg_pl_32_grib2.tmpl +${tools_dir}/grib_set -s Nj=1 $input $tempGrib +set +e +${tools_dir}/grib_check_gaussian_grid -v $tempGrib 2> $tempText +status=$? +set -e +[ $status -ne 0 ] +grep -q "Nj is 1 but should be 2\*N" $tempText + + # Set wrong N. Should fail input=$samples_dir/reduced_gg_pl_32_grib2.tmpl ${tools_dir}/grib_set -s N=0 $input $tempGrib @@ -38,6 +49,7 @@ set -e [ $status -eq 1 ] grep -q "Error: N should be > 0" $tempText + # Set wrong angle. Should fail input=$samples_dir/reduced_gg_pl_1280_grib2.tmpl ${tools_dir}/grib_set -s longitudeOfLastGridPoint=359929680 $input $tempGrib @@ -49,6 +61,17 @@ set -e grep -q "Error: longitudeOfLastGridPointInDegrees.*but should be" $tempText +# Set wrong lat2. Should fail +input=$samples_dir/reduced_gg_pl_1280_grib2.tmpl +${tools_dir}/grib_set -s latitudeOfLastGridPointInDegrees=9 $input $tempGrib +set +e +${tools_dir}/grib_check_gaussian_grid -v $tempGrib 2> $tempText +status=$? +set -e +[ $status -ne 0 ] +grep -q "First latitude must be = last latitude but opposite in sign" $tempText + + # Set wrong numberOfDataPoints. Should fail input=$samples_dir/reduced_gg_pl_96_grib2.tmpl ${tools_dir}/grib_set -s numberOfDataPoints=44 $input $tempGrib @@ -68,9 +91,17 @@ ${tools_dir}/grib_check_gaussian_grid -f -v $tempGrib 2> $tempText status=$? set -e [ $status -eq 1 ] -cat $tempText grep -q "Error: Sum of pl array 50662 does not match numberOfValues 44" $tempText +# Octahedral +# set +e +# ${tools_dir}/grib_check_gaussian_grid -v $data_dir/msl.octa.glob.grib1 > $tempText 2>&1 +# status=$? +# set -e +# [ $status -ne 0 ] +# grep -q "This is an Octahedral Gaussian grid" $tempText +# grep -q "Error: longitudeOfLastGridPointInDegrees.*should be" $tempText + # Other errors/warnings # ---------------------- diff --git a/tests/grib_check_param_concepts.sh b/tests/grib_check_param_concepts.sh index 24b2a3e5f..4810497c1 100755 --- a/tests/grib_check_param_concepts.sh +++ b/tests/grib_check_param_concepts.sh @@ -29,6 +29,7 @@ $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/gri $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/uerra/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/hydro/paramId.def +$EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/cerise/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/tigge/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/s2s/paramId.def $EXEC ${test_dir}/grib_check_param_concepts paramId $ECCODES_DEFINITION_PATH/grib2/localConcepts/era6/paramId.def @@ -39,6 +40,7 @@ $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/g $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/uerra/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/hydro/shortName.def +$EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/cerise/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/tigge/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/s2s/shortName.def $EXEC ${test_dir}/grib_check_param_concepts shortName $ECCODES_DEFINITION_PATH/grib2/localConcepts/era6/shortName.def @@ -75,8 +77,11 @@ defs_dirs=" $ECCODES_DEFINITION_PATH/grib2/localConcepts/uerra $ECCODES_DEFINITION_PATH/grib2/localConcepts/hydro + $ECCODES_DEFINITION_PATH/grib2/localConcepts/cerise $ECCODES_DEFINITION_PATH/grib2/localConcepts/tigge $ECCODES_DEFINITION_PATH/grib2/localConcepts/s2s + $ECCODES_DEFINITION_PATH/grib2/localConcepts/era6 + $ECCODES_DEFINITION_PATH/grib2/localConcepts/destine $ECCODES_DEFINITION_PATH/grib2/localConcepts/egrr $ECCODES_DEFINITION_PATH/grib2/localConcepts/ekmi diff --git a/tests/grib_clone_headers_only.cc b/tests/grib_clone_headers_only.cc index f59b204ed..f96048a15 100644 --- a/tests/grib_clone_headers_only.cc +++ b/tests/grib_clone_headers_only.cc @@ -12,11 +12,6 @@ #undef NDEBUG #include -static void usage(const char* app) -{ - fprintf(stderr, "Usage is: %s input_file ouput_file\n", app); -} - int main(int argc, char* argv[]) { FILE* in = NULL; @@ -26,13 +21,13 @@ int main(int argc, char* argv[]) int err = 0; long totalLength_src = 0, totalLength_dst = 0; - long edition = 0, isGridded = 0, bitmapPresent = 0; + long edition = 0, isGridded_src = 0, bitmapPresent = 0; long isConstant_src = 0, isConstant_dst = 0; long dataSectionLength_src = 0, dataSectionLength_dst = 0; size_t messageLength_src = 0, messageLength_dst = 0; if (argc != 3) { - usage(argv[0]); + // Usage: prog input_file ouput_file return 1; } @@ -46,8 +41,8 @@ int main(int argc, char* argv[]) assert(clone_handle); codes_get_long(source_handle, "isConstant", &isConstant_src); - codes_get_long(source_handle, "isGridded", &isGridded); - if (isGridded && !isConstant_src) { + codes_get_long(source_handle, "isGridded", &isGridded_src); + if (isGridded_src && !isConstant_src) { CODES_CHECK(codes_get_message(source_handle, &buffer, &messageLength_src), 0); CODES_CHECK(codes_get_message(clone_handle, &buffer, &messageLength_dst), 0); @@ -73,7 +68,7 @@ int main(int argc, char* argv[]) assert(isConstant_dst == 1); } - /* write out the cloned buffer */ + // write out the cloned buffer if (fwrite(buffer, 1, messageLength_dst, out) != messageLength_dst) { perror(argv[1]); return 1; diff --git a/tests/grib_data_quality_checks.sh b/tests/grib_data_quality_checks.sh index 2b8ed80f2..bf2fc77b2 100755 --- a/tests/grib_data_quality_checks.sh +++ b/tests/grib_data_quality_checks.sh @@ -28,6 +28,13 @@ sample_ccsds=$ECCODES_SAMPLES_PATH/ccsds_grib2.tmpl unset ECCODES_GRIB_DATA_QUALITY_CHECKS unset ECCODES_EXTRA_DEFINITION_PATH +echo "Data quality checks enabled. Packing samples should work" +# ------------------------------------------------------------- +export ECCODES_GRIB_DATA_QUALITY_CHECKS=1 +${tools_dir}/grib_copy -r $sample_g1 /dev/null +${tools_dir}/grib_copy -r $sample_g2 /dev/null +unset ECCODES_GRIB_DATA_QUALITY_CHECKS + # These input files are 2m temperature with min=221.76 and max=311.619 input1=${data_dir}/reduced_gaussian_surface.grib1 input2=${data_dir}/reduced_gaussian_surface.grib2 @@ -51,6 +58,7 @@ set -e grep -q 'more than the allowable limit' $tempErr unset ECCODES_DEBUG + echo "Data quality checks enabled but only as a warning. Repacking should pass..." # -------------------------------------------------------------------------------- export ECCODES_GRIB_DATA_QUALITY_CHECKS=2 @@ -110,7 +118,8 @@ ${tools_dir}/grib_set -s paramId=$pid,scaleValuesBy=0.01 $input2 $tempOut echo "Test close to the limit..." # --------------------------------- -${tools_dir}/grib_set -s paramId=$pid $sample_g2 $tempGrib2 +# The GRIB2 sample has max values of 273. We need to use 1 for this test +${tools_dir}/grib_set -s paramId=$pid,values=1 $sample_g2 $tempGrib2 ${tools_dir}/grib_set -s scaleValuesBy=3 $tempGrib2 $tempOut # OK set +e ${tools_dir}/grib_set -s scaleValuesBy=3.6 $tempGrib2 $tempOut @@ -189,11 +198,13 @@ cat > $tempDir/param_limits.def < 4 -${tools_dir}/grib_set -s paramId=260509,step=12,scaleValuesBy=1000 $sample_g2 $tempGrib2 +# The GRIB2 sample has max values of 273. We need to use 1 for this test +${tools_dir}/grib_set -s paramId=260509,step=12,values=1,scaleValuesBy=1000 $sample_g2 $tempGrib2 # Step of 0 doesn't satisfy the condition so will use 400 +# The GRIB2 sample has max values of 273. We need to use 1 for this test set +e -${tools_dir}/grib_set -s paramId=260509,scaleValuesBy=1000 $sample_g2 $tempGrib2 +${tools_dir}/grib_set -s paramId=260509,values=1,scaleValuesBy=1000 $sample_g2 $tempGrib2 status=$? set -e [ $status -ne 0 ] diff --git a/tests/grib_decimalPrecision.sh b/tests/grib_decimalPrecision.sh index 66a4c6253..afe13ad74 100755 --- a/tests/grib_decimalPrecision.sh +++ b/tests/grib_decimalPrecision.sh @@ -10,6 +10,9 @@ . ./include.ctest.sh +label="grib_decimalPrecision_test" + +temp=temp.$label.grib REDIRECT=/dev/null files="regular_latlon_surface.grib2 \ @@ -29,7 +32,6 @@ for file in $files; do done # ECC-458: spectral_complex packing -temp=temp.grib_decimalPrecision.grib infile=${data_dir}/spectral_complex.grib1 # Catch errors re negative values export ECCODES_FAIL_IF_LOG_MESSAGE=1 @@ -42,7 +44,7 @@ sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl ${tools_dir}/grib_set -s decimalScaleFactor=3 $sample1 $temp grib_check_key_equals $temp min,max,const,decimalScaleFactor,referenceValue '47485.4 47485.4 1 3 47485.4' ${tools_dir}/grib_set -s decimalScaleFactor=3 $sample2 $temp -grib_check_key_equals $temp min,max,const,decimalScaleFactor,referenceValue '1 1 1 3 1' - +grib_check_key_equals $temp min,max,const,decimalScaleFactor,referenceValue '273 273 1 3 273' +# Clean up rm -f $temp diff --git a/tests/grib_dump.sh b/tests/grib_dump.sh index c2844ec0d..c413f93f1 100755 --- a/tests/grib_dump.sh +++ b/tests/grib_dump.sh @@ -111,6 +111,16 @@ file=$data_dir/sample.grib2 ECCODES_DEBUG=1 ${tools_dir}/grib_dump $file > $temp 2>&1 +# Repeated key numberOfSection +file=$data_dir/sample.grib2 +${tools_dir}/grib_dump -O $file > $temp +grep -q "numberOfSection = 1" $temp +grep -q "numberOfSection = 3" $temp +grep -q "numberOfSection = 4" $temp +grep -q "numberOfSection = 5" $temp +grep -q "numberOfSection = 7" $temp + + # Dump long array # ---------------- input=$data_dir/lfpw.grib1 diff --git a/tests/grib_ecc-1212.sh b/tests/grib_ecc-1212.sh index e1f32e596..7ff7c2ead 100755 --- a/tests/grib_ecc-1212.sh +++ b/tests/grib_ecc-1212.sh @@ -112,6 +112,8 @@ ${tools_dir}/grib_filter -o $tempGrib $tempFilt $sample_grib2 grib_check_key_equals $tempGrib selectedFcIndex,step '1 4' grib_check_key_equals $tempGrib mars.date,mars.time '20220607 300' +${tools_dir}/grib_dump -Dat $tempGrib > $tempOut + for pdtn in 88 92 93 94 95 96 97 98; do ${tools_dir}/grib_set -s \ tablesVersion=30,productDefinitionTemplateNumber=$pdtn,numberOfForecastsUsedInLocalTime=1 \ diff --git a/tests/grib_ecc-1271.sh b/tests/grib_ecc-1271.sh index 04a25d828..8e9f7ed13 100755 --- a/tests/grib_ecc-1271.sh +++ b/tests/grib_ecc-1271.sh @@ -23,6 +23,6 @@ $sample_grib2 $temp grib_check_key_equals $temp Ni,Nj "16 31" grib_check_key_equals $temp centreLatitudeInDegrees,centreLongitudeInDegrees "0 30" -grib_check_key_equals $temp minimum,maximum "1 1" +grib_check_key_equals $temp minimum,maximum "273 273" rm -f $temp diff --git a/tests/grib_ecc-1467.cc b/tests/grib_ecc-1467.cc index 20a2b7268..5c5e8e53b 100644 --- a/tests/grib_ecc-1467.cc +++ b/tests/grib_ecc-1467.cc @@ -8,6 +8,9 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ +// +// ECC-1467: Support data values array decoded as "floats" (single-precision) +// #include #include "eccodes.h" #include "grib_api_internal.h" @@ -26,21 +29,14 @@ int main(int argc, char** argv) double dmin, dmax, dval; float fval; - FILE* in = NULL; - const char* filename = 0; - codes_handle* h = NULL; - - if (argc != 2) { - fprintf(stderr, "usage: %s file\n", argv[0]); - return 1; - } - filename = argv[1]; + Assert(argc == 2); + const char* filename = argv[1]; printf("Opening %s\n", filename); - in = fopen(filename, "rb"); + FILE* in = fopen(filename, "rb"); Assert(in); - h = codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err); + codes_handle* h = codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err); Assert(h); CODES_CHECK(codes_get_float(h, "referenceValue", &fval), 0); @@ -67,8 +63,7 @@ int main(int argc, char** argv) fval = fvalues[i]; if (!((dmin <= fval) && (fval <= dmax))) { - fprintf(stderr, "Error:\n"); - fprintf(stderr, "dvalue: %f, fvalue: %f\n", dvalues[i], fvalues[i]); + fprintf(stderr, "Error: dvalue: %f, fvalue: %f\n", dvalues[i], fvalues[i]); fprintf(stderr, "\tmin < fvalue < max = %.20e < %.20e < %.20e FAILED\n", dmin, fvalues[i], dmax); fprintf(stderr, "\tfvalue - min = %.20e (%s)\n", diff --git a/tests/grib_ecc-1467.sh b/tests/grib_ecc-1467.sh index fb5d0bd1c..abb9aa5f3 100755 --- a/tests/grib_ecc-1467.sh +++ b/tests/grib_ecc-1467.sh @@ -8,6 +8,8 @@ # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. # +# ECC-1467: Support data values array decoded as "floats" (single-precision) + . ./include.ctest.sh # Constant fields diff --git a/tests/grib_ecc-1764.cc b/tests/grib_ecc-1764.cc new file mode 100644 index 000000000..a2d884a18 --- /dev/null +++ b/tests/grib_ecc-1764.cc @@ -0,0 +1,44 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#include "grib_api.h" +#undef NDEBUG +#include "assert.h" + +int main(int argc, char* argv[]) +{ + int ret = GRIB_SUCCESS; + + if (argc != 2) return 1; + + const char* infile = argv[1]; + grib_index* index = grib_index_new(0, "shortName,level", &ret); + assert(ret == GRIB_SUCCESS); + + ret = grib_index_add_file(index, infile); + assert(ret == GRIB_SUCCESS); + + printf("Select nonexistent entries...\n"); + grib_index_select_string(index, "shortName", "frost"); + grib_index_select_long(index, "level", 666); + + grib_handle* h = grib_handle_new_from_index(index, &ret); + assert(!h); + assert(ret == GRIB_END_OF_INDEX); + + // Call it again. Should not crash + h = grib_handle_new_from_index(index, &ret); + assert(!h); + assert(ret == GRIB_END_OF_INDEX); + + grib_index_delete(index); + grib_context_delete(grib_context_get_default()); + + return 0; +} diff --git a/tests/grib_ecc-1764.sh b/tests/grib_ecc-1764.sh new file mode 100755 index 000000000..81891ec74 --- /dev/null +++ b/tests/grib_ecc-1764.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_ecc-1764_test" +temp=temp.$label.txt + +infile=${data_dir}/tigge_cf_ecmwf.grib2 +$EXEC ${test_dir}/grib_ecc-1764 $infile # > $temp + +# Clean up +rm -f $temp diff --git a/tests/grib_ecc-1766.sh b/tests/grib_ecc-1766.sh new file mode 100755 index 000000000..79e273b1d --- /dev/null +++ b/tests/grib_ecc-1766.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +# ECC-1766: EERIE project metadata support + +label="grib_ecc-1766_test" +temp_grib=temp.$label.grib +eerie_sample=temp.$label.eerie.grib +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +tablesVersionLatest=$( ${tools_dir}/grib_get -p tablesVersionLatest $sample_grib2 ) + +# Setup GRIB message with MARS keys +# Set latest tables version and add local section with MARS labeling +${tools_dir}/grib_set -s tablesVersion=$tablesVersionLatest,setLocalDefinition=1 $sample_grib2 $temp_grib + +# Then change to EERIE project GRIB message --> grib2LocalSectionNumber=43 +${tools_dir}/grib_set -s grib2LocalSectionNumber=43,class=ed $temp_grib $eerie_sample + +# Check EERIE related keys are present and correct +grib_check_key_exists $eerie_sample activity,experiment,realization +grib_check_key_equals $eerie_sample "activity,experiment,realization" "0 0 255" + +# Check domain key is unaliased +[ $( ${tools_dir}/grib_get -f -p mars.domain $eerie_sample ) = "not_found" ] + +# Check an example where a few additional things are set +${tools_dir}/grib_set -s activity=1,experiment=1,realization=1 $eerie_sample $temp_grib + +grib_check_key_equals $temp_grib "activity,experiment,realization" "1 1 1" +grib_check_key_equals $temp_grib "activity:s,experiment:s" "CMIP6 hist" + +# Clean up +rm -f $temp_grib $eerie_sample diff --git a/tests/grib_ecc-1792.sh b/tests/grib_ecc-1792.sh new file mode 100755 index 000000000..960da284d --- /dev/null +++ b/tests/grib_ecc-1792.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +REDIRECT=/dev/null + +label="grib_ecc-1792_test" +tempGrib=temp.$label.grib +tempFilt=temp.$label.filt +tempLog=temp.$label.log +tempRef=temp.$label.ref + +sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +# Create a message with its Data Section out-of-sync with its Grid +${tools_dir}/grib_set -s numberOfValues=2 $sample_grib2 $tempGrib +grib_check_key_equals $tempGrib numberOfDataPoints 496 + +# grib_get_data should fail +set +e +${tools_dir}/grib_get_data $tempGrib > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep "Grid description is wrong" $tempLog + +# Just getting lats and lons; no need for Data Section to be in-sync +cat >$tempFilt<$tempFilt< $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep "Grid description is wrong" $tempLog + + +# Clean up +rm -f $tempGrib $tempFilt $tempLog $tempRef diff --git a/tests/grib_ecc-386.cc b/tests/grib_ecc-386.cc index d4e238c4f..10f2adcdb 100644 --- a/tests/grib_ecc-386.cc +++ b/tests/grib_ecc-386.cc @@ -9,18 +9,11 @@ */ /* - * Description: Reads a GRIB message from file, measures read time. - * + * Description: Reads a GRIB message from file, measures time taken */ #include #include "grib_api_internal.h" -static void usage(const char* prog) -{ - printf("usage: %s filename\n", prog); - exit(1); -} - int main(int argc, char** argv) { grib_timer* tes = grib_get_timer(0, "decoding", 0, 0); @@ -33,21 +26,15 @@ int main(int argc, char** argv) const double duration_max = 3.6; /* seconds */ const int num_repetitions = 100; - if (argc < 2) usage(argv[0]); + if (argc < 2) return 1; in = fopen(argv[1], "rb"); - if (!in) { - printf("ERROR: unable to open file %s\n", argv[1]); - return 1; - } + Assert(in); /* create new handle */ err = 0; h = grib_handle_new_from_file(0, in, &err); - if (h == NULL) { - printf("Error: unable to create handle from file.\n"); - return 1; - } + Assert(h); /* get the size of the values array*/ GRIB_CHECK(grib_get_size(h, "values", &values_len), 0); @@ -72,9 +59,3 @@ int main(int argc, char** argv) fclose(in); return 0; } - -// int main(int argc, char** argv) -// { -// return 0; -// } -// #endif diff --git a/tests/grib_threads_ecc-604.cc b/tests/grib_encode_pthreads2.cc similarity index 100% rename from tests/grib_threads_ecc-604.cc rename to tests/grib_encode_pthreads2.cc diff --git a/tests/grib_threads_ecc-604.sh b/tests/grib_encode_pthreads2.sh similarity index 98% rename from tests/grib_threads_ecc-604.sh rename to tests/grib_encode_pthreads2.sh index c2d491ffb..56d894013 100755 --- a/tests/grib_threads_ecc-604.sh +++ b/tests/grib_encode_pthreads2.sh @@ -16,7 +16,7 @@ temp_dir=tempdir.${label} NUM_THREADS=3 NUM_ITER=10 OUTPUT=output -PROG="${test_dir}/grib_threads_ecc-604" +PROG="${test_dir}/grib_encode_pthreads2" validate() { diff --git a/tests/grib_fieldset.cc b/tests/grib_fieldset.cc index a6eb38ce7..d1431b021 100644 --- a/tests/grib_fieldset.cc +++ b/tests/grib_fieldset.cc @@ -13,12 +13,6 @@ #include "grib_api.h" -static void usage(const char* prog) -{ - fprintf(stderr, "Usage: %s order_by grib_file grib_file ...\n", prog); - exit(1); -} - int main(int argc, char** argv) { int err = 0; @@ -34,7 +28,7 @@ int main(int argc, char** argv) size_t lenDate = 10, lenParam = 20, lenLevel = 50; char* order_by = NULL; - if (argc != 3) usage(argv[0]); + if (argc != 3) return 1; //Usage: prog order_by grib_file grib_file ... nkeys = sizeof(keys) / sizeof(*keys); order_by = argv[1]; diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh index 9a836a898..42e4eccdf 100755 --- a/tests/grib_filter.sh +++ b/tests/grib_filter.sh @@ -36,24 +36,6 @@ rm -f ${data_dir}/split/* rmdir ${data_dir}/split rm -f ${data_dir}/f.rules -echo "Test with nonexistent keys. Note spelling of centre!" -# --------------------------------------------------------- -cat >${data_dir}/nonexkey.rules < $REDIRECT > $REDIRECT -if [ $? -eq 0 ]; then - echo "grib_filter should have failed if key not found" >&2 - exit 1 -fi -set -e -# Now repeat with -f option (do not exit on error) -${tools_dir}/grib_filter -f ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT - -rm -f ${data_dir}/nonexkey.rules - echo "Test GRIB-308: format specifier for integer keys" # ---------------------------------------------------- cat > ${data_dir}/formatint.rules <$tempFilt <$tempFilt < $tempOut + + echo "Test from_scale_factor_scaled_value" # ----------------------------------------- input="${samp_dir}/reduced_gg_pl_32_grib2.tmpl" @@ -283,21 +282,6 @@ CDS=-42 ${tools_dir}/grib_filter $tempFilt $input > $tempOut grep -q "defined and equal to -42" $tempOut -echo "Test IEEE float overflow" -# ----------------------------------------- -input="${samp_dir}/GRIB2.tmpl" -cat >$tempFilt < $tempOut -status=$? -set -e -[ $status -ne 0 ] -grep -q "ECCODES ERROR.*Number is too large" $tempOut - - echo "Padded count for filenames" # ----------------------------------------- input=${data_dir}/tigge_af_ecmwf.grib2 @@ -340,6 +324,20 @@ EOF ${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut grep -q "No args: false" $tempOut +# Bit on off +cat >$tempFilt < $tempOut +cat $tempOut +grep -q "xx1=1" $tempOut +grep -q "xx2=0" $tempOut +grep -q "yy1=0" $tempOut +grep -q "yy2=1" $tempOut + # Use of dummy expression (=true) cat >$tempFilt < $tempOut -cat >$tempFilt < $tempOut -status=$? -set -e -[ $status -ne 0 ] -grep "Assertion failure" $tempOut - # Use of the "length" expression cat >$tempFilt <$tempFilt < $tempOut + +# Logical OR with doubles +cat >$tempFilt < 45.01 || referenceValue < 1.1) { print "yes"; } +EOF +${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl #> $tempOut + + # Decode an integer key as string cat >$tempFilt < $tempOut 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "Invalid argument" $tempOut - # GTS header # --------------- @@ -446,15 +435,6 @@ set -e [ $status -ne 0 ] -# Bad write -set +e -echo 'write "/";' | ${tools_dir}/grib_filter - $input > $tempOut 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "Unable to open file" $tempOut - - # Setting step # ------------- input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl @@ -466,15 +446,14 @@ echo 'set endStep = 12; write;' | ${tools_dir}/grib_filter -o $tempGrib - $input grib_check_key_equals $tempGrib step 12 grib_check_key_equals $tempGrib forecastTime 12 - -# Bad filter -# ---------------- -set +e -${tools_dir}/grib_filter a_non_existent_filter_file $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "Cannot include file" $tempOut +# Functions: grib_op_ne_d +# ------------------------ +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +cat >$tempFilt <${data_dir}/nonexkey.rules < $REDIRECT > $REDIRECT +if [ $? -eq 0 ]; then + echo "grib_filter should have failed if key not found" >&2 + exit 1 +fi +set -e + +# Now repeat with -f option (do not exit on error) +${tools_dir}/grib_filter -f ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT + +rm -f ${data_dir}/nonexkey.rules + +echo "Test IEEE float overflow" +# ----------------------------------------- +input="${samp_dir}/GRIB2.tmpl" +cat >$tempFilt < $tempOut +status=$? +set -e +[ $status -ne 0 ] +grep -q "ECCODES ERROR.*Number is too large" $tempOut + +# Assert statement +# ----------------- +cat >$tempFilt < $tempOut +status=$? +set -e +[ $status -ne 0 ] +grep "Assertion failure" $tempOut + + +# Bad write +# --------- +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl + +set +e +echo 'write(-10);' | ${tools_dir}/grib_filter -o $tempGrib - $input > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Invalid argument" $tempOut + +# Bad write +# ---------- +set +e +echo 'write "/";' | ${tools_dir}/grib_filter - $input > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Unable to open file" $tempOut + +# Signed bits +# ----------- +cat >$tempFilt < $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] + + +# Non existent filter +# -------------------- +set +e +${tools_dir}/grib_filter a_non_existent_filter_file $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Cannot include file" $tempOut + + +# Clean up +rm -f $tempGrib $tempFilt $tempOut $tempRef diff --git a/tests/grib_get_fail.sh b/tests/grib_get_fail.sh index d7d0d5b1b..7f1c967e4 100755 --- a/tests/grib_get_fail.sh +++ b/tests/grib_get_fail.sh @@ -35,6 +35,13 @@ grep -q "Nh (Key/value not found)" $tempText # Nearest # --------- +set +e +${tools_dir}/grib_get -l abc $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Wrong latitude value" $tempText + set +e ${tools_dir}/grib_get -s Nj=MISSING -l 0,0,1 $ECCODES_SAMPLES_PATH/reduced_ll_sfc_grib1.tmpl > $tempText 2>&1 status=$? @@ -51,7 +58,7 @@ grep -q "Key Nj cannot be 0" $tempText set +e -${tools_dir}/grib_get -l 0,0,5 $ECCODES_SAMPLES_PATH/reduced_ll_sfc_grib1.tmpl > $tempText 2>&1 +${tools_dir}/grib_get -l 0,0,5 $ECCODES_SAMPLES_PATH/reduced_ll_sfc_grib2.tmpl > $tempText 2>&1 status=$? set -e [ $status -ne 0 ] @@ -81,5 +88,16 @@ grep -q "unreadable message" $tempText rm -f $outfile +# ---------------------- +# Wrong message type +# ---------------------- +set +e +${tools_dir}/grib_get -p edition $ECCODES_SAMPLES_PATH/BUFR3.tmpl > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Input file seems to be BUFR" $tempText + + # Clean up rm -f $tempText diff --git a/tests/grib_grid_healpix.sh b/tests/grib_grid_healpix.sh index 82ee2b257..7ff56382c 100755 --- a/tests/grib_grid_healpix.sh +++ b/tests/grib_grid_healpix.sh @@ -11,7 +11,7 @@ # Define a common label for all the tmp files label="grib_healpix_test" -tempFilter="temp.${label}.filt" +tempFilt="temp.${label}.filt" tempGrib="temp.${label}.grib" tempLog="temp.${label}.log" @@ -19,8 +19,9 @@ input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl latest=`${tools_dir}/grib_get -p tablesVersionLatest $input` -# Create a filter -cat > $tempFilter < $tempFilt < $tempFilter <&2 exit 1 @@ -42,12 +43,13 @@ if [ $latest -gt 31 ]; then fi ${tools_dir}/grib_dump -O -p section_3 $tempGrib -${tools_dir}/grib_ls -jn geography $tempGrib +${tools_dir}/grib_ls -jn geography $tempGrib > $tempLog +grep -q "orderingConvention.*ring" $tempLog -# Geoiterator -# ------------- +# Geoiterator ring-ordering +# -------------------------- rm -f $tempGrib -cat > $tempFilter < $tempFilt < $tempFilter < $tempFilter < $tempFilt < $tempFilter < $tempFilt < $tempLog + +# Nested: N must be a power of 2 +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +${tools_dir}/grib_set -s gridType=healpix,Nside=3,orderingConvention=nested,numberOfDataPoints=108,numberOfValues=108 $input $tempGrib +set +e +${tools_dir}/grib_get_data $tempGrib > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Nside must be a power of 2" $tempLog + + +# Nested N=1 +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +${tools_dir}/grib_set -s gridType=healpix,Nside=1,orderingConvention=nested,numberOfDataPoints=12,numberOfValues=12 $input $tempGrib +${tools_dir}/grib_get_data $tempGrib > $tempLog # Invalid cases -# -------------- +# ------------------ +# Bad ordering +${tools_dir}/grib_set -s gridType=healpix,Nside=1,ordering=6 $input $tempGrib +set +e +${tools_dir}/grib_get_data $tempGrib > $tempLog 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Only orderingConvention.*are supported" $tempLog + +# N = 0 set +e ${tools_dir}/grib_get_data -sN=0 $tempGrib > $tempLog 2>&1 status=$? @@ -80,13 +130,6 @@ set -e [ $status -ne 0 ] grep -q "Nside must be greater than zero" $tempLog -set +e -${tools_dir}/grib_get_data -s orderingConvention=nested $tempGrib > $tempLog 2>&1 -status=$? -set -e -[ $status -ne 0 ] -grep -q "Only ring ordering is supported" $tempLog - # Clean up -rm -f $tempFilter $tempGrib $tempLog +rm -f $tempFilt $tempGrib $tempLog diff --git a/tests/grib_grid_lambert_conformal.sh b/tests/grib_grid_lambert_conformal.sh index 0d6cd209b..b11624d58 100755 --- a/tests/grib_grid_lambert_conformal.sh +++ b/tests/grib_grid_lambert_conformal.sh @@ -11,14 +11,14 @@ # Define a common label for all the tmp files label="grib_lambert_conformal_test" -tempFilter="temp.${label}.filt" +tempFilt="temp.${label}.filt" tempGrib="temp.${label}.grib" tempOut="temp.${label}.out" input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl # Create a filter -cat > $tempFilter < $tempFilt < $tempFilter <&2 exit 1 @@ -49,7 +49,7 @@ ${tools_dir}/grib_ls -l 50,0 $tempGrib # Oblate earth # -------------- -cat > $tempFilter < $tempFilt < $tempFilter <&2 exit 1 @@ -83,4 +83,4 @@ ${tools_dir}/grib_ls -l 40.44,353.56 $tempGrib # Clean up -rm -f $tempFilter $tempGrib $tempOut +rm -f $tempFilt $tempGrib $tempOut diff --git a/tests/grib_grid_mercator.sh b/tests/grib_grid_mercator.sh index 5846b08a8..4ba2d43d6 100755 --- a/tests/grib_grid_mercator.sh +++ b/tests/grib_grid_mercator.sh @@ -12,7 +12,7 @@ # Define a common label for all the tmp files label="grib_mercator_test" tempOut="temp.${label}.out" -tempFilter="temp.${label}.filt" +tempFilt="temp.${label}.filt" input=${data_dir}/mercator.grib2 grib_check_key_equals $input "gridType" "mercator" @@ -22,17 +22,17 @@ numlines=`wc -l $tempOut | awk '{print $1}'` # Check other iterator-related keys -cat > $tempFilter < $tempFilt < $tempOut grep -q "Point chosen #1 index=618" $tempOut # Clean up -rm -f $tempFilter $tempOut +rm -f $tempFilt $tempOut diff --git a/tests/grib_grid_polar_stereographic.sh b/tests/grib_grid_polar_stereographic.sh index 251dd0095..b8758000b 100755 --- a/tests/grib_grid_polar_stereographic.sh +++ b/tests/grib_grid_polar_stereographic.sh @@ -11,7 +11,7 @@ # Define a common label for all the tmp files label="grib_polar_stereographic_test" -tempFilter="temp.${label}.filt" +tempFilt="temp.${label}.filt" tempGrib="temp.${label}.grib" tempOut="temp.${label}.out" @@ -19,7 +19,7 @@ input=$ECCODES_SAMPLES_PATH/polar_stereographic_pl_grib2.tmpl # Invoke Geoiterator ${tools_dir}/grib_get_data $input > $tempOut - +# Nearest ${tools_dir}/grib_ls -l 60,0 $input # Scanning mode @@ -27,4 +27,4 @@ ${tools_dir}/grib_get_data -s iScansNegatively=1 $input > $tempOut # Clean up -rm -f $tempFilter $tempGrib $tempOut +rm -f $tempFilt $tempGrib $tempOut diff --git a/tests/grib_grid_space_view.sh b/tests/grib_grid_space_view.sh index 5b987cd53..71b1759cf 100755 --- a/tests/grib_grid_space_view.sh +++ b/tests/grib_grid_space_view.sh @@ -11,7 +11,7 @@ # Define a common label for all the tmp files label="grib_space_view_test" -tempFilter="temp.${label}.filt" +tempFilt="temp.${label}.filt" tempGrib1="temp.${label}.grib1" tempGrib2="temp.${label}.grib2" tempOut="temp.${label}.out" @@ -20,7 +20,7 @@ tempOut="temp.${label}.out" # GRIB2 # ----------- input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -cat > $tempFilter < $tempFilt < $tempFilter <&2 exit 1 @@ -66,7 +66,7 @@ rm -f $tempGrib2 $tempOut # GRIB1 # ----------- input=$ECCODES_SAMPLES_PATH/GRIB1.tmpl -cat > $tempFilter < $tempFilt < $tempFilter < $tempOut ${tools_dir}/grib_set -s edition=2 $tempGrib1 $tempGrib2 @@ -85,4 +85,4 @@ ${tools_dir}/grib_compare -e -b param $tempGrib1 $tempGrib2 # Clean up -rm -f $tempFilter $tempGrib1 $tempGrib2 $tempOut +rm -f $tempFilt $tempGrib1 $tempGrib2 $tempOut diff --git a/tests/grib_indexing.sh b/tests/grib_indexing.sh index 79026c9a3..bd4908bf1 100755 --- a/tests/grib_indexing.sh +++ b/tests/grib_indexing.sh @@ -147,8 +147,8 @@ mkdir $temp_dir_B cp ${data_dir}/tigge/tigge_rjtd_pl_*grib $temp_dir_A cp ${data_dir}/tigge/tigge_rjtd_sfc_*grib $temp_dir_B -${tools_dir}/grib_index_build -o $tempIndex1 $temp_dir_A -${tools_dir}/grib_dump $tempIndex1 +${tools_dir}/grib_index_build -o $tempIndex1 $temp_dir_A > /dev/null +${tools_dir}/grib_dump $tempIndex1 > /dev/null rm -rf $temp_dir_A @@ -159,6 +159,39 @@ ${tools_dir}/grib_index_build -N -o $tempIndex1 $sample1 > /dev/null ${tools_dir}/grib_dump $tempIndex1 >/dev/null +# ECC-1773: GRIB2 multi-field messages +# ------------------------------------- +infile=$data_dir/multi.grib2 +${tools_dir}/grib_index_build -o $tempIndex1 $infile > $temp 2>&1 +grep -q "Indexing multi-field messages is not fully supported" $temp + +# Change keys before indexing +# ---------------------------- +infile=$data_dir/tigge_pf_ecmwf.grib2 + +${tools_dir}/grib_index_build -N -o $tempIndex1 $infile > $temp +grep -q "mars.stream = { enfo }" $temp +grep -q "mars.type = { pf }" $temp + +ECCODES_INDEX_SET_KEYS='typeOfProcessedData=af' ${tools_dir}/grib_index_build -N -o $tempIndex1 $infile > $temp +grep -q "mars.stream = { oper }" $temp +grep -q "mars.type = { fc }" $temp + +set +e +ECCODES_INDEX_SET_KEYS='nosuchkey=1,typeOfProcessedData=af' ${tools_dir}/grib_index_build -N -o $tempIndex1 $infile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Unable to set nosuchkey=1,typeOfProcessedData=af" $temp + +set +e +ECCODES_INDEX_SET_KEYS='rubbish' ${tools_dir}/grib_index_build -N -o $tempIndex1 $infile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Unable to parse" $temp + + # ------------------ # Error conditions # ------------------ diff --git a/tests/grib_iterator.sh b/tests/grib_iterator.sh index 152e95c0c..c1f549a53 100755 --- a/tests/grib_iterator.sh +++ b/tests/grib_iterator.sh @@ -45,6 +45,14 @@ grep -q "Latitude Longitude Value shortName level" $tempText ${tools_dir}/grib_get_data "$samp_dir/sh_ml_grib2.tmpl" > $tempText +# ECC-1781: Reduced Gaussian grid with rotation +# --------------------------------------------- +${tools_dir}/grib_get_data $samp_dir/reduced_rotated_gg_pl_320_grib1.tmpl > $tempText +${tools_dir}/grib_get_data $samp_dir/reduced_rotated_gg_pl_320_grib2.tmpl > $tempText +ECCODES_DEBUG=-1 ${tools_dir}/grib_get_data ${data_dir}/reduced_gaussian_sub_area.grib2 > $tempText 2>&1 +grep -q "sub-area num points=53564" $tempText + + # ECC-1642: badly encoded regular grids # ------------------------------------- ${tools_dir}/grib_set -s Ni=33 $samp_dir/GRIB2.tmpl $tempGrib diff --git a/tests/grib_jpeg.sh b/tests/grib_jpeg.sh index 69210430e..43575651c 100755 --- a/tests/grib_jpeg.sh +++ b/tests/grib_jpeg.sh @@ -164,6 +164,14 @@ if [ $HAVE_LIBJASPER -eq 0 ]; then set -e [ $status -ne 0 ] grep -q "JasPer JPEG support not enabled" $tempDump + + infile=$data_dir/sample.grib2 + set +e + ECCODES_GRIB_JPEG=jasper ${tools_dir}/grib_set -rs packingType=grid_jpeg $infile $outfile1 > $tempDump 2>&1 + status=$? + set -e + [ $status -ne 0 ] + grep -q "JasPer JPEG support not enabled" $tempDump fi # Clean up diff --git a/tests/grib_ls.sh b/tests/grib_ls.sh index bdbdba4d4..be4f7a38b 100755 --- a/tests/grib_ls.sh +++ b/tests/grib_ls.sh @@ -32,6 +32,24 @@ set -e grep -q "Full documentation and examples at" $tempLog grep -q "https://confluence.ecmwf.int/display/ECC/grib_ls" $tempLog +set +e +${tools_dir}/grib_ls -? > $tempLog +status=$? +set -e +[ $status -ne 0 ] + +set +e +${tools_dir}/grib_ls -h > $tempLog +status=$? +set -e +[ $status -ne 0 ] + +set +e +DOXYGEN_USAGE=1 ${tools_dir}/grib_ls > $tempLog +status=$? +set -e +[ $status -ne 0 ] + ${tools_dir}/grib_ls -P count $infile > $tempLog ${tools_dir}/grib_ls -p count,step $infile >> $tempLog @@ -172,6 +190,14 @@ grep -q "0 of 38 messages" $tempText ${tools_dir}/grib_ls -w units!=K $file > $tempText grep -q "30 of 38 messages" $tempText +${tools_dir}/grib_ls -w scaleFactorOfSecondFixedSurface=missing $file > $tempText +grep -q "36 of 38 messages" $tempText +${tools_dir}/grib_ls -w scaleFactorOfSecondFixedSurface!=missing $file > $tempText +grep -q "2 of 38 messages" $tempText + +${tools_dir}/grib_ls -w referenceValue:d=0 $file > $tempText +grep -q "5 of 38 messages" $tempText + file=mixed.grib # Has 14 messages ${tools_dir}/grib_ls -w packingType=grid_simple,gridType=regular_ll/regular_gg $file > $tempText grep -q "12 of 14 messages" $tempText diff --git a/tests/grib_multi.sh b/tests/grib_multi.sh index f8e2d94d8..028591264 100755 --- a/tests/grib_multi.sh +++ b/tests/grib_multi.sh @@ -11,7 +11,7 @@ . ./include.ctest.sh label="grib_multi_test" -tmpdata=temp.$label.$$.grib +tmpdata=temp.$label.grib rm -f $tmpdata parameterNumber=`${tools_dir}/grib_get -p parameterNumber -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2` @@ -35,4 +35,16 @@ if [ -z "$parameterNumber" ]; then exit 1 fi +# Convert to single-field +# ----------------------- +infile=${data_dir}/multi.grib2 +${tools_dir}/grib_copy $infile $tmpdata +c1=$(${tools_dir}/grib_count $infile) +c2=$(${tools_dir}/grib_count $tmpdata) +[ $c1 -eq 30 ] +[ $c2 -eq 56 ] + + +# Clean up +rm -f $tmpdata rm -f $tmpdata.1 $tmpdata.rules diff --git a/tests/grib_multi_from_message.cc b/tests/grib_multi_from_message.cc index 798230db5..1728e371c 100644 --- a/tests/grib_multi_from_message.cc +++ b/tests/grib_multi_from_message.cc @@ -8,25 +8,14 @@ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. */ -/* - * test: reading GRIB2 multi fields messages from memory - */ +/* Test: reading GRIB2 multi fields messages from memory */ #include "grib_api_internal.h" - -static void usage(const char* prog) -{ - fprintf(stderr, "usage: %s [-m] file.grib\n", prog); - exit(1); -} - int main(int argc, char* argv[]) { struct stat finfo; - char shortName[20] = { - 0, - }; + char shortName[20] = {0,}; size_t len; grib_handle* h = NULL; size_t fsize; @@ -49,25 +38,18 @@ int main(int argc, char* argv[]) else if (argc == 2) filename = argv[1]; else - usage(argv[0]); + return 1; Assert(filename); f = fopen(filename, "rb"); - if (!f) { - perror(filename); - exit(1); - } + Assert(f); stat(filename, &finfo); fsize = finfo.st_size; data = (unsigned char*)malloc(fsize); p = data; - - if (!data) { - fprintf(stderr, "unable to allocate %ld bytes\n", (long)fsize); - exit(1); - } + Assert(data); if (fread(data, 1, fsize, f) != fsize) { perror(filename); diff --git a/tests/grib_nearest_test.cc b/tests/grib_nearest_test.cc index 5731f6bb2..24b76f457 100644 --- a/tests/grib_nearest_test.cc +++ b/tests/grib_nearest_test.cc @@ -31,10 +31,9 @@ int main(int argc, char** argv) { int err = 0; long step = 0; - size_t nfiles = 0; - size_t i = 0, j = 0; - codes_fieldset* set = NULL; - const size_t max_numfiles = 100; + int nfiles = 0, i = 0, j = 0; + codes_fieldset* set = NULL; + const int max_numfiles = 100; codes_handle* h = NULL; char param[20] = {0,}; size_t len = 20; diff --git a/tests/grib_octahedral.sh b/tests/grib_octahedral.sh index 967eecc1a..6ed838d99 100755 --- a/tests/grib_octahedral.sh +++ b/tests/grib_octahedral.sh @@ -33,4 +33,12 @@ if [ $HAVE_EXTRA_TESTS -eq 1 ]; then [ "$numlines" = "6599681" ] # 1 + numberOfDataPoints fi +# Regular Gaussian (no pl array) +input=${data_dir}/regular_gaussian_model_level.grib2 +grib_check_key_equals $input isOctahedral 0 + +result=$( $tools_dir/grib_get -s Ni=missing -p isOctahedral $input ) +[ $result -eq 0 ] + +# Clean up rm -f $temp diff --git a/tests/grib_partial_message.cc b/tests/grib_partial_message.cc index e2030b478..954d93bc6 100644 --- a/tests/grib_partial_message.cc +++ b/tests/grib_partial_message.cc @@ -48,6 +48,10 @@ int main(int argc, char** argv) grib_keys_iterator_delete(iter); grib_handle_delete(h_partial); + + h_partial = grib_handle_new_from_partial_message_copy(h_full->context, msg1, size1); + grib_handle_delete(h_partial); + grib_handle_delete(h_full); fclose(in); return 0; diff --git a/tests/grib_second_order.sh b/tests/grib_second_order.sh index 37bc89cd5..1dc6092df 100755 --- a/tests/grib_second_order.sh +++ b/tests/grib_second_order.sh @@ -20,7 +20,7 @@ cd ${data_dir} encoding=1 simple_no_bitmap=simple.grib simple_bitmap=simple_bitmap.grib -test_filter=temp.$label.filter +tempFilt=temp.$label.filter files_no_bitmap="gen_ext.grib \ gen_ext_boust.grib \ @@ -41,11 +41,11 @@ simple_bitmap.grib" no_packing="gen.grib|row.grib|gen_bitmap.grib|constant_width_bitmap.grib|constant_width_boust_bitmap.grib" test_data() { - ${tools_dir}/grib_filter $test_filter $simple > $simple.data + ${tools_dir}/grib_filter $tempFilt $simple > $simple.data for f in $files do - ${tools_dir}/grib_filter $test_filter $f > $f.data + ${tools_dir}/grib_filter $tempFilt $f > $f.data diff $simple.data $f.data > /dev/null ${tools_dir}/grib_compare -cvalues $f $simple echo $f decoding test passed > $REDIRECT @@ -55,7 +55,7 @@ test_data() { then rm -f $f.copied ${tools_dir}/grib_copy -r $f $f.copied - ${tools_dir}/grib_filter $test_filter $f.copied > $f.copied.data + ${tools_dir}/grib_filter $tempFilt $f.copied > $f.copied.data diff $simple.data $f.copied.data > /dev/null ${tools_dir}/grib_compare -cvalues $f.copied $simple echo $f encoding test passed > $REDIRECT @@ -67,7 +67,7 @@ test_data() { } -cat > $test_filter< $tempFilt< $test_filter< $tempFilt<$tempText grib_check_key_equals $temp3 packingType,accuracy 'grid_simple 24' grep -q "Packing not changed" $tempText # Three coded values: Now we can change to 2nd order -cat > $test_filter< $tempFilt<$tempFilt<$tempFilt< $temp 2>&1 @@ -28,7 +28,7 @@ set -e [ $status -ne 0 ] grep -q "provide some keys to set" $temp -# Set with empty -s. Expected to fail +# Set with empty -s # ---------------------------------------------------- set +e ${tools_dir}/grib_set -s '' $infile $outfile > $temp 2>&1 @@ -37,7 +37,7 @@ set -e [ $status -ne 0 ] grep -q "provide some keys to set" $temp -# Out-of-bounds value. Expected to fail +# Out-of-bounds value # ---------------------------------------------------- input=${data_dir}/reduced_gaussian_sub_area.grib2 set +e @@ -47,7 +47,7 @@ set -e [ $status -ne 0 ] grep -q "Trying to encode value of 1000 but the maximum allowable value is 255 (number of bits=8)" $temp -# Negative value for an unsigned key. Expected to fail +# Negative value for an unsigned key # ---------------------------------------------------- input=${data_dir}/reduced_gaussian_sub_area.grib2 set +e @@ -95,6 +95,31 @@ status=$? set -e [ $status -ne 0 ] +# ECC-1777: Bad date/time +# ------------------------- +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +${tools_dir}/grib_set -s dataDate=20180229 $input $outfile > $temp 2>&1 +grep -q "Date is not valid" $temp + +${tools_dir}/grib_set -s dataTime=4261 $input $outfile > $temp 2>&1 +grep -q "Time is not valid" $temp + +${tools_dir}/grib_set -s dataTime=2501 $input $outfile > $temp 2>&1 +grep -q "Time is not valid" $temp + +# Note for GRIB1 we DO fail on a bad date! This need to be consistent across editions +input=$ECCODES_SAMPLES_PATH/GRIB1.tmpl +set +e +${tools_dir}/grib_set -s dataDate=20180229 $input $outfile > $temp 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "invalid date 20180229" $temp + +# 2016 did have 29th Feb +${tools_dir}/grib_set -s dataDate=20160229 $input $outfile + + # ECC-1359: string that can be converted to an integer # --------------------------------------------------- ${tools_dir}/grib_set -s month:s=6 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile @@ -156,6 +181,11 @@ set -e [ $status -ne 0 ] grep -q "centre: No such code table entry.*Did you mean.*ecmf" $temp +# Overflow/Underflow +# ------------------------ +input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl +${tools_dir}/grib_set -s missingValue=9223372036854776666 $input $outfile > $temp 2>&1 +grep -q "ECCODES WARNING : Setting .* causes overflow/underflow" $temp # ------------------------ # Unreadable message diff --git a/tests/grib_step.sh b/tests/grib_step.sh index e7e9e28ff..4ed45a3f1 100755 --- a/tests/grib_step.sh +++ b/tests/grib_step.sh @@ -14,8 +14,9 @@ REDIRECT=/dev/null label=grib_step_test tempGrb=${data_dir}/temp.$label.out.grib -templog=${data_dir}/temp.$label.log -rm -f $templog $tempGrb +tempLog=${data_dir}/temp.$label.log +tempFilt=${data_dir}/temp.$label.filt +rm -f $tempLog $tempGrb grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl @@ -31,7 +32,7 @@ do #echo grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb #grib_get -p step,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb ${tools_dir}/grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l \ - ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb >> ${templog} + ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb >> $tempLog done done done @@ -44,7 +45,7 @@ do #echo grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb #grib_ls -p step,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb ${tools_dir}/grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l \ - ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb >> ${templog} + ${data_dir}/timeRangeIndicator_${i}.grib $tempGrb >> $tempLog done rm -f $tempGrb @@ -52,17 +53,17 @@ rm -f $tempGrb # test added for ifs stepType=max,min ${tools_dir}/grib_set -s stepType=max,startStep=3,endStep=6 ${data_dir}/reduced_gaussian_model_level.grib1 $tempGrb ${tools_dir}/grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l \ - ${data_dir}/reduced_gaussian_model_level.grib1 $tempGrb >> ${templog} + ${data_dir}/reduced_gaussian_model_level.grib1 $tempGrb >> $tempLog rm -f $tempGrb -diff ${data_dir}/step.log ${templog} +diff ${data_dir}/step.log $tempLog -(${tools_dir}/grib_filter ${data_dir}/step_grib1.filter ${data_dir}/timeRangeIndicator_0.grib > ${templog}) 2>$REDIRECT +(${tools_dir}/grib_filter ${data_dir}/step_grib1.filter ${data_dir}/timeRangeIndicator_0.grib > $tempLog) 2>$REDIRECT -diff ${data_dir}/step_grib1.log ${templog} +diff ${data_dir}/step_grib1.log $tempLog -rm -f ${templog} +rm -f $tempLog # GRIB-180 # ------------ @@ -166,10 +167,10 @@ grib_check_key_equals $temp day 7 # Seconds (ignored) # ----------------- -${tools_dir}/grib_ls -s second=9 -n time $grib2_sample 2>$templog +${tools_dir}/grib_ls -s second=9 -n time $grib2_sample 2>$tempLog # Something should have been written to stderr -[ -s $templog ] -grep -q "Truncating time: non-zero seconds.* ignored" $templog +[ -s $tempLog ] +grep -q "Truncating time: non-zero seconds.* ignored" $tempLog # Hour or minute set to 255 # --------------------------- @@ -214,33 +215,50 @@ ECCODES_GRIBEX_MODE_ON=1 ${tools_dir}/grib_set -s stepRange=11-12 $input $temp grib_check_key_equals $temp P1,P2 '0 11' set +e -${tools_dir}/grib_set -s stepRange=11-12 $input $temp 2>$templog +${tools_dir}/grib_set -s stepRange=11-12 $input $temp 2>$tempLog status=$? set -e [ $status -ne 0 ] -grep -q "Unable to set stepRange" $templog +grep -q "Unable to set stepRange" $tempLog # GRIB1: sub-hourly # ----------------- ${tools_dir}/grib_set -s unitOfTimeRange=0,P1=5 $grib1_sample $temp set +e -${tools_dir}/grib_get -p step $temp 2>$templog +${tools_dir}/grib_get -p step $temp 2>$tempLog status=$? set -e [ $status -ne 0 ] -grep -q "unable to represent the step in h" $templog +grep -q "unable to represent the step in h" $tempLog # GRIB1: Unknown timeRangeIndicator ${tools_dir}/grib_set -s timeRangeIndicator=138 $grib1_sample $temp set +e -${tools_dir}/grib_get -p step $temp 2>$templog +${tools_dir}/grib_get -p step $temp 2>$tempLog status=$? set -e [ $status -ne 0 ] -grep -q "Unknown stepType" $templog +grep -q "Unknown stepType" $tempLog +# Several time ranges +# -------------------- +cat >$tempFilt < $tempLog +cat $tempLog +grep -q "255 8 7" $tempLog # Clean up -rm -f $temp $templog +rm -f $temp $tempLog $tempFilt rm -f $grib2File.p8tmp ${grib2File}.tmp x.grib diff --git a/tests/grib_suppressed.sh b/tests/grib_suppressed.sh index 2b8477064..046eebfb5 100755 --- a/tests/grib_suppressed.sh +++ b/tests/grib_suppressed.sh @@ -17,19 +17,6 @@ tempFilt=temp.${label}.filt tempRef=temp.${label}.ref sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl -cat > $tempFilt <$tempErr -status=$? -set -e -[ $status -ne 0 ] - -cat $tempErr - cat > $tempRef < $tempFilt + set +e + ${tools_dir}/grib_filter $tempFilt $sample2 2>$tempErr + status=$? + set -e + [ $status -ne 0 ] + cat $tempErr + diff $tempRef $tempErr +} + +do_tests "" +do_tests ":i" +do_tests ":d" # Clean up diff --git a/tests/grib_to_netcdf.sh b/tests/grib_to_netcdf.sh index c07dc89e9..f13d8475b 100755 --- a/tests/grib_to_netcdf.sh +++ b/tests/grib_to_netcdf.sh @@ -148,7 +148,9 @@ set -e [ $status -ne 0 ] grep -q "Wrong number of fields" $tempText -# Not regular grid + +echo "Not a regular grid ..." +# -------------------------- input=${data_dir}/reduced_gaussian_pressure_level.grib2 set +e ${tools_dir}/grib_to_netcdf -o $tempNetcdf $input > $tempText 2>&1 @@ -158,6 +160,17 @@ set -e grep -q "not on a regular lat/lon grid or on a regular Gaussian grid" $tempText +# ECC-1783: No error message when input file has invalid fields +input=$data_dir/bad.grib +set +e +${tools_dir}/grib_to_netcdf -o $tempNetcdf $input > $tempText 2>&1 +status=$? +set -e +[ $status -ne 0 ] +grep -q "Wrong message length" $tempText + + +# Validity time check export GRIB_TO_NETCDF_CHECKVALIDTIME=0 ${tools_dir}/grib_to_netcdf -o $tempNetcdf $tempGrib [ -f "$tempNetcdf" ] diff --git a/tests/grib_units_bias_factor.sh b/tests/grib_units_bias_factor.sh new file mode 100755 index 000000000..4dbc9db81 --- /dev/null +++ b/tests/grib_units_bias_factor.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_units_bias_factor_test" +outfile=temp.$label.grib + +infiles="${data_dir}/sample.grib2 ${data_dir}/regular_latlon_surface.grib1" +for infile in $infiles; do + #infile=${data_dir}/sample.grib2 + max=`${tools_dir}/grib_get -F%.3f -p max $infile` + [ "$max" = "311.099" ] + + ${tools_dir}/grib_set -rs unitsFactor=1.1,unitsBias=4 $infile $outfile + max=`${tools_dir}/grib_get -F%.3f -p max $outfile` + [ "$max" = "346.209" ] + + ${tools_dir}/grib_set -rs unitsFactor=2 $infile $outfile + max=`${tools_dir}/grib_get -F%.3f -p max $outfile` + [ "$max" = "622.197" ] + + ${tools_dir}/grib_set -rs unitsBias=4 $infile $outfile + max=`${tools_dir}/grib_get -F%.3f -p max $outfile` + [ "$max" = "315.099" ] +done + +if [ $HAVE_JPEG -eq 1 ]; then + infile=${data_dir}/jpeg.grib2 + ${tools_dir}/grib_get -p max -s unitsBias=1.5 $infile $outfile + ${tools_dir}/grib_get -p min -s unitsFactor=2 $infile $outfile + ${tools_dir}/grib_get -p avg -s unitsFactor=1.1,unitsBias=100 $infile $outfile +fi + +# Clean up +rm -f $outfile diff --git a/tests/grib_unpack_subarray.sh b/tests/grib_unpack_subarray.sh index 43bc730d8..3ac3b2530 100755 --- a/tests/grib_unpack_subarray.sh +++ b/tests/grib_unpack_subarray.sh @@ -13,6 +13,9 @@ label="grib_unpack_subarray_test" temp=${label}".grib.tmp" +infile=$data_dir/constant_field.grib2 +$EXEC ${test_dir}/grib_unpack_subarray $infile + infile=$data_dir/sample.grib2 $EXEC ${test_dir}/grib_unpack_subarray $infile diff --git a/tests/grib_update_sections_lengths.cc b/tests/grib_update_sections_lengths.cc new file mode 100644 index 000000000..cda520643 --- /dev/null +++ b/tests/grib_update_sections_lengths.cc @@ -0,0 +1,50 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +int main(int argc, char* argv[]) +{ + grib_handle* h = NULL; + FILE* inf = NULL; + FILE* ouf = NULL; + char* infile = 0; + char* oufile = 0; + int err = 0; + size_t size = 0; + const void* buffer = NULL; + + if (argc < 3) return 1; // prog in out + + infile = argv[1]; + oufile = argv[2]; + + inf = fopen(infile, "rb"); + Assert(inf); + + ouf = fopen(oufile, "wb"); + Assert(ouf); + + while ((h = grib_handle_new_from_file(0, inf, &err)) != NULL) { + grib_update_sections_lengths(h); + GRIB_CHECK(grib_get_message(h, &buffer, &size), 0); + printf("size = %zu\n", size); + if (fwrite(buffer, 1, size, ouf) != size) { + perror(oufile); + exit(1); + } + } + + grib_handle_delete(h); + fclose(inf); + fclose(ouf); + + return 0; +} diff --git a/tests/grib_update_sections_lengths.sh b/tests/grib_update_sections_lengths.sh new file mode 100755 index 000000000..698a8b975 --- /dev/null +++ b/tests/grib_update_sections_lengths.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +label="grib_update_sections_lengths_test" +tempGrib=temp.$label.grib + +gfiles="$data_dir/sample.grib2 $data_dir/missing_field.grib1" +for f in $gfiles; do + $EXEC ${test_dir}/grib_update_sections_lengths $f $tempGrib + ${tools_dir}/grib_compare $f $tempGrib +done + +rm -f $tempGrib diff --git a/tests/grib_util_set_spec.cc b/tests/grib_util_set_spec.cc index 31af1bcb5..e47672868 100644 --- a/tests/grib_util_set_spec.cc +++ b/tests/grib_util_set_spec.cc @@ -132,6 +132,12 @@ static void test_reduced_gg(int remove_local_def, int edition, const char* packi Assert(err == GRIB_ENCODING_ERROR); Assert(!h2); if (h2) exit(1); + + values[0] = -INFINITY; + h2 = grib_util_set_spec(handle, &spec, &packing_spec, set_spec_flags, values, outlen, &err); + Assert(err == GRIB_ENCODING_ERROR); + Assert(!h2); + if (h2) exit(1); #endif } diff --git a/tests/grib_util_set_spec2.cc b/tests/grib_util_set_spec2.cc new file mode 100644 index 000000000..ddd3f1dc5 --- /dev/null +++ b/tests/grib_util_set_spec2.cc @@ -0,0 +1,233 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "eccodes.h" + +static void dump_it(grib_handle* h) +{ + int dump_flags = GRIB_DUMP_FLAG_CODED | GRIB_DUMP_FLAG_OCTET | GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; + grib_dump_content(h, stderr, "wmo", dump_flags, NULL); +} + +// Lambert conformal +static grib_handle* test0() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 4; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB1"); + spec.grid_type = GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL; + spec.Ni = 2; + spec.Nj = 2; + + // packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE; + // packing_spec.bitsPerValue = 16; + // packing_spec.accuracy = GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES; + // packing_spec.packing = GRIB_UTIL_PACKING_USE_PROVIDED; + + grib_handle* finalh = codes_grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// Lambert azimuthal +static grib_handle* test1() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 4; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// HEALPix +static grib_handle* test2() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 4; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB1"); + spec.grid_type = GRIB_UTIL_GRID_SPEC_HEALPIX; + spec.N = 2; + + packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER; + packing_spec.packing = GRIB_UTIL_PACKING_USE_PROVIDED; + packing_spec.editionNumber = 2; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// Spherical harmonics +static grib_handle* test3() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "sh_pl_grib2"); + spec.grid_type = GRIB_UTIL_GRID_SPEC_SH; + spec.truncation = 20; + outlen = 2; + + packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE; + packing_spec.bitsPerValue = 16; + packing_spec.accuracy = GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES; + packing_spec.packing = GRIB_UTIL_PACKING_USE_PROVIDED; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// Polar stereo +static grib_handle* test4() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + //grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC; + outlen = 4; + + packing_spec.extra_settings_count = 1; + packing_spec.extra_settings[0].type = GRIB_TYPE_LONG; + packing_spec.extra_settings[0].name = "tablesVersion"; + packing_spec.extra_settings[0].long_value = 32; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// Regular Gaussian +static grib_handle* test5() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + spec.grid_type = GRIB_UTIL_GRID_SPEC_REGULAR_GG; + spec.Ni = spec.Nj = 2; + outlen = 4; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// Reduced LL +static grib_handle* test6() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + spec.grid_type = GRIB_UTIL_GRID_SPEC_REDUCED_LL; + spec.Nj = 2; + outlen = 4; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +// Unstructured +static grib_handle* test7() +{ + fprintf(stderr, "Doing test %s\n-----------------\n", __func__); + int err = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 4; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + spec.grid_type = GRIB_UTIL_GRID_SPEC_UNSTRUCTURED; + + grib_handle* finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(err == 0); + return finalh; +} + +int main() +{ + typedef grib_handle* (*test_func)(void); + test_func funcs[] = {test0, test1, test2, test3, test4, test5, test6, test7}; + + //grib_handle* (*p[8]) (void) = {test0, test1, test2, test3, test4, test5, test6, test7}; + + const size_t num_tests = sizeof(funcs)/sizeof(funcs[0]); + for (size_t i = 0; i < num_tests; i++) { + grib_handle* result = funcs[i](); + Assert(result); + dump_it(result); + } + return 0; +} diff --git a/tests/grib_util_set_spec2.sh b/tests/grib_util_set_spec2.sh new file mode 100755 index 000000000..fa289d291 --- /dev/null +++ b/tests/grib_util_set_spec2.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.ctest.sh + +export ECCODES_DEBUG=-1 +$EXEC ${test_dir}/grib_util_set_spec2 diff --git a/tests/index_orderby.cc b/tests/index_orderby.cc index f2346fc82..55ff9c2f5 100644 --- a/tests/index_orderby.cc +++ b/tests/index_orderby.cc @@ -10,12 +10,6 @@ #include "grib_api.h" -void usage(char* prog) -{ - printf("usage: %s infile\n", prog); - exit(1); -} - int main(int argc, char* argv[]) { grib_index* index = NULL; @@ -27,7 +21,7 @@ int main(int argc, char* argv[]) size_t lenshortName = 200; int ret = 0, count = 0; - if (argc != 2) usage(argv[0]); + if (argc != 2) return 1; infile = argv[1]; outfile = argv[2]; diff --git a/tests/julian.cc b/tests/julian.cc index 318429e79..559d9883a 100644 --- a/tests/julian.cc +++ b/tests/julian.cc @@ -14,18 +14,14 @@ #define EPSILON 1e-12 #define DBL_EQUAL(a, b) (fabs((a) - (b)) <= (EPSILON)*fabs((a))) -#define BOOL int -#define TRUE 1 -#define FALSE 0 - -static BOOL Check( +static bool Check( const long year1, const long month1, const long day1, const long hour1, const long min1, const long sec1, const long year2, const long month2, const long day2, const long hour2, const long min2, const long sec2) { if (year1 != year2 || month1 != month2 || day1 != day2 || hour1 != hour2 || min1 != min2 || sec1 != sec2) { - return FALSE; + return false; } - return TRUE; + return true; } static void TestDateTime(const long year, const long month, const long day, const long hour, const long min, const long sec) @@ -184,6 +180,7 @@ static void Test3() static void Test4() { const long iyear = 1582; + printf("Test4...\n"); TestDateTime(iyear, 9, 1, 1, 0, 0); TestDateTime(iyear, 9, 2, 1, 0, 0); @@ -215,6 +212,24 @@ static void Test4() */ } +static void Test5() +{ + printf("Test5...\n"); + + // Also see function is_date_valid() + + double jd = 0.0; + long year=2017, month=2, day=29, hour=0, min=0, sec=0; // Feb 2017 had 28 days + long year1, month1, day1, hour1, min1, sec1; + + codes_datetime_to_julian(year, month, day, hour, min, sec, &jd); + codes_julian_to_datetime(jd, &year1, &month1, &day1, &hour1, &min1, &sec1); + + if (Check(year, month, day, hour, min, sec, year1, month1, day1, hour1, min1, sec1)) { + Assert(!"Bad input should have failed checks"); + } +} + int main(int argc, char* argv[]) { Test0(); @@ -222,6 +237,7 @@ int main(int argc, char* argv[]) Test2(); Test3(); Test4(); + Test5(); printf("All OK\n"); return 0; } diff --git a/tests/keys b/tests/keys index 5318a6c8a..ba3aadd43 100644 --- a/tests/keys +++ b/tests/keys @@ -48,525 +48,525 @@ Dy,42 DyInDegrees,43 DyInMetres,44 ECMWF,45 -ECMWF_s,46 -Ensemble_Combinat_Number_0_none_E2,47 -Ensemble_Combinat_Number_0_none_E3,48 -Ensemble_Combinat_Number_0_none_E4,49 -Ensemble_Combination_Number,50 -Ensemble_Identifier,51 -Ensemble_Identifier_E2,52 -Ensemble_Identifier_E3,53 -Ensemble_Identifier_E4,54 -Experiment_Identifier,55 -Extra_Data_FreeFormat_0_none,56 -ExtremeValuesInMaximumRVR1,57 -ExtremeValuesInMaximumRVR2,58 -ExtremeValuesInMaximumRVR3,59 -ExtremeValuesInMaximumRVR4,60 -ExtremeValuesRVR1,61 -ExtremeValuesRVR2,62 -ExtremeValuesRVR3,63 -ExtremeValuesRVR4,64 -FMULTE,65 -FMULTM,66 -FirstLatitude,67 -GDSPresent,68 -GG,69 -GRIB,70 -GRIBEXSection1Problem,71 -GRIBEXShBugPresent,72 -GRIBEX_boustrophedonic,73 -GRIBEditionNumber,74 -GRIB_DEPTH,75 -GRIB_LATITUDE,76 -GRIB_LONGITUDE,77 -GTS,78 -GTSstr,79 -HDF5,80 -HDF5str,81 -HourOfModelVersion,82 -Hour_E2,83 -Hour_E3,84 -Hour_E4,85 -ICEFieldsUsed,86 -ICPLSIZE,87 -II,88 -INBITS,89 -INGRIB,90 -ITERATOR,91 -ITN,92 -J,93 -JS,94 -K,95 -KS,96 -LBC_Initial_Conditions,97 -LIMITS,98 -LLCOSP,99 -LSTCUM,100 -La1,101 -La1InDegrees,102 -La2,103 -La2InDegrees,104 -LaD,105 -LaDInDegrees,106 -LaR,107 -Lap,108 -Lar1,109 -Lar1InDegrees,110 -Lar2,111 -Lar2InDegrees,112 -Latin,113 -Latin1,114 -Latin1InDegrees,115 -Latin2,116 -Latin2InDegrees,117 -Lcx,118 -LcxInMetres,119 -Lcy,120 -LcyInMetres,121 -Less_Than_Or_To_Overall_Distribution,122 -Lo,123 -Lo1,124 -Lo1InDegrees,125 -Lo2,126 -Lo2InDegrees,127 -LoR,128 -LoV,129 -LoVInDegrees,130 -Local_Number_Members_Missing,131 -Local_Number_Members_Missing_E2,132 -Local_Number_Members_Missing_E3,133 -Local_Number_Members_Missing_E4,134 -Local_Number_Members_Possible,135 -Local_Number_Members_Possible_E2,136 -Local_Number_Members_Possible_E3,137 -Local_Number_Members_Possible_E4,138 -Local_Number_Members_Used,139 -Local_Number_Members_Used_E2,140 -Local_Number_Members_Used_E3,141 -Local_Number_Members_Used_E4,142 -Lop,143 -Lor1,144 -Lor1InDegrees,145 -Lor2,146 -Lor2InDegrees,147 -Lux,148 -LuxInMetres,149 -Luy,150 -LuyInMetres,151 -Lx,152 -LxInMetres,153 -Ly,154 -LyInMetres,155 -M,156 -METAR,157 -METARstr,158 -MS,159 -MinuteOfModelVersion,160 -Minute_E2,161 -Minute_E3,162 -Minute_E4,163 -Missing_Model_LBC,164 -Missing_Model_LBC_E2,165 -Missing_Model_LBC_E3,166 -Missing_Model_LBC_E4,167 -Model_Additional_Information,168 -Model_Identifier,169 -Model_LBC_Member_Identifier,170 -MonthOfModelVersion,171 -N,172 -N1,173 -N2,174 -NAT,175 -NB,176 -NC,177 -NC1,178 -NC2,179 -NDSP,180 -NEAREST,181 -NFSP,182 -NG,183 -NH,184 -NINT_LOG10_RITZ,185 -NINT_RITZ_EXP,186 -NL,187 -NP,188 -NR,189 -NRj,190 -NT,191 -NUT,192 -NV,193 -Nassigned,194 -Nb,195 -Ncx,196 -Ncy,197 -Nf,198 -Ni,199 -Nj,200 -Nr,201 -NrInRadiusOfEarth,202 -NrInRadiusOfEarthScaled,203 -Nside,204 -Number_Combination_Ensembles_1_none,205 -Nux,206 -Nuy,207 -Nx,208 -Ny,209 -Original_CodeTable_2_Version_Number,210 -Original_Parameter_Iden_CodeTable2,211 -Original_Parameter_Identifier,212 -P,213 -P1,214 -P2,215 -PLPresent,216 -PUnset,217 -PVPresent,218 -P_INST,219 -P_TACC,220 -P_TAVG,221 -Product_Identifier,222 -RENAME,223 -RVR1_1,224 -RVR2_1,225 -RVR3_1,226 -RVR4_1,227 -SOH,228 -SPD,229 -SecondLatitude,230 -SecondOfModelVersion,231 -Show_Combination_Ensem_E2_0_no_1_yes,232 -Show_Combination_Ensem_E3_0_no_1_yes,233 -Show_Combination_Ensem_E4_0_no_1_yes,234 -Sub-Experiment_Identifier,235 -TAF,236 -TAFstr,237 -TIDE,238 -TS,239 -TScalc,240 -TT,241 -TYPE_AN,242 -TYPE_CF,243 -TYPE_FC,244 -TYPE_FF,245 -TYPE_FX,246 -TYPE_OF,247 -TYPE_OR,248 -TYPE_PF,249 -Threshold_Or_Distribution_0_no_1_yes,250 -Threshold_Or_Distribution_Units,251 -Time_Range_One_E2,252 -Time_Range_One_E3,253 -Time_Range_One_E4,254 -Time_Range_Two_E2,255 -Time_Range_Two_E3,256 -Time_Range_Two_E4,257 -Total_Number_Members_Missing,258 -Total_Number_Members_Possible,259 -Total_Number_Members_Used,260 -Used_Model_LBC,261 -Used_Model_LBC_E2,262 -Used_Model_LBC_E3,263 -Used_Model_LBC_E4,264 -WMO,265 -WRAP,266 -WRAPstr,267 -X1,268 -X1InGridLengths,269 -X2,270 -X2InGridLengths,271 -XR,272 -XRInMetres,273 -Xo,274 -Xp,275 -XpInGridLengths,276 -Y1,277 -Y1InGridLengths,278 -Y2,279 -Y2InGridLengths,280 -YR,281 -YRInMetres,282 -YY,283 -YearOfModelVersion,284 -Yo,285 -Yp,286 -YpInGridLengths,287 -ZLBASE,288 -ZLMULT,289 -_T,290 -_TS,291 -_anoffset,292 -_endStep,293 -_leg_number,294 -_numberOfValues,295 -accumulationInterval,296 -accuracy,297 -accuracyMultipliedByFactor,298 -activity,299 -addEmptySection2,300 -addExtraLocalSection,301 -additionalFlagPresent,302 -additionalParameter,303 -addressOfFileFreeSpaceInfo,304 -aerosolType,305 -aerosolTypeName,306 -aerosolbinnumber,307 -aerosolpacking,308 -alternativeRowScanning,309 -altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius,310 -analysisOffsets,311 -angleDivisor,312 -angleMultiplier,313 -angleOfRotation,314 -angleOfRotationInDegrees,315 -angleOfRotationOfProjection,316 -angleSubdivisions,317 -anoffset,318 -anoffsetFirst,319 -anoffsetFrequency,320 -anoffsetLast,321 -applicationIdentifier,322 -assertion,323 -atmosphericChemicalOrPhysicalConstituentType,324 -attributeOfTile,325 -auxiliary,326 -average,327 -averaging1Flag,328 -averaging2Flag,329 -averagingPeriod,330 -avg,331 -azimuthalWidth,332 -backgroundGeneratingProcessIdentifier,333 -backgroundProcess,334 -band,335 -baseAddress,336 -baseDateEPS,337 -baseDateOfThisLeg,338 -baseTimeEPS,339 -baseTimeOfThisLeg,340 -basicAngleOfTheInitialProductionDomain,341 -beginDayTrend1,342 -beginDayTrend2,343 -beginDayTrend3,344 -beginDayTrend4,345 -beginHourTrend1,346 -beginHourTrend2,347 -beginHourTrend3,348 -beginHourTrend4,349 -beginMinuteTrend1,350 -beginMinuteTrend2,351 -beginMinuteTrend3,352 -beginMinuteTrend4,353 -beginMonthTrend1,354 -beginMonthTrend2,355 -beginMonthTrend3,356 -beginMonthTrend4,357 -beginYearTrend1,358 -beginYearTrend2,359 -beginYearTrend3,360 -beginYearTrend4,361 -biFourierCoefficients,362 -biFourierMakeTemplate,363 -biFourierPackingModeForAxes,364 -biFourierResolutionParameterM,365 -biFourierResolutionParameterN,366 -biFourierResolutionSubSetParameterM,367 -biFourierResolutionSubSetParameterN,368 -biFourierSubTruncationType,369 -biFourierTruncationType,370 -binaryScaleFactor,371 -bitMapIndicator,372 -bitmap,373 -bitmapPresent,374 -bitmapSectionPresent,375 -bitsPerValue,376 -bitsPerValueAndRepack,377 -boot_edition,378 -bottomLevel,379 -boustrophedonic,380 -boustrophedonicOrdering,381 -bufrDataEncoded,382 -bufrHeaderCentre,383 -bufrHeaderSubCentre,384 -bufrTemplate,385 -bufrdcExpandedDescriptors,386 -calendarIdPresent,387 -calendarIdentification,388 -calendarIdentificationTemplateNumber,389 -categories,390 -categoryType,391 -cavokOrVisibility,392 -ccccIdentifiers,393 -ccsdsBlockSize,394 -ccsdsCompressionOptionsMask,395 -ccsdsFlags,396 -ccsdsRsi,397 -ceilingAndVisibilityOK,398 -ceilingAndVisibilityOKTrend1,399 -ceilingAndVisibilityOKTrend2,400 -ceilingAndVisibilityOKTrend3,401 -ceilingAndVisibilityOKTrend4,402 -centralClusterDefinition,403 -centralLongitude,404 -centralLongitudeInDegrees,405 -centralLongitudeInMicrodegrees,406 -centre,407 -centreDescription,408 -centreForLocal,409 -centreForTable2,410 -centreLatitude,411 -centreLatitudeInDegrees,412 -centreLongitude,413 -centreLongitudeInDegrees,414 -centuryOfAnalysis,415 -centuryOfReference,416 -centuryOfReferenceTimeOfData,417 -cfName,418 -cfNameECMF,419 -cfNameLegacyECMF,420 -cfVarName,421 -cfVarNameECMF,422 -cfVarNameLegacyECMF,423 -changeDecimalPrecision,424 -changeIndicatorTrend1,425 -changeIndicatorTrend2,426 -changeIndicatorTrend3,427 -changeIndicatorTrend4,428 -changingPrecision,429 -channel,430 -channelNumber,431 -char,432 -charValues,433 -checkInternalVersion,434 -class,435 -classOfAnalysis,436 -climateDateFrom,437 -climateDateTo,438 -climatologicalRegime,439 -cloudsAbbreviation1,440 -cloudsAbbreviation1Trend1,441 -cloudsAbbreviation1Trend2,442 -cloudsAbbreviation1Trend3,443 -cloudsAbbreviation1Trend4,444 -cloudsAbbreviation2,445 -cloudsAbbreviation2Trend1,446 -cloudsAbbreviation2Trend2,447 -cloudsAbbreviation2Trend3,448 -cloudsAbbreviation2Trend4,449 -cloudsAbbreviation3,450 -cloudsAbbreviation3Trend1,451 -cloudsAbbreviation3Trend2,452 -cloudsAbbreviation3Trend3,453 -cloudsAbbreviation3Trend4,454 -cloudsAbbreviation4,455 -cloudsAbbreviation4Trend1,456 -cloudsAbbreviation4Trend2,457 -cloudsAbbreviation4Trend3,458 -cloudsAbbreviation4Trend4,459 -cloudsBase1,460 -cloudsBase1Trend1,461 -cloudsBase1Trend2,462 -cloudsBase1Trend3,463 -cloudsBase1Trend4,464 -cloudsBase2,465 -cloudsBase2Trend1,466 -cloudsBase2Trend2,467 -cloudsBase2Trend3,468 -cloudsBase2Trend4,469 -cloudsBase3,470 -cloudsBase3Trend1,471 -cloudsBase3Trend2,472 -cloudsBase3Trend3,473 -cloudsBase3Trend4,474 -cloudsBase4,475 -cloudsBase4Trend1,476 -cloudsBase4Trend2,477 -cloudsBase4Trend3,478 -cloudsBase4Trend4,479 -cloudsBaseCoded1,480 -cloudsBaseCoded1Trend1,481 -cloudsBaseCoded1Trend2,482 -cloudsBaseCoded1Trend3,483 -cloudsBaseCoded1Trend4,484 -cloudsBaseCoded2,485 -cloudsBaseCoded2Trend1,486 -cloudsBaseCoded2Trend2,487 -cloudsBaseCoded2Trend3,488 -cloudsBaseCoded2Trend4,489 -cloudsBaseCoded3,490 -cloudsBaseCoded3Trend1,491 -cloudsBaseCoded3Trend2,492 -cloudsBaseCoded3Trend3,493 -cloudsBaseCoded3Trend4,494 -cloudsBaseCoded4,495 -cloudsBaseCoded4Trend1,496 -cloudsBaseCoded4Trend2,497 -cloudsBaseCoded4Trend3,498 -cloudsBaseCoded4Trend4,499 -cloudsCode1,500 -cloudsCode1Trend1,501 -cloudsCode1Trend2,502 -cloudsCode1Trend3,503 -cloudsCode1Trend4,504 -cloudsCode2,505 -cloudsCode2Trend1,506 -cloudsCode2Trend2,507 -cloudsCode2Trend3,508 -cloudsCode2Trend4,509 -cloudsCode3,510 -cloudsCode3Trend1,511 -cloudsCode3Trend2,512 -cloudsCode3Trend3,513 -cloudsCode3Trend4,514 -cloudsCode4,515 -cloudsCode4Trend1,516 -cloudsCode4Trend2,517 -cloudsCode4Trend3,518 -cloudsCode4Trend4,519 -cloudsTitle1,520 -cloudsTitle1Trend1,521 -cloudsTitle1Trend2,522 -cloudsTitle1Trend3,523 -cloudsTitle1Trend4,524 -cloudsTitle2,525 -cloudsTitle2Trend1,526 -cloudsTitle2Trend2,527 -cloudsTitle2Trend3,528 -cloudsTitle2Trend4,529 -cloudsTitle3,530 -cloudsTitle3Trend1,531 -cloudsTitle3Trend2,532 -cloudsTitle3Trend3,533 -cloudsTitle3Trend4,534 -cloudsTitle4,535 -cloudsTitle4Trend1,536 -cloudsTitle4Trend2,537 -cloudsTitle4Trend3,538 -cloudsTitle4Trend4,539 -clusterIdentifier,540 -clusterMember1,541 -clusterMember10,542 -clusterMember2,543 -clusterMember3,544 -clusterMember4,545 -clusterMember5,546 -clusterMember6,547 -clusterMember7,548 -clusterMember8,549 -clusterMember9,550 -clusterNumber,551 -clusterSize,552 -clusteringDomain,553 -clusteringMethod,554 -clutterFilterIndicator,555 -cnmc_cmcc,556 -cnmc_isac,557 -codeFigure,558 -codeType,559 -codedNumberOfFirstOrderPackedValues,560 -codedNumberOfGroups,561 -codedValues,562 -coefsFirst,563 -coefsSecond,564 +Ensemble_Combinat_Number_0_none_E2,46 +Ensemble_Combinat_Number_0_none_E3,47 +Ensemble_Combinat_Number_0_none_E4,48 +Ensemble_Combination_Number,49 +Ensemble_Identifier,50 +Ensemble_Identifier_E2,51 +Ensemble_Identifier_E3,52 +Ensemble_Identifier_E4,53 +Experiment_Identifier,54 +Extra_Data_FreeFormat_0_none,55 +ExtremeValuesInMaximumRVR1,56 +ExtremeValuesInMaximumRVR2,57 +ExtremeValuesInMaximumRVR3,58 +ExtremeValuesInMaximumRVR4,59 +ExtremeValuesRVR1,60 +ExtremeValuesRVR2,61 +ExtremeValuesRVR3,62 +ExtremeValuesRVR4,63 +FMULTE,64 +FMULTM,65 +FirstLatitude,66 +GDSPresent,67 +GG,68 +GRIB,69 +GRIBEXSection1Problem,70 +GRIBEXShBugPresent,71 +GRIBEX_boustrophedonic,72 +GRIBEditionNumber,73 +GRIB_DEPTH,74 +GRIB_LATITUDE,75 +GRIB_LONGITUDE,76 +GTS,77 +GTSstr,78 +HDF5,79 +HDF5str,80 +HourOfModelVersion,81 +Hour_E2,82 +Hour_E3,83 +Hour_E4,84 +ICEFieldsUsed,85 +ICPLSIZE,86 +II,87 +INBITS,88 +INGRIB,89 +ITERATOR,90 +ITN,91 +J,92 +JS,93 +K,94 +KS,95 +LBC_Initial_Conditions,96 +LIMITS,97 +LLCOSP,98 +LSTCUM,99 +La1,100 +La1InDegrees,101 +La2,102 +La2InDegrees,103 +LaD,104 +LaDInDegrees,105 +LaR,106 +Lap,107 +Lar1,108 +Lar1InDegrees,109 +Lar2,110 +Lar2InDegrees,111 +Latin,112 +Latin1,113 +Latin1InDegrees,114 +Latin2,115 +Latin2InDegrees,116 +Lcx,117 +LcxInMetres,118 +Lcy,119 +LcyInMetres,120 +Less_Than_Or_To_Overall_Distribution,121 +Lo,122 +Lo1,123 +Lo1InDegrees,124 +Lo2,125 +Lo2InDegrees,126 +LoR,127 +LoV,128 +LoVInDegrees,129 +Local_Number_Members_Missing,130 +Local_Number_Members_Missing_E2,131 +Local_Number_Members_Missing_E3,132 +Local_Number_Members_Missing_E4,133 +Local_Number_Members_Possible,134 +Local_Number_Members_Possible_E2,135 +Local_Number_Members_Possible_E3,136 +Local_Number_Members_Possible_E4,137 +Local_Number_Members_Used,138 +Local_Number_Members_Used_E2,139 +Local_Number_Members_Used_E3,140 +Local_Number_Members_Used_E4,141 +Lop,142 +Lor1,143 +Lor1InDegrees,144 +Lor2,145 +Lor2InDegrees,146 +Lux,147 +LuxInMetres,148 +Luy,149 +LuyInMetres,150 +Lx,151 +LxInMetres,152 +Ly,153 +LyInMetres,154 +M,155 +METAR,156 +METARstr,157 +MS,158 +MinuteOfModelVersion,159 +Minute_E2,160 +Minute_E3,161 +Minute_E4,162 +Missing_Model_LBC,163 +Missing_Model_LBC_E2,164 +Missing_Model_LBC_E3,165 +Missing_Model_LBC_E4,166 +Model_Additional_Information,167 +Model_Identifier,168 +Model_LBC_Member_Identifier,169 +MonthOfModelVersion,170 +N,171 +N1,172 +N2,173 +NAT,174 +NB,175 +NC,176 +NC1,177 +NC2,178 +NDSP,179 +NEAREST,180 +NFSP,181 +NG,182 +NH,183 +NINT_LOG10_RITZ,184 +NINT_RITZ_EXP,185 +NL,186 +NP,187 +NR,188 +NRj,189 +NT,190 +NUT,191 +NV,192 +Nassigned,193 +Nb,194 +Ncx,195 +Ncy,196 +Nf,197 +Ni,198 +Nj,199 +Nr,200 +NrInRadiusOfEarth,201 +NrInRadiusOfEarthScaled,202 +Nside,203 +Number_Combination_Ensembles_1_none,204 +Nux,205 +Nuy,206 +Nx,207 +Ny,208 +Original_CodeTable_2_Version_Number,209 +Original_Parameter_Iden_CodeTable2,210 +Original_Parameter_Identifier,211 +P,212 +P1,213 +P2,214 +PLPresent,215 +PUnset,216 +PVPresent,217 +P_INST,218 +P_TACC,219 +P_TAVG,220 +Product_Identifier,221 +RENAME,222 +RVR1_1,223 +RVR2_1,224 +RVR3_1,225 +RVR4_1,226 +SOH,227 +SPD,228 +SecondLatitude,229 +SecondOfModelVersion,230 +Show_Combination_Ensem_E2_0_no_1_yes,231 +Show_Combination_Ensem_E3_0_no_1_yes,232 +Show_Combination_Ensem_E4_0_no_1_yes,233 +Sub-Experiment_Identifier,234 +TAF,235 +TAFstr,236 +TIDE,237 +TS,238 +TScalc,239 +TT,240 +TYPE_AN,241 +TYPE_CF,242 +TYPE_FC,243 +TYPE_FF,244 +TYPE_FX,245 +TYPE_OF,246 +TYPE_OR,247 +TYPE_PF,248 +Threshold_Or_Distribution_0_no_1_yes,249 +Threshold_Or_Distribution_Units,250 +Time_Range_One_E2,251 +Time_Range_One_E3,252 +Time_Range_One_E4,253 +Time_Range_Two_E2,254 +Time_Range_Two_E3,255 +Time_Range_Two_E4,256 +Total_Number_Members_Missing,257 +Total_Number_Members_Possible,258 +Total_Number_Members_Used,259 +Used_Model_LBC,260 +Used_Model_LBC_E2,261 +Used_Model_LBC_E3,262 +Used_Model_LBC_E4,263 +WMO,264 +WRAP,265 +WRAPstr,266 +X1,267 +X1InGridLengths,268 +X2,269 +X2InGridLengths,270 +XR,271 +XRInMetres,272 +Xo,273 +Xp,274 +XpInGridLengths,275 +Y1,276 +Y1InGridLengths,277 +Y2,278 +Y2InGridLengths,279 +YR,280 +YRInMetres,281 +YY,282 +YearOfModelVersion,283 +Yo,284 +Yp,285 +YpInGridLengths,286 +ZLBASE,287 +ZLMULT,288 +_T,289 +_TS,290 +_anoffset,291 +_endStep,292 +_leg_number,293 +_numberOfValues,294 +accumulationInterval,295 +accuracy,296 +accuracyMultipliedByFactor,297 +activity,298 +addEmptySection2,299 +addExtraLocalSection,300 +additionalFlagPresent,301 +additionalParameter,302 +addressOfFileFreeSpaceInfo,303 +aerosolType,304 +aerosolTypeName,305 +aerosolbinnumber,306 +aerosolpacking,307 +alternativeRowScanning,308 +altitudeOfTheCameraFromTheEarthsCentreMeasuredInUnitsOfTheEarthsRadius,309 +analysisOffsets,310 +angleDivisor,311 +angleMultiplier,312 +angleOfRotation,313 +angleOfRotationInDegrees,314 +angleOfRotationOfProjection,315 +angleSubdivisions,316 +anoffset,317 +anoffsetFirst,318 +anoffsetFrequency,319 +anoffsetLast,320 +applicationIdentifier,321 +assertion,322 +atmosphericChemicalOrPhysicalConstituentType,323 +attributeOfTile,324 +auxiliary,325 +average,326 +averaging1Flag,327 +averaging2Flag,328 +averagingPeriod,329 +avg,330 +azimuthalWidth,331 +backgroundGeneratingProcessIdentifier,332 +backgroundProcess,333 +band,334 +baseAddress,335 +baseDateEPS,336 +baseDateOfThisLeg,337 +baseTimeEPS,338 +baseTimeOfThisLeg,339 +basicAngleOfTheInitialProductionDomain,340 +beginDayTrend1,341 +beginDayTrend2,342 +beginDayTrend3,343 +beginDayTrend4,344 +beginHourTrend1,345 +beginHourTrend2,346 +beginHourTrend3,347 +beginHourTrend4,348 +beginMinuteTrend1,349 +beginMinuteTrend2,350 +beginMinuteTrend3,351 +beginMinuteTrend4,352 +beginMonthTrend1,353 +beginMonthTrend2,354 +beginMonthTrend3,355 +beginMonthTrend4,356 +beginYearTrend1,357 +beginYearTrend2,358 +beginYearTrend3,359 +beginYearTrend4,360 +biFourierCoefficients,361 +biFourierMakeTemplate,362 +biFourierPackingModeForAxes,363 +biFourierResolutionParameterM,364 +biFourierResolutionParameterN,365 +biFourierResolutionSubSetParameterM,366 +biFourierResolutionSubSetParameterN,367 +biFourierSubTruncationType,368 +biFourierTruncationType,369 +binaryScaleFactor,370 +bitMapIndicator,371 +bitmap,372 +bitmapPresent,373 +bitmapSectionPresent,374 +bitsPerValue,375 +bitsPerValueAndRepack,376 +boot_edition,377 +bottomLevel,378 +boustrophedonic,379 +boustrophedonicOrdering,380 +bufrDataEncoded,381 +bufrHeaderCentre,382 +bufrHeaderSubCentre,383 +bufrTemplate,384 +bufrdcExpandedDescriptors,385 +calendarIdPresent,386 +calendarIdentification,387 +calendarIdentificationTemplateNumber,388 +categories,389 +categoryType,390 +cavokOrVisibility,391 +ccccIdentifiers,392 +ccsdsBlockSize,393 +ccsdsCompressionOptionsMask,394 +ccsdsFlags,395 +ccsdsRsi,396 +ceilingAndVisibilityOK,397 +ceilingAndVisibilityOKTrend1,398 +ceilingAndVisibilityOKTrend2,399 +ceilingAndVisibilityOKTrend3,400 +ceilingAndVisibilityOKTrend4,401 +centralClusterDefinition,402 +centralLongitude,403 +centralLongitudeInDegrees,404 +centralLongitudeInMicrodegrees,405 +centre,406 +centreDescription,407 +centreForLocal,408 +centreForTable2,409 +centreLatitude,410 +centreLatitudeInDegrees,411 +centreLongitude,412 +centreLongitudeInDegrees,413 +centuryOfAnalysis,414 +centuryOfReference,415 +centuryOfReferenceTimeOfData,416 +cfName,417 +cfNameECMF,418 +cfNameLegacyECMF,419 +cfVarName,420 +cfVarNameECMF,421 +cfVarNameLegacyECMF,422 +changeDecimalPrecision,423 +changeIndicatorTrend1,424 +changeIndicatorTrend2,425 +changeIndicatorTrend3,426 +changeIndicatorTrend4,427 +changingPrecision,428 +channel,429 +channelNumber,430 +char,431 +charValues,432 +checkInternalVersion,433 +class,434 +classOfAnalysis,435 +climateDateFrom,436 +climateDateTo,437 +climatologicalRegime,438 +cloudsAbbreviation1,439 +cloudsAbbreviation1Trend1,440 +cloudsAbbreviation1Trend2,441 +cloudsAbbreviation1Trend3,442 +cloudsAbbreviation1Trend4,443 +cloudsAbbreviation2,444 +cloudsAbbreviation2Trend1,445 +cloudsAbbreviation2Trend2,446 +cloudsAbbreviation2Trend3,447 +cloudsAbbreviation2Trend4,448 +cloudsAbbreviation3,449 +cloudsAbbreviation3Trend1,450 +cloudsAbbreviation3Trend2,451 +cloudsAbbreviation3Trend3,452 +cloudsAbbreviation3Trend4,453 +cloudsAbbreviation4,454 +cloudsAbbreviation4Trend1,455 +cloudsAbbreviation4Trend2,456 +cloudsAbbreviation4Trend3,457 +cloudsAbbreviation4Trend4,458 +cloudsBase1,459 +cloudsBase1Trend1,460 +cloudsBase1Trend2,461 +cloudsBase1Trend3,462 +cloudsBase1Trend4,463 +cloudsBase2,464 +cloudsBase2Trend1,465 +cloudsBase2Trend2,466 +cloudsBase2Trend3,467 +cloudsBase2Trend4,468 +cloudsBase3,469 +cloudsBase3Trend1,470 +cloudsBase3Trend2,471 +cloudsBase3Trend3,472 +cloudsBase3Trend4,473 +cloudsBase4,474 +cloudsBase4Trend1,475 +cloudsBase4Trend2,476 +cloudsBase4Trend3,477 +cloudsBase4Trend4,478 +cloudsBaseCoded1,479 +cloudsBaseCoded1Trend1,480 +cloudsBaseCoded1Trend2,481 +cloudsBaseCoded1Trend3,482 +cloudsBaseCoded1Trend4,483 +cloudsBaseCoded2,484 +cloudsBaseCoded2Trend1,485 +cloudsBaseCoded2Trend2,486 +cloudsBaseCoded2Trend3,487 +cloudsBaseCoded2Trend4,488 +cloudsBaseCoded3,489 +cloudsBaseCoded3Trend1,490 +cloudsBaseCoded3Trend2,491 +cloudsBaseCoded3Trend3,492 +cloudsBaseCoded3Trend4,493 +cloudsBaseCoded4,494 +cloudsBaseCoded4Trend1,495 +cloudsBaseCoded4Trend2,496 +cloudsBaseCoded4Trend3,497 +cloudsBaseCoded4Trend4,498 +cloudsCode1,499 +cloudsCode1Trend1,500 +cloudsCode1Trend2,501 +cloudsCode1Trend3,502 +cloudsCode1Trend4,503 +cloudsCode2,504 +cloudsCode2Trend1,505 +cloudsCode2Trend2,506 +cloudsCode2Trend3,507 +cloudsCode2Trend4,508 +cloudsCode3,509 +cloudsCode3Trend1,510 +cloudsCode3Trend2,511 +cloudsCode3Trend3,512 +cloudsCode3Trend4,513 +cloudsCode4,514 +cloudsCode4Trend1,515 +cloudsCode4Trend2,516 +cloudsCode4Trend3,517 +cloudsCode4Trend4,518 +cloudsTitle1,519 +cloudsTitle1Trend1,520 +cloudsTitle1Trend2,521 +cloudsTitle1Trend3,522 +cloudsTitle1Trend4,523 +cloudsTitle2,524 +cloudsTitle2Trend1,525 +cloudsTitle2Trend2,526 +cloudsTitle2Trend3,527 +cloudsTitle2Trend4,528 +cloudsTitle3,529 +cloudsTitle3Trend1,530 +cloudsTitle3Trend2,531 +cloudsTitle3Trend3,532 +cloudsTitle3Trend4,533 +cloudsTitle4,534 +cloudsTitle4Trend1,535 +cloudsTitle4Trend2,536 +cloudsTitle4Trend3,537 +cloudsTitle4Trend4,538 +clusterIdentifier,539 +clusterMember1,540 +clusterMember10,541 +clusterMember2,542 +clusterMember3,543 +clusterMember4,544 +clusterMember5,545 +clusterMember6,546 +clusterMember7,547 +clusterMember8,548 +clusterMember9,549 +clusterNumber,550 +clusterSize,551 +clusteringDomain,552 +clusteringMethod,553 +clutterFilterIndicator,554 +cnmc_cmcc,555 +cnmc_isac,556 +codeFigure,557 +codeType,558 +codedNumberOfFirstOrderPackedValues,559 +codedNumberOfGroups,560 +codedValues,561 +coefsFirst,562 +coefsSecond,563 +combinationOfAttributesOfTile,564 commonBlock,565 complexPacking,566 componentIndex,567 @@ -690,92 +690,92 @@ defaultStepUnits,684 defaultTypeOfLevel,685 default_max_val,686 default_min_val,687 -default_step_units,688 -definitionFilesVersion,689 -deleteCalendarId,690 -deleteExtraLocalSection,691 -deleteLocalDefinition,692 -deletePV,693 -derivedForecast,694 -destineLocalVersion,695 -destineOrigin,696 -destineSection,697 -dewPointTemperature,698 -diagnostic,699 -diagnosticNumber,700 -diffInDays,701 -diffInHours,702 -dimension,703 -dimensionNumber,704 -dimensionType,705 -direction,706 -directionNumber,707 -directionOfVariation,708 -directionScalingFactor,709 -dirty_statistics,710 -disableGrib1LocalSection,711 -discipline,712 -distanceFromTubeToEnsembleMean,713 -distinctLatitudes,714 -distinctLongitudes,715 -doExtractArea,716 -doExtractDateTime,717 -doExtractSubsets,718 -doSimpleThinning,719 -domain,720 -driverInformationBlockAddress,721 -dummy,722 -dummy1,723 -dummy2,724 -dummyc,725 -dx,726 -dy,727 -earthIsOblate,728 -earthMajorAxis,729 -earthMajorAxisInMetres,730 -earthMinorAxis,731 -earthMinorAxisInMetres,732 -eastLongitudeOfCluster,733 -eastLongitudeOfDomainOfTubing,734 -easternLongitudeOfClusterDomain,735 -easternLongitudeOfDomain,736 -ecpt_model,737 -ed,738 -edition,739 -editionNumber,740 -efas_model,741 -efiOrder,742 -eight,743 -elementsTable,744 -elevation,745 -eleven,746 -endDayTrend1,747 -endDayTrend2,748 -endDayTrend3,749 -endDayTrend4,750 -endDescriptors,751 -endGridDefinition,752 -endHourTrend1,753 -endHourTrend2,754 -endHourTrend3,755 -endHourTrend4,756 -endMark,757 -endMinuteTrend1,758 -endMinuteTrend2,759 -endMinuteTrend3,760 -endMinuteTrend4,761 -endMonthTrend1,762 -endMonthTrend2,763 -endMonthTrend3,764 -endMonthTrend4,765 -endOfFileAddress,766 -endOfHeadersMarker,767 -endOfInterval,768 -endOfMessage,769 -endOfProduct,770 -endOfRange,771 -endStep,772 -endStepInHours,773 +definitionFilesVersion,688 +deleteCalendarId,689 +deleteExtraLocalSection,690 +deleteLocalDefinition,691 +deletePV,692 +derivedForecast,693 +destineLocalVersion,694 +destineOrigin,695 +destineSection,696 +dewPointTemperature,697 +diagnostic,698 +diagnosticNumber,699 +diffInDays,700 +diffInHours,701 +dimension,702 +dimensionNumber,703 +dimensionType,704 +direction,705 +directionNumber,706 +directionOfVariation,707 +directionScalingFactor,708 +dirty_statistics,709 +disableGrib1LocalSection,710 +discipline,711 +distanceFromTubeToEnsembleMean,712 +distinctLatitudes,713 +distinctLongitudes,714 +doExtractArea,715 +doExtractDateTime,716 +doExtractSubsets,717 +doSimpleThinning,718 +domain,719 +driverInformationBlockAddress,720 +dummy,721 +dummy1,722 +dummy2,723 +dummyc,724 +dx,725 +dy,726 +earthIsOblate,727 +earthMajorAxis,728 +earthMajorAxisInMetres,729 +earthMinorAxis,730 +earthMinorAxisInMetres,731 +eastLongitudeOfCluster,732 +eastLongitudeOfDomainOfTubing,733 +easternLongitudeOfClusterDomain,734 +easternLongitudeOfDomain,735 +ecpt_model,736 +ed,737 +edition,738 +editionNumber,739 +efas_model,740 +efiOrder,741 +eight,742 +elementsTable,743 +elevation,744 +eleven,745 +endDayTrend1,746 +endDayTrend2,747 +endDayTrend3,748 +endDayTrend4,749 +endDescriptors,750 +endGridDefinition,751 +endHourTrend1,752 +endHourTrend2,753 +endHourTrend3,754 +endHourTrend4,755 +endMark,756 +endMinuteTrend1,757 +endMinuteTrend2,758 +endMinuteTrend3,759 +endMinuteTrend4,760 +endMonthTrend1,761 +endMonthTrend2,762 +endMonthTrend3,763 +endMonthTrend4,764 +endOfFileAddress,765 +endOfHeadersMarker,766 +endOfInterval,767 +endOfMessage,768 +endOfProduct,769 +endOfRange,770 +endStep,771 +endStepInHours,772 +endStepUnit,773 endTimeStep,774 endYearTrend1,775 endYearTrend2,776 @@ -887,1634 +887,1654 @@ flagShowingPostAuxiliaryArrayInUse,881 flags,882 floatVal,883 floatValues,884 -forecastLeadTime,885 -forecastMonth,886 -forecastOrSingularVectorNumber,887 -forecastPeriod,888 -forecastPeriodFrom,889 -forecastPeriodTo,890 -forecastProbabilityNumber,891 -forecastSteps,892 -forecastTime,893 -forecastperiod,894 -formatForDoubles,895 -formatForLongs,896 -formatVersionMajorNumber,897 -formatVersionMinorNumber,898 -freeFormData,899 -frequency,900 -frequencyNumber,901 -frequencyScalingFactor,902 -functionCode,903 -g,904 -g1conceptsLocalDirAll,905 -g1conceptsMasterDir,906 -g2grid,907 -gaussianGridName,908 -genVertHeightCoords,909 -generalExtended2ordr,910 -generatingProcessIdentificationNumber,911 -generatingProcessIdentifier,912 -generatingProcessTemplate,913 -generatingProcessTemplateNumber,914 -generation,915 -getNumberOfValues,916 -gg,917 -global,918 -globalDomain,919 -grib1divider,920 -grib2LocalSectionNumber,921 -grib2LocalSectionPresent,922 -grib2divider,923 -grib3divider,924 -gribDataQualityChecks,925 -gribMasterTablesVersionNumber,926 -gribTablesVersionNo,927 -grid,928 -gridCoordinate,929 -gridDefinition,930 -gridDefinitionDescription,931 -gridDefinitionSection,932 -gridDefinitionTemplateNumber,933 -gridDescriptionSectionPresent,934 -gridName,935 -gridPointPosition,936 -gridSpecification,937 -gridType,938 -groupInternalNodeK,939 -groupLeafNodeK,940 -groupLengths,941 -groupSplitting,942 -groupSplittingMethodUsed,943 -groupWidth,944 -groupWidths,945 -gts_CCCC,946 -gts_TTAAii,947 -gts_ddhh00,948 -gts_header,949 -halfByte,950 -hdate,951 -headersOnly,952 -heightLevelName,953 -heightOrPressureOfLevel,954 -heightPressureEtcOfLevels,955 -hideThis,956 -hook_post_meta_data,957 -horizontalCoordinateDefinition,958 -horizontalCoordinateSupplement,959 -horizontalDimensionProcessed,960 -horizontalDomainTemplate,961 -horizontalDomainTemplateNumber,962 -hour,963 -hourOfAnalysis,964 -hourOfEndOfOverallTimeInterval,965 -hourOfForecast,966 -hourOfForecastUsedInLocalTime,967 -hourOfModelVersion,968 -hourOfReference,969 -hourOfStartOfReferencePeriod,970 -hoursAfterDataCutoff,971 -hoursAfterReferenceTimeOfDataCutoff,972 -hundred,973 -iDirectionIncrement,974 -iDirectionIncrementGiven,975 -iDirectionIncrementGridLength,976 -iDirectionIncrementInDegrees,977 -iIncrement,978 -iScansNegatively,979 -iScansPositively,980 -ident,981 -identificationNumber,982 -identificationOfOriginatingGeneratingCentre,983 -identificationOfProject,984 -identifier,985 -ieeeFloats,986 -ifsParam,987 -ijDirectionIncrementGiven,988 -implementationDateOfModelCycle,989 -incrementOfLengths,990 -indexTemplate,991 -indexTemplateNumber,992 -indexedStorageInternalNodeK,993 -indexingDate,994 -indexingTime,995 -indexingTimeHH,996 -indexingTimeHHMM,997 -indexingTimeMM,998 -indicatorOfParameter,999 -indicatorOfTypeOfLevel,1000 -indicatorOfUnitForForecastTime,1001 -indicatorOfUnitForTimeIncrement,1002 -indicatorOfUnitForTimeRange,1003 -indicatorOfUnitForTimeRangeForReferencePeriod,1004 -indicatorOfUnitOfTimeRange,1005 -inputDataPresentIndicator,1006 -inputDelayedDescriptorReplicationFactor,1007 -inputExtendedDelayedDescriptorReplicationFactor,1008 -inputOriginatingCentre,1009 -inputOverriddenReferenceValues,1010 -inputProcessIdentifier,1011 -inputShortDelayedDescriptorReplicationFactor,1012 -instrument,1013 -instrumentIdentifier,1014 -instrumentType,1015 -integerPointValues,1016 -integerScaleFactor,1017 -integerScalingFactorAppliedToDirections,1018 -integerScalingFactorAppliedToFrequencies,1019 -integerValues,1020 -internalVersion,1021 -internationalDataSubCategory,1022 -interpretationOfNumberOfPoints,1023 -intervalBetweenTimes,1024 -isAccumulation,1025 -isAuto,1026 -isCavok,1027 -isCavokTrend1,1028 -isCavokTrend2,1029 -isCavokTrend3,1030 -isCavokTrend4,1031 -isConstant,1032 -isCorrection,1033 -isEPS,1034 -isEps,1035 -isFillup,1036 -isGridded,1037 -isHindcast,1038 -isOctahedral,1039 -isRotatedGrid,1040 -isSatellite,1041 -isSatelliteType,1042 -isSens,1043 -isSpectral,1044 -is_aerosol,1045 -is_aerosol_optical,1046 -is_chemical,1047 -is_chemical_distfn,1048 -is_chemical_srcsink,1049 -is_localtime,1050 -is_ocean2d_param,1051 -is_ocean3d_param,1052 -is_uerra,1053 -isectionNumber2,1054 -isectionNumber3,1055 -isectionNumber4,1056 -isotopeIdentificationNumber,1057 -iteration,1058 -iterationNumber,1059 -iteratorDisableUnrotate,1060 -jDirectionIncrement,1061 -jDirectionIncrementGiven,1062 -jDirectionIncrementGridLength,1063 -jDirectionIncrementInDegrees,1064 -jIncrement,1065 -jPointsAreConsecutive,1066 -jScansNegatively,1067 -jScansPositively,1068 -jdLocal,1069 -jdSelected,1070 -julianDay,1071 -julianForecastDay,1072 -keyData,1073 -keyMore,1074 -keySat,1075 -kindOfProduct,1076 -kurt,1077 -kurtosis,1078 -lBB,1079 -landtype,1080 -laplacianOperator,1081 -laplacianOperatorIsSet,1082 -laplacianScalingFactor,1083 -laplacianScalingFactorUnset,1084 -lastMonthUsedToBuildClimateMonth1,1085 -lastMonthUsedToBuildClimateMonth2,1086 -latLonValues,1087 -latitude,1088 -latitudeFirstInDegrees,1089 -latitudeLastInDegrees,1090 -latitudeLongitudeValues,1091 -latitudeOfCentralPointInClusterDomain,1092 -latitudeOfCentrePoint,1093 -latitudeOfCentrePointInDegrees,1094 -latitudeOfFirstGridPoint,1095 -latitudeOfFirstGridPointInDegrees,1096 -latitudeOfGridPoints,1097 -latitudeOfIcosahedronPole,1098 -latitudeOfLastGridPoint,1099 -latitudeOfLastGridPointInDegrees,1100 -latitudeOfNorthWestCornerOfArea,1101 -latitudeOfReferencePoint,1102 -latitudeOfReferencePointInDegrees,1103 -latitudeOfSouthEastCornerOfArea,1104 -latitudeOfSouthernPole,1105 -latitudeOfSouthernPoleInDegrees,1106 -latitudeOfStretchingPole,1107 -latitudeOfStretchingPoleInDegrees,1108 -latitudeOfSubSatellitePoint,1109 -latitudeOfSubSatellitePointInDegrees,1110 -latitudeOfTangencyPoint,1111 -latitudeOfThePoleOfStretching,1112 -latitudeOfThePolePoint,1113 -latitudeOfThePolePointInDegrees,1114 -latitudeOfTheSouthernPoleOfProjection,1115 -latitudeSexagesimal,1116 -latitudeWhereDxAndDyAreSpecified,1117 -latitudeWhereDxAndDyAreSpecifiedInDegrees,1118 -latitudes,1119 -latitudesList,1120 -latitudinalDirectionGridLength,1121 -lcwfvSuiteName,1122 -leadtime,1123 -legBaseDate,1124 -legBaseTime,1125 -legNumber,1126 -legacyGaussSubarea,1127 -lengthDescriptors,1128 -lengthIncrementForTheGroupLengths,1129 -lengthOf4DvarWindow,1130 -lengthOfHeaders,1131 -lengthOfIndexTemplate,1132 -lengthOfMessage,1133 -lengthOfOriginatorLocalTemplate,1134 -lengthOfProjectLocalTemplate,1135 -lengthOfTimeRange,1136 -lengthOfTimeRangeForReferencePeriod,1137 -lev,1138 -levTypeName,1139 -level,1140 -levelIndicator,1141 -levelType,1142 -levelValues,1143 -level_value_list,1144 -levelist,1145 -levels,1146 -levtype,1147 -libraryVersion,1148 -listMembersMissing,1149 -listMembersMissing2,1150 -listMembersMissing3,1151 -listMembersMissing4,1152 -listMembersUsed,1153 -listMembersUsed2,1154 -listMembersUsed3,1155 -listMembersUsed4,1156 -listOfContributingSpectralBands,1157 -listOfDistributionFunctionParameter,1158 -listOfEnsembleForecastNumbers,1159 -listOfModelIdentifiers,1160 -listOfParametersUsedForClustering,1161 -listOfScaledFrequencies,1162 -listOfWaveDirectionSequenceParameters,1163 -listOfWaveFrequencySequenceParameters,1164 -local,1165 -localDate,1166 -localDateTime,1167 -localDay,1168 -localDecimalScaleFactor,1169 -localDefNumberOne,1170 -localDefNumberTwo,1171 -localDefinition,1172 -localDefinitionNumber,1173 -localDir,1174 -localExtensionPadding,1175 -localFlag,1176 -localFlagLatestVersion,1177 -localHour,1178 -localLatitude,1179 -localLatitude1,1180 -localLatitude2,1181 -localLongitude,1182 -localLongitude1,1183 -localLongitude2,1184 -localMinute,1185 -localMonth,1186 -localNumberOfObservations,1187 -localSecond,1188 -localSection,1189 -localSectionPresent,1190 -localTablesVersion,1191 -localTablesVersionNumber,1192 -localTime,1193 -localTimeForecastList,1194 -localTimeMethod,1195 -localUsePresent,1196 -localYear,1197 -local_padding,1198 -local_use,1199 -logTransform,1200 -longitude,1201 -longitudeFirstInDegrees,1202 -longitudeLastInDegrees,1203 -longitudeOfCentralPointInClusterDomain,1204 -longitudeOfCentrePoint,1205 -longitudeOfCentrePointInDegrees,1206 -longitudeOfFirstDiamondCenterLine,1207 -longitudeOfFirstDiamondCentreLine,1208 -longitudeOfFirstDiamondCentreLineInDegrees,1209 -longitudeOfFirstGridPoint,1210 -longitudeOfFirstGridPointInDegrees,1211 -longitudeOfGridPoints,1212 -longitudeOfIcosahedronPole,1213 -longitudeOfLastGridPoint,1214 -longitudeOfLastGridPointInDegrees,1215 -longitudeOfNorthWestCornerOfArea,1216 -longitudeOfReferencePoint,1217 -longitudeOfReferencePointInDegrees,1218 -longitudeOfSouthEastCornerOfArea,1219 -longitudeOfSouthernPole,1220 -longitudeOfSouthernPoleInDegrees,1221 -longitudeOfStretchingPole,1222 -longitudeOfStretchingPoleInDegrees,1223 -longitudeOfSubSatellitePoint,1224 -longitudeOfSubSatellitePointInDegrees,1225 -longitudeOfTangencyPoint,1226 -longitudeOfThePoleOfStretching,1227 -longitudeOfThePolePoint,1228 -longitudeOfThePolePointInDegrees,1229 -longitudeOfTheSouthernPoleOfProjection,1230 -longitudeSexagesimal,1231 -longitudes,1232 -longitudesList,1233 -longitudinalDirectionGridLength,1234 -lowerLimit,1235 -lowerRange,1236 -lowerThreshold,1237 -lowerThresholdValue,1238 -ls_labeling,1239 -lsdate_bug,1240 -lstime_bug,1241 -m,1242 -mAngleMultiplier,1243 -mBasicAngle,1244 -mars,1245 -marsClass,1246 -marsClass1,1247 -marsClass2,1248 -marsDir,1249 -marsDomain,1250 -marsEndStep,1251 -marsExperimentOffset,1252 -marsExpver,1253 -marsForecastMonth,1254 -marsGrid,1255 -marsIdent,1256 -marsKeywords,1257 -marsKeywords1,1258 -marsLamModel,1259 -marsLatitude,1260 -marsLevel,1261 -marsLevelist,1262 -marsLongitude,1263 -marsModel,1264 -marsParam,1265 -marsQuantile,1266 -marsRange,1267 -marsStartStep,1268 -marsStep,1269 -marsStream,1270 -marsStream1,1271 -marsStream2,1272 -marsType,1273 -marsType1,1274 -marsType2,1275 -mars_labeling,1276 -mask,1277 -masterDir,1278 -masterTableNumber,1279 -masterTablesVersionNumber,1280 -masterTablesVersionNumberLatest,1281 -matchAerosolBinNumber,1282 -matchAerosolPacking,1283 -matchLandType,1284 -matchSort,1285 -matchTimeRepres,1286 -matrixBitmapsPresent,1287 -matrixOfValues,1288 -max,1289 -maxLevelValue,1290 -maximum,1291 -md5Data,1292 -md5DataSection,1293 -md5GridSection,1294 -md5Headers,1295 -md5Product,1296 -md5Section1,1297 -md5Section10,1298 -md5Section2,1299 -md5Section3,1300 -md5Section4,1301 -md5Section5,1302 -md5Section6,1303 -md5Section7,1304 -md5Section8,1305 -md5Section9,1306 -md5Structure,1307 -md5TimeDomainSection,1308 -meanRVR1,1309 -meanRVR2,1310 -meanRVR3,1311 -meanRVR4,1312 -meanSize,1313 -meanValueRVR1,1314 -meanValueRVR2,1315 -meanValueRVR3,1316 -meanValueRVR4,1317 -meaningOfVerticalCoordinate,1318 -memberNumber,1319 -messageLength,1320 -metadata,1321 -method,1322 -methodNumber,1323 -million,1324 -min,1325 -minimum,1326 -minute,1327 -minuteOfAnalysis,1328 -minuteOfEndOfOverallTimeInterval,1329 -minuteOfForecast,1330 -minuteOfForecastUsedInLocalTime,1331 -minuteOfModelVersion,1332 -minuteOfReference,1333 -minuteOfStartOfReferencePeriod,1334 -minutesAfterDataCutoff,1335 -minutesAfterReferenceTimeOfDataCutoff,1336 -missingDataFlag,1337 -missingValue,1338 -missingValueManagement,1339 -missingValueManagementUsed,1340 -missingValuesPresent,1341 -missing_values,1342 -mixedCoordinateDefinition,1343 -mixedCoordinateFieldFlag,1344 -modeNumber,1345 -model,1346 -modelErrorType,1347 -modelIdentifier,1348 -modelName,1349 -modelVersionDate,1350 -modelVersionTime,1351 -molarMass,1352 -month,1353 -monthOfAnalysis,1354 -monthOfEndOfOverallTimeInterval,1355 -monthOfForecast,1356 -monthOfForecastUsedInLocalTime,1357 -monthOfModelVersion,1358 -monthOfReference,1359 -monthOfStartOfReferencePeriod,1360 -monthlyVerificationDate,1361 -monthlyVerificationMonth,1362 -monthlyVerificationTime,1363 -monthlyVerificationYear,1364 -multiplicationFactorForLatLong,1365 -n,1366 -n2,1367 -n3,1368 -na,1369 -name,1370 -nameECMF,1371 -nameLegacyECMF,1372 -nameOfFirstFixedSurface,1373 -nameOfSecondFixedSurface,1374 -names,1375 -nd,1376 -neitherPresent,1377 -newSubtype,1378 -nlev,1379 -nnn,1380 -normAtFinalTime,1381 -normAtInitialTime,1382 -normal,1383 -northLatitudeOfCluster,1384 -northLatitudeOfDomainOfTubing,1385 -northWestLatitudeOfLPOArea,1386 -northWestLatitudeOfVerficationArea,1387 -northWestLongitudeOfLPOArea,1388 -northWestLongitudeOfVerficationArea,1389 -northernLatitudeOfClusterDomain,1390 -northernLatitudeOfDomain,1391 -nosigPresent,1392 -notDecoded,1393 -nref,1394 -nt,1395 -number,1396 -numberInHorizontalCoordinates,1397 -numberInMixedCoordinateDefinition,1398 -numberInTheAuxiliaryArray,1399 -numberInTheGridCoordinateList,1400 -numberIncludedInAverage,1401 -numberMissingFromAveragesOrAccumulations,1402 -numberOfAdditionalParametersForReferencePeriod,1403 -numberOfAnalysis,1404 -numberOfBits,1405 -numberOfBitsContainingEachPackedValue,1406 -numberOfBitsForScaledGroupLengths,1407 -numberOfBitsUsedForTheGroupWidths,1408 -numberOfBitsUsedForTheScaledGroupLengths,1409 -numberOfBytesInLocalDefinition,1410 -numberOfBytesOfFreeFormatData,1411 -numberOfBytesPerInteger,1412 -numberOfCategories,1413 -numberOfCharacters,1414 -numberOfChars,1415 -numberOfClusterHighResolution,1416 -numberOfClusterLowResolution,1417 -numberOfClusters,1418 -numberOfCodedValues,1419 -numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction,1420 -numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction,1421 -numberOfColumns,1422 -numberOfComponents,1423 -numberOfContributingSpectralBands,1424 -numberOfControlForecastTube,1425 -numberOfCoordinatesValues,1426 -numberOfDataBinsAlongRadials,1427 -numberOfDataMatrices,1428 -numberOfDataPoints,1429 -numberOfDataPointsExpected,1430 -numberOfDataValues,1431 -numberOfDaysInClimateSamplingWindow,1432 -numberOfDiamonds,1433 -numberOfDirections,1434 -numberOfDistinctSection3s,1435 -numberOfDistinctSection4s,1436 -numberOfDistinctSection5s,1437 -numberOfDistinctSection6s,1438 -numberOfDistinctSection7s,1439 -numberOfDistinctSection8s,1440 -numberOfDistinctSection9s,1441 -numberOfDistributionFunctionParameters,1442 -numberOfEffectiveValues,1443 -numberOfFloats,1444 -numberOfForcasts,1445 -numberOfForecastsInCluster,1446 -numberOfForecastsInEnsemble,1447 -numberOfForecastsInTheCluster,1448 -numberOfForecastsInTube,1449 -numberOfForecastsUsedInLocalTime,1450 -numberOfFrequencies,1451 -numberOfGridInReference,1452 -numberOfGridUsed,1453 -numberOfGroups,1454 -numberOfGroupsOfDataValues,1455 -numberOfHorizontalPoints,1456 -numberOfIntegers,1457 -numberOfInts,1458 -numberOfIterations,1459 -numberOfLevelValues,1460 -numberOfLocalDefinitions,1461 -numberOfLogicals,1462 -numberOfMembersInCluster,1463 -numberOfMembersInEnsemble,1464 -numberOfMissing,1465 -numberOfMissingInStatisticalProcess,1466 -numberOfMissingValues,1467 -numberOfModeOfDistribution,1468 -numberOfModels,1469 -numberOfOctectsForNumberOfPoints,1470 -numberOfOctetsExtraDescriptors,1471 -numberOfOperationalForecastTube,1472 -numberOfPackedValues,1473 -numberOfParallelsBetweenAPoleAndTheEquator,1474 -numberOfParametersUsedForClustering,1475 -numberOfPartitions,1476 -numberOfPoints,1477 -numberOfPointsAlongAMeridian,1478 -numberOfPointsAlongAParallel,1479 -numberOfPointsAlongASide,1480 -numberOfPointsAlongFirstAxis,1481 -numberOfPointsAlongSecondAxis,1482 -numberOfPointsAlongTheXAxis,1483 -numberOfPointsAlongTheYAxis,1484 -numberOfPointsAlongXAxis,1485 -numberOfPointsAlongXAxisInCouplingArea,1486 -numberOfPointsAlongYAxis,1487 -numberOfPointsAlongYAxisInCouplingArea,1488 -numberOfPointsInDomain,1489 -numberOfPointsUsed,1490 -numberOfPressureLevelsUsedForClustering,1491 -numberOfRadarSitesUsed,1492 -numberOfRadials,1493 -numberOfReferencePeriodTimeRanges,1494 -numberOfReforecastYearsInModelClimate,1495 -numberOfRemaininChars,1496 -numberOfRepresentativeMember,1497 -numberOfReservedBytes,1498 -numberOfRows,1499 -numberOfSecondOrderPackedValues,1500 -numberOfSection,1501 -numberOfSingularVectorsComputed,1502 -numberOfSingularVectorsEvolved,1503 -numberOfStatisticallyProcessedFieldsForLocalTime,1504 -numberOfStepsUsedForClustering,1505 -numberOfSubsets,1506 -numberOfTensOfThousandsOfYearsOfOffset,1507 -numberOfTimeIncrementsOfForecastsUsedInLocalTime,1508 -numberOfTimeRange,1509 -numberOfTimeRanges,1510 -numberOfTimeSteps,1511 -numberOfUnexpandedDescriptors,1512 -numberOfUnusedBitsAtEndOfSection3,1513 -numberOfUsedSpatialTiles,1514 -numberOfUsedTileAttributes,1515 -numberOfUsefulPointsAlongXAxis,1516 -numberOfUsefulPointsAlongYAxis,1517 -numberOfVGridUsed,1518 -numberOfValues,1519 -numberOfVerticalCoordinateValues,1520 -numberOfVerticalGridDescriptors,1521 -numberOfVerticalPoints,1522 -numberOfWaveDirectionSequenceParameters,1523 -numberOfWaveDirections,1524 -numberOfWaveFrequencies,1525 -numberOfWaveFrequencySequenceParameters,1526 -numberingOrderOfDiamonds,1527 -numericValues,1528 -observablePropertyTemplate,1529 -observablePropertyTemplateNumber,1530 -observationDiagnostic,1531 -observationGeneratingProcessIdentifier,1532 -observationType,1533 -observedData,1534 -obstype,1535 -oceanAtmosphereCoupling,1536 -oceanLevName,1537 -oceanStream,1538 -octetAtWichPackedDataBegins,1539 -offset,1540 -offsetAfterBitmap,1541 -offsetAfterCentreLocalSection,1542 -offsetAfterData,1543 -offsetAfterLocalSection,1544 -offsetAfterPadding,1545 -offsetBBitmap,1546 -offsetBSection5,1547 -offsetBSection6,1548 -offsetBSection9,1549 -offsetBeforeBitmap,1550 -offsetBeforeData,1551 -offsetBeforePL,1552 -offsetBeforePV,1553 -offsetDescriptors,1554 -offsetEndSection4,1555 -offsetFreeFormData,1556 -offsetFromOriginToInnerBound,1557 -offsetFromReferenceOfFirstTime,1558 -offsetICEFieldsUsed,1559 -offsetSection0,1560 -offsetSection1,1561 -offsetSection10,1562 -offsetSection11,1563 -offsetSection2,1564 -offsetSection3,1565 -offsetSection4,1566 -offsetSection5,1567 -offsetSection6,1568 -offsetSection7,1569 -offsetSection8,1570 -offsetSection9,1571 -offsetToEndOf4DvarWindow,1572 -offsetValuesBy,1573 -offsetdate,1574 -offsettime,1575 -oldSubtype,1576 -one,1577 -oneConstant,1578 -oneMillionConstant,1579 -oneMinuteMeanMaximumRVR1,1580 -oneMinuteMeanMaximumRVR2,1581 -oneMinuteMeanMaximumRVR3,1582 -oneMinuteMeanMaximumRVR4,1583 -oneMinuteMeanMinimumRVR1,1584 -oneMinuteMeanMinimumRVR2,1585 -oneMinuteMeanMinimumRVR3,1586 -oneMinuteMeanMinimumRVR4,1587 -oper,1588 -operStream,1589 -operatingMode,1590 -operationalForecastCluster,1591 -optimisationTime,1592 -optimizeScaleFactor,1593 -optionalData,1594 -opttime,1595 -orderOfSPD,1596 -orderOfSpatialDifferencing,1597 -ordering,1598 -orderingConvention,1599 -orientationOfTheGrid,1600 -orientationOfTheGridInDegrees,1601 -origin,1602 -originOfPostProcessing,1603 -originalParameterNumber,1604 -originalParameterTableNumber,1605 -originalSubCentreIdentifier,1606 -originatingCentre,1607 -originatingCentreOfAnalysis,1608 -originatingClass,1609 -originatorLocalTemplate,1610 -originatorLocalTemplateNumber,1611 -outerLoopLengthOfTimeRange,1612 -outerLoopTypeOfStatisticalProcessing,1613 -outerLoopTypeOfTimeIncrement,1614 -overlayTemplate,1615 -overlayTemplateNumber,1616 -pack,1617 -packedValues,1618 -packingError,1619 -packingType,1620 -padding,1621 -padding_grid1_1,1622 -padding_grid1_2,1623 -padding_grid3_1,1624 -padding_grid4_1,1625 -padding_grid50_1,1626 -padding_grid5_1,1627 -padding_grid90_1,1628 -padding_loc10_1,1629 -padding_loc12_1,1630 -padding_loc13_1,1631 -padding_loc13_2,1632 -padding_loc13_3,1633 -padding_loc13_4,1634 -padding_loc13_5,1635 -padding_loc14_1,1636 -padding_loc14_2,1637 -padding_loc15_1,1638 -padding_loc16_1,1639 -padding_loc17_2,1640 -padding_loc18_1,1641 -padding_loc18_2,1642 -padding_loc190_1,1643 -padding_loc191_1,1644 -padding_loc191_2,1645 -padding_loc191_3,1646 -padding_loc192_1,1647 -padding_loc19_2,1648 -padding_loc20_1,1649 -padding_loc21_1,1650 -padding_loc23_1,1651 -padding_loc244_1,1652 -padding_loc244_2,1653 -padding_loc244_3,1654 -padding_loc245_1,1655 -padding_loc245_2,1656 -padding_loc26_1,1657 -padding_loc27_1,1658 -padding_loc27_2,1659 -padding_loc28_1,1660 -padding_loc29_1,1661 -padding_loc29_2,1662 -padding_loc29_3,1663 -padding_loc2_1,1664 -padding_loc2_2,1665 -padding_loc30_1,1666 -padding_loc30_2,1667 -padding_loc37_1,1668 -padding_loc37_2,1669 -padding_loc38_1,1670 -padding_loc3_1,1671 -padding_loc4_2,1672 -padding_loc50_1,1673 -padding_loc5_1,1674 -padding_loc6_1,1675 -padding_loc7_1,1676 -padding_loc9_1,1677 -padding_loc9_2,1678 -padding_local11_1,1679 -padding_local1_1,1680 -padding_local1_31,1681 -padding_local40_1,1682 -padding_local_35,1683 -padding_local_7_1,1684 -padding_sec1_loc,1685 -padding_sec2_1,1686 -padding_sec2_2,1687 -padding_sec2_3,1688 -padding_sec3_1,1689 -padding_sec4_1,1690 -paleontologicalOffset,1691 -param,1692 -paramId,1693 -paramIdECMF,1694 -paramIdLegacyECMF,1695 -param_value_max,1696 -param_value_min,1697 -parameter,1698 -parameterCategory,1699 -parameterCode,1700 -parameterDiscipline,1701 -parameterIndicator,1702 -parameterName,1703 -parameterNumber,1704 -parameterUnits,1705 -parameters,1706 -parametersVersion,1707 -partitionItems,1708 -partitionNumber,1709 -partitionTable,1710 -partitions,1711 -pastTendencyRVR1,1712 -pastTendencyRVR2,1713 -pastTendencyRVR3,1714 -pastTendencyRVR4,1715 -patch_precip_fp,1716 -pentagonalResolutionParameterJ,1717 -pentagonalResolutionParameterK,1718 -pentagonalResolutionParameterM,1719 -percentileValue,1720 -periodOfTime,1721 -periodOfTimeIntervals,1722 -perturbationNumber,1723 -perturbedType,1724 -phase,1725 -physicalFlag1,1726 -physicalFlag2,1727 -physicalMeaningOfVerticalCoordinate,1728 -pl,1729 -platform,1730 -plusOneinOrdersOfSPD,1731 -points,1732 -pointsOrdering,1733 -postAuxiliary,1734 -postAuxiliaryArrayPresent,1735 -postProcessing,1736 -powerOfTenUsedToScaleClimateWeight,1737 -preBitmapValues,1738 -preProcessingParameter,1739 -precision,1740 -precisionOfTheUnpackedSubset,1741 -predefined_grid,1742 -predefined_grid_values,1743 -preferLocalConcepts,1744 -present,1745 -presentTrend1,1746 -presentTrend2,1747 -presentTrend3,1748 -presentTrend4,1749 -presentWeather1Present,1750 -presentWeather1PresentTrend1,1751 -presentWeather1PresentTrend2,1752 -presentWeather1PresentTrend3,1753 -presentWeather1PresentTrend4,1754 -presentWeather2Present,1755 -presentWeather2PresentTrend1,1756 -presentWeather2PresentTrend2,1757 -presentWeather2PresentTrend3,1758 -presentWeather2PresentTrend4,1759 -presentWeather3Present,1760 -presentWeather3PresentTrend1,1761 -presentWeather3PresentTrend2,1762 -presentWeather3PresentTrend3,1763 -presentWeather3PresentTrend4,1764 -pressureLevel,1765 -pressureUnits,1766 -primaryBitmap,1767 -primaryMissingValue,1768 -primaryMissingValueSubstitute,1769 -probContinous,1770 -probPoint,1771 -probProductDefinition,1772 -probabilityType,1773 -probabilityTypeName,1774 -process,1775 -produceLargeConstantFields,1776 -product,1777 -productDefinition,1778 -productDefinitionTemplateNumber,1779 -productDefinitionTemplateNumberInternal,1780 -productIdentifier,1781 -productType,1782 -productionStatusOfProcessedData,1783 -projSourceString,1784 -projString,1785 -projTargetString,1786 -projectLocalTemplate,1787 -projectLocalTemplateNumber,1788 -projectionCenterFlag,1789 -projectionCentreFlag,1790 -pv,1791 -pvlLocation,1792 -qfe,1793 -qfePresent,1794 -qfeUnits,1795 -qnh,1796 -qnhAPresent,1797 -qnhPresent,1798 -qnhUnits,1799 -qualityControl,1800 -qualityControlIndicator,1801 -qualityValueAssociatedWithParameter,1802 -quantile,1803 -quantileValue,1804 -radialAngularSpacing,1805 -radials,1806 -radius,1807 -radiusInMetres,1808 -radiusOfCentralCluster,1809 -radiusOfClusterDomain,1810 -radiusOfTheEarth,1811 -range,1812 -rangeBinSpacing,1813 -rdbDateTime,1814 -rdbSubtype,1815 -rdbType,1816 -rdb_key,1817 -rdbtime,1818 -rdbtimeDate,1819 -rdbtimeDay,1820 -rdbtimeHour,1821 -rdbtimeMinute,1822 -rdbtimeMonth,1823 -rdbtimeSecond,1824 -rdbtimeTime,1825 -rdbtimeYear,1826 -realPart,1827 -realPartOf00,1828 -realization,1829 -recDateTime,1830 -recentWeather,1831 -recentWeatherTry,1832 -rectime,1833 -rectimeDay,1834 -rectimeHour,1835 -rectimeMinute,1836 -rectimeSecond,1837 -reducedGrid,1838 -refdate,1839 -reference,1840 -referenceDate,1841 -referenceForGroupLengths,1842 -referenceForGroupWidths,1843 -referenceOfLengths,1844 -referenceOfWidths,1845 -referencePeriodList,1846 -referenceReflectivityForEchoTop,1847 -referenceSampleInterval,1848 -referenceStep,1849 -referenceValue,1850 -referenceValueError,1851 -reflectivityCalibrationConstant,1852 -remarkPresent,1853 -reportType,1854 -representationMode,1855 -representationType,1856 -representativeMember,1857 -reserved,1858 -reserved1,1859 -reserved2,1860 -reserved3,1861 -reservedNeedNotBePresent,1862 -reservedOctet,1863 -reservedSection2,1864 -reservedSection3,1865 -reservedSection4,1866 -resolution,1867 -resolutionAndComponentFlags,1868 -resolutionAndComponentFlags1,1869 -resolutionAndComponentFlags2,1870 -resolutionAndComponentFlags3,1871 -resolutionAndComponentFlags4,1872 -resolutionAndComponentFlags6,1873 -resolutionAndComponentFlags7,1874 -resolutionAndComponentFlags8,1875 -restricted,1876 -rootGroupObjectHeaderAddress,1877 -rootGroupSymbolTableEntry,1878 -rootTablesDir,1879 -roundedMarsLatitude,1880 -roundedMarsLevelist,1881 -roundedMarsLongitude,1882 -runwayBrakingActionState1,1883 -runwayBrakingActionState2,1884 -runwayBrakingActionState3,1885 -runwayBrakingActionState4,1886 -runwayDepositCodeState1,1887 -runwayDepositCodeState2,1888 -runwayDepositCodeState3,1889 -runwayDepositCodeState4,1890 -runwayDepositState1,1891 -runwayDepositState2,1892 -runwayDepositState3,1893 -runwayDepositState4,1894 -runwayDepthOfDepositCodeState1,1895 -runwayDepthOfDepositCodeState2,1896 -runwayDepthOfDepositCodeState3,1897 -runwayDepthOfDepositCodeState4,1898 -runwayDepthOfDepositState1,1899 -runwayDepthOfDepositState2,1900 -runwayDepthOfDepositState3,1901 -runwayDepthOfDepositState4,1902 -runwayDesignatorRVR1,1903 -runwayDesignatorRVR2,1904 -runwayDesignatorRVR3,1905 -runwayDesignatorRVR4,1906 -runwayDesignatorState1,1907 -runwayDesignatorState2,1908 -runwayDesignatorState3,1909 -runwayDesignatorState4,1910 -runwayExtentOfContaminationCodeState1,1911 -runwayExtentOfContaminationCodeState2,1912 -runwayExtentOfContaminationCodeState3,1913 -runwayExtentOfContaminationCodeState4,1914 -runwayExtentOfContaminationState1,1915 -runwayExtentOfContaminationState2,1916 -runwayExtentOfContaminationState3,1917 -runwayExtentOfContaminationState4,1918 -runwayFrictionCodeValueState1,1919 -runwayFrictionCodeValueState2,1920 -runwayFrictionCodeValueState3,1921 -runwayFrictionCodeValueState4,1922 -runwayFrictionCoefficientCodeState1,1923 -runwayFrictionCoefficientCodeState2,1924 -runwayFrictionCoefficientCodeState3,1925 -runwayFrictionCoefficientCodeState4,1926 -runwayFrictionCoefficientState1,1927 -runwayFrictionCoefficientState2,1928 -runwayFrictionCoefficientState3,1929 -runwayFrictionCoefficientState4,1930 -runwaySideCodeState1,1931 -runwaySideCodeState2,1932 -runwaySideCodeState3,1933 -runwaySideCodeState4,1934 -runwayState,1935 -sampleSizeOfModelClimate,1936 -sampleSizeOfReferencePeriod,1937 -satelliteID,1938 -satelliteIdentifier,1939 -satelliteNumber,1940 -satelliteSeries,1941 -scaleFactorAtReferencePoint,1942 -scaleFactorOfAdditionalParameterForReferencePeriod,1943 -scaleFactorOfCentralWaveNumber,1944 -scaleFactorOfDistanceFromEnsembleMean,1945 -scaleFactorOfDistributionFunctionParameter,1946 -scaleFactorOfEarthMajorAxis,1947 -scaleFactorOfEarthMinorAxis,1948 -scaleFactorOfFirstFixedSurface,1949 -scaleFactorOfFirstSize,1950 -scaleFactorOfFirstWavelength,1951 -scaleFactorOfLengthOfSemiMajorAxis,1952 -scaleFactorOfLengthOfSemiMinorAxis,1953 -scaleFactorOfLowerLimit,1954 -scaleFactorOfLowerWavePeriodLimit,1955 -scaleFactorOfMajorAxisOfOblateSpheroidEarth,1956 -scaleFactorOfMinorAxisOfOblateSpheroidEarth,1957 -scaleFactorOfPrimeMeridianOffset,1958 -scaleFactorOfRadiusOfSphericalEarth,1959 -scaleFactorOfSecondFixedSurface,1960 -scaleFactorOfSecondSize,1961 -scaleFactorOfSecondWavelength,1962 -scaleFactorOfStandardDeviation,1963 -scaleFactorOfStandardDeviationInTheCluster,1964 -scaleFactorOfUpperLimit,1965 -scaleFactorOfUpperWavePeriodLimit,1966 -scaleFactorOfWaveDirectionSequenceParameter,1967 -scaleFactorOfWaveDirections,1968 -scaleFactorOfWaveFrequencies,1969 -scaleFactorOfWaveFrequencySequenceParameter,1970 -scaleValuesBy,1971 -scaledDirections,1972 -scaledFrequencies,1973 -scaledValueOfAdditionalParameterForReferencePeriod,1974 -scaledValueOfCentralWaveNumber,1975 -scaledValueOfDistanceFromEnsembleMean,1976 -scaledValueOfDistributionFunctionParameter,1977 -scaledValueOfEarthMajorAxis,1978 -scaledValueOfEarthMinorAxis,1979 -scaledValueOfFirstFixedSurface,1980 -scaledValueOfFirstSize,1981 -scaledValueOfFirstWavelength,1982 -scaledValueOfLengthOfSemiMajorAxis,1983 -scaledValueOfLengthOfSemiMinorAxis,1984 -scaledValueOfLowerLimit,1985 -scaledValueOfLowerWavePeriodLimit,1986 -scaledValueOfMajorAxisOfOblateSpheroidEarth,1987 -scaledValueOfMinorAxisOfOblateSpheroidEarth,1988 -scaledValueOfPrimeMeridianOffset,1989 -scaledValueOfRadiusOfSphericalEarth,1990 -scaledValueOfSecondFixedSurface,1991 -scaledValueOfSecondSize,1992 -scaledValueOfSecondWavelength,1993 -scaledValueOfStandardDeviation,1994 -scaledValueOfStandardDeviationInTheCluster,1995 -scaledValueOfUpperLimit,1996 -scaledValueOfUpperWavePeriodLimit,1997 -scaledValueOfWaveDirectionSequenceParameter,1998 -scaledValueOfWaveFrequencySequenceParameter,1999 -scaledValuesOfWaveDirections,2000 -scaledValuesOfWaveFrequencies,2001 -scalingFactorForFrequencies,2002 -scanPosition,2003 -scanningMode,2004 -scanningMode4,2005 -scanningMode5,2006 -scanningMode6,2007 -scanningMode7,2008 -scanningMode8,2009 -scanningModeForOneDiamond,2010 -sd,2011 -second,2012 -secondDimension,2013 -secondDimensionCoordinateValueDefinition,2014 -secondDimensionPhysicalSignificance,2015 -secondLatitude,2016 -secondLatitudeInDegrees,2017 -secondOfEndOfOverallTimeInterval,2018 -secondOfForecast,2019 -secondOfForecastUsedInLocalTime,2020 -secondOfModelVersion,2021 -secondOfStartOfReferencePeriod,2022 -secondOrderFlags,2023 -secondOrderOfDifferentWidth,2024 -secondOrderValuesDifferentWidths,2025 -secondSize,2026 -secondaryBitMap,2027 -secondaryBitmap,2028 -secondaryBitmapPresent,2029 -secondaryBitmaps,2030 -secondaryBitmapsCount,2031 -secondaryBitmapsSize,2032 -secondaryMissingValue,2033 -secondaryMissingValueSubstitute,2034 -secondsOfAnalysis,2035 -secondsOfReference,2036 -section,2037 -section0Length,2038 -section0Pointer,2039 -section1,2040 -section10Length,2041 -section10Pointer,2042 -section11Length,2043 -section11Pointer,2044 -section1Flags,2045 -section1Length,2046 -section1Padding,2047 -section1Pointer,2048 -section2Length,2049 -section2Padding,2050 -section2Pointer,2051 -section2Present,2052 -section2Used,2053 -section3Flags,2054 -section3Length,2055 -section3Padding,2056 -section3Pointer,2057 -section3UniqueIdentifier,2058 -section4,2059 -section4Length,2060 -section4Padding,2061 -section4Pointer,2062 -section4UniqueIdentifier,2063 -section5,2064 -section5Length,2065 -section5Pointer,2066 -section5UniqueIdentifier,2067 -section6,2068 -section6Length,2069 -section6Pointer,2070 -section6UniqueIdentifier,2071 -section7,2072 -section7Length,2073 -section7Pointer,2074 -section7UniqueIdentifier,2075 -section8,2076 -section8Length,2077 -section8Pointer,2078 -section8UniqueIdentifier,2079 -section9Length,2080 -section9Pointer,2081 -section9UniqueIdentifier,2082 -sectionLengthLimitForEnsembles,2083 -sectionLengthLimitForProbability,2084 -sectionNumber,2085 -sectionPosition,2086 -section_01,2087 -section_02,2088 -section_03,2089 -section_04,2090 -section_05,2091 -section_06,2092 -section_07,2093 -section_08,2094 -section_09,2095 -section_1,2096 -section_10,2097 -section_11,2098 -section_2,2099 -section_3,2100 -section_4,2101 -section_5,2102 -section_6,2103 -section_7,2104 -section_8,2105 -selectStepTemplateInstant,2106 -selectStepTemplateInterval,2107 -selectedDay,2108 -selectedFcIndex,2109 -selectedHour,2110 -selectedMinute,2111 -selectedMonth,2112 -selectedSecond,2113 -selectedYear,2114 -sensitiveAreaDomain,2115 -sequences,2116 -setBitsPerValue,2117 -setCalendarId,2118 -setDecimalPrecision,2119 -setLocalDefinition,2120 -setPackingType,2121 -setToMissingIfOutOfRange,2122 -sfc_levtype,2123 -shapeOfTheEarth,2124 -shapeOfVerificationArea,2125 -shortName,2126 -shortNameECMF,2127 -shortNameLegacyECMF,2128 -short_name,2129 -signature,2130 -significanceOfReferenceDateAndTime,2131 -significanceOfReferenceTime,2132 -simpleThinningMissingRadius,2133 -simpleThinningSkip,2134 -simpleThinningStart,2135 -siteElevation,2136 -siteId,2137 -siteLatitude,2138 -siteLongitude,2139 -sizeOfLength,2140 -sizeOfOffsets,2141 -sizeOfPostAuxiliaryArray,2142 -sizeOfPostAuxiliaryArrayPlusOne,2143 -skew,2144 -skewness,2145 -skipExtraKeyAttributes,2146 -sort,2147 -sourceOfGridDefinition,2148 -sourceSinkChemicalPhysicalProcess,2149 -southEastLatitudeOfLPOArea,2150 -southEastLatitudeOfVerficationArea,2151 -southEastLongitudeOfLPOArea,2152 -southEastLongitudeOfVerficationArea,2153 -southLatitudeOfCluster,2154 -southLatitudeOfDomainOfTubing,2155 -southPoleOnProjectionPlane,2156 -southernLatitudeOfClusterDomain,2157 -southernLatitudeOfDomain,2158 -sp1,2159 -sp2,2160 -sp3,2161 -spaceUnitFlag,2162 -spacingOfBinsAlongRadials,2163 -spare,2164 -spare1,2165 -spare2,2166 -spare3,2167 -spare4,2168 -spatialProcessing,2169 -spatialSmoothingOfProduct,2170 -spectralDataRepresentationMode,2171 -spectralDataRepresentationType,2172 -spectralMode,2173 -spectralType,2174 -sphericalHarmonics,2175 -standardDeviation,2176 -standardParallel,2177 -standardParallelInDegrees,2178 -standardParallelInMicrodegrees,2179 -startDateOfReferencePeriod,2180 -startOfHeaders,2181 -startOfMessage,2182 -startOfRange,2183 -startStep,2184 -startStepInHours,2185 -startTimeStep,2186 -startingAzimuth,2187 -statisticalProcess,2188 -statisticalProcessesList,2189 -statistics,2190 -status,2191 -step,2192 -stepForClustering,2193 -stepHumanReadable,2194 -stepInHours,2195 -stepRange,2196 -stepRangeInHours,2197 -stepType,2198 -stepTypeForConversion,2199 -stepTypeInternal,2200 -stepUnits,2201 -stepZero,2202 -stream,2203 -streamOfAnalysis,2204 -stretchingFactor,2205 -stretchingFactorScaled,2206 -stringValues,2207 -subCentre,2208 -subDefinitions1,2209 -subDefinitions2,2210 -subLocalDefinition1,2211 -subLocalDefinition2,2212 -subLocalDefinitionLength1,2213 -subLocalDefinitionLength2,2214 -subLocalDefinitionNumber1,2215 -subLocalDefinitionNumber2,2216 -subSetJ,2217 -subSetK,2218 -subSetM,2219 -subcentreOfAnalysis,2220 -subdivisionsOfBasicAngle,2221 -suiteName,2222 -superblockExtensionAddress,2223 -swapScanningAlternativeRows,2224 -swapScanningLat,2225 -swapScanningLon,2226 -swapScanningX,2227 -swapScanningY,2228 -system,2229 -systemNumber,2230 -t,2231 -table2Version,2232 -tableCode,2233 -tableNumber,2234 -tableReference,2235 -tablesLocalDir,2236 -tablesMasterDir,2237 -tablesVersion,2238 -tablesVersionLatest,2239 -tablesVersionLatestOfficial,2240 -targetCompressionRatio,2241 -td,2242 -tempPressureUnits,2243 -temperature,2244 -temperatureAndDewpointPresent,2245 -templatesLocalDir,2246 -templatesMasterDir,2247 -theHindcastMarsStream,2248 -theMessage,2249 -thisExperimentVersionNumber,2250 -thisMarsClass,2251 -thisMarsStream,2252 -thisMarsType,2253 -thousand,2254 -three,2255 -threshold,2256 -thresholdIndicator,2257 -tiggeCentre,2258 -tiggeLAMName,2259 -tiggeLocalVersion,2260 -tiggeModel,2261 -tiggeSection,2262 -tiggeSuiteID,2263 -tigge_name,2264 -tigge_short_name,2265 -tileClassification,2266 -tileIndex,2267 -time,2268 -timeCoordinateDefinition,2269 -timeDomainTemplate,2270 -timeDomainTemplateNumber,2271 -timeIncrement,2272 -timeIncrementBetweenSuccessiveFields,2273 -timeOfAnalysis,2274 -timeOfForecast,2275 -timeOfForecastUsedInLocalTime,2276 -timeOfModelVersion,2277 -timeOfReference,2278 -timeRangeIndicator,2279 -timeRangeIndicatorFromStepRange,2280 -timeUnitFlag,2281 -timerepres,2282 -topLevel,2283 -total,2284 -totalAerosolBinsNumbers,2285 -totalInitialConditions,2286 -totalLength,2287 -totalNumber,2288 -totalNumberOfClusters,2289 -totalNumberOfDataValuesMissingInStatisticalProcess,2290 -totalNumberOfDirections,2291 -totalNumberOfForecastProbabilities,2292 -totalNumberOfFrequencies,2293 -totalNumberOfGridPoints,2294 -totalNumberOfIterations,2295 -totalNumberOfQuantiles,2296 -totalNumberOfRepetitions,2297 -totalNumberOfTileAttributePairs,2298 -totalNumberOfTubes,2299 -totalNumberOfValuesInUnpackedSubset,2300 -totalNumberOfWaveDirections,2301 -totalNumberOfWaveFrequencies,2302 -totalNumberOfdimensions,2303 -treatmentOfMissingData,2304 -true,2305 -trueLengthOfLastGroup,2306 -truncateDegrees,2307 -truncateLaplacian,2308 -tsectionNumber3,2309 -tsectionNumber4,2310 -tsectionNumber5,2311 -tubeDomain,2312 -tubeNumber,2313 -two,2314 -twoOrdersOfSPD,2315 -type,2316 -typeOfAnalysis,2317 -typeOfAuxiliaryInformation,2318 -typeOfCalendar,2319 -typeOfCompressionUsed,2320 -typeOfDistributionFunction,2321 -typeOfEnsembleForecast,2322 -typeOfEnsembleMember,2323 -typeOfFirstFixedSurface,2324 -typeOfGeneratingProcess,2325 -typeOfGrid,2326 -typeOfHorizontalLine,2327 -typeOfIntervalForFirstAndSecondSize,2328 -typeOfIntervalForFirstAndSecondWavelength,2329 -typeOfLevel,2330 -typeOfLevelECMF,2331 -typeOfOriginalFieldValues,2332 -typeOfPacking,2333 -typeOfPostProcessing,2334 -typeOfPreProcessing,2335 -typeOfProcessedData,2336 -typeOfReferenceDataset,2337 -typeOfRelationToReferenceDataset,2338 -typeOfSSTFieldUsed,2339 -typeOfSecondFixedSurface,2340 -typeOfSizeInterval,2341 -typeOfStatisticalPostProcessingOfEnsembleMembers,2342 -typeOfStatisticalProcessing,2343 -typeOfStatisticalProcessingForTimeRangeForReferencePeriod,2344 -typeOfTimeIncrement,2345 -typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing,2346 -typeOfWaveDirectionSequence,2347 -typeOfWaveFrequencySequence,2348 -typeOfWavePeriodInterval,2349 -typeOfWavelengthInterval,2350 -typicalCentury,2351 -typicalDate,2352 -typicalDateTime,2353 -typicalDay,2354 -typicalHour,2355 -typicalMinute,2356 -typicalMonth,2357 -typicalSecond,2358 -typicalTime,2359 -typicalYear,2360 -typicalYear2,2361 -typicalYearOfCentury,2362 -uco,2363 -ucs,2364 -uerraLocalVersion,2365 -uerraSection,2366 -unexpandedDescriptors,2367 -unexpandedDescriptorsEncoded,2368 -unitOfOffsetFromReferenceTime,2369 -unitOfTime,2370 -unitOfTimeIncrement,2371 -unitOfTimeRange,2372 -units,2373 -unitsBias,2374 -unitsConversionOffset,2375 -unitsConversionScaleFactor,2376 -unitsDecimalScaleFactor,2377 -unitsECMF,2378 -unitsFactor,2379 -unitsLegacyECMF,2380 -unitsOfFirstFixedSurface,2381 -unitsOfSecondFixedSurface,2382 -unknown,2383 -unpack,2384 -unpackedError,2385 -unpackedSubsetPrecision,2386 -unpackedValues,2387 -unsignedIntegers,2388 -unstructuredGrid,2389 -unstructuredGridSubtype,2390 -unstructuredGridType,2391 -unstructuredGridUUID,2392 -unusedBitsInBitmap,2393 -updateSequenceNumber,2394 -upperLimit,2395 -upperRange,2396 -upperThreshold,2397 -upperThresholdValue,2398 -userDateEnd,2399 -userDateStart,2400 -userDateTimeEnd,2401 -userDateTimeStart,2402 -userTimeEnd,2403 -userTimeStart,2404 -uuidOfHGrid,2405 -uuidOfVGrid,2406 -uvRelativeToGrid,2407 -validityDate,2408 -validityDateTime,2409 -validityTime,2410 -values,2411 -variationOfVisibility,2412 -variationOfVisibilityDirection,2413 -variationOfVisibilityDirectionAngle,2414 -variationOfVisibilityDirectionTrend1,2415 -variationOfVisibilityDirectionTrend2,2416 -variationOfVisibilityDirectionTrend3,2417 -variationOfVisibilityDirectionTrend4,2418 -variationOfVisibilityTrend1,2419 -variationOfVisibilityTrend2,2420 -variationOfVisibilityTrend3,2421 -variationOfVisibilityTrend4,2422 -varno,2423 -verificationDate,2424 -verificationMonth,2425 -verificationYear,2426 -verifyingMonth,2427 -version,2428 -versionNumOfFilesFreeSpaceStorage,2429 -versionNumOfRootGroupSymbolTableEntry,2430 -versionNumOfSharedHeaderMessageFormat,2431 -versionNumberOfExperimentalSuite,2432 -versionNumberOfGribLocalTables,2433 -versionNumberOfSuperblock,2434 -versionOfModelClimate,2435 -verticalCoordinate,2436 -verticalCoordinateDefinition,2437 -verticalDomainTemplate,2438 -verticalDomainTemplateNumber,2439 -verticalVisibility,2440 -verticalVisibilityCoded,2441 -visibility,2442 -visibilityInKilometresTrend1,2443 -visibilityInKilometresTrend2,2444 -visibilityInKilometresTrend3,2445 -visibilityInKilometresTrend4,2446 -visibilityTrend1,2447 -visibilityTrend2,2448 -visibilityTrend3,2449 -visibilityTrend4,2450 -waveDirectionNumber,2451 -waveDomain,2452 -waveFrequencyNumber,2453 -waveLevType,2454 -weightAppliedToClimateMonth1,2455 -westLongitudeOfCluster,2456 -westLongitudeOfDomainOfTubing,2457 -westernLongitudeOfClusterDomain,2458 -westernLongitudeOfDomain,2459 -widthOfFirstOrderValues,2460 -widthOfLengths,2461 -widthOfSPD,2462 -widthOfWidths,2463 -windDirection,2464 -windDirectionTrend1,2465 -windDirectionTrend2,2466 -windDirectionTrend3,2467 -windDirectionTrend4,2468 -windGust,2469 -windGustTrend1,2470 -windGustTrend2,2471 -windGustTrend3,2472 -windGustTrend4,2473 -windPresent,2474 -windSpeed,2475 -windSpeedTrend1,2476 -windSpeedTrend2,2477 -windSpeedTrend3,2478 -windSpeedTrend4,2479 -windUnits,2480 -windUnitsTrend1,2481 -windUnitsTrend2,2482 -windUnitsTrend3,2483 -windUnitsTrend4,2484 -windVariableDirection,2485 -windVariableDirectionTrend1,2486 -windVariableDirectionTrend2,2487 -windVariableDirectionTrend3,2488 -windVariableDirectionTrend4,2489 -wrongPadding,2490 -xCoordinateOfOriginOfSectorImage,2491 -xCoordinateOfSubSatellitePoint,2492 -xDirectionGridLength,2493 -xDirectionGridLengthInMetres,2494 -xDirectionGridLengthInMillimetres,2495 -xFirst,2496 -xLast,2497 -yCoordinateOfOriginOfSectorImage,2498 -yCoordinateOfSubSatellitePoint,2499 -yDirectionGridLength,2500 -yDirectionGridLengthInMetres,2501 -yDirectionGridLengthInMillimetres,2502 -yFirst,2503 -yLast,2504 -year,2505 -yearOfAnalysis,2506 -yearOfCentury,2507 -yearOfEndOfOverallTimeInterval,2508 -yearOfForecast,2509 -yearOfForecastUsedInLocalTime,2510 -yearOfModelVersion,2511 -yearOfReference,2512 -yearOfStartOfReferencePeriod,2513 -zero,2514 -zeros,2515 +forceStepUnits,885 +forecastLeadTime,886 +forecastMonth,887 +forecastOrSingularVectorNumber,888 +forecastPeriod,889 +forecastPeriodFrom,890 +forecastPeriodTo,891 +forecastProbabilityNumber,892 +forecastSteps,893 +forecastTime,894 +forecastperiod,895 +formatForDoubles,896 +formatForLongs,897 +formatVersionMajorNumber,898 +formatVersionMinorNumber,899 +freeFormData,900 +frequency,901 +frequencyNumber,902 +frequencyScalingFactor,903 +functionCode,904 +g,905 +g1conceptsLocalDirAll,906 +g1conceptsMasterDir,907 +g2grid,908 +gaussianGridName,909 +genVertHeightCoords,910 +generalExtended2ordr,911 +generatingProcessIdentificationNumber,912 +generatingProcessIdentifier,913 +generatingProcessTemplate,914 +generatingProcessTemplateNumber,915 +generation,916 +getNumberOfValues,917 +gg,918 +global,919 +globalDomain,920 +grib1divider,921 +grib2LocalSectionNumber,922 +grib2LocalSectionPresent,923 +grib2divider,924 +grib3divider,925 +gribDataQualityChecks,926 +gribMasterTablesVersionNumber,927 +gribTablesVersionNo,928 +grid,929 +gridCoordinate,930 +gridDefinition,931 +gridDefinitionDescription,932 +gridDefinitionSection,933 +gridDefinitionTemplateNumber,934 +gridDescriptionSectionPresent,935 +gridName,936 +gridPointPosition,937 +gridSpecification,938 +gridType,939 +groupInternalNodeK,940 +groupLeafNodeK,941 +groupLengths,942 +groupSplitting,943 +groupSplittingMethodUsed,944 +groupWidth,945 +groupWidths,946 +gts_CCCC,947 +gts_TTAAii,948 +gts_ddhh00,949 +gts_header,950 +halfByte,951 +hdate,952 +headersOnly,953 +heightLevelName,954 +heightOrPressureOfLevel,955 +heightPressureEtcOfLevels,956 +hideThis,957 +hook_post_meta_data,958 +horizontalCoordinateDefinition,959 +horizontalCoordinateSupplement,960 +horizontalDimensionProcessed,961 +horizontalDomainTemplate,962 +horizontalDomainTemplateNumber,963 +hour,964 +hourOfAnalysis,965 +hourOfEndOfOverallTimeInterval,966 +hourOfForecast,967 +hourOfForecastUsedInLocalTime,968 +hourOfModelVersion,969 +hourOfReference,970 +hourOfStartOfReferencePeriod,971 +hoursAfterDataCutoff,972 +hoursAfterReferenceTimeOfDataCutoff,973 +hundred,974 +iDirectionIncrement,975 +iDirectionIncrementGiven,976 +iDirectionIncrementGridLength,977 +iDirectionIncrementInDegrees,978 +iIncrement,979 +iScansNegatively,980 +iScansPositively,981 +ident,982 +identificationNumber,983 +identificationOfOriginatingGeneratingCentre,984 +identificationOfProject,985 +identifier,986 +ieeeFloats,987 +ifsParam,988 +ijDirectionIncrementGiven,989 +implementationDateOfModelCycle,990 +incrementOfLengths,991 +indexTemplate,992 +indexTemplateNumber,993 +indexedStorageInternalNodeK,994 +indexingDate,995 +indexingTime,996 +indexingTimeHH,997 +indexingTimeHHMM,998 +indexingTimeMM,999 +indicatorOfParameter,1000 +indicatorOfTypeOfLevel,1001 +indicatorOfUnitForForecastTime,1002 +indicatorOfUnitForTimeIncrement,1003 +indicatorOfUnitForTimeRange,1004 +indicatorOfUnitForTimeRangeForReferencePeriod,1005 +indicatorOfUnitOfTimeRange,1006 +inputDataPresentIndicator,1007 +inputDelayedDescriptorReplicationFactor,1008 +inputExtendedDelayedDescriptorReplicationFactor,1009 +inputOriginatingCentre,1010 +inputOverriddenReferenceValues,1011 +inputProcessIdentifier,1012 +inputShortDelayedDescriptorReplicationFactor,1013 +instrument,1014 +instrumentIdentifier,1015 +instrumentType,1016 +integerPointValues,1017 +integerScaleFactor,1018 +integerScalingFactorAppliedToDirections,1019 +integerScalingFactorAppliedToFrequencies,1020 +integerValues,1021 +internalVersion,1022 +internationalDataSubCategory,1023 +interpretationOfNumberOfPoints,1024 +intervalBetweenTimes,1025 +isAccumulation,1026 +isAuto,1027 +isCavok,1028 +isCavokTrend1,1029 +isCavokTrend2,1030 +isCavokTrend3,1031 +isCavokTrend4,1032 +isConstant,1033 +isCorrection,1034 +isEPS,1035 +isEps,1036 +isFillup,1037 +isGridded,1038 +isHindcast,1039 +isOctahedral,1040 +isRotatedGrid,1041 +isSatellite,1042 +isSatelliteType,1043 +isSens,1044 +isSpectral,1045 +is_aerosol,1046 +is_aerosol_optical,1047 +is_chemical,1048 +is_chemical_distfn,1049 +is_chemical_srcsink,1050 +is_localtime,1051 +is_ocean2d_param,1052 +is_ocean3d_param,1053 +is_uerra,1054 +isectionNumber2,1055 +isectionNumber3,1056 +isectionNumber4,1057 +isotopeIdentificationNumber,1058 +iteration,1059 +iterationNumber,1060 +iteratorDisableUnrotate,1061 +jDirectionIncrement,1062 +jDirectionIncrementGiven,1063 +jDirectionIncrementGridLength,1064 +jDirectionIncrementInDegrees,1065 +jIncrement,1066 +jPointsAreConsecutive,1067 +jScansNegatively,1068 +jScansPositively,1069 +jdLocal,1070 +jdSelected,1071 +julianDay,1072 +julianForecastDay,1073 +keyData,1074 +keyMore,1075 +keySat,1076 +kindOfProduct,1077 +kurt,1078 +kurtosis,1079 +lBB,1080 +landtype,1081 +laplacianOperator,1082 +laplacianOperatorIsSet,1083 +laplacianScalingFactor,1084 +laplacianScalingFactorUnset,1085 +lastMonthUsedToBuildClimateMonth1,1086 +lastMonthUsedToBuildClimateMonth2,1087 +latLonValues,1088 +latitude,1089 +latitudeFirstInDegrees,1090 +latitudeLastInDegrees,1091 +latitudeLongitudeValues,1092 +latitudeOfCentralPointInClusterDomain,1093 +latitudeOfCentrePoint,1094 +latitudeOfCentrePointInDegrees,1095 +latitudeOfFirstGridPoint,1096 +latitudeOfFirstGridPointInDegrees,1097 +latitudeOfGridPoints,1098 +latitudeOfIcosahedronPole,1099 +latitudeOfLastGridPoint,1100 +latitudeOfLastGridPointInDegrees,1101 +latitudeOfNorthWestCornerOfArea,1102 +latitudeOfReferencePoint,1103 +latitudeOfReferencePointInDegrees,1104 +latitudeOfSouthEastCornerOfArea,1105 +latitudeOfSouthernPole,1106 +latitudeOfSouthernPoleInDegrees,1107 +latitudeOfStretchingPole,1108 +latitudeOfStretchingPoleInDegrees,1109 +latitudeOfSubSatellitePoint,1110 +latitudeOfSubSatellitePointInDegrees,1111 +latitudeOfTangencyPoint,1112 +latitudeOfThePoleOfStretching,1113 +latitudeOfThePolePoint,1114 +latitudeOfThePolePointInDegrees,1115 +latitudeOfTheSouthernPoleOfProjection,1116 +latitudeSexagesimal,1117 +latitudeWhereDxAndDyAreSpecified,1118 +latitudeWhereDxAndDyAreSpecifiedInDegrees,1119 +latitudes,1120 +latitudesList,1121 +latitudinalDirectionGridLength,1122 +lcwfvSuiteName,1123 +leadtime,1124 +legBaseDate,1125 +legBaseTime,1126 +legNumber,1127 +legacyGaussSubarea,1128 +lengthDescriptors,1129 +lengthIncrementForTheGroupLengths,1130 +lengthOf4DvarWindow,1131 +lengthOfHeaders,1132 +lengthOfIndexTemplate,1133 +lengthOfMessage,1134 +lengthOfOriginatorLocalTemplate,1135 +lengthOfProjectLocalTemplate,1136 +lengthOfTimeRange,1137 +lengthOfTimeRangeForReferencePeriod,1138 +lev,1139 +levTypeName,1140 +level,1141 +levelIndicator,1142 +levelType,1143 +levelValues,1144 +level_value_list,1145 +levelist,1146 +levels,1147 +levtype,1148 +libraryVersion,1149 +listMembersMissing,1150 +listMembersMissing2,1151 +listMembersMissing3,1152 +listMembersMissing4,1153 +listMembersUsed,1154 +listMembersUsed2,1155 +listMembersUsed3,1156 +listMembersUsed4,1157 +listOfContributingSpectralBands,1158 +listOfDistributionFunctionParameter,1159 +listOfEnsembleForecastNumbers,1160 +listOfModelIdentifiers,1161 +listOfParametersUsedForClustering,1162 +listOfScaledFrequencies,1163 +listOfUsedTileAttributesInCombination,1164 +listOfWaveDirectionSequenceParameters,1165 +listOfWaveFrequencySequenceParameters,1166 +local,1167 +localDate,1168 +localDateTime,1169 +localDay,1170 +localDecimalScaleFactor,1171 +localDefNumberOne,1172 +localDefNumberTwo,1173 +localDefinition,1174 +localDefinitionNumber,1175 +localDir,1176 +localExtensionPadding,1177 +localFlag,1178 +localFlagLatestVersion,1179 +localHour,1180 +localLatitude,1181 +localLatitude1,1182 +localLatitude2,1183 +localLongitude,1184 +localLongitude1,1185 +localLongitude2,1186 +localMinute,1187 +localMonth,1188 +localNumberOfObservations,1189 +localSecond,1190 +localSection,1191 +localSectionPresent,1192 +localTablesVersion,1193 +localTablesVersionNumber,1194 +localTime,1195 +localTimeForecastList,1196 +localTimeMethod,1197 +localUsePresent,1198 +localYear,1199 +local_padding,1200 +local_use,1201 +logTransform,1202 +longitude,1203 +longitudeFirstInDegrees,1204 +longitudeLastInDegrees,1205 +longitudeOfCentralPointInClusterDomain,1206 +longitudeOfCentrePoint,1207 +longitudeOfCentrePointInDegrees,1208 +longitudeOfFirstDiamondCenterLine,1209 +longitudeOfFirstDiamondCentreLine,1210 +longitudeOfFirstDiamondCentreLineInDegrees,1211 +longitudeOfFirstGridPoint,1212 +longitudeOfFirstGridPointInDegrees,1213 +longitudeOfGridPoints,1214 +longitudeOfIcosahedronPole,1215 +longitudeOfLastGridPoint,1216 +longitudeOfLastGridPointInDegrees,1217 +longitudeOfNorthWestCornerOfArea,1218 +longitudeOfReferencePoint,1219 +longitudeOfReferencePointInDegrees,1220 +longitudeOfSouthEastCornerOfArea,1221 +longitudeOfSouthernPole,1222 +longitudeOfSouthernPoleInDegrees,1223 +longitudeOfStretchingPole,1224 +longitudeOfStretchingPoleInDegrees,1225 +longitudeOfSubSatellitePoint,1226 +longitudeOfSubSatellitePointInDegrees,1227 +longitudeOfTangencyPoint,1228 +longitudeOfThePoleOfStretching,1229 +longitudeOfThePolePoint,1230 +longitudeOfThePolePointInDegrees,1231 +longitudeOfTheSouthernPoleOfProjection,1232 +longitudeSexagesimal,1233 +longitudes,1234 +longitudesList,1235 +longitudinalDirectionGridLength,1236 +lowerLimit,1237 +lowerRange,1238 +lowerThreshold,1239 +lowerThresholdValue,1240 +ls_labeling,1241 +lsdate_bug,1242 +lstime_bug,1243 +m,1244 +mAngleMultiplier,1245 +mBasicAngle,1246 +mars,1247 +marsClass,1248 +marsClass1,1249 +marsClass2,1250 +marsDir,1251 +marsDomain,1252 +marsEndStep,1253 +marsExperimentOffset,1254 +marsExpver,1255 +marsForecastMonth,1256 +marsGrid,1257 +marsIdent,1258 +marsKeywords,1259 +marsKeywords1,1260 +marsLamModel,1261 +marsLatitude,1262 +marsLevel,1263 +marsLevelist,1264 +marsLongitude,1265 +marsModel,1266 +marsParam,1267 +marsQuantile,1268 +marsRange,1269 +marsStartStep,1270 +marsStep,1271 +marsStream,1272 +marsStream1,1273 +marsStream2,1274 +marsType,1275 +marsType1,1276 +marsType2,1277 +mars_labeling,1278 +mask,1279 +masterDir,1280 +masterTableNumber,1281 +masterTablesVersionNumber,1282 +masterTablesVersionNumberLatest,1283 +matchAerosolBinNumber,1284 +matchAerosolPacking,1285 +matchLandType,1286 +matchSort,1287 +matchTimeRepres,1288 +matrixBitmapsPresent,1289 +matrixOfValues,1290 +max,1291 +maxLevelValue,1292 +maximum,1293 +md5Data,1294 +md5DataSection,1295 +md5GridSection,1296 +md5Headers,1297 +md5Product,1298 +md5Section1,1299 +md5Section10,1300 +md5Section2,1301 +md5Section3,1302 +md5Section4,1303 +md5Section5,1304 +md5Section6,1305 +md5Section7,1306 +md5Section8,1307 +md5Section9,1308 +md5Structure,1309 +md5TimeDomainSection,1310 +meanRVR1,1311 +meanRVR2,1312 +meanRVR3,1313 +meanRVR4,1314 +meanSize,1315 +meanValueRVR1,1316 +meanValueRVR2,1317 +meanValueRVR3,1318 +meanValueRVR4,1319 +meaningOfVerticalCoordinate,1320 +memberNumber,1321 +messageLength,1322 +metadata,1323 +method,1324 +methodNumber,1325 +million,1326 +min,1327 +minimum,1328 +minute,1329 +minuteOfAnalysis,1330 +minuteOfEndOfOverallTimeInterval,1331 +minuteOfForecast,1332 +minuteOfForecastUsedInLocalTime,1333 +minuteOfModelVersion,1334 +minuteOfReference,1335 +minuteOfStartOfReferencePeriod,1336 +minutesAfterDataCutoff,1337 +minutesAfterReferenceTimeOfDataCutoff,1338 +missingDataFlag,1339 +missingValue,1340 +missingValueManagement,1341 +missingValueManagementUsed,1342 +missingValuesPresent,1343 +missing_values,1344 +mixedCoordinateDefinition,1345 +mixedCoordinateFieldFlag,1346 +modeNumber,1347 +model,1348 +modelErrorType,1349 +modelIdentifier,1350 +modelName,1351 +modelVersionDate,1352 +modelVersionTime,1353 +molarMass,1354 +month,1355 +monthOfAnalysis,1356 +monthOfEndOfOverallTimeInterval,1357 +monthOfForecast,1358 +monthOfForecastUsedInLocalTime,1359 +monthOfModelVersion,1360 +monthOfReference,1361 +monthOfStartOfReferencePeriod,1362 +monthlyVerificationDate,1363 +monthlyVerificationMonth,1364 +monthlyVerificationTime,1365 +monthlyVerificationYear,1366 +multiplicationFactorForLatLong,1367 +n,1368 +n2,1369 +n3,1370 +nTileAtt,1371 +nTileAttCombo,1372 +nTiles,1373 +na,1374 +name,1375 +nameECMF,1376 +nameLegacyECMF,1377 +nameOfFirstFixedSurface,1378 +nameOfSecondFixedSurface,1379 +names,1380 +nd,1381 +neitherPresent,1382 +newSubtype,1383 +nlev,1384 +nnn,1385 +normAtFinalTime,1386 +normAtInitialTime,1387 +normal,1388 +northLatitudeOfCluster,1389 +northLatitudeOfDomainOfTubing,1390 +northWestLatitudeOfLPOArea,1391 +northWestLatitudeOfVerficationArea,1392 +northWestLongitudeOfLPOArea,1393 +northWestLongitudeOfVerficationArea,1394 +northernLatitudeOfClusterDomain,1395 +northernLatitudeOfDomain,1396 +nosigPresent,1397 +notDecoded,1398 +nref,1399 +nt,1400 +number,1401 +numberInHorizontalCoordinates,1402 +numberInMixedCoordinateDefinition,1403 +numberInTheAuxiliaryArray,1404 +numberInTheGridCoordinateList,1405 +numberIncludedInAverage,1406 +numberMissingFromAveragesOrAccumulations,1407 +numberOfAdditionalParametersForReferencePeriod,1408 +numberOfAnalysis,1409 +numberOfBits,1410 +numberOfBitsContainingEachPackedValue,1411 +numberOfBitsForScaledGroupLengths,1412 +numberOfBitsUsedForTheGroupWidths,1413 +numberOfBitsUsedForTheScaledGroupLengths,1414 +numberOfBytesInLocalDefinition,1415 +numberOfBytesOfFreeFormatData,1416 +numberOfBytesPerInteger,1417 +numberOfCategories,1418 +numberOfCharacters,1419 +numberOfChars,1420 +numberOfClusterHighResolution,1421 +numberOfClusterLowResolution,1422 +numberOfClusters,1423 +numberOfCodedValues,1424 +numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction,1425 +numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction,1426 +numberOfColumns,1427 +numberOfComponents,1428 +numberOfContributingSpectralBands,1429 +numberOfControlForecastTube,1430 +numberOfCoordinatesValues,1431 +numberOfDataBinsAlongRadials,1432 +numberOfDataMatrices,1433 +numberOfDataPoints,1434 +numberOfDataPointsExpected,1435 +numberOfDataValues,1436 +numberOfDaysInClimateSamplingWindow,1437 +numberOfDiamonds,1438 +numberOfDirections,1439 +numberOfDistinctSection3s,1440 +numberOfDistinctSection4s,1441 +numberOfDistinctSection5s,1442 +numberOfDistinctSection6s,1443 +numberOfDistinctSection7s,1444 +numberOfDistinctSection8s,1445 +numberOfDistinctSection9s,1446 +numberOfDistributionFunctionParameters,1447 +numberOfEffectiveValues,1448 +numberOfFloats,1449 +numberOfForcasts,1450 +numberOfForecastsInCluster,1451 +numberOfForecastsInEnsemble,1452 +numberOfForecastsInTheCluster,1453 +numberOfForecastsInTube,1454 +numberOfForecastsUsedInLocalTime,1455 +numberOfFrequencies,1456 +numberOfGridInReference,1457 +numberOfGridUsed,1458 +numberOfGroups,1459 +numberOfGroupsOfDataValues,1460 +numberOfHorizontalPoints,1461 +numberOfIntegers,1462 +numberOfInts,1463 +numberOfIterations,1464 +numberOfLevelValues,1465 +numberOfLocalDefinitions,1466 +numberOfLogicals,1467 +numberOfMembersInCluster,1468 +numberOfMembersInEnsemble,1469 +numberOfMissing,1470 +numberOfMissingInStatisticalProcess,1471 +numberOfMissingValues,1472 +numberOfModeOfDistribution,1473 +numberOfModels,1474 +numberOfOctectsForNumberOfPoints,1475 +numberOfOctetsExtraDescriptors,1476 +numberOfOperationalForecastTube,1477 +numberOfPackedValues,1478 +numberOfParallelsBetweenAPoleAndTheEquator,1479 +numberOfParametersUsedForClustering,1480 +numberOfPartitions,1481 +numberOfPoints,1482 +numberOfPointsAlongAMeridian,1483 +numberOfPointsAlongAParallel,1484 +numberOfPointsAlongASide,1485 +numberOfPointsAlongFirstAxis,1486 +numberOfPointsAlongSecondAxis,1487 +numberOfPointsAlongTheXAxis,1488 +numberOfPointsAlongTheYAxis,1489 +numberOfPointsAlongXAxis,1490 +numberOfPointsAlongXAxisInCouplingArea,1491 +numberOfPointsAlongYAxis,1492 +numberOfPointsAlongYAxisInCouplingArea,1493 +numberOfPointsInDomain,1494 +numberOfPointsUsed,1495 +numberOfPressureLevelsUsedForClustering,1496 +numberOfRadarSitesUsed,1497 +numberOfRadials,1498 +numberOfReferencePeriodTimeRanges,1499 +numberOfReforecastYearsInModelClimate,1500 +numberOfRemaininChars,1501 +numberOfRepresentativeMember,1502 +numberOfReservedBytes,1503 +numberOfRows,1504 +numberOfSecondOrderPackedValues,1505 +numberOfSection,1506 +numberOfSingularVectorsComputed,1507 +numberOfSingularVectorsEvolved,1508 +numberOfStatisticallyProcessedFieldsForLocalTime,1509 +numberOfStepsUsedForClustering,1510 +numberOfSubsets,1511 +numberOfTensOfThousandsOfYearsOfOffset,1512 +numberOfTimeIncrementsOfForecastsUsedInLocalTime,1513 +numberOfTimeRange,1514 +numberOfTimeRanges,1515 +numberOfTimeSteps,1516 +numberOfUnexpandedDescriptors,1517 +numberOfUnusedBitsAtEndOfSection3,1518 +numberOfUsedSpatialTiles,1519 +numberOfUsedTileAttributeCombinationsForTypeOfTile,1520 +numberOfUsedTileAttributes,1521 +numberOfUsedTileAttributesForTileAttributeCombination,1522 +numberOfUsefulPointsAlongXAxis,1523 +numberOfUsefulPointsAlongYAxis,1524 +numberOfVGridUsed,1525 +numberOfValues,1526 +numberOfVerticalCoordinateValues,1527 +numberOfVerticalGridDescriptors,1528 +numberOfVerticalPoints,1529 +numberOfWaveDirectionSequenceParameters,1530 +numberOfWaveDirections,1531 +numberOfWaveFrequencies,1532 +numberOfWaveFrequencySequenceParameters,1533 +numberingOrderOfDiamonds,1534 +numericValues,1535 +observablePropertyTemplate,1536 +observablePropertyTemplateNumber,1537 +observationDiagnostic,1538 +observationGeneratingProcessIdentifier,1539 +observationType,1540 +observedData,1541 +obstype,1542 +oceanAtmosphereCoupling,1543 +oceanLevName,1544 +oceanStream,1545 +octetAtWichPackedDataBegins,1546 +offset,1547 +offsetAfterBitmap,1548 +offsetAfterCentreLocalSection,1549 +offsetAfterData,1550 +offsetAfterLocalSection,1551 +offsetAfterPadding,1552 +offsetBBitmap,1553 +offsetBSection5,1554 +offsetBSection6,1555 +offsetBSection9,1556 +offsetBeforeBitmap,1557 +offsetBeforeData,1558 +offsetBeforePL,1559 +offsetBeforePV,1560 +offsetDescriptors,1561 +offsetEndSection4,1562 +offsetFreeFormData,1563 +offsetFromOriginToInnerBound,1564 +offsetFromReferenceOfFirstTime,1565 +offsetICEFieldsUsed,1566 +offsetSection0,1567 +offsetSection1,1568 +offsetSection10,1569 +offsetSection11,1570 +offsetSection2,1571 +offsetSection3,1572 +offsetSection4,1573 +offsetSection5,1574 +offsetSection6,1575 +offsetSection7,1576 +offsetSection8,1577 +offsetSection9,1578 +offsetToEndOf4DvarWindow,1579 +offsetValuesBy,1580 +offsetdate,1581 +offsettime,1582 +oldSubtype,1583 +one,1584 +oneConstant,1585 +oneMillionConstant,1586 +oneMinuteMeanMaximumRVR1,1587 +oneMinuteMeanMaximumRVR2,1588 +oneMinuteMeanMaximumRVR3,1589 +oneMinuteMeanMaximumRVR4,1590 +oneMinuteMeanMinimumRVR1,1591 +oneMinuteMeanMinimumRVR2,1592 +oneMinuteMeanMinimumRVR3,1593 +oneMinuteMeanMinimumRVR4,1594 +oper,1595 +operStream,1596 +operatingMode,1597 +operationalForecastCluster,1598 +optimisationTime,1599 +optimizeScaleFactor,1600 +optionalData,1601 +opttime,1602 +orderOfSPD,1603 +orderOfSpatialDifferencing,1604 +ordering,1605 +orderingConvention,1606 +orientationOfTheGrid,1607 +orientationOfTheGridInDegrees,1608 +origin,1609 +originOfPostProcessing,1610 +originalParameterNumber,1611 +originalParameterTableNumber,1612 +originalSubCentreIdentifier,1613 +originatingCentre,1614 +originatingCentreOfAnalysis,1615 +originatingClass,1616 +originatorLocalTemplate,1617 +originatorLocalTemplateNumber,1618 +outerLoopLengthOfTimeRange,1619 +outerLoopTypeOfStatisticalProcessing,1620 +outerLoopTypeOfTimeIncrement,1621 +overlayTemplate,1622 +overlayTemplateNumber,1623 +pack,1624 +packedValues,1625 +packingError,1626 +packingType,1627 +padding,1628 +padding_grid1_1,1629 +padding_grid1_2,1630 +padding_grid3_1,1631 +padding_grid4_1,1632 +padding_grid50_1,1633 +padding_grid5_1,1634 +padding_grid90_1,1635 +padding_loc10_1,1636 +padding_loc12_1,1637 +padding_loc13_1,1638 +padding_loc13_2,1639 +padding_loc13_3,1640 +padding_loc13_4,1641 +padding_loc13_5,1642 +padding_loc14_1,1643 +padding_loc14_2,1644 +padding_loc15_1,1645 +padding_loc16_1,1646 +padding_loc17_2,1647 +padding_loc18_1,1648 +padding_loc18_2,1649 +padding_loc190_1,1650 +padding_loc191_1,1651 +padding_loc191_2,1652 +padding_loc191_3,1653 +padding_loc192_1,1654 +padding_loc19_2,1655 +padding_loc20_1,1656 +padding_loc21_1,1657 +padding_loc23_1,1658 +padding_loc244_1,1659 +padding_loc244_2,1660 +padding_loc244_3,1661 +padding_loc245_1,1662 +padding_loc245_2,1663 +padding_loc26_1,1664 +padding_loc27_1,1665 +padding_loc27_2,1666 +padding_loc28_1,1667 +padding_loc29_1,1668 +padding_loc29_2,1669 +padding_loc29_3,1670 +padding_loc2_1,1671 +padding_loc2_2,1672 +padding_loc30_1,1673 +padding_loc30_2,1674 +padding_loc37_1,1675 +padding_loc37_2,1676 +padding_loc38_1,1677 +padding_loc3_1,1678 +padding_loc4_2,1679 +padding_loc50_1,1680 +padding_loc5_1,1681 +padding_loc6_1,1682 +padding_loc7_1,1683 +padding_loc9_1,1684 +padding_loc9_2,1685 +padding_local11_1,1686 +padding_local1_1,1687 +padding_local1_31,1688 +padding_local40_1,1689 +padding_local_35,1690 +padding_local_7_1,1691 +padding_sec1_loc,1692 +padding_sec2_1,1693 +padding_sec2_2,1694 +padding_sec2_3,1695 +padding_sec3_1,1696 +padding_sec4_1,1697 +paleontologicalOffset,1698 +param,1699 +paramId,1700 +paramIdECMF,1701 +paramIdLegacyECMF,1702 +paramType,1703 +param_value_max,1704 +param_value_min,1705 +parameter,1706 +parameterCategory,1707 +parameterCode,1708 +parameterDiscipline,1709 +parameterIndicator,1710 +parameterName,1711 +parameterNumber,1712 +parameterUnits,1713 +parameters,1714 +parametersVersion,1715 +paramtype,1716 +partitionItems,1717 +partitionNumber,1718 +partitionTable,1719 +partitions,1720 +pastTendencyRVR1,1721 +pastTendencyRVR2,1722 +pastTendencyRVR3,1723 +pastTendencyRVR4,1724 +patch_precip_fp,1725 +pentagonalResolutionParameterJ,1726 +pentagonalResolutionParameterK,1727 +pentagonalResolutionParameterM,1728 +percentileValue,1729 +periodOfTime,1730 +periodOfTimeIntervals,1731 +perturbationNumber,1732 +perturbedType,1733 +phase,1734 +physicalFlag1,1735 +physicalFlag2,1736 +physicalMeaningOfVerticalCoordinate,1737 +pl,1738 +platform,1739 +plusOneinOrdersOfSPD,1740 +points,1741 +pointsOrdering,1742 +postAuxiliary,1743 +postAuxiliaryArrayPresent,1744 +postProcessing,1745 +powerOfTenUsedToScaleClimateWeight,1746 +preBitmapValues,1747 +preProcessingParameter,1748 +precision,1749 +precisionOfTheUnpackedSubset,1750 +predefined_grid,1751 +predefined_grid_values,1752 +preferLocalConcepts,1753 +present,1754 +presentTrend1,1755 +presentTrend2,1756 +presentTrend3,1757 +presentTrend4,1758 +presentWeather1Present,1759 +presentWeather1PresentTrend1,1760 +presentWeather1PresentTrend2,1761 +presentWeather1PresentTrend3,1762 +presentWeather1PresentTrend4,1763 +presentWeather2Present,1764 +presentWeather2PresentTrend1,1765 +presentWeather2PresentTrend2,1766 +presentWeather2PresentTrend3,1767 +presentWeather2PresentTrend4,1768 +presentWeather3Present,1769 +presentWeather3PresentTrend1,1770 +presentWeather3PresentTrend2,1771 +presentWeather3PresentTrend3,1772 +presentWeather3PresentTrend4,1773 +pressureLevel,1774 +pressureUnits,1775 +primaryBitmap,1776 +primaryMissingValue,1777 +primaryMissingValueSubstitute,1778 +probContinous,1779 +probPoint,1780 +probProductDefinition,1781 +probabilityType,1782 +probabilityTypeName,1783 +process,1784 +produceLargeConstantFields,1785 +product,1786 +productDefinition,1787 +productDefinitionTemplateNumber,1788 +productDefinitionTemplateNumberInternal,1789 +productIdentifier,1790 +productType,1791 +productionStatusOfProcessedData,1792 +projSourceString,1793 +projString,1794 +projTargetString,1795 +projectLocalTemplate,1796 +projectLocalTemplateNumber,1797 +projectionCenterFlag,1798 +projectionCentreFlag,1799 +pv,1800 +pvlLocation,1801 +qfe,1802 +qfePresent,1803 +qfeUnits,1804 +qnh,1805 +qnhAPresent,1806 +qnhPresent,1807 +qnhUnits,1808 +qualityControl,1809 +qualityControlIndicator,1810 +qualityValueAssociatedWithParameter,1811 +quantile,1812 +quantileValue,1813 +radialAngularSpacing,1814 +radials,1815 +radius,1816 +radiusInMetres,1817 +radiusOfCentralCluster,1818 +radiusOfClusterDomain,1819 +radiusOfTheEarth,1820 +range,1821 +rangeBinSpacing,1822 +rdbDateTime,1823 +rdbSubtype,1824 +rdbType,1825 +rdb_key,1826 +rdbtime,1827 +rdbtimeDate,1828 +rdbtimeDay,1829 +rdbtimeHour,1830 +rdbtimeMinute,1831 +rdbtimeMonth,1832 +rdbtimeSecond,1833 +rdbtimeTime,1834 +rdbtimeYear,1835 +realPart,1836 +realPartOf00,1837 +realization,1838 +recDateTime,1839 +recentWeather,1840 +recentWeatherTry,1841 +rectime,1842 +rectimeDay,1843 +rectimeHour,1844 +rectimeMinute,1845 +rectimeSecond,1846 +reducedGrid,1847 +refdate,1848 +reference,1849 +referenceDate,1850 +referenceForGroupLengths,1851 +referenceForGroupWidths,1852 +referenceOfLengths,1853 +referenceOfWidths,1854 +referencePeriodList,1855 +referenceReflectivityForEchoTop,1856 +referenceSampleInterval,1857 +referenceStep,1858 +referenceValue,1859 +referenceValueError,1860 +reflectivityCalibrationConstant,1861 +remarkPresent,1862 +reportType,1863 +representationMode,1864 +representationType,1865 +representativeMember,1866 +reserved,1867 +reserved1,1868 +reserved2,1869 +reserved3,1870 +reservedNeedNotBePresent,1871 +reservedOctet,1872 +reservedSection2,1873 +reservedSection3,1874 +reservedSection4,1875 +resolution,1876 +resolutionAndComponentFlags,1877 +resolutionAndComponentFlags1,1878 +resolutionAndComponentFlags2,1879 +resolutionAndComponentFlags3,1880 +resolutionAndComponentFlags4,1881 +resolutionAndComponentFlags6,1882 +resolutionAndComponentFlags7,1883 +resolutionAndComponentFlags8,1884 +restricted,1885 +rootGroupObjectHeaderAddress,1886 +rootGroupSymbolTableEntry,1887 +rootTablesDir,1888 +roundedMarsLatitude,1889 +roundedMarsLevelist,1890 +roundedMarsLongitude,1891 +runwayBrakingActionState1,1892 +runwayBrakingActionState2,1893 +runwayBrakingActionState3,1894 +runwayBrakingActionState4,1895 +runwayDepositCodeState1,1896 +runwayDepositCodeState2,1897 +runwayDepositCodeState3,1898 +runwayDepositCodeState4,1899 +runwayDepositState1,1900 +runwayDepositState2,1901 +runwayDepositState3,1902 +runwayDepositState4,1903 +runwayDepthOfDepositCodeState1,1904 +runwayDepthOfDepositCodeState2,1905 +runwayDepthOfDepositCodeState3,1906 +runwayDepthOfDepositCodeState4,1907 +runwayDepthOfDepositState1,1908 +runwayDepthOfDepositState2,1909 +runwayDepthOfDepositState3,1910 +runwayDepthOfDepositState4,1911 +runwayDesignatorRVR1,1912 +runwayDesignatorRVR2,1913 +runwayDesignatorRVR3,1914 +runwayDesignatorRVR4,1915 +runwayDesignatorState1,1916 +runwayDesignatorState2,1917 +runwayDesignatorState3,1918 +runwayDesignatorState4,1919 +runwayExtentOfContaminationCodeState1,1920 +runwayExtentOfContaminationCodeState2,1921 +runwayExtentOfContaminationCodeState3,1922 +runwayExtentOfContaminationCodeState4,1923 +runwayExtentOfContaminationState1,1924 +runwayExtentOfContaminationState2,1925 +runwayExtentOfContaminationState3,1926 +runwayExtentOfContaminationState4,1927 +runwayFrictionCodeValueState1,1928 +runwayFrictionCodeValueState2,1929 +runwayFrictionCodeValueState3,1930 +runwayFrictionCodeValueState4,1931 +runwayFrictionCoefficientCodeState1,1932 +runwayFrictionCoefficientCodeState2,1933 +runwayFrictionCoefficientCodeState3,1934 +runwayFrictionCoefficientCodeState4,1935 +runwayFrictionCoefficientState1,1936 +runwayFrictionCoefficientState2,1937 +runwayFrictionCoefficientState3,1938 +runwayFrictionCoefficientState4,1939 +runwaySideCodeState1,1940 +runwaySideCodeState2,1941 +runwaySideCodeState3,1942 +runwaySideCodeState4,1943 +runwayState,1944 +sampleSizeOfModelClimate,1945 +sampleSizeOfReferencePeriod,1946 +satelliteID,1947 +satelliteIdentifier,1948 +satelliteNumber,1949 +satelliteSeries,1950 +scaleFactorAtReferencePoint,1951 +scaleFactorOfAdditionalParameterForReferencePeriod,1952 +scaleFactorOfCentralWaveNumber,1953 +scaleFactorOfDistanceFromEnsembleMean,1954 +scaleFactorOfDistributionFunctionParameter,1955 +scaleFactorOfEarthMajorAxis,1956 +scaleFactorOfEarthMinorAxis,1957 +scaleFactorOfFirstFixedSurface,1958 +scaleFactorOfFirstSize,1959 +scaleFactorOfFirstWavelength,1960 +scaleFactorOfLengthOfSemiMajorAxis,1961 +scaleFactorOfLengthOfSemiMinorAxis,1962 +scaleFactorOfLowerLimit,1963 +scaleFactorOfLowerWavePeriodLimit,1964 +scaleFactorOfMajorAxisOfOblateSpheroidEarth,1965 +scaleFactorOfMinorAxisOfOblateSpheroidEarth,1966 +scaleFactorOfPrimeMeridianOffset,1967 +scaleFactorOfRadiusOfSphericalEarth,1968 +scaleFactorOfSecondFixedSurface,1969 +scaleFactorOfSecondSize,1970 +scaleFactorOfSecondWavelength,1971 +scaleFactorOfStandardDeviation,1972 +scaleFactorOfStandardDeviationInTheCluster,1973 +scaleFactorOfUpperLimit,1974 +scaleFactorOfUpperWavePeriodLimit,1975 +scaleFactorOfWaveDirectionSequenceParameter,1976 +scaleFactorOfWaveDirections,1977 +scaleFactorOfWaveFrequencies,1978 +scaleFactorOfWaveFrequencySequenceParameter,1979 +scaleValuesBy,1980 +scaledDirections,1981 +scaledFrequencies,1982 +scaledValueOfAdditionalParameterForReferencePeriod,1983 +scaledValueOfCentralWaveNumber,1984 +scaledValueOfDistanceFromEnsembleMean,1985 +scaledValueOfDistributionFunctionParameter,1986 +scaledValueOfEarthMajorAxis,1987 +scaledValueOfEarthMinorAxis,1988 +scaledValueOfFirstFixedSurface,1989 +scaledValueOfFirstSize,1990 +scaledValueOfFirstWavelength,1991 +scaledValueOfLengthOfSemiMajorAxis,1992 +scaledValueOfLengthOfSemiMinorAxis,1993 +scaledValueOfLowerLimit,1994 +scaledValueOfLowerWavePeriodLimit,1995 +scaledValueOfMajorAxisOfOblateSpheroidEarth,1996 +scaledValueOfMinorAxisOfOblateSpheroidEarth,1997 +scaledValueOfPrimeMeridianOffset,1998 +scaledValueOfRadiusOfSphericalEarth,1999 +scaledValueOfSecondFixedSurface,2000 +scaledValueOfSecondSize,2001 +scaledValueOfSecondWavelength,2002 +scaledValueOfStandardDeviation,2003 +scaledValueOfStandardDeviationInTheCluster,2004 +scaledValueOfUpperLimit,2005 +scaledValueOfUpperWavePeriodLimit,2006 +scaledValueOfWaveDirectionSequenceParameter,2007 +scaledValueOfWaveFrequencySequenceParameter,2008 +scaledValuesOfWaveDirections,2009 +scaledValuesOfWaveFrequencies,2010 +scalingFactorForFrequencies,2011 +scanPosition,2012 +scanningMode,2013 +scanningMode4,2014 +scanningMode5,2015 +scanningMode6,2016 +scanningMode7,2017 +scanningMode8,2018 +scanningModeForOneDiamond,2019 +sd,2020 +second,2021 +secondDimension,2022 +secondDimensionCoordinateValueDefinition,2023 +secondDimensionPhysicalSignificance,2024 +secondLatitude,2025 +secondLatitudeInDegrees,2026 +secondOfEndOfOverallTimeInterval,2027 +secondOfForecast,2028 +secondOfForecastUsedInLocalTime,2029 +secondOfModelVersion,2030 +secondOfStartOfReferencePeriod,2031 +secondOrderFlags,2032 +secondOrderOfDifferentWidth,2033 +secondOrderValuesDifferentWidths,2034 +secondSize,2035 +secondaryBitMap,2036 +secondaryBitmap,2037 +secondaryBitmapPresent,2038 +secondaryBitmaps,2039 +secondaryBitmapsCount,2040 +secondaryBitmapsSize,2041 +secondaryMissingValue,2042 +secondaryMissingValueSubstitute,2043 +secondsOfAnalysis,2044 +secondsOfReference,2045 +section,2046 +section0Length,2047 +section0Pointer,2048 +section1,2049 +section10Length,2050 +section10Pointer,2051 +section11Length,2052 +section11Pointer,2053 +section1Flags,2054 +section1Length,2055 +section1Padding,2056 +section1Pointer,2057 +section2Length,2058 +section2Padding,2059 +section2Pointer,2060 +section2Present,2061 +section2Used,2062 +section3Flags,2063 +section3Length,2064 +section3Padding,2065 +section3Pointer,2066 +section3UniqueIdentifier,2067 +section4,2068 +section4Length,2069 +section4Padding,2070 +section4Pointer,2071 +section4UniqueIdentifier,2072 +section5,2073 +section5Length,2074 +section5Pointer,2075 +section5UniqueIdentifier,2076 +section6,2077 +section6Length,2078 +section6Pointer,2079 +section6UniqueIdentifier,2080 +section7,2081 +section7Length,2082 +section7Pointer,2083 +section7UniqueIdentifier,2084 +section8,2085 +section8Length,2086 +section8Pointer,2087 +section8UniqueIdentifier,2088 +section9Length,2089 +section9Pointer,2090 +section9UniqueIdentifier,2091 +sectionLengthLimitForEnsembles,2092 +sectionLengthLimitForProbability,2093 +sectionNumber,2094 +sectionPosition,2095 +section_01,2096 +section_02,2097 +section_03,2098 +section_04,2099 +section_05,2100 +section_06,2101 +section_07,2102 +section_08,2103 +section_09,2104 +section_1,2105 +section_10,2106 +section_11,2107 +section_2,2108 +section_3,2109 +section_4,2110 +section_5,2111 +section_6,2112 +section_7,2113 +section_8,2114 +selectStepTemplateInstant,2115 +selectStepTemplateInterval,2116 +selectedDay,2117 +selectedFcIndex,2118 +selectedHour,2119 +selectedMinute,2120 +selectedMonth,2121 +selectedSecond,2122 +selectedYear,2123 +sensitiveAreaDomain,2124 +sequences,2125 +setBitsPerValue,2126 +setCalendarId,2127 +setDecimalPrecision,2128 +setLocalDefinition,2129 +setPackingType,2130 +setToMissingIfOutOfRange,2131 +sfc_levtype,2132 +shapeOfTheEarth,2133 +shapeOfVerificationArea,2134 +shortName,2135 +shortNameECMF,2136 +shortNameLegacyECMF,2137 +short_name,2138 +signature,2139 +significanceOfReferenceDateAndTime,2140 +significanceOfReferenceTime,2141 +simpleThinningMissingRadius,2142 +simpleThinningSkip,2143 +simpleThinningStart,2144 +siteElevation,2145 +siteId,2146 +siteLatitude,2147 +siteLongitude,2148 +sizeOfLength,2149 +sizeOfOffsets,2150 +sizeOfPostAuxiliaryArray,2151 +sizeOfPostAuxiliaryArrayPlusOne,2152 +skew,2153 +skewness,2154 +skipExtraKeyAttributes,2155 +sort,2156 +sourceOfGridDefinition,2157 +sourceSinkChemicalPhysicalProcess,2158 +southEastLatitudeOfLPOArea,2159 +southEastLatitudeOfVerficationArea,2160 +southEastLongitudeOfLPOArea,2161 +southEastLongitudeOfVerficationArea,2162 +southLatitudeOfCluster,2163 +southLatitudeOfDomainOfTubing,2164 +southPoleOnProjectionPlane,2165 +southernLatitudeOfClusterDomain,2166 +southernLatitudeOfDomain,2167 +sp1,2168 +sp2,2169 +sp3,2170 +spaceUnitFlag,2171 +spacingOfBinsAlongRadials,2172 +spare,2173 +spare1,2174 +spare2,2175 +spare3,2176 +spare4,2177 +spatialProcessing,2178 +spatialSmoothingOfProduct,2179 +spectralDataRepresentationMode,2180 +spectralDataRepresentationType,2181 +spectralMode,2182 +spectralType,2183 +sphericalHarmonics,2184 +standardDeviation,2185 +standardParallel,2186 +standardParallelInDegrees,2187 +standardParallelInMicrodegrees,2188 +startDateOfReferencePeriod,2189 +startOfHeaders,2190 +startOfMessage,2191 +startOfRange,2192 +startStep,2193 +startStepInHours,2194 +startStepUnit,2195 +startTimeStep,2196 +startingAzimuth,2197 +statisticalProcess,2198 +statisticalProcessesList,2199 +statistics,2200 +status,2201 +step,2202 +stepForClustering,2203 +stepHumanReadable,2204 +stepInHours,2205 +stepRange,2206 +stepRangeInHours,2207 +stepType,2208 +stepTypeForConversion,2209 +stepTypeInternal,2210 +stepUnits,2211 +stepZero,2212 +stepunits,2213 +stream,2214 +streamOfAnalysis,2215 +stretchingFactor,2216 +stretchingFactorScaled,2217 +stringValues,2218 +subCentre,2219 +subDefinitions1,2220 +subDefinitions2,2221 +subLocalDefinition1,2222 +subLocalDefinition2,2223 +subLocalDefinitionLength1,2224 +subLocalDefinitionLength2,2225 +subLocalDefinitionNumber1,2226 +subLocalDefinitionNumber2,2227 +subSetJ,2228 +subSetK,2229 +subSetM,2230 +subcentreOfAnalysis,2231 +subdivisionsOfBasicAngle,2232 +suiteName,2233 +superblockExtensionAddress,2234 +swapScanningAlternativeRows,2235 +swapScanningLat,2236 +swapScanningLon,2237 +swapScanningX,2238 +swapScanningY,2239 +system,2240 +systemNumber,2241 +t,2242 +table2Version,2243 +tableCode,2244 +tableNumber,2245 +tableReference,2246 +tablesLocalDir,2247 +tablesMasterDir,2248 +tablesVersion,2249 +tablesVersionLatest,2250 +tablesVersionLatestOfficial,2251 +targetCompressionRatio,2252 +td,2253 +tempPressureUnits,2254 +temperature,2255 +temperatureAndDewpointPresent,2256 +templatesLocalDir,2257 +templatesMasterDir,2258 +theHindcastMarsStream,2259 +theMessage,2260 +thisExperimentVersionNumber,2261 +thisMarsClass,2262 +thisMarsStream,2263 +thisMarsType,2264 +thousand,2265 +three,2266 +threshold,2267 +thresholdIndicator,2268 +tiggeCentre,2269 +tiggeLAMName,2270 +tiggeLocalVersion,2271 +tiggeModel,2272 +tiggeSection,2273 +tiggeSuiteID,2274 +tigge_name,2275 +tigge_short_name,2276 +tile,2277 +tileAttribute,2278 +tileClassification,2279 +tileGrouping,2280 +tileIndex,2281 +tileName,2282 +time,2283 +timeCoordinateDefinition,2284 +timeDomainTemplate,2285 +timeDomainTemplateNumber,2286 +timeIncrement,2287 +timeIncrementBetweenSuccessiveFields,2288 +timeOfAnalysis,2289 +timeOfForecast,2290 +timeOfForecastUsedInLocalTime,2291 +timeOfModelVersion,2292 +timeOfReference,2293 +timeRangeIndicator,2294 +timeRangeIndicatorFromStepRange,2295 +timeUnitFlag,2296 +timerepres,2297 +topLevel,2298 +total,2299 +totalAerosolBinsNumbers,2300 +totalInitialConditions,2301 +totalLength,2302 +totalNumber,2303 +totalNumberOfClusters,2304 +totalNumberOfDataValuesMissingInStatisticalProcess,2305 +totalNumberOfDirections,2306 +totalNumberOfForecastProbabilities,2307 +totalNumberOfFrequencies,2308 +totalNumberOfGridPoints,2309 +totalNumberOfIterations,2310 +totalNumberOfQuantiles,2311 +totalNumberOfRepetitions,2312 +totalNumberOfTileAttributeCombinations,2313 +totalNumberOfTileAttributePairs,2314 +totalNumberOfTubes,2315 +totalNumberOfValuesInUnpackedSubset,2316 +totalNumberOfWaveDirections,2317 +totalNumberOfWaveFrequencies,2318 +totalNumberOfdimensions,2319 +totalTileAttCombo,2320 +treatmentOfMissingData,2321 +true,2322 +trueLengthOfLastGroup,2323 +truncateDegrees,2324 +truncateLaplacian,2325 +tsectionNumber3,2326 +tsectionNumber4,2327 +tsectionNumber5,2328 +tubeDomain,2329 +tubeNumber,2330 +two,2331 +twoOrdersOfSPD,2332 +type,2333 +typeOfAnalysis,2334 +typeOfAuxiliaryInformation,2335 +typeOfCalendar,2336 +typeOfCompressionUsed,2337 +typeOfDistributionFunction,2338 +typeOfEnsembleForecast,2339 +typeOfEnsembleMember,2340 +typeOfFirstFixedSurface,2341 +typeOfGeneratingProcess,2342 +typeOfGrid,2343 +typeOfHorizontalLine,2344 +typeOfIntervalForFirstAndSecondSize,2345 +typeOfIntervalForFirstAndSecondWavelength,2346 +typeOfLevel,2347 +typeOfLevelECMF,2348 +typeOfOriginalFieldValues,2349 +typeOfPacking,2350 +typeOfPostProcessing,2351 +typeOfPreProcessing,2352 +typeOfProcessedData,2353 +typeOfReferenceDataset,2354 +typeOfRelationToReferenceDataset,2355 +typeOfSSTFieldUsed,2356 +typeOfSecondFixedSurface,2357 +typeOfSizeInterval,2358 +typeOfStatisticalPostProcessingOfEnsembleMembers,2359 +typeOfStatisticalProcessing,2360 +typeOfStatisticalProcessingForTimeRangeForReferencePeriod,2361 +typeOfTile,2362 +typeOfTimeIncrement,2363 +typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing,2364 +typeOfWaveDirectionSequence,2365 +typeOfWaveFrequencySequence,2366 +typeOfWavePeriodInterval,2367 +typeOfWavelengthInterval,2368 +typicalCentury,2369 +typicalDate,2370 +typicalDateTime,2371 +typicalDay,2372 +typicalHour,2373 +typicalMinute,2374 +typicalMonth,2375 +typicalSecond,2376 +typicalTime,2377 +typicalYear,2378 +typicalYear2,2379 +typicalYearOfCentury,2380 +uco,2381 +ucs,2382 +uerraLocalVersion,2383 +uerraSection,2384 +unexpandedDescriptors,2385 +unexpandedDescriptorsEncoded,2386 +unitOfOffsetFromReferenceTime,2387 +unitOfTime,2388 +unitOfTimeIncrement,2389 +unitOfTimeRange,2390 +units,2391 +unitsBias,2392 +unitsConversionOffset,2393 +unitsConversionScaleFactor,2394 +unitsDecimalScaleFactor,2395 +unitsECMF,2396 +unitsFactor,2397 +unitsLegacyECMF,2398 +unitsOfFirstFixedSurface,2399 +unitsOfSecondFixedSurface,2400 +unknown,2401 +unpack,2402 +unpackedError,2403 +unpackedSubsetPrecision,2404 +unpackedValues,2405 +unsignedIntegers,2406 +unstructuredGrid,2407 +unstructuredGridSubtype,2408 +unstructuredGridType,2409 +unstructuredGridUUID,2410 +unusedBitsInBitmap,2411 +updateSequenceNumber,2412 +upperLimit,2413 +upperRange,2414 +upperThreshold,2415 +upperThresholdValue,2416 +userDateEnd,2417 +userDateStart,2418 +userDateTimeEnd,2419 +userDateTimeStart,2420 +userTimeEnd,2421 +userTimeStart,2422 +uuid,2423 +uuidOfDataGroup,2424 +uuidOfHGrid,2425 +uuidOfVGrid,2426 +uvRelativeToGrid,2427 +validityDate,2428 +validityDateTime,2429 +validityTime,2430 +values,2431 +variationOfVisibility,2432 +variationOfVisibilityDirection,2433 +variationOfVisibilityDirectionAngle,2434 +variationOfVisibilityDirectionTrend1,2435 +variationOfVisibilityDirectionTrend2,2436 +variationOfVisibilityDirectionTrend3,2437 +variationOfVisibilityDirectionTrend4,2438 +variationOfVisibilityTrend1,2439 +variationOfVisibilityTrend2,2440 +variationOfVisibilityTrend3,2441 +variationOfVisibilityTrend4,2442 +varno,2443 +verificationDate,2444 +verificationMonth,2445 +verificationYear,2446 +verifyingMonth,2447 +version,2448 +versionNumOfFilesFreeSpaceStorage,2449 +versionNumOfRootGroupSymbolTableEntry,2450 +versionNumOfSharedHeaderMessageFormat,2451 +versionNumberOfExperimentalSuite,2452 +versionNumberOfGribLocalTables,2453 +versionNumberOfSuperblock,2454 +versionOfModelClimate,2455 +verticalCoordinate,2456 +verticalCoordinateDefinition,2457 +verticalDomainTemplate,2458 +verticalDomainTemplateNumber,2459 +verticalVisibility,2460 +verticalVisibilityCoded,2461 +visibility,2462 +visibilityInKilometresTrend1,2463 +visibilityInKilometresTrend2,2464 +visibilityInKilometresTrend3,2465 +visibilityInKilometresTrend4,2466 +visibilityTrend1,2467 +visibilityTrend2,2468 +visibilityTrend3,2469 +visibilityTrend4,2470 +waveDirectionNumber,2471 +waveDomain,2472 +waveFrequencyNumber,2473 +waveLevType,2474 +weightAppliedToClimateMonth1,2475 +westLongitudeOfCluster,2476 +westLongitudeOfDomainOfTubing,2477 +westernLongitudeOfClusterDomain,2478 +westernLongitudeOfDomain,2479 +widthOfFirstOrderValues,2480 +widthOfLengths,2481 +widthOfSPD,2482 +widthOfWidths,2483 +windDirection,2484 +windDirectionTrend1,2485 +windDirectionTrend2,2486 +windDirectionTrend3,2487 +windDirectionTrend4,2488 +windGust,2489 +windGustTrend1,2490 +windGustTrend2,2491 +windGustTrend3,2492 +windGustTrend4,2493 +windPresent,2494 +windSpeed,2495 +windSpeedTrend1,2496 +windSpeedTrend2,2497 +windSpeedTrend3,2498 +windSpeedTrend4,2499 +windUnits,2500 +windUnitsTrend1,2501 +windUnitsTrend2,2502 +windUnitsTrend3,2503 +windUnitsTrend4,2504 +windVariableDirection,2505 +windVariableDirectionTrend1,2506 +windVariableDirectionTrend2,2507 +windVariableDirectionTrend3,2508 +windVariableDirectionTrend4,2509 +wrongPadding,2510 +xCoordinateOfOriginOfSectorImage,2511 +xCoordinateOfSubSatellitePoint,2512 +xDirectionGridLength,2513 +xDirectionGridLengthInMetres,2514 +xDirectionGridLengthInMillimetres,2515 +xFirst,2516 +xLast,2517 +yCoordinateOfOriginOfSectorImage,2518 +yCoordinateOfSubSatellitePoint,2519 +yDirectionGridLength,2520 +yDirectionGridLengthInMetres,2521 +yDirectionGridLengthInMillimetres,2522 +yFirst,2523 +yLast,2524 +year,2525 +yearOfAnalysis,2526 +yearOfCentury,2527 +yearOfEndOfOverallTimeInterval,2528 +yearOfForecast,2529 +yearOfForecastUsedInLocalTime,2530 +yearOfModelVersion,2531 +yearOfReference,2532 +yearOfStartOfReferencePeriod,2533 +zero,2534 +zeros,2535 diff --git a/tests/largefile.cc b/tests/largefile.cc index a09d84be4..51e77949b 100644 --- a/tests/largefile.cc +++ b/tests/largefile.cc @@ -14,12 +14,6 @@ #include #endif -void usage(const char* prog) -{ - printf("usage: %s filename\n", prog); - exit(1); -} - int main(int argc, char* argv[]) { off_t offsetin = 0, offsetout = 0; @@ -30,7 +24,7 @@ int main(int argc, char* argv[]) char str[10]; int i; - if (argc != 2) usage(argv[0]); + if (argc != 2) return 1; printf("sizeof(off_t)=%zu sizeof(long)=%zu\n", sizeof(off_t), sizeof(long)); diff --git a/tests/list_all_keys.sh b/tests/list_all_keys.sh index 573d166d6..78ee26631 100755 --- a/tests/list_all_keys.sh +++ b/tests/list_all_keys.sh @@ -32,7 +32,7 @@ cat >keys <> keys diff --git a/tests/read_any.cc b/tests/read_any.cc index f340aede9..98f1d450f 100644 --- a/tests/read_any.cc +++ b/tests/read_any.cc @@ -9,12 +9,6 @@ */ #include "grib_api.h" -static void usage(const char* prog) -{ - printf("usage: %s infile\n", prog); - exit(1); -} - static unsigned char buffer[50000000]; int main(int argc, char* argv[]) @@ -35,7 +29,7 @@ int main(int argc, char* argv[]) size_t len; if (argc != 2) - usage(argv[0]); + return 1; filename = argv[1]; f = fopen(filename, "rb"); diff --git a/tests/unit_tests.cc b/tests/unit_tests.cc index 539b03873..d5e228124 100644 --- a/tests/unit_tests.cc +++ b/tests/unit_tests.cc @@ -41,12 +41,23 @@ static void check_float_representation(const double val, const double expected, compare_doubles(out, expected, tolerance); } +static void test_get_package_name() +{ + printf("Running %s ...\n", __func__); + + const char* pn = codes_get_package_name(); + Assert(pn != NULL); + Assert(strlen(pn) > 1); + printf("Package name = %s\n", pn); +} + static void test_get_git_sha1() { printf("Running %s ...\n", __func__); - const char* sha1 = grib_get_git_sha1(); + const char* sha1 = codes_get_git_sha1(); Assert(sha1 != NULL); + printf("Git SHA1 = %s\n", sha1); } static void test_get_build_date() @@ -645,12 +656,13 @@ void test_codes_get_product_name() Assert( STR_EQUAL("BUFR", codes_get_product_name(PRODUCT_BUFR)) ); Assert( STR_EQUAL("GTS", codes_get_product_name(PRODUCT_GTS)) ); Assert( STR_EQUAL("METAR", codes_get_product_name(PRODUCT_METAR)) ); + Assert( STR_EQUAL("TAF", codes_get_product_name(PRODUCT_TAF)) ); } void test_codes_get_type_name() { printf("Running %s ...\n", __func__); - Assert( STR_EQUAL("long", grib_get_type_name(GRIB_TYPE_LONG)) ); + Assert( STR_EQUAL("long", codes_get_type_name(GRIB_TYPE_LONG)) ); Assert( STR_EQUAL("string", grib_get_type_name(GRIB_TYPE_STRING)) ); Assert( STR_EQUAL("double", grib_get_type_name(GRIB_TYPE_DOUBLE)) ); Assert( STR_EQUAL("bytes", grib_get_type_name(GRIB_TYPE_BYTES)) ); @@ -667,7 +679,7 @@ void test_grib2_select_PDTN() int chemical_srcsink = 1; int chemical_distfn = 1; int aerosol = 1; - //int aerosol_optical = 1; + int aerosol_optical = 1; // arguments = eps instant chemical chemical_srcsink chemical_distfn aerosol aerosol_optical @@ -678,19 +690,29 @@ void test_grib2_select_PDTN() Assert( 43 == grib2_select_PDTN(eps, !instant, chemical, 0, 0, 0, 0) ); // Chemical source/sink - Assert( 76 == grib2_select_PDTN(!eps, instant, !chemical, chemical_srcsink,0,0,0) ); - Assert( 77 == grib2_select_PDTN(eps, instant, !chemical, chemical_srcsink,0,0,0) ); - Assert( 78 == grib2_select_PDTN(!eps, !instant, !chemical, chemical_srcsink,0,0,0) ); - Assert( 79 == grib2_select_PDTN(eps, !instant, !chemical, chemical_srcsink,0,0,0) ); + Assert( 76 == grib2_select_PDTN(!eps, instant, !chemical, chemical_srcsink, 0,0,0) ); + Assert( 77 == grib2_select_PDTN(eps, instant, !chemical, chemical_srcsink, 0,0,0) ); + Assert( 78 == grib2_select_PDTN(!eps, !instant, !chemical, chemical_srcsink, 0,0,0) ); + Assert( 79 == grib2_select_PDTN(eps, !instant, !chemical, chemical_srcsink, 0,0,0) ); + + // Chemical distrib. function + Assert( 58 == grib2_select_PDTN(eps, instant, 0, 0, chemical_distfn, 0, 0) ); + Assert( 68 == grib2_select_PDTN(eps, !instant, 0, 0, chemical_distfn, 0, 0) ); + Assert( 57 == grib2_select_PDTN(!eps, instant, 0, 0, chemical_distfn, 0, 0) ); + Assert( 67 == grib2_select_PDTN(!eps, !instant, 0, 0, chemical_distfn, 0, 0) ); // Aerosols - Assert( 48 == grib2_select_PDTN(!eps, instant, !chemical, !chemical_srcsink, !chemical_distfn, aerosol, 0) ); - Assert( 46 == grib2_select_PDTN(!eps, !instant, !chemical, !chemical_srcsink, !chemical_distfn, aerosol, 0) ); - Assert( 45 == grib2_select_PDTN(eps, instant, !chemical, !chemical_srcsink, !chemical_distfn, aerosol, 0) ); - Assert( 85 == grib2_select_PDTN(eps, !instant, !chemical, !chemical_srcsink, !chemical_distfn, aerosol, 0) ); + Assert( 48 == grib2_select_PDTN(!eps, instant, 0, 0, 0, aerosol, 0) ); + Assert( 46 == grib2_select_PDTN(!eps, !instant, 0, 0, 0, aerosol, 0) ); + Assert( 45 == grib2_select_PDTN(eps, instant, 0, 0, 0, aerosol, 0) ); + Assert( 85 == grib2_select_PDTN(eps, !instant, 0, 0, 0, aerosol, 0) ); + + // Aerosol optical + Assert( 49 == grib2_select_PDTN(eps, instant, 0, 0, 0, 0, aerosol_optical) ); + Assert( 48 == grib2_select_PDTN(!eps, instant, 0, 0, 0, 0, aerosol_optical) ); // Plain vanilla - Assert( 0 == grib2_select_PDTN(!eps, instant, !chemical, !chemical_srcsink, !chemical_distfn, !aerosol,0) ); + Assert( 0 == grib2_select_PDTN(!eps, instant, !chemical, !chemical_srcsink, !chemical_distfn, !aerosol, 0) ); Assert( 1 == grib2_select_PDTN(1,1,0,0,0, !aerosol,0) ); Assert( 8 == grib2_select_PDTN(0,0,0,0,0, !aerosol,0) ); Assert( 11 == grib2_select_PDTN(1,0,0,0,0, !aerosol,0) ); @@ -728,6 +750,7 @@ int main(int argc, char** argv) test_parse_keyval_string(); test_get_git_sha1(); + test_get_package_name(); test_get_build_date(); test_gribex_mode(); test_gts_header_mode(); diff --git a/tools/bufr_compare.cc b/tools/bufr_compare.cc index c6714fedb..e0447e20b 100644 --- a/tools/bufr_compare.cc +++ b/tools/bufr_compare.cc @@ -84,7 +84,6 @@ static int compare_attribute(grib_handle* handle1, grib_handle* handle2, grib_ru static int error = 0; static int count = 0; -static int lastPrint = 0; static int force = 0; /* ECC-651: Boolean 'two_way' set to 1 when '-2' option used */ @@ -236,7 +235,7 @@ int grib_tool_before_getopt(grib_runtime_options* options) int grib_tool_init(grib_runtime_options* options) { - int ret = 0, i; + int ret = 0; grib_context* context = grib_context_get_default(); options->strict = 1; @@ -315,16 +314,6 @@ int grib_tool_init(grib_runtime_options* options) compare_double = &compare_double_absolute; if (grib_options_on("R:")) { global_tolerance = 0; - for (i = 0; i < options->tolerance_count; i++) { - if (!strcmp((options->tolerance[i]).name, "all")) { - global_tolerance = (options->tolerance[i]).double_value; - break; - } - if (!strcmp((options->tolerance[i]).name, "global")) { - global_tolerance = (options->tolerance[i]).double_value; - break; - } - } compare_double = &compare_double_relative; compareAbsolute = 0; } @@ -342,9 +331,9 @@ int grib_tool_init(grib_runtime_options* options) tolerance_factor = atof(grib_options_get_option("t:")); if (grib_options_on("R:")) { - char* sarg = grib_options_get_option("R:"); + char* sarg = grib_options_get_option("R:"); options->tolerance_count = MAX_KEYS; - ret = parse_keyval_string(tool_name, sarg, 1, GRIB_TYPE_DOUBLE, options->tolerance, &(options->tolerance_count)); + ret = parse_keyval_string(tool_name, sarg, 1, GRIB_TYPE_DOUBLE, options->tolerance, &(options->tolerance_count)); if (ret == GRIB_INVALID_ARGUMENT) { usage(); exit(1); @@ -389,7 +378,6 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi static void printInfo(grib_handle* h) { printf("== %d == DIFFERENCE == ", count); - lastPrint = count; } static void print_index_key_values(grib_index* index, int icounter, const char* error_message) @@ -771,11 +759,10 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g return GRIB_COUNT_MISMATCH; } */ - if (options->mode != MODE_BUFR) { + Assert(options->mode == MODE_BUFR); /* TODO: Ignore missing values for keys in BUFR. Not yet implemented */ //isMissing1 = ((grib_is_missing(handle1, name, &err1) == 1) && (err1 == 0)) ? 1 : 0; //isMissing2 = ((grib_is_missing(handle2, name, &err2) == 1) && (err2 == 0)) ? 1 : 0; - } if ((isMissing1 == 1) && (isMissing2 == 1)) { // if (verbose) printf(" is set to missing in both fields\n"); @@ -1081,16 +1068,14 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g break; case GRIB_TYPE_BYTES: - if (options->mode == MODE_BUFR) - return 0; + return 0; // Not in BUFR break; case GRIB_TYPE_LABEL: break; default: - if (verbose) - printf("\n"); + if (verbose) printf("\n"); printInfo(handle1); save_error(c, name); printf("Cannot compare [%s], unsupported type %d\n", name, type1); @@ -1272,10 +1257,9 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt else { const void *msg1 = NULL, *msg2 = NULL; size_t size1 = 0, size2 = 0; - int memcmp_ret = 0; GRIB_CHECK_NOLINE(grib_get_message(handle1, &msg1, &size1), 0); GRIB_CHECK_NOLINE(grib_get_message(handle2, &msg2, &size2), 0); - if (size1 == size2 && !(memcmp_ret = memcmp(msg1, msg2, size1))) { + if (size1 == size2 && 0 == memcmp(msg1, msg2, size1)) { return 0; } #if defined(BUFR_COMPARE_BYTES) diff --git a/tools/codes_export_resource.cc b/tools/codes_export_resource.cc index f2d484fbb..61a8b7db6 100644 --- a/tools/codes_export_resource.cc +++ b/tools/codes_export_resource.cc @@ -62,7 +62,7 @@ int main(int argc, char* argv[]) } if (resource_type == SAMPLE) { - full_path = get_external_template_path(c, resource_path); + full_path = get_external_sample_path(c, resource_path); } else if (resource_type == DEFINITION) { full_path = grib_context_full_defs_path(c, resource_path); diff --git a/tools/codes_info.cc b/tools/codes_info.cc index a351ec34e..a73dcde14 100644 --- a/tools/codes_info.cc +++ b/tools/codes_info.cc @@ -136,8 +136,8 @@ int main(int argc, char* argv[]) "It is recommended you use ECCODES_SAMPLES_PATH instead!)\n"); } else { - printf("Default SAMPLES path is used: %s\n", context->grib_samples_path); - printf("SAMPLES path can be changed by setting the ECCODES_SAMPLES_PATH environment variable.\n"); + printf("Default samples path is used: %s\n", context->grib_samples_path); + printf("Samples path can be changed by setting the ECCODES_SAMPLES_PATH environment variable.\n"); } if ((path = getenv("ECCODES_EXTRA_SAMPLES_PATH")) != NULL) { printf("Environment variable ECCODES_EXTRA_SAMPLES_PATH=%s\n", path); diff --git a/tools/codes_split_file.cc b/tools/codes_split_file.cc index 384904602..62484b2e3 100644 --- a/tools/codes_split_file.cc +++ b/tools/codes_split_file.cc @@ -20,7 +20,7 @@ #include "grib_api_internal.h" #include -static int verbose = 0; +static bool verbose = false; static const char* OUTPUT_FILENAME_FORMAT = "%s_%03d"; /* x_001, x_002 etc */ static void usage(const char* prog) { @@ -29,6 +29,11 @@ static void usage(const char* prog) exit(1); } +static void print_num_messages_written(const char* output_filename, size_t n) +{ + printf("Wrote output file %s (%zu message%s)\n", output_filename, n, n==1?"":"s"); +} + static int split_file(FILE* in, const char* filename, const int nchunks, unsigned long* count) { void* mesg = NULL; @@ -76,8 +81,9 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne read_size += size; msg_size += size; if (read_size > chunk_size && msg_size < insize) { - if (verbose) - printf("Wrote output file %s (%zu msgs)\n", ofilename, num_msg); + if (verbose) { + print_num_messages_written(ofilename, num_msg); + } fclose(out); i++; /* Start writing to the next file */ @@ -95,8 +101,9 @@ static int split_file(FILE* in, const char* filename, const int nchunks, unsigne (*count)++; } } - if (verbose) - printf("Wrote output file %s (%zu msgs)\n", ofilename, num_msg - 1); + if (verbose) { + print_num_messages_written(ofilename, num_msg - 1); + } fclose(out); free(ofilename); @@ -118,7 +125,7 @@ int main(int argc, char* argv[]) i = 1; if (strcmp(argv[i], "-v") == 0) { i++; - verbose = 1; + verbose = true; if (argc != 4) usage(argv[0]); } diff --git a/tools/grib_check_gaussian_grid.cc b/tools/grib_check_gaussian_grid.cc index ce944fa28..9c0e8ab2a 100644 --- a/tools/grib_check_gaussian_grid.cc +++ b/tools/grib_check_gaussian_grid.cc @@ -227,7 +227,8 @@ static int process_file(const char* filename) } if (fabs(lon2 - expected_lon2) > angular_tolerance) { - error(filename, msg_num, "longitudeOfLastGridPointInDegrees=%f but should be %f\n", lon2, expected_lon2); + error(filename, msg_num, "longitudeOfLastGridPointInDegrees=%f but should be %f (= 360 - 360/max(pl) )\n", + lon2, expected_lon2); } GRIB_CHECK(grib_get_size(h, "values", &sizeOfValuesArray), 0); diff --git a/tools/grib_compare.cc b/tools/grib_compare.cc index e70119d6d..558ff0386 100644 --- a/tools/grib_compare.cc +++ b/tools/grib_compare.cc @@ -330,18 +330,7 @@ int grib_tool_init(grib_runtime_options* options) global_tolerance = 0; compare_double = &compare_double_absolute; if (grib_options_on("R:")) { - int i; global_tolerance = 0; - for (i = 0; i < options->tolerance_count; i++) { - if (!strcmp((options->tolerance[i]).name, "all")) { - global_tolerance = (options->tolerance[i]).double_value; - break; - } - if (!strcmp((options->tolerance[i]).name, "global")) { - global_tolerance = (options->tolerance[i]).double_value; - break; - } - } compare_double = &compare_double_relative; compareAbsolute = 0; } @@ -374,9 +363,9 @@ int grib_tool_init(grib_runtime_options* options) tolerance_factor = atof(grib_options_get_option("T:")); if (grib_options_on("R:")) { - char* sarg = grib_options_get_option("R:"); + char* sarg = grib_options_get_option("R:"); options->tolerance_count = MAX_KEYS; - ret = parse_keyval_string(tool_name, sarg, 1, GRIB_TYPE_DOUBLE, options->tolerance, &(options->tolerance_count)); + ret = parse_keyval_string(tool_name, sarg, 1, GRIB_TYPE_DOUBLE, options->tolerance, &(options->tolerance_count)); if (ret == GRIB_INVALID_ARGUMENT) { usage(); exit(1); @@ -1212,8 +1201,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option grib_handle *h11, *h22; GRIB_CHECK_NOLINE(grib_get_message_headers(h1, &msg1, &size1), 0); GRIB_CHECK_NOLINE(grib_get_message_headers(h2, &msg2, &size2), 0); - if (size1 == size2 && !memcmp(msg1, msg2, size1)) + if ( size1 == size2 && (0 == memcmp(msg1, msg2, size1)) ) { return 0; + } err = 0; h11 = grib_handle_new_from_partial_message(h1->context, msg1, size1); @@ -1279,8 +1269,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option size_t size1 = 0, size2 = 0; GRIB_CHECK_NOLINE(grib_get_message(h1, &msg1, &size1), 0); GRIB_CHECK_NOLINE(grib_get_message(h2, &msg2, &size2), 0); - if (size1 == size2 && !memcmp(msg1, msg2, size1)) + if ( size1 == size2 && (0 == memcmp(msg1, msg2, size1)) ) { return 0; + } iter = grib_keys_iterator_new(h1, GRIB_KEYS_ITERATOR_SKIP_COMPUTED, NULL); if (!iter) { diff --git a/tools/grib_histogram.cc b/tools/grib_histogram.cc index 08ce17f89..90a7e8532 100644 --- a/tools/grib_histogram.cc +++ b/tools/grib_histogram.cc @@ -58,10 +58,11 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi */ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { - size_t i, j, err = 0; + size_t i, j; size_t last_size = 0; long missingValuesPresent; double delta; + int err = 0; double* values = NULL; size_t size; diff --git a/tools/grib_options.cc b/tools/grib_options.cc index 3d792ca4e..c15de1d80 100644 --- a/tools/grib_options.cc +++ b/tools/grib_options.cc @@ -139,7 +139,7 @@ char* grib_options_get_option(const char* id) int i = 0; for (i = 0; i < grib_options_count; i++) { if (!strcmp(id, grib_options[i].id)) - return grib_options[i].value; + return (char*)grib_options[i].value; } return NULL; } @@ -256,7 +256,7 @@ int grib_process_runtime_options(grib_context* context, int argc, char** argv, g #ifndef ECCODES_ON_WINDOWS /* Check at compile time to ensure our file offset is at least 64 bits */ - COMPILE_TIME_ASSERT(sizeof(options->infile_offset) >= 8); + static_assert(sizeof(options->infile_offset) >= 8); #endif has_output = grib_options_on("U"); @@ -357,12 +357,6 @@ int grib_process_runtime_options(grib_context* context, int argc, char** argv, g else grib_gts_header_off(context); - if (grib_options_on("V")) { - printf("\necCodes Version "); - grib_print_api_version(stdout); - printf("\n\n"); - } - if (grib_options_on("s:")) { sarg = grib_options_get_option("s:"); options->set_values_count = MAX_KEYS; diff --git a/tools/grib_to_netcdf.cc b/tools/grib_to_netcdf.cc index c1e09d7cc..0dad044ab 100644 --- a/tools/grib_to_netcdf.cc +++ b/tools/grib_to_netcdf.cc @@ -4225,7 +4225,15 @@ int grib_tool_new_filename_action(grib_runtime_options* options, const char* fil grib_handle_delete(h); } - grib_file_close(file->name, 0, &e); + if (e != GRIB_SUCCESS) { + grib_context_log(ctx, GRIB_LOG_ERROR, "%s (message %d)", grib_get_error_message(e), i); + } + + int e2 = 0; + grib_file_close(file->name, 0, &e2); + if (e2 != GRIB_SUCCESS) { + grib_context_log(ctx, GRIB_LOG_ERROR, "Failed to close file %s (%s)", file->name, grib_get_error_message(e2)); + } { /* Now do some checks */ diff --git a/tools/grib_tools.cc b/tools/grib_tools.cc index 7a79fd718..976f712be 100644 --- a/tools/grib_tools.cc +++ b/tools/grib_tools.cc @@ -10,6 +10,7 @@ #include "grib_tools.h" #include +#include #if HAVE_LIBJASPER /* Remove compiler warnings re macros being redefined */ @@ -76,7 +77,6 @@ static grib_runtime_options global_options = { 0, /* grib_tools_file* infile */ 0, /* grib_tools_file* outfile */ 0, /* grib_action* action */ - 0, /* grib_rule* rules */ 0, /* int dump_flags; */ 0, /* char* dump_mode; */ 0, /* repack */ @@ -308,6 +308,29 @@ static int grib_tool_with_orderby(grib_runtime_options* options) static char iobuf[1024 * 1024]; +// Read the first few bytes of the file to guess what kind of product +// it could be. Returns an empty string if it fails +static std::string guess_file_product(const std::string& filename) +{ + std::string result; + char buffer[5] = {0,}; + FILE* fin = fopen(filename.c_str(), "rb"); + if (fin) { + size_t bytes = fread(buffer, 1, sizeof(buffer), fin); + if (bytes == sizeof(buffer)) { + if (strncmp(buffer, "GRIB", 4)==0) { + result = "GRIB"; + } else if (strncmp(buffer, "BUDG", 4)==0) { + result = "GRIB"; + } else if (strncmp(buffer, "BUFR", 4)==0) { + result = "BUFR"; + } + } + fclose(fin); + } + return result; +} + static int grib_tool_without_orderby(grib_runtime_options* options) { int err = 0; @@ -340,7 +363,7 @@ static int grib_tool_without_orderby(grib_runtime_options* options) if (options->infile_offset) { #ifndef ECCODES_ON_WINDOWS /* Check at compile time to ensure our file offset is at least 64 bits */ - COMPILE_TIME_ASSERT(sizeof(options->infile_offset) >= 8); + static_assert(sizeof(options->infile_offset) >= 8); #endif err = fseeko(infile->file, options->infile_offset, SEEK_SET); if (err) { @@ -419,6 +442,10 @@ static int grib_tool_without_orderby(grib_runtime_options* options) if (infile->handle_count == 0) { fprintf(stderr, "%s: No messages found in %s\n", tool_name, infile->name); + std::string product = guess_file_product(infile->name); + if (!product.empty()) { + fprintf(stderr, "%s: Input file seems to be %s\n", tool_name, product.c_str()); + } if (options->fail) exit(1); } @@ -1312,16 +1339,15 @@ void grib_print_file_statistics(grib_runtime_options* options, grib_tools_file* file->name); if (!failed) return; - /* - fprintf(dump_file,"Following bad messages found in %s\n", file->name); - fprintf(dump_file,"N Error\n"); - while (failed){ - fprintf(dump_file,"%-*d %s\n", 7,failed->count, - grib_get_error_message(failed->error)); - failed=failed->next; - } - fprintf(dump_file,"\n"); - */ + + // fprintf(dump_file,"Following bad messages found in %s\n", file->name); + // fprintf(dump_file,"N Error\n"); + // while (failed){ + // fprintf(dump_file,"%-*d %s\n", 7,failed->count, + // grib_get_error_message(failed->error)); + // failed=failed->next; + // } + // fprintf(dump_file,"\n"); } void grib_print_full_statistics(grib_runtime_options* options) @@ -1395,7 +1421,7 @@ void grib_tools_write_message(grib_runtime_options* options, grib_handle* h) } if (options->gts && h->gts_header) { - char gts_trailer[4] = { '\x0D', '\x0D', '\x0A', '\x03' }; + const char gts_trailer[4] = { '\x0D', '\x0D', '\x0A', '\x03' }; if (fwrite(gts_trailer, 1, 4, of->handle) != 4) { grib_context_log(h->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), "Error writing GTS trailer to %s", filename); diff --git a/tools/grib_tools.h b/tools/grib_tools.h index 34465b628..700d91027 100644 --- a/tools/grib_tools.h +++ b/tools/grib_tools.h @@ -83,7 +83,7 @@ typedef struct grib_option const char* help; int on; int command_line; - char* value; + const char* value; } grib_option; typedef struct grib_failed grib_failed; @@ -137,7 +137,6 @@ typedef struct grib_runtime_options grib_tools_file* infile; grib_tools_file* outfile; grib_action* action; - grib_rule* rules; int dump_flags; char* dump_mode; int repack; diff --git a/tools/gts_compare.cc b/tools/gts_compare.cc index cedbfa4b6..1dc362059 100644 --- a/tools/gts_compare.cc +++ b/tools/gts_compare.cc @@ -74,7 +74,6 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option int error = 0; int count = 0; -int lastPrint = 0; int force = 0; double maxAbsoluteError = 1e-19; int onlyListed = 1; @@ -184,7 +183,7 @@ int grib_tool_init(grib_runtime_options* options) onlyListed = 1; if (grib_options_on("a") && !grib_options_on("c:")) { - printf("Error: -a option requires -c option. Please define a list of keys with the -c option.\n"); + fprintf(stderr, "Error: -a option requires -c option. Please define a list of keys with the -c option.\n"); exit(1); } @@ -245,7 +244,6 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi static void printInfo(grib_handle* h) { printf("== %d == DIFFERENCE == ", count); - lastPrint = count; } static grib_handle* gts_handle_new_from_file_x( @@ -375,14 +373,11 @@ static void save_error(grib_context* c, const char* key) static int compare_values(const grib_runtime_options* options, grib_handle* h1, grib_handle* h2, const char* name, int type) { - size_t len1 = 0; - size_t len2 = 0; - int err = 0; - int err1; - int err2; + size_t len1 = 0, len2 = 0; + int err = 0, err1 = 0, err2 = 0; int type1, type2; int countdiff; - int isMissing1 = 0, isMissing2 = 0; + // int isMissing1 = 0, isMissing2 = 0; char *sval1 = NULL, *sval2 = NULL; long *lval1 = NULL, *lval2 = NULL; @@ -439,36 +434,10 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, save_error(c, name); return err; } - - //if (options->mode != MODE_GTS) { + Assert(options->mode == MODE_GTS); /* TODO: Ignore missing values for keys in GTS. Not yet implemented */ //isMissing1 = ((grib_is_missing(h1, name, &err1) == 1) && (err1 == 0)) ? 1 : 0; //isMissing2 = ((grib_is_missing(h2, name, &err2) == 1) && (err2 == 0)) ? 1 : 0; - //} - - if ((isMissing1 == 1) && (isMissing2 == 1)) { - if (verbose) - printf(" is set to missing in both fields\n"); - return GRIB_SUCCESS; - } - - if (isMissing1 == 1) { - if (verbose) printf(" is set to missing in 1st field\n"); - printInfo(h1); - printf("%s is set to missing in 1st field but is not missing in 2nd field\n", name); - err1 = GRIB_VALUE_MISMATCH; - save_error(c, name); - return GRIB_VALUE_MISMATCH; - } - - if (isMissing2 == 1) { - if (verbose) printf(" is set to missing in 1st field\n"); - printInfo(h1); - printf("%s is set to missing in 2nd field but is not missing in 1st field\n", name); - err1 = GRIB_VALUE_MISMATCH; - save_error(c, name); - return GRIB_VALUE_MISMATCH; - } switch (type1) { case GRIB_TYPE_STRING: @@ -573,11 +542,8 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, break; case GRIB_TYPE_BYTES: - if (options->mode == MODE_GTS) { - // We do not want to compare the message itself - return 0; - } - break; + // We do not want to compare the message itself + return 0; case GRIB_TYPE_LABEL: break; @@ -586,9 +552,8 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, if (verbose) printf("\n"); printInfo(h1); save_error(c, name); - printf("Cannot compare [%s], unsupported type %d\n", name, type1); + fprintf(stderr, "Cannot compare [%s], unsupported type %d\n", name, type1); return GRIB_UNABLE_TO_COMPARE_ACCESSORS; - break; } return GRIB_SUCCESS; @@ -664,34 +629,13 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option else { const void *msg1 = NULL, *msg2 = NULL; size_t size1 = 0, size2 = 0; - int memcmp_ret = 0; /* int ii=0; */ GRIB_CHECK_NOLINE(grib_get_message(h1, &msg1, &size1), 0); GRIB_CHECK_NOLINE(grib_get_message(h2, &msg2, &size2), 0); - if (size1 == size2 && !(memcmp_ret = memcmp(msg1, msg2, size1))) { + if ( size1 == size2 && (0 == memcmp(msg1, msg2, size1)) ) { return 0; } -// else { -// int lcount=count,ii; -// if (options->current_infile) lcount=options->current_infile->filter_handle_count; -// if (size1 != size2) { -// printf("#%d different size: %d!=%d\n",lcount,(int)size1,(int)size2); -// } -// if (memcmp_ret) { -// unsigned char *m1=(unsigned char*)msg1; -// unsigned char *m2=(unsigned char*)msg2; -// printf("=== list of different bytes for message %d\n",lcount); -// for (ii=0;iicompare_count; i++) { if (blocklisted(name)) diff --git a/tools/metar_compare.cc b/tools/metar_compare.cc index 973794988..a86cafd0d 100644 --- a/tools/metar_compare.cc +++ b/tools/metar_compare.cc @@ -16,8 +16,6 @@ grib_option grib_options[] = { { "d", 0, "Write different messages on files\n", 0, 1, 0 }, { "T:", 0, 0, 1, 0, "M" }, /* METAR */ { "c:", 0, 0, 0, 1, 0 }, - { "S:", "start", "First field to be processed.\n", 0, 1, 0 }, - { "E:", "end", "Last field to be processed.\n", 0, 1, 0 }, { "a", 0, "-c option modifier. The keys listed with the option -c will be added to the list of keys compared without -c.\n", 0, 1, 0 }, { "R:", 0, 0, 0, 1, 0 }, { "A:", 0, 0, 0, 1, 0 }, @@ -74,7 +72,6 @@ static int compareAbsolute = 1; static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_options* options); static int error = 0; static int count = 0; -static int lastPrint = 0; static int force = 0; static double maxAbsoluteError = 1e-19; static int onlyListed = 1; @@ -85,8 +82,6 @@ static int verbose = 0; static double tolerance_factor = 1; static int write_error = 0; static grib_handle* global_handle = NULL; -static int start = -1; -static int end = -1; static int write_count = 0; GRIB_INLINE static double compare_double_absolute(const double* a, const double* b, const double* err) @@ -192,11 +187,6 @@ int grib_tool_init(grib_runtime_options* options) grib_context* context = grib_context_get_default(); options->strict = 1; - if (grib_options_on("S:")) - start = atoi(grib_options_get_option("S:")); - - if (grib_options_on("E:")) - end = atoi(grib_options_get_option("E:")); if (grib_options_on("f")) force = 1; @@ -249,16 +239,6 @@ int grib_tool_init(grib_runtime_options* options) compare_double = &compare_double_absolute; if (grib_options_on("R:")) { global_tolerance = 0; - for (int i = 0; i < options->tolerance_count; i++) { - if (!strcmp((options->tolerance[i]).name, "all")) { - global_tolerance = (options->tolerance[i]).double_value; - break; - } - if (!strcmp((options->tolerance[i]).name, "global")) { - global_tolerance = (options->tolerance[i]).double_value; - break; - } - } compare_double = &compare_double_relative; compareAbsolute = 0; } @@ -276,7 +256,7 @@ int grib_tool_init(grib_runtime_options* options) tolerance_factor = atof(grib_options_get_option("t:")); if (grib_options_on("R:")) { - char* sarg = grib_options_get_option("R:"); + char* sarg = grib_options_get_option("R:"); options->tolerance_count = MAX_KEYS; int err = parse_keyval_string(tool_name, sarg, 1, GRIB_TYPE_DOUBLE, options->tolerance, &(options->tolerance_count)); if (err == GRIB_INVALID_ARGUMENT) { @@ -316,7 +296,6 @@ int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* fi static void printInfo(grib_handle* h) { printf("== %d == DIFFERENCE == ", count); - lastPrint = count; } static grib_handle* metar_handle_new_from_file_x(grib_context* c, FILE* f, int mode, int headers_only, int* err) @@ -447,19 +426,17 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, { size_t len1 = 0; size_t len2 = 0; - int err = 0, i = 0; - int err1; - int err2; + int err = 0, i = 0, err1 = 0, err2 = 0; int type1, type2; int countdiff; - int isMissing1 = 0, isMissing2 = 0; + //int isMissing1 = 0, isMissing2 = 0; char *sval1 = NULL, *sval2 = NULL; double *dval1 = NULL, *dval2 = NULL; long *lval1 = NULL, *lval2 = NULL; - double maxdiff = 0; + double maxdiff = 0; double value_tolerance = 0; - grib_context* c = h1->context; + grib_context* c = h1->context; type1 = type; type2 = type; @@ -514,37 +491,10 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, return err; } - // if (options->mode != MODE_METAR) { + Assert(options->mode == MODE_METAR); // // TODO: Ignore missing values for keys in METAR. Not yet implemented // isMissing1 = ((grib_is_missing(h1, name, &err1) == 1) && (err1 == 0)) ? 1 : 0; // isMissing2 = ((grib_is_missing(h2, name, &err2) == 1) && (err2 == 0)) ? 1 : 0; - // } - - if ((isMissing1 == 1) && (isMissing2 == 1)) { - if (verbose) - printf(" is set to missing in both fields\n"); - return GRIB_SUCCESS; - } - - if (isMissing1 == 1) { - if (verbose) - printf(" is set to missing in 1st field\n"); - printInfo(h1); - printf("%s is set to missing in 1st field but is not missing in 2nd field\n", name); - err1 = GRIB_VALUE_MISMATCH; - save_error(c, name); - return GRIB_VALUE_MISMATCH; - } - - if (isMissing2 == 1) { - if (verbose) - printf(" is set to missing in 1st field\n"); - printInfo(h1); - printf("%s is set to missing in 2nd field but is not missing in 1st field\n", name); - err1 = GRIB_VALUE_MISMATCH; - save_error(c, name); - return GRIB_VALUE_MISMATCH; - } switch (type1) { case GRIB_TYPE_STRING: @@ -746,9 +696,7 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, break; case GRIB_TYPE_BYTES: - if (options->mode == MODE_METAR) - return 0; - break; + return 0; // No such type for METAR case GRIB_TYPE_LABEL: break; @@ -758,9 +706,8 @@ static int compare_values(const grib_runtime_options* options, grib_handle* h1, printf("\n"); printInfo(h1); save_error(c, name); - printf("Cannot compare [%s], unsupported type %d\n", name, type1); + fprintf(stderr, "Cannot compare [%s], unsupported type %d\n", name, type1); return GRIB_UNABLE_TO_COMPARE_ACCESSORS; - break; } return GRIB_SUCCESS; @@ -835,10 +782,9 @@ static int compare_handles(grib_handle* h1, grib_handle* h2, grib_runtime_option else { const void *msg1 = NULL, *msg2 = NULL; size_t size1 = 0, size2 = 0; - int memcmp_ret = 0; GRIB_CHECK_NOLINE(grib_get_message(h1, &msg1, &size1), 0); GRIB_CHECK_NOLINE(grib_get_message(h2, &msg2, &size2), 0); - if (size1 == size2 && !(memcmp_ret = memcmp(msg1, msg2, size1))) { + if ( size1 == size2 && (0 == memcmp(msg1, msg2, size1)) ) { return 0; }