[Pkg-ofed-commits] [mstflint] 02/13: Imported Upstream version 4.1.0+1.44.g8d7fa4a

Mehdi Dogguy mehdi at moszumanska.debian.org
Thu Dec 31 19:02:34 UTC 2015


This is an automated email from the git hooks/post-receive script.

mehdi pushed a commit to branch master
in repository mstflint.

commit 3eb77e07203b022069c05ffb7c2915f65a3aec44
Author: Mehdi Dogguy <mehdi at debian.org>
Date:   Thu Dec 31 01:10:29 2015 +0100

    Imported Upstream version 4.1.0+1.44.g8d7fa4a
---
 autom4te.cache/output.0                            |   22 +-
 autom4te.cache/output.1                            |   22 +-
 autom4te.cache/traces.0                            |    2 +-
 autom4te.cache/traces.1                            |    6 +-
 cmdif/tools_cif.c                                  |    4 +-
 common/gitversion.h                                |    2 +-
 configure                                          |   22 +-
 configure.ac                                       |    6 +-
 dev_mgt/tools_dev_types.c                          |   23 +-
 dev_mgt/tools_dev_types.h                          |    8 +-
 flint/cmd_line_parser.cpp                          |   36 +-
 flint/err_msgs.h                                   |    2 +
 flint/subcommands.cpp                              |  214 +-
 flint/subcommands.h                                |    3 +-
 include/mtcr_ul/mtcr.h                             |   11 +-
 man/mstflint.1                                     |   34 +-
 mflash/mflash.c                                    |   71 +-
 mflash/mflash.h                                    |   14 +-
 mflash/mflash_access_layer.c                       |   14 +-
 mflash/mflash_access_layer.h                       |   11 +-
 mflash/mflash_common_structs.h                     |   10 +-
 mflash/mflash_pack_layer.c                         |    8 +-
 mflash/mflash_pack_layer.h                         |   11 +-
 mflash/mflash_types.h                              |   11 +-
 mlxconfig/Makefile.am                              |    2 +-
 mlxconfig/Makefile.in                              |    2 +-
 mlxconfig/mlxcfg_lib.cpp                           |  209 +-
 mlxconfig/mlxcfg_lib.h                             |   15 +-
 mlxconfig/mlxcfg_param_lib.cpp                     | 1427 +++-
 mlxconfig/mlxcfg_param_lib.h                       |  458 +-
 mlxconfig/mlxcfg_parser.cpp                        |  188 +-
 mlxconfig/mlxcfg_status.h                          |   10 +-
 mlxconfig/mlxcfg_ui.cpp                            |  136 +-
 mlxconfig/mlxcfg_ui.h                              |   13 +-
 mlxfwops/lib/Makefile.am                           |    3 +-
 mlxfwops/lib/Makefile.in                           |    3 +-
 mlxfwops/lib/flint_base.cpp                        |   20 +-
 mlxfwops/lib/flint_base.h                          |  113 +-
 mlxfwops/lib/flint_io.cpp                          |   26 +-
 mlxfwops/lib/flint_io.h                            |    7 +-
 mlxfwops/lib/fs2_ops.cpp                           |   66 +-
 mlxfwops/lib/fs2_ops.h                             |    3 +-
 mlxfwops/lib/fs3_ops.cpp                           |  196 +-
 mlxfwops/lib/fw_ops.cpp                            |  145 +-
 mlxfwops/lib/fw_ops.h                              |   23 +-
 mlxfwops/lib/mlxfwops.cpp                          |  128 +-
 mlxfwops/lib/mlxfwops.h                            |   15 +-
 mlxfwops/lib/mlxfwops_com.h                        |   58 +-
 .../uefi_c/mft_uefi_common.h                       |   41 +-
 mstdump/mstdump_dbs/ConnectX3.csv                  |    9 +-
 mstdump/mstdump_dbs/ConnectX3Pro.csv               |    3 +-
 mstdump/mstdump_dbs/ConnectX4.csv                  |    1 -
 mstdump/mstdump_dbs/ConnectX4LX.csv                |  603 +-
 mstdump/mstdump_dbs/{SwitchEN.csv => Spectrum.csv} | 8647 +++++++++++---------
 mstflint.spec                                      |   11 +-
 mstflint.spec.in                                   |    5 +-
 mtcr_ul/mtcr_icmd_cif.h                            |    7 +-
 mtcr_ul/mtcr_tools_cif.c                           |   11 +-
 mtcr_ul/mtcr_ul.c                                  |  143 +-
 mtcr_ul/mtcr_ul_icmd_cif.c                         |    3 +-
 reg_access/reg_access.c                            |    9 +-
 reg_access/reg_access.h                            |    2 +-
 small_utils/hca_self_test.ofed                     |    5 +-
 tools_layouts/adb_to_c_utils.c                     |    4 +-
 tools_layouts/adb_to_c_utils.h                     |    4 +-
 tools_layouts/cibfw_layouts.c                      |   88 +-
 tools_layouts/cibfw_layouts.h                      |   49 +-
 tools_layouts/cx4fw_layouts.c                      |    1 +
 tools_layouts/register_access_open_layouts.h       |    6 +-
 tools_layouts/register_access_sib_layouts.c        |   20 +-
 tools_layouts/register_access_sib_layouts.h        |   23 +-
 tools_layouts/tools_open_layouts.c                 | 1535 +++-
 tools_layouts/tools_open_layouts.h                 |  726 +-
 tools_res_mgmt/tools_res_mgmt.c                    |    2 +-
 74 files changed, 10051 insertions(+), 5740 deletions(-)

diff --git a/autom4te.cache/output.0 b/autom4te.cache/output.0
index 29bbafd..9f050df 100644
--- a/autom4te.cache/output.0
+++ b/autom4te.cache/output.0
@@ -1,6 +1,6 @@
 @%:@! /bin/sh
 @%:@ Guess values for system-dependent variables and create Makefiles.
-@%:@ Generated by GNU Autoconf 2.69 for mstflint 4.0.1.
+@%:@ Generated by GNU Autoconf 2.69 for mstflint 4.1.0.
 @%:@
 @%:@ Report bugs to <adrianc at mellanox.co.il>.
 @%:@ 
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='mstflint'
 PACKAGE_TARNAME='mstflint'
-PACKAGE_VERSION='4.0.1'
-PACKAGE_STRING='mstflint 4.0.1'
+PACKAGE_VERSION='4.1.0'
+PACKAGE_STRING='mstflint 4.1.0'
 PACKAGE_BUGREPORT='adrianc at mellanox.co.il'
 PACKAGE_URL=''
 
@@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures mstflint 4.0.1 to adapt to many kinds of systems.
+\`configure' configures mstflint 4.1.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1401,7 +1401,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of mstflint 4.0.1:";;
+     short | recursive ) echo "Configuration of mstflint 4.1.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1514,7 +1514,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-mstflint configure 4.0.1
+mstflint configure 4.1.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2004,7 +2004,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by mstflint $as_me 4.0.1, which was
+It was created by mstflint $as_me 4.1.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2362,7 +2362,7 @@ _ACEOF
 
 
 cat >>confdefs.h <<_ACEOF
-@%:@define VERSION "4.0.1"
+@%:@define VERSION "4.1.0"
 _ACEOF
 
 
@@ -2884,7 +2884,7 @@ fi
 # Define the identity of the package.
 
  PACKAGE=mstflint
- VERSION=4.0.1
+ VERSION=4.1.0
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15784,7 +15784,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by mstflint $as_me 4.0.1, which was
+This file was extended by mstflint $as_me 4.1.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15850,7 +15850,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-mstflint config.status 4.0.1
+mstflint config.status 4.1.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/autom4te.cache/output.1 b/autom4te.cache/output.1
index 74e7845..5bf80c3 100644
--- a/autom4te.cache/output.1
+++ b/autom4te.cache/output.1
@@ -1,6 +1,6 @@
 @%:@! /bin/sh
 @%:@ Guess values for system-dependent variables and create Makefiles.
-@%:@ Generated by GNU Autoconf 2.69 for mstflint 4.0.1.
+@%:@ Generated by GNU Autoconf 2.69 for mstflint 4.1.0.
 @%:@
 @%:@ Report bugs to <adrianc at mellanox.co.il>.
 @%:@ 
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='mstflint'
 PACKAGE_TARNAME='mstflint'
-PACKAGE_VERSION='4.0.1'
-PACKAGE_STRING='mstflint 4.0.1'
+PACKAGE_VERSION='4.1.0'
+PACKAGE_STRING='mstflint 4.1.0'
 PACKAGE_BUGREPORT='adrianc at mellanox.co.il'
 PACKAGE_URL=''
 
@@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures mstflint 4.0.1 to adapt to many kinds of systems.
+\`configure' configures mstflint 4.1.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1401,7 +1401,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of mstflint 4.0.1:";;
+     short | recursive ) echo "Configuration of mstflint 4.1.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1514,7 +1514,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-mstflint configure 4.0.1
+mstflint configure 4.1.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2004,7 +2004,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by mstflint $as_me 4.0.1, which was
+It was created by mstflint $as_me 4.1.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2362,7 +2362,7 @@ _ACEOF
 
 
 cat >>confdefs.h <<_ACEOF
-@%:@define VERSION "4.0.1"
+@%:@define VERSION "4.1.0"
 _ACEOF
 
 
@@ -2884,7 +2884,7 @@ fi
 # Define the identity of the package.
 
  PACKAGE=mstflint
- VERSION=4.0.1
+ VERSION=4.1.0
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15780,7 +15780,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by mstflint $as_me 4.0.1, which was
+This file was extended by mstflint $as_me 4.1.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15846,7 +15846,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-mstflint config.status 4.0.1
+mstflint config.status 4.1.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0
index e4e825b..10891ee 100644
--- a/autom4te.cache/traces.0
+++ b/autom4te.cache/traces.0
@@ -2301,7 +2301,7 @@ m4trace:configure.ac:5: -1- m4_pattern_allow([^PROJECT$])
 m4trace:configure.ac:6: -1- m4_pattern_allow([^PROJECT$])
 m4trace:configure.ac:8: -1- m4_pattern_allow([^VERSION$])
 m4trace:configure.ac:9: -1- m4_pattern_allow([^VERSION$])
-m4trace:configure.ac:13: -1- AM_INIT_AUTOMAKE([mstflint], [4.0.1])
+m4trace:configure.ac:13: -1- AM_INIT_AUTOMAKE([mstflint], [4.1.0])
 m4trace:configure.ac:13: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
 m4trace:configure.ac:13: -1- AM_SET_CURRENT_AUTOMAKE_VERSION
 m4trace:configure.ac:13: -1- AM_AUTOMAKE_VERSION([1.13.4])
diff --git a/autom4te.cache/traces.1 b/autom4te.cache/traces.1
index 0f0d325..a8dbf4a 100644
--- a/autom4te.cache/traces.1
+++ b/autom4te.cache/traces.1
@@ -1,4 +1,4 @@
-m4trace:configure.ac:3: -1- AC_INIT([mstflint], [4.0.1], [adrianc at mellanox.co.il])
+m4trace:configure.ac:3: -1- AC_INIT([mstflint], [4.1.0], [adrianc at mellanox.co.il])
 m4trace:configure.ac:3: -1- m4_pattern_forbid([^_?A[CHUM]_])
 m4trace:configure.ac:3: -1- m4_pattern_forbid([_AC_])
 m4trace:configure.ac:3: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
@@ -161,7 +161,7 @@ m4trace:configure.ac:9: -1- AC_SUBST([VERSION])
 m4trace:configure.ac:9: -1- AC_SUBST_TRACE([VERSION])
 m4trace:configure.ac:9: -1- m4_pattern_allow([^VERSION$])
 m4trace:configure.ac:11: -1- AC_CONFIG_AUX_DIR([config])
-m4trace:configure.ac:13: -1- AM_INIT_AUTOMAKE([mstflint], [4.0.1])
+m4trace:configure.ac:13: -1- AM_INIT_AUTOMAKE([mstflint], [4.1.0])
 m4trace:configure.ac:13: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
 m4trace:configure.ac:13: -1- AM_AUTOMAKE_VERSION([1.13.4])
 m4trace:configure.ac:13: -1- AC_REQUIRE_AUX_FILE([install-sh])
@@ -186,7 +186,7 @@ configure.ac:13: the top level])
 m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE], [mstflint])
 m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE])
 m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE$])
-m4trace:configure.ac:13: -1- AC_SUBST([VERSION], [4.0.1])
+m4trace:configure.ac:13: -1- AC_SUBST([VERSION], [4.1.0])
 m4trace:configure.ac:13: -1- AC_SUBST_TRACE([VERSION])
 m4trace:configure.ac:13: -1- m4_pattern_allow([^VERSION$])
 m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
diff --git a/cmdif/tools_cif.c b/cmdif/tools_cif.c
index fa16a2d..c6afc68 100644
--- a/cmdif/tools_cif.c
+++ b/cmdif/tools_cif.c
@@ -35,7 +35,7 @@
 #include <common/compatibility.h>
 #include <common/bit_slice.h>
 
-#ifndef __FreeBSD__
+#if !defined (__FreeBSD__) && !defined(UEFI_BUILD)
 #include <mtcr_tools_cif.h>
 #endif
 
@@ -131,7 +131,7 @@ const char* tcif_err2str(MError rc) {
 
 MError tcif_cr_mbox_supported(mfile* dev)
 {
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(UEFI_BUILD)
     (void)dev;
     return ME_NOT_IMPLEMENTED;
 #else
diff --git a/common/gitversion.h b/common/gitversion.h
index cd77e49..3be35e5 100644
--- a/common/gitversion.h
+++ b/common/gitversion.h
@@ -1 +1 @@
-#define TOOLS_GIT_SHA "97d7275"
+#define TOOLS_GIT_SHA "8d7fa4a"
diff --git a/configure b/configure
index 38678b2..4fc16f2 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for mstflint 4.0.1.
+# Generated by GNU Autoconf 2.69 for mstflint 4.1.0.
 #
 # Report bugs to <adrianc at mellanox.co.il>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='mstflint'
 PACKAGE_TARNAME='mstflint'
-PACKAGE_VERSION='4.0.1'
-PACKAGE_STRING='mstflint 4.0.1'
+PACKAGE_VERSION='4.1.0'
+PACKAGE_STRING='mstflint 4.1.0'
 PACKAGE_BUGREPORT='adrianc at mellanox.co.il'
 PACKAGE_URL=''
 
@@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures mstflint 4.0.1 to adapt to many kinds of systems.
+\`configure' configures mstflint 4.1.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1401,7 +1401,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of mstflint 4.0.1:";;
+     short | recursive ) echo "Configuration of mstflint 4.1.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1514,7 +1514,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-mstflint configure 4.0.1
+mstflint configure 4.1.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2004,7 +2004,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by mstflint $as_me 4.0.1, which was
+It was created by mstflint $as_me 4.1.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2362,7 +2362,7 @@ _ACEOF
 
 
 cat >>confdefs.h <<_ACEOF
-#define VERSION "4.0.1"
+#define VERSION "4.1.0"
 _ACEOF
 
 
@@ -2884,7 +2884,7 @@ fi
 # Define the identity of the package.
 
  PACKAGE=mstflint
- VERSION=4.0.1
+ VERSION=4.1.0
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15780,7 +15780,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by mstflint $as_me 4.0.1, which was
+This file was extended by mstflint $as_me 4.1.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15846,7 +15846,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-mstflint config.status 4.0.1
+mstflint config.status 4.1.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index c0b1e44..be0f9d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,16 +1,16 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT(mstflint, 4.0.1, adrianc at mellanox.co.il)
+AC_INIT(mstflint, 4.1.0, adrianc at mellanox.co.il)
 
 AC_DEFINE_UNQUOTED([PROJECT], ["mstflint"], [Define the project name.])
 AC_SUBST([PROJECT])
 
-AC_DEFINE_UNQUOTED([VERSION], ["4.0.1"], [Define the project version.])
+AC_DEFINE_UNQUOTED([VERSION], ["4.1.0"], [Define the project version.])
 AC_SUBST([VERSION])
 
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_SRCDIR([README])
-AM_INIT_AUTOMAKE(mstflint, 4.0.1)
+AM_INIT_AUTOMAKE(mstflint, 4.1.0)
 
 dnl Checks for programs
 AC_PROG_CC
diff --git a/dev_mgt/tools_dev_types.c b/dev_mgt/tools_dev_types.c
index 251388b..eac00af 100644
--- a/dev_mgt/tools_dev_types.c
+++ b/dev_mgt/tools_dev_types.c
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #include <stdio.h>
@@ -194,11 +196,11 @@ static struct dev_info g_devs_info[] = {
         .dev_type  = DM_SWITCH
     },
     {
-        .dm_id     = DeviceSwitchEN,
+        .dm_id     = DeviceSpectrum,
         .hw_dev_id = 0x249,
         .hw_rev_id = -1,
         .sw_dev_id = -1,
-        .name      = "SwitchEN",
+        .name      = "Spectrum",
         .port_num  = 64,
         .dev_type  = DM_SWITCH
     },
@@ -247,6 +249,15 @@ int dm_get_device_id(mfile* mf,
     int rc;
     u_int32_t dev_flags;
 
+    //Special case: FPGA device:
+#ifndef MST_UL
+    if (mf->tp == MST_FPGA) {
+        *ptr_dm_dev_id = DeviceFPGA;
+        *ptr_hw_dev_id = 0x600;
+        return 0;
+    }
+#endif
+
     #if 1
     for (i = 0; i < DeviceEndMarker; i++) {
         if (g_devs_info[i].dm_id != i) {
@@ -429,7 +440,9 @@ u_int32_t dm_get_hw_rev_id(dm_dev_id_t type)
 
 int dm_is_fpp_supported(dm_dev_id_t type)
 {
-    if (g_devs_info[type].dm_id == DeviceConnectX4 || g_devs_info[type].dm_id == DeviceConnectX4LX) {
+    if (g_devs_info[type].dm_id == DeviceConnectIB ||
+        g_devs_info[type].dm_id == DeviceConnectX4 ||
+        g_devs_info[type].dm_id == DeviceConnectX4LX) {
         return 1;
     } else {
         return 0;
diff --git a/dev_mgt/tools_dev_types.h b/dev_mgt/tools_dev_types.h
index 0879595..e3be9ee 100644
--- a/dev_mgt/tools_dev_types.h
+++ b/dev_mgt/tools_dev_types.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #ifndef TOOLS_DEV_TYPE_H
@@ -61,7 +63,7 @@ enum dm_dev_id
     DeviceConnectIB,
     DeviceConnectX3Pro,
     DeviceSwitchIB,
-    DeviceSwitchEN,
+    DeviceSpectrum,
     DeviceConnectX4,
     DeviceConnectX4LX,
     DeviceFPGA,
diff --git a/flint/cmd_line_parser.cpp b/flint/cmd_line_parser.cpp
index a278a7e..028cd59 100644
--- a/flint/cmd_line_parser.cpp
+++ b/flint/cmd_line_parser.cpp
@@ -153,7 +153,6 @@ FlagMetaData::FlagMetaData() {
     _flags.push_back(new Flag("", "mac", 1));
     _flags.push_back(new Flag("", "macs", MACS));
     _flags.push_back(new Flag("", "uid", 1));
-    _flags.push_back(new Flag("", "uids", 29)); //TODO: update this with the correct constatnt from mlxfwops
     _flags.push_back(new Flag("", "blank_guids", 0));
     _flags.push_back(new Flag("", "clear_semaphore", 0));
     _flags.push_back(new Flag("h", "help", 0));
@@ -503,26 +502,10 @@ void Flint::initCmdParser() {
     AddOptions("uid",
                ' ',
                 "<UID>",
-                "BridgeX/ConnectIB only. Derive and set the device UIDs (GUIDs, MACs, WWNs).\n"
+                "ConnectIB/SwitchIB only. Derive and set the device UIDs (GUIDs, MACs, WWNs).\n"
                 "UIDs are derived from the given base UID according to Mellanox Methodology\n"
                 "Commands affected: burn, sg");
 
-    AddOptions("uids",
-               ' ',
-                "<UIDs...>",
-                "BridgeX only. 29 space separated UIDs must be specified here.\n"
-                "The specified UIDs are assigned to the following fields, repectively:\n"
-                "G0-MAC-PI0      G0-MAC-PI1      G0-MAC-PI2\n"
-                "G0-MAC-PE0      G0-MAC-PE1      G0-MAC-PE2    G0-MAC-PE3\n"
-                "G0-FC-WWPN-P0   G0-FC-WWPN-P1   G0-FC-WWPN-P2 G0-FC-WWPN-P3\n"
-                "G0-IB-NODE-GUID G0-IB-PORT-GUID G0-FC-WWNN\n"
-                "G1-MAC-PI0      G1-MAC-PI1      G1-MAC-PI2\n"
-                "G1-MAC-PE0      G1-MAC-PE1      G1-MAC-PE2    G1-MAC-PE3\n"
-                "G1-FC-WWPN-P0   G1-FC-WWPN-P1   G1-FC-WWPN-P2 G1-FC-WWPN-P3\n"
-                "G1-IB-NODE-GUID G1-IB-PORT-GUID G1-FC-WWNN\n"
-                "IB-SYSTEM-GUID\n"
-                "Commands affected: burn, sg");
-
     AddOptions("blank_guids",
                ' ',
                 "",
@@ -605,7 +588,7 @@ void Flint::initCmdParser() {
     AddOptions("use_image_guids",
                ' ',
                 "",
-                "Burn (guids/uids/macs) as appears in the given image.\n"
+                "Burn (guids/macs) as appears in the given image.\n"
                 "Commands affected: burn");
 
     AddOptions("use_image_rom",
@@ -809,21 +792,6 @@ ParseStatus Flint::HandleOption(string name, string value)
             printf("-E- failed to extract UIDs from UID.");
             return PARSE_ERROR;
         }
-    } else if (name == "uids") {
-        _flintParams.uids_specified = true;
-        std::vector<std::string> strs;
-        splitByDelimiters(strs, value,",");
-        if (strs.size() < BX_ALL_GUIDS) {
-        	return PARSE_ERROR;
-        }
-        for (int i = 0; i < BX_ALL_GUIDS; i++) {
-            guid_t u;
-            if (!getGUIDFromStr(strs[i], u)){
-                return PARSE_ERROR;
-            }else{
-                _flintParams.user_uids.push_back(u);
-            }
-        }
     } else if (name == "blank_guids") {
         _flintParams.blank_guids = true;
     } else if (name == "clear_semaphore") {
diff --git a/flint/err_msgs.h b/flint/err_msgs.h
index b8c79b1..5cb5cd1 100644
--- a/flint/err_msgs.h
+++ b/flint/err_msgs.h
@@ -129,6 +129,8 @@ typedef enum {
 #define FLINT_NO_ZLIB_ERROR                   "Executable was compiled with \"dump files\" option disabled.\n"
 #define FLINT_FLAG_WITH_FLAG_ERROR            "\"%s\" flag must be specified with \"%s\" flag.\n"
 #define FLINT_INVALID_PASSWORD                "Invalid Password.\n"
+#define FLINT_NO_GUID_MAC_FLAGS_ERROR         "Can not set GUIDs/MACs: please run with -uid/-guid/-mac flag.\n"
+#define FLINT_NO_UID_FLAG_ERROR               "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n"
 
 /**************************
  * Flint Warning Messages
diff --git a/flint/subcommands.cpp b/flint/subcommands.cpp
index ce3aacd..91400a5 100644
--- a/flint/subcommands.cpp
+++ b/flint/subcommands.cpp
@@ -280,19 +280,20 @@ int SubCommand::verifyCbFunc(char* str)
     return 0;
 }
 
+
 int SubCommand::CbCommon(int completion, char*preStr, char* endStr)
 {
     if (completion < 100) {
-            printf("\r%s%%%03d", preStr, completion);
+            printf("\r%s%03d%%", preStr, completion);
         }else if (completion == 100) {
             printf("\r%sOK  \n", preStr);
         } else {// printing endStr
             if (endStr){
                 printf("\r%s\n", endStr);
             }
-        }
-        fflush(stdout);
-        return 0;
+    }
+    fflush(stdout);
+    return 0;
 }
 
 // HACK: the endStr is printed when we reach 101% this is for backward compat with the original flint
@@ -412,7 +413,7 @@ FlintStatus SubCommand:: openIo()
     if (_flintParams.device_specified) {
         _io = new Flash;
         if (!((Flash*)_io)->open(_flintParams.device.c_str(), _flintParams.clear_semaphore, false, _flintParams.banks, \
-                _flintParams.flash_params_specified ? &_flintParams.flash_params : NULL, _flintParams.override_cache_replacement, _flintParams.use_fw)) {
+                _flintParams.flash_params_specified ? &_flintParams.flash_params : NULL, _flintParams.override_cache_replacement, true, _flintParams.use_fw)) {
             // if we have Hw_Access command we dont fail straght away
             if (_flintParams.cmd == SC_Hw_Access && ((Flash*)_io)->get_cr_space_locked()) {
                 return FLINT_SUCCESS;
@@ -1061,10 +1062,54 @@ void SubCommand::printMissingGuidErr(bool ibDev, bool ethDev, bool bxDev)
     return;
 }
 
-bool SubCommand::extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGuids, u_int8_t& stepSize){
+bool SubCommand::extractValuesFromString(string valStr, u_int8_t values[2], string origArg) {
+    // check if we need to extract 2 values or 1
+    u_int32_t tempNum0 = 0, tempNum1 = 0;
+    string tempNumStr;
+    if (valStr.find(',') != string::npos) {
+        std::stringstream ss((valStr.c_str()));
+        // get first value
+        if (!std::getline(ss, tempNumStr, ',')) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR,origArg.c_str());
+            return false;
+        }
+        if (!str2Num(tempNumStr.c_str(), tempNum0)) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR, origArg.c_str());
+            return false;
+        }
+        // get second value
+        if (!std::getline(ss, tempNumStr, ',')) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR, origArg.c_str());
+            return false;
+        }
+        if (!str2Num(tempNumStr.c_str(), tempNum1)) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR, origArg.c_str());
+            return false;
+        }
+        // make sure no other tokens are present
+        if (!(!std::getline(ss, tempNumStr, ','))) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR, origArg.c_str());
+            return false;
+        }
+    } else {
+        if (!str2Num(valStr.c_str(), tempNum0)) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR, origArg.c_str());
+            return false;
+        }
+        tempNum1 = tempNum0;
+    }
+    // perform checks
+    if (tempNum0 >= 255 || tempNum1 >= 255) {
+        reportErr(true, "Invalid argument values, values should be taken from the range [0..254]\n");
+        return false;
+    }
+    values[0] = tempNum0;
+    values[1] = tempNum1;
+    return true;
+}
+
+bool SubCommand::extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t numOfGuids[2], u_int8_t stepSize[2]){
     //extract num_of_guids and step_size from numGuidsStr, stepStr
-    u_int32_t tempNumOfGuids = 0;
-    u_int32_t tempStepSize = 0;
     string tag, valStr;
     for (std::vector<string>::iterator it = cmdArgs.begin(); it != cmdArgs.end(); it++) {
         std::stringstream ss((it->c_str()));
@@ -1084,13 +1129,11 @@ bool SubCommand::extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGui
             return false;
         }
         if (tag == "guids_num") {
-            if (!str2Num(valStr.c_str(), tempNumOfGuids)) {
-                reportErr(true, FLINT_INVALID_ARG_ERROR, it->c_str());
+            if (!extractValuesFromString(valStr, numOfGuids, *it)) {
                 return false;
             }
         } else if (tag == "step_size") {
-            if (!str2Num(valStr.c_str(), tempStepSize)) {
-                reportErr(true, FLINT_INVALID_ARG_ERROR, it->c_str());
+            if (!extractValuesFromString(valStr, stepSize, *it)) {
                 return false;
             }
         } else {
@@ -1098,13 +1141,6 @@ bool SubCommand::extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGui
             return false;
         }
     }
-    // perform checks
-    if (tempNumOfGuids <= 0 || tempNumOfGuids >= 256 ||  tempStepSize<=0 || tempStepSize>=256) {
-        reportErr(true, "Invalid argument values, values should be taken from the range [1..255]\n");
-        return false;
-    }
-    numOfGuids = tempNumOfGuids;
-    stepSize = tempStepSize;
     return true;
 }
 
@@ -1225,14 +1261,14 @@ void BurnSubCommand::updateBurnParams()
     _burnParams.userUids.resize(MAX_GUIDS, (guid_t){0xffffffff,0xffffffff});
 }
 
-#define VERSION_FORMAT(isFs2) isFs2 ? "%d.%d.%d" : "%d.%04d.%04d"
+#define VERSION_FORMAT(minor) minor < 100 ? "%d.%d.%04d" : "%d.%04d.%04d"
 bool BurnSubCommand::checkFwVersion()
 {
     char curr_ver[124], new_ver[124];
     printf("\n");
     printf("    Current FW version on flash:  ");
     if (_devInfo.fw_info.fw_ver[0] != 0) { // i.e if we have a fw_version we assume this is != 0
-        snprintf(curr_ver, 124, VERSION_FORMAT(_devInfo.fw_type == FIT_FS2), _devInfo.fw_info.fw_ver[0], _devInfo.fw_info.fw_ver[1], _devInfo.fw_info.fw_ver[2]);
+        snprintf(curr_ver, 124, VERSION_FORMAT(_devInfo.fw_info.fw_ver[1]), _devInfo.fw_info.fw_ver[0], _devInfo.fw_info.fw_ver[1], _devInfo.fw_info.fw_ver[2]);
     } else {
         snprintf(curr_ver, 124, "N/A");
     }
@@ -1240,7 +1276,7 @@ bool BurnSubCommand::checkFwVersion()
 
     printf("    New FW version:               ");
     if (_imgInfo.fw_info.fw_ver[0] != 0) {
-        snprintf(new_ver, 124, VERSION_FORMAT(_imgInfo.fw_type == FIT_FS2), _imgInfo.fw_info.fw_ver[0], _imgInfo.fw_info.fw_ver[1], _imgInfo.fw_info.fw_ver[2]);
+        snprintf(new_ver, 124, VERSION_FORMAT(_imgInfo.fw_info.fw_ver[1]), _imgInfo.fw_info.fw_ver[0], _imgInfo.fw_info.fw_ver[1], _imgInfo.fw_info.fw_ver[2]);
     } else {
         snprintf(new_ver, 124, "N/A");
     }
@@ -1249,24 +1285,19 @@ bool BurnSubCommand::checkFwVersion()
     if (_flintParams.log_specified) {
         print_line_to_log("Current FW version on flash: %s,  New FW version: %s\n", curr_ver, new_ver);
     }
-    int verStatus = FVI_UNKNOWN;
+    int verStatus;
 
     if (_devInfo.fw_info.fw_ver[0] != 0  &&
-            _imgInfo.fw_info.fw_ver[0] != 0) {
-        verStatus = FwOperations::FwVerLessThan(_devInfo.fw_info.fw_ver,_imgInfo.fw_info.fw_ver, _devInfo.fw_type);
-    }
-
-    if (verStatus == FVI_UNKNOWN) {
-        printf("\n    Warning: Cannot compare between FW versions(different branches).\n");
-        if (!askUser()) {
-            return false;
-        }
-    } else if (verStatus == FVI_EQUAL || verStatus == FVI_GREATER) {
-        printf("\n    Note: The new FW version is not newer than the current FW version on flash.\n");
-        if (!askUser()) {
-            return false;
+            _imgInfo.fw_info.fw_ver[0] != 0) { // nofs pitfall here - on nofs burn no fwver of device
+        verStatus = FwOperations::FwVerLessThan(_devInfo.fw_info.fw_ver, _imgInfo.fw_info.fw_ver);
+        if (verStatus == FVI_EQUAL || verStatus == FVI_GREATER) {
+            printf("\n    Note: The new FW version is %s the current FW version on flash.\n", verStatus == FVI_EQUAL ? "the same as" : "older than");
+            if (!askUser()) {
+                return false;
+            }
         }
     }
+
     printf("\n");
     _burnParams.ignoreVersionCheck = true;
     return true;
@@ -1305,11 +1336,7 @@ FlintStatus BurnSubCommand::burnFs3()
         reportErr(true, FLINT_IMG_DEV_COMPAT_ERROR, "FS3", "FS3");
         return FLINT_FAILED;
         }
-    // If we are burning nofs then -ocr flag needs to be specified
-    if (!_burnParams.burnFailsafe && !_flintParams.override_cache_replacement) {
-        reportErr(true, FLINT_FLAG_WITH_FLAG_ERROR, "override_cache_replacement", "nofs");
-        return FLINT_FAILED;
-    }
+
     // on FS3 burn we require query to pass
     if (!_devQueryRes && _burnParams.burnFailsafe) {
         reportErr(true, FLINT_FS3_BURN_ERROR, _fwOps->err());
@@ -1560,15 +1587,18 @@ bool BurnSubCommand::dealWithGuids()
     return true;
 }
 
+#define IS_HCA(chipType) \
+    (((chipType) == CT_CONNECTX) || ((chipType) == CT_CONNECT_IB) || ((chipType) == CT_CONNECTX4) || ((chipType) == CT_CONNECTX4_LX))
+
 void BurnSubCommand::dealWithExpRom()
 {
     bool getRomFromDev = false;
     // Check exp rom:
-    bool fs2Cond = _fwType == FIT_FS2? (_devQueryRes && _devInfo.fw_info.chip_type == CT_CONNECTX && \
+    bool fs2Cond = _fwType == FIT_FS2? (_devQueryRes && IS_HCA(_devInfo.fw_info.chip_type) && \
             (FwOperations::IsFwSupportingRomModify(_devInfo.fw_info.fw_ver) || (_imgInfo.fw_info.roms_info.num_of_exp_rom > 0))\
             && !_flintParams.use_image_rom && !strcmp(_devInfo.fw_info.product_ver,"") && !strcmp(_imgInfo.fw_info.product_ver, "")) : false;
 
-    bool fs3Cond = _fwType == FIT_FS3 ? (_devQueryRes && (_devInfo.fw_info.chip_type == CT_CONNECT_IB || _devInfo.fw_info.chip_type == CT_CONNECTX) && \
+    bool fs3Cond = _fwType == FIT_FS3 ? (_devQueryRes && IS_HCA(_devInfo.fw_info.chip_type) && \
             (FwOperations::IsFwSupportingRomModify(_devInfo.fw_info.fw_ver) || (_imgInfo.fw_info.roms_info.num_of_exp_rom > 0))\
             && !_flintParams.use_image_rom) && !strcmp(_devInfo.fw_info.product_ver,"") && !strcmp(_imgInfo.fw_info.product_ver, "") : false;
 
@@ -1840,7 +1870,7 @@ bool QuerySubCommand::displayFs2Uids(const fw_info_t& fwInfo)
     printf("\n");
 #define PRINT_FS3_UIDS(uid1, uid2, str, printStep) {\
     	PRINT_FS3_UID(uid1, BASE_STR" "str":", printStep);\
-    if (uid1.uid !=  uid2.uid || uid1.num_allocated != uid2.num_allocated  || uid1.step != uid2.step) {\
+    if (uid1.uid !=  uid2.uid || uid1.num_allocated != uid2.num_allocated  || ( printStep && uid1.step != uid2.step)) {\
         PRINT_FS3_UID(uid2, "Orig " BASE_STR " "str":", printStep);\
     } \
 }
@@ -1850,14 +1880,14 @@ bool QuerySubCommand::displayFs3Uids(const fw_info_t& fwInfo)
     if (fwInfo.fs3_info.fs3_uids_info.valid_field) {
         // new GUIDs format
         printf("Description:     UID                GuidsNumber\n");
-        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cx4_uids.base_guid, fwInfo.fs3_info.orig_fs3_uids_info.cx4_uids.base_guid, "GUID", 0);
-        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cx4_uids.base_mac, fwInfo.fs3_info.orig_fs3_uids_info.cx4_uids.base_mac, "MAC", 0);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cx4_uids.base_guid, fwInfo.fs3_info.orig_fs3_uids_info.cx4_uids.base_guid, "GUID", false);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cx4_uids.base_mac, fwInfo.fs3_info.orig_fs3_uids_info.cx4_uids.base_mac, "MAC", false);
     } else {
         printf("Description:     UID                GuidsNumber  Step\n");
-        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.guids[0], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.guids[0], "GUID1", 1);
-        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.guids[1], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.guids[1], "GUID2", 1);
-        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.macs[0], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.macs[0], "MAC1", 1);
-        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.macs[1], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.macs[1], "MAC2", 1);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.guids[0], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.guids[0], "GUID1", true);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.guids[1], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.guids[1], "GUID2", true);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.macs[0], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.macs[0], "MAC1", true);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.macs[1], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.macs[1], "MAC2", true);
     }
     return true;
 }
@@ -1871,13 +1901,10 @@ FlintStatus QuerySubCommand::printInfo(const fw_info_t& fwInfo, bool fullQuery)
     printf("Image type:      %s\n",(isFs2)? "FS2" : "FS3");
 
     if (fwInfo.fw_info.fw_ver[0] || fwInfo.fw_info.fw_ver[1] || fwInfo.fw_info.fw_ver[2]) {
-        if (isFs2) {
-        printf("FW Version:      %d.%d.%d\n", fwInfo.fw_info.fw_ver[0], fwInfo.fw_info.fw_ver[1],\
+        char versionStr[64] = {0};
+        snprintf(versionStr, 64, VERSION_FORMAT(fwInfo.fw_info.fw_ver[1]), fwInfo.fw_info.fw_ver[0], fwInfo.fw_info.fw_ver[1],
                 fwInfo.fw_info.fw_ver[2]);
-        } else {
-            printf("FW Version:      %d.%04d.%04d\n", fwInfo.fw_info.fw_ver[0], fwInfo.fw_info.fw_ver[1],\
-                            fwInfo.fw_info.fw_ver[2]);
-        }
+        printf("FW Version:      %s\n", versionStr);
     }
 
     if (fwInfo.fw_info.fw_rel_date[0] || fwInfo.fw_info.fw_rel_date[1] || fwInfo.fw_info.fw_rel_date[2]) {
@@ -1895,13 +1922,16 @@ FlintStatus QuerySubCommand::printInfo(const fw_info_t& fwInfo, bool fullQuery)
             printf("MIC Version:     %d.%d.%d\n", fwInfo.fw_info.mic_ver[0],\
                     fwInfo.fw_info.mic_ver[1], fwInfo.fw_info.mic_ver[2]);
         }
-        if (isFs2)
-        {   if (fwInfo.fs2_info.config_sectors)
+        if (isFs2) {
+            if (fwInfo.fs2_info.config_sectors) {
                 printf("Config Sectors:  %d\n", fwInfo.fs2_info.config_sectors);
+            }
             if (fwInfo.fs2_info.config_pad) {
                     printf("Config Pad:      %d\n", fwInfo.fs2_info.config_pad);
-        }
-
+            }
+            if (strlen(fwInfo.fs2_info.prs_name)) {
+                printf("PRS Name:        %s\n", fwInfo.fs2_info.prs_name);
+            }
         }
     }
 
@@ -2433,11 +2463,12 @@ SgSubCommand:: SgSubCommand()
                 INDENTEX"flint will re-burn the current image using the given GUIDs/MACs/UIDs.";
     _flagLong = "sg";
     _flagShort = "";
-    _param = "[guids_num=<num> step_size=<size>] | [nocrc]";
+    _param = "[guids_num=<num|num_port1,num_port2> step_size=<size|size_port1,size_port2>] | [nocrc]";
     _paramExp = "nocrc: (optional) When specified the flint would not update\n"
                 INDENTEX"the full image crc after changing the guids\n"
-                INDENTEX"num_of_guids: number of GUIDs to be allocated per physical port (FS3 Only)\n"
-                INDENTEX"step_size: step size between GUIDs (FS3 Only)";
+                INDENTEX"guids_num: (optional) number of GUIDs to be allocated per physical port (FS3 Only)\n"
+                INDENTEX"step_size: (optional) step size between GUIDs (FS3 Only)\n"
+                INDENTEX"Note: guids_num/step_size values can be specified per port or for both ports";
     _example = FLINT_NAME" -d "MST_DEV_EXAMPLE1" -guid 0x0002c9000100d050 sg"
   "\n"INDENTEX FLINT_NAME" -d "MST_DEV_EXAMPLE4" -guid 0x0002c9000100d050 -mac 0x0002c900d050 sg";
     _v = Wtv_Dev_Or_Img;
@@ -2446,6 +2477,9 @@ SgSubCommand:: SgSubCommand()
     _ops     = NULL;
     memset(&_info, 0, sizeof(_info));
     memset(&_sgParams, 0, sizeof(_sgParams));
+    memset(&(_sgParams.numOfGUIDsPP), 0xff, sizeof(_sgParams.numOfGUIDsPP));
+    memset(&(_sgParams.stepSizePP), 0xff, sizeof(_sgParams.stepSizePP));
+    _sgParams.usePPAttr = true;
 }
 
 SgSubCommand:: ~SgSubCommand()
@@ -2457,7 +2491,7 @@ bool SgSubCommand::verifyParams()
 {
     if ((_flintParams.cmd_params.size() == 1 && _flintParams.cmd_params[0] != "nocrc")||\
             (_flintParams.cmd_params.size() == 2 && \
-                    !extractUIDArgs(_flintParams.cmd_params, _sgParams.numOfGUIDs, _sgParams.stepSize))) {
+                    !extractUIDArgs(_flintParams.cmd_params, _sgParams.numOfGUIDsPP, _sgParams.stepSizePP))) {
         reportErr(true, "The sg parameter should be \"nocrc\", \"guids_num=<num> step_size=<size>\" or nothing\n");
         return false;
     }
@@ -2498,7 +2532,6 @@ bool SgSubCommand::verifyParams()
     _sgParams.uidsSpecified = _flintParams.uid_specified || _flintParams.uids_specified;
     _sgParams.updateCrc = !(_flintParams.cmd_params.size() == 1);
     _sgParams.stripedImage = _flintParams.striped_image;
-
     return true;
 }
 
@@ -2595,10 +2628,23 @@ FlintStatus SgSubCommand::sgFs3()
     if (!CheckSetGuidsFlags()){
         return FLINT_FAILED;
     }
+    if (_flintParams.guids_specified || _flintParams.macs_specified) {
+        reportErr(true, FLINT_NO_GUID_MAC_FLAGS_ERROR);
+        return FLINT_FAILED;
+    }
+
     // TODO: create method that checks the flags for FS3/FS2
-    if (_info.fw_info.chip_type == CT_CONNECTX) {
+    if (_info.fw_info.chip_type == CT_CONNECT_IB || _info.fw_info.chip_type == CT_SWITCH_IB) {
+        if (!_flintParams.uid_specified) {
+            reportErr(true, FLINT_NO_UID_FLAG_ERROR);
+            return FLINT_FAILED;
+        }
+            // for connectib we just need the base guid so we put it in the first location.
+            _sgParams.userGuids.resize(1);
+            _sgParams.userGuids[0]= _flintParams.baseUid;
+    } else {
         if (!_flintParams.uid_specified && !_flintParams.guid_specified && !_flintParams.mac_specified) {
-            reportErr(true, "Can not set GUIDs/MACs: please run with -uid/-guid/-mac flag.\n");
+            reportErr(true, FLINT_NO_GUID_MAC_FLAGS_ERROR);
             return FLINT_FAILED;
         }
         if (_flintParams.uid_specified) {
@@ -2610,14 +2656,6 @@ FlintStatus SgSubCommand::sgFs3()
             _sgParams.userGuids[0]= _sgParams.guidsSpecified ? _flintParams.user_guids[0] : (guid_t){0, 0};
             _sgParams.userGuids[1]= _sgParams.macsSpecified ? _flintParams.user_macs[0] : (guid_t){0, 0};
         }
-    } else {
-        if (!_flintParams.uid_specified) {
-            reportErr(true, "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n");
-            return FLINT_FAILED;
-        }
-            // for connectib we just need the base guid so we put it in the first location.
-            _sgParams.userGuids.resize(1);
-            _sgParams.userGuids[0]= _flintParams.baseUid;
     }
 
     if (!_ops->FwSetGuids(_sgParams, &verifyCbFunc)) {
@@ -2657,9 +2695,10 @@ SmgSubCommand:: SmgSubCommand()
                 INDENTEX"Use -uid flag to set the desired GUIDs, intended for production use only.";
     _flagLong = "smg";
     _flagShort = "";
-    _param = "[guids_num=<num> step_size=<size>]";
-    _paramExp = "guids_num: number of GUIDs to be allocated per physical port\n"
-                INDENTEX"step_size: step size between GUIDs";
+    _param = "[guids_num=<num|num_port1,num_port2> step_size=<size|size_port1,size_port2>]";
+    _paramExp = "guids_num: (optional) number of GUIDs to be allocated per physical port\n"
+                INDENTEX"step_size: (optional) step size between GUIDs\n"
+                INDENTEX"Note: guids_num/step_size values can be specified per port or for both ports";
     _example = FLINT_NAME" -i fw_image.bin -uid 0x0002c9000100d050 smg"
 #ifndef __WIN__
     		"\n"INDENTEX FLINT_NAME" -d "MST_DEV_EXAMPLE3" -uid 0x0002c9000100d050 smg (should be used when device is idle)"
@@ -2671,6 +2710,9 @@ SmgSubCommand:: SmgSubCommand()
     _ops = NULL;
     memset(&_baseGuid, 0, sizeof(_baseGuid));
     memset(&_info, 0, sizeof(_info));
+    memset(&(_baseGuid.num_of_guids_pp), 0xff, sizeof(_baseGuid.num_of_guids_pp));
+    memset(&(_baseGuid.step_size_pp), 0xff, sizeof(_baseGuid.step_size_pp));
+    _baseGuid.use_pp_attr = 1;
 }
 
 SmgSubCommand:: ~SmgSubCommand()
@@ -2707,7 +2749,7 @@ bool SmgSubCommand::verifyParams()
     }
 
     if (_flintParams.cmd_params.size() == 2 &&\
-        !extractUIDArgs(_flintParams.cmd_params, _baseGuid.num_of_guids, _baseGuid.step_size)) {
+        !extractUIDArgs(_flintParams.cmd_params, _baseGuid.num_of_guids_pp, _baseGuid.step_size_pp)) {
         return false;
     }
 
@@ -2740,17 +2782,19 @@ FlintStatus SmgSubCommand::executeCommand()
          reportErr(true, FLINT_MFG_ERROR, _ops->err());
          return FLINT_FAILED;
      }
-     if (_info.fw_info.chip_type == CT_CONNECTX) {
+
+     if (_info.fw_info.chip_type == CT_CONNECT_IB || _info.fw_info.chip_type == CT_SWITCH_IB) {
+         if (!_flintParams.uid_specified) {
+         reportErr(true, "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n");
+         return FLINT_FAILED;
+         }
+     } else {
          if (!_flintParams.uid_specified && !_flintParams.guid_specified && !_flintParams.mac_specified ) {
              reportErr(true, "Can not set GUIDs/MACs: GUIDs/MACs are not specified, please run with -uid/-guid/-mac flags.\n");
              return FLINT_FAILED;
          }
-     } else {
-        if (!_flintParams.uid_specified) {
-        reportErr(true, "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n");
-        return FLINT_FAILED;
-        }
      }
+
     bool ret;
     ret = _ops->FwSetMFG(_baseGuid, &verifyCbFunc);
     if (!ret) {
diff --git a/flint/subcommands.h b/flint/subcommands.h
index 1630b4b..f82d034 100644
--- a/flint/subcommands.h
+++ b/flint/subcommands.h
@@ -128,7 +128,8 @@ protected:
             bool guidsSpecified, bool macsSpecified, bool uidsSpecified, bool ibDev, bool ethDev);
     void printMissingGuidErr(bool ibDev, bool ethDev, bool bxDev);
 
-    bool extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGuids, u_int8_t& stepSize);
+    bool extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t numOfGuids[2], u_int8_t stepSize[2]);
+    bool extractValuesFromString(string valStr, u_int8_t values[2], string origArg);
     bool getGUIDFromStr(string str, guid_t& guid, string prefixErr="");
     bool  getPasswordFromUser(const char *preStr, char buffer[MAX_PASSWORD_LEN+1]);
     bool askUser(const char* question=NULL, bool printAbrtMsg=true);
diff --git a/include/mtcr_ul/mtcr.h b/include/mtcr_ul/mtcr.h
index e5e627e..4b5c6c2 100644
--- a/include/mtcr_ul/mtcr.h
+++ b/include/mtcr_ul/mtcr.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #ifndef MTCR_H
@@ -201,7 +203,7 @@ typedef enum mtcr_access_method {
     MTCR_ACCESS_ERROR  = 0x0,
     MTCR_ACCESS_MEMORY = 0x1,
     MTCR_ACCESS_CONFIG = 0x2,
-    MTCR_ACCESS_INBAND = 0x3,
+    MTCR_ACCESS_INBAND = 0x3
 } mtcr_access_method_t;
 /*
  * Read 4 bytes, return number of succ. read bytes or -1 on failure
@@ -218,6 +220,7 @@ int mread4_block (mfile *mf, unsigned int offset, u_int32_t* data, int byte_len)
 int mwrite4_block (mfile *mf, unsigned int offset, u_int32_t* data, int byte_len);
 
 int msw_reset(mfile *mf);
+int mhca_reset(mfile *mf);
 
 /*
  * Get list of MST (Mellanox Software Tools) devices.
@@ -249,7 +252,7 @@ mfile *mopen(const char *name);
 
 mfile *mopend(const char *name, int type);
 
-mfile *mopen_fw_ctx(void* fw_cmd_context, void* fw_cmd_func);
+mfile *mopen_fw_ctx(void* fw_cmd_context, void* fw_cmd_func, void* extra_data);
 
 /*
  * Close Mellanox driver
diff --git a/man/mstflint.1 b/man/mstflint.1
index 0ac287b..6212dc4 100644
--- a/man/mstflint.1
+++ b/man/mstflint.1
@@ -9,16 +9,14 @@
       [\fB-d\fP|\fB--device\fP <device>] [\fB--guid\fP <GUID>]
       [\fB--guids\fP <GUIDS\.\.\.>] [\fB--mac\fP <MAC>]
       [\fB--macs\fP <MACs\.\.\.>] [\fB--uid\fP <UID>]
-      [\fB--uids\fP <UIDs\.\.\.>] [\fB--blank_guids\fP]
-      [\fB--clear_semaphore\fP] [\fB-h\fP|\fB--help\fP] [\fB--hh\fP]
-      [\fB-i\fP|\fB--image\fP <image>] [\fB--qq\fP] [\fB--nofs\fP]
-      [\fB--allow_psid_change\fP] [\fB--allow_rom_change\fP]
+      [\fB--blank_guids\fP] [\fB--clear_semaphore\fP]
+      [\fB-h\fP|\fB--help\fP] [\fB--hh\fP] [\fB-i\fP|\fB--image\fP <image>]
+      [\fB--qq\fP] [\fB--nofs\fP] [\fB--allow_psid_change\fP] [\fB--allow_rom_change\fP]
       [\fB--override_cache_replacement\fP] [\fB--no_flash_verify\fP]
       [\fB-s\fP|\fB--silent\fP] [\fB-y\fP|\fB--yes\fP] [\fB--no\fP] [\fB--vsd\fP <string>]
       [\fB--use_image_ps\fP] [\fB--use_image_guids\fP]
       [\fB--use_image_rom\fP] [\fB--dual_image\fP] [\fB--ignore_dev_data\fP]
-      [\fB--use_fw\fP]
-      [\fB--striped_image\fP] [\fB--banks\fP <bank>]
+      [\fB--use_fw\fP] [\fB--striped_image\fP] [\fB--banks\fP <bank>]
       [\fB--log\fP <log_file>] [\fB--flash_params\fP <type, log2size, num_of_flashes>]
       [\fB-v\fP|\fB--version\fP] 
 .fam T
@@ -108,33 +106,13 @@ Technologies ethernet products.
 .TP
 .B
 \fB--uid\fP <UID>
-: BridgeX only. Derive and set the device UIDs 
-(GUIDs, MACs, WWNs).
+: ConnectIB/SwitchIB only. Derive and set the device UIDs 
+(GUIDs, MACs).
 UIDs are derived from the given base UID 
 according to Mellanox Methodology
 Commands affected: burn, sg
 .TP
 .B
-\fB--uids\fP <UIDs\.\.\.>
-: BridgeX only. 29 space separated UIDs must 
-be specified here.
-The specified UIDs are assigned to the following 
-fields, repectively:
-.RS
-G0-MAC-PI0      G0-MAC-PI1      G0-MAC-PI2      G0-MAC-PE0
-G0-MAC-PE1      G0-MAC-PE2      G0-MAC-PE3      G0-FC-WWPN-P0
-G0-FC-WWPN-P1   G0-FC-WWPN-P2   G0-FC-WWPN-P3   G0-IB-NODE-GUID
-G0-IB-PORT-GUID G0-FC-WWNN      G1-MAC-PI0      G1-MAC-PI1
-G1-MAC-PI2      G1-MAC-PE0      G1-MAC-PE1      G1-MAC-PE2
-G1-MAC-PE3      G1-FC-WWPN-P0   G1-FC-WWPN-P1   G1-FC-WWPN-P2
-G1-FC-WWPN-P3   G1-IB-NODE-GUID G1-IB-PORT-GUID G1-FC-WWNN
-IB-SYSTEM-GUID
-
-Commands affected: 
-burn, sg
-.RE
-.TP
-.B
 \fB--blank_guids\fP
 : Burn the image with blank GUIDs and MACs 
 (where
diff --git a/mflash/mflash.c b/mflash/mflash.c
index 73d1709..c039127 100644
--- a/mflash/mflash.c
+++ b/mflash/mflash.c
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -29,12 +28,12 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  *
+ *  Version: $Id$
+ *
  */
 
-
-// TODO: remove all commented defines and ifdefs of __be32.... or __cpu_to_be32... etc (they are taken from compatibility.h now)
 #ifdef IRISC
-//#define __cpu_to_be32(val) (val)
+
 #define NULL 0
 
 #else
@@ -64,29 +63,13 @@
 //
 // DJGPP - GCC PORT TO MS DOS
 //
-
 #include <netinet/in.h>
 #include <unistd.h>
 
 #define bswap_32(x) ntohl(x)
 
-
-#else
-#ifdef __FreeBSD__
-#include <netinet/in.h>
-#define SWAPL(l) ntohl(l)
-#include <sys/endian.h>
-#else // Linux
-#include <byteswap.h>
-#include <endian.h>
-#endif
-
 #endif // __DJGPP__
 
-#ifndef __FreeBSD__
-#define SWAPL(l) bswap_32(l)
-#endif
-
 #define OP_NOT_SUPPORTED EOPNOTSUPP
 
 #else // __WIN__
@@ -94,13 +77,6 @@
 //
 // Windows (Under DDK)
 //
-
-#include <io.h>
-#include <Winsock2.h>
-#include <windows.h>
-#define SWAPL(l) ntohl(l)
-#define inline __inline
-
 #define OP_NOT_SUPPORTED EINVAL
 #define usleep(x) Sleep(((x + 999)/1000))
 
@@ -234,7 +210,7 @@ int release_semaphore(mflash* mfl, int ignore_writer_lock);
 
 #define CONNECT_IB_HW_ID 0x1FF
 #define SWITCH_IB_HW_ID 0x247
-#define SWITCH_EN_HW_ID 0x249
+#define SPECTRUM_HW_ID 0x249
 
 /*
  * Device IDs Macros:
@@ -247,7 +223,7 @@ int release_semaphore(mflash* mfl, int ignore_writer_lock);
 #define IS_SIB(dev_id) \
         ((dev_id) == SWITCH_IB_HW_ID)
 #define IS_SEN(dev_id) \
-        ((dev_id) == SWITCH_EN_HW_ID)
+        ((dev_id) == SPECTRUM_HW_ID)
 #define IS_IS4_FAMILY(dev_id) \
     (((dev_id) == 435) || ((dev_id) == 6100)) // 435 == InfiniScaleIV, 6100 == BridgeX
 #define IS_CONNECT_IB(dev_id) \
@@ -1358,8 +1334,10 @@ int cntx_spi_write_status_reg(mflash* mfl, u_int32_t status_reg, u_int8_t write_
     if (bytes_num == 2) {
         gw_cmd = MERGE(gw_cmd, 1, HBO_MSIZE,      1);
     }
-
-    return cntx_exec_cmd_set(mfl, gw_cmd, &status_reg, 1, NULL, "Write-Status-Register");
+    rc = cntx_exec_cmd_set(mfl, gw_cmd, &status_reg, 1, NULL, "Write-Status-Register");
+    // wait for flash to write the register
+    msleep(30);
+    return rc;
 }
 
 
@@ -1417,7 +1395,7 @@ int spi_get_num_of_flashes(int prev_num_of_flashes)
 
     mflash_env = getenv(MFLASH_ENV);
     if (mflash_env) {
-        num =  atoi(mflash_env);
+        num =  atol(mflash_env);
         // make sure the value makes sense
         num = (num > 16 || num <= 0) ? -1 : num;
         return num;
@@ -2142,17 +2120,21 @@ int empty_get_status(mflash* mfl, u_int8_t op_type, u_int8_t* status)
     return MFE_NOT_SUPPORTED_OPERATION;
 }
 
+#define MAX_BLOCK_SIZE(hw_dev_id)\
+        (((hw_dev_id) == CX3_HW_ID || hw_dev_id == CX3_PRO_HW_ID) ? MAX_WRITE_BUFFER_SIZE : 128)
+
 static int update_max_write_size(mflash* mfl)
 {
     u_int32_t max_reg_size = mget_max_reg_size(mfl->mf);
+    u_int32_t max_block_size = MAX_BLOCK_SIZE(mfl->attr.hw_dev_id);
     if (!max_reg_size) {
     	return MFE_BAD_PARAMS;
     }
     max_reg_size = NEAREST_POW2(max_reg_size);
-    // limit maximal write to MAX_WRITE_BUFFER_SIZE
-    max_reg_size = max_reg_size > MAX_WRITE_BUFFER_SIZE ? MAX_WRITE_BUFFER_SIZE : max_reg_size;
-    mfl->attr.block_write = max_reg_size;
-    mfl->attr.page_write  = max_reg_size;
+    // limit maximal write to max_block_size
+    max_block_size = max_reg_size < max_block_size ? max_reg_size : max_block_size;
+    mfl->attr.block_write = max_block_size;
+    mfl->attr.page_write  = max_block_size;
     return ME_OK;
 }
 
@@ -2222,7 +2204,6 @@ int flash_init_fw_access(mflash* mfl, flash_params_t* flash_params)
     if (mfl->opts[MFO_IGNORE_SEM_LOCK]) {
        rc = mfl->f_lock(mfl, 0); CHECK_RC(rc);
     }
-
     return MFE_OK;
 }
 
@@ -2461,7 +2442,7 @@ int mf_open_fw(mflash* mfl, flash_params_t* flash_params, int num_of_banks)
 }
 
 int     mf_opend_int       (mflash** pmfl, void* access_dev, int num_of_banks, flash_params_t* flash_params, int ignore_cache_rep_guard, u_int8_t access_type,
-        void* access_func, int cx3_fw_access) {
+        void* dev_extra, int cx3_fw_access) {
     int rc;
     *pmfl = (mflash*)malloc(sizeof(mflash));
     if (!*pmfl) {
@@ -2478,10 +2459,16 @@ int     mf_opend_int       (mflash** pmfl, void* access_dev, int num_of_banks, f
         (*pmfl)->mf = (mfile*)access_dev;
     } else if (access_type ==  MFAT_UEFI) {
     	// open mfile as uefi
-    	if (!((*pmfl)->mf = mopen_fw_ctx(access_dev, access_func))){
+        if (!((*pmfl)->mf = mopen_fw_ctx(access_dev, ((uefi_dev_extra_t*)dev_extra)->fw_cmd_func,\
+                ((uefi_dev_extra_t*)dev_extra)->dev_info)) ){
     		free((*pmfl));
     		return MFE_NOMEM;
     	}
+    	// fill some device information
+    	if (((uefi_dev_extra_t*)dev_extra)->dev_info) {
+    		(*pmfl)->attr.hw_dev_id = ((uefi_dev_extra_t*)dev_extra)->dev_info->hw_dev_id;
+    		(*pmfl)->attr.rev_id = ((uefi_dev_extra_t*)dev_extra)->dev_info->rev_id;
+    	}
     }
 
     rc = mf_open_fw(*pmfl, flash_params, num_of_banks);
@@ -2494,10 +2481,10 @@ int     mf_opend       (mflash** pmfl, struct mfile_t* mf, int num_of_banks, fla
 }
 
 
-int     mf_open_uefi(mflash** pmfl, uefi_Dev_t *uefi_dev, f_fw_cmd fw_cmd_func)
+int     mf_open_uefi(mflash** pmfl, uefi_Dev_t *uefi_dev, uefi_dev_extra_t* uefi_dev_extra)
 {
 
-    return mf_opend_int(pmfl, (void*)uefi_dev, 4, NULL, 0, MFAT_UEFI, (void*)fw_cmd_func, 0);
+    return mf_opend_int(pmfl, (void*)uefi_dev, 4, NULL, 0, MFAT_UEFI, (void*)uefi_dev_extra, 0);
 }
 
 int     mf_open_int        (mflash** pmfl, const char* dev, int num_of_banks, flash_params_t* flash_params,
diff --git a/mflash/mflash.h b/mflash/mflash.h
index 875d100..bcaba6f 100644
--- a/mflash/mflash.h
+++ b/mflash/mflash.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -29,9 +28,10 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  *
+ *  Version: $Id$
+ *
  */
 
-
 #ifndef MFLASH_H
 #define MFLASH_H
 
@@ -39,6 +39,8 @@
 #include "mflash_types.h"
 #include "mflash_common_structs.h"
 
+#include <mlxfwops/uefi_c/mft_uefi_common.h>
+
 #ifdef __cplusplus
 #define EXTERN_C_START extern "C" {
 #define EXTERN_C_END   }
@@ -69,10 +71,6 @@ typedef struct write_protect_info {
     u_int8_t sectors_num;
 } write_protect_info_t;
 
-// TODO: remove UEFI REMNANTS
-typedef struct _MLX4_DEV uefi_Dev_t;
-typedef int (*f_fw_cmd) (uefi_Dev_t* dev, void* buffer, int* size);
-
 /////////////////////////////////////////////
 //
 // MFLASH INTERFACE FUNCTIONS
@@ -112,7 +110,7 @@ int     mf_opend       (mflash** pmfl, struct mfile_t* mf, int num_of_banks,  fl
 int     mf_open_adv       (mflash** pmfl, const char* dev, int num_of_banks, flash_params_t* flash_params,
         int ignore_cache_rep_guard, int cx3_fw_access);
 
-int     mf_open_uefi(mflash** pmfl, uefi_Dev_t *uefi_dev, f_fw_cmd fw_cmd_func);
+int     mf_open_uefi(mflash** pmfl, uefi_Dev_t *uefi_dev, uefi_dev_extra_t* dev_extra);
 
 int     mf_open_ignore_lock(mflash* mfl);
 void     mf_close       (mflash* mfl);
diff --git a/mflash/mflash_access_layer.c b/mflash/mflash_access_layer.c
index 5e7ddaa..76f9af9 100755
--- a/mflash/mflash_access_layer.c
+++ b/mflash/mflash_access_layer.c
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,16 +27,21 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include <mtcr.h>
 #include <reg_access.h>
+
+#ifndef UEFI_BUILD
 #include <tools_res_mgmt.h>
+#endif
 
 #include "mflash_types.h"
 #include "mflash_pack_layer.h"
@@ -127,6 +131,7 @@ int sx_block_write_by_type(mflash* mfl, u_int32_t addr, u_int32_t size, u_int8_t
 #define MAX_FLASH_PROG_SEM_RETRY_CNT 2048
 static int lock_flash_programing_sem(mflash* mfl)
 {
+#ifndef UEFI_BUILD
     int rc;
     if (mfl->opts[MFO_FW_ACCESS_TYPE_BY_MFILE] == ATBM_ICMD) {
         rc = trm_lock(mfl->mf, TRM_RES_FLASH_PROGRAMING, MAX_FLASH_PROG_SEM_RETRY_CNT);
@@ -139,11 +144,13 @@ static int lock_flash_programing_sem(mflash* mfl)
             return MFE_SEM_LOCKED;
         }
     }
+#endif
     return MFE_OK;
 }
 
 static int unlock_flash_programing_sem(mflash* mfl)
 {
+#ifndef UEFI_BUILD
     int rc;
     if (mfl->opts[MFO_FW_ACCESS_TYPE_BY_MFILE] == ATBM_ICMD) {
         rc = trm_unlock(mfl->mf, TRM_RES_FLASH_PROGRAMING);
@@ -156,6 +163,7 @@ static int unlock_flash_programing_sem(mflash* mfl)
             return MFE_SEM_LOCKED;
         }
     }
+#endif
     return MFE_OK;
 }
 
diff --git a/mflash/mflash_access_layer.h b/mflash/mflash_access_layer.h
index d3314e5..23931fa 100755
--- a/mflash/mflash_access_layer.h
+++ b/mflash/mflash_access_layer.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,13 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-
-/*
- * mflash_inband.h
  *
- *  Created on: Jul 6, 2011
- *      Author: mohammad
+ *  Version: $Id$
+ *
  */
 
 #ifndef MFLASH_ACCESS_LAYER_H_
diff --git a/mflash/mflash_common_structs.h b/mflash/mflash_common_structs.h
index 6b6fd1f..5d7894b 100644
--- a/mflash/mflash_common_structs.h
+++ b/mflash/mflash_common_structs.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -14,12 +13,12 @@
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #ifndef MFLASH_COMMON_STRUCTS_H
diff --git a/mflash/mflash_pack_layer.c b/mflash/mflash_pack_layer.c
index 2ac59ff..b9d6f9c 100755
--- a/mflash/mflash_pack_layer.c
+++ b/mflash/mflash_pack_layer.c
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #include <stdio.h>
@@ -172,7 +174,7 @@ int set_bank_int(mflash* mfl, int bank_num) {
 
     mflash_env = getenv(MFLASH_BANK_DEBUG);
         if (mflash_env) {
-            max_bank =  atoi(mflash_env);
+            max_bank =  atol(mflash_env);
             if (bank_num > max_bank) {
                 printf("-E- there was an attempt to set the flash bank to: %d. max allowed value: %d\n", bank_num, max_bank);
                 return MFE_ILLEGAL_BANK_NUM;
diff --git a/mflash/mflash_pack_layer.h b/mflash/mflash_pack_layer.h
index a5186b3..5bdaf4e 100755
--- a/mflash/mflash_pack_layer.h
+++ b/mflash/mflash_pack_layer.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,13 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-
-/*
- * mflash_inband.h
  *
- *  Created on: Jul 6, 2011
- *      Author: mohammad
+ *  Version: $Id$
+ *
  */
 
 #ifndef MFLASH_COMMON_H_
diff --git a/mflash/mflash_types.h b/mflash/mflash_types.h
index 4d2a005..2572adc 100644
--- a/mflash/mflash_types.h
+++ b/mflash/mflash_types.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -14,12 +13,12 @@
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -28,9 +27,11 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
-
 #ifndef MFLASH_TYPES_H
 #define MFLASH_TYPES_H
 
diff --git a/mlxconfig/Makefile.am b/mlxconfig/Makefile.am
index 7820ba1..f4ce674 100755
--- a/mlxconfig/Makefile.am
+++ b/mlxconfig/Makefile.am
@@ -57,5 +57,5 @@ mstconfig_SOURCES = mlxcfg_status.h mlxcfg_ui.h mlxcfg_ui.cpp\
 
 #get mst device examples and tool name from makefile
 AM_CXXFLAGS += -DMLXCFG_NAME=\"mstconfig\"
-AM_CXXFLAGS += -DMST_DEV_EXAMPLE=\"/sys/bus/pci/devices/0000:04:00.0/config\"
+AM_CXXFLAGS += -DMST_DEV_EXAMPLE=\"04:00.0\" -DMST_DEV_EXAMPLE2=\"05:00.0\"
 
diff --git a/mlxconfig/Makefile.in b/mlxconfig/Makefile.in
index db02bfb..b354a81 100644
--- a/mlxconfig/Makefile.in
+++ b/mlxconfig/Makefile.in
@@ -352,7 +352,7 @@ INCLUDES = -I. -I$(USER_DIR) -I$(top_srcdir)/include/mtcr_ul -I$(MTCR_DIR) -I$(C
 
 #get mst device examples and tool name from makefile
 AM_CXXFLAGS = -Wall -W -g -MP -MD -pipe -DMLXCFG_NAME=\"mstconfig\" \
-	-DMST_DEV_EXAMPLE=\"/sys/bus/pci/devices/0000:04:00.0/config\"
+	-DMST_DEV_EXAMPLE=\"04:00.0\" -DMST_DEV_EXAMPLE2=\"05:00.0\"
 mstconfig_LDADD = $(CMDIF_DIR)/libcmdif.a ../reg_access/libreg_access.a $(LAYOUTS_LIB) $(MTCR_DIR)/libmtcr_ul.a $(MLNXOS_PPC_LIBS) $(LIBSTD_CPP) $(UTILS_LIB) $(DEV_MGT_DIR)/libdev_mgt.a -ldl
 mstconfig_SOURCES = mlxcfg_status.h mlxcfg_ui.h mlxcfg_ui.cpp\
 			mlxcfg_parser.cpp\
diff --git a/mlxconfig/mlxcfg_lib.cpp b/mlxconfig/mlxcfg_lib.cpp
index f828ae3..68ebe40 100644
--- a/mlxconfig/mlxcfg_lib.cpp
+++ b/mlxconfig/mlxcfg_lib.cpp
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,12 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-/*
- * mlxcfg_lib.cpp
  *
- *  Created on: Feb 17, 2014
- *      Author: adrianc
+ *  Version: $Id$
+ *
  */
 
 #include <set>
@@ -206,6 +202,7 @@ int MlxCfgOps::openComChk()
     }
 
     // update cfg specific info.
+    // TODO: adrianc: when getting defaults for 4th gen , perform queryDefParams only once and pass struct to classes to avoid calling multiple times
     for (std::map<mlxCfgType, CfgParams*>::iterator paramIt = _cfgList.begin(); paramIt != _cfgList.end(); paramIt++) {
         paramIt->second->setDevCapVec(_suppVec);
         if (paramIt->second->cfgSupported(_mf)) {
@@ -247,29 +244,131 @@ int MlxCfgOps::opend(mfile* mf, bool forceClearSem)
         break;
     case DeviceConnectIB:
     case DeviceConnectX4:
+    case DeviceConnectX4LX:
         _isFifthGen = true;
         break;
     default:
         return errmsg(MCE_UNSUPPORTED_DEVICE);
     }
 
-    // init _cfgList
+    // init _cfgList, _param2TypeMap
     if (_isFifthGen) {
-        _cfgList[Mct_Sriov]    = new SriovParams5thGen();
-        _cfgList[Mct_Wol_P1]   = new WolParams5thGen(1);
-        _cfgList[Mct_Wol_P2]   = new WolParams5thGen(2);
-        _cfgList[Mct_Vpi_P1]   = new VpiParams5thGen(1);
-        _cfgList[Mct_Vpi_P2]   = new VpiParams5thGen(2);
-        _cfgList[Mct_Bar_Size] = new BarSzParams5thGen();
-        _cfgList[Mct_Pci]      = new PciParams5thGen();
-        _cfgList[Mct_Tpt]      = new TptParams5thGen();
+        // Wake On LAN
+        _cfgList[Mct_Wol] = new WolParams5thGen();
+        _param2TypeMap[Mcp_Wol_Magic_En] = Mct_Wol;
+        // Vpi Settings
+        _cfgList[Mct_Vpi_P1] = new VpiParams5thGen(1);
+        _cfgList[Mct_Vpi_P2] = new VpiParams5thGen(2);
+        _param2TypeMap[Mcp_Link_Type_P1] = Mct_Vpi_P1;
+        _param2TypeMap[Mcp_Link_Type_P2] = Mct_Vpi_P2;
+        // PCI settings
+        _cfgList[Mct_Pci] = new PciParams5thGen();
+        _param2TypeMap[Mcp_Sriov_En] = Mct_Pci;
+        _param2TypeMap[Mcp_Num_Of_Vfs] = Mct_Pci;
+        _param2TypeMap[Mcp_Fpp_En] = Mct_Pci;
+        // TPT settings
+        _cfgList[Mct_Tpt] = new TptParams5thGen();
+        _param2TypeMap[Mcp_Log_Tpt_Size] = Mct_Tpt;
+        // Infiniband DC settings
+        _cfgList[Mct_Dc] = new IBDCParams5thGen();
+        _param2TypeMap[Mcp_Log_Dcr_Hash_Table_Size] = Mct_Dc;
+        _param2TypeMap[Mcp_Dcr_Lifo_Size] = Mct_Dc;
+        // Port Boot State
+        /*_cfgList[Mct_Boot_State_P1] = new PortBootStateParams5thGen(1);
+        _cfgList[Mct_Boot_State_P2] = new PortBootStateParams5thGen(2);
+        _param2TypeMap[Mcp_Boot_State_P1] = Mct_Boot_State_P1;
+        _param2TypeMap[Mcp_Boot_State_P2] = Mct_Boot_State_P2;
+        */
+        // RoCE v1.5 next protocol
+        _cfgList[Mct_RoCE_Next_Protocol] = new RoCENextProtocolParams5thGen();
+        _param2TypeMap[Mcp_RoCE_Next_Protocol] = Mct_RoCE_Next_Protocol;
+        // RoCE CC parameters
+        _cfgList[Mct_RoCE_CC_P1] = new RoCECCParams5thGen(1);
+        _cfgList[Mct_RoCE_CC_P2] = new RoCECCParams5thGen(2);
+        _param2TypeMap[Mcp_RoCE_CC_Algorithm_P1] = Mct_RoCE_CC_P1;
+        _param2TypeMap[Mcp_RoCE_CC_Prio_Mask_P1] = Mct_RoCE_CC_P1;
+        _param2TypeMap[Mcp_RoCE_CC_Algorithm_P2] = Mct_RoCE_CC_P2;
+        _param2TypeMap[Mcp_RoCE_CC_Prio_Mask_P2] = Mct_RoCE_CC_P2;
+        // RoCE CC ECN parameters
+        _cfgList[Mct_RoCE_CC_Ecn_P1] = new RoCECCEcnParams5thGen(1);
+        _cfgList[Mct_RoCE_CC_Ecn_P2] = new RoCECCEcnParams5thGen(2);
+        _param2TypeMap[Mcp_Clamp_Tgt_Rate_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Clamp_Tgt_Rate_After_Time_Inc_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Time_Reset_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Byte_Reset_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Threshold_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Max_Rate_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Ai_Rate_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Hai_Rate_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Gd_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Min_Dec_Fac_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rpg_Min_Rate_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rate_To_Set_On_First_Cnp_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Dce_Tcp_G_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Dce_Tcp_Rtt_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Rate_Reduce_Monitor_Period_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Initial_Alpha_Value_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Min_Time_Between_Cnps_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Cnp_Dscp_P1] = Mct_RoCE_CC_Ecn_P1;
+        _param2TypeMap[Mcp_Cnp_802p_Prio_P1] = Mct_RoCE_CC_Ecn_P1;
+
+        _param2TypeMap[Mcp_Clamp_Tgt_Rate_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Clamp_Tgt_Rate_After_Time_Inc_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Time_Reset_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Byte_Reset_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Threshold_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Max_Rate_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Ai_Rate_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Hai_Rate_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Gd_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Min_Dec_Fac_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rpg_Min_Rate_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rate_To_Set_On_First_Cnp_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Dce_Tcp_G_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Dce_Tcp_Rtt_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Rate_Reduce_Monitor_Period_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Initial_Alpha_Value_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Min_Time_Between_Cnps_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Cnp_Dscp_P2] = Mct_RoCE_CC_Ecn_P2;
+        _param2TypeMap[Mcp_Cnp_802p_Prio_P2] = Mct_RoCE_CC_Ecn_P2;
+
     } else {
-        _cfgList[Mct_Sriov]    = new SriovParams4thGen();
-        _cfgList[Mct_Wol_P1]   = new WolParams4thGen(1);
-        _cfgList[Mct_Wol_P2]   = new WolParams4thGen(2);
-        _cfgList[Mct_Vpi_P1]   = new VpiParams4thGen(1);
-        _cfgList[Mct_Vpi_P2]   = new VpiParams4thGen(2);
+        // SR-IOV
+        _cfgList[Mct_Sriov] = new SriovParams4thGen();
+        _param2TypeMap[Mcp_Sriov_En] = Mct_Sriov;
+        _param2TypeMap[Mcp_Num_Of_Vfs] = Mct_Sriov;
+        // Wake on LAN
+        _cfgList[Mct_Wol_P1] = new WolParams4thGen(1);
+        _cfgList[Mct_Wol_P2] = new WolParams4thGen(2);
+        _param2TypeMap[Mcp_Wol_Magic_En_P1] = Mct_Wol_P1;
+        _param2TypeMap[Mcp_Wol_Magic_En_P2] = Mct_Wol_P2;
+        // Vpi Settings
+        _cfgList[Mct_Vpi_P1] = new VpiParams4thGen(1);
+        _cfgList[Mct_Vpi_P2] = new VpiParams4thGen(2);
+        _param2TypeMap[Mcp_Link_Type_P1] = Mct_Vpi_P1;
+        _param2TypeMap[Mcp_Link_Type_P2] = Mct_Vpi_P2;
+        // BAR size
         _cfgList[Mct_Bar_Size] = new BarSzParams4thGen();
+        _param2TypeMap[Mcp_Log_Bar_Size] = Mct_Bar_Size;
+        // Infiniband Boot Settings
+        _cfgList[Mct_Boot_Settings_P1] = new InfinibandBootSettingsParams4thGen(1);
+        _cfgList[Mct_Boot_Settings_P2] = new InfinibandBootSettingsParams4thGen(2);
+        _param2TypeMap[Mcp_Boot_Pkey_P1] = Mct_Boot_Settings_P1;
+        _param2TypeMap[Mcp_Boot_Pkey_P2] = Mct_Boot_Settings_P2;
+        // Preboot Boot Settings
+        _cfgList[Mct_Preboot_Boot_Settings_P1] = new PrebootBootSettingsParams4thGen(1);
+        _cfgList[Mct_Preboot_Boot_Settings_P2] = new PrebootBootSettingsParams4thGen(2);
+        _param2TypeMap[Mcp_Boot_Option_Rom_En_P1] = Mct_Preboot_Boot_Settings_P1;
+        _param2TypeMap[Mcp_Boot_Vlan_En_P1] = Mct_Preboot_Boot_Settings_P1;
+        _param2TypeMap[Mcp_Boot_Retry_Cnt_P1] = Mct_Preboot_Boot_Settings_P1;
+        _param2TypeMap[Mcp_Legacy_Boot_Protocol_P1] = Mct_Preboot_Boot_Settings_P1;
+        _param2TypeMap[Mcp_Boot_Vlan_P1] = Mct_Preboot_Boot_Settings_P1;
+
+        _param2TypeMap[Mcp_Boot_Option_Rom_En_P2] = Mct_Preboot_Boot_Settings_P2;
+        _param2TypeMap[Mcp_Boot_Vlan_En_P2] = Mct_Preboot_Boot_Settings_P2;
+        _param2TypeMap[Mcp_Boot_Retry_Cnt_P2] = Mct_Preboot_Boot_Settings_P2;
+        _param2TypeMap[Mcp_Legacy_Boot_Protocol_P2] = Mct_Preboot_Boot_Settings_P2;
+        _param2TypeMap[Mcp_Boot_Vlan_P2] = Mct_Preboot_Boot_Settings_P2;
     }
 
 
@@ -406,29 +505,26 @@ void MlxCfgOps::setIgnoreHardLimits(bool val)
 int MlxCfgOps::invalidateCfgs4thGen()
 {
     struct tools_open_mnvia mnviaTlv;
-    u_int8_t buffer[tools_open_mnvia_size()];
+    u_int8_t buffer[TOOLS_OPEN_MNVIA_SIZE] = {0};
     memset(&mnviaTlv, 0, sizeof(struct tools_open_mnvia));
-    memset(buffer, 0, tools_open_mnvia_size());
     tools_open_mnvia_pack(&mnviaTlv, buffer);
     return reg_access_mnvia(_mf, REG_ACCESS_METHOD_SET, &mnviaTlv);
 }
 
 int MlxCfgOps::invalidateCfgs5thGen()
 {
-    struct tools_open_nvdia nvdiaTlv;
-    u_int8_t buffer[tools_open_nvdia_size()];
-    memset(&nvdiaTlv, 0, sizeof(struct tools_open_nvdia));
-    memset(buffer, 0, tools_open_nvdia_size());
-    tools_open_nvdia_pack(&nvdiaTlv, buffer);
-    return reg_access_nvdia(_mf, REG_ACCESS_METHOD_SET, &nvdiaTlv);
+    struct tools_open_nvia nviaTlv;
+    u_int8_t buffer[TOOLS_OPEN_NVIA_SIZE] = {0};
+    memset(&nviaTlv, 0, sizeof(struct tools_open_nvia));
+    tools_open_nvia_pack(&nviaTlv, buffer);
+    return reg_access_nvia(_mf, REG_ACCESS_METHOD_SET, &nviaTlv);
 }
 
 int MlxCfgOps::invalidateCfgs()
 {
     int rc;
     if (_isFifthGen) {
-        return errmsg(MCE_REG_NOT_SUPP, "Reset configuration not supported.");
-        //rc = invalidateCfgs5thGen();
+        rc = invalidateCfgs5thGen();
     } else {
         rc = invalidateCfgs4thGen();
     }
@@ -462,7 +558,7 @@ const char* MlxCfgOps::loadConfigurationGetStr()
     int rc;
     struct cibfw_register_mfrl mfrl;
     memset(&mfrl, 0, sizeof(mfrl));
-    if (_isFifthGen && _deviceId == DeviceConnectX4) {
+    if (_isFifthGen && (_deviceId == DeviceConnectX4 || _deviceId == DeviceConnectX4LX)) {
         // send warm boot (bit 6)
         mfrl.reset_level = 1 << 6;
         rc = reg_access_mfrl(_mf,REG_ACCESS_METHOD_SET, &mfrl);
@@ -476,27 +572,34 @@ const char* MlxCfgOps::loadConfigurationGetStr()
 
 mlxCfgType MlxCfgOps::cfgParam2Type(mlxCfgParam param)
 {
-    switch (param) {
-    case Mcp_Sriov_En :
-        return _isFifthGen ? Mct_Pci :Mct_Sriov;
-    case Mcp_Num_Of_Vfs :
-        return _isFifthGen ? Mct_Pci : Mct_Sriov;
-    case Mcp_Fpp_En:
-        return _isFifthGen ? Mct_Pci : Mct_Last;
-    case Mcp_Log_Tpt_Size :
-        return _isFifthGen ? Mct_Tpt : Mct_Last;
-    case Mcp_Wol_Magic_En_P1 :
-        return Mct_Wol_P1;
-    case Mcp_Wol_Magic_En_P2 :
-        return Mct_Wol_P2;
-    case Mcp_Link_Type_P1 :
-        return Mct_Vpi_P1;
-    case Mcp_Link_Type_P2 :
-        return Mct_Vpi_P2;
-    case Mcp_Log_Bar_Size :
-        return Mct_Bar_Size;
-    default :
-            return Mct_Last;
+    if (_param2TypeMap.find(param) == _param2TypeMap.end()) {
+        return Mct_Last;
     }
+    return _param2TypeMap[param];
 }
 
+int MlxCfgOps::setRawCfg(std::vector<u_int32_t> rawTlvVec)
+{
+    if (!_isFifthGen) {
+        return errmsg("Setting Raw Configuration is supported for 5th Generation devices only.");
+    }
+    RawCfgParams5thGen rawTlv;
+    if (rawTlv.setRawData(rawTlvVec)) {
+        return errmsg("%s", rawTlv.err());
+    }
+
+    if (rawTlv.setOnDev(_mf)) {
+        return errmsg("%s", rawTlv.err());
+    }
+    return MCE_SUCCESS;
+}
+
+int MlxCfgOps::dumpRawCfg(std::vector<u_int32_t> rawTlvVec, std::string& tlvDump)
+{
+    RawCfgParams5thGen rawTlv;
+    if (rawTlv.setRawData(rawTlvVec)) {
+        return errmsg("%s", rawTlv.err());
+    }
+    tlvDump = rawTlv.dumpTlv();
+    return MCE_SUCCESS;
+}
diff --git a/mlxconfig/mlxcfg_lib.h b/mlxconfig/mlxcfg_lib.h
index fcbbeb6..8722435 100644
--- a/mlxconfig/mlxcfg_lib.h
+++ b/mlxconfig/mlxcfg_lib.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,12 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-/*
- * mlxcfg_lib.h
  *
- *  Created on: Feb 17, 2014
- *      Author: adrianc
+ *  Version: $Id$
+ *
  */
 
 #ifndef MLXCFG_LIB_H_
@@ -67,6 +63,10 @@ public:
     int setCfg(mlxCfgParam cfgParam, u_int32_t val);
     int setCfg(const std::vector<cfgInfo>& infoVec);
 
+    int setRawCfg(std::vector<u_int32_t> rawTlvVec);
+
+    int dumpRawCfg(std::vector<u_int32_t> rawTlvVec, std::string& tlvDump);
+
     int invalidateCfgs();
 
     // Set/Un-Set ignore limits for all configurations
@@ -90,6 +90,7 @@ private:
 
     mlxCfgType cfgParam2Type(mlxCfgParam param);
     std::map<mlxCfgType, CfgParams*> _cfgList; // needs to be initialized in constructor and freed in destructor, will contain all the  tools supported cfgs
+    std::map<mlxCfgParam, mlxCfgType> _param2TypeMap;
     dm_dev_id_t _deviceId;
     mfile* _mf;
     u_int64_t _suppVec;
diff --git a/mlxconfig/mlxcfg_param_lib.cpp b/mlxconfig/mlxcfg_param_lib.cpp
index eeccc40..93d56e0 100644
--- a/mlxconfig/mlxcfg_param_lib.cpp
+++ b/mlxconfig/mlxcfg_param_lib.cpp
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,16 +27,15 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-/*
- * mlxcfg_param_lib.cpp
  *
- *  Created on: Mar 22, 2015
- *      Author: adrianc
+ *  Version: $Id$
+ *
  */
 
 #include <signal.h>
 #include <math.h>
+#include <sstream>
+#include <string>
 
 #include <mft_sig_handler.h>
 #include <reg_access/reg_access.h>
@@ -91,6 +89,112 @@ enum {
 #define CHECK_RC(rc)\
     if (rc) return rc;
 
+/*
+ * Macros for getting and settings a TLV
+ */
+// TODO: adrianc: add macro for nvqc tlv and use it in cfgSupported for 5th gen Tlvs
+
+/*
+ * Macros Below rely on the fact that the user has implemented within the parameter class:
+ * void updateClassAttrFromTlv(void*);
+ * void updateTLVFromClassAttr(void*);
+ *
+ * those method do what they imply: update the class internal memeber from TLV and via versa.
+ */
+
+#define SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tlvStructName, tlvNameStr) \
+        MError __mRc;\
+        if (!(ignoreCheck) && !checkCfg()) {\
+            return MCE_BAD_PARAMS;\
+        }\
+        int __tlvBuffSize = tlvStructName##_size();\
+        u_int8_t __tlvBuff[__tlvBuffSize];\
+        memset(__tlvBuff, 0, __tlvBuffSize);\
+        struct tlvStructName __tlvStruct;\
+        memset(&__tlvStruct, 0, sizeof(__tlvStruct));\
+        __mRc = mnvaCom5thGen(mf, __tlvBuff, __tlvBuffSize, getTlvTypeBe(), REG_ACCESS_METHOD_GET);\
+        if (__mRc && __mRc != ME_REG_ACCESS_RES_NOT_AVLBL) {\
+            return errmsg("failed to set %s settings: %s", tlvNameStr, m_err2str(__mRc));\
+        }\
+        tlvStructName##_unpack(&__tlvStruct, __tlvBuff);\
+        updateTlvFromClassAttr((void*)&__tlvStruct);\
+        tlvStructName##_pack(&__tlvStruct, __tlvBuff);\
+        __mRc = mnvaCom5thGen(mf, __tlvBuff, __tlvBuffSize, getTlvTypeBe(), REG_ACCESS_METHOD_SET);\
+        if (__mRc) {\
+            return errmsg("failed to set %s settings: %s", tlvNameStr, m_err2str(__mRc));\
+        }\
+        _updated = false;\
+        return MCE_SUCCESS
+
+#define GET_FROM_DEV_5TH_GEN(mf, tlvStructName, tlvNameStr) \
+        MError __mRc;\
+        int __tlvBuffSize = tlvStructName##_size();\
+        u_int8_t __tlvBuff[__tlvBuffSize];\
+        memset(__tlvBuff, 0, __tlvBuffSize);\
+        struct tlvStructName __tlvStruct;\
+        memset(&__tlvStruct, 0, sizeof(__tlvStruct));\
+        if (_updated) {\
+            return MCE_SUCCESS;\
+        }\
+        __mRc = mnvaCom5thGen(mf, &__tlvBuff[0], __tlvBuffSize, getTlvTypeBe(), REG_ACCESS_METHOD_GET);\
+        if (__mRc) {\
+            if (__mRc == ME_REG_ACCESS_RES_NOT_AVLBL) {\
+                return MCE_SUCCESS;\
+            }\
+            return errmsg("Failed to get %s settings: %s", tlvNameStr, m_err2str(__mRc));\
+        }\
+        tlvStructName##_unpack(&__tlvStruct, &__tlvBuff[0]);\
+        updateClassAttrFromTlv((void*)&__tlvStruct);\
+        _updated = true;\
+       return MCE_SUCCESS
+
+#define SET_ON_DEV_4TH_GEN(mf, ignoreCheck, tlvStructName, tlvNameStr, typeMod) \
+        MError __mRc;\
+        if (!(ignoreCheck) && !checkCfg()) {\
+            return MCE_BAD_PARAMS;\
+        }\
+        int __tlvBuffSize = tlvStructName##_size();\
+        u_int8_t __tlvBuff[__tlvBuffSize];\
+        memset(__tlvBuff, 0, __tlvBuffSize);\
+        struct tlvStructName __tlvStruct;\
+        memset(&__tlvStruct, 0, sizeof(__tlvStruct));\
+        __mRc = mnvaCom4thGen(mf, __tlvBuff, __tlvBuffSize, tlvTypeIdx, REG_ACCESS_METHOD_GET, typeMod);\
+        if (__mRc && __mRc != ME_REG_ACCESS_RES_NOT_AVLBL) {\
+            return errmsg("failed to set %s settings: %s", tlvNameStr, m_err2str(__mRc));\
+        }\
+        tlvStructName##_unpack(&__tlvStruct, __tlvBuff);\
+        updateTlvFromClassAttr((void*)&__tlvStruct);\
+        tlvStructName##_pack(&__tlvStruct, __tlvBuff);\
+        __mRc = mnvaCom4thGen(mf, __tlvBuff, __tlvBuffSize, tlvTypeIdx, REG_ACCESS_METHOD_SET, typeMod);\
+        if (__mRc) {\
+            return errmsg("failed to set %s settings: %s", tlvNameStr, m_err2str(__mRc));\
+        }\
+        _updated = false;\
+        return MCE_SUCCESS
+
+#define GET_FROM_DEV_4TH_GEN(mf, tlvStructName, tlvNameStr, typeMod) \
+        MError __mRc;\
+        int __tlvBuffSize = tlvStructName##_size();\
+        u_int8_t __tlvBuff[__tlvBuffSize];\
+        memset(__tlvBuff, 0, __tlvBuffSize);\
+        struct tlvStructName __tlvStruct;\
+        memset(&__tlvStruct, 0, sizeof(__tlvStruct));\
+        if (_updated) {\
+            return MCE_SUCCESS;\
+        }\
+        __mRc = mnvaCom4thGen(mf, &__tlvBuff[0], __tlvBuffSize, tlvTypeIdx, REG_ACCESS_METHOD_GET, typeMod);\
+        if (__mRc) {\
+            if (__mRc == ME_REG_ACCESS_RES_NOT_AVLBL) {\
+                return MCE_SUCCESS;\
+            }\
+            return errmsg("Failed to get %s settings: %s", tlvNameStr, m_err2str(__mRc));\
+        }\
+        tlvStructName##_unpack(&__tlvStruct, &__tlvBuff[0]);\
+        updateClassAttrFromTlv((void*)&__tlvStruct);\
+        _updated = true;\
+       return MCE_SUCCESS
+
+
 static void dealWithSignal()
 {
     int sig;
@@ -183,6 +287,56 @@ MError nvqcCom5thGen(mfile* mf, u_int32_t tlvType, bool& suppRead, bool& suppWri
  ***************************/
 
 /*
+ * RawCfgParams5thGen Class implementation
+ */
+
+int RawCfgParams5thGen::setRawData(const std::vector<u_int32_t>& tlvBuff) {
+    _tlvBuff = tlvBuff;
+    memset(&_nvdaTlv, 0, sizeof(struct tools_open_nvda));
+    std::vector<u_int32_t> tlvBuffBe = _tlvBuff;
+    for (std::vector<u_int32_t>::iterator it = tlvBuffBe.begin(); it != tlvBuffBe.end(); it++ ) {
+        *it = __cpu_to_be32(*it);
+    }
+    tools_open_nvda_unpack(&_nvdaTlv, ((u_int8_t*)(&tlvBuffBe[0])));
+    return verifyTlv();
+}
+
+int RawCfgParams5thGen::setOnDev(mfile* mf) {
+    int rc;
+    mft_signal_set_handling(1);
+    DEBUG_PRINT_SEND(&_nvdaTlv, nvda);
+    rc = reg_access_nvda(mf, REG_ACCESS_METHOD_SET, &_nvdaTlv);
+    DEBUG_PRINT_RECIEVE(&_nvdaTlv, nvda);
+    dealWithSignal();
+    if (rc) {
+        return errmsg("Failed to set raw TLV: %s", m_err2str((MError)rc));
+    }
+    return MCE_SUCCESS;
+}
+
+std::string RawCfgParams5thGen::dumpTlv() {
+    char str[1024] = {0};
+    snprintf(str, 1024, "Length: 0x%x\nVersion: %d\nOverrideEn: %d\nType: 0x%08x\nData: ", _nvdaTlv.nv_hdr.length,\
+            _nvdaTlv.nv_hdr.version, _nvdaTlv.nv_hdr.over_en, _nvdaTlv.nv_hdr.type.tlv_type_dw.tlv_type_dw);
+    for (size_t i=3; i < _tlvBuff.size(); i++) {
+        char numStr[64] = {0};
+        snprintf(numStr, 64, "0x%08x ", _tlvBuff[i]);
+        strcat(str, numStr);
+    }
+    strcat(str, "\n");
+    return str;
+}
+
+int RawCfgParams5thGen::verifyTlv() {
+    // check TLV length
+    int tlvLength = (_tlvBuff.size() - 3) << 2;
+    if (tlvLength != _nvdaTlv.nv_hdr.length) {
+        return errmsg(MCE_BAD_PARAM_VAL, "TLV size mismatch. reported length in TLV header: 0x%x. actual length: 0x%x", _nvdaTlv.nv_hdr.length, tlvLength);
+    }
+    return MCE_SUCCESS;
+}
+
+/*
  * CfgParams Class implementation :
  */
 
@@ -289,7 +443,7 @@ bool SriovParams::hardLimitCheck()
     }
 
     if (_sriovEn != 0 && _sriovEn != 1) {
-        errmsg("illegal SRIOV_EN parameters value. (should be 0 or 1)");
+        errmsg("illegal SRIOV_EN parameter value. (should be 0 or 1)");
         return false;
     }
     return true;
@@ -435,82 +589,39 @@ bool SriovParams4thGen::softLimitCheck(mfile* mf)
     return true;
 }
 
+
 /*
- * SriovParams5thGen Class implementation
+ * WolParams Class implementation :
  */
 
-bool SriovParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+bool WolParams::hardLimitCheck()
 {
-    (void)mf;
-    (void)param;
+    if (_wolMagicEn == 0 || _wolMagicEn == 1 ) {
+        return true;
+    }
+    errmsg("illegal WOL parameter value. can be either 0 or 1.");
     return false;
 }
 
-int SriovParams5thGen::getDefaultParams(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-int SriovParams5thGen::getFromDev(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-int SriovParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
-{
-    (void)mf;
-    (void)ignoreCheck;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-int SriovParams5thGen::updateMaxVfs(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-bool SriovParams5thGen::softLimitCheck(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
 /*
- * WolParams Class implementation :
+ * WolParams4thGen Class implementation :
  */
 
-void WolParams::setParam(mlxCfgParam paramType, u_int32_t val)
+void WolParams4thGen::setParam(mlxCfgParam paramType, u_int32_t val)
 {
-    if ((paramType == Mcp_Wol_Magic_En_P1 && _port == 1 ) || (paramType == Mcp_Wol_Magic_En_P2 && _port == 2) ) {
+    if ((paramType == Mcp_Wol_Magic_En_P1  && _port == 1) || (paramType == Mcp_Wol_Magic_En_P2 && _port == 2) ) {
         _wolMagicEn = val;
     }
 }
 
-u_int32_t WolParams::getParam(mlxCfgParam paramType)
+u_int32_t WolParams4thGen::getParam(mlxCfgParam paramType)
 {
-    if ((paramType == Mcp_Wol_Magic_En_P1 && _port == 1 ) || (paramType == Mcp_Wol_Magic_En_P2 && _port == 2) ) {
+    if ((paramType == Mcp_Wol_Magic_En_P1  && _port == 1) || (paramType == Mcp_Wol_Magic_En_P2 && _port == 2)) {
         return _wolMagicEn;
     }
     return MLXCFG_UNKNOWN;
 }
 
-
-
-bool WolParams::hardLimitCheck()
-{
-    if (_wolMagicEn == 0 || _wolMagicEn == 1 ) {
-        return true;
-    }
-    errmsg("illegal WOL parameter value. can be either 0 or 1.");
-    return false;
-}
-
-/*
- * WolParams4thGen Class implementation :
- */
-
 bool WolParams4thGen::cfgSupported(mfile* mf, mlxCfgParam param)
 {
     (void)mf;
@@ -523,7 +634,7 @@ int WolParams4thGen::getDefaultParams(mfile* mf)
     struct tools_open_query_def_params_per_port port_params;
     int rc = getDefaultParams4thGen(mf, _port , &port_params);
     if (rc == MCE_SUCCESS) {
-        _wolMagicEn = port_params.en_wol_magic;
+        _wolMagicEn = port_params.default_en_wol_magic;
     } else {
         rc = MCE_GET_DEFAULT_PARAMS;
     }
@@ -593,32 +704,76 @@ int WolParams4thGen::setOnDev(mfile* mf, bool ignoreCheck)
  * WolParams5thGen Class implementation :
  */
 
+void WolParams5thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if (paramType == Mcp_Wol_Magic_En ) {
+        _wolMagicEn = val;
+    }
+}
+
+u_int32_t WolParams5thGen::getParam(mlxCfgParam paramType)
+{
+    if (paramType == Mcp_Wol_Magic_En) {
+        return _wolMagicEn;
+    }
+    return MLXCFG_UNKNOWN;
+}
+
 bool WolParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
 {
-    (void)mf;
+    MError rc;
     (void)param;
-    return false;
+    bool suppRead, suppWrite;
+    rc = nvqcCom5thGen(mf, getTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get Wake On LAN parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    return (suppRead && suppWrite);
 }
 
 int WolParams5thGen::getDefaultParams(mfile* mf)
 {
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
+    return getFromDev(mf);
 }
 
 int WolParams5thGen::getFromDev(mfile* mf)
 {
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
+    GET_FROM_DEV_5TH_GEN(mf, tools_open_wol, "Wake On LAN");
 }
 
 int WolParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
 {
-    (void)mf;
-    (void)ignoreCheck;
-    return MCE_NOT_IMPLEMENTED;
+    SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tools_open_wol, "Wake On LAN");
+}
+
+u_int32_t WolParams5thGen::getTlvTypeBe()
+{
+    struct tools_open_per_host_type type;
+    u_int32_t tlvType = 0;
+
+    type.param_class = CLASS_PER_HOST;
+    type.param_idx = tlvTypeIdx;
+    type.function = 0; // currently support only host 0 (FW should fill this field with correct func)
+    type.host = 0; // currently support only host 0 (FW should fill this field with correct host)
+    tools_open_per_host_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+void WolParams5thGen::updateTlvFromClassAttr(void* tlv)
+{
+    struct tools_open_wol* wolTlv = (struct tools_open_wol*)tlv;
+    wolTlv->en_wol_magic = _wolMagicEn;
+    return;
+}
+void WolParams5thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_wol* wolTlv = (struct tools_open_wol*)tlv;
+    _wolMagicEn = wolTlv->en_wol_magic;
+    return;
 }
 
+
 /*
  * BarSzParams Class implementation :
  */
@@ -626,7 +781,7 @@ int WolParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
 
 void BarSzParams::setParam(mlxCfgParam paramType, u_int32_t val)
 {
-    if ((paramType == Mcp_Log_Bar_Size) ) {
+    if (paramType == Mcp_Log_Bar_Size) {
         _logBarSz = val;
     }
 }
@@ -793,46 +948,6 @@ bool BarSzParams4thGen::softLimitCheck(mfile* mf)
     return true;
 }
 
-/*
- * BarSzParams5thGen Class implementation :
- */
-bool BarSzParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
-{
-    (void)mf;
-    (void)param;
-    return false;
-}
-
-int BarSzParams5thGen::getDefaultParams(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-int BarSzParams5thGen::getDefaultBarSz(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-int BarSzParams5thGen::getFromDev(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-int BarSzParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
-{
-    (void)mf;
-    (void)ignoreCheck;
-    return MCE_NOT_IMPLEMENTED;
-}
-
-bool BarSzParams5thGen::softLimitCheck(mfile* mf)
-{
-    (void)mf;
-    return MCE_NOT_IMPLEMENTED;
-}
 
 /*
  *  VpiParams Class implementation :
@@ -926,8 +1041,8 @@ int VpiParams4thGen::getDefaultParams(mfile* mf)
     if (rc) {
         return MCE_GET_DEFAULT_PARAMS;
     }
-    if (port_params.network_link_type) {
-        _linkType = port_params.network_link_type;
+    if (port_params.default_network_link_type) {
+        _linkType = port_params.default_network_link_type;
     }
     return MCE_SUCCESS;
 }
@@ -1264,14 +1379,14 @@ bool PciParams5thGen::hardLimitCheck()
         }
 
         if (_sriovEn != 0 && _sriovEn != 1) {
-            errmsg("Illegal SRIOV_EN parameters value. (should be 0 or 1)");
+            errmsg("Illegal SRIOV_EN parameter value. (should be 0 or 1)");
             return false;
         }
     }
 
     if (_fppSupported && _userSpecifiedFPP) {
         if (_fppEn != 0 && _fppEn != 1) {
-            errmsg("Illegal FPP_EN parameters value. (should be 0 or 1)");
+            errmsg("Illegal FPP_EN parameter value. (should be 0 or 1)");
             return false;
         }
     }
@@ -1380,7 +1495,7 @@ int TptParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
     mRc = mnvaCom5thGen(mf, tlvBuff, TOOLS_OPEN_TPT_CONFIGURATION_SIZE, getTptSettingsTlvTypeBe(), REG_ACCESS_METHOD_SET);
 
     if (mRc) {
-        return errmsg("failed to set PCI settings: %s", m_err2str(mRc));
+        return errmsg("failed to set TPT settings: %s", m_err2str(mRc));
     }
     _updated = false;
 
@@ -1433,7 +1548,1079 @@ u_int32_t TptParams5thGen::getTptCapabilitiesTlvTypeBe()
 bool TptParams5thGen::hardLimitCheck()
 {
     if (_logMaxPayloadSize != 0 && _logMaxPayloadSize != 12) {
-        errmsg("Illegal LOG_MAX_TPT_PAYLOAD_SIZE parameters value. (should be 0(auto) or 12(4KB))");
+        errmsg("Illegal LOG_MAX_TPT_PAYLOAD_SIZE parameter value. (should be 0(auto) or 12(4KB))");
+        return false;
+    }
+    return true;
+}
+
+/*
+ * InfinibandBootSettingsParams4thGen Class implementation:
+ */
+
+bool InfinibandBootSettingsParams4thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    (void)param;
+    struct tools_open_query_def_params_per_port portParams;
+    int rc;
+    rc = getDefaultParams4thGen(mf, _port, &portParams);
+    if (rc) {
+        return false;
+    }
+    return portParams.nv_config_infiniband_boot_settings;
+}
+
+void InfinibandBootSettingsParams4thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if ((paramType == Mcp_Boot_Pkey_P1 && _port == 1) || (paramType == Mcp_Boot_Pkey_P2 && _port == 2)) {
+        _bootPkey = val;
+    }
+}
+
+u_int32_t InfinibandBootSettingsParams4thGen::getParam(mlxCfgParam paramType)
+{
+    if ((paramType == Mcp_Boot_Pkey_P1 && _port == 1) || (paramType == Mcp_Boot_Pkey_P2 && _port == 2)) {
+        return _bootPkey;
+    }
+    return MLXCFG_UNKNOWN;
+}
+
+int InfinibandBootSettingsParams4thGen::getFromDev(mfile* mf)
+{
+    MError mRc;
+    u_int8_t tlvBuff[TOOLS_OPEN_INFINIBAND_BOOT_SETTINGS_SIZE] = {0};
+    struct tools_open_infiniband_boot_settings bootSettingsTlv;
+    memset(&bootSettingsTlv, 0, sizeof(bootSettingsTlv));
+
+    if (_updated) {
+        return MCE_SUCCESS;
+    }
+
+    mRc = mnvaCom4thGen(mf, &tlvBuff[0], TOOLS_OPEN_INFINIBAND_BOOT_SETTINGS_SIZE, tlvTypeIdx, REG_ACCESS_METHOD_GET, _port);
+
+    if (mRc) {
+        if (mRc == ME_REG_ACCESS_RES_NOT_AVLBL) {
+            return MCE_SUCCESS;
+        }
+        return errmsg("Failed to get Infiniband Boot Settings: %s", m_err2str(mRc));
+    }
+    // unpack and update
+    tools_open_infiniband_boot_settings_unpack(&bootSettingsTlv, &tlvBuff[0]);
+    _bootPkey = bootSettingsTlv.boot_pkey;
+    _updated = true;
+
+   return MCE_SUCCESS;
+}
+int InfinibandBootSettingsParams4thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    MError mRc;
+
+    if (!ignoreCheck && !checkCfg()) {
+        return MCE_BAD_PARAMS;
+    }
+    // get Tlv modify it and set it
+    u_int8_t tlvBuff[TOOLS_OPEN_INFINIBAND_BOOT_SETTINGS_SIZE] = {0};
+    struct tools_open_infiniband_boot_settings bootSettingsTlv;
+    memset(&bootSettingsTlv, 0, sizeof(bootSettingsTlv));
+
+    bootSettingsTlv.boot_pkey = _bootPkey;
+
+    // pack it
+    tools_open_infiniband_boot_settings_pack(&bootSettingsTlv, tlvBuff);
+
+    mRc = mnvaCom4thGen(mf, tlvBuff, TOOLS_OPEN_TPT_CONFIGURATION_SIZE, tlvTypeIdx, REG_ACCESS_METHOD_SET, _port);
+
+    if (mRc) {
+        return errmsg("failed to set Infiniband Boot Settings: %s", m_err2str(mRc));
+    }
+    _updated = false;
+
+    return MCE_SUCCESS;
+}
+
+int InfinibandBootSettingsParams4thGen::getDefaultParams(mfile* mf)
+{
+    struct tools_open_query_def_params_per_port portParams;
+    int rc;
+    rc = getDefaultParams4thGen(mf, _port, &portParams);
+    if (rc == MCE_SUCCESS) {
+        _bootPkey = portParams.default_boot_pkey;
+    } else {
+        rc = MCE_GET_DEFAULT_PARAMS;
+    }
+    return rc;
+}
+
+bool InfinibandBootSettingsParams4thGen::hardLimitCheck()
+{
+    if (_bootPkey >= (1 << 16)) {
+        errmsg("Illegal BOOT_PKEY_P%d parameter value, valid values: [0..65535]", ((_port == 1) ? 1 : 2));
+        return false;
+    }
+    return true;
+}
+
+/*
+ * IBDCParams5thGen Class implementation:
+ */
+
+bool IBDCParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    MError rc;
+    (void)param;
+    bool suppRead, suppWrite;
+    rc = nvqcCom5thGen(mf, getDcCapabilitiesTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get Infiniband DC capabilities parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    if (!suppRead) {
+        return false;
+    }
+
+    rc = nvqcCom5thGen(mf, getTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get Infiniband DC Settings parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    if (!(suppRead && suppWrite)) {
+        return false;
+    }
+    return true;
+}
+
+void IBDCParams5thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if (paramType == Mcp_Log_Dcr_Hash_Table_Size) {
+        _logDcrHashTableSize = val;
+    }
+    if (paramType == Mcp_Dcr_Lifo_Size) {
+        _dcrLifoSize = val;
+    }
+}
+
+u_int32_t IBDCParams5thGen::getParam(mlxCfgParam paramType)
+{
+    if (paramType == Mcp_Log_Dcr_Hash_Table_Size) {
+        return _logDcrHashTableSize;
+    }
+    if (paramType == Mcp_Dcr_Lifo_Size) {
+        return _dcrLifoSize;
+    }
+
+    return MLXCFG_UNKNOWN;
+}
+
+int IBDCParams5thGen::getFromDev(mfile* mf)
+{
+    GET_FROM_DEV_5TH_GEN(mf, tools_open_infiniband_dc_settings, "IB Dynamically Connected");
+}
+
+int IBDCParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tools_open_infiniband_dc_settings, "IB Dynamically Connected");
+}
+
+int IBDCParams5thGen::getDefaultParams(mfile* mf)
+{
+    return getDefaultsAndCapabilities(mf);
+}
+
+int IBDCParams5thGen::getDefaultsAndCapabilities(mfile* mf)
+{
+    MError rc;
+    u_int8_t tlvBuff[TOOLS_OPEN_INFINIBAND_DC_CAPABILITIES_SIZE] = {0};
+    struct tools_open_infiniband_dc_capabilities dcCapabilitesTlv;
+    memset(&dcCapabilitesTlv, 0, sizeof(dcCapabilitesTlv));
+    rc = mnvaCom5thGen(mf, &tlvBuff[0], TOOLS_OPEN_INFINIBAND_DC_CAPABILITIES_SIZE, getDcCapabilitiesTlvTypeBe(), REG_ACCESS_METHOD_GET);
+    if (rc) {
+        return errmsg("Failed to get Infiniband DC capabilities parameter. %s", m_err2str(rc));
+    }
+    tools_open_infiniband_dc_capabilities_unpack(&dcCapabilitesTlv, tlvBuff);
+    _minLogDcrHashTableSize = dcCapabilitesTlv.min_log_dcr_hash_table_size;
+    _maxLogDcrHashTableSize = dcCapabilitesTlv.max_log_dcr_hash_table_size;
+    _minDcrLifoSize = dcCapabilitesTlv.min_dcr_lifo_size;
+    _maxDcrLifoSize = dcCapabilitesTlv.max_dcr_lifo_size;
+    return MCE_SUCCESS;
+}
+
+u_int32_t IBDCParams5thGen::getTlvTypeBe()
+{
+    struct tools_open_global_type type;
+    u_int32_t tlvType = 0;
+
+    type.param_class = CLASS_GLOBAL;
+    type.param_idx = tlvTypeIdx;
+    tools_open_global_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+u_int32_t IBDCParams5thGen::getDcCapabilitiesTlvTypeBe()
+{
+    struct tools_open_global_type type;
+    u_int32_t tlvType = 0;
+
+    type.param_class = CLASS_GLOBAL;
+    type.param_idx = INFINIBAND_DC_CAPABILITIES_TYPE;
+    tools_open_global_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+bool IBDCParams5thGen::hardLimitCheck()
+{
+    if (_logDcrHashTableSize < _minLogDcrHashTableSize || _logDcrHashTableSize > _maxLogDcrHashTableSize) {
+        errmsg("Illegal LOG_DCR_HASH_TABLE_SIZE parameter value. (should be within the range [%d..%d])", _minLogDcrHashTableSize, _maxLogDcrHashTableSize);
+        return false;
+    }
+    if (_dcrLifoSize < _minDcrLifoSize || _dcrLifoSize > _maxDcrLifoSize) {
+        errmsg("Illegal DCR_LIFO_SIZE parameter value. (should be within the range [%d..%d])", _minDcrLifoSize, _maxDcrLifoSize);
+        return false;
+    }
+    return true;
+}
+
+void IBDCParams5thGen::updateTlvFromClassAttr(void* tlv)
+{
+    struct tools_open_infiniband_dc_settings* ibDcTlv = (struct tools_open_infiniband_dc_settings*)tlv;
+    ibDcTlv->dcr_lifo_size = _dcrLifoSize;
+    ibDcTlv->log_dcr_hash_table_size = _logDcrHashTableSize;
+    return;
+}
+
+void IBDCParams5thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_infiniband_dc_settings* ibDcTlv = (struct tools_open_infiniband_dc_settings*)tlv;
+    _dcrLifoSize = ibDcTlv->dcr_lifo_size;
+    _logDcrHashTableSize = ibDcTlv->log_dcr_hash_table_size;
+    return;
+}
+
+/*
+ * PortBootStateParams5thGen Class implementation
+ */
+
+bool PortBootStateParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    MError rc;
+    (void)param;
+    bool suppRead, suppWrite;
+    rc = nvqcCom5thGen(mf, getTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get port boot state parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    if (!suppRead || !suppWrite) {
+        return false;
+    }
+    return true;
+}
+
+void PortBootStateParams5thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if ((paramType == Mcp_Boot_State_P1 && _port == 1) || (paramType == Mcp_Boot_State_P2 && _port == 2)) {
+        _portBootState = val;
+    }
+    return;
+}
+
+u_int32_t PortBootStateParams5thGen::getParam(mlxCfgParam paramType)
+{
+    if ((paramType == Mcp_Boot_State_P1 && _port == 1) || (paramType == Mcp_Boot_State_P2 && _port == 2)) {
+        return _portBootState;
+    }
+    return MLXCFG_UNKNOWN;
+}
+
+int PortBootStateParams5thGen::getFromDev(mfile* mf)
+{
+    GET_FROM_DEV_5TH_GEN(mf, tools_open_port_boot_state, "Port Boot State");
+}
+
+int PortBootStateParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tools_open_port_boot_state, "Port Boot State");
+}
+
+int PortBootStateParams5thGen::getDefaultParams(mfile* mf)
+{
+        return getFromDev(mf);
+}
+
+bool PortBootStateParams5thGen::hardLimitCheck()
+{
+    if (_portBootState > 3) {
+        errmsg("Illegal BOOT_STATE_P%d parameter value (0=Normal Operation, 1=SFP power off, 2=SERDES power off, 3=Admin linkdown)", _port);
+        return false;
+    }
+    return true;
+}
+
+u_int32_t PortBootStateParams5thGen::getTlvTypeBe()
+{
+    struct tools_open_per_port_type type;
+    u_int32_t tlvType = 0;
+
+    type.param_class = CLASS_PHYS_PORT;
+    type.param_idx = tlvTypeIdx;
+    type.port = _port;
+    tools_open_per_port_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+void PortBootStateParams5thGen::updateTlvFromClassAttr(void* tlv)
+{
+    struct tools_open_port_boot_state* portBootStateTlv = (struct tools_open_port_boot_state*)tlv;
+    portBootStateTlv->port_boot_state = _portBootState;
+    return;
+}
+
+void PortBootStateParams5thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_port_boot_state* portBootStateTlv = (struct tools_open_port_boot_state*)tlv;
+    _portBootState = portBootStateTlv->port_boot_state;
+    return;
+}
+
+/*
+ * RoCENextProtocolParams5thGen Class implementation
+ */
+
+
+bool RoCENextProtocolParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    MError rc;
+    (void)param;
+    bool suppRead, suppWrite;
+    rc = nvqcCom5thGen(mf, getTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get RoCE next protocol parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    if (!suppRead || !suppWrite) {
+        return false;
+    }
+    return true;
+}
+
+void RoCENextProtocolParams5thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if ( paramType == Mcp_RoCE_Next_Protocol) {
+        _nextProtocol = val;
+    }
+    return;
+}
+
+u_int32_t RoCENextProtocolParams5thGen::getParam(mlxCfgParam paramType)
+{
+    if ( paramType == Mcp_RoCE_Next_Protocol) {
+        return _nextProtocol;
+    }
+    return MLXCFG_UNKNOWN;
+}
+
+int RoCENextProtocolParams5thGen::getFromDev(mfile* mf)
+{
+   GET_FROM_DEV_5TH_GEN(mf, tools_open_roce_v_1_5_next_protocol, "RoCE Next Protocol");
+}
+
+int RoCENextProtocolParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tools_open_roce_v_1_5_next_protocol, "RoCE Next Protocol");
+}
+
+int RoCENextProtocolParams5thGen::getDefaultParams(mfile* mf)
+{
+        return getFromDev(mf);
+}
+
+bool RoCENextProtocolParams5thGen::hardLimitCheck()
+{
+    if (_nextProtocol > 255) {
+        errmsg("Illegal ROCE_NEXT_PROTOCOL parameter value(0x%x), value should be in range [0..0xff]", _nextProtocol);
+        return false;
+    }
+    return true;
+}
+
+u_int32_t RoCENextProtocolParams5thGen::getTlvTypeBe()
+{
+    struct tools_open_global_type type;
+    u_int32_t tlvType = 0;
+
+    type.param_class = CLASS_GLOBAL;
+    type.param_idx = tlvTypeIdx;
+    tools_open_global_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+void RoCENextProtocolParams5thGen::updateTlvFromClassAttr(void* tlv)
+{
+    struct tools_open_roce_v_1_5_next_protocol* roceNpTlv = (struct tools_open_roce_v_1_5_next_protocol*)tlv;
+    roceNpTlv->roce_over_ip_next_protocol = _nextProtocol;
+    return;
+}
+
+void RoCENextProtocolParams5thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_roce_v_1_5_next_protocol* roceNpTlv = (struct tools_open_roce_v_1_5_next_protocol*)tlv;
+    _nextProtocol = roceNpTlv->roce_over_ip_next_protocol;
+    return;
+}
+
+/*
+ * RoCECCParams5thGen Class implementation
+ */
+
+
+bool RoCECCParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    MError rc;
+    (void)param;
+    bool suppRead, suppWrite;
+    rc = nvqcCom5thGen(mf, getTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get RoCE CC parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    if (!suppRead || !suppWrite) {
+        return false;
+    }
+    return true;
+}
+
+void RoCECCParams5thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if ( (paramType == Mcp_RoCE_CC_Algorithm_P1 && _port == 1) || (paramType == Mcp_RoCE_CC_Algorithm_P2 && _port == 2)) {
+        _roceCcAlgorithm = val;
+    }
+    if ( (paramType == Mcp_RoCE_CC_Prio_Mask_P1 && _port == 1) || (paramType == Mcp_RoCE_CC_Prio_Mask_P2 && _port == 2)) {
+        _roceCcPrioMask = val;
+    }
+    return;
+}
+
+u_int32_t RoCECCParams5thGen::getParam(mlxCfgParam paramType)
+{
+    if ( (paramType == Mcp_RoCE_CC_Algorithm_P1 && _port == 1) || (paramType == Mcp_RoCE_CC_Algorithm_P2 && _port == 2)) {
+        return _roceCcAlgorithm;
+    }
+    if ( (paramType == Mcp_RoCE_CC_Prio_Mask_P1 && _port == 1) || (paramType == Mcp_RoCE_CC_Prio_Mask_P2 && _port == 2)) {
+        return _roceCcPrioMask;
+    }
+    return MLXCFG_UNKNOWN;
+}
+
+int RoCECCParams5thGen::getFromDev(mfile* mf)
+{
+    GET_FROM_DEV_5TH_GEN(mf, tools_open_roce_cc, "RoCE CC");
+}
+
+int RoCECCParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tools_open_roce_cc, "RoCE CC");
+}
+int RoCECCParams5thGen::getDefaultParams(mfile* mf)
+{
+        return getFromDev(mf);
+}
+
+bool RoCECCParams5thGen::hardLimitCheck()
+{
+    if (_roceCcAlgorithm > 1) {
+        errmsg("Illegal ROCE_CC_ALGORITHM_P%d parameter value(%d), value should be 0 for ECN or 1 for QCN", _port, _roceCcAlgorithm);
+        return false;
+    }
+    if (_roceCcPrioMask > 255) {
+        errmsg("Illegal ROCE_CC_PRIO_MASK_P%d parameter value(%#x), value should be within the range [0..0xff]", _port, _roceCcPrioMask);
+        return false;
+    }
+    return true;
+}
+
+u_int32_t RoCECCParams5thGen::getTlvTypeBe()
+{
+    struct tools_open_per_port_type type;
+    u_int32_t tlvType = 0;
+    type.param_class = CLASS_PHYS_PORT;
+    type.param_idx = tlvTypeIdx;
+    type.port = _port;
+    tools_open_per_port_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+void RoCECCParams5thGen::updateTlvFromClassAttr(void* tlv)
+{
+    struct tools_open_roce_cc* roceCcTlv = (struct tools_open_roce_cc*)tlv;
+    roceCcTlv->roce_cc_algorithm = _roceCcAlgorithm;
+    roceCcTlv->roce_cc_enable_priority = _roceCcPrioMask;
+    return;
+}
+
+void RoCECCParams5thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_roce_cc* roceCcTlv = (struct tools_open_roce_cc*)tlv;
+    _roceCcAlgorithm = roceCcTlv->roce_cc_algorithm;
+    _roceCcPrioMask = roceCcTlv->roce_cc_enable_priority;
+    return;
+}
+
+/*
+ * RoCECCEcnParams5thGen Class implementation
+ */
+
+
+bool RoCECCEcnParams5thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    MError rc;
+    (void)param;
+    bool suppRead, suppWrite;
+    rc = nvqcCom5thGen(mf, getTlvTypeBe(), suppRead, suppWrite);
+    if (rc) {
+        errmsg("Failed to get RoCE CC ECN parameter capabilities. %s", m_err2str(rc));
+        return false;
+    }
+    if (!suppRead || !suppWrite) {
+        return false;
+    }
+    return true;
+}
+
+void RoCECCEcnParams5thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    // TODO: adrianc move to MAP on large scale TLVs std::map<mlxCfgParam, u_int32_t> for easier access, init in constructor according to port
+    if (_port == 1) {
+        switch (paramType) {
+        case Mcp_Clamp_Tgt_Rate_P1:
+            _clampTgtRate = val;
+            break;
+        case Mcp_Clamp_Tgt_Rate_After_Time_Inc_P1:
+            _clampTgtRateAfterTimeInc = val;
+            break;
+        case Mcp_Rpg_Time_Reset_P1:
+            _rpgTimeReset = val;
+            break;
+        case Mcp_Rpg_Byte_Reset_P1:
+            _rpgByteReset = val;
+            break;
+        case Mcp_Rpg_Threshold_P1:
+            _rpgThreshold = val;
+            break;
+        case Mcp_Rpg_Max_Rate_P1:
+            _rpgMaxRate = val;
+            break;
+        case Mcp_Rpg_Ai_Rate_P1:
+            _rpgAiRate = val;
+            break;
+        case Mcp_Rpg_Hai_Rate_P1:
+            _rpgHaiRate = val;
+            break;
+        case Mcp_Rpg_Gd_P1:
+            _rpgGd = val;
+            break;
+        case Mcp_Rpg_Min_Dec_Fac_P1:
+            _rpgMinDecFac = val;
+            break;
+        case Mcp_Rpg_Min_Rate_P1:
+            _rpgMinRate = val;
+            break;
+        case Mcp_Rate_To_Set_On_First_Cnp_P1:
+            _rateToSetOnFirstCnp = val;
+            break;
+        case Mcp_Dce_Tcp_G_P1:
+            _dceTcpG = val;
+            break;
+        case Mcp_Dce_Tcp_Rtt_P1:
+            _dceTcpRtt = val;
+            break;
+        case Mcp_Rate_Reduce_Monitor_Period_P1:
+            _rateReduceMonitorPeriod = val;
+            break;
+        case Mcp_Initial_Alpha_Value_P1:
+            _initialAlphaValue = val;
+            break;
+        case Mcp_Min_Time_Between_Cnps_P1:
+            _minTimeBetweenCnps = val;
+            break;
+        case Mcp_Cnp_Dscp_P1:
+            _cnpDscp = val;
+            break;
+        case Mcp_Cnp_802p_Prio_P1:
+            _cnp802pPrio = val;
+            break;
+        default:
+            break;
+        }
+    } else if (_port == 2) {
+        switch (paramType) {
+        case Mcp_Clamp_Tgt_Rate_P2:
+            _clampTgtRate = val;
+            break;
+        case Mcp_Clamp_Tgt_Rate_After_Time_Inc_P2:
+            _clampTgtRateAfterTimeInc = val;
+            break;
+        case Mcp_Rpg_Time_Reset_P2:
+            _rpgTimeReset = val;
+            break;
+        case Mcp_Rpg_Byte_Reset_P2:
+            _rpgByteReset = val;
+            break;
+        case Mcp_Rpg_Threshold_P2:
+            _rpgThreshold = val;
+            break;
+        case Mcp_Rpg_Max_Rate_P2:
+            _rpgMaxRate = val;
+            break;
+        case Mcp_Rpg_Ai_Rate_P2:
+            _rpgAiRate = val;
+            break;
+        case Mcp_Rpg_Hai_Rate_P2:
+            _rpgHaiRate = val;
+            break;
+        case Mcp_Rpg_Gd_P2:
+            _rpgGd = val;
+            break;
+        case Mcp_Rpg_Min_Dec_Fac_P2:
+            _rpgMinDecFac = val;
+            break;
+        case Mcp_Rpg_Min_Rate_P2:
+            _rpgMinRate = val;
+            break;
+        case Mcp_Rate_To_Set_On_First_Cnp_P2:
+            _rateToSetOnFirstCnp = val;
+            break;
+        case Mcp_Dce_Tcp_G_P2:
+            _dceTcpG = val;
+            break;
+        case Mcp_Dce_Tcp_Rtt_P2:
+            _dceTcpRtt = val;
+            break;
+        case Mcp_Rate_Reduce_Monitor_Period_P2:
+            _rateReduceMonitorPeriod = val;
+            break;
+        case Mcp_Initial_Alpha_Value_P2:
+            _initialAlphaValue = val;
+            break;
+        case Mcp_Min_Time_Between_Cnps_P2:
+            _minTimeBetweenCnps = val;
+            break;
+        case Mcp_Cnp_Dscp_P2:
+            _cnpDscp = val;
+            break;
+        case Mcp_Cnp_802p_Prio_P2:
+            _cnp802pPrio = val;
+            break;
+        default:
+            break;
+        }
+    }
+    return;
+}
+
+u_int32_t RoCECCEcnParams5thGen::getParam(mlxCfgParam paramType)
+{
+    // adrianc: consider moving to MAP on large scale TLVs
+    if (_port == 1) {
+        switch (paramType) {
+        case Mcp_Clamp_Tgt_Rate_P1:
+            return _clampTgtRate;
+        case Mcp_Clamp_Tgt_Rate_After_Time_Inc_P1:
+            return _clampTgtRateAfterTimeInc;
+        case Mcp_Rpg_Time_Reset_P1:
+            return _rpgTimeReset;
+        case Mcp_Rpg_Byte_Reset_P1:
+            return _rpgByteReset;
+        case Mcp_Rpg_Threshold_P1:
+            return _rpgThreshold;
+        case Mcp_Rpg_Max_Rate_P1:
+            return _rpgMaxRate;
+        case Mcp_Rpg_Ai_Rate_P1:
+            return _rpgAiRate;
+        case Mcp_Rpg_Hai_Rate_P1:
+            return _rpgHaiRate;
+        case Mcp_Rpg_Gd_P1:
+            return _rpgGd;
+        case Mcp_Rpg_Min_Dec_Fac_P1:
+            return _rpgMinDecFac;
+        case Mcp_Rpg_Min_Rate_P1:
+            return _rpgMinRate;
+        case Mcp_Rate_To_Set_On_First_Cnp_P1:
+            return _rateToSetOnFirstCnp;
+        case Mcp_Dce_Tcp_G_P1:
+            return _dceTcpG;
+        case Mcp_Dce_Tcp_Rtt_P1:
+            return _dceTcpRtt;
+        case Mcp_Rate_Reduce_Monitor_Period_P1:
+            return _rateReduceMonitorPeriod;
+        case Mcp_Initial_Alpha_Value_P1:
+            return _initialAlphaValue;
+        case Mcp_Min_Time_Between_Cnps_P1:
+            return _minTimeBetweenCnps;
+        case Mcp_Cnp_Dscp_P1:
+            return _cnpDscp;
+        case Mcp_Cnp_802p_Prio_P1:
+            return _cnp802pPrio;
+        default:
+            break;
+        }
+    } else if (_port == 2) {
+        switch (paramType) {
+        case Mcp_Clamp_Tgt_Rate_P2:
+            return _clampTgtRate;
+        case Mcp_Clamp_Tgt_Rate_After_Time_Inc_P2:
+            return _clampTgtRateAfterTimeInc;
+        case Mcp_Rpg_Time_Reset_P2:
+            return _rpgTimeReset;
+        case Mcp_Rpg_Byte_Reset_P2:
+            return _rpgByteReset;
+        case Mcp_Rpg_Threshold_P2:
+            return _rpgThreshold;
+        case Mcp_Rpg_Max_Rate_P2:
+            return _rpgMaxRate;
+        case Mcp_Rpg_Ai_Rate_P2:
+            return _rpgAiRate;
+        case Mcp_Rpg_Hai_Rate_P2:
+            return _rpgHaiRate;
+        case Mcp_Rpg_Gd_P2:
+            return _rpgGd;
+        case Mcp_Rpg_Min_Dec_Fac_P2:
+            return _rpgMinDecFac;
+        case Mcp_Rpg_Min_Rate_P2:
+            return _rpgMinRate;
+        case Mcp_Rate_To_Set_On_First_Cnp_P2:
+            return _rateToSetOnFirstCnp;
+        case Mcp_Dce_Tcp_G_P2:
+            return _dceTcpG;
+        case Mcp_Dce_Tcp_Rtt_P2:
+            return _dceTcpRtt;
+        case Mcp_Rate_Reduce_Monitor_Period_P2:
+            return _rateReduceMonitorPeriod;
+        case Mcp_Initial_Alpha_Value_P2:
+            return _initialAlphaValue;
+        case Mcp_Min_Time_Between_Cnps_P2:
+            return _minTimeBetweenCnps;
+        case Mcp_Cnp_Dscp_P2:
+            return _cnpDscp;
+        case Mcp_Cnp_802p_Prio_P2:
+            return _cnp802pPrio;
+        default:
+            break;
+        }
+    }
+    return MLXCFG_UNKNOWN;
+}
+
+int RoCECCEcnParams5thGen::getFromDev(mfile* mf)
+{
+    GET_FROM_DEV_5TH_GEN(mf, tools_open_roce_cc_ecn, "RoCE CC ECN");
+}
+
+int RoCECCEcnParams5thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    SET_ON_DEV_5TH_GEN(mf, ignoreCheck, tools_open_roce_cc_ecn, "RoCE CC ECN");
+}
+int RoCECCEcnParams5thGen::getDefaultParams(mfile* mf)
+{
+        return getFromDev(mf);
+}
+
+u_int32_t _dceTcpG;
+u_int32_t _dceTcpRtt;
+u_int32_t _rateReduceMonitorPeriod;
+u_int32_t _initialAlphaValue;
+u_int32_t _minTimeBetweenCnps;
+u_int32_t _cnpDscp;
+u_int32_t _cnp802pPrio;
+
+bool RoCECCEcnParams5thGen::hardLimitCheck()
+{
+    if (_clampTgtRate > 1) {
+        errmsg("Illegal CLAMP_TGT_RATE_P%d parameter value(%d), value should be 0 or 1", _port, _clampTgtRate);
+        return false;
+    }
+
+    if (_clampTgtRateAfterTimeInc > 1) {
+        errmsg("Illegal CLAMP_TGT_RATE_AFTER_TIME_INC_P%d parameter value(%d), value should be 0 or 1", _port, _clampTgtRateAfterTimeInc);
+        return false;
+    }
+
+    if ( _rpgTimeReset >= (1 << 16)) {
+        errmsg("Illegal RPG_TIME_RESET_P%d parameter value(%d), value should be [0..%d]", _port, _rpgTimeReset, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_rpgByteReset >= (1 << 14)) {
+        errmsg("Illegal RPG_BYTE_RESET_P%d parameter value(%d), value should be [0..%d]", _port, _rpgByteReset, (1 << 14) - 1);
+        return false;
+    }
+
+    if (_rpgThreshold >= (1 << 4)) {
+        errmsg("Illegal RPG_THRESHOLD_P%d parameter value(%d), value should be [0..%d]", _port, _rpgThreshold, (1 << 4) - 1);
+        return false;
+    }
+
+    if ( _rpgAiRate >= (1 << 16)) {
+        errmsg("Illegal RPG_AI_RATE_P%d parameter value(%d), value should be [0..%d]", _port, _rpgAiRate, (1 << 16) - 1);
+        return false;
+    }
+
+    if ( _rpgHaiRate >= (1 << 16)) {
+        errmsg("Illegal RPG_HAI_RATE_P%d parameter value(%d), value should be [0..%d]", _port, _rpgHaiRate, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_rpgGd > 15) {
+        errmsg("Illegal RPG_GD_P%d parameters value(%d), value should be [0..%d]", _port, _rpgGd, 15);
+        return false;
+    }
+
+    if (_rpgMinDecFac == 0 || _rpgMinDecFac > 100) {
+        errmsg("Illegal RPG_MIN_DEC_FAC_P%d parameters value(%d), value should be [1..100]", _port, _rpgMinDecFac);
+        return false;
+    }
+
+    if (_rpgMinRate >= (1 << 16)) {
+        errmsg("Illegal RPG_MIN_RATE_P%d parameters value(%d), value should be [1..%d]", _port, _rpgMinRate, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_rateToSetOnFirstCnp >= (1 << 16)) {
+        errmsg("Illegal RATE_TO_SET_ON_FIRST_CNP_P%d parameters value(%d), value should be [1..%d]", _port, _rateToSetOnFirstCnp, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_dceTcpG >= (1 << 9)) {
+        errmsg("Illegal DCE_TCP_G_P%d parameters value(%d), value should be [1..%d]", _port, _dceTcpG, (1 << 9) - 1);
+        return false;
+    }
+
+    if (_dceTcpRtt >= (1 << 16)) {
+        errmsg("Illegal DCE_TCP_RTT_P%d parameters value(%d), value should be [1..%d]", _port, _dceTcpRtt, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_rateReduceMonitorPeriod >= (1 << 16)) {
+        errmsg("Illegal RATE_REDUCE_MONITOR_PERIOD_P%d parameters value(%d), value should be [1..%d]", _port, _rateReduceMonitorPeriod, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_initialAlphaValue >= (1 << 9)) {
+        errmsg("Illegal INITIAL_ALPHA_VALUE_P%d parameters value(%d), value should be [1..%d]", _port, _initialAlphaValue, (1 << 9) - 1);
+        return false;
+    }
+
+    if (_minTimeBetweenCnps >= (1 << 16)) {
+        errmsg("Illegal MIN_TIME_BETWEEN_CNPS_P%d parameters value(%d), value should be [1..%d]", _port, _minTimeBetweenCnps, (1 << 16) - 1);
+        return false;
+    }
+
+    if (_cnpDscp > 7) {
+        errmsg("Illegal CNP_DSCP_P%d parameters value(%d), value should be [0..7]", _port, _cnpDscp);
+        return false;
+    }
+
+    if (_cnp802pPrio >= (1 << 6)) {
+        errmsg("Illegal CNP_802P_PRIO_P%d parameters value(%d), value should be [1..%d]", _port, _cnp802pPrio, (1 << 6) - 1);
+        return false;
+    }
+    return true;
+}
+
+u_int32_t RoCECCEcnParams5thGen::getTlvTypeBe()
+{
+    struct tools_open_per_port_type type;
+    u_int32_t tlvType = 0;
+    type.param_class = CLASS_PHYS_PORT;
+    type.param_idx = tlvTypeIdx;
+    type.port = _port;
+    tools_open_per_port_type_pack(&type, (u_int8_t*)&tlvType);
+    return tlvType;
+}
+
+
+void RoCECCEcnParams5thGen::updateTlvFromClassAttr(void* tlv)
+{
+    struct tools_open_roce_cc_ecn* roceCcEcnTlv = (struct tools_open_roce_cc_ecn*)tlv;
+    roceCcEcnTlv->clamp_tgt_rate = _clampTgtRate;
+    roceCcEcnTlv->clamp_tgt_rate_after_time_inc = _clampTgtRateAfterTimeInc;
+    roceCcEcnTlv->cnp_802p_prio = _cnp802pPrio;
+    roceCcEcnTlv->cnp_dscp = _cnpDscp;
+    roceCcEcnTlv->dce_tcp_g = _dceTcpG;
+    roceCcEcnTlv->dce_tcp_rtt = _dceTcpRtt;
+    roceCcEcnTlv->initial_alpha_value = _initialAlphaValue;
+    roceCcEcnTlv->min_time_between_cnps = _minTimeBetweenCnps;
+    roceCcEcnTlv->rate_reduce_monitor_period = _rateReduceMonitorPeriod;
+    roceCcEcnTlv->rate_to_set_on_first_cnp = _rateToSetOnFirstCnp;
+    roceCcEcnTlv->rpg_ai_rate = _rpgAiRate;
+    roceCcEcnTlv->rpg_byte_reset = _rpgByteReset;
+    roceCcEcnTlv->rpg_gd = _rpgGd;
+    roceCcEcnTlv->rpg_hai_rate = _rpgHaiRate;
+    roceCcEcnTlv->rpg_max_rate = _rpgMaxRate;
+    roceCcEcnTlv->rpg_min_dec_fac = _rpgMinDecFac;
+    roceCcEcnTlv->rpg_min_rate = _rpgMinRate;
+    roceCcEcnTlv->rpg_threshold = _rpgThreshold;
+    roceCcEcnTlv->rpg_time_reset = _rpgTimeReset;
+    return;
+}
+
+void RoCECCEcnParams5thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_roce_cc_ecn* roceCcEcnTlv = (struct tools_open_roce_cc_ecn*)tlv;
+    _clampTgtRate = roceCcEcnTlv->clamp_tgt_rate;
+    _clampTgtRateAfterTimeInc = roceCcEcnTlv->clamp_tgt_rate_after_time_inc;
+    _cnp802pPrio = roceCcEcnTlv->cnp_802p_prio;
+    _cnpDscp = roceCcEcnTlv->cnp_dscp;
+    _dceTcpG = roceCcEcnTlv->dce_tcp_g;
+    _dceTcpRtt = roceCcEcnTlv->dce_tcp_rtt;
+    _initialAlphaValue = roceCcEcnTlv->initial_alpha_value;
+    _minTimeBetweenCnps = roceCcEcnTlv->min_time_between_cnps;
+    _rateReduceMonitorPeriod = roceCcEcnTlv->rate_reduce_monitor_period;
+    _rateToSetOnFirstCnp = roceCcEcnTlv->rate_to_set_on_first_cnp;
+    _rpgAiRate = roceCcEcnTlv->rpg_ai_rate;
+    _rpgByteReset = roceCcEcnTlv->rpg_byte_reset;
+    _rpgGd = roceCcEcnTlv->rpg_gd;
+    _rpgHaiRate = roceCcEcnTlv->rpg_hai_rate;
+    _rpgMaxRate = roceCcEcnTlv->rpg_max_rate;
+    _rpgMinDecFac = roceCcEcnTlv->rpg_min_dec_fac;
+    _rpgMinRate = roceCcEcnTlv->rpg_min_rate;
+    _rpgThreshold = roceCcEcnTlv->rpg_threshold;
+    _rpgTimeReset = roceCcEcnTlv->rpg_time_reset;
+    return;
+}
+
+
+/*
+ * PrebootBootSettingsParams4thGen Class implementation:
+ */
+
+bool PrebootBootSettingsParams4thGen::cfgSupported(mfile* mf, mlxCfgParam param)
+{
+    (void)param;
+    struct tools_open_query_def_params_per_port portParams;
+    int rc;
+    rc = getDefaultParams4thGen(mf, _port, &portParams);
+    if (rc) {
+        return false;
+    }
+    return portParams.nv_config_boot_parameters;
+}
+
+void PrebootBootSettingsParams4thGen::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if ((paramType == Mcp_Boot_Option_Rom_En_P1 && _port == 1) || (paramType == Mcp_Boot_Option_Rom_En_P2 && _port == 2)) {
+        _bootOptionRomEn = val;
+    }
+
+    if ((paramType == Mcp_Boot_Vlan_En_P1 && _port == 1) || (paramType == Mcp_Boot_Vlan_En_P2 && _port == 2)) {
+        _bootVlanEn = val;
+    }
+
+    if ((paramType == Mcp_Boot_Retry_Cnt_P1 && _port == 1) || (paramType == Mcp_Boot_Retry_Cnt_P2 && _port == 2)) {
+        _bootRetryCnt = val;
+    }
+
+    if ((paramType == Mcp_Legacy_Boot_Protocol_P1 && _port == 1) || (paramType == Mcp_Legacy_Boot_Protocol_P2 && _port == 2)) {
+        _legacyBootProtocol = val;
+    }
+
+    if ((paramType == Mcp_Boot_Vlan_P1 && _port == 1) || (paramType == Mcp_Boot_Vlan_P2 && _port == 2)) {
+        _bootVlan = val;
+    }
+}
+
+u_int32_t PrebootBootSettingsParams4thGen::getParam(mlxCfgParam paramType)
+{
+    if ((paramType == Mcp_Boot_Option_Rom_En_P1 && _port == 1) || (paramType == Mcp_Boot_Option_Rom_En_P2 && _port == 2)) {
+        return _bootOptionRomEn;
+    }
+
+    if ((paramType == Mcp_Boot_Vlan_En_P1 && _port == 1) || (paramType == Mcp_Boot_Vlan_En_P2 && _port == 2)) {
+        return _bootVlanEn;
+    }
+
+    if ((paramType == Mcp_Boot_Retry_Cnt_P1 && _port == 1) || (paramType == Mcp_Boot_Retry_Cnt_P2 && _port == 2)) {
+        return _bootRetryCnt;
+    }
+
+    if ((paramType == Mcp_Legacy_Boot_Protocol_P1 && _port == 1) || (paramType == Mcp_Legacy_Boot_Protocol_P2 && _port == 2)) {
+        return _legacyBootProtocol;
+    }
+
+    if ((paramType == Mcp_Boot_Vlan_P1 && _port == 1) || (paramType == Mcp_Boot_Vlan_P2 && _port == 2)) {
+        return _bootVlan;
+    }
+
+    return MLXCFG_UNKNOWN;
+}
+
+int PrebootBootSettingsParams4thGen::getFromDev(mfile* mf)
+{
+    GET_FROM_DEV_4TH_GEN(mf, tools_open_preboot_boot_settings, "Preboot Boot Settings", _port);
+}
+
+int PrebootBootSettingsParams4thGen::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    SET_ON_DEV_4TH_GEN(mf, ignoreCheck, tools_open_preboot_boot_settings, "Preboot Boot Settings", _port);
+}
+
+void PrebootBootSettingsParams4thGen::updateTlvFromClassAttr(void* tlv)
+{
+
+    struct tools_open_preboot_boot_settings* prebootTlv = (struct tools_open_preboot_boot_settings*)tlv;
+    prebootTlv->boot_option_rom_en = _bootOptionRomEn;
+    prebootTlv->boot_vlan_en = _bootVlanEn;
+    prebootTlv->boot_retry_count = _bootRetryCnt;
+    prebootTlv->legacy_boot_protocol = _legacyBootProtocol;
+    prebootTlv->boot_vlan = _bootVlan;
+
+}
+
+void PrebootBootSettingsParams4thGen::updateClassAttrFromTlv(void* tlv)
+{
+    struct tools_open_preboot_boot_settings* prebootTlv = (struct tools_open_preboot_boot_settings*)tlv;
+    _bootOptionRomEn = prebootTlv->boot_option_rom_en;
+    _bootVlanEn = prebootTlv->boot_vlan_en;
+    _bootRetryCnt = prebootTlv->boot_retry_count;
+    _legacyBootProtocol = prebootTlv->legacy_boot_protocol;
+    _bootVlan = prebootTlv->boot_vlan;
+}
+
+int PrebootBootSettingsParams4thGen::getDefaultParams(mfile* mf)
+{
+    struct tools_open_query_def_params_per_port portParams;
+    int rc;
+    rc = getDefaultParams4thGen(mf, _port, &portParams);
+    if (rc == MCE_SUCCESS) {
+        _bootOptionRomEn = portParams.default_boot_option_rom_en;
+        _bootVlanEn = portParams.default_boot_vlan_en;
+        _bootRetryCnt = portParams.default_boot_retry_cnt;
+        _legacyBootProtocol = portParams.default_boot_protocol;
+        _bootVlan = portParams.default_boot_vlan;
+    } else {
+        rc = MCE_GET_DEFAULT_PARAMS;
+    }
+    return rc;
+}
+
+bool PrebootBootSettingsParams4thGen::hardLimitCheck()
+{
+    if (_bootOptionRomEn > 1) {
+        errmsg("Illegal BOOT_OPTION_ROM_EN_P%d parameter value, valid values: 0 or 1", ((_port == 1) ? 1 : 2));
+        return false;
+    }
+    if (_bootVlanEn > 1) {
+        errmsg("Illegal BOOT_VLAN_EN_P%d parameter value, valid values: 0 or 1", ((_port == 1) ? 1 : 2));
+        return false;
+    }
+    if (_bootRetryCnt > 7) {
+        errmsg("Illegal BOOT_RETRY_CNT_P%d parameter value, valid values: [0..7]", ((_port == 1) ? 1 : 2));
+        return false;
+    }
+    if (_legacyBootProtocol > 3) {
+        errmsg("Illegal LEGACY_BOOT_PROTOCOL_P%d parameter value, valid values: [0..3]", ((_port == 1) ? 1 : 2));
+        return false;
+    }
+    if (_bootVlan >= (1 << 12)) {
+        errmsg("Illegal BOOT_VLAN_P%d parameter value, valid values: [0..4095]", ((_port == 1) ? 1 : 2));
         return false;
     }
     return true;
diff --git a/mlxconfig/mlxcfg_param_lib.h b/mlxconfig/mlxcfg_param_lib.h
index 5865e3c..3c1257b 100644
--- a/mlxconfig/mlxcfg_param_lib.h
+++ b/mlxconfig/mlxcfg_param_lib.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,12 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-/*
- * mlxcfg_param_lib.h
  *
- *  Created on: Mar 22, 2015
- *      Author: adrianc
+ *  Version: $Id$
+ *
  */
 
 #ifndef MLXCFG_PARAM_LIB_H_
@@ -41,6 +37,7 @@
 
 #include <vector>
 #include <utility>
+#include <stdexcept>
 
 #include <errmsg.h>
 #include <tools_layouts/tools_open_layouts.h>
@@ -55,30 +52,146 @@
 #define PCI_CAPABILITES_TYPE 0x81
 #define TPT_SETTINGS_TYPE 0x82
 #define TPT_CAPABILITES_TYPE 0x83
-
+#define PREBOOT_BOOT_SETTINGS_TYPE 0x2021
+#define INFINIBAND_BOOT_SETTINGS_TYPE 0x2022
+#define INFINIBAND_DC_SETTINGS_TYPE 0x190
+#define INFINIBAND_DC_CAPABILITIES_TYPE 0x191
+#define PORT_BOOT_STATE_TYPE 0x84
+#define ROCE_NEXT_PROTOCOL_TYPE 0x10
+#define ROCE_CC_TYPE 0x107
+#define ROCE_CC_ECN_TYPE 0x108
+#define LLDP_NB_SETTINGS_TYPE 0x10a
+#define LLDP_NB_CAPABILITIES_TYPE 0x10b
 
 typedef enum {
+    // SRIOV
     Mct_Sriov = 0,
+    // Wake on LAN (4th gen)
     Mct_Wol_P1,
     Mct_Wol_P2,
+    // Wake on LAN (5th gen)
+    Mct_Wol,
+    // VPI settings
     Mct_Vpi_P1,
     Mct_Vpi_P2,
+    // BAR size (4th gen)
     Mct_Bar_Size,
+    // PCI settings (5th gen)
     Mct_Pci,
+    // TPT settings (5th gen)
     Mct_Tpt,
+    // IB boot settings (4th gen)
+    Mct_Boot_Settings_P1,
+    Mct_Boot_Settings_P2,
+    // IB dynamically connected (5th gen)
+    Mct_Dc,
+    // Port Boot State (5th gen)
+    Mct_Boot_State_P1,
+    Mct_Boot_State_P2,
+    // RoCE v1.5 next protocol (5th gen)
+    Mct_RoCE_Next_Protocol,
+    // RoCE congestion control (5th gen)
+    Mct_RoCE_CC_P1,
+    Mct_RoCE_CC_P2,
+    // RoCE congestion control ECN (5th gen)
+    Mct_RoCE_CC_Ecn_P1,
+    Mct_RoCE_CC_Ecn_P2,
+    // Preboot Boot Settings (4th Gen)
+    Mct_Preboot_Boot_Settings_P1,
+    Mct_Preboot_Boot_Settings_P2,
     Mct_Last
 } mlxCfgType;
 
 typedef enum {
+    // PCI settings
     Mcp_Sriov_En = 0,
     Mcp_Num_Of_Vfs,
     Mcp_Fpp_En,
+    // Wake On LAN 4th Gen Port 1
     Mcp_Wol_Magic_En_P1,
+    // Wake On LAN 4th Gen Port 2
     Mcp_Wol_Magic_En_P2,
+    // Wake On LAN 5th Gen
+    Mcp_Wol_Magic_En,
+    // VPI settings Port 1
     Mcp_Link_Type_P1,
+    // VPI settings Port 2
     Mcp_Link_Type_P2,
+    // BAR size
     Mcp_Log_Bar_Size,
+    // TPT settings
     Mcp_Log_Tpt_Size,
+    // Boot Pkey Port 1
+    Mcp_Boot_Pkey_P1,
+    // Boot Pkey Port 2
+    Mcp_Boot_Pkey_P2,
+    // IB Dynamically connected
+    Mcp_Log_Dcr_Hash_Table_Size,
+    Mcp_Dcr_Lifo_Size,
+    // Port Boot state Port 1
+    Mcp_Boot_State_P1,
+    // Port Boot state Port 2
+    Mcp_Boot_State_P2,
+    // RoCE v1.5 Next protocol
+    Mcp_RoCE_Next_Protocol,
+    // RoCE Congestion Control Parameters Port 1
+    Mcp_RoCE_CC_Algorithm_P1,
+    Mcp_RoCE_CC_Prio_Mask_P1,
+    // RoCE Congestion Control Parameters Port 2
+    Mcp_RoCE_CC_Algorithm_P2,
+    Mcp_RoCE_CC_Prio_Mask_P2,
+    // RoCE Congestion Control ECN Port 1
+    Mcp_Clamp_Tgt_Rate_P1,
+    Mcp_Clamp_Tgt_Rate_After_Time_Inc_P1,
+    Mcp_Rpg_Time_Reset_P1,
+    Mcp_Rpg_Byte_Reset_P1,
+    Mcp_Rpg_Threshold_P1,
+    Mcp_Rpg_Max_Rate_P1,
+    Mcp_Rpg_Ai_Rate_P1,
+    Mcp_Rpg_Hai_Rate_P1,
+    Mcp_Rpg_Gd_P1,
+    Mcp_Rpg_Min_Dec_Fac_P1,
+    Mcp_Rpg_Min_Rate_P1,
+    Mcp_Rate_To_Set_On_First_Cnp_P1,
+    Mcp_Dce_Tcp_G_P1,
+    Mcp_Dce_Tcp_Rtt_P1,
+    Mcp_Rate_Reduce_Monitor_Period_P1,
+    Mcp_Initial_Alpha_Value_P1,
+    Mcp_Min_Time_Between_Cnps_P1,
+    Mcp_Cnp_Dscp_P1,
+    Mcp_Cnp_802p_Prio_P1,
+    // RoCE Congestion Control ECN Port 2
+    Mcp_Clamp_Tgt_Rate_P2,
+    Mcp_Clamp_Tgt_Rate_After_Time_Inc_P2,
+    Mcp_Rpg_Time_Reset_P2,
+    Mcp_Rpg_Byte_Reset_P2,
+    Mcp_Rpg_Threshold_P2,
+    Mcp_Rpg_Max_Rate_P2,
+    Mcp_Rpg_Ai_Rate_P2,
+    Mcp_Rpg_Hai_Rate_P2,
+    Mcp_Rpg_Gd_P2,
+    Mcp_Rpg_Min_Dec_Fac_P2,
+    Mcp_Rpg_Min_Rate_P2,
+    Mcp_Rate_To_Set_On_First_Cnp_P2,
+    Mcp_Dce_Tcp_G_P2,
+    Mcp_Dce_Tcp_Rtt_P2,
+    Mcp_Rate_Reduce_Monitor_Period_P2,
+    Mcp_Initial_Alpha_Value_P2,
+    Mcp_Min_Time_Between_Cnps_P2,
+    Mcp_Cnp_Dscp_P2,
+    Mcp_Cnp_802p_Prio_P2,
+    // Preboot Boot Settings Port 1
+    Mcp_Boot_Option_Rom_En_P1,
+    Mcp_Boot_Vlan_En_P1,
+    Mcp_Boot_Retry_Cnt_P1,
+    Mcp_Legacy_Boot_Protocol_P1,
+    Mcp_Boot_Vlan_P1,
+    // Preboot Boot Settings Port 2
+    Mcp_Boot_Option_Rom_En_P2,
+    Mcp_Boot_Vlan_En_P2,
+    Mcp_Boot_Retry_Cnt_P2,
+    Mcp_Legacy_Boot_Protocol_P2,
+    Mcp_Boot_Vlan_P2,
     Mcp_Last
 } mlxCfgParam;
 
@@ -89,9 +202,24 @@ typedef std::pair<mlxCfgParam, u_int32_t> cfgInfo;
  */
 
 /* Adrianc: add Initialize/Open pure method that will contain all needed initializations (configuration supported defaults capabilities etc...)
- *          add cfgSupported(mfile* mf, mlxCfgParam param) = 0; to suppot "sub-configuraion" of a specific Parameter
 */
 
+
+class RawCfgParams5thGen : public ErrMsg
+{
+public:
+    RawCfgParams5thGen(){}
+    ~RawCfgParams5thGen() {}
+    int setRawData(const std::vector<u_int32_t>& tlvBuff);
+    int setOnDev(mfile* mf);
+    std::string dumpTlv();
+private:
+    int verifyTlv();
+    std::vector<u_int32_t> _tlvBuff;
+    struct tools_open_nvda _nvdaTlv;
+};
+
+
 class CfgParams : public ErrMsg
 {
 public:
@@ -124,6 +252,9 @@ protected:
     int getDefaultParams4thGen(mfile* mf, struct tools_open_query_def_params_global* global_params);
     int getDefaultParams4thGen(mfile* mf, int port, struct tools_open_query_def_params_per_port* port_params);
 
+    virtual void updateTlvFromClassAttr(void* tlv) {(void)tlv; throw std::logic_error("Function Not Implemented");}
+    virtual void updateClassAttrFromTlv(void* tlv) {(void)tlv; throw std::logic_error("Function Not Implemented");}
+
     u_int64_t _devCapVec; // relevant for 4th gen devices
     bool _updated; // set true on get and false on set
     bool _ignoreSoftLimits; // soft limits checks will not be performed for configuration
@@ -171,23 +302,6 @@ protected:
 
 };
 
-class SriovParams5thGen : public SriovParams
-{
-public:
-    SriovParams5thGen() : SriovParams() {}
-    ~SriovParams5thGen() {};
-
-    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
-
-    virtual int getFromDev(mfile* mf);
-    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
-    virtual int getDefaultParams(mfile* mf);
-
-protected:
-    virtual int updateMaxVfs(mfile* mf);
-    virtual bool softLimitCheck(mfile* mf=NULL);
-};
-
 /*
  * WOL param classes:
  */
@@ -195,13 +309,13 @@ protected:
 class WolParams : public CfgParams
 {
 public:
-    WolParams(int port) : CfgParams(port == 1 ? Mct_Wol_P1 : Mct_Wol_P2, WOL_TYPE), _port(port), _wolMagicEn(MLXCFG_UNKNOWN) {}
-    ~WolParams() {}
+    WolParams() : CfgParams(Mct_Last, WOL_TYPE), _wolMagicEn(MLXCFG_UNKNOWN) {}
+    virtual ~WolParams() {}
 
     virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last) = 0;
 
-    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
-    virtual u_int32_t getParam(mlxCfgParam paramType);
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val) = 0;
+    virtual u_int32_t getParam(mlxCfgParam paramType) = 0;
 
     virtual int getFromDev(mfile* mf) = 0;
     virtual int setOnDev(mfile* mf, bool ignoreCheck=false) = 0;
@@ -210,36 +324,50 @@ public:
 protected:
     virtual bool hardLimitCheck();
     // Wake on magic packet (atm this is the only mode which is supported)
-    int _port;
+
     u_int32_t _wolMagicEn;
 };
 
 class WolParams4thGen : public WolParams
 {
 public:
-    WolParams4thGen(int port) : WolParams(port) {}
+    WolParams4thGen(int port) : WolParams(), _port(port) {type = _port == 1 ? Mct_Wol_P1 : Mct_Wol_P2;}
     ~WolParams4thGen() {}
 
     virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
 
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
     virtual int getFromDev(mfile* mf);
     virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
     virtual int getDefaultParams(mfile* mf);
+private:
+    int _port;
 };
 
 class WolParams5thGen : public WolParams
 {
 public:
-    WolParams5thGen(int port) : WolParams(port) {}
+    WolParams5thGen() : WolParams() {type = Mct_Wol;}
     ~WolParams5thGen() {}
 
     virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
 
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
     virtual int getFromDev(mfile* mf);
     virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
     virtual int getDefaultParams(mfile* mf);
+protected:
+    u_int32_t getTlvTypeBe();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
 };
 
+
 /*
  * VPI param classes:
  */
@@ -350,21 +478,6 @@ protected:
     virtual int getDefaultBarSz(mfile* mf);
 };
 
-class BarSzParams5thGen : public BarSzParams
-{
-public:
-    BarSzParams5thGen() : BarSzParams() {}
-    ~BarSzParams5thGen() {}
-
-    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
-
-    virtual int getFromDev(mfile* mf);
-    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
-    virtual int getDefaultParams(mfile* mf);
-protected:
-    virtual bool softLimitCheck(mfile* mf=NULL);
-    virtual int getDefaultBarSz(mfile* mf);
-};
 
 /*
  * PCI parameters Class (5thGen devices only)
@@ -439,5 +552,254 @@ protected:
     bool      _logMaxPayloadSizeSupported;
 };
 
+/*
+ * Infiniband boot settings parameter Class (4thGen devices only)
+ */
+class InfinibandBootSettingsParams4thGen : public CfgParams
+{
+public:
+    InfinibandBootSettingsParams4thGen(int port) : CfgParams((port == 1 ? Mct_Boot_Settings_P1 : Mct_Boot_Settings_P2),
+            INFINIBAND_BOOT_SETTINGS_TYPE) , _port(port), _bootPkey(MLXCFG_UNKNOWN) {}
+    ~InfinibandBootSettingsParams4thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+
+    int _port;
+    u_int32_t _bootPkey;
+
+};
+
+/*
+ * Infiniband DC (Dynamically Connected) parameters Class (5thGen devices only)
+ */
+
+class IBDCParams5thGen : public CfgParams
+{
+public:
+    IBDCParams5thGen() : CfgParams(Mct_Dc, INFINIBAND_DC_SETTINGS_TYPE) , _logDcrHashTableSize(MLXCFG_UNKNOWN), _dcrLifoSize(MLXCFG_UNKNOWN),
+                        _minLogDcrHashTableSize(0), _maxLogDcrHashTableSize(0), _minDcrLifoSize(0), _maxDcrLifoSize(0){}
+    ~IBDCParams5thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+    int getDefaultsAndCapabilities(mfile* mf);
+    u_int32_t getTlvTypeBe();
+    u_int32_t getDcCapabilitiesTlvTypeBe();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
+
+    u_int32_t _logDcrHashTableSize;
+    u_int32_t _dcrLifoSize;
+
+    // defaults and capabilities
+    u_int32_t _minLogDcrHashTableSize;
+    u_int32_t _maxLogDcrHashTableSize;
+    u_int32_t _minDcrLifoSize;
+    u_int32_t _maxDcrLifoSize;
+};
+
+/*
+ * Port boot state Class (5thGen devices only)
+ */
+
+class PortBootStateParams5thGen : public CfgParams
+{
+public:
+    PortBootStateParams5thGen(int port) : CfgParams((port == 1 ? Mct_Boot_State_P1 : Mct_Boot_State_P2), PORT_BOOT_STATE_TYPE) , _portBootState(MLXCFG_UNKNOWN), _port(port) {}
+    ~PortBootStateParams5thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+    u_int32_t getTlvTypeBe();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
+
+    u_int32_t _portBootState;
+    int _port;
+};
+
+/*
+ * RoCE v1.5 next protocol Class (5thGen devices only)
+ */
+
+class RoCENextProtocolParams5thGen : public CfgParams
+{
+public:
+    RoCENextProtocolParams5thGen() : CfgParams(Mct_RoCE_Next_Protocol, ROCE_NEXT_PROTOCOL_TYPE) , _nextProtocol(MLXCFG_UNKNOWN) {}
+    ~RoCENextProtocolParams5thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+    u_int32_t getTlvTypeBe();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
+
+    u_int32_t _nextProtocol;
+};
+
+/*
+ * RoCE CC parameters Class (5thGen devices only)
+ */
+
+class RoCECCParams5thGen : public CfgParams
+{
+public:
+    RoCECCParams5thGen(int port) : CfgParams((port == 1 ? Mct_RoCE_CC_P1 : Mct_RoCE_CC_P2), ROCE_CC_TYPE),
+                                   _port(port), _roceCcAlgorithm(MLXCFG_UNKNOWN), _roceCcPrioMask(MLXCFG_UNKNOWN) {}
+    ~RoCECCParams5thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+    u_int32_t getTlvTypeBe();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
+
+    int _port;
+    u_int32_t _roceCcAlgorithm;
+    u_int32_t _roceCcPrioMask;
+};
+
+/*
+ * RoCE CC ECN parameters Class (5thGen devices only)
+ */
+
+class RoCECCEcnParams5thGen : public CfgParams
+{
+public:
+    RoCECCEcnParams5thGen(int port) : CfgParams((port == 1 ? Mct_RoCE_CC_Ecn_P1 : Mct_RoCE_CC_Ecn_P2), ROCE_CC_ECN_TYPE),
+                                    _port(port), _clampTgtRate(MLXCFG_UNKNOWN), _clampTgtRateAfterTimeInc(MLXCFG_UNKNOWN),
+                                    _rpgTimeReset(MLXCFG_UNKNOWN), _rpgByteReset(MLXCFG_UNKNOWN), _rpgThreshold(MLXCFG_UNKNOWN),
+                                    _rpgMaxRate(MLXCFG_UNKNOWN), _rpgAiRate(MLXCFG_UNKNOWN), _rpgHaiRate(MLXCFG_UNKNOWN),
+                                    _rpgGd(MLXCFG_UNKNOWN), _rpgMinDecFac(MLXCFG_UNKNOWN), _rpgMinRate(MLXCFG_UNKNOWN),
+                                    _rateToSetOnFirstCnp(MLXCFG_UNKNOWN), _dceTcpG(MLXCFG_UNKNOWN), _dceTcpRtt(MLXCFG_UNKNOWN),
+                                    _rateReduceMonitorPeriod(MLXCFG_UNKNOWN), _initialAlphaValue(MLXCFG_UNKNOWN),
+                                    _minTimeBetweenCnps(MLXCFG_UNKNOWN), _cnpDscp(MLXCFG_UNKNOWN), _cnp802pPrio(MLXCFG_UNKNOWN){};
+    ~RoCECCEcnParams5thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+    u_int32_t getTlvTypeBe();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
+
+    int _port;
+
+    u_int32_t _clampTgtRate;
+    u_int32_t _clampTgtRateAfterTimeInc;
+    u_int32_t _rpgTimeReset;
+    u_int32_t _rpgByteReset;
+    u_int32_t _rpgThreshold;
+    u_int32_t _rpgMaxRate;
+    u_int32_t _rpgAiRate;
+    u_int32_t _rpgHaiRate;
+    u_int32_t _rpgGd;
+    u_int32_t _rpgMinDecFac;
+    u_int32_t _rpgMinRate;
+    u_int32_t _rateToSetOnFirstCnp;
+    u_int32_t _dceTcpG;
+    u_int32_t _dceTcpRtt;
+    u_int32_t _rateReduceMonitorPeriod;
+    u_int32_t _initialAlphaValue;
+    u_int32_t _minTimeBetweenCnps;
+    u_int32_t _cnpDscp;
+    u_int32_t _cnp802pPrio;
+};
+
+
+/*
+ * Preboot Boot Settings Class (4thGen devices only)
+ */
+
+class PrebootBootSettingsParams4thGen : public CfgParams
+{
+public:
+    PrebootBootSettingsParams4thGen(int port) : CfgParams((port == 1 ? Mct_Preboot_Boot_Settings_P1 : Mct_Preboot_Boot_Settings_P2), PREBOOT_BOOT_SETTINGS_TYPE),
+                                                _bootOptionRomEn(MLXCFG_UNKNOWN), _bootVlanEn(MLXCFG_UNKNOWN), _bootRetryCnt(MLXCFG_UNKNOWN),
+                                                _legacyBootProtocol(MLXCFG_UNKNOWN), _bootVlan(MLXCFG_UNKNOWN), _port(port) {}
+    ~PrebootBootSettingsParams4thGen() {};
+
+    virtual bool cfgSupported(mfile* mf, mlxCfgParam param=Mcp_Last);
+
+    virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+    virtual u_int32_t getParam(mlxCfgParam paramType);
+
+    virtual int getFromDev(mfile* mf);
+    virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+    virtual int getDefaultParams(mfile* mf);
+
+protected:
+    virtual bool hardLimitCheck();
+
+    virtual void updateTlvFromClassAttr(void* tlv);
+    virtual void updateClassAttrFromTlv(void* tlv);
+
+    u_int32_t _bootOptionRomEn;
+    u_int32_t _bootVlanEn;
+    u_int32_t _bootRetryCnt;
+    u_int32_t _legacyBootProtocol;
+    u_int32_t _bootVlan;
+    int _port;
+};
+
 
 #endif /* MLXCFG_PARAM_LIB_H_ */
diff --git a/mlxconfig/mlxcfg_parser.cpp b/mlxconfig/mlxcfg_parser.cpp
index ed9a5b0..8ace497 100644
--- a/mlxconfig/mlxcfg_parser.cpp
+++ b/mlxconfig/mlxcfg_parser.cpp
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #include <stdlib.h>
@@ -46,6 +48,7 @@ using namespace std;
 #define IDENT "    "
 #define IDENT2 IDENT IDENT
 #define IDENT3 "\t\t"
+#define IDENT4 IDENT2 IDENT
 
 
 
@@ -60,53 +63,163 @@ static void printFlagLine(string flag_s, string flag_l, string param, string des
     printf(IDENT3": %s\n", desc.c_str());
 }
 
+static void printConfigurationHeader(string confName, string extraInfo="")
+{
+    printf(IDENT2"%s: %s\n", confName.c_str(), extraInfo.c_str());
+}
+
+static void printConfigurationParameter(string param, string extraInfo)
+{
+    printf(IDENT4"%-36s : %s\n", param.c_str(), extraInfo.c_str());
+}
+
+
+static void printConfigurationParameter(string param)
+{
+    printf(IDENT4"%-36s\n", param.c_str());
+}
+
+#ifdef MTCR_UL
+#define DEVICE_NAME "device"
+#else
+#define DEVICE_NAME "mst device"
+#endif
+
 void MlxCfg::printHelp()
 {
     // print opening
     printf(IDENT"NAME:\n"
            IDENT2   MLXCFG_NAME"\n"
            IDENT"SYNOPSIS:\n"
-           IDENT2    MLXCFG_NAME " [-d <device> ] [-y] <s[et] <parameters to set>|q[uery]|r[eset]>\n");
+           IDENT2    MLXCFG_NAME " [-d <%s> ] [-y] <s[et] <parameters to set>|q[uery]|r[eset]>\n", DEVICE_NAME);
 
     // print options
     printf("\n");
     printf(IDENT"OPTIONS:\n");
     printFlagLine("d", "dev", "device", "Perform operation for a specified mst device.");
-    printFlagLine("y", "yes", "", "Answer yes in prompt.");
-    printFlagLine("v", "version", "", "Display version info.");
+    printFlagLine("f", "file", "conf_file", "raw configuration file.");
     printFlagLine("h", "help", "", "Display help message.");
+    printFlagLine("v", "version", "", "Display version info.");
+    printFlagLine("y", "yes", "", "Answer yes in prompt.");
 
     //print commands
     printf("\n");
     printf(IDENT"COMMANDS:\n");
+    printf(IDENT2"%-24s : %s\n","clear_semaphore", "clear the tool semaphore.");
     printf(IDENT2"%-24s : %s\n","q[uery]", "query current supported configurations.");
+    printf(IDENT2"%-24s : %s\n","r[eset]", "reset all configurations to their default value.");
     printf(IDENT2"%-24s : %s\n","s[et]", "set configurations to a specific device.");
-    printf(IDENT2"%-24s : %s\n","r[eset]", "reset configurations to their default value.");
-    printf(IDENT2"%-24s : %s\n","clear_semaphore", "clear the tool semaphore.");
+    printf(IDENT2"%-24s : %s\n","set_raw", "set raw configuration file.(5th generation devices only.)");
 
     // print supported commands
     printf("\n");
     printf(IDENT"Supported Configurations:\n");
-    printf(IDENT2"%-24s : %s\n","SRIOV", "SRIOV_EN=<1|0> NUM_OF_VFS=<NUM>");
-    printf(IDENT2"%-24s : %s\n","WOL_PORT1", "WOL_MAGIC_EN_P1");
-    printf(IDENT2"%-24s : %s\n","WOL_PORT2", "WOL_MAGIC_EN_P2=<1|0>");
-    printf(IDENT2"%-24s : %s\n","VPI_SETTINGS_PORT1", "LINK_TYPE_P1=<1|2|3> , 1=Infiniband 2=Ethernet 3=VPI(auto-sense).");
-    printf(IDENT2"%-24s : %s\n","VPI_SETTINGS_PORT2", "LINK_TYPE_P2=<1|2|3>");
-    printf(IDENT2"%-24s : %s\n","BAR_SIZE", "LOG_BAR_SIZE=<Base_2_log_in_mb> , example: for 8Mb bar size set LOG_BAR_SIZE=3");
-    printf(IDENT2"%-24s : %s\n","FPP", "FPP_EN=<1|0>");
-    printf(IDENT2"%-24s : %s\n","INTERNAL_SETTINGS", "INT_LOG_MAX_PAYLOAD_SIZE=<0|12> , 0=Auto 12=4KB Burst length.");
-
+    printf("\n");
+    printConfigurationHeader("PCI Settings");
+    printConfigurationParameter("FPP_EN=<1|0>", "enable function per port.");
+    printConfigurationParameter("LOG_BAR_SIZE=<base_2_log_in_mb>", "example: for 8Mb bar size set LOG_BAR_SIZE=3.");
+    printConfigurationParameter("NUM_OF_VFS=<NUM>", "desired amount of virtual functions.");
+    printConfigurationParameter("SRIOV_EN=<0|1>", "enable SR-IOV.");
+    printf("\n");
+    printConfigurationHeader("IB Dynamically Connect");
+    printConfigurationParameter("DCR_LIFO_SIZE=<SIZE>", "The amount of total DCRs available to join linked-lists after hash DCRs.");
+    printConfigurationParameter("LOG_DCR_HASH_TABLE_SIZE=<SIZE>", "log2 of the hash table size minus 1.");
+    printf("\n");
+    printConfigurationHeader("Infiniband Boot Settings");
+    printConfigurationParameter("BOOT_PKEY_P1=<PKEY>", "partition key to be used by PXE boot (ConnectX3, ConnectX3-Pro Only).");
+    printConfigurationParameter("BOOT_PKEY_P2=<PKEY>", "set 0 for default.");
+    printf("\n");
+    printConfigurationHeader("Internal Settings");
+    printConfigurationParameter("INT_LOG_MAX_PAYLOAD_SIZE=<0|12>", "0=Auto 12=4KB Burst length.");
+    printf("\n");
+    /*
+    printConfigurationHeader("Port Boot State", "Port power settings on boot");
+    printConfigurationParameter("BOOT_STATE_P1=<0..3>", "0=Normal operation, 1=SFP power off, 2=SERDES power off, 3=Admin linkDown");
+    printConfigurationParameter("BOOT_STATE_P2=<0..3>");
+    printf("\n");
+    */
+    printConfigurationHeader("Preboot Boot Settings", "Settings that control the legacy option ROM.");
+    printConfigurationParameter("BOOT_OPTION_ROM_EN_P1=<0|1>", "Disable/Enable boot option ROM.");
+    printConfigurationParameter("BOOT_OPTION_ROM_EN_P2=<0|1>");
+    printConfigurationParameter("BOOT_VLAN_EN_P1=<0|1>", "Disable/Enable VLAN mode for network boot.");
+    printConfigurationParameter("BOOT_VLAN_EN_P2=<0|1>");
+    printConfigurationParameter("BOOT_RETRY_CNT_P1=<0..7>", "Number of retries to attempt in case of boot failure.");
+    printConfigurationParameter("BOOT_RETRY_CNT_P2=<0..7>", "7 indicates infinite retries.");
+    printConfigurationParameter("LEGACY_BOOT_PROTOCOL_P1=<0..3>", "0=None(disable legacy boot), 1=PXE(DHCP/TFTP boot), 2=iSCSI, 3=PXE + iSCSI.");
+    printConfigurationParameter("LEGACY_BOOT_PROTOCOL_P2=<0..3>");
+    printConfigurationParameter("BOOT_VLAN_P1=<VLAN ID>", "VLAN ID for the network boot.");
+    printConfigurationParameter("BOOT_VLAN_P2=<VLAN ID>");
+    printf("\n");
+    printConfigurationHeader("RoCE Congestion Control ECN");
+    printConfigurationParameter("CLAMP_TGT_RATE_AFTER_TIME_INC_P1=<0|1>", "When receiving an CNP, the target rate should be updated if the transmission rate was increased");
+    printConfigurationParameter("CLAMP_TGT_RATE_AFTER_TIME_INC_P2=<0|1>", "due to the timer, and not only due to the byte counter. Default=1.");
+    printConfigurationParameter("CLAMP_TGT_RATE_P1=<0|1>", "If set, whenever a CNP is processed, the target rate is updated to be the current rate.");
+    printConfigurationParameter("CLAMP_TGT_RATE_P2=<0|1>", "Default=1");
+    printConfigurationParameter("CNP_DSCP_P1=<0..7>", "The DiffServ Code Point of the generated CNP for this port.");
+    printConfigurationParameter("CNP_DSCP_P2=<0..7>", "Default=0.");
+    printConfigurationParameter("CNP_802P_PRIO_P1=<NUM>", "The 802.1p priority value of the generated CNP for this port.");
+    printConfigurationParameter("CNP_802P_PRIO_P2=<NUM>", "Default=7.");
+    printConfigurationParameter("DCE_TCP_G_P1=<NUM>", "Used to update the congestion estimator (alpha) once every dce_tcp_rtt microseconds.");
+    printConfigurationParameter("DCE_TCP_G_P2=<NUM>", "Default=64.");
+    printConfigurationParameter("DCE_TCP_RTT_P1=<USEC>", "The time between updates of the alpha value, in microseconds.");
+    printConfigurationParameter("DCE_TCP_RTT_P2=<USEC>", "Default=2.");
+    printConfigurationParameter("INITIAL_ALPHA_VALUE_P1=<NUM>", "The initial value of alpha to use when receiving the first CNP for a flow.");
+    printConfigurationParameter("INITIAL_ALPHA_VALUE_P2=<NUM>", "Expressed in a fixed point fraction of 2^10.");
+    printConfigurationParameter("MIN_TIME_BETWEEN_CNPS_P1=<USEC>", "Minimum time between sending cnps from the port, in microseconds.");
+    printConfigurationParameter("MIN_TIME_BETWEEN_CNPS_P2=<USEC>", "Default=0.");
+    printConfigurationParameter("RATE_TO_SET_ON_FIRST_CNP_P1=<RATE_IN_MBIT>", "The rate that is set for the flow when a rate limiter is allocated to it upon first CNP received, in Mbps.");
+    printConfigurationParameter("RATE_TO_SET_ON_FIRST_CNP_P2=<RATE_IN_MBIT>", "Default=0.");
+    printConfigurationParameter("RATE_REDUCE_MONITOR_PERIOD_P1=<USEC>", "The minimum time between 2 consecutive rate reductions for a single flow.");
+    printConfigurationParameter("RATE_REDUCE_MONITOR_PERIOD_P2=<USEC>", "Rate reduction will occur only if a CNP is received during the relevant time interval. Default=2.");
+    printConfigurationParameter("RPG_AI_RATE_P1=<RATE_IN_MBIT>", "The rate, in Mbits per second, used to increase rpTargetRate in the RPR_ACTIVE_INCREASE state.");
+    printConfigurationParameter("RPG_AI_RATE_P2=<RATE_IN_MBIT>", "Default=10.");
+    printConfigurationParameter("RPG_BYTE_RESET_P1=<BYTE_NUM>", "Transmitted data between rate increases if no CNPs are received. Given in Bytes.");
+    printConfigurationParameter("RPG_BYTE_RESET_P2=<BYTE_NUM>", "Disabled=0, Default=150.");
+    printConfigurationParameter("RPG_GD_P1=<0..15>", "If a CNP is received, the flow rate is reduced at the beginning of the next rate_reduce_monitor_period interval to,");
+    printConfigurationParameter("RPG_GD_P2=<0..15>", "(1-Alpha/Gd)*CurrentRate. RPG_GD is given as log2(Gd), where Gd may only be powers of 2. Default=7.");
+    printConfigurationParameter("RPG_HAI_RATE_P1=<RATE_IN_MBIT>", "The rate, in Mbits per second, used to increase rpTargetRate in the RPR_HYPER_INCREASE state.");
+    printConfigurationParameter("RPG_HAI_RATE_P2=<RATE_IN_MBIT>", "Default=50.");
+    printConfigurationParameter("RPG_MAX_RATE_P1=<RATE_IN_MBIT>", "The maximum rate, in Mbits per second, at which an RP can transmit.");
+    printConfigurationParameter("RPG_MAX_RATE_P2=<RATE_IN_MBIT>", "Once this limit is reached, the RP rate limited is released and");
+    printConfigurationParameter(" ", "the flow is not rate limited any more. Default=0 (Full port speed).");
+    printConfigurationParameter("RPG_MIN_DEC_FAC_P1=<1..100>", "The minimum factor by which the current transmit rate can be changed when processing a CNP.");
+    printConfigurationParameter("RPG_MIN_DEC_FAC_P2=<1..100>", "Value is given as a percentage (1-100). Default=50.");
+    printConfigurationParameter("RPG_MIN_RATE_P1=<RATE_IN_MBIT>", "The minimum value, in Mb per second, for rate to limit.");
+    printConfigurationParameter("RPG_MIN_RATE_P2=<RATE_IN_MBIT>", "Default=2000.");
+    printConfigurationParameter("RPG_THRESHOLD_P1=<0..31>", "The number of times rpByteStage or rpTimeStage can count before the RP rate control state machine advances states.");
+    printConfigurationParameter("RPG_THRESHOLD_P2=<0..31>", "Default=5.");
+    printConfigurationParameter("RPG_TIME_RESET_P1=<USEC>", "Time between rate increases if no CNPs are received. Given in u-seconds");
+    printConfigurationParameter("RPG_TIME_RESET_P2=<USEC>", "Default=2.");
 
-    // print usage examples
     printf("\n");
+    printConfigurationHeader("RoCE Congestion Control Parameters");
+    printConfigurationParameter("ROCE_CC_ALGORITHM_P1=<0|1>", "Congestion control algorithm. 0=ECN, 1=QCN.");
+    printConfigurationParameter("ROCE_CC_ALGORITHM_P2=<0|1>");
+    printConfigurationParameter("ROCE_CC_PRIO_MASK_P1=<0..255>", "Per priority enable disable bitmask. default 0.");
+    printConfigurationParameter("ROCE_CC_PRIO_MASK_P2=<0..255>");
+    printf("\n");
+    printConfigurationHeader("RoCE V1.5 next protocol");
+    printConfigurationParameter("ROCE_NEXT_PROTOCOL=<0..255>", "The next protocol value set in the IPv4/IPv6 packets for RoCE v1.5. The default is 0xFE.");
+    printf("\n");
+    printConfigurationHeader("VPI Settings", "Control network link type");
+    printConfigurationParameter("LINK_TYPE_P1=<1|2|3>", "1=Infiniband 2=Ethernet 3=VPI(auto-sense).");
+    printConfigurationParameter("LINK_TYPE_P2=<1|2|3>");
+    printf("\n");
+    printConfigurationHeader("Wake On LAN");
+    printConfigurationParameter("WOL_MAGIC_EN=<0|1>", "5th generation devices only (per physical function).");
+    printConfigurationParameter("WOL_MAGIC_EN_P1=<0|1>", "enable wake on magic packet(per port.)");
+    printConfigurationParameter("WOL_MAGIC_EN_P2=<0|1>", "4th generation devices only.");
+    printf("\n");
+    // print usage examples
     printf(IDENT"Examples:\n");
-    printf(IDENT2"%-35s: %s\n", "To query current Configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" query");
-    printf(IDENT2"%-35s: %s\n", "To set Configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" set SRIOV_EN=1 NUM_OF_VFS=16 WOL_MAGIC_EN_P1=1");
-    printf(IDENT2"%-35s: %s\n", "To reset Configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" reset");
+    printf(IDENT2"%-35s: %s\n", "To query current configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" query");
+    printf(IDENT2"%-35s: %s\n", "To set configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" set SRIOV_EN=1 NUM_OF_VFS=16 WOL_MAGIC_EN_P1=1");
+    printf(IDENT2"%-35s: %s\n", "To set raw configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE2" -f conf_file set_raw");
+    printf(IDENT2"%-35s: %s\n", "To reset configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" reset");
     printf("\n");
     printf(IDENT"Supported devices:\n");
-    printf(IDENT2"ConnectX3, ConnectX3-Pro (FW 2.31.5000 and above).\n");
-    printf(IDENT2"ConnectIB, ConnectX4.\n");
+    printf(IDENT2"4th Generation devices: ConnectX3, ConnectX3-Pro (FW 2.31.5000 and above).\n");
+    printf(IDENT2"5th Generation devices: ConnectIB, ConnectX4, ConnectX4-LX.\n");
     printf("\n");
     printf(IDENT"Note: query device to view supported configurations.\n");
     printf("\n");
@@ -119,7 +232,7 @@ void MlxCfg::printVersion()
 
 void MlxCfg::printUsage() {
     printf("\n"IDENT"Usage:\n"
-           IDENT2    MLXCFG_NAME " [-d <device> ] [-y] <s[et] <parameters to set>|q[uery]|r[eset]>\n\n");
+           IDENT2    MLXCFG_NAME " [-d <%s> ] [-y] <s[et] <parameters to set>|q[uery]|r[eset]>\n\n", DEVICE_NAME);
 }
 
 bool MlxCfg::tagExsists(mlxCfgParam tag) {
@@ -144,7 +257,6 @@ mlxCfgStatus MlxCfg::processArg(string tag, u_int32_t val)
             break;
         }
     }
-    // we dont support BAR_SZ atm
     if (i == Mcp_Last) {
         return err(true, "Unknown Parameter: %s", tag.c_str());
     }
@@ -152,7 +264,7 @@ mlxCfgStatus MlxCfg::processArg(string tag, u_int32_t val)
 }
 
 
-static bool strToNum(string str, u_int16_t& num, int base=0)
+static bool strToNum(string str, u_int32_t& num, int base=0)
 {
     char *endp;
     char* numStr = strcpy(new char[str.size()],str.c_str());
@@ -174,7 +286,7 @@ mlxCfgStatus MlxCfg::extractCfgArgs(int argc, char* argv[])
     int i = 0;
     string tag;
     string valstr;
-    u_int16_t val = 0;
+    u_int32_t val = 0;
     for (;i < argc;i++) {
         char* ptr;
         // get the tag
@@ -193,7 +305,7 @@ mlxCfgStatus MlxCfg::extractCfgArgs(int argc, char* argv[])
             return err(true, "Invalid Configuration argument %s", argv[i]);
         }
         //printf("-D- %s %s\n", tag.c_str(), valstr.c_str());
-        if (!strToNum(valstr, val, 10)) {
+        if (!strToNum(valstr, val, 0)) {
             return err(true, "Failed to parse %s=%s", tag.c_str(), valstr.c_str());
         }
         // store val in the correct place in  mlxconfig Params
@@ -224,7 +336,12 @@ mlxCfgStatus MlxCfg::parseArgs(int argc, char* argv[])
             _mlxParams.device = argv[i];
         } else if (arg == "-y" || arg == "--yes") {
             _mlxParams.yes = true;
-        } else if (arg == "set" || arg == "s") {
+        } else if (arg == "-f" || arg == "--file") {
+            if (++i == argc) {
+                return err(true, "missing file name");
+            }
+            _mlxParams.rawTlvFile = argv[i];
+        }else if (arg == "set" || arg == "s") {
             _mlxParams.cmd = Mc_Set;
             break;
 
@@ -239,8 +356,11 @@ mlxCfgStatus MlxCfg::parseArgs(int argc, char* argv[])
         } else if (arg == "clear_semaphore") {
             _mlxParams.cmd = Mc_Clr_Sem;
             break;
+        } else if (arg == "set_raw") {
+            _mlxParams.cmd = Mc_Set_Raw;
+            break;
         // hidden flag --force used to ignore parameter checks
-        } else if (arg == "--force"){
+        }else if (arg == "--force"){
             _mlxParams.force = true;
         } else {
             return err(true, "invalid argument: %s", arg.c_str());
@@ -257,8 +377,14 @@ mlxCfgStatus MlxCfg::parseArgs(int argc, char* argv[])
     if (i != argc && (_mlxParams.cmd == Mc_Reset || _mlxParams.cmd == Mc_Query)) {
         return err(true, "%s command expects no argument but %d argument recieved", (_mlxParams.cmd == Mc_Reset) ? "reset" : "query", argc -i);
     }
-    if ((_mlxParams.cmd == Mc_Set || _mlxParams.cmd == Mc_Clr_Sem) && _mlxParams.device.length() == 0) {
-        return err(true, "%s command expects device to be specified.", _mlxParams.cmd == Mc_Set ? "set" : "clear_semaphore");
+    if ((_mlxParams.cmd == Mc_Set || _mlxParams.cmd == Mc_Clr_Sem || _mlxParams.cmd == Mc_Set_Raw) && _mlxParams.device.length() == 0) {
+        return err(true, "%s command expects device to be specified.", _mlxParams.cmd == Mc_Set ? "set" : _mlxParams.cmd == Mc_Set_Raw ? "set_raw" : "clear_semaphore");
+    }
+    if ((_mlxParams.cmd == Mc_Set_Raw && _mlxParams.rawTlvFile.size() == 0 )) {
+        return err(true, "set_raw command expects raw TLV file to be specified.");
+    }
+    if ((_mlxParams.cmd != Mc_Set_Raw && _mlxParams.rawTlvFile.size() != 0 )) {
+        return err(true, "raw TLV file can only be specified with set_raw command.");
     }
 
     return extractCfgArgs(argc-i, &(argv[i]));
diff --git a/mlxconfig/mlxcfg_status.h b/mlxconfig/mlxcfg_status.h
index 72b9385..ba50807 100644
--- a/mlxconfig/mlxcfg_status.h
+++ b/mlxconfig/mlxcfg_status.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,12 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-/*
- * mlxcfg_status.h
  *
- *  Created on: Mar 23, 2015
- *      Author: adrianc
+ *  Version: $Id$
+ *
  */
 
 #ifndef MLXCFG_STATUS_H_
diff --git a/mlxconfig/mlxcfg_ui.cpp b/mlxconfig/mlxcfg_ui.cpp
index e7e0407..f78132a 100644
--- a/mlxconfig/mlxcfg_ui.cpp
+++ b/mlxconfig/mlxcfg_ui.cpp
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #include <stdlib.h>
@@ -36,6 +38,8 @@
 #include <stdarg.h>
 #include <signal.h>
 #include <iostream>
+#include <fstream>
+#include <sstream>
 
 #include <tools_dev_types.h>
 
@@ -113,6 +117,7 @@ void initHandler()
 #define MAX_ERR_STR_LEN 1024
 #define MAX_BUF_SIZE 1024
 #define PRE_ERR_MSG "-E-"
+#define MLNX_RAW_TLV_FILE_SIG "MLNX_RAW_TLV_FILE"
 
 #ifdef MST_UL
     #define NO_DEV_ERR "No devices found."
@@ -120,8 +125,32 @@ void initHandler()
     #define NO_DEV_ERR "No devices found, mst might be stopped. You may need to run 'mst start' to load MST modules. "
 #endif
 
-std::string MlxCfgParams::param2str[Mcp_Last]= {"SRIOV_EN", "NUM_OF_VFS", "FPP_EN", "WOL_MAGIC_EN_P1", "WOL_MAGIC_EN_P2",\
-                                                "LINK_TYPE_P1", "LINK_TYPE_P2", "LOG_BAR_SIZE", "INT_LOG_MAX_PAYLOAD_SIZE"};
+// TODO: adrianc: change to map<mlxCfgParam, string>
+std::string MlxCfgParams::param2str[Mcp_Last]= {"SRIOV_EN", "NUM_OF_VFS", "FPP_EN",
+                                                "WOL_MAGIC_EN_P1", "WOL_MAGIC_EN_P2",
+                                                "WOL_MAGIC_EN",
+                                                "LINK_TYPE_P1", "LINK_TYPE_P2",
+                                                "LOG_BAR_SIZE",
+                                                "INT_LOG_MAX_PAYLOAD_SIZE",
+                                                "BOOT_PKEY_P1", "BOOT_PKEY_P2",
+                                                "LOG_DCR_HASH_TABLE_SIZE", "DCR_LIFO_SIZE",
+                                                 "PORT_BOOT_STATE_P1", "PORT_BOOT_STATE_P2",
+                                                 "ROCE_NEXT_PROTOCOL",
+                                                 "ROCE_CC_ALGORITHM_P1", "ROCE_CC_PRIO_MASK_P1", "ROCE_CC_ALGORITHM_P2", "ROCE_CC_PRIO_MASK_P2",
+                                                 "CLAMP_TGT_RATE_P1", "CLAMP_TGT_RATE_AFTER_TIME_INC_P1", "RPG_TIME_RESET_P1",
+                                                 "RPG_BYTE_RESET_P1", "RPG_THRESHOLD_P1", "RPG_MAX_RATE_P1", "RPG_AI_RATE_P1",
+                                                 "RPG_HAI_RATE_P1", "RPG_GD_P1", "RPG_MIN_DEC_FAC_P1", "RPG_MIN_RATE_P1",
+                                                 "RATE_TO_SET_ON_FIRST_CNP_P1", "DCE_TCP_G_P1", "DCE_TCP_RTT_P1",
+                                                 "RATE_REDUCE_MONITOR_PERIOD_P1", "INITIAL_ALPHA_VALUE_P1", "MIN_TIME_BETWEEN_CNPS_P1",
+                                                 "CNP_DSCP_P1", "CNP_802P_PRIO_P1",
+                                                 "CLAMP_TGT_RATE_P2", "CLAMP_TGT_RATE_AFTER_TIME_INC_P2", "RPG_TIME_RESET_P2",
+                                                 "RPG_BYTE_RESET_P2", "RPG_THRESHOLD_P2", "RPG_MAX_RATE_P2", "RPG_AI_RATE_P2",
+                                                 "RPG_HAI_RATE_P2", "RPG_GD_P2", "RPG_MIN_DEC_FAC_P2", "RPG_MIN_RATE_P2",
+                                                 "RATE_TO_SET_ON_FIRST_CNP_P2", "DCE_TCP_G_P2", "DCE_TCP_RTT_P2", "RATE_REDUCE_MONITOR_PERIOD_P2",
+                                                 "INITIAL_ALPHA_VALUE_P2", "MIN_TIME_BETWEEN_CNPS_P2", "CNP_DSCP_P2", "CNP_802P_PRIO_P2",
+                                                 "BOOT_OPTION_ROM_EN_P1", "BOOT_VLAN_EN_P1", "BOOT_RETRY_CNT_P1", "LEGACY_BOOT_PROTOCOL_P1", "BOOT_VLAN_P1",
+                                                 "BOOT_OPTION_ROM_EN_P2", "BOOT_VLAN_EN_P2", "BOOT_RETRY_CNT_P2", "LEGACY_BOOT_PROTOCOL_P2", "BOOT_VLAN_P2",
+                                                  };
 
 u_int32_t MlxCfgParams::getParamVal(mlxCfgParam p)
 {
@@ -205,7 +234,12 @@ mlxCfgStatus MlxCfg::queryDevsCfg()
         char pcibuf[32]= {0};
 
         for(int i=0 ; i < numOfDev ; i++) {
-            snprintf(pcibuf,32, "%04x:%02x:%02x.%x", devPtr->pci.domain, devPtr->pci.bus,\
+#ifdef __FREEBSD__
+            const char* device_name_ptrn = "pci%d:%d:%d:%d";
+#else
+            const char* device_name_ptrn = "%04x:%02x:%02x.%x";
+#endif
+            snprintf(pcibuf,32, device_name_ptrn, devPtr->pci.domain, devPtr->pci.bus,\
                     devPtr->pci.dev, devPtr->pci.func);
             if (queryDevCfg(devPtr->pci.conf_dev, pcibuf, i+1)){
                 printErr();
@@ -223,20 +257,20 @@ static void printParam(u_int32_t param)
     if (param == MLXCFG_UNKNOWN) {
             printf("%-16s", "N/A");
         } else {
-            printf("%-16d", param);
+            printf("%-16u", param);
         }
     return;
 }
 
 static void printOneParam(const char* name, u_int32_t currVal, bool printNewCfg=false, u_int32_t newVal= MLXCFG_UNKNOWN)
 {
-    printf("         %-32s", name);
+    printf("         %-36s", name);
     printParam(currVal);
     if (printNewCfg) {
         if (newVal == MLXCFG_UNKNOWN) {
             printParam(currVal);
         } else {
-            printf("%-16d", newVal);
+            printf("%-16u", newVal);
         }
     }
     printf("\n");
@@ -286,7 +320,7 @@ mlxCfgStatus MlxCfg::queryDevCfg(const char* dev,const char* pci, int devIndex,
     }
 
     //print configuration Header
-    printf("%-16s%32s","Configurations:","Current");
+    printf("%-16s%36s","Configurations:","Current");
     if (printNewCfg) {
         printf("         %s", "New");
     }
@@ -438,6 +472,87 @@ mlxCfgStatus MlxCfg::clrDevSem()
     return MLX_CFG_OK;
 }
 
+mlxCfgStatus MlxCfg::setDevRawCfg()
+{
+    // open device
+    MlxCfgOps ops;
+    bool rc;
+    rc = ops.open(_mlxParams.device.c_str());
+    if (rc) {
+        return err(true, "Failed to set configuration on device: %s. %s", _mlxParams.device.c_str(), \
+               ops.err());
+    }
+    // open file
+    std::ifstream ifs(_mlxParams.rawTlvFile.c_str());
+    if (ifs.fail()) {
+        return err(true, "Failed to open file: %s", _mlxParams.rawTlvFile.c_str());
+    }
+    std::vector<std::vector<u_int32_t> > rawTlvsAsDw;
+    rawTlvsAsDw.resize(0);
+    // Check file Sig
+    std::string startLine;
+    std::getline(ifs, startLine);
+    if (startLine != MLNX_RAW_TLV_FILE_SIG) {
+        return err(true, "Invalid raw TLV file header.");
+    }
+    // parse the rest of the Lines
+    int lineIdx = 1;
+    for (std::string line; std::getline(ifs, line); lineIdx++) {
+        std::vector<u_int32_t> rawTlvVec;
+        if (line[0] == '%') { // comment - skip
+            continue;
+        }
+        // convert line to DW
+        if (tlvLine2DwVec(line, rawTlvVec)) {
+            return err(true, "Failed to parse Raw TLV at line %d: %s", lineIdx, _errStr.c_str());
+        }
+        rawTlvsAsDw.push_back(rawTlvVec);
+    }
+    // dump raw TLVs from the file
+    std::string dumpStr;
+    int tlvIdx = 1;
+    for (std::vector<std::vector<u_int32_t> >::iterator it = rawTlvsAsDw.begin(); it != rawTlvsAsDw.end(); it++, tlvIdx++) {
+        if (ops.dumpRawCfg(*it, dumpStr)) {
+            return err(true, "Error at Raw TLV #%d: %s", tlvIdx, ops.err());
+        }
+        printf("Raw TLV #%d Info:\n%s\n", tlvIdx, dumpStr.c_str());
+    }
+    // ask user
+    if(!askUser("Operation intended for advanced users.\n Are you sure you want to apply raw TLV file?")) {
+        printErr();
+        return MLX_CFG_ABORTED;
+    }
+    printf("Applying... ");
+    // set each of the raw TLVs
+    tlvIdx = 1;
+    for (std::vector<std::vector<u_int32_t> >::iterator it = rawTlvsAsDw.begin(); it != rawTlvsAsDw.end(); it++, tlvIdx++) {
+        if (ops.setRawCfg(*it)) {
+            printf("Failed!\n");
+            return err(true, "Failed to set Raw TLV #%d: %s", tlvIdx, ops.err());
+        }
+    }
+    // done successfully
+    printf("Done!\n");
+    printf("-I- Please reboot machine to load new configurations.\n");
+    return MLX_CFG_OK;
+}
+
+mlxCfgStatus MlxCfg::tlvLine2DwVec(const std::string& tlvStringLine, std::vector<u_int32_t>& tlvVec) {
+    tlvVec.resize(0);
+    std::string dwStr;
+    u_int32_t dw;
+    char* p = NULL;
+    std::istringstream isstm(tlvStringLine);
+    while (isstm >> dwStr) {
+        dw = strtoul(dwStr.c_str(), &p, 0);
+        if (*p) {
+            return err(false, "Input is not an unsigned number: %s", dwStr.c_str());
+        }
+        tlvVec.push_back(dw);
+    }
+    return MLX_CFG_OK;
+}
+
 mlxCfgStatus MlxCfg::resetDevCfg(const char* dev)
 {
     MlxCfgOps ops;
@@ -485,6 +600,9 @@ mlxCfgStatus MlxCfg::execute(int argc, char* argv[])
     case Mc_Clr_Sem:
         ret = clrDevSem();
         break;
+    case Mc_Set_Raw:
+        ret = setDevRawCfg();
+        break;
     default:
         // should not reach here.
         return err(true, "invalid command.");
diff --git a/mlxconfig/mlxcfg_ui.h b/mlxconfig/mlxcfg_ui.h
index b1b13fe..a83f2b1 100644
--- a/mlxconfig/mlxcfg_ui.h
+++ b/mlxconfig/mlxcfg_ui.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #ifndef MLXCFG_UI_H_
@@ -45,6 +47,7 @@ typedef enum {
     Mc_Query,
     Mc_Reset,
     Mc_Clr_Sem,
+    Mc_Set_Raw,
     Mc_UnknownCmd
 } mlxCfgCmd;
 
@@ -60,10 +63,11 @@ typedef enum {
 class MlxCfgParams
 {
 public:
-    MlxCfgParams() : device(),cmd(Mc_UnknownCmd), yes(false), force(false) {}
+    MlxCfgParams() : device(), rawTlvFile(), cmd(Mc_UnknownCmd), yes(false), force(false) {}
     ~MlxCfgParams() {}
 
     std::string device;
+    std::string rawTlvFile;
     mlxCfgCmd cmd;
     bool yes;
     std::vector<cfgInfo> params;
@@ -102,6 +106,9 @@ private:
     // reset Cmd
     mlxCfgStatus resetDevsCfg();
     mlxCfgStatus resetDevCfg(const char* dev);
+    // Set Raw TLV file
+    mlxCfgStatus setDevRawCfg();
+    mlxCfgStatus tlvLine2DwVec(const std::string& tlvStringLine, std::vector<u_int32_t>& tlvVec);
 
     mlxCfgStatus clrDevSem();
     //
diff --git a/mlxfwops/lib/Makefile.am b/mlxfwops/lib/Makefile.am
index 68e05e2..050c2fc 100755
--- a/mlxfwops/lib/Makefile.am
+++ b/mlxfwops/lib/Makefile.am
@@ -38,9 +38,10 @@ MINIXZ_DIR = $(top_srcdir)/ext_libs/minixz
 COMMON_DIR = $(top_srcdir)/common
 LAYOUTS_DIR = $(top_srcdir)/tools_layouts
 UTILS_LIB = $(top_srcdir)/mft_utils
+UEFI_COMMON_DIR = $(top_srcdir)/mlxfwops/uefi_c
 
 INCLUDES = -I$(srcdir) -I$(MTCR_INC_DIR) -I$(MFLASH_DIR) -I$(top_srcdir)/ext_libs/json -I$(MINIXZ_DIR)\
-           -I$(COMMON_DIR) -I$(MFT_EXT_LIBS_INC_DIR)/zlib -I $(LAYOUTS_DIR) -I$(top_srcdir)/common -I$(UTILS_LIB)
+           -I$(COMMON_DIR) -I$(MFT_EXT_LIBS_INC_DIR)/zlib -I $(LAYOUTS_DIR) -I$(top_srcdir)/common -I$(UTILS_LIB) -I$(UEFI_COMMON_DIR)
 
 MLXFWOPS_VERSION = 1
 
diff --git a/mlxfwops/lib/Makefile.in b/mlxfwops/lib/Makefile.in
index 8503f86..b26c0a4 100644
--- a/mlxfwops/lib/Makefile.in
+++ b/mlxfwops/lib/Makefile.in
@@ -346,8 +346,9 @@ MINIXZ_DIR = $(top_srcdir)/ext_libs/minixz
 COMMON_DIR = $(top_srcdir)/common
 LAYOUTS_DIR = $(top_srcdir)/tools_layouts
 UTILS_LIB = $(top_srcdir)/mft_utils
+UEFI_COMMON_DIR = $(top_srcdir)/mlxfwops/uefi_c
 INCLUDES = -I$(srcdir) -I$(MTCR_INC_DIR) -I$(MFLASH_DIR) -I$(top_srcdir)/ext_libs/json -I$(MINIXZ_DIR)\
-           -I$(COMMON_DIR) -I$(MFT_EXT_LIBS_INC_DIR)/zlib -I $(LAYOUTS_DIR) -I$(top_srcdir)/common -I$(UTILS_LIB)
+           -I$(COMMON_DIR) -I$(MFT_EXT_LIBS_INC_DIR)/zlib -I $(LAYOUTS_DIR) -I$(top_srcdir)/common -I$(UTILS_LIB) -I$(UEFI_COMMON_DIR)
 
 MLXFWOPS_VERSION = 1
 AM_CXXFLAGS = -Wall -W -g -MP -MD -pipe -DNO_MFA_SUPPORT
diff --git a/mlxfwops/lib/flint_base.cpp b/mlxfwops/lib/flint_base.cpp
index fe6574c..9546574 100755
--- a/mlxfwops/lib/flint_base.cpp
+++ b/mlxfwops/lib/flint_base.cpp
@@ -159,21 +159,21 @@ void report_warn(const char *format, ...)
 #endif
 }
 
+bool ErrMsg::errmsg(const char *format, ...) {
+    va_list   args;
 
+    char* prev_err = _err;
 
+    va_start(args, format);
+    _err = vprint(format, args);
+    va_end(args);
 
-const CommandInfo* GetCommandInfo(CommandType cmd) {
-    for (u_int32_t i = 0 ; i < numbel(g_commands); i++ ) {
-        if (cmd == g_commands[i].cmd) {
-            return &g_commands[i];
-        }
-    }
+    delete[] prev_err;
 
-    return (CommandInfo*)NULL;
+    return false;
 }
 
-
-bool ErrMsg::errmsg(const char *format, ...) {
+bool ErrMsg::errmsg(int errorCode, const char *format, ...) {
     va_list   args;
 
     char* prev_err = _err;
@@ -183,7 +183,7 @@ bool ErrMsg::errmsg(const char *format, ...) {
     va_end(args);
 
     delete[] prev_err;
-
+    _errCode = errorCode;
     return false;
 }
 
diff --git a/mlxfwops/lib/flint_base.h b/mlxfwops/lib/flint_base.h
index c2f0896..4c7f34a 100755
--- a/mlxfwops/lib/flint_base.h
+++ b/mlxfwops/lib/flint_base.h
@@ -71,18 +71,6 @@
 // djgpp stdio does not define vsnprintf. I simply call vsprintf (and pray ...)
         #define vsnprintf(buf, len, format, args) (vsprintf(buf, format, args))
         #define snprintf(buf, len, format, args...) (sprintf(buf, format, args))
-    #else // Linux GCC
-        #ifdef __FreeBSD__
-            #define SWAPL(l) ntohl(l)
-            #include <sys/endian.h>
-            #define bswap_32(x) ntohl(x)
-        #else // Linux
-            #include <byteswap.h>
-            #include <endian.h>
-        #endif
-        #include <netinet/in.h>
-        #include <unistd.h>
-
     #endif // __DJGPP__
 
 #else // __WIN__
@@ -90,9 +78,6 @@
 //
 // Windows (Under DDK)
 //
-
-    #include <io.h>
-    #include <Winsock2.h>
     #include <mtcr.h>
 // Sleep adaptor
     #define usleep(x) Sleep((x)/1000)
@@ -101,25 +86,9 @@
     #define vsnprintf      _vsnprintf
     #define isatty         _isatty
 
-    #define COMP_CDECL     __cdecl
-
-    #define __LITTLE_ENDIAN 1234
-    #define __BIG_ENDIAN 4321
-    #define __BYTE_ORDER __LITTLE_ENDIAN
-
-
-
-    #if __BYTE_ORDER == __LITTLE_ENDIAN
-        #define bswap_32(x) ntohl(x)
-    #else
-        #error windows is assumed to run a on little endian architecture
-    #endif
-
     // MINGW
     #if defined(__MINGW32__) || (__MINGW64__)
-        #define strtoull       strtoull
         #define _UNISTD_H // Zlib includes unistd.h which causes some compilation errors.
-
     #else
         #define strtoull       _strtoui64
     #endif
@@ -127,7 +96,7 @@
 
 
 #include <vector>
-#include "compatibility.h"
+#include <compatibility.h>
 #include "mlxfwops_com.h"
 
 static inline void be_guid_to_cpu(guid_t* to, guid_t* from) {
@@ -218,7 +187,7 @@ namespace std {}; using namespace std;
 #define FS_DATA_OFF      0x28
 #define SWITCHX_HW_ID    581
 #define SWITCH_IB_HW_ID  583
-#define SWITCH_EN_HW_ID  585
+#define SPECTRUM_HW_ID  585
 
 #define CX4_HW_ID         521
 #define CX4LX_HW_ID       523
@@ -367,68 +336,7 @@ enum CommandType {
     CMD_SET_MFG_GUIDS,
     CMD_BURN_VPD,
 };
-enum CommandInput {
-    CI_NONE         = 0x01,
-    CI_IMG_ONLY     = 0x02,
-    CI_DEV_ONLY     = 0x04,
-    CI_IMG_OR_DEV   = 0x06,
-    CI_IMG_AND_DEV  = 0x08
-};
-
-
 
-struct CommandInfo {
-    CommandType  cmd;
-    const char*  cmdName;
-    bool         requireExactMatch;
-    int          maxArgs;
-    CommandInput requiredInput;
-    const char*  cmdDescription;
-
-};
-
-
-////////////////////////////////////////////////////////////////////////
- //
- // Commands database and parsing methods
- //
-////////////////////////////////////////////////////////////////////////
-CommandInfo const g_commands[] = {
-    { CMD_BURN           , "burn"  ,false , 0, CI_IMG_AND_DEV , ""},
-    { CMD_BURN_BLOCK     , "bb"    ,true  , 0, CI_IMG_AND_DEV , ""},
-    { CMD_SET_GUIDS      , "sg"    ,true  , 1, CI_IMG_OR_DEV  , ""},
-    { CMD_SET_MFG_GUIDS  , "smg"    ,true  , 0, CI_IMG_ONLY  , ""},
-    { CMD_BURN_VPD       , "set_vpd"    ,true  , 1, CI_IMG_ONLY  , ""},
-
-
-    { CMD_SET_VSD        , "sv"    ,true  , 0, CI_IMG_OR_DEV  , ""},
-    { CMD_SET_KEY        , "set_key" ,true , 1, CI_DEV_ONLY  , ""},
-    { CMD_QUERY_FORCE    , "qf"    ,true  , 0, CI_IMG_OR_DEV  , ""},
-    { CMD_QUERY          , "query" ,false , 1, CI_IMG_OR_DEV  , ""},
-    { CMD_QUERY_ROM      , "qrom"  ,true  , 0, CI_IMG_ONLY    , ""},
-    { CMD_VERIFY         , "verify",false , 1, CI_IMG_OR_DEV  , ""},
-    { CMD_READ_WORD      , "rw"    ,true  , 1, CI_DEV_ONLY    , ""},
-    { CMD_READ_BLOCK     , "rb"    ,true  , 3, CI_IMG_OR_DEV  , ""},
-    { CMD_WRITE_WORD     , "ww"    ,true  , 2, CI_DEV_ONLY    , ""},
-    { CMD_WRITE_WORD_NE  , "wwne"  ,true  , 2, CI_DEV_ONLY    , ""},
-    { CMD_WRITE_BLOCK    , "wb"    ,true  , 2, CI_DEV_ONLY    , ""},
-    { CMD_WRITE_BLOCK_NE , "wbne"  ,true  ,-1, CI_DEV_ONLY    , ""},
-    { CMD_ERASE_SECT     , "erase" ,false , 1, CI_DEV_ONLY    , ""},
-    { CMD_DUMP_CONF      , "dc"    ,true  , 1, CI_IMG_OR_DEV  , ""},
-    { CMD_DUMP_HASH      , "dh"    ,true  , 1, CI_IMG_OR_DEV  , ""},
-    { CMD_DUMP_JSON      , "dj"    ,true  , 1, CI_IMG_OR_DEV  , ""},
-    { CMD_READ_IMAGE     , "ri"    ,true  , 1, CI_DEV_ONLY    , ""},
-    { CMD_CLEAR_SEM      , "clear_semaphore"   ,true  , 0 , CI_DEV_ONLY    , ""},
-    { CMD_SWRESET        , "swreset" ,true , 0, CI_DEV_ONLY    , ""},
-    { CMD_HW_INFO        , "hw"      ,false  , 2, CI_DEV_ONLY    , ""},
-    { CMD_BURN_ROM       , "brom"    ,true  , 1, CI_DEV_ONLY    , ""},
-    { CMD_REMOVE_ROM     , "drom"    ,true  , 0, CI_DEV_ONLY    , ""},
-    { CMD_READ_ROM       , "rrom"    ,true  , 1, CI_DEV_ONLY   , ""},
-    { CMD_HW_ACCESS      , "hw_access" , true , 2, CI_DEV_ONLY   , ""},
-    { CMD_DUMP_TRACER_HASH , "dth"    ,true  , 1, CI_IMG_OR_DEV  , ""},
-
-
-};
 
 struct GPH {
     u_int32_t type;
@@ -448,12 +356,6 @@ struct BOARD_ID {
     char      bid[BOARD_ID_BID_LEN];
 };
 
-/*
-int  const VSD_LEN  = 208;
-int  const PSID_LEN = 16;
-int  const PRODUCT_VER_LEN = 16;
-*/
-
 #define PROFILES_LIST_SECT "Profiles List section"
 #define TLV_FORMAT_SECT    "TLVs format section"
 #define TRACER_HASH_SECT   "Tracer Hash section"
@@ -464,7 +366,6 @@ void report_callback(f_prog_func_str func_str, const char *format, ...);
 void report_err(char err_buff[MAX_ERR_STR_LEN], const char *format, ...);
 void report_warn(const char *format, ...);
 void report_repair_msg(const char* common_msg);
-const CommandInfo* GetCommandInfo(CommandType cmd);
 
 
 
@@ -475,10 +376,11 @@ const CommandInfo* GetCommandInfo(CommandType cmd);
 
 class MLXFWOP_API ErrMsg {
 public:
-    ErrMsg() : _err(0)       {}
+    ErrMsg() : _err(0), _errCode(0){}
     ~ErrMsg()                { err_clear();}
     const char *err() const  { return _err;}
     void err_clear();
+    int getErrorCode() {return _errCode;}
 
 protected:
 
@@ -506,6 +408,12 @@ protected:
 #endif
     ;
 
+    bool errmsg(int errorCode, const char *format, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 3, 4)))
+#endif
+    ;
+
     // this is abit ugly as there are no checks on the normalFmt string
     bool errmsgAdv(bool showAdv, const char *normalFmt, const char *AdvFmt, ...)
 #ifdef __GNUC__
@@ -516,6 +424,7 @@ protected:
 private:
 
     char       *_err;
+    int         _errCode;
 };
 
 
diff --git a/mlxfwops/lib/flint_io.cpp b/mlxfwops/lib/flint_io.cpp
index 78f7053..5cb77c5 100755
--- a/mlxfwops/lib/flint_io.cpp
+++ b/mlxfwops/lib/flint_io.cpp
@@ -45,6 +45,13 @@ extern bool _no_burn;
 
 extern const char* g_sectNames[];
 
+#ifdef UEFI_BUILD
+// no signal handling.
+void mft_signal_set_handling(int isOn) {
+	return;
+}
+#endif
+
 ////////////////////////////////////////////////////////////////////////
 //
 // FImage Class Implementation
@@ -279,11 +286,11 @@ bool Flash::open(const char *device, bool force_lock, bool read_only, int num_of
 }
 
 ////////////////////////////////////////////////////////////////////////
-bool Flash::open(uefi_Dev_t *uefi_dev, f_fw_cmd fw_cmd_func, bool force_lock, bool advErr)
+bool Flash::open(uefi_Dev_t *uefi_dev, uefi_dev_extra_t* uefi_extra, bool force_lock, bool advErr)
 {
     int rc;
     _advErrors = advErr;
-    rc = mf_open_uefi(&_mfl, uefi_dev, fw_cmd_func);
+    rc = mf_open_uefi(&_mfl, uefi_dev, uefi_extra);
     return open_com_checks("uefi", rc, force_lock);
 }
 
@@ -559,6 +566,7 @@ bool Flash::write_sector_with_erase(u_int32_t addr, void *data, int cnt)
     }
 
     memcpy(&buff[word_in_sector], data, cnt);
+
     // no need to erase twice noerase=true
     return write(sector, &buff[0], sector_size, true);
 }
@@ -567,12 +575,18 @@ bool Flash::write_with_erase(u_int32_t addr, void *data, int cnt)
 {
     u_int32_t towrite = (u_int32_t)cnt;
     u_int32_t currSize;
+    u_int32_t currAddr = addr;
+    u_int32_t alreadyWritten = 0;
+    u_int32_t sizeUntillEndOfSector = 0;
     while (towrite > 0) {
-        currSize = towrite > _attr.sector_size ? (_attr.sector_size) : towrite;
-        if (!write_sector_with_erase(addr, data, currSize)) {
+        sizeUntillEndOfSector = _attr.sector_size - (currAddr & (_attr.sector_size - 1));
+        currSize = towrite >  sizeUntillEndOfSector ? sizeUntillEndOfSector : towrite;
+        if (!write_sector_with_erase(currAddr, ((u_int8_t*)data + alreadyWritten), currSize)) {
             return false;
         }
         towrite -= currSize;
+        currAddr += currSize;
+        alreadyWritten += currSize;
     }
     return true;
 }
@@ -726,7 +740,6 @@ bool  Flash::set_attr(char *param_name, char *param_val_str)
         if (!strcmp(param_str, WRITE_PROTECT)) {
             write_protect_info_t protect_info;
             char *tb, *num_str, *sec;
-
             if (!strcmp(param_val_str, WP_DISABLED_STR)) {
                 memset(&protect_info, 0, sizeof(protect_info));
             } else {
@@ -756,7 +769,6 @@ bool  Flash::set_attr(char *param_name, char *param_val_str)
     } else {
         return errmsg("Unknown attribute %s", param_name);
     }
-
     return true;
 }
 
@@ -783,6 +795,7 @@ bool Flash::is_flash_write_protected()
 
 void Flash::deal_with_signal()
 {
+#ifndef UEFI_BUILD
     int sig;
     sig = mft_signal_is_fired();
     if (sig) {
@@ -794,6 +807,7 @@ void Flash::deal_with_signal()
         raise(sig);
     }
     mft_signal_set_handling(0);
+#endif
     return;
 }
 
diff --git a/mlxfwops/lib/flint_io.h b/mlxfwops/lib/flint_io.h
index c37f981..e4ff181 100755
--- a/mlxfwops/lib/flint_io.h
+++ b/mlxfwops/lib/flint_io.h
@@ -52,7 +52,10 @@
 
 #include "flint_base.h"
 #include <mflash.h>
+
+#ifndef UEFI_BUILD
 #include <mft_sig_handler.h>
+#endif
 
 // external flash attr struct
 
@@ -218,7 +221,7 @@ class MLXFWOP_API Flash : public FBase {
 public:
     Flash() :
     FBase(true),
-    _mfl(NULL),
+    _mfl((mflash*)NULL),
     _no_flash_verify(false),
     _ignore_cache_replacement(false),
     _curr_sector(0xffffffff),
@@ -243,7 +246,7 @@ public:
     using FBase::open;
 
     bool open          (uefi_Dev_t *uefi_dev,
-                        f_fw_cmd fw_cmd_func,
+    					uefi_dev_extra_t* uefi_extra,
                         bool force_lock = false,
                         bool advErr = true);
 
diff --git a/mlxfwops/lib/fs2_ops.cpp b/mlxfwops/lib/fs2_ops.cpp
index b559c1f..c3151ad 100644
--- a/mlxfwops/lib/fs2_ops.cpp
+++ b/mlxfwops/lib/fs2_ops.cpp
@@ -88,12 +88,13 @@ bool Fs2Operations::ParseInfoSect(u_int8_t* buff, u_int32_t byteSize) {
         u_int32_t tagId   = __be32_to_cpu(*p) >> 24;
 
         if (offs + tagSize > byteSize) {
-            return errmsg("Info section corrupted: Tag %d (TagId %d, size %d) exceeds Info section size (%d bytes) ",
+            return errmsg(MLXFW_SECTION_TOO_LARGE_ERR, "Info section corrupted: Tag %d (TagId %d, size %d) exceeds Info section size (%d bytes) ",
                           tagNum, tagId, tagSize, byteSize);
         }
         // printf("-D- tagId = (%#x), tagSize = (%#x), offs = %#x\n", tagId, tagSize, offs);
         u_int32_t   tmp;
         const char* str;
+        int size;
         switch (tagId) {
         case II_FwVersion:
             _fwImgInfo.ext_info.fw_ver[0] = u_int16_t(__be32_to_cpu(*(p+1)) >> 16);
@@ -150,6 +151,17 @@ bool Fs2Operations::ParseInfoSect(u_int8_t* buff, u_int32_t byteSize) {
                 _fwImgInfo.ext_info.psid[PSID_LEN] = '\0';
             break;
 
+        case II_PSInfo:
+            str = (const char*)p;
+            str += 4;
+            size = strlen(str) + 1; // include '\0'
+            if (size > PRS_NAME_LEN ) {
+                // ensure '\0' at the end
+                size = PRS_NAME_LEN - 1;
+            }
+            memcpy(_fs2ImgInfo.ext_info.prs_name, str, size);
+            break;
+
         case II_VSD:
             // set psid only if not previosly found in PS
                 str = (const char*)p;
@@ -239,10 +251,10 @@ bool Fs2Operations::ParseInfoSect(u_int8_t* buff, u_int32_t byteSize) {
 
     if (offs != byteSize) {
         if (endFound) {
-            return errmsg("Info section corrupted: Section data size is 0x%x bytes, "
+            return errmsg(MLXFW_SECTION_CORRUPTED_ERR, "Info section corrupted: Section data size is 0x%x bytes, "
                           "but end tag found after 0x%x bytes.", byteSize, offs);
         } else {
-            return errmsg("Info section corrupted: Section data size is 0x%x bytes, "
+            return errmsg(MLXFW_SECTION_CORRUPTED_ERR, "Info section corrupted: Section data size is 0x%x bytes, "
                           "but end tag not found before section end.", byteSize);
         }
     }
@@ -436,10 +448,10 @@ bool Fs2Operations::Fs2Verify(VerifyCallBack verifyCallBackFunc, bool is_striped
     // Look for image in "physical addresses
     CntxFindAllImageStart(_ioAccess, cntx_image_start, &cntx_image_num);
     if (cntx_image_num == 0) {
-        return errmsg("No valid image found");
+        return errmsg(MLXFW_NO_VALID_IMAGE_ERR, "No valid image found");
     } else if (cntx_image_num > 2) {
         // This check may be redundant - Maybe ignore if more than 2 images found
-        return errmsg("More than 2 image start locations found at addresses 0x%x, 0x%x and 0x%x. Image may be corrupted.",
+        return errmsg(MLXFW_MULTIPLE_VALID_IMAGES_ERR, "More than 2 image start locations found at addresses 0x%x, 0x%x and 0x%x. Image may be corrupted.",
                       cntx_image_start[0],
                       cntx_image_start[1],
                       cntx_image_start[2]);
@@ -684,7 +696,7 @@ bool Fs2Operations::Fs2Query () {
     }
 
     if (info_ptr_cs) {
-        return errmsg("Failed to read Info Section - Bad checksum for Info section pointer (%08x). Probably the image is corrupted.", info_ptr);
+        return errmsg(MLXFW_BAD_CHECKSUM_ERR, "Failed to read Info Section - Bad checksum for Info section pointer (%08x). Probably the image is corrupted.", info_ptr);
     }
 
     info_ptr = info_ptr_ba.range(23,0);
@@ -693,7 +705,7 @@ bool Fs2Operations::Fs2Query () {
 
         info_ptr += im_start;
         if (info_ptr >= _ioAccess->get_size()) {
-            return errmsg("Failed to read Info Section - Info section pointer (%08x) too large. Probably the image is corrupted.", info_ptr);
+            return errmsg(MLXFW_SECTION_TOO_LARGE_ERR, "Failed to read Info Section - Info section pointer (%08x) too large. Probably the image is corrupted.", info_ptr);
         }
         READ4((*_ioAccess), info_ptr - 3*sizeof(u_int32_t), &info_size, "Info section size");
         TOCPU1(info_size);
@@ -722,7 +734,7 @@ bool Fs2Operations::Fs2IntQuery(bool readRom, bool isStripedImage)
     } else {
         initSectToRead(H_LAST);
     }
-    if (!Fs2Verify(NULL, isStripedImage)) {
+    if (!Fs2Verify((VerifyCallBack)NULL, isStripedImage)) {
         initSectToRead(H_LAST);
         return false;
     }
@@ -862,11 +874,11 @@ bool Fs2Operations::Fs2FailSafeBurn(Fs2Operations &imageOps,
     // TODO: Do we need the verify ORENK
     if (!allow_nofs) {
         if (!imageOps._fwImgInfo.ext_info.is_failsafe) {
-            return errmsg("The given image is not a failsafe image");
+            return errmsg(MLXFW_IMAGE_NOT_FS_ERR, "The given image is not a failsafe image");
         }
 
         if (_fwImgInfo.cntxLog2ChunkSize != imageOps._fwImgInfo.cntxLog2ChunkSize) {
-            return errmsg("Failsafe chunk sizes in flash (0x%x) and in image (0x%x) are not the same.",
+            return errmsg(MLXFW_FS_INFO_MISSMATCH_ERR, "Failsafe chunk sizes in flash (0x%x) and in image (0x%x) are not the same.",
                           1 << _fwImgInfo.cntxLog2ChunkSize,
                           1 << imageOps._fwImgInfo.cntxLog2ChunkSize);
         }
@@ -883,7 +895,7 @@ bool Fs2Operations::Fs2FailSafeBurn(Fs2Operations &imageOps,
         const char *image_type = (imageOps._fwImgInfo.ext_info.is_failsafe) ? "failsafe" : "non-failsafe";
         const char *note_str   = (imageOps._fwImgInfo.ext_info.is_failsafe) ? " - half of total flash size" : " - total flash size";
 
-        return errmsg("Size of %s image (0x%x) is greater than max %s image size (0x%x%s)",
+        return errmsg(MLXFW_IMAGE_TOO_LARGE_ERR, "Size of %s image (0x%x) is greater than max %s image size (0x%x%s)",
                  image_type, imageOps._fwImgInfo.ext_info.image_size, image_type, max_image_size, note_str);
 
     }
@@ -914,7 +926,7 @@ bool Fs2Operations::Fs2FailSafeBurn(Fs2Operations &imageOps,
     // Write new signature
     if (!f->write(0, data8, 16, true)) {
         //return false;
-        return errmsg("Flash write failed. %s", f->err());
+        return errmsg(MLXFW_FLASH_WRITE_ERR, "Flash write failed. %s", f->err());
     }
     bool boot_address_was_updated = true;
     // Write new image start address to crspace (for SW reset)
@@ -937,7 +949,7 @@ bool Fs2Operations::Fs2FailSafeBurn(Fs2Operations &imageOps,
                 if (cntx_image_start[i] != new_image_start) {
                     if (!f->write(cntx_image_start[i], &zeroes, sizeof(zeroes), true)) {
                         //return false;
-                        return errmsg("Flash write failed. %s", f->err());
+                        return errmsg(MLXFW_FLASH_WRITE_ERR, "Flash write failed. %s", f->err());
                     }
                 }
             }
@@ -946,7 +958,7 @@ bool Fs2Operations::Fs2FailSafeBurn(Fs2Operations &imageOps,
             f->set_address_convertor(imageOps._fwImgInfo.cntxLog2ChunkSize, is_curr_image_in_odd_chunks);
             if (!f->write(0, &zeroes, sizeof(zeroes), true)) {
                 //return false;
-                return errmsg("Flash write failed. %s", f->err());
+                return errmsg(MLXFW_FLASH_WRITE_ERR, "Flash write failed. %s", f->err());
             }
         }
     }
@@ -1344,7 +1356,7 @@ bool Fs2Operations::IntegrateDevRomInImage(Fs2Operations &imageOps)
     ((FImage*)(imageOps._ioAccess))->open((u_int32_t*)(&new_data[0]), actual_image_size);
 
 
-    if (!imageOps.FwVerify(NULL) || !imageOps.Fs2IntQuery()) {
+    if (!imageOps.FwVerify((VerifyCallBack)NULL) || !imageOps.Fs2IntQuery()) {
         return errmsg("Internal error: verify/query of image after integrating ROM failed\n");
     }
 
@@ -1355,7 +1367,7 @@ bool Fs2Operations::IntegrateDevRomInImage(Fs2Operations &imageOps)
 bool Fs2Operations::Fs2Burn(Fs2Operations &imageOps, ExtBurnParams& burnParams)
 {
     if (imageOps.FwType() != FIT_FS2) {
-        return errmsg("FW image type is not FS2\n");
+        return errmsg(MLXFW_IMAGE_FORMAT_ERR, "FW image type is not FS2\n");
     }
 
     if (!imageOps.Fs2IntQuery()) {
@@ -1369,25 +1381,21 @@ bool Fs2Operations::Fs2Burn(Fs2Operations &imageOps, ExtBurnParams& burnParams)
    }
 
     // Check Matching device ID
-    // HACK
-#ifndef UEFI_BUILD // NO Device ID here..
-
     if (!burnParams.noDevidCheck) {
         if (imageOps._fs2ImgInfo.infoOffs[II_HwDevsId]) {
              if (!CheckMatchingHwDevId(_ioAccess->get_dev_id(),
                                          _ioAccess->get_rev_id(),
                                          imageOps._fwImgInfo.supportedHwId,
                                          imageOps._fwImgInfo.supportedHwIdNum)) {
-                 return errmsg("Device/Image mismatch: %s\n",this->err( ));
+                 return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "Device/Image mismatch: %s\n",this->err( ));
              }
          } else if (imageOps._fs2ImgInfo.infoOffs[II_DeviceType]) {
              if (!CheckMatchingDevId(_ioAccess->get_dev_id(), imageOps._fwImgInfo.ext_info.dev_type)) {
-                 return errmsg("Device/Image mismatch: %s\n",this->err());
+                 return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "Device/Image mismatch: %s\n",this->err());
              }
          }
 
     }
-#endif
 
     // Check PSID
     if (devIntQueryRes && !CheckPSID(imageOps, burnParams.allowPsidChange)) {
@@ -1556,11 +1564,11 @@ bool Fs2Operations::ReburnNewImage(u_int8_t *data, const char *feature_name, Pro
 
     // Verify the new image and exit if it's not VALID.
     if (!((Fs2Operations*)newOps)->Fs2IntQuery()) {
-        return errmsg("Internal error: The prepared image After modifying the %s is corrupted: %s\n", feature_name, newOps->err());
+        return errmsg(MLXFW_IMAGE_CORRUPTED_ERR, "Internal error: The prepared image After modifying the %s is corrupted: %s\n", feature_name, newOps->err());
     }
     if (!is_image) {
         // Modify the flash
-        if (!Fs2FailSafeBurn(*((Fs2Operations*)newOps), true, NULL, callBackFunc)) {
+        if (!Fs2FailSafeBurn(*((Fs2Operations*)newOps), true, (const char*)NULL, callBackFunc)) {
             return false;
         }
     } else {
@@ -1716,7 +1724,7 @@ bool Fs2Operations::Fs2SetGuidsForBlank(sg_params_t& sgParam)
         u_int32_t new_crc_dw = CPUTO1(old_dw);
 
         if (!((Flash*)_ioAccess)->write(IMG_CRC_OFF, &new_crc_dw, 4, true)) {
-            return errmsg("flash write error (%s).", _ioAccess->err());
+            return errmsg(MLXFW_FLASH_WRITE_ERR, "flash write error (%s).", _ioAccess->err());
         }
     }
     return true;
@@ -1731,7 +1739,7 @@ bool Fs2Operations::Fs2SetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc
     // Get the FW types
     bx_dev = _fwImgInfo.ext_info.chip_type == CT_BRIDGEX;
     SetDevFlags(_fwImgInfo.ext_info.chip_type, _fwImgInfo.ext_info.dev_type, FIT_FS2, ib_dev, eth_dev);
-    guid_t* old_guids = _fwImgInfo.imageOk ? _fs2ImgInfo.ext_info.guids : NULL;
+    guid_t* old_guids = _fwImgInfo.imageOk ? _fs2ImgInfo.ext_info.guids : (guid_t*)NULL;
     guid_t* used_guids;
 
     // Patch the GUIDs and prints any needed warnings
@@ -1891,7 +1899,7 @@ bool Fs2Operations::FwDeleteRom(bool ignoreProdIdCheck, ProgressCallBack progres
     }
     int new_image_size;
     if(!UpdateRomInImage((u_int8_t*)(&new_data[0]), (u_int8_t*)(&data[0]),
-                             NULL, 0, &new_image_size)) {
+                             (u_int8_t*)NULL, 0, &new_image_size)) {
         return errmsg("%s", _ioAccess->err());
     }
 
@@ -2040,7 +2048,7 @@ bool Fs2Operations::FwShiftDevData(PrintCallBack progressFunc)
 const char* Fs2Operations::FwGetResetRecommandationStr()
 {
     if (!_devName) {// not an mst device
-        return NULL;
+        return (const char*)NULL;
     }
-    return NULL;
+    return (const char*)NULL;
 }
diff --git a/mlxfwops/lib/fs2_ops.h b/mlxfwops/lib/fs2_ops.h
index fec0075..0dd183c 100644
--- a/mlxfwops/lib/fs2_ops.h
+++ b/mlxfwops/lib/fs2_ops.h
@@ -100,7 +100,8 @@ private:
         II_CONFIG_INFO        = 16,
         II_TLVS_FORMAT        = 17,
         II_TRACER_HASH        = 18,
-        II_ConfigArea        = 19,
+        II_ConfigArea         = 19,
+        II_PSInfo             = 20,
         II_Last,              // Mark the end of used tag ids
         II_End                = 0xff
     };
diff --git a/mlxfwops/lib/fs3_ops.cpp b/mlxfwops/lib/fs3_ops.cpp
index 92c4269..c0fbccc 100644
--- a/mlxfwops/lib/fs3_ops.cpp
+++ b/mlxfwops/lib/fs3_ops.cpp
@@ -48,9 +48,13 @@
 #define FS3_DFLT_GUID_NUM_TO_ALLOCATE 8
 #define FS3_DFLT_GUID_STEP 1
 
+#define DEFAULT_GUID_NUM 0xff
+#define DEFAULT_STEP DEFAULT_GUID_NUM
+
 // FW Binary version
 
 // max supported major version
+// first time breaking compatibility remove the check if the version is not initialized
 #define FS3_MAX_BIN_VER_MAJOR 1
 
 // min supported version
@@ -187,7 +191,7 @@ bool Fs3Operations::GetMfgInfo(u_int8_t *buff)
         _fs3ImgInfo.ext_info.guids_override_en = cib_mfg_info.guids_override_en;
         _fs3ImgInfo.ext_info.orig_fs3_uids_info.valid_field = 0;
     } else {
-        return errmsg("Unknown MFG_INFO format version (%d.%d).", cib_mfg_info.major_version, cib_mfg_info.minor_version);
+        return errmsg(MLXFW_UNKNOWN_SECT_VER_ERR, "Unknown MFG_INFO format version (%d.%d).", cib_mfg_info.major_version, cib_mfg_info.minor_version);
     }
     return true;
 
@@ -202,7 +206,7 @@ bool Fs3Operations::GetMfgInfo(u_int8_t *buff)
 
 #define FAIL_NO_OCR(str) do { \
                         if (_ioAccess->is_flash() && _fwParams.ignoreCacheRep == 0) {\
-                            return errmsg("-ocr flag must be specified for %s operation.", str);\
+                            return errmsg(MLXFW_OCR_ERR, "-ocr flag must be specified for %s operation.", str);\
                         }\
                     } while (0)
 
@@ -215,7 +219,7 @@ bool Fs3Operations::GetImageInfo(u_int8_t *buff)
     GET_IMAGE_INFO_VERSION(buff, IIMajor, IIMinor);
     (void)IIMinor;
     if (!CHECK_IMAGE_INFO_VERSION(IIMajor)) {
-        return errmsg("Unknown IMAGE_INFO format version (%d.%d).", IIMajor, IIMinor);
+        return errmsg(MLXFW_UNKNOWN_SECT_VER_ERR, "Unknown IMAGE_INFO format version (%d.%d).", IIMajor, IIMinor);
     }
     cibfw_image_info_unpack(&image_info, buff);
     // cibfw_image_info_dump(&image_info, stdout);
@@ -268,7 +272,7 @@ bool Fs3Operations::GetDevInfo(u_int8_t *buff)
         _fs3ImgInfo.ext_info.fs3_uids_info.valid_field = 0;
         _fwImgInfo.ext_info.vsd_sect_found = true;
     } else {
-        return errmsg("Unknown DEV_INFO format version (%d.%d).", cib_dev_info.major_version, cib_dev_info.minor_version);
+        return errmsg(MLXFW_UNKNOWN_SECT_VER_ERR, "Unknown DEV_INFO format version (%d.%d).", cib_dev_info.major_version, cib_dev_info.minor_version);
     }
     return true;
 }
@@ -368,7 +372,7 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
         // Uopdate the cont address
         _ioAccess->set_address_convertor(_fwImgInfo.cntxLog2ChunkSize, _fwImgInfo.imgStart != 0);
         u_int32_t entry_addr = dtoc_addr + TOC_HEADER_SIZE + section_index *  TOC_ENTRY_SIZE;
-         READBUF((*_ioAccess), entry_addr , entry_buffer, TOC_ENTRY_SIZE, "TOC Entry");
+        READBUF((*_ioAccess), entry_addr , entry_buffer, TOC_ENTRY_SIZE, "TOC Entry");
         Fs3UpdateImgCache(entry_buffer, entry_addr, TOC_ENTRY_SIZE);
 
         cibfw_itoc_entry_unpack(&toc_entry, entry_buffer);
@@ -443,7 +447,7 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
                   printf("-D- Bad ITOC CRC: toc_entry.itoc_entry_crc = %#x, actual crc: %#x, entry_size_in_bytes = %#x\n", toc_entry.itoc_entry_crc,
                          entry_crc, entry_size_in_bytes);
                   */
-                 return errmsg("Bad Itoc Entry CRC. Expected: 0x%x , Actual: 0x%x", toc_entry.itoc_entry_crc, entry_crc);
+                 return errmsg(MLXFW_BAD_CRC_ERR, "Bad Itoc Entry CRC. Expected: 0x%x , Actual: 0x%x", toc_entry.itoc_entry_crc, entry_crc);
             }
 
             _fs3ImgInfo.tocArr[section_index].entry_addr = entry_addr;
@@ -456,7 +460,7 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
 
     if (!mfg_exists) {
         _badDevDataSections = true;
-        return errmsg("No \""MFG_INFO"\" info section.");
+        return errmsg(MLXFW_NO_MFG_ERR, "No \""MFG_INFO"\" info section.");
     }
     return ret_val;
 }
@@ -520,11 +524,11 @@ bool Fs3Operations::CheckBinVersion(u_int8_t binVerMajor, u_int8_t binVerMinor)
     }
 
     if (binVerMajor > FS3_MAX_BIN_VER_MAJOR) {
-        return errmsg("Unsupported binary version (%d.%d) please update to latest MFT package", binVerMajor, binVerMinor);
+        return errmsg(MLXFW_UNSUPPORTED_BIN_VER_ERR, "Unsupported binary version (%d.%d) please update to latest MFT package", binVerMajor, binVerMinor);
     }
 
     if (binVerMajor < FS3_MIN_BIN_VER_MAJOR || (binVerMajor == FS3_MIN_BIN_VER_MAJOR && binVerMinor < FS3_MIN_BIN_VER_MINOR)) {
-        return errmsg("Unsupported binary version (%d.%d) minimal supported version (%d.%d)", \
+        return errmsg(MLXFW_UNSUPPORTED_BIN_VER_ERR, "Unsupported binary version (%d.%d) minimal supported version (%d.%d)", \
                 binVerMajor, binVerMinor, FS3_MIN_BIN_VER_MAJOR, FS3_MIN_BIN_VER_MINOR);
     }
 
@@ -542,10 +546,10 @@ bool Fs3Operations::Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc,
 
     CntxFindAllImageStart(_ioAccess, cntx_image_start, &cntx_image_num);
     if (cntx_image_num == 0) {
-        return errmsg("No valid FS3 image found");
+        return errmsg(MLXFW_NO_VALID_IMAGE_ERR, "No valid FS3 image found");
     }
     if (cntx_image_num > 1) { // ATM we support only one valid image
-        return errmsg("More than one FS3 image found on %s", this->_ioAccess->is_flash() ? "Device" : "image");
+        return errmsg(MLXFW_MULTIPLE_VALID_IMAGES_ERR, "More than one FS3 image found on %s", this->_ioAccess->is_flash() ? "Device" : "image");
     }
     u_int32_t image_start = cntx_image_start[0];
     offset = 0;
@@ -597,7 +601,7 @@ bool Fs3Operations::Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc,
         }
         offset += sector_size;
     }
-    return errmsg("No valid ITOC was found.");
+    return errmsg(MLXFW_NO_VALID_ITOC_ERR, "No valid ITOC was found.");
 }
 
 
@@ -611,7 +615,7 @@ bool Fs3Operations::Fs3IntQuery(bool readRom, bool quickQuery)
         return false;
     }
     // get chip type and device sw id, from device/image
-    const u_int32_t* swId = NULL;
+    const u_int32_t* swId = (u_int32_t*)NULL;
     if (_ioAccess->is_flash()) {
         if (!getInfoFromHwDevid(_ioAccess->get_dev_id(), _fwImgInfo.ext_info.chip_type, &swId)) {
             return false;
@@ -631,7 +635,7 @@ bool Fs3Operations::FwQuery(fw_info_t *fwInfo, bool readRom, bool isStripedImage
     }
     //adrianc:  best effort to get chip_type for image on image since it can "theoretically" be used on more than one device , take the first one.
     if (!_ioAccess->is_flash()) {
-        const u_int32_t* swId = NULL;
+        const u_int32_t* swId = (u_int32_t*)NULL;
         if (!getInfoFromHwDevid(_fwImgInfo.supportedHwId[0], _fwImgInfo.ext_info.chip_type, &swId)) {
             return false;
         }
@@ -703,7 +707,7 @@ bool Fs3Operations::UpdateDevDataITOC(u_int8_t *image_data, struct toc_info *ima
                     // perform HACK : i.e keep itoc entry as is in the image
                     continue;
                 } else {
-                    return errmsg("An inconsistency was found in %s section attributes. %s ITOC attribute differs",\
+                    return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "An inconsistency was found in %s section attributes. %s ITOC attribute differs",\
                             GetSectionNameByType(image_toc_entry->type), GET_DIFFER_STR(flash_toc_entry, image_toc_entry));
                 }
             }
@@ -773,7 +777,7 @@ bool Fs3Operations::CheckFs3ImgSize(Fs3Operations& imageOps, bool useImageDevDat
 
     u_int32_t maxImgDataSize = maxImgDataSizeSlot0 < maxImgDataSizeSlot1 ? maxImgDataSizeSlot0 : maxImgDataSizeSlot1;
     if (imageOps._fs3ImgInfo.sizeOfImgData > maxImgDataSize) {
-        return errmsg("Size of image data (0x%x) is greater than max size of image data (0x%x)",
+        return errmsg(MLXFW_IMAGE_TOO_LARGE_ERR, "Size of image data (0x%x) is greater than max size of image data (0x%x)",
                 imageOps._fs3ImgInfo.sizeOfImgData,  maxImgDataSize);
     }
     return true;
@@ -798,7 +802,15 @@ return true;
 }
 
 #define SUPPORTS_ISFU(chip_type) \
-    (chip_type == CT_CONNECT_IB || chip_type == CT_CONNECTX)
+    (chip_type == CT_CONNECT_IB || chip_type == CT_CONNECTX4 || chip_type == CT_CONNECTX4_LX)
+
+#define FLASH_RESTORE(origFlashObj) \
+        if (origFlashObj) {\
+            _ioAccess->close();\
+            delete _ioAccess;\
+            _ioAccess = origFlashObj;\
+            _fwParams.ignoreCacheRep = 0;\
+        }
 
 bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
                                   ExtBurnParams& burnParams)
@@ -812,8 +824,8 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
     FImage   *fim   = (FImage*)(imageOps._ioAccess);
     u_int8_t *data8 = (u_int8_t *) fim->getBuf();
 
-    if (_fwImgInfo.imgStart != 0 || !burnParams.burnFailsafe) {
-        // if the burn is not failsafe we also burn the image at 0x0
+    if (_fwImgInfo.imgStart != 0 || (!burnParams.burnFailsafe && ((Flash*)_ioAccess)->get_ignore_cache_replacment())) {
+        // if the burn is not failsafe and with -ocr, the image is burnt at 0x0
         is_curr_image_in_odd_chunks = 1;
         new_image_start = 0;
     } else {
@@ -849,7 +861,7 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
     }
     // sanity check on the image itoc array
     if (!imageOps.CheckItocArray()) {
-        return errmsg("%s", imageOps.err());
+        return errmsg(MLXFW_IMAGE_CORRUPTED_ERR, "%s", imageOps.err());
     }
     //find total image size that will be written
     for (int i = 0; i < imageOps._fs3ImgInfo.numOfItocs; i++) {
@@ -912,7 +924,7 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
 
     // if we access without cache replacement or the burn was non failsafe, update YU bootloaders.
     // if we access with cache replacement notify currently running fw of new image start address to crspace (for SW reset)
-    //TODO: add SwitchIB, SwitchEN when we have support for ISFU
+    //TODO: add SwitchIB, Spectrum when we have support for ISFU
     if (!SUPPORTS_ISFU(_fwImgInfo.ext_info.chip_type) || !burnParams.burnFailsafe || f->get_ignore_cache_replacment()) {
         boot_address_was_updated = f->update_boot_addr(new_image_start);
     } else {
@@ -934,7 +946,7 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
             for (u_int32_t i = 0; i < cntx_image_num; i++) {
                 if (cntx_image_start[i] != new_image_start) {
                     if (!f->write(cntx_image_start[i], &zeroes, sizeof(zeroes), true)) {
-                        return errmsg("Failed to invalidate old fw signature: %s", f->err());
+                        return errmsg(MLXFW_FLASH_WRITE_ERR, "Failed to invalidate old fw signature: %s", f->err());
                     }
                 }
             }
@@ -942,7 +954,7 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
             // invalidate previous signature
             f->set_address_convertor(imageOps._fwImgInfo.cntxLog2ChunkSize, is_curr_image_in_odd_chunks);
             if (!f->write(0, &zeroes, sizeof(zeroes), true)) {
-                return errmsg("Failed to invalidate old fw signature: %s", f->err());
+                return errmsg(MLXFW_FLASH_WRITE_ERR, "Failed to invalidate old fw signature: %s", f->err());
             }
         }
     }
@@ -954,7 +966,7 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
 bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
 {
     if (imageOps.FwType() != FIT_FS3) {
-        return errmsg("FW image type is not FS3\n");
+        return errmsg(MLXFW_IMAGE_FORMAT_ERR, "FW image type is not FS3\n");
     }
     bool devIntQueryRes = Fs3IntQuery();
 
@@ -962,24 +974,23 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
         return false;
     }
 
-    if (!burnParams.burnFailsafe && _ioAccess->is_flash() && !((Flash*)_ioAccess)->get_ignore_cache_replacment()) {
-        return errmsg("cache replacement is active, cannot burn in a non fail-safe manner.");
+    // for image we execute full verify to bring all the information needed for ROM Patch
+    if (!imageOps.Fs3IntQuery(true, false)) {
+          return false;
     }
     // Check Matching device ID
-#ifndef UEFI_BUILD // NO Device ID here..
     if (!burnParams.noDevidCheck && _ioAccess->is_flash()) {
         if (imageOps._fwImgInfo.supportedHwIdNum) {
              if (!CheckMatchingHwDevId(_ioAccess->get_dev_id(),
                                          _ioAccess->get_rev_id(),
                                          imageOps._fwImgInfo.supportedHwId,
                                          imageOps._fwImgInfo.supportedHwIdNum)) {
-                 return errmsg("Device/Image mismatch: %s\n",this->err( ));
+                 return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "Device/Image mismatch: %s\n",this->err( ));
              }
          } else { // no suppored hw ids (problem with the image ?)
-             return errmsg("No supported devices were found in the FW image.");
+             return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "No supported devices were found in the FW image.");
          }
     }
-#endif
 
     if (!burnParams.burnFailsafe) {
         // some checks in case we burn in a non-failsafe manner and attempt to integrate existing device
@@ -992,17 +1003,27 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
                 return errmsg("Cannot integrate device data sections: device data sections are corrupted. please ignore extracting device data sections.");
             }
         } else { // we will take device data sections from image: make sure device is not write protected
-            if (_ioAccess->is_flash() && ((Flash*)_ioAccess)->is_flash_write_protected()) {
-                return errmsg("Cannot burn device data sections, Flash is write protected.");
+            if (_ioAccess->is_flash()) {
+                FBase* origFlashObj = (FBase*)NULL;
+                if (!((Flash*)_ioAccess)->get_ignore_cache_replacment()) {
+                   origFlashObj = _ioAccess;
+                   _fwParams.ignoreCacheRep = 1;
+                   if (!FwOperations::FwAccessCreate(_fwParams, &_ioAccess)) {
+                       _ioAccess = origFlashObj;
+                       _fwParams.ignoreCacheRep = 0;
+                       return errmsg(MLXFW_OPEN_OCR_ERR, "Failed to open device for direct flash access");
+                   }
+                }
+
+                if (((Flash*)_ioAccess)->is_flash_write_protected()) {
+                   FLASH_RESTORE(origFlashObj);
+                   return errmsg("Cannot burn device data sections, Flash is write protected.");
+                }
+                FLASH_RESTORE(origFlashObj);
             }
         }
     }
 
-    // for image we execute full verify to bring all the information needed for ROM Patch
-    if (!imageOps.Fs3IntQuery(true, false)) {
-          return false;
-    }
-
     Fs3Operations *imgToBurn = &imageOps;
     bool createNewImg = false;
     std::vector<u_int8_t> newImageData(imageOps._fwImgInfo.lastImageAddr);
@@ -1011,6 +1032,8 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
         return false;
     }
 
+    // no access to flash parameters under uefi
+#ifndef UEFI_BUILD
     // TODO: adrianc: remove this in MFT-4.1.0
     if(burnParams.burnFailsafe) {
         if(!CheckAndFixCX4(false)) {
@@ -1020,16 +1043,17 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
             return false;
         }
     }
+#endif
 
     if (burnParams.burnFailsafe) {
         // Check image and device chunk sizes are Ok
         if (_fwImgInfo.cntxLog2ChunkSize != imageOps._fwImgInfo.cntxLog2ChunkSize) {
             //TODO: remove both cond before release
             if (_ioAccess->get_size() < 0x1000000) {
-                return errmsg("Image intended for 16MB Flash. please replace your HCA or perform rework before updating.");
+                return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "Image intended for 16MB Flash. please replace your HCA or perform rework before updating.");
             }
             // if (imageOps._fwImgInfo.cntxLog2ChunkSize == 0x16 ) {
-                return errmsg("Device and Image chunk sizes differ\n"
+                return errmsg(MLXFW_FS_INFO_MISSMATCH_ERR, "Device and Image chunk sizes differ\n"
                               "    Internal users: in order to fix, please run:  mlxfwup -d %s -f %d.%04d.%04d --fix_cx4_image\n"
                               "    External users: contact Mellanox support team.", _devName, imageOps._fwImgInfo.ext_info.fw_ver[0],
                               imageOps._fwImgInfo.ext_info.fw_ver[1], imageOps._fwImgInfo.ext_info.fw_ver[2]); 
@@ -1052,7 +1076,7 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
             TOCPUn((u_int32_t*)&romSect[0], romSect.size()/4);
             if (!imageOps.Fs3ReplaceSectionInDevImg(FS3_ROM_CODE, FS3_PCI_CODE, true, (u_int8_t*)&newImageData[0], imageOps._fwImgInfo.lastImageAddr,
                     (u_int32_t*)&romSect[0], (u_int32_t)romSect.size(), true)) {
-                return errmsg("failed to update ROM in image. %s", imageOps.err());
+                return errmsg(MLXFW_ROM_UPDATE_IN_IMAGE_ERR, "failed to update ROM in image. %s", imageOps.err());
             }
             createNewImg = true;
         }
@@ -1062,7 +1086,7 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
             // get image info section :
             struct toc_info *imageInfoToc;
             if (!imageOps.Fs3GetItocInfo(imageOps._fs3ImgInfo.tocArr, imageOps._fs3ImgInfo.numOfItocs, FS3_IMAGE_INFO, imageInfoToc)){
-                return errmsg("failed to get Image Info section.");
+                return errmsg(MLXFW_GET_SECT_ERR, "failed to get Image Info section.");
             }
             // modify it:
             std::vector<u_int8_t> imageInfoSect = imageInfoToc->section_data;
@@ -1073,7 +1097,7 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
             // re-insert it into the image:
             if (!imageOps.Fs3ReplaceSectionInDevImg(FS3_IMAGE_INFO, FS3_FW_ADB, true, (u_int8_t*)&newImageData[0], imageOps._fwImgInfo.lastImageAddr,
                     (u_int32_t*)&imageInfoSect[0], (u_int32_t)imageInfoSect.size(), true)) {
-                return errmsg("failed to update image VSD in image. %s", imageOps.err());
+                return errmsg(MLXFW_UPDATE_SECT_ERR, "failed to update image VSD in image. %s", imageOps.err());
             }
             createNewImg = true;
         }
@@ -1083,11 +1107,11 @@ bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
         if (createNewImg) {
             FwOperations* newImageOps = FwOperationsCreate((void*)&newImageData[0], (void*)&imageOps._fwImgInfo.lastImageAddr, (char*)NULL, FHT_FW_BUFF);
             if (!newImageOps) {
-                return errmsg("Internal error: The prepared image is corrupted.");
+                return errmsg(MLXFW_IMAGE_CORRUPTED_ERR, "Internal error: The prepared image is corrupted.");
             }
             // 3. verify it
             if (!((Fs3Operations*)newImageOps)->Fs3IntQuery(true,false)) {
-                errmsg("Internal error: The prepared image is corrupted: %s", newImageOps->err());
+                errmsg(MLXFW_IMAGE_CORRUPTED_ERR, "Internal error: The prepared image is corrupted: %s", newImageOps->err());
                 newImageOps->FwCleanUp();
                 delete newImageOps;
                 return false;
@@ -1204,6 +1228,13 @@ bool Fs3Operations::FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc)
     if (baseGuid.base_mac_specified && !CheckMac(baseGuid.base_mac)) {
         return errmsg("Bad MAC (" MAC_FORMAT ") given: %s. Please specify a valid MAC value", baseGuid.base_mac.h, baseGuid.base_mac.l, err());
     }
+    if (!baseGuid.use_pp_attr) {
+        baseGuid.num_of_guids_pp[0] = baseGuid.num_of_guids ? baseGuid.num_of_guids : DEFAULT_GUID_NUM;
+        baseGuid.step_size_pp[0] = baseGuid.step_size ? baseGuid.step_size : DEFAULT_STEP;
+        baseGuid.num_of_guids_pp[1] = baseGuid.num_of_guids ? baseGuid.num_of_guids : DEFAULT_GUID_NUM;
+        baseGuid.step_size_pp[1] = baseGuid.step_size ? baseGuid.step_size : DEFAULT_STEP;
+        baseGuid.use_pp_attr = 1;
+    }
     FAIL_NO_OCR("set manufacture GUIDs/MACs");
     if (!Fs3UpdateSection(&baseGuid, FS3_MFG_INFO, false, CMD_SET_MFG_GUIDS, callBackFunc)) {
         return false;
@@ -1218,13 +1249,14 @@ bool Fs3Operations::FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc)
 bool Fs3Operations::FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc)
 {
     // in FS3 default behavior when setting GUIDs / MFG is to assign ini default step size and number.
-    fs3_uid_t bGuid = {baseGuid, 1, {0, 0}, 0, 0, 0, 1};
+    fs3_uid_t bGuid = {baseGuid, 1, {0, 0}, 0, 0, 0, 1, 1, {DEFAULT_GUID_NUM, DEFAULT_STEP}, {DEFAULT_GUID_NUM, DEFAULT_STEP}};
     return FwSetMFG(bGuid, callBackFunc);
 }
 
 bool Fs3Operations::FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc, ProgressCallBack progressFunc)
 {
     fs3_uid_t usrGuid;
+    memset(&usrGuid, 0, sizeof(usrGuid));
     // Avoid Warning because there is no need for progressFunc
     (void)progressFunc;
     if (sgParam.userGuids.empty()) {
@@ -1239,8 +1271,11 @@ bool Fs3Operations::FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc,
     	return errmsg("guids override is not set, cannot set device guids");
     }
 
-    usrGuid.num_of_guids = sgParam.numOfGUIDs ? sgParam.numOfGUIDs : 0;
-    usrGuid.step_size = usrGuid.step_size ? sgParam.stepSize : 0;
+    usrGuid.num_of_guids_pp[0] = sgParam.usePPAttr ? sgParam.numOfGUIDsPP[0] : sgParam.numOfGUIDs ? sgParam.numOfGUIDs : DEFAULT_GUID_NUM;
+    usrGuid.step_size_pp[0] =  sgParam.usePPAttr ? sgParam.stepSizePP[0] : sgParam.stepSize ? sgParam.stepSize : DEFAULT_STEP;
+    usrGuid.num_of_guids_pp[1] = sgParam.usePPAttr ? sgParam.numOfGUIDsPP[1] : sgParam.numOfGUIDs ? sgParam.numOfGUIDs : DEFAULT_GUID_NUM;
+    usrGuid.step_size_pp[1] =  sgParam.usePPAttr ? sgParam.stepSizePP[1] : sgParam.stepSize ? sgParam.stepSize : DEFAULT_STEP;
+    usrGuid.use_pp_attr = 1;
 
     usrGuid.base_guid_specified = false;
     usrGuid.base_mac_specified = false;
@@ -1294,7 +1329,7 @@ bool Fs3Operations::FwSetVPD(char* vpdFileStr, PrintCallBack callBackFunc)
 bool Fs3Operations::GetModifiedSectionInfo(fs3_section_t sectionType, fs3_section_t nextSectionType, u_int32_t &newSectAddr,
         fs3_section_t &SectToPut, u_int32_t &oldSectSize)
 {
-    struct toc_info *curr_itoc = NULL;
+    struct toc_info *curr_itoc = (struct toc_info *)NULL;
     if (Fs3GetItocInfo(_fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs, sectionType, curr_itoc) ||
         Fs3GetItocInfo(_fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs, nextSectionType, curr_itoc)) {
         newSectAddr = curr_itoc->toc_entry.flash_addr << 2;
@@ -1343,7 +1378,7 @@ bool Fs3Operations::UpdateItocAfterInsert(fs3_section_t sectionType, u_int32_t n
 
     if (toAdd) {
         if (isReplacement) {
-            struct toc_info *curr_itoc = NULL;
+            struct toc_info *curr_itoc = (struct toc_info *)NULL;
             u_int32_t sectSize;
             if (!Fs3GetItocInfo(_fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs, sectionType, curr_itoc)) {
                 return false;
@@ -1490,7 +1525,7 @@ bool Fs3Operations::Fs3AddSection(fs3_section_t sectionType, fs3_section_t neigh
 
 bool Fs3Operations::Fs3RemoveSection(fs3_section_t sectionType, ProgressCallBack progressFunc)
 {
-    return Fs3ModifySection(sectionType, sectionType, false, NULL, 0, progressFunc);
+    return Fs3ModifySection(sectionType, sectionType, false, (u_int32_t*)NULL, 0, progressFunc);
 }
 
 
@@ -1594,23 +1629,27 @@ bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cibfw_guids
      */
     u_int64_t base_guid_64;
     u_int64_t base_mac_64;
+    if (!base_uid.use_pp_attr) {
+        return errmsg("Expected per port attributes to be specified");
+    }
+
     base_guid_64 = GUID_TO_64(base_uid.base_guid);
     base_mac_64 = (((u_int64_t)base_uid.base_guid.l & 0xffffff) | (((u_int64_t)base_uid.base_guid.h & 0xffffff00) << 16));
     guids.guids[0].uid = base_guid_64;
-    guids.guids[0].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.guids[0].num_allocated;
-    guids.guids[0].step = base_uid.step_size ? base_uid.step_size : guids.guids[0].step;
+    guids.guids[0].num_allocated = base_uid.num_of_guids_pp[0] != DEFAULT_GUID_NUM ? base_uid.num_of_guids_pp[0] : guids.guids[0].num_allocated;
+    guids.guids[0].step = base_uid.step_size_pp[0] != DEFAULT_STEP ? base_uid.step_size_pp[0] : guids.guids[0].step;
 
     guids.guids[1].uid = base_guid_64 + (guids.guids[0].num_allocated * guids.guids[0].step);
-    guids.guids[1].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.guids[1].num_allocated;
-    guids.guids[1].step = base_uid.step_size ? base_uid.step_size : guids.guids[1].step;
+    guids.guids[1].num_allocated = base_uid.num_of_guids_pp[1] != DEFAULT_GUID_NUM ? base_uid.num_of_guids_pp[1] : guids.guids[1].num_allocated;
+    guids.guids[1].step = base_uid.step_size_pp[1] != DEFAULT_STEP ? base_uid.step_size_pp[1] : guids.guids[1].step;
 
     guids.macs[0].uid = base_mac_64;
-    guids.macs[0].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.macs[0].num_allocated;
-    guids.macs[0].step = base_uid.step_size ? base_uid.step_size : guids.macs[0].step;
+    guids.macs[0].num_allocated = base_uid.num_of_guids_pp[0] != DEFAULT_GUID_NUM ? base_uid.num_of_guids_pp[0] : guids.macs[0].num_allocated;
+    guids.macs[0].step = base_uid.step_size_pp[0] != DEFAULT_STEP ? base_uid.step_size_pp[0] : guids.macs[0].step;
 
     guids.macs[1].uid = base_mac_64 + (guids.macs[0].num_allocated * guids.macs[0].step);
-    guids.macs[1].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.macs[1].num_allocated;
-    guids.macs[1].step = base_uid.step_size ? base_uid.step_size : guids.macs[1].step;
+    guids.macs[1].num_allocated = base_uid.num_of_guids_pp[1] != DEFAULT_GUID_NUM ? base_uid.num_of_guids_pp[1] : guids.macs[1].num_allocated;
+    guids.macs[1].step = base_uid.step_size_pp[1] != DEFAULT_STEP ? base_uid.step_size_pp[1] : guids.macs[1].step;
     return true;
 }
 
@@ -1621,6 +1660,9 @@ bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cx4fw_guids
      */
     u_int64_t base_guid_64;
     u_int64_t base_mac_64;
+    if (!base_uid.use_pp_attr) {
+        return errmsg("Expected per port attributes to be specified");
+    }
 
     base_guid_64 = base_uid.base_guid_specified ? GUID_TO_64(base_uid.base_guid) : guids.guids.uid;
     base_mac_64 = base_uid.base_mac_specified ? GUID_TO_64(base_uid.base_mac) : guids.macs.uid;
@@ -1630,12 +1672,12 @@ bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cx4fw_guids
     }
 
     guids.guids.uid = base_guid_64;
-    guids.guids.num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.guids.num_allocated;
-    guids.guids.step = base_uid.step_size ? base_uid.step_size : guids.guids.step;
+    guids.guids.num_allocated = base_uid.num_of_guids_pp[0] != DEFAULT_GUID_NUM ? base_uid.num_of_guids_pp[0] : guids.guids.num_allocated;
+    guids.guids.step = base_uid.step_size_pp[0] != DEFAULT_STEP ? base_uid.step_size_pp[0] : guids.guids.step;
 
     guids.macs.uid = base_mac_64;
-    guids.macs.num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.macs.num_allocated;
-    guids.macs.step = base_uid.step_size ? base_uid.step_size : guids.macs.step ;
+    guids.macs.num_allocated = base_uid.num_of_guids_pp[0] != DEFAULT_GUID_NUM ? base_uid.num_of_guids_pp[0] : guids.macs.num_allocated;
+    guids.macs.step = base_uid.step_size_pp[0] != DEFAULT_STEP ? base_uid.step_size_pp[0] : guids.macs.step ;
     return true;
 }
 
@@ -1686,7 +1728,7 @@ bool Fs3Operations::Fs3UpdateVpdSection(struct toc_info *curr_toc, char *vpd,
                                std::vector<u_int8_t>  &newSectionData)
 {
     int vpd_size = 0;
-    u_int8_t *vpd_data = NULL;
+    u_int8_t *vpd_data = (u_int8_t*)NULL;
 
     if (!ReadImageFile(vpd, vpd_data, vpd_size)) {
         return false;
@@ -1942,7 +1984,7 @@ u_int32_t Fs3Operations::getAbsAddr(toc_info* toc, u_int32_t imgStart) {
 
 //get the last fw section address (i.e the maximal address + size of the fw section)
 bool Fs3Operations::getLastFwSAddr(u_int32_t& lastAddr) {
-	struct toc_info *maxToc= NULL;
+	struct toc_info *maxToc= (struct toc_info*)NULL;
 	int i;
 	// find first itoc that isnt device data (assumption: there is at least one)
 	for(i=0 ; i < _fs3ImgInfo.numOfItocs ; i++) {
@@ -1962,7 +2004,7 @@ bool Fs3Operations::getLastFwSAddr(u_int32_t& lastAddr) {
 }
 
 bool Fs3Operations::getFirstDevDataAddr(u_int32_t& firstAddr) {
-	struct toc_info *minToc = NULL;
+	struct toc_info *minToc = (struct toc_info*)NULL;
 	//find first dev data itoc entry
 	int i;
 	for(i=0 ; i < _fs3ImgInfo.numOfItocs ; i++) {
@@ -2080,7 +2122,7 @@ bool Fs3Operations::FwShiftDevData(PrintCallBack progressFunc)
 	}
 
 	// check if we already shifted
-	struct toc_info* mfgToc = NULL;
+	struct toc_info* mfgToc = (struct toc_info*)NULL;
 	if (!Fs3GetItocInfo(_fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs, FS3_MFG_INFO, mfgToc)) {
 		return errmsg("Failed to get MFG_INFO ITOC information.");
 	}
@@ -2177,7 +2219,7 @@ const char* Fs3Operations::FwGetResetRecommandationStr()
 #endif
 
     if (!_isfuSupported) {
-        return NULL;
+        return (const char*)NULL;
     }
     return "To load new FW run mlxfwreset or reboot machine.";
 }
@@ -2185,7 +2227,7 @@ const char* Fs3Operations::FwGetResetRecommandationStr()
 bool Fs3Operations::Fs3IsfuActivateImage(u_int32_t newImageStart)
 {
     int rc = 0;
-    mfile *mf = NULL;
+    mfile *mf = (mfile*)NULL;
     struct cibfw_register_mfai mfai;
     struct cibfw_register_mfrl mfrl;
     memset(&mfai, 0, sizeof(mfai));
@@ -2222,13 +2264,7 @@ cleanup:
 #define IS_EMPTY_CX4_MFG_UIDS(fs3_uids_info) \
         (((fs3_uids_info).cx4_uids.base_guid.uid == 0x0ULL) &&  ((fs3_uids_info).cx4_uids.base_mac.uid == 0x0ULL))
 
-#define FLASH_RESTORE(origFlashObj) \
-        if (origFlashObj) {\
-            _ioAccess->close();\
-            delete _ioAccess;\
-            _ioAccess = origFlashObj;\
-            _fwParams.ignoreCacheRep = 0;\
-        }
+
 #define GET_UID_LOW(uid) \
         ((uid) & 0xffffffffULL)
 
@@ -2238,7 +2274,7 @@ cleanup:
 bool Fs3Operations::CheckAndFixCX4(bool justCheck)
 {
     // assuming query/verify was ran before and this is being called on an MST device during burn
-    FBase* origFlashObj = NULL;
+    FBase* origFlashObj = (FBase*)NULL;
 
     if (!_ioAccess->is_flash()) {
         return true;
@@ -2323,8 +2359,6 @@ bool Fs3Operations::FixCX4Uids()
         baseUid.base_guid_specified = 1;
         baseUid.base_mac_specified = 1;
         baseUid.set_mac_from_guid = 0;
-        baseUid.num_of_guids = 0;
-        baseUid.step_size = 0;
 
         // set manufacture guids
         if (!FwSetMFG(baseUid)) {
@@ -2362,13 +2396,13 @@ bool Fs3Operations::FixCX4WriteProtection(bool justCheck)
         return true;
     }
 
-    struct toc_info* mfgToc = NULL;
-    struct toc_info* vpdToc = NULL;
+    struct toc_info* mfgToc = (struct toc_info*)NULL;
+    struct toc_info* vpdToc = (struct toc_info*)NULL;
     u_int32_t mfgAddr = 0;
     u_int32_t vpdAddr = 0;
     u_int32_t flashSize = 0;
     u_int32_t shiftSize = 0x8000;
-    FBase* origFlashObj = NULL;
+    FBase* origFlashObj = (FBase*)NULL;
     std::vector<u_int8_t> newVpdSection;
     int retries = 0;
     if (!Fs3GetItocInfo(_fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs, FS3_MFG_INFO, mfgToc)) {
diff --git a/mlxfwops/lib/fw_ops.cpp b/mlxfwops/lib/fw_ops.cpp
index 93efc5e..6ebcea3 100644
--- a/mlxfwops/lib/fw_ops.cpp
+++ b/mlxfwops/lib/fw_ops.cpp
@@ -158,27 +158,27 @@ void FwOperations::FwCleanUp()
     if (_ioAccess) {
         _ioAccess->close();
         delete _ioAccess;
-        _ioAccess = NULL;
+        _ioAccess = (FBase*)NULL;
     }
     if (_fname) {
         delete[] _fname;
-        _fname = NULL;
+        _fname = (char*)NULL;
     }
     if (_devName) {
         delete[] _devName;
-        _devName = NULL;
+        _devName = (char*)NULL;
     }
     if (_fwParams.fileHndl) {
         delete[] _fwParams.fileHndl;
-        _fwParams.fileHndl = NULL;
+        _fwParams.fileHndl = (char*)NULL;
     }
     if (_fwParams.mstHndl) {
         delete[] _fwParams.mstHndl;
-        _fwParams.mstHndl = NULL;
+        _fwParams.mstHndl =(char*)NULL;
     }
     if (_fwParams.psid) {
         delete[] _fwParams.psid;
-        _fwParams.psid = NULL;
+        _fwParams.psid = (char*)NULL;
     }
 }
 
@@ -239,7 +239,7 @@ bool FwOperations::checkBoot2(u_int32_t beg, u_int32_t offs, u_int32_t& next, bo
         if (crc.get() != crc_act) {
             report_callback(verifyCallBackFunc, "%s /0x%08x/ - wrong CRC (exp:0x%x, act:0x%x)\n",
                    pr, offs+beg, crc.get(), crc_act);
-            return errmsg(BAD_CRC_MSG);
+            return errmsg(MLXFW_BAD_CRC_ERR, BAD_CRC_MSG);
         }
         _ioAccess->get_image_crc() << crc_act;
         // TODO: Print CRC
@@ -273,35 +273,55 @@ bool FwOperations::CheckAndPrintCrcRes(char* pr, bool blank_crc, u_int32_t off,
     return true;
 }
 
-FwVerInfo FwOperations::FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3], u_int8_t fwType) {
+#define CIB_MAJOR 10
+#define OLD_FORMAT_MAX_MINOR_CIB 10
+#define SIB_MAJOR 11
+#define OLD_FORMAT_MAX_MINOR_SIB 1
+
+/*
+ * currently we have 3 FW version format
+ * 0: MM.mm.ssss
+ * 1: MM.mmbb.ssss
+ * 2: MM.mm.bsss / MM.mm.bbss for branch !=0
+ * Where:
+ * M: major digit
+ * m: minor digit
+ * b: branch digit
+ * s: subminor digit
+ */
+int FwOperations::GetFwVerFormat(u_int16_t fwVer[3])
+{
+    if (fwVer[1] > 99) {
+        return 1;
+    }
+
+    if ((fwVer[0] == CIB_MAJOR && fwVer[1] <= OLD_FORMAT_MAX_MINOR_CIB) ||
+        (fwVer[0] == SIB_MAJOR && fwVer[1] <= OLD_FORMAT_MAX_MINOR_SIB)) {
+        return 0;
+    }
+
+    return 2;
+}
+
+FwVerInfo FwOperations::FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3]) {
     // copy version arrays to local variables
     u_int16_t fwVer1[3];
     u_int16_t fwVer2[3];
-    u_int16_t branch1 = 0, branch2 = 0;
+    u_int16_t fwVersionFormatR1 = 0;
+    u_int16_t fwVersionFormatR2 = 0;
     memcpy(fwVer1, r1, sizeof(fwVer1));
     memcpy(fwVer2, r2, sizeof(fwVer2));
-    // update minor according to format
-    if (fwType == FIT_FS3) {
-        // extract GA release version from minor (upper 2 digits)
-        fwVer1[1] = r1[1] / 100;
-        fwVer2[1] = r2[1] / 100;
-        // extract branch (assume branch is 0 in old format)
-        branch1 = r1[1] % 100;
-        branch2 = r2[1] % 100;
-    }
-    //compare
+
+    fwVersionFormatR1 = GetFwVerFormat(fwVer1);
+    fwVersionFormatR2 = GetFwVerFormat(fwVer2);
+    // try to decide according to format
+    if (fwVersionFormatR1 > fwVersionFormatR2) {
+        return FVI_GREATER;
+    } else if (fwVersionFormatR1 < fwVersionFormatR2) {
+        return FVI_SMALLER;
+    }
+    // same format compare each field
     for (int i = 0; i < 3 ; i++) {
-        if (i == 2 && branch1 != branch2) {
-            // major and minor versions are the same
-            // check branches to see if its an upgrade/downgrade
-            if (branch1 != 0 && branch2 != 0) {
-                return FVI_UNKNOWN;
-            } else if (branch1 > branch2) {
-                return FVI_GREATER;
-            } else {
-                return FVI_SMALLER;
-            }
-        }
         if (fwVer1[i] < fwVer2[i]) {
             return FVI_SMALLER;
         }
@@ -520,7 +540,7 @@ u_int8_t FwOperations::CheckFwFormat(FBase& f, bool getFwFormatFromImg) {
                     (((Flash*)&f)->get_dev_id() == SWITCH_IB_HW_ID)  ||
                     (((Flash*)&f)->get_dev_id() == CX4_HW_ID)        ||
                     (((Flash*)&f)->get_dev_id() == CX4LX_HW_ID)      ||
-                    (((Flash*)&f)->get_dev_id() == SWITCH_EN_HW_ID)) {
+                    (((Flash*)&f)->get_dev_id() == SPECTRUM_HW_ID)) {
             return FS_FS3_GEN;
         }
     } else {
@@ -563,7 +583,7 @@ FwOperations* FwOperations::FwOperationsCreate(void* fwHndl, void *info, char* p
         fwParams.buffSize = *((u_int32_t*)info);
     }else if (hndlType == FHT_UEFI_DEV) {
         fwParams.uefiHndl = (uefi_Dev_t*)fwHndl;
-        fwParams.uefiExtra = (f_fw_cmd)info;
+        fwParams.uefiExtra = (uefi_dev_extra_t*)info;
     }else if (hndlType == FHT_MST_DEV) {
         fwParams.mstHndl = (char*)fwHndl;
         fwParams.forceLock = false;
@@ -583,19 +603,19 @@ void FwOperations::BackUpFwParams(fw_ops_params_t& fwParams)
     _fwParams.buffHndl = fwParams.buffHndl;
     _fwParams.buffSize = fwParams.buffSize;
     _fwParams.cx3FwAccess = fwParams.cx3FwAccess;
-    _fwParams.errBuff = NULL;
+    _fwParams.errBuff = (char*)NULL;
     _fwParams.errBuffSize = 0;
     _fwParams.fileHndl = (fwParams.hndlType == FHT_FW_FILE && fwParams.fileHndl) ? \
-            strncpy((char*)(new char[(strlen(fwParams.fileHndl) + 1)]), fwParams.fileHndl, strlen(fwParams.fileHndl) + 1) : NULL;
+            strncpy((char*)(new char[(strlen(fwParams.fileHndl) + 1)]), fwParams.fileHndl, strlen(fwParams.fileHndl) + 1) : (char*)NULL;
     // no support for flash params
-    _fwParams.flashParams = NULL;
+    _fwParams.flashParams = (flash_params_t*)NULL;
     _fwParams.forceLock = fwParams.forceLock;
     _fwParams.ignoreCacheRep = fwParams.ignoreCacheRep;
     _fwParams.mstHndl = (fwParams.hndlType == FHT_MST_DEV && fwParams.mstHndl) ? \
-            strncpy((char*)(new char[(strlen(fwParams.mstHndl) + 1)]), fwParams.mstHndl, strlen(fwParams.mstHndl) + 1) : NULL;
+            strncpy((char*)(new char[(strlen(fwParams.mstHndl) + 1)]), fwParams.mstHndl, strlen(fwParams.mstHndl) + 1) : (char*)NULL;
     _fwParams.noFlashVerify = fwParams.noFlashVerify;
     _fwParams.numOfBanks = fwParams.numOfBanks;
-    _fwParams.psid = fwParams.psid ? strncpy((char*)(new char[(strlen(fwParams.psid) + 1)]), fwParams.psid, strlen(fwParams.psid) + 1) : NULL;
+    _fwParams.psid = fwParams.psid ? strncpy((char*)(new char[(strlen(fwParams.psid) + 1)]), fwParams.psid, strlen(fwParams.psid) + 1) : (char*)NULL;
     _fwParams.readOnly = fwParams.readOnly;
     _fwParams.shortErrors = fwParams.shortErrors;
     _fwParams.uefiExtra = fwParams.uefiExtra;
@@ -608,7 +628,6 @@ FwOperations* FwOperations::FwOperationsCreate(fw_ops_params_t& fwParams)
     u_int8_t fwFormat;
     FBase *ioAccess;
     bool getFwFormatFromImg = false;
-
     if (!FwAccessCreate(fwParams, &ioAccess)) {
         return (FwOperations*)NULL;
     }
@@ -677,7 +696,7 @@ bool FwOperations::writeImage(ProgressCallBack progressFunc, u_int32_t addr, voi
                 rc = ((Flash*)_ioAccess)->write(curr_addr, p, trans);
             }
             if (!rc) {
-                return errmsg("Flash write failed: %s", _ioAccess->err());
+                return errmsg(MLXFW_FLASH_WRITE_ERR, "Flash write failed: %s", _ioAccess->err());
             }
         } else {
             trans = towrite;
@@ -705,7 +724,7 @@ bool FwOperations::writeImage(ProgressCallBack progressFunc, u_int32_t addr, voi
 bool FwOperations::ModifyImageFile(const char *fimage, u_int32_t addr, void *data, int cnt)
 {
     int file_size = 0;
-    u_int8_t * file_data = NULL;
+    u_int8_t * file_data = (u_int8_t*)NULL;
 
     if (!ReadImageFile(fimage, file_data, file_size, addr + cnt)) {
         return false;
@@ -722,8 +741,9 @@ bool FwOperations::ModifyImageFile(const char *fimage, u_int32_t addr, void *dat
 
 bool FwOperations::WriteImageToFile(const char *file_name, u_int8_t *data, u_int32_t length)
 {
+#ifndef UEFI_BUILD
     FILE* fh;
-    if ((fh = fopen(file_name, "wb")) == NULL) {
+    if ((fh = fopen(file_name, "wb")) == (FILE*)NULL) {
         return errmsg("Can not open %s: %s\n", file_name, strerror(errno));
     }
 
@@ -734,6 +754,9 @@ bool FwOperations::WriteImageToFile(const char *file_name, u_int8_t *data, u_int
     }
     fclose(fh);
     return true;
+#else
+    return errmsg("Not Implemented\n");
+#endif
 }
 
 bool FwOperations::CheckMac(u_int64_t mac) {
@@ -790,7 +813,7 @@ bool FwOperations::getInfoFromHwDevid(u_int32_t hwDevId, chip_type_t& chipT, con
         }
             i++;
     }
-    return errmsg("Failed to identify device ID(MT%d).", hwDevId);
+    return errmsg(MLXFW_DEV_ID_ERR, "Failed to identify device ID(MT%d).", hwDevId);
 }
 
 // TODO:combine both databases(hwDevData and hwDev2Str) and remove old unsupporded devices i.e infinihost infinihost_iii_ex infinihost_iii_lx
@@ -814,9 +837,9 @@ const FwOperations::HwDevData FwOperations::hwDevData[] = {
     { "BridgeX",          BRIDGEX_HW_ID,    CT_BRIDGEX,     0, {64102, 64112, 64122, 0}},
     { "SwitchX",          SWITCHX_HW_ID,    CT_SWITCHX,     0, {51000, 0}},
     { "Switch_IB",        SWITCH_IB_HW_ID,  CT_SWITCH_IB,   0, {52000, 0}},
-    { "ConnectX-4",       CX4_HW_ID,        CT_CONNECTX,    0, {4115, 0}},
-    { "ConnectX-4LX",     CX4LX_HW_ID,      CT_CONNECTX,    0, {4117, 0}},
-    { "Switch_EN",        SWITCH_EN_HW_ID,  CT_SWITCH_EN,   0, {52100, 0}},
+    { "ConnectX-4",       CX4_HW_ID,        CT_CONNECTX4,    0, {4115, 0}},
+    { "ConnectX-4LX",     CX4LX_HW_ID,      CT_CONNECTX4_LX,    0, {4117, 0}},
+    { "Spectrum",         SPECTRUM_HW_ID,   CT_SPECTRUM,   0, {52100, 0}},
     { (char*)NULL ,              0, CT_UNKNOWN, 0, {0}},// zero devid terminator
 };
 
@@ -839,7 +862,7 @@ const FwOperations::HwDev2Str FwOperations::hwDev2Str[] = {
         {"InfiniHost III Lx", INFINIHOST_III_LX_HW_ID,      0xA0},
         {"InfiniHost III Ex", INFINIHOST_III_EX_HW_ID,      0xA0},
         {"SwitchIB A0",       SWITCH_IB_HW_ID,  0x00},
-        {"SwitchEN A0",       SWITCH_EN_HW_ID,  0x00},
+        {"Spectrum A0",       SPECTRUM_HW_ID,  0x00},
         { (char*)NULL ,       (u_int32_t)0, (u_int8_t)0x00}, // zero device ID terminator
 };
 
@@ -917,7 +940,7 @@ bool FwOperations::CheckMatchingHwDevId(u_int32_t hwDevId, u_int32_t rev_id, u_i
         return false;
     }
 
-    return errmsg("FW image file cannot be programmed to device %s, it is intended for: %s only",
+    return errmsg(MLXFW_DEVICE_IMAGE_MISSMATCH_ERR, "FW image file cannot be programmed to device %s, it is intended for: %s only",
             curr_hw_id_name, supp_hw_id_list);
 }
 bool FwOperations::CheckMatchingDevId(u_int32_t hwDevId, u_int32_t imageDevId) {
@@ -975,7 +998,7 @@ bool FwOperations::CheckPSID(FwOperations &imageOps, u_int8_t allow_psid_change)
 {
     if (!allow_psid_change) {
         if (strncmp( _fwImgInfo.ext_info.psid, imageOps._fwImgInfo.ext_info.psid, PSID_LEN)) {
-            return errmsg("Image PSID is %s, it cannot be burnt into current device (PSID: %s)",
+            return errmsg(MLXFW_PSID_MISSMATCH_ERR, "Image PSID is %s, it cannot be burnt into current device (PSID: %s)",
                     imageOps._fwImgInfo.ext_info.psid, _fwImgInfo.ext_info.psid);
         }
     }
@@ -984,13 +1007,11 @@ bool FwOperations::CheckPSID(FwOperations &imageOps, u_int8_t allow_psid_change)
 
 bool FwOperations::CheckFwVersion(FwOperations &imageOps, u_int8_t forceVersion)
 {
-    FwVerInfo updateRequired = FVI_UNKNOWN;
+    FwVerInfo updateRequired;
     if (!forceVersion) {
-        updateRequired = FwVerLessThan(_fwImgInfo.ext_info.fw_ver, imageOps._fwImgInfo.ext_info.fw_ver, _fwImgInfo.fwType);
-        if (updateRequired == FVI_UNKNOWN) {
-            return errmsg("Cannot compare between FW versions(different branches)");
-        } else if (updateRequired != FVI_SMALLER ) {
-            return errmsg("FW is already updated.");
+        updateRequired = FwVerLessThan(_fwImgInfo.ext_info.fw_ver, imageOps._fwImgInfo.ext_info.fw_ver);
+       if (updateRequired != FVI_SMALLER ) {
+            return errmsg(MLXFW_FW_ALREADY_UPDATED_ERR, "FW is already updated.");
         }
     }
     return true;
@@ -998,7 +1019,7 @@ bool FwOperations::CheckFwVersion(FwOperations &imageOps, u_int8_t forceVersion)
 
 bool FwOperations::FwSwReset() {
     if (!_ioAccess->is_flash()) {
-        return errmsg("operation supported only for switch devices InfiniScaleIV and SwitchX over an IB interface");
+        return errmsg("operation supported only for switch devices InfiniScaleIV, SwitchX and SwitchIB over an IB interface");
     }
     if (!((Flash*)_ioAccess)->sw_reset()) {
         return errmsg("%s",  _ioAccess->err());
@@ -1355,6 +1376,7 @@ bool FwOperations::RomInfo::GetExpRomVerForOneRom(u_int32_t verOffset)
 
 bool FwOperations::ReadImageFile(const char *fimage, u_int8_t *&file_data, int &file_size, int min_size)
 {
+#ifndef UEFI_BUILD
     FILE* fh;
 
     if ((fh = fopen(fimage, "rb")) == NULL) {
@@ -1390,6 +1412,9 @@ bool FwOperations::ReadImageFile(const char *fimage, u_int8_t *&file_data, int &
     }
     fclose(fh);
     return true;
+#else
+    return errmsg("Not implemented.\n");
+#endif
 }
 
 void FwOperations::SetDevFlags(chip_type_t chipType, u_int32_t devType, fw_img_type_t fwType, bool &ibDev, bool &ethDev) {
@@ -1401,8 +1426,8 @@ void FwOperations::SetDevFlags(chip_type_t chipType, u_int32_t devType, fw_img_t
         ibDev = true;
         ethDev = true;
     } else {
-        ibDev  = (fwType == FIT_FS3 && chipType != CT_SWITCH_EN) || !CntxEthOnly(devType);
-        ethDev = (chipType == CT_CONNECTX) || (chipType == CT_SWITCH_EN);
+        ibDev  = (fwType == FIT_FS3 && chipType != CT_SPECTRUM) || !CntxEthOnly(devType);
+        ethDev = (chipType == CT_CONNECTX) || (chipType == CT_SPECTRUM) || (chipType == CT_CONNECTX4) || (chipType == CT_CONNECTX4_LX);
     }
 
     if ((!ibDev && !ethDev) || chipType == CT_UNKNOWN) {
@@ -1422,7 +1447,7 @@ bool FwOperations::IsFwSupportingRomModify(u_int16_t fw_ver[3])
 {
     u_int16_t supported_fw[3] = {MAJOR_MOD_ROM_FW,  MINOR_MOD_ROM_FW, SUBMINOR_MOD_ROM_FW};
     // only used in connectx (FS2)
-    FwVerInfo verInfo = FwVerLessThan(fw_ver, supported_fw, FIT_FS2);
+    FwVerInfo verInfo = FwVerLessThan(fw_ver, supported_fw);
     return ((verInfo == FVI_EQUAL) || (verInfo == FVI_GREATER));
 }
 
@@ -1480,7 +1505,7 @@ bool FwOperations::FwBurnData(u_int32_t *data, u_int32_t dataSize, ProgressCallB
     fwOpsParams imgOpsParams;
     char errBuff[1024] = {0};
 
-    imgOpsParams.psid      = NULL;
+    imgOpsParams.psid      = (char*)NULL;
     imgOpsParams.buffHndl  = data;
     imgOpsParams.buffSize = dataSize;
     imgOpsParams.errBuff = errBuff;
@@ -1491,7 +1516,7 @@ bool FwOperations::FwBurnData(u_int32_t *data, u_int32_t dataSize, ProgressCallB
     if (newImgOps == NULL) {
         return errmsg("Internal error: Failed to create modified image: %s", errBuff);
     }
-    if (!newImgOps->FwVerify(NULL)) {
+    if (!newImgOps->FwVerify((VerifyCallBack)NULL)) {
     	errmsg("Internal error: Modified image failed to verify: %s", newImgOps->err());
         newImgOps->FwCleanUp();
         delete newImgOps;
diff --git a/mlxfwops/lib/fw_ops.h b/mlxfwops/lib/fw_ops.h
index b546a39..93d58c2 100644
--- a/mlxfwops/lib/fw_ops.h
+++ b/mlxfwops/lib/fw_ops.h
@@ -59,8 +59,9 @@ public:
     // typedef std::tr1::function<void (void)> VerifyCallback;
 
     FwOperations(FBase *ioAccess) :
-        _ioAccess(ioAccess), _isCached(false), _wasVerified(false),
-        _quickQuery(false), _printFunc((PrintCallBack)NULL), _fname(NULL), _devName(NULL), _advErrors(true)
+    	_ioAccess(ioAccess), _isCached(false), _wasVerified(false),
+        _quickQuery(false), _printFunc((PrintCallBack)NULL), _fname((const char*)NULL),\
+		_devName((const char*)NULL), _advErrors(true)
     {
         memset(_sectionsToRead, 0, sizeof(_sectionsToRead));
         memset(&_fwImgInfo, 0, sizeof(_fwImgInfo));
@@ -71,7 +72,7 @@ public:
     virtual ~FwOperations()  {};
     //virtual void print_type() {};
     virtual u_int8_t FwType() = 0;
-    static FwVerInfo FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3], u_int8_t fwType);
+    static FwVerInfo FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3]);
     static bool IsFwSupportingRomModify(u_int16_t fw_ver[3]);
     static bool CntxEthOnly(u_int32_t devid);
     static void SetDevFlags(chip_type_t chipType, u_int32_t devType, fw_img_type_t fwType, bool &ibDev, bool &ethDev);
@@ -140,7 +141,6 @@ public:
         u_int8_t     expRomErrMsgValid;
         char         expRomErrMsg[MAX_ROM_ERR_MSG_LEN];
         rom_info_t   romsInfo[MAX_ROMS_NUM];
-
         std::vector<u_int8_t> romSect;
 
         bool GetExpRomVerForOneRom(u_int32_t verOffset);
@@ -196,8 +196,8 @@ public:
         ExtBurnParams():userGuidsSpecified(false), userMacsSpecified(false), userUidsSpecified(false),
                         vsdSpecified(false),blankGuids(false), burnFailsafe(true), allowPsidChange(false),
                         useImagePs(false), useImageGuids(false), singleImageBurn(true), noDevidCheck(false),
-                        ignoreVersionCheck(false), useImgDevData(false), burnRomOptions(BRO_DEFAULT), progressFunc(NULL),
-                        userVsd(NULL){}
+                        ignoreVersionCheck(false), useImgDevData(false), burnRomOptions(BRO_DEFAULT), progressFunc((ProgressCallBack)NULL),
+                        userVsd((char*)NULL){}
         };
 
         struct fwOpsParams{
@@ -213,7 +213,7 @@ public:
             u_int32_t buffSize;
             // FHT_UEFI_DEV
             uefi_Dev_t* uefiHndl;
-            f_fw_cmd uefiExtra;
+            uefi_dev_extra_t* uefiExtra;
             // FHT_MST_DEV
             char* mstHndl;
             bool forceLock;
@@ -235,8 +235,10 @@ public:
             std::vector<guid_t> userGuids;
             u_int8_t numOfGUIDs; // number of GUIDs to allocate for each port. keep zero for default. (FS3 image Only)
             u_int8_t stepSize; // step size between GUIDs. keep zero for default. (FS3 Image Only)
+            bool usePPAttr; // if set, use the per prot attributes below (FS3 Image Only)
+            u_int8_t numOfGUIDsPP[2]; // number of GUIDs to allocate for each port. keep 0xff for default. (FS3 image Only)
+            u_int8_t stepSizePP[2]; // step size between GUIDs. keep 0xff for default. (FS3 Image Only)
         };
-
 protected:
     #define FS3_IND_ADDR 0x24
     #define ARR_SIZE(arr) sizeof(arr)/sizeof(arr[0])
@@ -299,7 +301,7 @@ protected:
     typedef int (*print2log_func) (const char* format, ...);
 
     // Protected Methods
-
+    static int GetFwVerFormat(u_int16_t fwVer[3]);
     virtual bool UpdateImgCache(u_int8_t *buff, u_int32_t addr, u_int32_t size);
     bool CheckAndPrintCrcRes(char* pr, bool blank_crc, u_int32_t off, u_int32_t crc_act, u_int32_t crc_exp, bool ignore_crc = false,
             VerifyCallBack verifyCallBackFunc = (VerifyCallBack)NULL);
@@ -354,9 +356,6 @@ protected:
     // show advanced error msgs
     bool _advErrors;
 
-
-
-
 private:
 
     // Static Methods
diff --git a/mlxfwops/lib/mlxfwops.cpp b/mlxfwops/lib/mlxfwops.cpp
index d08e301..c46d98d 100755
--- a/mlxfwops/lib/mlxfwops.cpp
+++ b/mlxfwops/lib/mlxfwops.cpp
@@ -55,46 +55,127 @@ MLXFWOP_API int MLXFWOPCALL mlxfw_open_device_verbose(mlxfwops_t** mlxfwops_p, c
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_device(mlxfwops_t** mlxfwops_p, char *handle_name)
 {
-    return mlxfw_open_int(mlxfwops_p, handle_name, NULL, (char*)NULL, FHT_MST_DEV, NULL, 0);
+    return mlxfw_open_int(mlxfwops_p, handle_name, NULL, (char*)NULL, FHT_MST_DEV, (char*)NULL, 0);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_image(mlxfwops_t** mlxfwops_p, char *file_name, char *psid)
 {
-    return mlxfw_open_int(mlxfwops_p, file_name, NULL, psid, FHT_FW_FILE, NULL, 0);
+    return mlxfw_open_int(mlxfwops_p, file_name, NULL, psid, FHT_FW_FILE, (char*)NULL, 0);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_buffer(mlxfwops_t** mlxfwops_p, void* buffer, u_int32_t size, char *psid)
 {
-    return mlxfw_open_int(mlxfwops_p, buffer, &size, psid, FHT_FW_BUFF, NULL, 0);
+    return mlxfw_open_int(mlxfwops_p, buffer, &size, psid, FHT_FW_BUFF, (char*)NULL, 0);
 }
 
 #ifdef UEFI_BUILD
-MLXFWOP_API int MLXFWOPCALL mlxfw_open_uefi(mlxfwops_t** mlxfwops_p, uefi_Dev_t* dev, f_fw_cmd fw_cmd_func)
-{
-    return mlxfw_open_int(mlxfwops_p, dev, (void*)fw_cmd_func, (char*)NULL, FHT_UEFI_DEV, NULL, 0);
 
+MLXFWOP_API int MLXFWOPCALL mlxfw_open_uefi(mlxfwops_t** mlxfwops_p, uefi_Dev_t* dev, f_fw_cmd fw_cmd_func, uefi_dev_info_t* dev_info)
+{
+	uefi_dev_extra_t dev_extra;
+	memset(&dev_extra, 0, sizeof(dev_extra));
+	dev_extra.fw_cmd_func = fw_cmd_func;
+	dev_extra.dev_info = dev_info;
+    return mlxfw_open_int(mlxfwops_p, dev, (void*)&dev_extra, (char*)NULL, FHT_UEFI_DEV, (char*)NULL, 0);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_set_print(mlxfwops_t* mlxfwops, f_prog_func_str print_func)
 {
+    if (mlxfwops == NULL) {
+        return MLXFW_BAD_PARAM_ERR;
+    }
     return !static_cast<FwOperations*>((void*)mlxfwops)->FwSetPrint(print_func);
 }
 
-#endif
-/*
-int mlxfw_burn(mlxfwops_t* mlxfwops, char *image_file, u_int8_t force_version)
+MLXFWOP_API const char* MLXFWOPCALL mlxfw_err2str(int err)
 {
-    return 0;
+    switch (err) {
+    case 0:
+        return "";
+    case MLXFW_ERR:
+        return "General Error";
+    case MLXFW_MEM_ERR:
+        return "Memory allocation Error";
+    case MLXFW_ERR_IN_STR:
+        return "Error in String";
+    case MLXFW_PSID_MISSMATCH_ERR:
+        return "PSID Mismatch";
+    case MLXFW_FLASH_WRITE_ERR:
+        return "Flash write Failed";
+    case MLXFW_NO_VALID_IMAGE_ERR:
+        return "No valid image found";
+    case MLXFW_MULTIPLE_VALID_IMAGES_ERR:
+        return "More than one valid image found";
+    case MLXFW_BAD_CRC_ERR:
+        return "Bad CRC";
+    case MLXFW_BAD_CHECKSUM_ERR:
+        return "Bad Checksum";
+    case MLXFW_SECTION_TOO_LARGE_ERR:
+        return "Section too large";
+    case MLXFW_SECTION_CORRUPTED_ERR:
+        return "Section is corrupted";
+    case MLXFW_IMAGE_NOT_FS_ERR:
+        return "Image is not failsafe";
+    case MLXFW_IMAGE_TOO_LARGE_ERR:
+        return "Image too large";
+    case MLXFW_IMAGE_FORMAT_ERR:
+        return "Incompatible image format";
+    case MLXFW_DEVICE_IMAGE_MISSMATCH_ERR:
+        return "FW image does not match device";
+    case MLXFW_IMAGE_CORRUPTED_ERR:
+        return "FW image corrupted";
+    case MLXFW_FS_INFO_MISSMATCH_ERR:
+        return "Failsafe information mismatch";
+    case MLXFW_DEV_ID_ERR:
+        return "Unsupported device ID";
+    case MLXFW_UNSUPPORTED_BIN_VER_ERR:
+        return "Unsupported binary version";
+    case MLXFW_NO_VALID_ITOC_ERR:
+        return "No valid ITOC found";
+    case MLXFW_NO_MFG_ERR:
+        return "No MFG_INFO section found";
+    case MLXFW_UNKNOWN_SECT_VER_ERR:
+        return "Unknown Section Version";
+    case MLXFW_OCR_ERR:
+        return "-ocr flag must be specified";
+    case MLXFW_OPEN_OCR_ERR:
+        return "Failed to open device for flash direct access";
+    case MLXFW_FW_ALREADY_UPDATED_ERR:
+        return "FW already updated";
+    case MLXFW_ROM_UPDATE_IN_IMAGE_ERR:
+        return "Failed to update Exp-ROM in image";
+    case MLXFW_GET_SECT_ERR:
+        return "Failed to get Section";
+    case MLXFW_UPDATE_SECT_ERR:
+        return "Failed to update section";
+    case MLXFW_BAD_PARAM_ERR:
+        return "Bad parameter";
+    default:
+        return "Unknown Error";
+    }
 }
-*/
 
-MLXFWOP_API int MLXFWOPCALL mlxfw_burn(mlxfwops_t* dev_mlxfwops, mlxfwops_t* img_mlxfwops, u_int8_t force_version, f_prog_func prog_func)
+#endif
+
+MLXFWOP_API int MLXFWOPCALL mlxfw_burn(mlxfwops_t* dev_mlxfwops, mlxfwops_t* img_mlxfwops, u_int8_t force_version, f_prog_func prog_func, int allow_psid_change)
 {
-    return !static_cast<FwOperations*>((void*)dev_mlxfwops)->FwBurn(static_cast<FwOperations*>((void*)img_mlxfwops),force_version, prog_func);
+    if (dev_mlxfwops == NULL || img_mlxfwops == NULL) {
+        return MLXFW_BAD_PARAM_ERR;
+    }
+	FwOperations::ExtBurnParams burnParams = FwOperations::ExtBurnParams();
+    burnParams.ignoreVersionCheck = force_version;
+    burnParams.progressFunc = prog_func;
+    burnParams.allowPsidChange = allow_psid_change ? true : false;
+    bool rc = !static_cast<FwOperations*>((void*)dev_mlxfwops)->FwBurnAdvanced(static_cast<FwOperations*>((void*)img_mlxfwops),burnParams);
+    return static_cast<FwOperations*>((void*)dev_mlxfwops)->getErrorCode() ?\
+    		static_cast<FwOperations*>((void*)dev_mlxfwops)->getErrorCode() : rc;
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_query(mlxfwops_t* mlxfwops, fw_info_t* fw_info)
 {
+    if (mlxfwops == NULL) {
+        return MLXFW_BAD_PARAM_ERR;
+    }
     return (static_cast<FwOperations*>((void*)mlxfwops)->FwQuery(fw_info, true) == true) ? MLXFW_OK :  MLXFW_ERR_IN_STR;
 }
 
@@ -105,18 +186,27 @@ MLXFWOP_API const char* MLXFWOPCALL mlxfw_exp_rom_type_to_str(u_int16_t type)
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_verify(mlxfwops_t* mlxfwops)
 {
+    if (mlxfwops == NULL) {
+        return MLXFW_BAD_PARAM_ERR;
+    }
     return !static_cast<FwOperations*>((void*)mlxfwops)->FwVerify((f_prog_func_str)NULL);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_read_image(mlxfwops_t* mlxfwops, void* image, u_int32_t* image_size)
 {
+    if (mlxfwops == NULL) {
+        return MLXFW_BAD_PARAM_ERR;
+    }
     return !(static_cast<FwOperations*>((void*)mlxfwops)->FwReadData(image, image_size));
 }
 
 MLXFWOP_API void MLXFWOPCALL mlxfw_close(mlxfwops_t* mlxfwops)
 {
-    static_cast<FwOperations*>((void*)mlxfwops)->FwCleanUp();
-    delete static_cast<FwOperations*>((void*)mlxfwops);
+    if (mlxfwops) {
+        static_cast<FwOperations*>((void*)mlxfwops)->FwCleanUp();
+        delete static_cast<FwOperations*>((void*)mlxfwops);
+        mlxfwops = (mlxfwops_t*)NULL;
+    }
     return;
 }
 
@@ -127,3 +217,11 @@ MLXFWOP_API const char* MLXFWOPCALL mlxfw_get_last_error(mlxfwops_t* mlxfwops)
     }
     return (static_cast<FwOperations*>((void*)mlxfwops)->err());
 }
+
+MLXFWOP_API int MLXFWOPCALL mlxfw_get_last_error_code(mlxfwops_t* mlxfwops)
+{
+    if (mlxfwops == NULL) {
+        return MLXFW_BAD_PARAM_ERR;
+    }
+    return (static_cast<FwOperations*>((void*)mlxfwops)->getErrorCode());
+}
diff --git a/mlxfwops/lib/mlxfwops.h b/mlxfwops/lib/mlxfwops.h
index 0360476..fcb9919 100755
--- a/mlxfwops/lib/mlxfwops.h
+++ b/mlxfwops/lib/mlxfwops.h
@@ -45,13 +45,6 @@ extern "C" {
 
 typedef struct mlxfwops mlxfwops_t;
 
-enum {
-    MLXFW_OK = 0,
-    MLXFW_ERR,
-    MLXFW_MEM_ERR,
-    MLXFW_ERR_IN_STR,
-};
-
 struct image_context {
     void * data;
     u_int32_t size;
@@ -67,15 +60,19 @@ MLXFWOP_API int MLXFWOPCALL mlxfw_open_buffer(mlxfwops_t** mlxfwops_p, void* buf
 
 
 #ifdef UEFI_BUILD
+#include <mft_uefi_common.h>
 
-MLXFWOP_API int MLXFWOPCALL mlxfw_open_uefi(mlxfwops_t** mlxfwops_p, uefi_Dev_t* dev, f_fw_cmd fw_cmd_func);
+MLXFWOP_API int MLXFWOPCALL mlxfw_open_uefi(mlxfwops_t** mlxfwops_p, uefi_Dev_t* dev, f_fw_cmd fw_cmd_func, uefi_dev_info_t* dev_info);
 MLXFWOP_API int MLXFWOPCALL mlxfw_set_print(mlxfwops_t* mlxfwops, f_prog_func_str print_func);
+MLXFWOP_API const char* MLXFWOPCALL mlxfw_err2str(int err);
 
 #endif
 
 MLXFWOP_API const char* MLXFWOPCALL mlxfw_get_last_error(mlxfwops_t* mlxfwops);
 
-MLXFWOP_API int MLXFWOPCALL mlxfw_burn(mlxfwops_t* dev_mlxfwops, mlxfwops_t* img_mlxfwops, u_int8_t force_version, f_prog_func prog_func);
+MLXFWOP_API int MLXFWOPCALL mlxfw_get_last_error_code(mlxfwops_t* mlxfwops);
+
+MLXFWOP_API int MLXFWOPCALL mlxfw_burn(mlxfwops_t* dev_mlxfwops, mlxfwops_t* img_mlxfwops, u_int8_t force_version, f_prog_func prog_func, int allow_psid_change);
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_read_image(mlxfwops_t* mlxfwops, void* image, u_int32_t* image_size);
 
diff --git a/mlxfwops/lib/mlxfwops_com.h b/mlxfwops/lib/mlxfwops_com.h
index 5d4a19d..e690016 100644
--- a/mlxfwops/lib/mlxfwops_com.h
+++ b/mlxfwops/lib/mlxfwops_com.h
@@ -36,6 +36,10 @@
 
 #include <compatibility.h>
 
+#ifdef UEFI_BUILD
+#include <mft_uefi_common.h>
+#endif
+
 #ifdef __WIN__
 
 #ifdef MLXFWOP_EXPORTS
@@ -60,6 +64,7 @@ typedef int (*f_prog_func_str) (char* str);
 #define VSD_LEN  208
 #define PSID_LEN 16
 #define PRODUCT_VER_LEN 16
+#define PRS_NAME_LEN 100
 
 #define FREE_STR_MAX_LEN    256
 
@@ -81,6 +86,39 @@ typedef int (*f_prog_func_str) (char* str);
 	} while(0)\
 
 enum {
+    MLXFW_OK = 0,
+    MLXFW_ERR,
+    MLXFW_MEM_ERR,
+    MLXFW_ERR_IN_STR,
+    MLXFW_PSID_MISSMATCH_ERR,
+    MLXFW_FLASH_WRITE_ERR,
+    MLXFW_NO_VALID_IMAGE_ERR,
+    MLXFW_MULTIPLE_VALID_IMAGES_ERR,
+    MLXFW_BAD_CRC_ERR,
+    MLXFW_BAD_CHECKSUM_ERR,
+    MLXFW_SECTION_TOO_LARGE_ERR,
+    MLXFW_SECTION_CORRUPTED_ERR,
+    MLXFW_IMAGE_NOT_FS_ERR,
+    MLXFW_IMAGE_TOO_LARGE_ERR,
+    MLXFW_IMAGE_FORMAT_ERR,
+    MLXFW_DEVICE_IMAGE_MISSMATCH_ERR,
+    MLXFW_IMAGE_CORRUPTED_ERR,
+    MLXFW_FS_INFO_MISSMATCH_ERR,
+    MLXFW_DEV_ID_ERR,
+    MLXFW_UNSUPPORTED_BIN_VER_ERR,
+    MLXFW_NO_VALID_ITOC_ERR,
+    MLXFW_NO_MFG_ERR,
+    MLXFW_UNKNOWN_SECT_VER_ERR,
+    MLXFW_OCR_ERR,
+    MLXFW_OPEN_OCR_ERR,
+    MLXFW_FW_ALREADY_UPDATED_ERR,
+    MLXFW_ROM_UPDATE_IN_IMAGE_ERR,
+    MLXFW_GET_SECT_ERR,
+    MLXFW_UPDATE_SECT_ERR,
+    MLXFW_BAD_PARAM_ERR
+};
+
+enum {
     GUIDS         = 4,
     MACS          = 2,
     MAX_GUIDS     = 32
@@ -119,7 +157,9 @@ typedef enum chip_type {
     CT_IS4,
     CT_CONNECT_IB,
     CT_SWITCH_IB,
-    CT_SWITCH_EN,
+    CT_SPECTRUM,
+    CT_CONNECTX4,
+    CT_CONNECTX4_LX,
 }chip_type_t;
 
 typedef struct guid {
@@ -136,6 +176,9 @@ typedef struct fs3_uid {
     u_int8_t num_of_guids; // set 0 for default
     u_int8_t step_size; // set 0 for default, not relevant for devices >= CX4
     int set_mac_from_guid;  // if set , base_mac will be derrived automatically from base guid
+    int use_pp_attr; // if set, num_of_guids[2] and step_size[2] will be used for the uid attributes.
+    u_int8_t num_of_guids_pp[2]; // set 0xff for default
+    u_int8_t step_size_pp[2]; // set 0xff for default, not relevant for devices >= CX4
 } fs3_uid_t;
 
 typedef struct rom_info {
@@ -191,6 +234,7 @@ typedef struct fs2_info_ext {
     u_int8_t     access_key_exists;
     guid_t       access_key_value;
     u_int8_t     blank_guids;
+    char         prs_name[PRS_NAME_LEN];
 } fs2_info_t;
 
 typedef struct roms_info {
@@ -252,15 +296,9 @@ enum ExpRomProto {
 };
 
 typedef enum fw_ver_info {
-    FVI_UNKNOWN = -1,
-    FVI_SMALLER = 0,
-    FVI_EQUAL = 1,
-    FVI_GREATER = 2,
+    FVI_SMALLER = -1,
+    FVI_EQUAL = 0,
+    FVI_GREATER = 1,
 } fw_ver_info_t;
 
-typedef struct _MLX4_DEV uefi_Dev_t;
-typedef int (*f_fw_cmd) (uefi_Dev_t* dev, void* buffer, int* size);
-
-
-
 #endif
diff --git a/mflash/mflash_access_layer.h b/mlxfwops/uefi_c/mft_uefi_common.h
old mode 100755
new mode 100644
similarity index 62%
copy from mflash/mflash_access_layer.h
copy to mlxfwops/uefi_c/mft_uefi_common.h
index d3314e5..591180f
--- a/mflash/mflash_access_layer.h
+++ b/mlxfwops/uefi_c/mft_uefi_common.h
@@ -1,5 +1,9 @@
 /*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ *
+ * mft_uefi_common.h - Mellanox Technilogies LTD. UEFI common structs header file
+ * ==================================================================
+ *
+ * Copyright (c) 2005 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,31 +32,28 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- */
-
-/*
- * mflash_inband.h
  *
- *  Created on: Jul 6, 2011
- *      Author: mohammad
+ *  Version: $Id: $
+ *
  */
+#ifndef MFT_MLXFWOPS_UEFI_C_MFT_UEFI_COMMON_H_
+#define MFT_MLXFWOPS_UEFI_C_MFT_UEFI_COMMON_H_
 
-#ifndef MFLASH_ACCESS_LAYER_H_
-#define MFLASH_ACCESS_LAYER_H_
 
-#include <compatibility.h>
-//#include "cib_cif.h"
+typedef struct _MLX4_DEV uefi_Dev_t;
 
-#include "mflash_common_structs.h"
+typedef int (*f_fw_cmd) (uefi_Dev_t* dev, void* buffer, int* w_size, int* r_size);
 
-#define BOOT_CR_SPACE_ADDR 0xf0000
+typedef struct uefi_dev_info {
+	u_int32_t hw_dev_id;
+	u_int32_t rev_id;
+	u_int32_t max_buffer_size;
+} uefi_dev_info_t;
 
-int sx_get_flash_info_by_type(mflash* mfl, unsigned *type_index, int *log2size, u_int8_t *no_flash);
-int sx_block_read_by_type(mflash* mfl, u_int32_t blk_addr, u_int32_t blk_size, u_int8_t* data);
-int sx_block_write_by_type(mflash* mfl, u_int32_t addr, u_int32_t size, u_int8_t* data);
-int sx_flash_lock_by_type(mflash* mfl, int lock_state);
-int sx_erase_sect_by_type(mflash* mfl, u_int32_t addr);
-int mf_update_boot_addr_by_type(mflash* mfl, u_int32_t boot_addr);
+typedef struct uefi_dev_extra{
+    f_fw_cmd fw_cmd_func;
+    uefi_dev_info_t* dev_info;
+}uefi_dev_extra_t;
 
 
-#endif /* MFLASH_ACCESS_LAYER_H_ */
+#endif /* MFT_MLXFWOPS_UEFI_C_MFT_UEFI_COMMON_H_ */
diff --git a/mstdump/mstdump_dbs/ConnectX3.csv b/mstdump/mstdump_dbs/ConnectX3.csv
index 989c709..940e162 100755
--- a/mstdump/mstdump_dbs/ConnectX3.csv
+++ b/mstdump/mstdump_dbs/ConnectX3.csv
@@ -175,7 +175,8 @@
 0x013520,1,
 0x013530,2,
 0x013544,2,
-0x013580,15,
+0x013580,8,
+0x0135a4,6,
 0x0135c0,16,
 0x013604,2,
 0x013628,2,
@@ -3519,7 +3520,8 @@
 0x0f3554,10,
 0x0f35c0,2,
 0x0f35dc,7,
-0x0f3600,18,
+0x0f3600,16,
+0x0f3644,1,
 0x0f365c,11,
 0x0f36a0,1,
 0x0f36b0,2,
@@ -3546,7 +3548,8 @@
 0x0f3894,3,
 0x0f38c0,7,
 0x0f38e0,6,
-0x0f3900,15,
+0x0f3900,8,
+0x0f3924,6,
 0x0f3940,17,
 0x0f3998,1,
 0x0f39a0,9,
diff --git a/mstdump/mstdump_dbs/ConnectX3Pro.csv b/mstdump/mstdump_dbs/ConnectX3Pro.csv
index e3b71e5..aadf8dd 100755
--- a/mstdump/mstdump_dbs/ConnectX3Pro.csv
+++ b/mstdump/mstdump_dbs/ConnectX3Pro.csv
@@ -3572,7 +3572,8 @@
 0x0f3554,10,
 0x0f35c0,2,
 0x0f35dc,7,
-0x0f3600,18,
+0x0f3600,16,
+0x0f3644,1,
 0x0f365c,11,
 0x0f36a0,1,
 0x0f36b0,2,
diff --git a/mstdump/mstdump_dbs/ConnectX4.csv b/mstdump/mstdump_dbs/ConnectX4.csv
index 69072b0..789cfca 100644
--- a/mstdump/mstdump_dbs/ConnectX4.csv
+++ b/mstdump/mstdump_dbs/ConnectX4.csv
@@ -2692,7 +2692,6 @@
 0x0e3070,1,
 0x0e3080,2,
 0x0e308c,1,
-0x0e3400,1,
 0x0e3440,21,
 0x0e34e4,13,
 0x0e3520,6,
diff --git a/mstdump/mstdump_dbs/ConnectX4LX.csv b/mstdump/mstdump_dbs/ConnectX4LX.csv
index 03dfdbb..b0e5309 100644
--- a/mstdump/mstdump_dbs/ConnectX4LX.csv
+++ b/mstdump/mstdump_dbs/ConnectX4LX.csv
@@ -194,7 +194,7 @@
 0x017cc0,6,
 0x017ce0,6,
 0x017d00,3,
-0x017d10,5,
+0x017d10,6,
 0x018400,11,
 0x018430,2,
 0x018440,4,
@@ -238,7 +238,8 @@
 0x01f880,3,
 0x020004,1,
 0x02000c,4,
-0x020080,9,
+0x020080,3,
+0x020090,5,
 0x020800,16,
 0x020900,192,
 0x021004,1,
@@ -248,9 +249,8 @@
 0x021480,1,
 0x021704,2,
 0x02173c,17,
-0x021804,1,
-0x02180c,4,
-0x021840,2,
+0x0217fc,2,
+0x021844,1,
 0x022280,12,
 0x022408,6,
 0x022444,1,
@@ -468,7 +468,7 @@
 0x02cae0,6,
 0x02cb00,6,
 0x02cb20,6,
-0x02cc48,4,
+0x02cc48,5,
 0x02cd00,9,
 0x02cd40,18,
 0x030004,2,
@@ -521,11 +521,14 @@
 0x034c20,4,
 0x034c40,9,
 0x034c80,9,
+0x034cc0,3,
+0x034cd0,3,
 0x034e04,2,
 0x034e10,4,
 0x034e44,1,
 0x034e4c,4,
 0x034e80,6,
+0x034ea0,4,
 0x034f04,1,
 0x034f18,11,
 0x034f80,2,
@@ -578,7 +581,7 @@
 0x0388a0,6,
 0x0388c0,6,
 0x038900,28,
-0x038978,1,
+0x038978,2,
 0x038a40,25,
 0x038ac0,16,
 0x039000,35,
@@ -698,7 +701,9 @@
 0x050254,1,
 0x050264,3,
 0x050280,2,
-0x0502b0,2,
+0x050290,2,
+0x0502b4,1,
+0x0502bc,1,
 0x0502c4,1,
 0x0502cc,1,
 0x0502d4,1,
@@ -788,6 +793,11 @@
 0x050d80,1,
 0x050d90,1,
 0x050da0,1,
+0x050db0,1,
+0x050dc0,1,
+0x050dd0,1,
+0x050de0,1,
+0x050e00,64,
 0x052000,192,
 0x052800,2,
 0x053000,51,
@@ -832,7 +842,7 @@
 0x054954,4,
 0x054970,1,
 0x054980,1,
-0x054990,3,
+0x054990,5,
 0x0549c4,13,
 0x054a04,1,
 0x054a0c,4,
@@ -880,6 +890,7 @@
 0x055620,6,
 0x055640,6,
 0x055660,6,
+0x055680,6,
 0x056000,2,
 0x056044,1,
 0x05604c,4,
@@ -927,8 +938,8 @@
 0x059880,1,
 0x059890,1,
 0x0598a0,1,
-0x0598d4,2,
-0x0598e0,1,
+0x0598b0,1,
+0x0598d8,3,
 0x059900,3,
 0x059980,9,
 0x0599c0,32,
@@ -956,6 +967,7 @@
 0x05a0a0,1,
 0x05a0b0,1,
 0x05a0c0,1,
+0x05a0d4,1,
 0x060020,4,
 0x060120,4,
 0x060144,2,
@@ -1097,7 +1109,7 @@
 0x064884,2,
 0x0648c8,14,
 0x065018,2,
-0x065080,9,
+0x06507c,10,
 0x0650c0,16,
 0x065104,3,
 0x065114,1,
@@ -1112,7 +1124,7 @@
 0x066028,2,
 0x066050,2,
 0x066078,2,
-0x0660a0,26,
+0x0660a0,27,
 0x0661ac,1,
 0x0661d8,4,
 0x066200,6,
@@ -1207,7 +1219,7 @@
 0x0749c0,16,
 0x075000,3,
 0x075010,2,
-0x075020,3,
+0x075020,4,
 0x075100,2,
 0x080000,29,
 0x080340,14,
@@ -1315,7 +1327,7 @@
 0x0868c0,6,
 0x0868e0,6,
 0x086900,9,
-0x086940,16,
+0x086940,17,
 0x087000,26,
 0x087100,1,
 0x087108,1,
@@ -1387,7 +1399,7 @@
 0x0935c0,3,
 0x094000,9,
 0x094040,19,
-0x0940c0,1,
+0x0940c0,2,
 0x094800,1,
 0x094828,1,
 0x094850,1,
@@ -1502,8 +1514,7 @@
 0x0a64c0,6,
 0x0a6500,9,
 0x0a6540,18,
-0x0a65c0,2,
-0x0a65cc,1,
+0x0a65c0,4,
 0x0a8000,10,
 0x0a802c,15,
 0x0a806c,5,
@@ -1598,44 +1609,50 @@
 0x0b17ec,1,
 0x0b1800,9,
 0x0b1840,16,
-0x0b2000,2,
-0x0b2010,37,
-0x0b20c0,49,
-0x0b2200,2,
-0x0b2210,37,
-0x0b22c0,49,
-0x0b2400,2,
-0x0b2410,37,
-0x0b24c0,49,
-0x0b2600,2,
-0x0b2610,37,
-0x0b26c0,49,
-0x0b2800,2,
-0x0b2810,37,
-0x0b28c0,49,
-0x0b2a00,2,
-0x0b2a10,37,
-0x0b2ac0,49,
-0x0b2c00,2,
-0x0b2c10,37,
-0x0b2cc0,49,
-0x0b2e00,2,
-0x0b2e10,37,
-0x0b2ec0,49,
-0x0b3000,1,
-0x0b3010,1,
-0x0b4000,157,
+0x0b2000,9,
+0x0b2040,48,
+0x0b2104,7,
+0x0b2200,9,
+0x0b2240,48,
+0x0b2304,7,
+0x0b2400,9,
+0x0b2440,48,
+0x0b2504,7,
+0x0b2600,9,
+0x0b2640,48,
+0x0b2704,7,
+0x0b2800,9,
+0x0b2840,48,
+0x0b2904,7,
+0x0b2a00,9,
+0x0b2a40,48,
+0x0b2b04,7,
+0x0b2c00,9,
+0x0b2c40,48,
+0x0b2d04,7,
+0x0b2e00,9,
+0x0b2e40,48,
+0x0b2f04,7,
+0x0b3000,65,
+0x0b3140,35,
+0x0b31d0,1,
+0x0b4000,132,
+0x0b4240,13,
 0x0b4278,26,
 0x0b4300,9,
+0x0b4380,32,
 0x0b4404,1,
 0x0b440c,4,
+0x0b4444,1,
+0x0b444c,4,
+0x0b4484,1,
+0x0b448c,4,
+0x0b44c4,3,
 0x0b4800,73,
-0x0b4940,20,
-0x0b49a0,4,
+0x0b4940,28,
 0x0b49c4,5,
 0x0b4a00,1,
-0x0b4a20,8,
-0x0b4a44,3,
+0x0b4a20,16,
 0x0b5000,7,
 0x0b5040,12,
 0x0b5100,9,
@@ -1644,7 +1661,7 @@
 0x0b6028,3,
 0x0b6050,3,
 0x0b6078,3,
-0x0b60a0,6,
+0x0b60a0,7,
 0x0b61ac,1,
 0x0b61d8,4,
 0x0b6200,6,
@@ -1663,6 +1680,7 @@
 0x0b78c0,6,
 0x0b78e0,6,
 0x0b7900,6,
+0x0b7a00,1,
 0x0d0000,5,
 0x0d0038,4,
 0x0d0050,4,
@@ -1815,7 +1833,7 @@
 0x0d3e20,6,
 0x0d3e40,6,
 0x0d3e80,3,
-0x0d3e90,1,
+0x0d3e90,2,
 0x0d4000,29,
 0x0d4078,4,
 0x0d4090,2,
@@ -1844,8 +1862,7 @@
 0x0d46c0,11,
 0x0d4700,14,
 0x0d4740,14,
-0x0d4780,62,
-0x0d487c,6,
+0x0d4780,69,
 0x0d4c00,6,
 0x0d4c40,14,
 0x0d4c80,9,
@@ -1895,8 +1912,7 @@
 0x0d56c0,11,
 0x0d5700,14,
 0x0d5740,14,
-0x0d5780,62,
-0x0d587c,6,
+0x0d5780,69,
 0x0d5c00,6,
 0x0d5c40,14,
 0x0d5c80,9,
@@ -1968,7 +1984,7 @@
 0x0d8040,6,
 0x0d8060,17,
 0x0d80c0,38,
-0x0d8180,1,
+0x0d8180,2,
 0x0d8400,2,
 0x0d8428,2,
 0x0d8450,2,
@@ -1982,7 +1998,7 @@
 0x0d8660,6,
 0x0d8680,3,
 0x0d8800,2,
-0x0d9000,35,
+0x0d9000,36,
 0x0d9100,26,
 0x0d916c,7,
 0x0d91a0,1,
@@ -2011,7 +2027,7 @@
 0x0d976c,2,
 0x0d9780,6,
 0x0d97a0,2,
-0x0d9800,35,
+0x0d9800,36,
 0x0d9900,26,
 0x0d996c,7,
 0x0d99a0,1,
@@ -2103,23 +2119,7 @@
 0x0dde50,6,
 0x0dde80,9,
 0x0ddec0,16,
-0x0de000,123,
-0x0de200,2,
-0x0de20c,3,
-0x0de220,2,
-0x0de22c,3,
-0x0de240,2,
-0x0de24c,3,
-0x0de260,2,
-0x0de26c,3,
-0x0de280,2,
-0x0de28c,3,
-0x0de2a0,2,
-0x0de2ac,3,
-0x0de2c0,2,
-0x0de2cc,3,
-0x0de2e0,2,
-0x0de2ec,3,
+0x0de000,135,
 0x0de300,2,
 0x0de30c,3,
 0x0de320,2,
@@ -2136,73 +2136,72 @@
 0x0de3cc,3,
 0x0de3e0,2,
 0x0de3ec,3,
-0x0de400,123,
-0x0de600,2,
-0x0de60c,3,
-0x0de620,2,
-0x0de62c,3,
-0x0de640,2,
-0x0de64c,3,
-0x0de660,2,
-0x0de66c,3,
-0x0de680,2,
-0x0de68c,3,
-0x0de6a0,2,
-0x0de6ac,3,
-0x0de6c0,2,
-0x0de6cc,3,
-0x0de6e0,2,
-0x0de6ec,3,
-0x0de700,2,
-0x0de70c,3,
-0x0de720,2,
-0x0de72c,3,
-0x0de740,2,
-0x0de74c,3,
-0x0de760,2,
-0x0de76c,3,
-0x0de780,2,
-0x0de78c,3,
-0x0de7a0,2,
-0x0de7ac,3,
-0x0de7c0,2,
-0x0de7cc,3,
-0x0de7e0,2,
-0x0de7ec,3,
-0x0de800,123,
-0x0dea00,2,
-0x0dea0c,3,
-0x0dea20,2,
-0x0dea2c,3,
-0x0dea40,2,
-0x0dea4c,3,
-0x0dea60,2,
-0x0dea6c,3,
-0x0dea80,2,
-0x0dea8c,3,
-0x0deaa0,2,
-0x0deaac,3,
-0x0deac0,2,
-0x0deacc,3,
-0x0deae0,2,
-0x0deaec,3,
-0x0deb00,2,
-0x0deb0c,3,
-0x0deb20,2,
-0x0deb2c,3,
-0x0deb40,2,
-0x0deb4c,3,
-0x0deb60,2,
-0x0deb6c,3,
-0x0deb80,2,
-0x0deb8c,3,
-0x0deba0,2,
-0x0debac,3,
-0x0debc0,2,
-0x0debcc,3,
-0x0debe0,2,
-0x0debec,3,
-0x0dec00,123,
+0x0de400,2,
+0x0de40c,3,
+0x0de420,2,
+0x0de42c,3,
+0x0de440,2,
+0x0de44c,3,
+0x0de460,2,
+0x0de46c,3,
+0x0de480,2,
+0x0de48c,3,
+0x0de4a0,2,
+0x0de4ac,3,
+0x0de4c0,2,
+0x0de4cc,3,
+0x0de4e0,2,
+0x0de4ec,3,
+0x0de500,135,
+0x0de800,2,
+0x0de80c,3,
+0x0de820,2,
+0x0de82c,3,
+0x0de840,2,
+0x0de84c,3,
+0x0de860,2,
+0x0de86c,3,
+0x0de880,2,
+0x0de88c,3,
+0x0de8a0,2,
+0x0de8ac,3,
+0x0de8c0,2,
+0x0de8cc,3,
+0x0de8e0,2,
+0x0de8ec,3,
+0x0de900,2,
+0x0de90c,3,
+0x0de920,2,
+0x0de92c,3,
+0x0de940,2,
+0x0de94c,3,
+0x0de960,2,
+0x0de96c,3,
+0x0de980,2,
+0x0de98c,3,
+0x0de9a0,2,
+0x0de9ac,3,
+0x0de9c0,2,
+0x0de9cc,3,
+0x0de9e0,2,
+0x0de9ec,3,
+0x0dea00,135,
+0x0ded00,2,
+0x0ded0c,3,
+0x0ded20,2,
+0x0ded2c,3,
+0x0ded40,2,
+0x0ded4c,3,
+0x0ded60,2,
+0x0ded6c,3,
+0x0ded80,2,
+0x0ded8c,3,
+0x0deda0,2,
+0x0dedac,3,
+0x0dedc0,2,
+0x0dedcc,3,
+0x0dede0,2,
+0x0dedec,3,
 0x0dee00,2,
 0x0dee0c,3,
 0x0dee20,2,
@@ -2219,23 +2218,7 @@
 0x0deecc,3,
 0x0deee0,2,
 0x0deeec,3,
-0x0def00,2,
-0x0def0c,3,
-0x0def20,2,
-0x0def2c,3,
-0x0def40,2,
-0x0def4c,3,
-0x0def60,2,
-0x0def6c,3,
-0x0def80,2,
-0x0def8c,3,
-0x0defa0,2,
-0x0defac,3,
-0x0defc0,2,
-0x0defcc,3,
-0x0defe0,2,
-0x0defec,3,
-0x0df000,123,
+0x0def00,135,
 0x0df200,2,
 0x0df20c,3,
 0x0df220,2,
@@ -2268,7 +2251,40 @@
 0x0df3cc,3,
 0x0df3e0,2,
 0x0df3ec,3,
-0x0df400,2,
+0x0df400,135,
+0x0df700,2,
+0x0df70c,3,
+0x0df720,2,
+0x0df72c,3,
+0x0df740,2,
+0x0df74c,3,
+0x0df760,2,
+0x0df76c,3,
+0x0df780,2,
+0x0df78c,3,
+0x0df7a0,2,
+0x0df7ac,3,
+0x0df7c0,2,
+0x0df7cc,3,
+0x0df7e0,2,
+0x0df7ec,3,
+0x0df800,2,
+0x0df80c,3,
+0x0df820,2,
+0x0df82c,3,
+0x0df840,2,
+0x0df84c,3,
+0x0df860,2,
+0x0df86c,3,
+0x0df880,2,
+0x0df88c,3,
+0x0df8a0,2,
+0x0df8ac,3,
+0x0df8c0,2,
+0x0df8cc,3,
+0x0df8e0,2,
+0x0df8ec,3,
+0x0df900,2,
 0x0e0000,3,
 0x0e0010,4,
 0x0e0028,3,
@@ -2381,7 +2397,7 @@
 0x0e1e04,5,
 0x0e1e1c,1,
 0x0e1f00,16,
-0x0e20c0,8,
+0x0e20c0,9,
 0x0e20ec,5,
 0x0e2108,3,
 0x0e2200,5,
@@ -2405,10 +2421,9 @@
 0x0e2a60,1,
 0x0e2a80,17,
 0x0e3020,10,
-0x0e3070,1,
+0x0e3070,2,
 0x0e3080,2,
 0x0e308c,1,
-0x0e3400,1,
 0x0e3440,21,
 0x0e34e4,13,
 0x0e3520,6,
@@ -2465,7 +2480,7 @@
 0x0f01a8,1,
 0x0f01c0,2,
 0x0f01d0,10,
-0x0f0200,61,
+0x0f0200,62,
 0x0f0404,9,
 0x0f0440,8,
 0x0f0480,5,
@@ -2484,13 +2499,12 @@
 0x0f095c,5,
 0x0f097c,5,
 0x0f099c,1,
-0x0f0a90,2,
+0x0f0a90,3,
 0x0f0c00,128,
 0x0f0e04,1,
 0x0f0e14,9,
 0x0f0e3c,1,
-0x0f1000,3,
-0x0f1010,12,
+0x0f1000,16,
 0x0f1080,10,
 0x0f10c0,1,
 0x0f10e0,2,
@@ -2665,24 +2679,21 @@
 0x1008a0,24,
 0x100920,24,
 0x100a00,48,
-0x100b00,59,
+0x100adc,68,
 0x100d00,1,
 0x100d08,2,
 0x100d80,4,
-0x100da0,6,
 0x100e00,4,
 0x100e20,1,
 0x100e28,7,
 0x100e48,7,
 0x100e68,7,
 0x100e88,6,
-0x100ee0,6,
+0x100ebc,9,
 0x100f00,6,
 0x100f1c,10,
 0x100f70,8,
 0x100f94,4,
-0x100fc0,6,
-0x100fe0,6,
 0x101404,1,
 0x10141c,26,
 0x101504,1,
@@ -2692,10 +2703,10 @@
 0x101648,6,
 0x101680,16,
 0x1016e0,16,
-0x101780,1,
+0x101780,2,
 0x101790,16,
 0x101a00,14,
-0x101a40,3,
+0x101a3c,4,
 0x101a50,2,
 0x101a60,2,
 0x101a70,2,
@@ -2751,7 +2762,7 @@
 0x103760,10,
 0x103800,1,
 0x10380c,1,
-0x103a00,64,
+0x10397c,97,
 0x104000,3,
 0x104020,3,
 0x104040,3,
@@ -2765,9 +2776,10 @@
 0x1040e4,1,
 0x1040f0,21,
 0x104148,18,
-0x1041f0,6,
+0x1041f0,4,
+0x104204,3,
 0x104308,9,
-0x104330,1,
+0x104330,2,
 0x104340,16,
 0x1043b4,4,
 0x1043c8,4,
@@ -2787,14 +2799,14 @@
 0x104908,1,
 0x104984,1,
 0x1049a0,24,
-0x104a08,6,
-0x104a28,6,
-0x104a48,6,
-0x104a68,6,
-0x104a88,6,
-0x104aa8,6,
-0x104ac8,6,
-0x104ae8,15,
+0x104a04,7,
+0x104a24,7,
+0x104a44,7,
+0x104a64,7,
+0x104a84,7,
+0x104aa4,7,
+0x104ac4,7,
+0x104ae4,16,
 0x104b40,16,
 0x104c00,6,
 0x104c20,6,
@@ -2811,12 +2823,26 @@
 0x105704,3,
 0x105734,1,
 0x106000,62,
-0x106100,32,
-0x106184,1,
+0x106100,35,
+0x1061c0,6,
+0x1061e0,6,
+0x106200,6,
+0x106220,6,
+0x106240,6,
+0x106260,6,
+0x106280,6,
+0x1062a0,6,
+0x1062c0,6,
+0x1062e0,6,
+0x106300,6,
+0x106320,6,
+0x106340,6,
+0x106360,6,
+0x106380,6,
+0x1063a0,6,
 0x107010,1,
-0x110000,4,
-0x110014,2,
-0x110020,5,
+0x110000,7,
+0x110020,7,
 0x110040,5,
 0x110060,6,
 0x110080,5,
@@ -2824,9 +2850,8 @@
 0x1100a0,4,
 0x1100b8,8,
 0x1100e0,6,
-0x110200,4,
-0x110214,2,
-0x110220,5,
+0x110200,7,
+0x110220,7,
 0x110240,5,
 0x110260,6,
 0x110280,5,
@@ -2834,9 +2859,8 @@
 0x1102a0,4,
 0x1102b8,8,
 0x1102e0,6,
-0x110400,4,
-0x110414,2,
-0x110420,5,
+0x110400,7,
+0x110420,7,
 0x110440,5,
 0x110460,6,
 0x110480,5,
@@ -2844,9 +2868,8 @@
 0x1104a0,4,
 0x1104b8,8,
 0x1104e0,6,
-0x110600,4,
-0x110614,2,
-0x110620,5,
+0x110600,7,
+0x110620,7,
 0x110640,5,
 0x110660,6,
 0x110680,5,
@@ -2869,13 +2892,13 @@
 0x111200,6,
 0x111220,6,
 0x111240,3,
-0x111400,3,
+0x111400,6,
+0x111420,3,
 0x111480,9,
 0x1114c0,25,
 0x111540,25,
 0x1115c0,25,
-0x111640,17,
-0x11168c,1,
+0x111640,20,
 0x118000,29,
 0x118078,4,
 0x118090,2,
@@ -2904,8 +2927,7 @@
 0x1186c0,11,
 0x118700,14,
 0x118740,14,
-0x118780,62,
-0x11887c,6,
+0x118780,69,
 0x118c00,6,
 0x118c40,14,
 0x118c80,9,
@@ -2955,8 +2977,7 @@
 0x1196c0,11,
 0x119700,14,
 0x119740,14,
-0x119780,62,
-0x11987c,6,
+0x119780,69,
 0x119c00,6,
 0x119c40,14,
 0x119c80,9,
@@ -2978,108 +2999,6 @@
 0x119e94,5,
 0x119eac,1,
 0x119eb4,3,
-0x11a000,29,
-0x11a078,4,
-0x11a090,2,
-0x11a0a0,7,
-0x11a0c0,11,
-0x11a100,14,
-0x11a140,14,
-0x11a180,61,
-0x11a278,4,
-0x11a290,2,
-0x11a2a0,7,
-0x11a2c0,11,
-0x11a300,14,
-0x11a340,14,
-0x11a380,61,
-0x11a478,4,
-0x11a490,2,
-0x11a4a0,7,
-0x11a4c0,11,
-0x11a500,14,
-0x11a540,14,
-0x11a580,61,
-0x11a678,4,
-0x11a690,2,
-0x11a6a0,7,
-0x11a6c0,11,
-0x11a700,14,
-0x11a740,14,
-0x11a780,62,
-0x11a87c,6,
-0x11ac00,6,
-0x11ac40,14,
-0x11ac80,9,
-0x11ad00,9,
-0x11ad2c,1,
-0x11ad40,3,
-0x11ad60,1,
-0x11ad80,3,
-0x11ae00,2,
-0x11ae0c,1,
-0x11ae14,5,
-0x11ae2c,1,
-0x11ae34,5,
-0x11ae4c,1,
-0x11ae54,5,
-0x11ae6c,1,
-0x11ae74,5,
-0x11ae8c,1,
-0x11ae94,5,
-0x11aeac,1,
-0x11aeb4,3,
-0x11b000,29,
-0x11b078,4,
-0x11b090,2,
-0x11b0a0,7,
-0x11b0c0,11,
-0x11b100,14,
-0x11b140,14,
-0x11b180,61,
-0x11b278,4,
-0x11b290,2,
-0x11b2a0,7,
-0x11b2c0,11,
-0x11b300,14,
-0x11b340,14,
-0x11b380,61,
-0x11b478,4,
-0x11b490,2,
-0x11b4a0,7,
-0x11b4c0,11,
-0x11b500,14,
-0x11b540,14,
-0x11b580,61,
-0x11b678,4,
-0x11b690,2,
-0x11b6a0,7,
-0x11b6c0,11,
-0x11b700,14,
-0x11b740,14,
-0x11b780,62,
-0x11b87c,6,
-0x11bc00,6,
-0x11bc40,14,
-0x11bc80,9,
-0x11bd00,9,
-0x11bd2c,1,
-0x11bd40,3,
-0x11bd60,1,
-0x11bd80,3,
-0x11be00,2,
-0x11be0c,1,
-0x11be14,5,
-0x11be2c,1,
-0x11be34,5,
-0x11be4c,1,
-0x11be54,5,
-0x11be6c,1,
-0x11be74,5,
-0x11be8c,1,
-0x11be94,5,
-0x11beac,1,
-0x11beb4,3,
 0x11c000,19,
 0x11c050,10,
 0x11c080,19,
@@ -3111,15 +3030,8 @@
 0x11d120,15,
 0x11d160,15,
 0x11d1a0,15,
-0x11d1e0,15,
-0x11d220,15,
-0x11d260,15,
-0x11d2a0,15,
-0x11d2e0,15,
-0x11d320,15,
-0x11d360,15,
-0x11d3a0,15,
-0x11d3e0,17,
+0x11d1e0,8,
+0x11d400,9,
 0x11d428,3,
 0x11d440,5,
 0x11d480,9,
@@ -3139,29 +3051,34 @@
 0x11d6a0,6,
 0x11d6c0,6,
 0x11d6e0,6,
-0x11d700,12,
+0x11d708,2,
+0x11d718,4,
 0x11d734,1,
 0x11d73c,4,
 0x11d750,4,
 0x11d764,1,
-0x11d800,102,
+0x11d76c,2,
+0x11d800,8,
+0x11d840,8,
+0x11d880,8,
+0x11d8c0,8,
+0x11d900,8,
+0x11d940,8,
+0x11d988,4,
 0x11da00,3,
-0x11da10,1,
 0x11da18,2,
 0x11da24,16,
 0x11da80,3,
-0x11da90,1,
 0x11da98,2,
 0x11daa4,16,
 0x11db00,3,
-0x11db10,1,
 0x11db18,2,
 0x11db24,16,
 0x11db80,3,
-0x11db90,1,
 0x11db98,2,
 0x11dba4,16,
-0x11dc00,17,
+0x11dc00,8,
+0x11dc40,1,
 0x11e000,72,
 0x11e200,72,
 0x11e400,72,
@@ -3175,8 +3092,9 @@
 0x11e8c0,6,
 0x11e8e0,6,
 0x11e900,6,
-0x11e920,1,
-0x11ea00,6,
+0x11e920,6,
+0x11e940,6,
+0x11e9fc,7,
 0x11ea20,6,
 0x11ea40,6,
 0x11ea60,6,
@@ -3185,8 +3103,9 @@
 0x11eac0,6,
 0x11eae0,6,
 0x11eb00,6,
-0x11eb20,1,
-0x11ec00,6,
+0x11eb20,6,
+0x11eb40,6,
+0x11ebfc,7,
 0x11ec20,6,
 0x11ec40,6,
 0x11ec60,6,
@@ -3195,8 +3114,9 @@
 0x11ecc0,6,
 0x11ece0,6,
 0x11ed00,6,
-0x11ed20,1,
-0x11ee00,6,
+0x11ed20,6,
+0x11ed40,6,
+0x11edfc,7,
 0x11ee20,6,
 0x11ee40,6,
 0x11ee60,6,
@@ -3205,8 +3125,9 @@
 0x11eec0,6,
 0x11eee0,6,
 0x11ef00,6,
-0x11ef20,1,
-0x11f000,14,
+0x11ef20,6,
+0x11ef40,6,
+0x11effc,15,
 0x11f040,2,
 0x11f080,14,
 0x11f0c0,2,
@@ -3218,26 +3139,22 @@
 0x11f448,5,
 0x11f460,3,
 0x11f470,3,
-0x11f480,13,
-0x11f4b8,1,
+0x11f480,16,
 0x11f500,17,
 0x11f548,5,
 0x11f560,3,
 0x11f570,3,
-0x11f580,13,
-0x11f5b8,1,
+0x11f580,16,
 0x11f600,17,
 0x11f648,5,
 0x11f660,3,
 0x11f670,3,
-0x11f680,13,
-0x11f6b8,1,
+0x11f680,16,
 0x11f700,17,
 0x11f748,5,
 0x11f760,3,
 0x11f770,3,
-0x11f780,13,
-0x11f7b8,1,
+0x11f780,16,
 0x11f800,8,
 0x11f824,15,
 0x11f864,15,
@@ -3261,5 +3178,9 @@
 0x11fd00,6,
 0x11fd20,3,
 0x11fd30,3,
-0x11fd40,20,
+0x11fd44,1,
+0x11fd4c,1,
+0x11fd54,1,
+0x11fd5c,8,
+0x11fd80,11,
 0x11fdc0,3,
diff --git a/mstdump/mstdump_dbs/SwitchEN.csv b/mstdump/mstdump_dbs/Spectrum.csv
similarity index 79%
rename from mstdump/mstdump_dbs/SwitchEN.csv
rename to mstdump/mstdump_dbs/Spectrum.csv
index 16c1a1c..9b0a4a0 100644
--- a/mstdump/mstdump_dbs/SwitchEN.csv
+++ b/mstdump/mstdump_dbs/Spectrum.csv
@@ -6,7 +6,8 @@
 0x000900,11,
 0x000940,3,
 0x000950,12,
-0x000984,19,
+0x000984,13,
+0x0009c0,8,
 0x000a00,1,
 0x000a18,8,
 0x000a3c,9,
@@ -20,14 +21,15 @@
 0x000b40,6,
 0x000b60,3,
 0x000b80,8,
-0x000bb8,19,
+0x000bb0,21,
 0x000c08,14,
 0x000c80,1,
 0x000c88,16,
 0x000d00,11,
 0x000d40,3,
 0x000d50,12,
-0x000d84,19,
+0x000d84,13,
+0x000dc0,8,
 0x000e00,1,
 0x000e18,8,
 0x000e3c,9,
@@ -41,14 +43,15 @@
 0x000f40,6,
 0x000f60,3,
 0x000f80,8,
-0x000fb8,19,
+0x000fb0,21,
 0x001008,14,
 0x001080,1,
 0x001088,16,
 0x001100,11,
 0x001140,3,
 0x001150,12,
-0x001184,19,
+0x001184,13,
+0x0011c0,8,
 0x001200,1,
 0x001218,8,
 0x00123c,9,
@@ -62,14 +65,15 @@
 0x001340,6,
 0x001360,3,
 0x001380,8,
-0x0013b8,19,
+0x0013b0,21,
 0x001408,14,
 0x001480,1,
 0x001488,16,
 0x001500,11,
 0x001540,3,
 0x001550,12,
-0x001584,19,
+0x001584,13,
+0x0015c0,8,
 0x001600,1,
 0x001618,8,
 0x00163c,9,
@@ -83,14 +87,15 @@
 0x001740,6,
 0x001760,3,
 0x001780,8,
-0x0017b8,19,
+0x0017b0,21,
 0x001808,14,
 0x001880,1,
 0x001888,16,
 0x001900,11,
 0x001940,3,
 0x001950,12,
-0x001984,19,
+0x001984,13,
+0x0019c0,8,
 0x001a00,1,
 0x001a18,8,
 0x001a3c,9,
@@ -104,14 +109,15 @@
 0x001b40,6,
 0x001b60,3,
 0x001b80,8,
-0x001bb8,19,
+0x001bb0,21,
 0x001c08,14,
 0x001c80,1,
 0x001c88,16,
 0x001d00,11,
 0x001d40,3,
 0x001d50,12,
-0x001d84,19,
+0x001d84,13,
+0x001dc0,8,
 0x001e00,1,
 0x001e18,8,
 0x001e3c,9,
@@ -125,14 +131,15 @@
 0x001f40,6,
 0x001f60,3,
 0x001f80,8,
-0x001fb8,19,
+0x001fb0,21,
 0x002008,14,
 0x002080,1,
 0x002088,16,
 0x002100,11,
 0x002140,3,
 0x002150,12,
-0x002184,19,
+0x002184,13,
+0x0021c0,8,
 0x002200,1,
 0x002218,8,
 0x00223c,9,
@@ -146,14 +153,15 @@
 0x002340,6,
 0x002360,3,
 0x002380,8,
-0x0023b8,19,
+0x0023b0,21,
 0x002408,14,
 0x002480,1,
 0x002488,16,
 0x002500,11,
 0x002540,3,
 0x002550,12,
-0x002584,19,
+0x002584,13,
+0x0025c0,8,
 0x002600,1,
 0x002618,8,
 0x00263c,9,
@@ -167,14 +175,15 @@
 0x002740,6,
 0x002760,3,
 0x002780,8,
-0x0027b8,19,
+0x0027b0,21,
 0x002808,14,
 0x002880,1,
 0x002888,16,
 0x002900,11,
 0x002940,3,
 0x002950,12,
-0x002984,19,
+0x002984,13,
+0x0029c0,8,
 0x002a00,1,
 0x002a18,8,
 0x002a3c,9,
@@ -188,14 +197,15 @@
 0x002b40,6,
 0x002b60,3,
 0x002b80,8,
-0x002bb8,19,
+0x002bb0,21,
 0x002c08,14,
 0x002c80,1,
 0x002c88,16,
 0x002d00,11,
 0x002d40,3,
 0x002d50,12,
-0x002d84,19,
+0x002d84,13,
+0x002dc0,8,
 0x002e00,1,
 0x002e18,8,
 0x002e3c,9,
@@ -209,14 +219,15 @@
 0x002f40,6,
 0x002f60,3,
 0x002f80,8,
-0x002fb8,19,
+0x002fb0,21,
 0x003008,14,
 0x003080,1,
 0x003088,16,
 0x003100,11,
 0x003140,3,
 0x003150,12,
-0x003184,19,
+0x003184,13,
+0x0031c0,8,
 0x003200,1,
 0x003218,8,
 0x00323c,9,
@@ -230,14 +241,15 @@
 0x003340,6,
 0x003360,3,
 0x003380,8,
-0x0033b8,19,
+0x0033b0,21,
 0x003408,14,
 0x003480,1,
 0x003488,16,
 0x003500,11,
 0x003540,3,
 0x003550,12,
-0x003584,19,
+0x003584,13,
+0x0035c0,8,
 0x003600,1,
 0x003618,8,
 0x00363c,9,
@@ -251,14 +263,15 @@
 0x003740,6,
 0x003760,3,
 0x003780,8,
-0x0037b8,19,
+0x0037b0,21,
 0x003808,14,
 0x003880,1,
 0x003888,16,
 0x003900,11,
 0x003940,3,
 0x003950,12,
-0x003984,19,
+0x003984,13,
+0x0039c0,8,
 0x003a00,1,
 0x003a18,8,
 0x003a3c,9,
@@ -272,14 +285,15 @@
 0x003b40,6,
 0x003b60,3,
 0x003b80,8,
-0x003bb8,19,
+0x003bb0,21,
 0x003c08,14,
 0x003c80,1,
 0x003c88,16,
 0x003d00,11,
 0x003d40,3,
 0x003d50,12,
-0x003d84,19,
+0x003d84,13,
+0x003dc0,8,
 0x003e00,1,
 0x003e18,8,
 0x003e3c,9,
@@ -293,14 +307,15 @@
 0x003f40,6,
 0x003f60,3,
 0x003f80,8,
-0x003fb8,19,
+0x003fb0,21,
 0x004008,14,
 0x004080,1,
 0x004088,16,
 0x004100,11,
 0x004140,3,
 0x004150,12,
-0x004184,19,
+0x004184,13,
+0x0041c0,8,
 0x004200,1,
 0x004218,8,
 0x00423c,9,
@@ -314,14 +329,15 @@
 0x004340,6,
 0x004360,3,
 0x004380,8,
-0x0043b8,19,
+0x0043b0,21,
 0x004408,14,
 0x004480,1,
 0x004488,16,
 0x004500,11,
 0x004540,3,
 0x004550,12,
-0x004584,19,
+0x004584,13,
+0x0045c0,8,
 0x004600,1,
 0x004618,8,
 0x00463c,9,
@@ -335,14 +351,15 @@
 0x004740,6,
 0x004760,3,
 0x004780,8,
-0x0047b8,19,
+0x0047b0,21,
 0x004808,14,
 0x004880,1,
 0x004888,16,
 0x004900,11,
 0x004940,3,
 0x004950,12,
-0x004984,19,
+0x004984,13,
+0x0049c0,8,
 0x004a00,1,
 0x004a18,8,
 0x004a3c,9,
@@ -356,14 +373,15 @@
 0x004b40,6,
 0x004b60,3,
 0x004b80,8,
-0x004bb8,19,
+0x004bb0,21,
 0x004c08,14,
 0x004c80,1,
 0x004c88,16,
 0x004d00,11,
 0x004d40,3,
 0x004d50,12,
-0x004d84,19,
+0x004d84,13,
+0x004dc0,8,
 0x004e00,1,
 0x004e18,8,
 0x004e3c,9,
@@ -377,14 +395,15 @@
 0x004f40,6,
 0x004f60,3,
 0x004f80,8,
-0x004fb8,19,
+0x004fb0,21,
 0x005008,14,
 0x005080,1,
 0x005088,16,
 0x005100,11,
 0x005140,3,
 0x005150,12,
-0x005184,19,
+0x005184,13,
+0x0051c0,8,
 0x005200,1,
 0x005218,8,
 0x00523c,9,
@@ -398,14 +417,15 @@
 0x005340,6,
 0x005360,3,
 0x005380,8,
-0x0053b8,19,
+0x0053b0,21,
 0x005408,14,
 0x005480,1,
 0x005488,16,
 0x005500,11,
 0x005540,3,
 0x005550,12,
-0x005584,19,
+0x005584,13,
+0x0055c0,8,
 0x005600,1,
 0x005618,8,
 0x00563c,9,
@@ -419,14 +439,15 @@
 0x005740,6,
 0x005760,3,
 0x005780,8,
-0x0057b8,19,
+0x0057b0,21,
 0x005808,14,
 0x005880,1,
 0x005888,16,
 0x005900,11,
 0x005940,3,
 0x005950,12,
-0x005984,19,
+0x005984,13,
+0x0059c0,8,
 0x005a00,1,
 0x005a18,8,
 0x005a3c,9,
@@ -440,14 +461,15 @@
 0x005b40,6,
 0x005b60,3,
 0x005b80,8,
-0x005bb8,19,
+0x005bb0,21,
 0x005c08,14,
 0x005c80,1,
 0x005c88,16,
 0x005d00,11,
 0x005d40,3,
 0x005d50,12,
-0x005d84,19,
+0x005d84,13,
+0x005dc0,8,
 0x005e00,1,
 0x005e18,8,
 0x005e3c,9,
@@ -461,14 +483,15 @@
 0x005f40,6,
 0x005f60,3,
 0x005f80,8,
-0x005fb8,19,
+0x005fb0,21,
 0x006008,14,
 0x006080,1,
 0x006088,16,
 0x006100,11,
 0x006140,3,
 0x006150,12,
-0x006184,19,
+0x006184,13,
+0x0061c0,8,
 0x006200,1,
 0x006218,8,
 0x00623c,9,
@@ -482,14 +505,15 @@
 0x006340,6,
 0x006360,3,
 0x006380,8,
-0x0063b8,19,
+0x0063b0,21,
 0x006408,14,
 0x006480,1,
 0x006488,16,
 0x006500,11,
 0x006540,3,
 0x006550,12,
-0x006584,19,
+0x006584,13,
+0x0065c0,8,
 0x006600,1,
 0x006618,8,
 0x00663c,9,
@@ -503,14 +527,15 @@
 0x006740,6,
 0x006760,3,
 0x006780,8,
-0x0067b8,19,
+0x0067b0,21,
 0x006808,14,
 0x006880,1,
 0x006888,16,
 0x006900,11,
 0x006940,3,
 0x006950,12,
-0x006984,19,
+0x006984,13,
+0x0069c0,8,
 0x006a00,1,
 0x006a18,8,
 0x006a3c,9,
@@ -524,14 +549,15 @@
 0x006b40,6,
 0x006b60,3,
 0x006b80,8,
-0x006bb8,19,
+0x006bb0,21,
 0x006c08,14,
 0x006c80,1,
 0x006c88,16,
 0x006d00,11,
 0x006d40,3,
 0x006d50,12,
-0x006d84,19,
+0x006d84,13,
+0x006dc0,8,
 0x006e00,1,
 0x006e18,8,
 0x006e3c,9,
@@ -545,14 +571,15 @@
 0x006f40,6,
 0x006f60,3,
 0x006f80,8,
-0x006fb8,19,
+0x006fb0,21,
 0x007008,14,
 0x007080,1,
 0x007088,16,
 0x007100,11,
 0x007140,3,
 0x007150,12,
-0x007184,19,
+0x007184,13,
+0x0071c0,8,
 0x007200,1,
 0x007218,8,
 0x00723c,9,
@@ -566,14 +593,15 @@
 0x007340,6,
 0x007360,3,
 0x007380,8,
-0x0073b8,19,
+0x0073b0,21,
 0x007408,14,
 0x007480,1,
 0x007488,16,
 0x007500,11,
 0x007540,3,
 0x007550,12,
-0x007584,19,
+0x007584,13,
+0x0075c0,8,
 0x007600,1,
 0x007618,8,
 0x00763c,9,
@@ -587,14 +615,15 @@
 0x007740,6,
 0x007760,3,
 0x007780,8,
-0x0077b8,19,
+0x0077b0,21,
 0x007808,14,
 0x007880,1,
 0x007888,16,
 0x007900,11,
 0x007940,3,
 0x007950,12,
-0x007984,19,
+0x007984,13,
+0x0079c0,8,
 0x007a00,1,
 0x007a18,8,
 0x007a3c,9,
@@ -608,14 +637,15 @@
 0x007b40,6,
 0x007b60,3,
 0x007b80,8,
-0x007bb8,19,
+0x007bb0,21,
 0x007c08,14,
 0x007c80,1,
 0x007c88,16,
 0x007d00,11,
 0x007d40,3,
 0x007d50,12,
-0x007d84,19,
+0x007d84,13,
+0x007dc0,8,
 0x007e00,1,
 0x007e18,8,
 0x007e3c,9,
@@ -629,14 +659,15 @@
 0x007f40,6,
 0x007f60,3,
 0x007f80,8,
-0x007fb8,19,
+0x007fb0,21,
 0x008008,14,
 0x008080,1,
 0x008088,16,
 0x008100,11,
 0x008140,3,
 0x008150,12,
-0x008184,19,
+0x008184,13,
+0x0081c0,8,
 0x008200,1,
 0x008218,8,
 0x00823c,9,
@@ -650,14 +681,15 @@
 0x008340,6,
 0x008360,3,
 0x008380,8,
-0x0083b8,19,
+0x0083b0,21,
 0x008408,14,
 0x008480,1,
 0x008488,16,
 0x008500,11,
 0x008540,3,
 0x008550,12,
-0x008584,19,
+0x008584,13,
+0x0085c0,8,
 0x008600,1,
 0x008618,8,
 0x00863c,9,
@@ -671,14 +703,15 @@
 0x008740,6,
 0x008760,3,
 0x008780,8,
-0x0087b8,19,
+0x0087b0,21,
 0x008808,14,
 0x008880,1,
 0x008888,16,
 0x008900,11,
 0x008940,3,
 0x008950,12,
-0x008984,19,
+0x008984,13,
+0x0089c0,8,
 0x008a00,1,
 0x008a18,8,
 0x008a3c,9,
@@ -692,14 +725,15 @@
 0x008b40,6,
 0x008b60,3,
 0x008b80,8,
-0x008bb8,19,
+0x008bb0,21,
 0x008c08,14,
 0x008c80,1,
 0x008c88,16,
 0x008d00,11,
 0x008d40,3,
 0x008d50,12,
-0x008d84,19,
+0x008d84,13,
+0x008dc0,8,
 0x008e00,1,
 0x008e18,8,
 0x008e3c,9,
@@ -713,7 +747,7 @@
 0x008f40,6,
 0x008f60,3,
 0x008f80,8,
-0x008fb8,19,
+0x008fb0,21,
 0x009028,1,
 0x009050,1,
 0x009078,1,
@@ -725,13 +759,14 @@
 0x009240,3,
 0x009400,6,
 0x009420,6,
-0x009440,3,
+0x009440,6,
+0x009460,3,
 0x009480,13,
 0x0094c0,3,
 0x0094d0,3,
 0x0094e0,5,
 0x009500,2,
-0x00950c,3,
+0x00950c,5,
 0x010800,1,
 0x010808,14,
 0x010880,1,
@@ -739,7 +774,8 @@
 0x010900,11,
 0x010940,3,
 0x010950,12,
-0x010984,19,
+0x010984,13,
+0x0109c0,8,
 0x010a00,1,
 0x010a18,8,
 0x010a3c,9,
@@ -753,14 +789,15 @@
 0x010b40,6,
 0x010b60,3,
 0x010b80,8,
-0x010bb8,19,
+0x010bb0,21,
 0x010c08,14,
 0x010c80,1,
 0x010c88,16,
 0x010d00,11,
 0x010d40,3,
 0x010d50,12,
-0x010d84,19,
+0x010d84,13,
+0x010dc0,8,
 0x010e00,1,
 0x010e18,8,
 0x010e3c,9,
@@ -774,14 +811,15 @@
 0x010f40,6,
 0x010f60,3,
 0x010f80,8,
-0x010fb8,19,
+0x010fb0,21,
 0x011008,14,
 0x011080,1,
 0x011088,16,
 0x011100,11,
 0x011140,3,
 0x011150,12,
-0x011184,19,
+0x011184,13,
+0x0111c0,8,
 0x011200,1,
 0x011218,8,
 0x01123c,9,
@@ -795,14 +833,15 @@
 0x011340,6,
 0x011360,3,
 0x011380,8,
-0x0113b8,19,
+0x0113b0,21,
 0x011408,14,
 0x011480,1,
 0x011488,16,
 0x011500,11,
 0x011540,3,
 0x011550,12,
-0x011584,19,
+0x011584,13,
+0x0115c0,8,
 0x011600,1,
 0x011618,8,
 0x01163c,9,
@@ -816,14 +855,15 @@
 0x011740,6,
 0x011760,3,
 0x011780,8,
-0x0117b8,19,
+0x0117b0,21,
 0x011808,14,
 0x011880,1,
 0x011888,16,
 0x011900,11,
 0x011940,3,
 0x011950,12,
-0x011984,19,
+0x011984,13,
+0x0119c0,8,
 0x011a00,1,
 0x011a18,8,
 0x011a3c,9,
@@ -837,14 +877,15 @@
 0x011b40,6,
 0x011b60,3,
 0x011b80,8,
-0x011bb8,19,
+0x011bb0,21,
 0x011c08,14,
 0x011c80,1,
 0x011c88,16,
 0x011d00,11,
 0x011d40,3,
 0x011d50,12,
-0x011d84,19,
+0x011d84,13,
+0x011dc0,8,
 0x011e00,1,
 0x011e18,8,
 0x011e3c,9,
@@ -858,14 +899,15 @@
 0x011f40,6,
 0x011f60,3,
 0x011f80,8,
-0x011fb8,19,
+0x011fb0,21,
 0x012008,14,
 0x012080,1,
 0x012088,16,
 0x012100,11,
 0x012140,3,
 0x012150,12,
-0x012184,19,
+0x012184,13,
+0x0121c0,8,
 0x012200,1,
 0x012218,8,
 0x01223c,9,
@@ -879,14 +921,15 @@
 0x012340,6,
 0x012360,3,
 0x012380,8,
-0x0123b8,19,
+0x0123b0,21,
 0x012408,14,
 0x012480,1,
 0x012488,16,
 0x012500,11,
 0x012540,3,
 0x012550,12,
-0x012584,19,
+0x012584,13,
+0x0125c0,8,
 0x012600,1,
 0x012618,8,
 0x01263c,9,
@@ -900,14 +943,15 @@
 0x012740,6,
 0x012760,3,
 0x012780,8,
-0x0127b8,19,
+0x0127b0,21,
 0x012808,14,
 0x012880,1,
 0x012888,16,
 0x012900,11,
 0x012940,3,
 0x012950,12,
-0x012984,19,
+0x012984,13,
+0x0129c0,8,
 0x012a00,1,
 0x012a18,8,
 0x012a3c,9,
@@ -921,14 +965,15 @@
 0x012b40,6,
 0x012b60,3,
 0x012b80,8,
-0x012bb8,19,
+0x012bb0,21,
 0x012c08,14,
 0x012c80,1,
 0x012c88,16,
 0x012d00,11,
 0x012d40,3,
 0x012d50,12,
-0x012d84,19,
+0x012d84,13,
+0x012dc0,8,
 0x012e00,1,
 0x012e18,8,
 0x012e3c,9,
@@ -942,14 +987,15 @@
 0x012f40,6,
 0x012f60,3,
 0x012f80,8,
-0x012fb8,19,
+0x012fb0,21,
 0x013008,14,
 0x013080,1,
 0x013088,16,
 0x013100,11,
 0x013140,3,
 0x013150,12,
-0x013184,19,
+0x013184,13,
+0x0131c0,8,
 0x013200,1,
 0x013218,8,
 0x01323c,9,
@@ -963,14 +1009,15 @@
 0x013340,6,
 0x013360,3,
 0x013380,8,
-0x0133b8,19,
+0x0133b0,21,
 0x013408,14,
 0x013480,1,
 0x013488,16,
 0x013500,11,
 0x013540,3,
 0x013550,12,
-0x013584,19,
+0x013584,13,
+0x0135c0,8,
 0x013600,1,
 0x013618,8,
 0x01363c,9,
@@ -984,14 +1031,15 @@
 0x013740,6,
 0x013760,3,
 0x013780,8,
-0x0137b8,19,
+0x0137b0,21,
 0x013808,14,
 0x013880,1,
 0x013888,16,
 0x013900,11,
 0x013940,3,
 0x013950,12,
-0x013984,19,
+0x013984,13,
+0x0139c0,8,
 0x013a00,1,
 0x013a18,8,
 0x013a3c,9,
@@ -1005,14 +1053,15 @@
 0x013b40,6,
 0x013b60,3,
 0x013b80,8,
-0x013bb8,19,
+0x013bb0,21,
 0x013c08,14,
 0x013c80,1,
 0x013c88,16,
 0x013d00,11,
 0x013d40,3,
 0x013d50,12,
-0x013d84,19,
+0x013d84,13,
+0x013dc0,8,
 0x013e00,1,
 0x013e18,8,
 0x013e3c,9,
@@ -1026,14 +1075,15 @@
 0x013f40,6,
 0x013f60,3,
 0x013f80,8,
-0x013fb8,19,
+0x013fb0,21,
 0x014008,14,
 0x014080,1,
 0x014088,16,
 0x014100,11,
 0x014140,3,
 0x014150,12,
-0x014184,19,
+0x014184,13,
+0x0141c0,8,
 0x014200,1,
 0x014218,8,
 0x01423c,9,
@@ -1047,14 +1097,15 @@
 0x014340,6,
 0x014360,3,
 0x014380,8,
-0x0143b8,19,
+0x0143b0,21,
 0x014408,14,
 0x014480,1,
 0x014488,16,
 0x014500,11,
 0x014540,3,
 0x014550,12,
-0x014584,19,
+0x014584,13,
+0x0145c0,8,
 0x014600,1,
 0x014618,8,
 0x01463c,9,
@@ -1068,14 +1119,15 @@
 0x014740,6,
 0x014760,3,
 0x014780,8,
-0x0147b8,19,
+0x0147b0,21,
 0x014808,14,
 0x014880,1,
 0x014888,16,
 0x014900,11,
 0x014940,3,
 0x014950,12,
-0x014984,19,
+0x014984,13,
+0x0149c0,8,
 0x014a00,1,
 0x014a18,8,
 0x014a3c,9,
@@ -1089,14 +1141,15 @@
 0x014b40,6,
 0x014b60,3,
 0x014b80,8,
-0x014bb8,19,
+0x014bb0,21,
 0x014c08,14,
 0x014c80,1,
 0x014c88,16,
 0x014d00,11,
 0x014d40,3,
 0x014d50,12,
-0x014d84,19,
+0x014d84,13,
+0x014dc0,8,
 0x014e00,1,
 0x014e18,8,
 0x014e3c,9,
@@ -1110,14 +1163,15 @@
 0x014f40,6,
 0x014f60,3,
 0x014f80,8,
-0x014fb8,19,
+0x014fb0,21,
 0x015008,14,
 0x015080,1,
 0x015088,16,
 0x015100,11,
 0x015140,3,
 0x015150,12,
-0x015184,19,
+0x015184,13,
+0x0151c0,8,
 0x015200,1,
 0x015218,8,
 0x01523c,9,
@@ -1131,14 +1185,15 @@
 0x015340,6,
 0x015360,3,
 0x015380,8,
-0x0153b8,19,
+0x0153b0,21,
 0x015408,14,
 0x015480,1,
 0x015488,16,
 0x015500,11,
 0x015540,3,
 0x015550,12,
-0x015584,19,
+0x015584,13,
+0x0155c0,8,
 0x015600,1,
 0x015618,8,
 0x01563c,9,
@@ -1152,14 +1207,15 @@
 0x015740,6,
 0x015760,3,
 0x015780,8,
-0x0157b8,19,
+0x0157b0,21,
 0x015808,14,
 0x015880,1,
 0x015888,16,
 0x015900,11,
 0x015940,3,
 0x015950,12,
-0x015984,19,
+0x015984,13,
+0x0159c0,8,
 0x015a00,1,
 0x015a18,8,
 0x015a3c,9,
@@ -1173,14 +1229,15 @@
 0x015b40,6,
 0x015b60,3,
 0x015b80,8,
-0x015bb8,19,
+0x015bb0,21,
 0x015c08,14,
 0x015c80,1,
 0x015c88,16,
 0x015d00,11,
 0x015d40,3,
 0x015d50,12,
-0x015d84,19,
+0x015d84,13,
+0x015dc0,8,
 0x015e00,1,
 0x015e18,8,
 0x015e3c,9,
@@ -1194,14 +1251,15 @@
 0x015f40,6,
 0x015f60,3,
 0x015f80,8,
-0x015fb8,19,
+0x015fb0,21,
 0x016008,14,
 0x016080,1,
 0x016088,16,
 0x016100,11,
 0x016140,3,
 0x016150,12,
-0x016184,19,
+0x016184,13,
+0x0161c0,8,
 0x016200,1,
 0x016218,8,
 0x01623c,9,
@@ -1215,14 +1273,15 @@
 0x016340,6,
 0x016360,3,
 0x016380,8,
-0x0163b8,19,
+0x0163b0,21,
 0x016408,14,
 0x016480,1,
 0x016488,16,
 0x016500,11,
 0x016540,3,
 0x016550,12,
-0x016584,19,
+0x016584,13,
+0x0165c0,8,
 0x016600,1,
 0x016618,8,
 0x01663c,9,
@@ -1236,14 +1295,15 @@
 0x016740,6,
 0x016760,3,
 0x016780,8,
-0x0167b8,19,
+0x0167b0,21,
 0x016808,14,
 0x016880,1,
 0x016888,16,
 0x016900,11,
 0x016940,3,
 0x016950,12,
-0x016984,19,
+0x016984,13,
+0x0169c0,8,
 0x016a00,1,
 0x016a18,8,
 0x016a3c,9,
@@ -1257,14 +1317,15 @@
 0x016b40,6,
 0x016b60,3,
 0x016b80,8,
-0x016bb8,19,
+0x016bb0,21,
 0x016c08,14,
 0x016c80,1,
 0x016c88,16,
 0x016d00,11,
 0x016d40,3,
 0x016d50,12,
-0x016d84,19,
+0x016d84,13,
+0x016dc0,8,
 0x016e00,1,
 0x016e18,8,
 0x016e3c,9,
@@ -1278,14 +1339,15 @@
 0x016f40,6,
 0x016f60,3,
 0x016f80,8,
-0x016fb8,19,
+0x016fb0,21,
 0x017008,14,
 0x017080,1,
 0x017088,16,
 0x017100,11,
 0x017140,3,
 0x017150,12,
-0x017184,19,
+0x017184,13,
+0x0171c0,8,
 0x017200,1,
 0x017218,8,
 0x01723c,9,
@@ -1299,14 +1361,15 @@
 0x017340,6,
 0x017360,3,
 0x017380,8,
-0x0173b8,19,
+0x0173b0,21,
 0x017408,14,
 0x017480,1,
 0x017488,16,
 0x017500,11,
 0x017540,3,
 0x017550,12,
-0x017584,19,
+0x017584,13,
+0x0175c0,8,
 0x017600,1,
 0x017618,8,
 0x01763c,9,
@@ -1320,14 +1383,15 @@
 0x017740,6,
 0x017760,3,
 0x017780,8,
-0x0177b8,19,
+0x0177b0,21,
 0x017808,14,
 0x017880,1,
 0x017888,16,
 0x017900,11,
 0x017940,3,
 0x017950,12,
-0x017984,19,
+0x017984,13,
+0x0179c0,8,
 0x017a00,1,
 0x017a18,8,
 0x017a3c,9,
@@ -1341,14 +1405,15 @@
 0x017b40,6,
 0x017b60,3,
 0x017b80,8,
-0x017bb8,19,
+0x017bb0,21,
 0x017c08,14,
 0x017c80,1,
 0x017c88,16,
 0x017d00,11,
 0x017d40,3,
 0x017d50,12,
-0x017d84,19,
+0x017d84,13,
+0x017dc0,8,
 0x017e00,1,
 0x017e18,8,
 0x017e3c,9,
@@ -1362,14 +1427,15 @@
 0x017f40,6,
 0x017f60,3,
 0x017f80,8,
-0x017fb8,19,
+0x017fb0,21,
 0x018008,14,
 0x018080,1,
 0x018088,16,
 0x018100,11,
 0x018140,3,
 0x018150,12,
-0x018184,19,
+0x018184,13,
+0x0181c0,8,
 0x018200,1,
 0x018218,8,
 0x01823c,9,
@@ -1383,14 +1449,15 @@
 0x018340,6,
 0x018360,3,
 0x018380,8,
-0x0183b8,19,
+0x0183b0,21,
 0x018408,14,
 0x018480,1,
 0x018488,16,
 0x018500,11,
 0x018540,3,
 0x018550,12,
-0x018584,19,
+0x018584,13,
+0x0185c0,8,
 0x018600,1,
 0x018618,8,
 0x01863c,9,
@@ -1404,14 +1471,15 @@
 0x018740,6,
 0x018760,3,
 0x018780,8,
-0x0187b8,19,
+0x0187b0,21,
 0x018808,14,
 0x018880,1,
 0x018888,16,
 0x018900,11,
 0x018940,3,
 0x018950,12,
-0x018984,19,
+0x018984,13,
+0x0189c0,8,
 0x018a00,1,
 0x018a18,8,
 0x018a3c,9,
@@ -1425,14 +1493,15 @@
 0x018b40,6,
 0x018b60,3,
 0x018b80,8,
-0x018bb8,19,
+0x018bb0,21,
 0x018c08,14,
 0x018c80,1,
 0x018c88,16,
 0x018d00,11,
 0x018d40,3,
 0x018d50,12,
-0x018d84,19,
+0x018d84,13,
+0x018dc0,8,
 0x018e00,1,
 0x018e18,8,
 0x018e3c,9,
@@ -1446,7 +1515,7 @@
 0x018f40,6,
 0x018f60,3,
 0x018f80,8,
-0x018fb8,19,
+0x018fb0,21,
 0x019028,1,
 0x019050,1,
 0x019078,1,
@@ -1458,368 +1527,371 @@
 0x019240,3,
 0x019400,6,
 0x019420,6,
-0x019440,3,
+0x019440,6,
+0x019460,3,
 0x019480,13,
 0x0194c0,3,
 0x0194d0,3,
 0x0194e0,5,
 0x019500,2,
-0x01950c,3,
+0x01950c,5,
 0x020000,65,
 0x020110,2,
 0x020120,6,
 0x020140,6,
 0x020164,3,
-0x020174,4,
-0x020188,10,
-0x0201b4,16,
-0x020200,17,
-0x020248,1,
-0x020250,17,
-0x020298,1,
-0x0202a0,17,
-0x0202e8,1,
-0x0202f0,17,
-0x020338,1,
-0x020340,3,
-0x020350,3,
-0x02038c,2,
+0x020174,7,
+0x020194,2,
+0x0201c0,49,
+0x020288,1,
+0x020290,17,
+0x0202d8,1,
+0x0202e0,17,
+0x020328,1,
+0x020330,17,
+0x020378,1,
+0x020380,3,
+0x020390,3,
 0x0203a4,1,
-0x0203ac,15,
+0x0203ac,3,
+0x0203c0,4,
+0x0203d4,7,
 0x0203f4,68,
 0x020510,2,
 0x020520,6,
 0x020540,6,
 0x020564,3,
-0x020574,4,
-0x020588,10,
-0x0205b4,16,
-0x020600,17,
-0x020648,1,
-0x020650,17,
-0x020698,1,
-0x0206a0,17,
-0x0206e8,1,
-0x0206f0,17,
-0x020738,1,
-0x020740,3,
-0x020750,3,
-0x02078c,2,
+0x020574,7,
+0x020594,2,
+0x0205c0,49,
+0x020688,1,
+0x020690,17,
+0x0206d8,1,
+0x0206e0,17,
+0x020728,1,
+0x020730,17,
+0x020778,1,
+0x020780,3,
+0x020790,3,
 0x0207a4,1,
-0x0207ac,15,
+0x0207ac,3,
+0x0207c0,4,
+0x0207d4,7,
 0x0207f4,68,
 0x020910,2,
 0x020920,6,
 0x020940,6,
 0x020964,3,
-0x020974,4,
-0x020988,10,
-0x0209b4,16,
-0x020a00,17,
-0x020a48,1,
-0x020a50,17,
-0x020a98,1,
-0x020aa0,17,
-0x020ae8,1,
-0x020af0,17,
-0x020b38,1,
-0x020b40,3,
-0x020b50,3,
-0x020b8c,2,
+0x020974,7,
+0x020994,2,
+0x0209c0,49,
+0x020a88,1,
+0x020a90,17,
+0x020ad8,1,
+0x020ae0,17,
+0x020b28,1,
+0x020b30,17,
+0x020b78,1,
+0x020b80,3,
+0x020b90,3,
 0x020ba4,1,
-0x020bac,15,
+0x020bac,3,
+0x020bc0,4,
+0x020bd4,7,
 0x020bf4,68,
 0x020d10,2,
 0x020d20,6,
 0x020d40,6,
 0x020d64,3,
-0x020d74,4,
-0x020d88,10,
-0x020db4,16,
-0x020e00,17,
-0x020e48,1,
-0x020e50,17,
-0x020e98,1,
-0x020ea0,17,
-0x020ee8,1,
-0x020ef0,17,
-0x020f38,1,
-0x020f40,3,
-0x020f50,3,
-0x020f8c,2,
+0x020d74,7,
+0x020d94,2,
+0x020dc0,49,
+0x020e88,1,
+0x020e90,17,
+0x020ed8,1,
+0x020ee0,17,
+0x020f28,1,
+0x020f30,17,
+0x020f78,1,
+0x020f80,3,
+0x020f90,3,
 0x020fa4,1,
-0x020fac,15,
+0x020fac,3,
+0x020fc0,4,
+0x020fd4,7,
 0x020ff4,68,
 0x021110,2,
 0x021120,6,
 0x021140,6,
 0x021164,3,
-0x021174,4,
-0x021188,10,
-0x0211b4,16,
-0x021200,17,
-0x021248,1,
-0x021250,17,
-0x021298,1,
-0x0212a0,17,
-0x0212e8,1,
-0x0212f0,17,
-0x021338,1,
-0x021340,3,
-0x021350,3,
-0x02138c,2,
+0x021174,7,
+0x021194,2,
+0x0211c0,49,
+0x021288,1,
+0x021290,17,
+0x0212d8,1,
+0x0212e0,17,
+0x021328,1,
+0x021330,17,
+0x021378,1,
+0x021380,3,
+0x021390,3,
 0x0213a4,1,
-0x0213ac,15,
+0x0213ac,3,
+0x0213c0,4,
+0x0213d4,7,
 0x0213f4,68,
 0x021510,2,
 0x021520,6,
 0x021540,6,
 0x021564,3,
-0x021574,4,
-0x021588,10,
-0x0215b4,16,
-0x021600,17,
-0x021648,1,
-0x021650,17,
-0x021698,1,
-0x0216a0,17,
-0x0216e8,1,
-0x0216f0,17,
-0x021738,1,
-0x021740,3,
-0x021750,3,
-0x02178c,2,
+0x021574,7,
+0x021594,2,
+0x0215c0,49,
+0x021688,1,
+0x021690,17,
+0x0216d8,1,
+0x0216e0,17,
+0x021728,1,
+0x021730,17,
+0x021778,1,
+0x021780,3,
+0x021790,3,
 0x0217a4,1,
-0x0217ac,15,
+0x0217ac,3,
+0x0217c0,4,
+0x0217d4,7,
 0x0217f4,68,
 0x021910,2,
 0x021920,6,
 0x021940,6,
 0x021964,3,
-0x021974,4,
-0x021988,10,
-0x0219b4,16,
-0x021a00,17,
-0x021a48,1,
-0x021a50,17,
-0x021a98,1,
-0x021aa0,17,
-0x021ae8,1,
-0x021af0,17,
-0x021b38,1,
-0x021b40,3,
-0x021b50,3,
-0x021b8c,2,
+0x021974,7,
+0x021994,2,
+0x0219c0,49,
+0x021a88,1,
+0x021a90,17,
+0x021ad8,1,
+0x021ae0,17,
+0x021b28,1,
+0x021b30,17,
+0x021b78,1,
+0x021b80,3,
+0x021b90,3,
 0x021ba4,1,
-0x021bac,15,
+0x021bac,3,
+0x021bc0,4,
+0x021bd4,7,
 0x021bf4,68,
 0x021d10,2,
 0x021d20,6,
 0x021d40,6,
 0x021d64,3,
-0x021d74,4,
-0x021d88,10,
-0x021db4,16,
-0x021e00,17,
-0x021e48,1,
-0x021e50,17,
-0x021e98,1,
-0x021ea0,17,
-0x021ee8,1,
-0x021ef0,17,
-0x021f38,1,
-0x021f40,3,
-0x021f50,3,
-0x021f8c,2,
+0x021d74,7,
+0x021d94,2,
+0x021dc0,49,
+0x021e88,1,
+0x021e90,17,
+0x021ed8,1,
+0x021ee0,17,
+0x021f28,1,
+0x021f30,17,
+0x021f78,1,
+0x021f80,3,
+0x021f90,3,
 0x021fa4,1,
-0x021fac,15,
+0x021fac,3,
+0x021fc0,4,
+0x021fd4,7,
 0x021ff4,68,
 0x022110,2,
 0x022120,6,
 0x022140,6,
 0x022164,3,
-0x022174,4,
-0x022188,10,
-0x0221b4,16,
-0x022200,17,
-0x022248,1,
-0x022250,17,
-0x022298,1,
-0x0222a0,17,
-0x0222e8,1,
-0x0222f0,17,
-0x022338,1,
-0x022340,3,
-0x022350,3,
-0x02238c,2,
+0x022174,7,
+0x022194,2,
+0x0221c0,49,
+0x022288,1,
+0x022290,17,
+0x0222d8,1,
+0x0222e0,17,
+0x022328,1,
+0x022330,17,
+0x022378,1,
+0x022380,3,
+0x022390,3,
 0x0223a4,1,
-0x0223ac,15,
+0x0223ac,3,
+0x0223c0,4,
+0x0223d4,7,
 0x0223f4,68,
 0x022510,2,
 0x022520,6,
 0x022540,6,
 0x022564,3,
-0x022574,4,
-0x022588,10,
-0x0225b4,16,
-0x022600,17,
-0x022648,1,
-0x022650,17,
-0x022698,1,
-0x0226a0,17,
-0x0226e8,1,
-0x0226f0,17,
-0x022738,1,
-0x022740,3,
-0x022750,3,
-0x02278c,2,
+0x022574,7,
+0x022594,2,
+0x0225c0,49,
+0x022688,1,
+0x022690,17,
+0x0226d8,1,
+0x0226e0,17,
+0x022728,1,
+0x022730,17,
+0x022778,1,
+0x022780,3,
+0x022790,3,
 0x0227a4,1,
-0x0227ac,15,
+0x0227ac,3,
+0x0227c0,4,
+0x0227d4,7,
 0x0227f4,68,
 0x022910,2,
 0x022920,6,
 0x022940,6,
 0x022964,3,
-0x022974,4,
-0x022988,10,
-0x0229b4,16,
-0x022a00,17,
-0x022a48,1,
-0x022a50,17,
-0x022a98,1,
-0x022aa0,17,
-0x022ae8,1,
-0x022af0,17,
-0x022b38,1,
-0x022b40,3,
-0x022b50,3,
-0x022b8c,2,
+0x022974,7,
+0x022994,2,
+0x0229c0,49,
+0x022a88,1,
+0x022a90,17,
+0x022ad8,1,
+0x022ae0,17,
+0x022b28,1,
+0x022b30,17,
+0x022b78,1,
+0x022b80,3,
+0x022b90,3,
 0x022ba4,1,
-0x022bac,15,
+0x022bac,3,
+0x022bc0,4,
+0x022bd4,7,
 0x022bf4,68,
 0x022d10,2,
 0x022d20,6,
 0x022d40,6,
 0x022d64,3,
-0x022d74,4,
-0x022d88,10,
-0x022db4,16,
-0x022e00,17,
-0x022e48,1,
-0x022e50,17,
-0x022e98,1,
-0x022ea0,17,
-0x022ee8,1,
-0x022ef0,17,
-0x022f38,1,
-0x022f40,3,
-0x022f50,3,
-0x022f8c,2,
+0x022d74,7,
+0x022d94,2,
+0x022dc0,49,
+0x022e88,1,
+0x022e90,17,
+0x022ed8,1,
+0x022ee0,17,
+0x022f28,1,
+0x022f30,17,
+0x022f78,1,
+0x022f80,3,
+0x022f90,3,
 0x022fa4,1,
-0x022fac,15,
+0x022fac,3,
+0x022fc0,4,
+0x022fd4,7,
 0x022ff4,68,
 0x023110,2,
 0x023120,6,
 0x023140,6,
 0x023164,3,
-0x023174,4,
-0x023188,10,
-0x0231b4,16,
-0x023200,17,
-0x023248,1,
-0x023250,17,
-0x023298,1,
-0x0232a0,17,
-0x0232e8,1,
-0x0232f0,17,
-0x023338,1,
-0x023340,3,
-0x023350,3,
-0x02338c,2,
+0x023174,7,
+0x023194,2,
+0x0231c0,49,
+0x023288,1,
+0x023290,17,
+0x0232d8,1,
+0x0232e0,17,
+0x023328,1,
+0x023330,17,
+0x023378,1,
+0x023380,3,
+0x023390,3,
 0x0233a4,1,
-0x0233ac,15,
+0x0233ac,3,
+0x0233c0,4,
+0x0233d4,7,
 0x0233f4,68,
 0x023510,2,
 0x023520,6,
 0x023540,6,
 0x023564,3,
-0x023574,4,
-0x023588,10,
-0x0235b4,16,
-0x023600,17,
-0x023648,1,
-0x023650,17,
-0x023698,1,
-0x0236a0,17,
-0x0236e8,1,
-0x0236f0,17,
-0x023738,1,
-0x023740,3,
-0x023750,3,
-0x02378c,2,
+0x023574,7,
+0x023594,2,
+0x0235c0,49,
+0x023688,1,
+0x023690,17,
+0x0236d8,1,
+0x0236e0,17,
+0x023728,1,
+0x023730,17,
+0x023778,1,
+0x023780,3,
+0x023790,3,
 0x0237a4,1,
-0x0237ac,15,
+0x0237ac,3,
+0x0237c0,4,
+0x0237d4,7,
 0x0237f4,68,
 0x023910,2,
 0x023920,6,
 0x023940,6,
 0x023964,3,
-0x023974,4,
-0x023988,10,
-0x0239b4,16,
-0x023a00,17,
-0x023a48,1,
-0x023a50,17,
-0x023a98,1,
-0x023aa0,17,
-0x023ae8,1,
-0x023af0,17,
-0x023b38,1,
-0x023b40,3,
-0x023b50,3,
-0x023b8c,2,
+0x023974,7,
+0x023994,2,
+0x0239c0,49,
+0x023a88,1,
+0x023a90,17,
+0x023ad8,1,
+0x023ae0,17,
+0x023b28,1,
+0x023b30,17,
+0x023b78,1,
+0x023b80,3,
+0x023b90,3,
 0x023ba4,1,
-0x023bac,15,
+0x023bac,3,
+0x023bc0,4,
+0x023bd4,7,
 0x023bf4,68,
 0x023d10,2,
 0x023d20,6,
 0x023d40,6,
 0x023d64,3,
-0x023d74,4,
-0x023d88,10,
-0x023db4,16,
-0x023e00,17,
-0x023e48,1,
-0x023e50,17,
-0x023e98,1,
-0x023ea0,17,
-0x023ee8,1,
-0x023ef0,17,
-0x023f38,1,
-0x023f40,3,
-0x023f50,3,
-0x023f8c,2,
+0x023d74,7,
+0x023d94,2,
+0x023dc0,49,
+0x023e88,1,
+0x023e90,17,
+0x023ed8,1,
+0x023ee0,17,
+0x023f28,1,
+0x023f30,17,
+0x023f78,1,
+0x023f80,3,
+0x023f90,3,
 0x023fa4,1,
-0x023fac,15,
-0x023ff4,5,
-0x02400c,37,
-0x0240a4,64,
-0x024200,15,
-0x024240,68,
-0x024354,2,
-0x024370,1,
-0x02437c,1,
-0x024384,1,
-0x02438c,3,
-0x0243b0,1,
-0x024480,40,
-0x024528,4,
-0x024560,4,
-0x02457c,20,
-0x024600,6,
-0x024620,6,
-0x024730,2,
-0x024740,1,
+0x023fac,3,
+0x023fc0,4,
+0x023fd4,7,
+0x023ff4,7,
+0x024020,37,
+0x0240b8,64,
+0x024200,11,
+0x024230,3,
+0x024240,130,
+0x024450,2,
+0x024468,3,
+0x02447c,1,
+0x024484,1,
+0x02448c,3,
+0x024500,40,
+0x0245a8,4,
+0x0245e0,4,
+0x0245fc,20,
+0x024700,6,
+0x024720,6,
+0x024740,6,
+0x024760,2,
+0x024770,2,
+0x024780,1,
 0x025000,5,
 0x025028,5,
 0x025050,5,
@@ -1840,366 +1912,370 @@
 0x025340,3,
 0x025440,3,
 0x025500,13,
-0x025580,3,
-0x025590,3,
-0x0255c0,6,
-0x0255e0,3,
+0x025540,2,
+0x025560,3,
+0x025570,3,
+0x025580,6,
+0x0255a0,6,
+0x0255c0,3,
 0x025900,1,
 0x028000,65,
 0x028110,2,
 0x028120,6,
 0x028140,6,
 0x028164,3,
-0x028174,4,
-0x028188,10,
-0x0281b4,16,
-0x028200,17,
-0x028248,1,
-0x028250,17,
-0x028298,1,
-0x0282a0,17,
-0x0282e8,1,
-0x0282f0,17,
-0x028338,1,
-0x028340,3,
-0x028350,3,
-0x02838c,2,
+0x028174,7,
+0x028194,2,
+0x0281c0,49,
+0x028288,1,
+0x028290,17,
+0x0282d8,1,
+0x0282e0,17,
+0x028328,1,
+0x028330,17,
+0x028378,1,
+0x028380,3,
+0x028390,3,
 0x0283a4,1,
-0x0283ac,15,
+0x0283ac,3,
+0x0283c0,4,
+0x0283d4,7,
 0x0283f4,68,
 0x028510,2,
 0x028520,6,
 0x028540,6,
 0x028564,3,
-0x028574,4,
-0x028588,10,
-0x0285b4,16,
-0x028600,17,
-0x028648,1,
-0x028650,17,
-0x028698,1,
-0x0286a0,17,
-0x0286e8,1,
-0x0286f0,17,
-0x028738,1,
-0x028740,3,
-0x028750,3,
-0x02878c,2,
+0x028574,7,
+0x028594,2,
+0x0285c0,49,
+0x028688,1,
+0x028690,17,
+0x0286d8,1,
+0x0286e0,17,
+0x028728,1,
+0x028730,17,
+0x028778,1,
+0x028780,3,
+0x028790,3,
 0x0287a4,1,
-0x0287ac,15,
+0x0287ac,3,
+0x0287c0,4,
+0x0287d4,7,
 0x0287f4,68,
 0x028910,2,
 0x028920,6,
 0x028940,6,
 0x028964,3,
-0x028974,4,
-0x028988,10,
-0x0289b4,16,
-0x028a00,17,
-0x028a48,1,
-0x028a50,17,
-0x028a98,1,
-0x028aa0,17,
-0x028ae8,1,
-0x028af0,17,
-0x028b38,1,
-0x028b40,3,
-0x028b50,3,
-0x028b8c,2,
+0x028974,7,
+0x028994,2,
+0x0289c0,49,
+0x028a88,1,
+0x028a90,17,
+0x028ad8,1,
+0x028ae0,17,
+0x028b28,1,
+0x028b30,17,
+0x028b78,1,
+0x028b80,3,
+0x028b90,3,
 0x028ba4,1,
-0x028bac,15,
+0x028bac,3,
+0x028bc0,4,
+0x028bd4,7,
 0x028bf4,68,
 0x028d10,2,
 0x028d20,6,
 0x028d40,6,
 0x028d64,3,
-0x028d74,4,
-0x028d88,10,
-0x028db4,16,
-0x028e00,17,
-0x028e48,1,
-0x028e50,17,
-0x028e98,1,
-0x028ea0,17,
-0x028ee8,1,
-0x028ef0,17,
-0x028f38,1,
-0x028f40,3,
-0x028f50,3,
-0x028f8c,2,
+0x028d74,7,
+0x028d94,2,
+0x028dc0,49,
+0x028e88,1,
+0x028e90,17,
+0x028ed8,1,
+0x028ee0,17,
+0x028f28,1,
+0x028f30,17,
+0x028f78,1,
+0x028f80,3,
+0x028f90,3,
 0x028fa4,1,
-0x028fac,15,
+0x028fac,3,
+0x028fc0,4,
+0x028fd4,7,
 0x028ff4,68,
 0x029110,2,
 0x029120,6,
 0x029140,6,
 0x029164,3,
-0x029174,4,
-0x029188,10,
-0x0291b4,16,
-0x029200,17,
-0x029248,1,
-0x029250,17,
-0x029298,1,
-0x0292a0,17,
-0x0292e8,1,
-0x0292f0,17,
-0x029338,1,
-0x029340,3,
-0x029350,3,
-0x02938c,2,
+0x029174,7,
+0x029194,2,
+0x0291c0,49,
+0x029288,1,
+0x029290,17,
+0x0292d8,1,
+0x0292e0,17,
+0x029328,1,
+0x029330,17,
+0x029378,1,
+0x029380,3,
+0x029390,3,
 0x0293a4,1,
-0x0293ac,15,
+0x0293ac,3,
+0x0293c0,4,
+0x0293d4,7,
 0x0293f4,68,
 0x029510,2,
 0x029520,6,
 0x029540,6,
 0x029564,3,
-0x029574,4,
-0x029588,10,
-0x0295b4,16,
-0x029600,17,
-0x029648,1,
-0x029650,17,
-0x029698,1,
-0x0296a0,17,
-0x0296e8,1,
-0x0296f0,17,
-0x029738,1,
-0x029740,3,
-0x029750,3,
-0x02978c,2,
+0x029574,7,
+0x029594,2,
+0x0295c0,49,
+0x029688,1,
+0x029690,17,
+0x0296d8,1,
+0x0296e0,17,
+0x029728,1,
+0x029730,17,
+0x029778,1,
+0x029780,3,
+0x029790,3,
 0x0297a4,1,
-0x0297ac,15,
+0x0297ac,3,
+0x0297c0,4,
+0x0297d4,7,
 0x0297f4,68,
 0x029910,2,
 0x029920,6,
 0x029940,6,
 0x029964,3,
-0x029974,4,
-0x029988,10,
-0x0299b4,16,
-0x029a00,17,
-0x029a48,1,
-0x029a50,17,
-0x029a98,1,
-0x029aa0,17,
-0x029ae8,1,
-0x029af0,17,
-0x029b38,1,
-0x029b40,3,
-0x029b50,3,
-0x029b8c,2,
+0x029974,7,
+0x029994,2,
+0x0299c0,49,
+0x029a88,1,
+0x029a90,17,
+0x029ad8,1,
+0x029ae0,17,
+0x029b28,1,
+0x029b30,17,
+0x029b78,1,
+0x029b80,3,
+0x029b90,3,
 0x029ba4,1,
-0x029bac,15,
+0x029bac,3,
+0x029bc0,4,
+0x029bd4,7,
 0x029bf4,68,
 0x029d10,2,
 0x029d20,6,
 0x029d40,6,
 0x029d64,3,
-0x029d74,4,
-0x029d88,10,
-0x029db4,16,
-0x029e00,17,
-0x029e48,1,
-0x029e50,17,
-0x029e98,1,
-0x029ea0,17,
-0x029ee8,1,
-0x029ef0,17,
-0x029f38,1,
-0x029f40,3,
-0x029f50,3,
-0x029f8c,2,
+0x029d74,7,
+0x029d94,2,
+0x029dc0,49,
+0x029e88,1,
+0x029e90,17,
+0x029ed8,1,
+0x029ee0,17,
+0x029f28,1,
+0x029f30,17,
+0x029f78,1,
+0x029f80,3,
+0x029f90,3,
 0x029fa4,1,
-0x029fac,15,
+0x029fac,3,
+0x029fc0,4,
+0x029fd4,7,
 0x029ff4,68,
 0x02a110,2,
 0x02a120,6,
 0x02a140,6,
 0x02a164,3,
-0x02a174,4,
-0x02a188,10,
-0x02a1b4,16,
-0x02a200,17,
-0x02a248,1,
-0x02a250,17,
-0x02a298,1,
-0x02a2a0,17,
-0x02a2e8,1,
-0x02a2f0,17,
-0x02a338,1,
-0x02a340,3,
-0x02a350,3,
-0x02a38c,2,
+0x02a174,7,
+0x02a194,2,
+0x02a1c0,49,
+0x02a288,1,
+0x02a290,17,
+0x02a2d8,1,
+0x02a2e0,17,
+0x02a328,1,
+0x02a330,17,
+0x02a378,1,
+0x02a380,3,
+0x02a390,3,
 0x02a3a4,1,
-0x02a3ac,15,
+0x02a3ac,3,
+0x02a3c0,4,
+0x02a3d4,7,
 0x02a3f4,68,
 0x02a510,2,
 0x02a520,6,
 0x02a540,6,
 0x02a564,3,
-0x02a574,4,
-0x02a588,10,
-0x02a5b4,16,
-0x02a600,17,
-0x02a648,1,
-0x02a650,17,
-0x02a698,1,
-0x02a6a0,17,
-0x02a6e8,1,
-0x02a6f0,17,
-0x02a738,1,
-0x02a740,3,
-0x02a750,3,
-0x02a78c,2,
+0x02a574,7,
+0x02a594,2,
+0x02a5c0,49,
+0x02a688,1,
+0x02a690,17,
+0x02a6d8,1,
+0x02a6e0,17,
+0x02a728,1,
+0x02a730,17,
+0x02a778,1,
+0x02a780,3,
+0x02a790,3,
 0x02a7a4,1,
-0x02a7ac,15,
+0x02a7ac,3,
+0x02a7c0,4,
+0x02a7d4,7,
 0x02a7f4,68,
 0x02a910,2,
 0x02a920,6,
 0x02a940,6,
 0x02a964,3,
-0x02a974,4,
-0x02a988,10,
-0x02a9b4,16,
-0x02aa00,17,
-0x02aa48,1,
-0x02aa50,17,
-0x02aa98,1,
-0x02aaa0,17,
-0x02aae8,1,
-0x02aaf0,17,
-0x02ab38,1,
-0x02ab40,3,
-0x02ab50,3,
-0x02ab8c,2,
+0x02a974,7,
+0x02a994,2,
+0x02a9c0,49,
+0x02aa88,1,
+0x02aa90,17,
+0x02aad8,1,
+0x02aae0,17,
+0x02ab28,1,
+0x02ab30,17,
+0x02ab78,1,
+0x02ab80,3,
+0x02ab90,3,
 0x02aba4,1,
-0x02abac,15,
+0x02abac,3,
+0x02abc0,4,
+0x02abd4,7,
 0x02abf4,68,
 0x02ad10,2,
 0x02ad20,6,
 0x02ad40,6,
 0x02ad64,3,
-0x02ad74,4,
-0x02ad88,10,
-0x02adb4,16,
-0x02ae00,17,
-0x02ae48,1,
-0x02ae50,17,
-0x02ae98,1,
-0x02aea0,17,
-0x02aee8,1,
-0x02aef0,17,
-0x02af38,1,
-0x02af40,3,
-0x02af50,3,
-0x02af8c,2,
+0x02ad74,7,
+0x02ad94,2,
+0x02adc0,49,
+0x02ae88,1,
+0x02ae90,17,
+0x02aed8,1,
+0x02aee0,17,
+0x02af28,1,
+0x02af30,17,
+0x02af78,1,
+0x02af80,3,
+0x02af90,3,
 0x02afa4,1,
-0x02afac,15,
+0x02afac,3,
+0x02afc0,4,
+0x02afd4,7,
 0x02aff4,68,
 0x02b110,2,
 0x02b120,6,
 0x02b140,6,
 0x02b164,3,
-0x02b174,4,
-0x02b188,10,
-0x02b1b4,16,
-0x02b200,17,
-0x02b248,1,
-0x02b250,17,
-0x02b298,1,
-0x02b2a0,17,
-0x02b2e8,1,
-0x02b2f0,17,
-0x02b338,1,
-0x02b340,3,
-0x02b350,3,
-0x02b38c,2,
+0x02b174,7,
+0x02b194,2,
+0x02b1c0,49,
+0x02b288,1,
+0x02b290,17,
+0x02b2d8,1,
+0x02b2e0,17,
+0x02b328,1,
+0x02b330,17,
+0x02b378,1,
+0x02b380,3,
+0x02b390,3,
 0x02b3a4,1,
-0x02b3ac,15,
+0x02b3ac,3,
+0x02b3c0,4,
+0x02b3d4,7,
 0x02b3f4,68,
 0x02b510,2,
 0x02b520,6,
 0x02b540,6,
 0x02b564,3,
-0x02b574,4,
-0x02b588,10,
-0x02b5b4,16,
-0x02b600,17,
-0x02b648,1,
-0x02b650,17,
-0x02b698,1,
-0x02b6a0,17,
-0x02b6e8,1,
-0x02b6f0,17,
-0x02b738,1,
-0x02b740,3,
-0x02b750,3,
-0x02b78c,2,
+0x02b574,7,
+0x02b594,2,
+0x02b5c0,49,
+0x02b688,1,
+0x02b690,17,
+0x02b6d8,1,
+0x02b6e0,17,
+0x02b728,1,
+0x02b730,17,
+0x02b778,1,
+0x02b780,3,
+0x02b790,3,
 0x02b7a4,1,
-0x02b7ac,15,
+0x02b7ac,3,
+0x02b7c0,4,
+0x02b7d4,7,
 0x02b7f4,68,
 0x02b910,2,
 0x02b920,6,
 0x02b940,6,
 0x02b964,3,
-0x02b974,4,
-0x02b988,10,
-0x02b9b4,16,
-0x02ba00,17,
-0x02ba48,1,
-0x02ba50,17,
-0x02ba98,1,
-0x02baa0,17,
-0x02bae8,1,
-0x02baf0,17,
-0x02bb38,1,
-0x02bb40,3,
-0x02bb50,3,
-0x02bb8c,2,
+0x02b974,7,
+0x02b994,2,
+0x02b9c0,49,
+0x02ba88,1,
+0x02ba90,17,
+0x02bad8,1,
+0x02bae0,17,
+0x02bb28,1,
+0x02bb30,17,
+0x02bb78,1,
+0x02bb80,3,
+0x02bb90,3,
 0x02bba4,1,
-0x02bbac,15,
+0x02bbac,3,
+0x02bbc0,4,
+0x02bbd4,7,
 0x02bbf4,68,
 0x02bd10,2,
 0x02bd20,6,
 0x02bd40,6,
 0x02bd64,3,
-0x02bd74,4,
-0x02bd88,10,
-0x02bdb4,16,
-0x02be00,17,
-0x02be48,1,
-0x02be50,17,
-0x02be98,1,
-0x02bea0,17,
-0x02bee8,1,
-0x02bef0,17,
-0x02bf38,1,
-0x02bf40,3,
-0x02bf50,3,
-0x02bf8c,2,
+0x02bd74,7,
+0x02bd94,2,
+0x02bdc0,49,
+0x02be88,1,
+0x02be90,17,
+0x02bed8,1,
+0x02bee0,17,
+0x02bf28,1,
+0x02bf30,17,
+0x02bf78,1,
+0x02bf80,3,
+0x02bf90,3,
 0x02bfa4,1,
-0x02bfac,15,
-0x02bff4,5,
-0x02c00c,37,
-0x02c0a4,64,
-0x02c200,15,
-0x02c240,68,
-0x02c354,2,
-0x02c370,1,
-0x02c37c,1,
-0x02c384,1,
-0x02c38c,3,
-0x02c3b0,1,
-0x02c480,40,
-0x02c528,4,
-0x02c560,4,
-0x02c57c,20,
-0x02c600,6,
-0x02c620,6,
-0x02c730,2,
-0x02c740,1,
+0x02bfac,3,
+0x02bfc0,4,
+0x02bfd4,7,
+0x02bff4,7,
+0x02c020,37,
+0x02c0b8,64,
+0x02c200,11,
+0x02c230,3,
+0x02c240,130,
+0x02c450,2,
+0x02c468,3,
+0x02c47c,1,
+0x02c484,1,
+0x02c48c,3,
+0x02c500,40,
+0x02c5a8,4,
+0x02c5e0,4,
+0x02c5fc,20,
+0x02c700,6,
+0x02c720,6,
+0x02c740,6,
+0x02c760,2,
+0x02c770,2,
+0x02c780,1,
 0x02d000,5,
 0x02d028,5,
 0x02d050,5,
@@ -2220,10 +2296,12 @@
 0x02d340,3,
 0x02d440,3,
 0x02d500,13,
-0x02d580,3,
-0x02d590,3,
-0x02d5c0,6,
-0x02d5e0,3,
+0x02d540,2,
+0x02d560,3,
+0x02d570,3,
+0x02d580,6,
+0x02d5a0,6,
+0x02d5c0,3,
 0x02d900,1,
 0x030000,38,
 0x030100,38,
@@ -2261,180 +2339,216 @@
 0x032020,7,
 0x032040,4,
 0x032054,3,
+0x032064,1,
 0x03206c,1,
 0x032080,6,
 0x0320a0,7,
 0x0320c0,4,
 0x0320d4,3,
+0x0320e4,1,
 0x0320ec,1,
 0x032100,6,
 0x032120,7,
 0x032140,4,
 0x032154,3,
+0x032164,1,
 0x03216c,1,
 0x032180,6,
 0x0321a0,7,
 0x0321c0,4,
 0x0321d4,3,
+0x0321e4,1,
 0x0321ec,1,
 0x032200,6,
 0x032220,7,
 0x032240,4,
 0x032254,3,
+0x032264,1,
 0x03226c,1,
 0x032280,6,
 0x0322a0,7,
 0x0322c0,4,
 0x0322d4,3,
+0x0322e4,1,
 0x0322ec,1,
 0x032300,6,
 0x032320,7,
 0x032340,4,
 0x032354,3,
+0x032364,1,
 0x03236c,1,
 0x032380,6,
 0x0323a0,7,
 0x0323c0,4,
 0x0323d4,3,
+0x0323e4,1,
 0x0323ec,1,
 0x032400,6,
 0x032420,7,
 0x032440,4,
 0x032454,3,
+0x032464,1,
 0x03246c,1,
 0x032480,6,
 0x0324a0,7,
 0x0324c0,4,
 0x0324d4,3,
+0x0324e4,1,
 0x0324ec,1,
 0x032500,6,
 0x032520,7,
 0x032540,4,
 0x032554,3,
+0x032564,1,
 0x03256c,1,
 0x032580,6,
 0x0325a0,7,
 0x0325c0,4,
 0x0325d4,3,
+0x0325e4,1,
 0x0325ec,1,
 0x032600,6,
 0x032620,7,
 0x032640,4,
 0x032654,3,
+0x032664,1,
 0x03266c,1,
 0x032680,6,
 0x0326a0,7,
 0x0326c0,4,
 0x0326d4,3,
+0x0326e4,1,
 0x0326ec,1,
 0x032700,6,
 0x032720,7,
 0x032740,4,
 0x032754,3,
+0x032764,1,
 0x03276c,1,
 0x032780,6,
 0x0327a0,7,
 0x0327c0,4,
 0x0327d4,3,
+0x0327e4,1,
 0x0327ec,1,
 0x032800,6,
 0x032820,7,
 0x032840,4,
 0x032854,3,
+0x032864,1,
 0x03286c,1,
 0x032880,6,
 0x0328a0,7,
 0x0328c0,4,
 0x0328d4,3,
+0x0328e4,1,
 0x0328ec,1,
 0x032900,6,
 0x032920,7,
 0x032940,4,
 0x032954,3,
+0x032964,1,
 0x03296c,1,
 0x032980,6,
 0x0329a0,7,
 0x0329c0,4,
 0x0329d4,3,
+0x0329e4,1,
 0x0329ec,1,
 0x032a00,6,
 0x032a20,7,
 0x032a40,4,
 0x032a54,3,
+0x032a64,1,
 0x032a6c,1,
 0x032a80,6,
 0x032aa0,7,
 0x032ac0,4,
 0x032ad4,3,
+0x032ae4,1,
 0x032aec,1,
 0x032b00,6,
 0x032b20,7,
 0x032b40,4,
 0x032b54,3,
+0x032b64,1,
 0x032b6c,1,
 0x032b80,6,
 0x032ba0,7,
 0x032bc0,4,
 0x032bd4,3,
+0x032be4,1,
 0x032bec,1,
 0x032c00,6,
 0x032c20,7,
 0x032c40,4,
 0x032c54,3,
+0x032c64,1,
 0x032c6c,1,
 0x032c80,6,
 0x032ca0,7,
 0x032cc0,4,
 0x032cd4,3,
+0x032ce4,1,
 0x032cec,1,
 0x032d00,6,
 0x032d20,7,
 0x032d40,4,
 0x032d54,3,
+0x032d64,1,
 0x032d6c,1,
 0x032d80,6,
 0x032da0,7,
 0x032dc0,4,
 0x032dd4,3,
+0x032de4,1,
 0x032dec,1,
 0x032e00,6,
 0x032e20,7,
 0x032e40,4,
 0x032e54,3,
+0x032e64,1,
 0x032e6c,1,
 0x032e80,6,
 0x032ea0,7,
 0x032ec0,4,
 0x032ed4,3,
+0x032ee4,1,
 0x032eec,1,
 0x032f00,6,
 0x032f20,7,
 0x032f40,4,
 0x032f54,3,
+0x032f64,1,
 0x032f6c,1,
 0x032f80,6,
 0x032fa0,7,
 0x032fc0,4,
 0x032fd4,3,
+0x032fe4,1,
 0x032fec,1,
 0x033000,6,
 0x033020,7,
 0x033040,4,
 0x033054,3,
+0x033064,1,
 0x03306c,1,
 0x033080,6,
 0x0330a0,7,
 0x0330c0,4,
 0x0330d4,3,
+0x0330e4,1,
 0x0330ec,1,
 0x033100,38,
-0x033200,13,
-0x033240,6,
-0x033260,3,
+0x033200,6,
+0x033220,6,
+0x033240,3,
+0x033280,13,
 0x0332c0,3,
 0x0332d0,3,
+0x0332e0,2,
 0x033300,7,
-0x0333fc,1,
+0x0333f8,2,
 0x033500,33,
 0x033600,2,
 0x033800,6,
@@ -2472,149 +2586,114 @@
 0x033de0,6,
 0x033e00,6,
 0x033e20,3,
-0x034000,10,
-0x03402c,11,
-0x034068,1,
-0x034070,14,
-0x0340ac,11,
-0x0340e8,1,
-0x0340f0,14,
-0x03412c,11,
-0x034168,1,
-0x034170,14,
-0x0341ac,11,
-0x0341e8,1,
-0x0341f0,14,
-0x03422c,11,
-0x034268,1,
-0x034270,14,
-0x0342ac,11,
-0x0342e8,1,
-0x0342f0,14,
-0x03432c,11,
-0x034368,1,
-0x034370,14,
-0x0343ac,11,
-0x0343e8,1,
-0x0343f0,14,
-0x03442c,11,
-0x034468,1,
-0x034470,14,
-0x0344ac,11,
-0x0344e8,1,
-0x0344f0,14,
-0x03452c,11,
-0x034568,1,
-0x034570,14,
-0x0345ac,11,
-0x0345e8,1,
-0x0345f0,14,
-0x03462c,11,
-0x034668,1,
-0x034670,14,
-0x0346ac,11,
-0x0346e8,1,
-0x0346f0,14,
-0x03472c,11,
-0x034768,1,
-0x034770,14,
-0x0347ac,11,
-0x0347e8,1,
-0x0347f0,14,
-0x03482c,11,
-0x034868,1,
-0x034870,14,
-0x0348ac,11,
-0x0348e8,1,
-0x0348f0,14,
-0x03492c,11,
-0x034968,1,
-0x034970,14,
-0x0349ac,11,
-0x0349e8,1,
-0x0349f0,14,
-0x034a2c,11,
-0x034a68,1,
-0x034a70,14,
-0x034aac,11,
-0x034ae8,1,
-0x034af0,14,
-0x034b2c,11,
-0x034b68,1,
-0x034b70,14,
-0x034bac,11,
-0x034be8,1,
-0x034bf0,14,
-0x034c2c,11,
-0x034c68,1,
-0x034c70,14,
-0x034cac,11,
-0x034ce8,1,
-0x034cf0,14,
-0x034d2c,11,
-0x034d68,1,
-0x034d70,14,
-0x034dac,11,
-0x034de8,1,
-0x034df0,14,
-0x034e2c,11,
-0x034e68,1,
-0x034e70,14,
-0x034eac,11,
-0x034ee8,1,
-0x034ef0,14,
-0x034f2c,11,
-0x034f68,1,
-0x034f70,14,
-0x034fac,11,
-0x034fe8,1,
-0x034ff0,10,
-0x03507c,7,
-0x0350fc,7,
-0x03517c,7,
-0x0351fc,7,
-0x03527c,7,
-0x0352fc,7,
-0x03537c,7,
-0x0353fc,7,
-0x03547c,7,
-0x0354fc,7,
-0x03557c,7,
-0x0355fc,7,
-0x03567c,7,
-0x0356fc,7,
-0x03577c,7,
-0x0357fc,7,
-0x03587c,7,
-0x0358fc,7,
-0x03597c,7,
-0x0359fc,7,
-0x035a7c,7,
-0x035afc,7,
-0x035b7c,7,
-0x035bfc,7,
-0x035c7c,7,
-0x035cfc,7,
-0x035d7c,7,
-0x035dfc,7,
-0x035e7c,7,
-0x035efc,7,
-0x035f7c,7,
-0x035ffc,7,
-0x03607c,7,
-0x0360fc,1,
+0x034000,22,
+0x034060,7,
+0x034080,22,
+0x0340e0,7,
+0x034100,22,
+0x034160,7,
+0x034180,22,
+0x0341e0,7,
+0x034200,22,
+0x034260,7,
+0x034280,22,
+0x0342e0,7,
+0x034300,22,
+0x034360,7,
+0x034380,22,
+0x0343e0,7,
+0x034400,22,
+0x034460,7,
+0x034480,22,
+0x0344e0,7,
+0x034500,22,
+0x034560,7,
+0x034580,22,
+0x0345e0,7,
+0x034600,22,
+0x034660,7,
+0x034680,22,
+0x0346e0,7,
+0x034700,22,
+0x034760,7,
+0x034780,22,
+0x0347e0,7,
+0x034800,22,
+0x034860,7,
+0x034880,22,
+0x0348e0,7,
+0x034900,22,
+0x034960,7,
+0x034980,22,
+0x0349e0,7,
+0x034a00,22,
+0x034a60,7,
+0x034a80,22,
+0x034ae0,7,
+0x034b00,22,
+0x034b60,7,
+0x034b80,22,
+0x034be0,7,
+0x034c00,22,
+0x034c60,7,
+0x034c80,22,
+0x034ce0,7,
+0x034d00,22,
+0x034d60,7,
+0x034d80,22,
+0x034de0,7,
+0x034e00,22,
+0x034e60,7,
+0x034e80,22,
+0x034ee0,7,
+0x034f00,22,
+0x034f60,7,
+0x034f80,22,
+0x034fe0,7,
+0x035000,4,
+0x035020,6,
+0x035100,4,
+0x035120,6,
+0x035200,4,
+0x035220,6,
+0x035300,4,
+0x035320,6,
+0x035400,4,
+0x035420,6,
+0x035500,4,
+0x035520,6,
+0x035600,4,
+0x035620,6,
+0x035700,4,
+0x035720,6,
+0x035800,4,
+0x035820,6,
+0x035900,4,
+0x035920,6,
+0x035a00,4,
+0x035a20,6,
+0x035b00,4,
+0x035b20,6,
+0x035c00,4,
+0x035c20,6,
+0x035d00,4,
+0x035d20,6,
+0x035e00,4,
+0x035e20,6,
+0x035f00,4,
+0x035f20,6,
+0x036000,4,
+0x036020,6,
 0x037400,2,
-0x037410,3,
-0x03742c,1,
-0x037440,1,
+0x037410,2,
 0x037448,1,
 0x03745c,1,
 0x037500,6,
 0x037520,6,
 0x037540,6,
 0x037560,3,
-0x037580,6,
-0x0375a0,6,
+0x037580,3,
+0x037590,3,
 0x037800,6,
 0x037828,6,
 0x037850,6,
@@ -2636,13 +2715,12 @@
 0x037b60,6,
 0x037b80,3,
 0x037c40,1,
-0x037c6c,1,
 0x037c80,6,
 0x037ca0,6,
 0x037cc0,3,
-0x037d00,1,
-0x037e10,2,
-0x037ffc,3,
+0x037d00,3,
+0x037d40,16,
+0x037ff8,4,
 0x03800c,3,
 0x03801c,3,
 0x03802c,3,
@@ -2728,22 +2806,29 @@
 0x039040,6,
 0x039060,6,
 0x039080,3,
-0x039100,98,
-0x03928c,73,
+0x039100,82,
+0x03924c,1,
+0x039290,74,
 0x0397f8,8,
 0x039820,2,
 0x039900,4,
-0x039914,4,
-0x039928,4,
-0x03993c,3,
+0x039914,6,
+0x039930,4,
+0x039944,4,
 0x0399ec,11,
-0x039a20,3,
-0x039a40,7,
-0x039a60,3,
+0x039a20,6,
+0x039a40,3,
+0x039a80,7,
+0x039aa0,2,
+0x039ab0,1,
 0x057000,2,
 0x05700c,3,
 0x057028,2,
-0x057038,47,
+0x057038,2,
+0x057080,29,
+0x0570f8,1,
+0x057100,13,
+0x057140,13,
 0x057500,6,
 0x057520,6,
 0x057540,3,
@@ -2762,31 +2847,33 @@
 0x058108,1,
 0x058110,14,
 0x058200,32,
-0x0582f8,34,
-0x0583f8,2,
+0x0582e0,2,
+0x058300,32,
+0x0583e0,2,
 0x058800,6,
 0x05881c,6,
-0x058a00,11,
-0x058a40,11,
-0x058b00,2,
+0x058a00,3,
+0x058a10,3,
+0x058a40,3,
+0x058a50,3,
+0x058b00,3,
 0x058c04,3,
-0x058c14,12,
+0x058c14,16,
 0x058c84,1,
 0x058c8c,1,
-0x058ca0,2,
-0x058cb4,3,
-0x058e00,30,
+0x058e00,31,
 0x058e80,1,
 0x058e88,3,
-0x058f00,30,
+0x058f00,31,
 0x058f80,1,
 0x058f88,3,
 0x059000,22,
-0x059100,25,
+0x059100,26,
 0x059200,10,
-0x059240,2,
-0x059600,6,
-0x0596fc,55,
+0x059244,5,
+0x0595f8,3,
+0x059608,3,
+0x0596f4,45,
 0x059800,31,
 0x059a00,6,
 0x059a20,6,
@@ -2805,11 +2892,11 @@
 0x059d74,1,
 0x059d80,20,
 0x059df4,1,
-0x059e00,16,
+0x059e00,17,
 0x05a800,3,
-0x05a814,31,
-0x05a8a0,10,
-0x05a8d0,1,
+0x05a814,50,
+0x05a8e0,3,
+0x05a8f0,1,
 0x05a900,6,
 0x05a920,6,
 0x05a940,6,
@@ -2817,66 +2904,77 @@
 0x05a980,6,
 0x05a9a0,6,
 0x05a9c0,3,
-0x05aa00,7,
-0x05aa20,3,
-0x05aa30,1,
-0x05ac00,12,
-0x05ac34,22,
-0x05ad00,6,
-0x05ad20,6,
-0x05ad40,6,
-0x05ad60,6,
-0x05ad80,6,
-0x05ada0,3,
-0x05ae00,7,
-0x05ae20,3,
-0x05ae30,1,
+0x05aa00,12,
+0x05aa34,22,
+0x05aac0,7,
+0x05aae0,3,
+0x05aaf0,1,
+0x05ab00,6,
+0x05ab20,6,
+0x05ab40,6,
+0x05ab60,6,
+0x05ab80,6,
+0x05aba0,3,
+0x05ac00,13,
+0x05ac40,11,
+0x05ac80,1,
 0x05b000,6,
 0x05b020,6,
 0x05b040,3,
+0x05b060,4,
 0x05b0f0,3,
 0x05b100,6,
 0x05b120,6,
 0x05b140,3,
+0x05b160,4,
 0x05b1f0,3,
-0x05b200,5,
-0x05b218,2,
-0x05b400,6,
-0x05b420,6,
-0x05b440,3,
-0x05b4f0,3,
-0x05b500,6,
-0x05b520,6,
-0x05b540,3,
-0x05b5f0,3,
-0x05b600,5,
-0x05b618,2,
+0x05b200,8,
+0x05b240,13,
+0x05b3f8,2,
 0x05b804,1,
-0x05b820,11,
-0x05b880,1,
+0x05b820,10,
+0x05b880,2,
 0x05b904,1,
 0x05b90c,1,
 0x05b914,1,
 0x05b91c,1,
 0x05b924,1,
 0x05b92c,1,
-0x05ba00,12,
-0x05bc00,15,
-0x05bf00,25,
+0x05ba20,9,
+0x05bb00,6,
+0x05bb20,6,
+0x05bb40,6,
+0x05bb60,6,
+0x05bb80,6,
+0x05bba0,3,
+0x05bc00,16,
+0x05bd00,30,
+0x05bd80,1,
+0x05bd88,5,
+0x05bda0,1,
+0x05bda8,2,
+0x05bdc0,10,
+0x05be00,8,
+0x05be40,1,
+0x05be48,2,
+0x05bf00,24,
 0x05bf84,5,
-0x05bfa0,4,
-0x05c000,4,
+0x05bfa0,5,
+0x05bff8,7,
 0x05c018,3,
 0x05c028,3,
-0x05c038,22,
-0x05c094,40,
+0x05c038,63,
 0x05c140,11,
 0x05c184,10,
 0x05c1c0,22,
-0x05c220,6,
-0x05c240,5,
-0x05c260,5,
-0x05c2f8,46,
+0x05c220,1,
+0x05c228,2,
+0x05c240,1,
+0x05c248,7,
+0x05c268,7,
+0x05c288,3,
+0x05c298,2,
+0x05c2f4,46,
 0x05c3b4,1,
 0x05c3bc,1,
 0x05c3c4,1,
@@ -2884,36 +2982,19 @@
 0x05c3d4,1,
 0x05c3dc,1,
 0x05c3e4,1,
-0x05c3ec,1,
-0x05c400,9,
-0x05c440,9,
-0x05c480,9,
-0x05c4c0,9,
-0x05c500,9,
-0x05c540,9,
-0x05c580,9,
-0x05c5c0,9,
-0x05c7a0,3,
-0x05c7b0,3,
-0x05c7c0,12,
-0x05d000,1,
+0x05c3ec,15,
+0x05c7a0,4,
+0x05c7b8,14,
+0x05d004,1,
 0x05d00c,3,
 0x05d020,5,
-0x05d038,46,
+0x05d038,3,
+0x05d048,43,
 0x05d118,24,
 0x05d200,32,
-0x05d2e0,2,
-0x05d2f0,2,
-0x05d304,1,
-0x05d314,3,
-0x05d324,1,
-0x05d330,4,
-0x05d344,1,
-0x05d354,3,
-0x05d364,1,
-0x05d374,3,
-0x05d394,1,
-0x05d3a0,2,
+0x05d284,3,
+0x05d294,3,
+0x05d2a4,11,
 0x05d400,6,
 0x05d420,6,
 0x05d440,6,
@@ -2930,27 +3011,42 @@
 0x05d5a0,6,
 0x05d5c0,6,
 0x05d5e0,6,
-0x05d600,3,
-0x05d800,2,
+0x05d600,6,
+0x05d620,3,
+0x05d800,4,
 0x05d840,15,
-0x05d8a0,18,
-0x05d8ec,2,
+0x05d8a0,13,
+0x05d8e0,2,
+0x05d8ec,4,
 0x05d9c0,1,
 0x05d9cc,10,
-0x05dc00,25,
-0x05dc80,13,
-0x05dcc0,15,
-0x05dd00,11,
+0x05dab8,10,
+0x05db04,1,
+0x05db14,3,
+0x05db24,1,
+0x05db34,3,
+0x05db44,1,
+0x05db54,3,
+0x05db64,1,
+0x05db74,3,
+0x05db94,1,
+0x05dba0,2,
+0x05dc00,26,
+0x05dc80,14,
+0x05dcc0,27,
 0x05dd40,11,
 0x05dd80,5,
 0x05dda0,7,
 0x05ddc0,7,
 0x05dde0,6,
-0x05de00,11,
-0x05de40,19,
-0x05de90,6,
+0x05de00,14,
+0x05de40,13,
+0x05de80,7,
+0x05dea0,6,
 0x05e400,6,
-0x05e420,3,
+0x05e420,6,
+0x05e440,3,
+0x05e480,4,
 0x060000,32,
 0x060200,64,
 0x060400,96,
@@ -3578,8 +3674,7 @@
 0x068814,1,
 0x06881c,26,
 0x068890,2,
-0x0688b0,5,
-0x0688e0,3,
+0x0688b0,8,
 0x068900,1,
 0x068a00,13,
 0x068a40,2,
@@ -3587,8 +3682,8 @@
 0x068a60,12,
 0x069000,19,
 0x069050,8,
-0x0690a0,5,
-0x0690d0,3,
+0x0690a0,11,
+0x0690d0,7,
 0x069300,13,
 0x069340,7,
 0x069360,8,
@@ -3630,7 +3725,7 @@
 0x070b84,1,
 0x070c00,1,
 0x070c10,3,
-0x070c40,2,
+0x070c3c,3,
 0x070c50,8,
 0x071000,7,
 0x072000,7,
@@ -3644,14 +3739,16 @@
 0x073240,7,
 0x073260,40,
 0x073338,15,
-0x074000,8,
+0x074000,4,
 0x074044,3,
 0x074060,4,
 0x074080,9,
+0x074100,48,
 0x075000,1024,
 0x07e080,16,
 0x07fa00,6,
 0x07fa80,3,
+0x07fa90,2,
 0x07fb00,7,
 0x07fb20,17,
 0x07fb70,1,
@@ -3660,7 +3757,7 @@
 0x07fc28,3,
 0x07fc50,3,
 0x07fc78,3,
-0x07fca0,44,
+0x07fca0,45,
 0x07fdac,1,
 0x07fdd8,4,
 0x07fe00,6,
@@ -3789,7 +3886,7 @@
 0x0a2028,2,
 0x0a2040,8,
 0x0a2064,5,
-0x0a20d0,8,
+0x0a20a0,14,
 0x0a20f4,16,
 0x0a2138,5,
 0x0a2150,3,
@@ -3842,6 +3939,7 @@
 0x0c1240,3,
 0x0c1400,6,
 0x0c1420,3,
+0x0c1430,4,
 0x0c1500,13,
 0x0c1540,3,
 0x0c2000,14,
@@ -3891,8 +3989,7 @@
 0x0c2c50,10,
 0x0c2c84,1,
 0x0c2c94,8,
-0x0c2cb8,9,
-0x0c2ce0,4,
+0x0c2cb8,14,
 0x0c3000,29,
 0x0c3078,4,
 0x0c3090,2,
@@ -3921,8 +4018,7 @@
 0x0c36c0,11,
 0x0c3700,14,
 0x0c3740,14,
-0x0c3780,62,
-0x0c387c,6,
+0x0c3780,69,
 0x0c3c00,6,
 0x0c3c40,14,
 0x0c3c80,9,
@@ -3957,7 +4053,8 @@
 0x0ca0a4,2,
 0x0ca0b0,2,
 0x0ca0c0,14,
-0x0ca100,16,
+0x0ca100,14,
+0x0ca140,4,
 0x0ca160,1,
 0x0ca184,1,
 0x0ca194,2,
@@ -4047,9 +4144,9 @@
 0x0d0c80,13,
 0x0d0cc0,12,
 0x0d0d00,14,
-0x0d0d40,4,
+0x0d0d40,6,
 0x0d0d80,14,
-0x0d0dc0,4,
+0x0d0dc0,6,
 0x0d0e00,11,
 0x0d0e40,6,
 0x0d0e60,6,
@@ -4059,8 +4156,8 @@
 0x0d1014,4,
 0x0d1040,3,
 0x0d1050,3,
-0x0d1080,42,
-0x0d1140,10,
+0x0d1080,43,
+0x0d1140,11,
 0x0d1180,1,
 0x0d119c,15,
 0x0d1200,12,
@@ -4107,9 +4204,11 @@
 0x0d1d5c,1,
 0x0d1d80,1,
 0x0d1da0,1,
-0x0d1da8,7,
+0x0d1da8,4,
+0x0d1dc0,1,
 0x0d1de0,1,
-0x0d1de8,19,
+0x0d1de8,4,
+0x0d1e00,13,
 0x0d1e40,6,
 0x0d1e60,6,
 0x0d1e80,6,
@@ -4120,129 +4219,6 @@
 0x0d1f34,2,
 0x0d1f40,3,
 0x0d1f50,8,
-0x0d2000,4,
-0x0d2014,1,
-0x0d2020,3,
-0x0d2030,3,
-0x0d2040,8,
-0x0d207c,2,
-0x0d20a0,6,
-0x0d20c0,6,
-0x0d20e0,6,
-0x0d2100,4,
-0x0d2114,1,
-0x0d2120,3,
-0x0d2130,3,
-0x0d2140,8,
-0x0d217c,2,
-0x0d21a0,6,
-0x0d21c0,6,
-0x0d21e0,6,
-0x0d2200,4,
-0x0d2214,1,
-0x0d2220,3,
-0x0d2230,3,
-0x0d2240,8,
-0x0d227c,2,
-0x0d22a0,6,
-0x0d22c0,6,
-0x0d22e0,6,
-0x0d2300,4,
-0x0d2314,1,
-0x0d2320,3,
-0x0d2330,3,
-0x0d2340,8,
-0x0d237c,2,
-0x0d23a0,6,
-0x0d23c0,6,
-0x0d23e0,6,
-0x0d2400,6,
-0x0d2440,6,
-0x0d2480,3,
-0x0d24c0,3,
-0x0d2500,2,
-0x0d250c,4,
-0x0d2520,2,
-0x0d252c,4,
-0x0d2540,2,
-0x0d2c00,13,
-0x0d2c40,12,
-0x0d2c80,13,
-0x0d2cc0,12,
-0x0d2d00,14,
-0x0d2d40,4,
-0x0d2d80,14,
-0x0d2dc0,4,
-0x0d2e00,11,
-0x0d2e40,6,
-0x0d2e60,6,
-0x0d2e80,6,
-0x0d2ea0,6,
-0x0d3000,2,
-0x0d3014,4,
-0x0d3040,3,
-0x0d3050,3,
-0x0d3080,42,
-0x0d3140,10,
-0x0d3180,1,
-0x0d319c,15,
-0x0d3200,12,
-0x0d3300,1,
-0x0d3308,6,
-0x0d3324,10,
-0x0d3380,1,
-0x0d3388,6,
-0x0d33a4,10,
-0x0d3400,7,
-0x0d3420,7,
-0x0d3500,12,
-0x0d3540,12,
-0x0d3580,4,
-0x0d3800,14,
-0x0d383c,9,
-0x0d3864,6,
-0x0d3880,2,
-0x0d3890,4,
-0x0d3900,14,
-0x0d393c,9,
-0x0d3964,6,
-0x0d3980,2,
-0x0d3990,4,
-0x0d3a00,16,
-0x0d3a50,4,
-0x0d3a80,16,
-0x0d3ad0,4,
-0x0d3b00,6,
-0x0d3b20,6,
-0x0d3b40,3,
-0x0d3b80,6,
-0x0d3ba0,6,
-0x0d3bc0,3,
-0x0d3c00,6,
-0x0d3c20,6,
-0x0d3c40,3,
-0x0d3c80,6,
-0x0d3ca0,6,
-0x0d3cc0,3,
-0x0d3d10,2,
-0x0d3d1c,1,
-0x0d3d50,2,
-0x0d3d5c,1,
-0x0d3d80,1,
-0x0d3da0,1,
-0x0d3da8,7,
-0x0d3de0,1,
-0x0d3de8,19,
-0x0d3e40,6,
-0x0d3e60,6,
-0x0d3e80,6,
-0x0d3ea0,6,
-0x0d3ec0,7,
-0x0d3ee0,7,
-0x0d3f00,12,
-0x0d3f34,2,
-0x0d3f40,3,
-0x0d3f50,8,
 0x0d7400,1,
 0x0d7408,3,
 0x0d7438,1,
@@ -4266,7 +4242,7 @@
 0x0d8428,1,
 0x0d8450,1,
 0x0d8478,1,
-0x0d84a0,7,
+0x0d84a0,6,
 0x0d85ac,1,
 0x0d85d8,4,
 0x0d8600,6,
@@ -4294,9 +4270,9 @@
 0x0d90b0,22,
 0x0d9110,2,
 0x0d9120,22,
-0x0d9180,1,
+0x0d9180,2,
 0x0d91a0,6,
-0x0d91c0,8,
+0x0d91c0,9,
 0x0d9200,42,
 0x0d92c0,1,
 0x0d92c8,13,
@@ -4314,7 +4290,7 @@
 0x0d9550,7,
 0x0d9570,18,
 0x0d95bc,5,
-0x0d9800,448,
+0x0d9800,480,
 0x0da020,4,
 0x0da040,11,
 0x0da074,2,
@@ -4322,9 +4298,9 @@
 0x0da0b0,22,
 0x0da110,2,
 0x0da120,22,
-0x0da180,1,
+0x0da180,2,
 0x0da1a0,6,
-0x0da1c0,8,
+0x0da1c0,9,
 0x0da200,42,
 0x0da2c0,1,
 0x0da2c8,13,
@@ -4342,7 +4318,7 @@
 0x0da550,7,
 0x0da570,18,
 0x0da5bc,5,
-0x0da800,448,
+0x0da800,480,
 0x0db020,4,
 0x0db040,11,
 0x0db074,2,
@@ -4350,9 +4326,9 @@
 0x0db0b0,22,
 0x0db110,2,
 0x0db120,22,
-0x0db180,1,
+0x0db180,2,
 0x0db1a0,6,
-0x0db1c0,8,
+0x0db1c0,9,
 0x0db200,42,
 0x0db2c0,1,
 0x0db2c8,13,
@@ -4370,7 +4346,7 @@
 0x0db550,7,
 0x0db570,18,
 0x0db5bc,5,
-0x0db800,448,
+0x0db800,480,
 0x0dc020,4,
 0x0dc040,11,
 0x0dc074,2,
@@ -4378,9 +4354,9 @@
 0x0dc0b0,22,
 0x0dc110,2,
 0x0dc120,22,
-0x0dc180,1,
+0x0dc180,2,
 0x0dc1a0,6,
-0x0dc1c0,8,
+0x0dc1c0,9,
 0x0dc200,42,
 0x0dc2c0,1,
 0x0dc2c8,13,
@@ -4398,7 +4374,7 @@
 0x0dc550,7,
 0x0dc570,18,
 0x0dc5bc,5,
-0x0dc800,448,
+0x0dc800,480,
 0x0df800,5,
 0x0df818,1,
 0x0df854,6,
@@ -4505,7 +4481,7 @@
 0x0e9e60,3,
 0x0e9e80,6,
 0x0e9ea0,3,
-0x0e9f80,13,
+0x0e9f70,17,
 0x0e9fc0,2,
 0x0ea000,1,
 0x0ea028,1,
@@ -4535,10 +4511,10 @@
 0x0f0130,4,
 0x0f0180,3,
 0x0f0190,2,
-0x0f01a8,1,
+0x0f01a8,2,
 0x0f01c0,2,
 0x0f01d0,10,
-0x0f0200,61,
+0x0f0200,62,
 0x0f0404,9,
 0x0f0440,12,
 0x0f0480,5,
@@ -4558,13 +4534,15 @@
 0x0f099c,5,
 0x0f09bc,5,
 0x0f09dc,1,
-0x0f0a90,2,
+0x0f0a90,3,
 0x0f0c00,128,
 0x0f0e04,1,
 0x0f0e14,9,
 0x0f0e3c,1,
-0x0f1000,3,
-0x0f1010,12,
+0x0f1000,6,
+0x0f1028,4,
+0x0f1040,2,
+0x0f104c,2,
 0x0f1080,10,
 0x0f10c0,1,
 0x0f10e0,2,
@@ -4589,10 +4567,7 @@
 0x0f1600,6,
 0x0f1620,3,
 0x0f1800,3,
-0x0f1840,4,
-0x0f1854,3,
-0x0f1864,3,
-0x0f1874,3,
+0x0f1880,22,
 0x0f2000,2,
 0x0f200c,3,
 0x0f2020,10,
@@ -4603,93 +4578,75 @@
 0x0f20e0,6,
 0x0f2100,2,
 0x0f210c,3,
-0x0f2120,2,
-0x0f2140,2,
+0x0f2120,10,
 0x0f2160,6,
 0x0f2180,2,
 0x0f218c,3,
-0x0f21a0,2,
-0x0f21c0,2,
+0x0f21a0,10,
 0x0f21e0,6,
 0x0f2200,2,
 0x0f220c,3,
-0x0f2220,2,
-0x0f2240,2,
+0x0f2220,10,
 0x0f2260,6,
 0x0f2280,2,
 0x0f228c,3,
-0x0f22a0,2,
-0x0f22c0,2,
+0x0f22a0,10,
 0x0f22e0,6,
 0x0f2300,2,
 0x0f230c,3,
-0x0f2320,2,
-0x0f2340,2,
+0x0f2320,10,
 0x0f2360,6,
 0x0f2380,2,
 0x0f238c,3,
-0x0f23a0,2,
-0x0f23c0,2,
+0x0f23a0,10,
 0x0f23e0,6,
 0x0f2400,2,
 0x0f240c,3,
-0x0f2420,2,
-0x0f2440,2,
+0x0f2420,10,
 0x0f2460,6,
 0x0f2480,2,
 0x0f248c,3,
-0x0f24a0,2,
-0x0f24c0,2,
+0x0f24a0,10,
 0x0f24e0,6,
 0x0f2500,2,
 0x0f250c,3,
-0x0f2520,2,
-0x0f2540,2,
+0x0f2520,10,
 0x0f2560,6,
 0x0f2580,2,
 0x0f258c,3,
-0x0f25a0,2,
-0x0f25c0,2,
+0x0f25a0,10,
 0x0f25e0,6,
 0x0f2600,2,
 0x0f260c,3,
-0x0f2620,2,
-0x0f2640,2,
+0x0f2620,10,
 0x0f2660,6,
 0x0f2680,2,
 0x0f268c,3,
-0x0f26a0,2,
-0x0f26c0,2,
+0x0f26a0,10,
 0x0f26e0,6,
 0x0f2700,2,
 0x0f270c,3,
-0x0f2720,2,
-0x0f2740,2,
+0x0f2720,10,
 0x0f2760,6,
 0x0f2780,2,
 0x0f278c,3,
-0x0f27a0,2,
-0x0f27c0,2,
+0x0f27a0,10,
 0x0f27e0,6,
 0x0f2800,2,
 0x0f280c,3,
-0x0f2820,2,
-0x0f2840,2,
+0x0f2820,10,
 0x0f2860,6,
 0x0f2880,2,
 0x0f288c,3,
-0x0f28a0,2,
-0x0f28c0,2,
+0x0f28a0,10,
 0x0f28e0,6,
 0x0f2900,2,
 0x0f290c,3,
-0x0f2920,2,
-0x0f2940,2,
+0x0f2920,10,
 0x0f2960,6,
 0x0f2980,2,
 0x0f298c,3,
-0x0f29a0,2,
-0x0f29c0,2,
+0x0f29a0,10,
 0x0f29e0,6,
 0x0f4000,7,
 0x0f4020,4,
@@ -4749,112 +4706,112 @@
 0x0f8100,6,
 0x0f8120,6,
 0x0f8140,3,
-0x0f8180,10,
+0x0f8180,14,
 0x0f81c0,3,
 0x0f81d0,2,
 0x0f8400,9,
 0x0f8500,6,
 0x0f8520,6,
 0x0f8540,3,
-0x0f8580,10,
+0x0f8580,14,
 0x0f85c0,3,
 0x0f85d0,2,
 0x0f8800,9,
 0x0f8900,6,
 0x0f8920,6,
 0x0f8940,3,
-0x0f8980,10,
+0x0f8980,14,
 0x0f89c0,3,
 0x0f89d0,2,
 0x0f8c00,9,
 0x0f8d00,6,
 0x0f8d20,6,
 0x0f8d40,3,
-0x0f8d80,10,
+0x0f8d80,14,
 0x0f8dc0,3,
 0x0f8dd0,2,
 0x0f9000,9,
 0x0f9100,6,
 0x0f9120,6,
 0x0f9140,3,
-0x0f9180,10,
+0x0f9180,14,
 0x0f91c0,3,
 0x0f91d0,2,
 0x0f9400,9,
 0x0f9500,6,
 0x0f9520,6,
 0x0f9540,3,
-0x0f9580,10,
+0x0f9580,14,
 0x0f95c0,3,
 0x0f95d0,2,
 0x0f9800,9,
 0x0f9900,6,
 0x0f9920,6,
 0x0f9940,3,
-0x0f9980,10,
+0x0f9980,14,
 0x0f99c0,3,
 0x0f99d0,2,
 0x0f9c00,9,
 0x0f9d00,6,
 0x0f9d20,6,
 0x0f9d40,3,
-0x0f9d80,10,
+0x0f9d80,14,
 0x0f9dc0,3,
 0x0f9dd0,2,
 0x0fa000,9,
 0x0fa100,6,
 0x0fa120,6,
 0x0fa140,3,
-0x0fa180,10,
+0x0fa180,14,
 0x0fa1c0,3,
 0x0fa1d0,2,
 0x0fa400,9,
 0x0fa500,6,
 0x0fa520,6,
 0x0fa540,3,
-0x0fa580,10,
+0x0fa580,14,
 0x0fa5c0,3,
 0x0fa5d0,2,
 0x0fa800,9,
 0x0fa900,6,
 0x0fa920,6,
 0x0fa940,3,
-0x0fa980,10,
+0x0fa980,14,
 0x0fa9c0,3,
 0x0fa9d0,2,
 0x0fac00,9,
 0x0fad00,6,
 0x0fad20,6,
 0x0fad40,3,
-0x0fad80,10,
+0x0fad80,14,
 0x0fadc0,3,
 0x0fadd0,2,
 0x0fb000,9,
 0x0fb100,6,
 0x0fb120,6,
 0x0fb140,3,
-0x0fb180,10,
+0x0fb180,14,
 0x0fb1c0,3,
 0x0fb1d0,2,
 0x0fb400,9,
 0x0fb500,6,
 0x0fb520,6,
 0x0fb540,3,
-0x0fb580,10,
+0x0fb580,14,
 0x0fb5c0,3,
 0x0fb5d0,2,
 0x0fb800,9,
 0x0fb900,6,
 0x0fb920,6,
 0x0fb940,3,
-0x0fb980,10,
+0x0fb980,14,
 0x0fb9c0,3,
 0x0fb9d0,2,
 0x0fbc00,9,
 0x0fbd00,6,
 0x0fbd20,6,
 0x0fbd40,3,
-0x0fbd80,10,
+0x0fbd80,14,
 0x0fbdc0,3,
 0x0fbdd0,2,
 0x0fc000,9,
@@ -4867,7 +4824,7 @@
 0x0fc140,3,
 0x0fc180,10,
 0x0fc1c0,3,
-0x0fc1d0,8,
+0x0fc1d0,10,
 0x0fc400,9,
 0x0fc500,6,
 0x0fc520,6,
@@ -4890,21 +4847,21 @@
 0x0fccf4,9,
 0x0fcd20,6,
 0x0fcd40,3,
-0x0fcd80,10,
+0x0fcd80,12,
 0x0fcdc0,3,
 0x0fcdd0,2,
 0x0fd000,9,
 0x0fd100,6,
 0x0fd120,6,
 0x0fd140,3,
-0x0fd180,6,
+0x0fd180,8,
 0x0fd1c0,3,
 0x0fd1d0,2,
 0x0fd400,9,
 0x0fd500,6,
 0x0fd520,6,
 0x0fd540,3,
-0x0fd580,6,
+0x0fd580,8,
 0x0fd5c0,3,
 0x0fd5d0,2,
 0x0fd800,9,
@@ -4915,7 +4872,7 @@
 0x0fd8f4,9,
 0x0fd920,6,
 0x0fd940,3,
-0x0fd980,10,
+0x0fd980,14,
 0x0fd9c0,3,
 0x0fd9d0,2,
 0x0fdc00,9,
@@ -4926,7 +4883,7 @@
 0x0fdcf4,9,
 0x0fdd20,6,
 0x0fdd40,3,
-0x0fdd80,12,
+0x0fdd80,14,
 0x0fddc0,3,
 0x0fddd0,2,
 0x100000,1,
@@ -4936,40 +4893,47 @@
 0x100108,1,
 0x100110,14,
 0x100200,32,
-0x1002f8,34,
-0x1003f8,3,
+0x1002e0,2,
+0x100300,32,
+0x1003e0,2,
+0x100400,1,
 0x100408,1,
 0x100410,14,
 0x100500,1,
 0x100508,1,
 0x100510,14,
 0x100600,32,
-0x1006f8,34,
-0x1007f8,8,
+0x1006e0,2,
+0x100700,32,
+0x1007e0,2,
+0x100800,6,
 0x10081c,6,
-0x100a00,11,
-0x100a40,11,
-0x100a80,11,
-0x100ac0,11,
-0x100b00,2,
+0x100a00,3,
+0x100a10,3,
+0x100a40,3,
+0x100a50,3,
+0x100a80,3,
+0x100a90,3,
+0x100ac0,3,
+0x100ad0,3,
+0x100b00,3,
 0x100c04,3,
-0x100c14,12,
+0x100c14,16,
 0x100c84,1,
 0x100c8c,1,
-0x100ca0,2,
-0x100cb4,3,
-0x100e00,30,
+0x100e00,31,
 0x100e80,1,
 0x100e88,3,
-0x100f00,30,
+0x100f00,31,
 0x100f80,1,
 0x100f88,3,
 0x101000,22,
-0x101100,25,
+0x101100,26,
 0x101200,10,
-0x101240,2,
-0x101600,6,
-0x1016fc,55,
+0x101244,5,
+0x1015f8,3,
+0x101608,4,
+0x1016f4,45,
 0x101800,31,
 0x101900,31,
 0x101a00,6,
@@ -4989,28 +4953,33 @@
 0x101d74,1,
 0x101d80,20,
 0x101df4,1,
-0x101e00,16,
+0x101e00,17,
 0x102000,3,
 0x102010,35,
-0x1020a0,2,
+0x1020a0,5,
+0x1020b8,1,
 0x1020c0,19,
 0x102110,35,
-0x1021a0,2,
+0x1021a0,5,
+0x1021b8,1,
 0x1021c0,16,
 0x102204,1,
 0x102270,36,
-0x102304,1,
-0x102340,48,
-0x102404,37,
+0x102400,4,
+0x102418,1,
+0x102420,9,
+0x102464,1,
+0x102474,9,
 0x1024a0,6,
-0x1024c0,3,
-0x102500,4,
-0x102518,1,
-0x102520,9,
+0x1024c0,6,
+0x1024e0,3,
+0x102504,1,
+0x10250c,29,
+0x102600,3,
 0x102800,3,
-0x102814,31,
-0x1028a0,10,
-0x1028d0,1,
+0x102814,50,
+0x1028e0,3,
+0x1028f0,1,
 0x102900,6,
 0x102920,6,
 0x102940,6,
@@ -5018,66 +4987,91 @@
 0x102980,6,
 0x1029a0,6,
 0x1029c0,3,
-0x102a00,7,
-0x102a20,3,
-0x102a30,1,
-0x102c00,12,
-0x102c34,22,
-0x102d00,6,
-0x102d20,6,
-0x102d40,6,
-0x102d60,6,
-0x102d80,6,
-0x102da0,3,
-0x102e00,7,
-0x102e20,3,
-0x102e30,1,
+0x102a00,12,
+0x102a34,22,
+0x102ac0,7,
+0x102ae0,3,
+0x102af0,1,
+0x102b00,6,
+0x102b20,6,
+0x102b40,6,
+0x102b60,6,
+0x102b80,6,
+0x102ba0,3,
+0x102c00,13,
+0x102c40,11,
+0x102c80,1,
 0x103000,6,
 0x103020,6,
 0x103040,3,
+0x103060,4,
 0x1030f0,3,
 0x103100,6,
 0x103120,6,
 0x103140,3,
+0x103160,4,
 0x1031f0,3,
-0x103200,5,
-0x103218,2,
-0x103400,6,
+0x103200,8,
+0x103240,13,
+0x1033f8,8,
 0x103420,6,
 0x103440,3,
+0x103460,4,
 0x1034f0,3,
 0x103500,6,
 0x103520,6,
 0x103540,3,
+0x103560,4,
 0x1035f0,3,
-0x103600,5,
-0x103618,2,
+0x103600,8,
+0x103640,13,
+0x1037f8,2,
 0x103804,1,
-0x103820,11,
-0x103880,1,
+0x103820,10,
+0x103880,2,
 0x103904,1,
 0x10390c,1,
 0x103914,1,
 0x10391c,1,
 0x103924,1,
 0x10392c,1,
-0x103a00,12,
-0x103c00,15,
+0x103a20,9,
+0x103b00,6,
+0x103b20,6,
+0x103b40,6,
+0x103b60,6,
+0x103b80,6,
+0x103ba0,3,
+0x103c00,16,
+0x103d00,30,
+0x103d80,1,
+0x103d88,5,
+0x103da0,1,
+0x103da8,2,
+0x103dc0,10,
+0x103e00,9,
+0x103e28,2,
+0x103e40,9,
+0x103e68,2,
 0x103f00,25,
+0x103f70,4,
 0x103f84,5,
-0x103fa0,4,
-0x104000,4,
+0x103fa0,6,
+0x103ff8,7,
 0x104018,3,
 0x104028,3,
-0x104038,22,
-0x104094,40,
+0x104038,63,
 0x104140,11,
 0x104184,10,
 0x1041c0,22,
-0x104220,6,
-0x104240,5,
-0x104260,5,
-0x1042f8,46,
+0x104220,1,
+0x104228,2,
+0x104240,1,
+0x104248,7,
+0x104268,7,
+0x104288,3,
+0x104298,2,
+0x1042f4,46,
 0x1043b4,1,
 0x1043bc,1,
 0x1043c4,1,
@@ -5085,24 +5079,25 @@
 0x1043d4,1,
 0x1043dc,1,
 0x1043e4,1,
-0x1043ec,1,
-0x104400,9,
-0x104440,9,
-0x1047a0,3,
-0x1047b0,3,
-0x1047c0,12,
-0x104800,4,
+0x1043ec,15,
+0x104440,10,
+0x1047a0,4,
+0x1047b8,14,
+0x104800,5,
 0x104818,3,
 0x104828,3,
-0x104838,22,
-0x104894,40,
+0x104838,63,
 0x104940,11,
 0x104984,10,
 0x1049c0,22,
-0x104a20,6,
-0x104a40,5,
-0x104a60,5,
-0x104af8,46,
+0x104a20,1,
+0x104a28,2,
+0x104a40,1,
+0x104a48,7,
+0x104a68,7,
+0x104a88,3,
+0x104a98,2,
+0x104af4,46,
 0x104bb4,1,
 0x104bbc,1,
 0x104bc4,1,
@@ -5110,30 +5105,20 @@
 0x104bd4,1,
 0x104bdc,1,
 0x104be4,1,
-0x104bec,1,
-0x104c00,9,
-0x104c40,9,
-0x104fa0,3,
-0x104fb0,3,
-0x104fc0,12,
-0x105000,1,
+0x104bec,15,
+0x104c40,10,
+0x104fa0,4,
+0x104fb8,14,
+0x105004,1,
 0x10500c,3,
 0x105020,5,
-0x105038,46,
+0x105038,3,
+0x105048,43,
 0x105118,24,
 0x105200,32,
-0x1052e0,2,
-0x1052f0,4,
-0x105304,1,
-0x105314,3,
-0x105324,1,
-0x105330,4,
-0x105344,1,
-0x105354,3,
-0x105364,1,
-0x105374,3,
-0x105394,1,
-0x1053a0,2,
+0x105284,3,
+0x105294,3,
+0x1052a4,11,
 0x105400,6,
 0x105420,6,
 0x105440,6,
@@ -5150,29 +5135,42 @@
 0x1055a0,6,
 0x1055c0,6,
 0x1055e0,6,
-0x105600,3,
-0x105800,2,
+0x105600,6,
+0x105620,3,
+0x105800,4,
 0x105840,15,
 0x105880,7,
-0x1058a0,21,
-0x105c00,25,
-0x105c80,13,
-0x105cc0,15,
-0x105d00,11,
+0x1058a0,13,
+0x1058e0,7,
+0x105ab8,14,
+0x105b04,1,
+0x105b14,3,
+0x105b24,1,
+0x105b34,3,
+0x105b44,1,
+0x105b54,3,
+0x105b64,1,
+0x105b74,3,
+0x105b94,1,
+0x105ba0,2,
+0x105c00,26,
+0x105c80,14,
+0x105cc0,27,
 0x105d40,11,
 0x105d80,5,
 0x105da0,7,
 0x105dc0,7,
 0x105de0,6,
-0x105e00,11,
-0x105e40,19,
-0x105e90,6,
+0x105e00,14,
+0x105e40,13,
+0x105e80,7,
+0x105ea0,6,
 0x106000,2,
 0x106028,2,
 0x106050,2,
 0x106078,2,
-0x1060a0,7,
-0x1060c0,15,
+0x1060a0,8,
+0x1060c4,14,
 0x1061ac,1,
 0x1061d8,4,
 0x106200,6,
@@ -5181,7 +5179,9 @@
 0x106260,6,
 0x106280,3,
 0x106400,6,
-0x106420,3,
+0x106420,6,
+0x106440,3,
+0x106480,4,
 0x108000,1,
 0x108008,1,
 0x108010,14,
@@ -5189,40 +5189,47 @@
 0x108108,1,
 0x108110,14,
 0x108200,32,
-0x1082f8,34,
-0x1083f8,3,
+0x1082e0,2,
+0x108300,32,
+0x1083e0,2,
+0x108400,1,
 0x108408,1,
 0x108410,14,
 0x108500,1,
 0x108508,1,
 0x108510,14,
 0x108600,32,
-0x1086f8,34,
-0x1087f8,8,
+0x1086e0,2,
+0x108700,32,
+0x1087e0,2,
+0x108800,6,
 0x10881c,6,
-0x108a00,11,
-0x108a40,11,
-0x108a80,11,
-0x108ac0,11,
-0x108b00,2,
+0x108a00,3,
+0x108a10,3,
+0x108a40,3,
+0x108a50,3,
+0x108a80,3,
+0x108a90,3,
+0x108ac0,3,
+0x108ad0,3,
+0x108b00,3,
 0x108c04,3,
-0x108c14,12,
+0x108c14,16,
 0x108c84,1,
 0x108c8c,1,
-0x108ca0,2,
-0x108cb4,3,
-0x108e00,30,
+0x108e00,31,
 0x108e80,1,
 0x108e88,3,
-0x108f00,30,
+0x108f00,31,
 0x108f80,1,
 0x108f88,3,
 0x109000,22,
-0x109100,25,
+0x109100,26,
 0x109200,10,
-0x109240,2,
-0x109600,6,
-0x1096fc,55,
+0x109244,5,
+0x1095f8,3,
+0x109608,4,
+0x1096f4,45,
 0x109800,31,
 0x109900,31,
 0x109a00,6,
@@ -5242,28 +5249,33 @@
 0x109d74,1,
 0x109d80,20,
 0x109df4,1,
-0x109e00,16,
+0x109e00,17,
 0x10a000,3,
 0x10a010,35,
-0x10a0a0,2,
+0x10a0a0,5,
+0x10a0b8,1,
 0x10a0c0,19,
 0x10a110,35,
-0x10a1a0,2,
+0x10a1a0,5,
+0x10a1b8,1,
 0x10a1c0,16,
 0x10a204,1,
 0x10a270,36,
-0x10a304,1,
-0x10a340,48,
-0x10a404,37,
+0x10a400,4,
+0x10a418,1,
+0x10a420,9,
+0x10a464,1,
+0x10a474,9,
 0x10a4a0,6,
-0x10a4c0,3,
-0x10a500,4,
-0x10a518,1,
-0x10a520,9,
+0x10a4c0,6,
+0x10a4e0,3,
+0x10a504,1,
+0x10a50c,29,
+0x10a600,3,
 0x10a800,3,
-0x10a814,31,
-0x10a8a0,10,
-0x10a8d0,1,
+0x10a814,50,
+0x10a8e0,3,
+0x10a8f0,1,
 0x10a900,6,
 0x10a920,6,
 0x10a940,6,
@@ -5271,66 +5283,91 @@
 0x10a980,6,
 0x10a9a0,6,
 0x10a9c0,3,
-0x10aa00,7,
-0x10aa20,3,
-0x10aa30,1,
-0x10ac00,12,
-0x10ac34,22,
-0x10ad00,6,
-0x10ad20,6,
-0x10ad40,6,
-0x10ad60,6,
-0x10ad80,6,
-0x10ada0,3,
-0x10ae00,7,
-0x10ae20,3,
-0x10ae30,1,
+0x10aa00,12,
+0x10aa34,22,
+0x10aac0,7,
+0x10aae0,3,
+0x10aaf0,1,
+0x10ab00,6,
+0x10ab20,6,
+0x10ab40,6,
+0x10ab60,6,
+0x10ab80,6,
+0x10aba0,3,
+0x10ac00,13,
+0x10ac40,11,
+0x10ac80,1,
 0x10b000,6,
 0x10b020,6,
 0x10b040,3,
+0x10b060,4,
 0x10b0f0,3,
 0x10b100,6,
 0x10b120,6,
 0x10b140,3,
+0x10b160,4,
 0x10b1f0,3,
-0x10b200,5,
-0x10b218,2,
-0x10b400,6,
+0x10b200,8,
+0x10b240,13,
+0x10b3f8,8,
 0x10b420,6,
 0x10b440,3,
+0x10b460,4,
 0x10b4f0,3,
 0x10b500,6,
 0x10b520,6,
 0x10b540,3,
+0x10b560,4,
 0x10b5f0,3,
-0x10b600,5,
-0x10b618,2,
+0x10b600,8,
+0x10b640,13,
+0x10b7f8,2,
 0x10b804,1,
-0x10b820,11,
-0x10b880,1,
+0x10b820,10,
+0x10b880,2,
 0x10b904,1,
 0x10b90c,1,
 0x10b914,1,
 0x10b91c,1,
 0x10b924,1,
 0x10b92c,1,
-0x10ba00,12,
-0x10bc00,15,
+0x10ba20,9,
+0x10bb00,6,
+0x10bb20,6,
+0x10bb40,6,
+0x10bb60,6,
+0x10bb80,6,
+0x10bba0,3,
+0x10bc00,16,
+0x10bd00,30,
+0x10bd80,1,
+0x10bd88,5,
+0x10bda0,1,
+0x10bda8,2,
+0x10bdc0,10,
+0x10be00,9,
+0x10be28,2,
+0x10be40,9,
+0x10be68,2,
 0x10bf00,25,
+0x10bf70,4,
 0x10bf84,5,
-0x10bfa0,4,
-0x10c000,4,
+0x10bfa0,6,
+0x10bff8,7,
 0x10c018,3,
 0x10c028,3,
-0x10c038,22,
-0x10c094,40,
+0x10c038,63,
 0x10c140,11,
 0x10c184,10,
 0x10c1c0,22,
-0x10c220,6,
-0x10c240,5,
-0x10c260,5,
-0x10c2f8,46,
+0x10c220,1,
+0x10c228,2,
+0x10c240,1,
+0x10c248,7,
+0x10c268,7,
+0x10c288,3,
+0x10c298,2,
+0x10c2f4,46,
 0x10c3b4,1,
 0x10c3bc,1,
 0x10c3c4,1,
@@ -5338,24 +5375,25 @@
 0x10c3d4,1,
 0x10c3dc,1,
 0x10c3e4,1,
-0x10c3ec,1,
-0x10c400,9,
-0x10c440,9,
-0x10c7a0,3,
-0x10c7b0,3,
-0x10c7c0,12,
-0x10c800,4,
+0x10c3ec,15,
+0x10c440,10,
+0x10c7a0,4,
+0x10c7b8,14,
+0x10c800,5,
 0x10c818,3,
 0x10c828,3,
-0x10c838,22,
-0x10c894,40,
+0x10c838,63,
 0x10c940,11,
 0x10c984,10,
 0x10c9c0,22,
-0x10ca20,6,
-0x10ca40,5,
-0x10ca60,5,
-0x10caf8,46,
+0x10ca20,1,
+0x10ca28,2,
+0x10ca40,1,
+0x10ca48,7,
+0x10ca68,7,
+0x10ca88,3,
+0x10ca98,2,
+0x10caf4,46,
 0x10cbb4,1,
 0x10cbbc,1,
 0x10cbc4,1,
@@ -5363,30 +5401,20 @@
 0x10cbd4,1,
 0x10cbdc,1,
 0x10cbe4,1,
-0x10cbec,1,
-0x10cc00,9,
-0x10cc40,9,
-0x10cfa0,3,
-0x10cfb0,3,
-0x10cfc0,12,
-0x10d000,1,
+0x10cbec,15,
+0x10cc40,10,
+0x10cfa0,4,
+0x10cfb8,14,
+0x10d004,1,
 0x10d00c,3,
 0x10d020,5,
-0x10d038,46,
+0x10d038,3,
+0x10d048,43,
 0x10d118,24,
 0x10d200,32,
-0x10d2e0,2,
-0x10d2f0,4,
-0x10d304,1,
-0x10d314,3,
-0x10d324,1,
-0x10d330,4,
-0x10d344,1,
-0x10d354,3,
-0x10d364,1,
-0x10d374,3,
-0x10d394,1,
-0x10d3a0,2,
+0x10d284,3,
+0x10d294,3,
+0x10d2a4,11,
 0x10d400,6,
 0x10d420,6,
 0x10d440,6,
@@ -5403,29 +5431,42 @@
 0x10d5a0,6,
 0x10d5c0,6,
 0x10d5e0,6,
-0x10d600,3,
-0x10d800,2,
+0x10d600,6,
+0x10d620,3,
+0x10d800,4,
 0x10d840,15,
 0x10d880,7,
-0x10d8a0,21,
-0x10dc00,25,
-0x10dc80,13,
-0x10dcc0,15,
-0x10dd00,11,
+0x10d8a0,13,
+0x10d8e0,7,
+0x10dab8,14,
+0x10db04,1,
+0x10db14,3,
+0x10db24,1,
+0x10db34,3,
+0x10db44,1,
+0x10db54,3,
+0x10db64,1,
+0x10db74,3,
+0x10db94,1,
+0x10dba0,2,
+0x10dc00,26,
+0x10dc80,14,
+0x10dcc0,27,
 0x10dd40,11,
 0x10dd80,5,
 0x10dda0,7,
 0x10ddc0,7,
 0x10dde0,6,
-0x10de00,11,
-0x10de40,19,
-0x10de90,6,
+0x10de00,14,
+0x10de40,13,
+0x10de80,7,
+0x10dea0,6,
 0x10e000,2,
 0x10e028,2,
 0x10e050,2,
 0x10e078,2,
-0x10e0a0,7,
-0x10e0c0,15,
+0x10e0a0,8,
+0x10e0c4,14,
 0x10e1ac,1,
 0x10e1d8,4,
 0x10e200,6,
@@ -5434,7 +5475,9 @@
 0x10e260,6,
 0x10e280,3,
 0x10e400,6,
-0x10e420,3,
+0x10e420,6,
+0x10e440,3,
+0x10e480,4,
 0x110000,1,
 0x110008,1,
 0x110010,14,
@@ -5442,40 +5485,47 @@
 0x110108,1,
 0x110110,14,
 0x110200,32,
-0x1102f8,34,
-0x1103f8,3,
+0x1102e0,2,
+0x110300,32,
+0x1103e0,2,
+0x110400,1,
 0x110408,1,
 0x110410,14,
 0x110500,1,
 0x110508,1,
 0x110510,14,
 0x110600,32,
-0x1106f8,34,
-0x1107f8,8,
+0x1106e0,2,
+0x110700,32,
+0x1107e0,2,
+0x110800,6,
 0x11081c,6,
-0x110a00,11,
-0x110a40,11,
-0x110a80,11,
-0x110ac0,11,
-0x110b00,2,
+0x110a00,3,
+0x110a10,3,
+0x110a40,3,
+0x110a50,3,
+0x110a80,3,
+0x110a90,3,
+0x110ac0,3,
+0x110ad0,3,
+0x110b00,3,
 0x110c04,3,
-0x110c14,12,
+0x110c14,16,
 0x110c84,1,
 0x110c8c,1,
-0x110ca0,2,
-0x110cb4,3,
-0x110e00,30,
+0x110e00,31,
 0x110e80,1,
 0x110e88,3,
-0x110f00,30,
+0x110f00,31,
 0x110f80,1,
 0x110f88,3,
 0x111000,22,
-0x111100,25,
+0x111100,26,
 0x111200,10,
-0x111240,2,
-0x111600,6,
-0x1116fc,55,
+0x111244,5,
+0x1115f8,3,
+0x111608,4,
+0x1116f4,45,
 0x111800,31,
 0x111900,31,
 0x111a00,6,
@@ -5495,28 +5545,33 @@
 0x111d74,1,
 0x111d80,20,
 0x111df4,1,
-0x111e00,16,
+0x111e00,17,
 0x112000,3,
 0x112010,35,
-0x1120a0,2,
+0x1120a0,5,
+0x1120b8,1,
 0x1120c0,19,
 0x112110,35,
-0x1121a0,2,
+0x1121a0,5,
+0x1121b8,1,
 0x1121c0,16,
 0x112204,1,
 0x112270,36,
-0x112304,1,
-0x112340,48,
-0x112404,37,
+0x112400,4,
+0x112418,1,
+0x112420,9,
+0x112464,1,
+0x112474,9,
 0x1124a0,6,
-0x1124c0,3,
-0x112500,4,
-0x112518,1,
-0x112520,9,
+0x1124c0,6,
+0x1124e0,3,
+0x112504,1,
+0x11250c,29,
+0x112600,3,
 0x112800,3,
-0x112814,31,
-0x1128a0,10,
-0x1128d0,1,
+0x112814,50,
+0x1128e0,3,
+0x1128f0,1,
 0x112900,6,
 0x112920,6,
 0x112940,6,
@@ -5524,66 +5579,91 @@
 0x112980,6,
 0x1129a0,6,
 0x1129c0,3,
-0x112a00,7,
-0x112a20,3,
-0x112a30,1,
-0x112c00,12,
-0x112c34,22,
-0x112d00,6,
-0x112d20,6,
-0x112d40,6,
-0x112d60,6,
-0x112d80,6,
-0x112da0,3,
-0x112e00,7,
-0x112e20,3,
-0x112e30,1,
+0x112a00,12,
+0x112a34,22,
+0x112ac0,7,
+0x112ae0,3,
+0x112af0,1,
+0x112b00,6,
+0x112b20,6,
+0x112b40,6,
+0x112b60,6,
+0x112b80,6,
+0x112ba0,3,
+0x112c00,13,
+0x112c40,11,
+0x112c80,1,
 0x113000,6,
 0x113020,6,
 0x113040,3,
+0x113060,4,
 0x1130f0,3,
 0x113100,6,
 0x113120,6,
 0x113140,3,
+0x113160,4,
 0x1131f0,3,
-0x113200,5,
-0x113218,2,
-0x113400,6,
+0x113200,8,
+0x113240,13,
+0x1133f8,8,
 0x113420,6,
 0x113440,3,
+0x113460,4,
 0x1134f0,3,
 0x113500,6,
 0x113520,6,
 0x113540,3,
+0x113560,4,
 0x1135f0,3,
-0x113600,5,
-0x113618,2,
+0x113600,8,
+0x113640,13,
+0x1137f8,2,
 0x113804,1,
-0x113820,11,
-0x113880,1,
+0x113820,10,
+0x113880,2,
 0x113904,1,
 0x11390c,1,
 0x113914,1,
 0x11391c,1,
 0x113924,1,
 0x11392c,1,
-0x113a00,12,
-0x113c00,15,
+0x113a20,9,
+0x113b00,6,
+0x113b20,6,
+0x113b40,6,
+0x113b60,6,
+0x113b80,6,
+0x113ba0,3,
+0x113c00,16,
+0x113d00,30,
+0x113d80,1,
+0x113d88,5,
+0x113da0,1,
+0x113da8,2,
+0x113dc0,10,
+0x113e00,9,
+0x113e28,2,
+0x113e40,9,
+0x113e68,2,
 0x113f00,25,
+0x113f70,4,
 0x113f84,5,
-0x113fa0,4,
-0x114000,4,
+0x113fa0,6,
+0x113ff8,7,
 0x114018,3,
 0x114028,3,
-0x114038,22,
-0x114094,40,
+0x114038,63,
 0x114140,11,
 0x114184,10,
 0x1141c0,22,
-0x114220,6,
-0x114240,5,
-0x114260,5,
-0x1142f8,46,
+0x114220,1,
+0x114228,2,
+0x114240,1,
+0x114248,7,
+0x114268,7,
+0x114288,3,
+0x114298,2,
+0x1142f4,46,
 0x1143b4,1,
 0x1143bc,1,
 0x1143c4,1,
@@ -5591,24 +5671,25 @@
 0x1143d4,1,
 0x1143dc,1,
 0x1143e4,1,
-0x1143ec,1,
-0x114400,9,
-0x114440,9,
-0x1147a0,3,
-0x1147b0,3,
-0x1147c0,12,
-0x114800,4,
+0x1143ec,15,
+0x114440,10,
+0x1147a0,4,
+0x1147b8,14,
+0x114800,5,
 0x114818,3,
 0x114828,3,
-0x114838,22,
-0x114894,40,
+0x114838,63,
 0x114940,11,
 0x114984,10,
 0x1149c0,22,
-0x114a20,6,
-0x114a40,5,
-0x114a60,5,
-0x114af8,46,
+0x114a20,1,
+0x114a28,2,
+0x114a40,1,
+0x114a48,7,
+0x114a68,7,
+0x114a88,3,
+0x114a98,2,
+0x114af4,46,
 0x114bb4,1,
 0x114bbc,1,
 0x114bc4,1,
@@ -5616,30 +5697,20 @@
 0x114bd4,1,
 0x114bdc,1,
 0x114be4,1,
-0x114bec,1,
-0x114c00,9,
-0x114c40,9,
-0x114fa0,3,
-0x114fb0,3,
-0x114fc0,12,
-0x115000,1,
+0x114bec,15,
+0x114c40,10,
+0x114fa0,4,
+0x114fb8,14,
+0x115004,1,
 0x11500c,3,
 0x115020,5,
-0x115038,46,
+0x115038,3,
+0x115048,43,
 0x115118,24,
 0x115200,32,
-0x1152e0,2,
-0x1152f0,4,
-0x115304,1,
-0x115314,3,
-0x115324,1,
-0x115330,4,
-0x115344,1,
-0x115354,3,
-0x115364,1,
-0x115374,3,
-0x115394,1,
-0x1153a0,2,
+0x115284,3,
+0x115294,3,
+0x1152a4,11,
 0x115400,6,
 0x115420,6,
 0x115440,6,
@@ -5656,29 +5727,42 @@
 0x1155a0,6,
 0x1155c0,6,
 0x1155e0,6,
-0x115600,3,
-0x115800,2,
+0x115600,6,
+0x115620,3,
+0x115800,4,
 0x115840,15,
 0x115880,7,
-0x1158a0,21,
-0x115c00,25,
-0x115c80,13,
-0x115cc0,15,
-0x115d00,11,
+0x1158a0,13,
+0x1158e0,7,
+0x115ab8,14,
+0x115b04,1,
+0x115b14,3,
+0x115b24,1,
+0x115b34,3,
+0x115b44,1,
+0x115b54,3,
+0x115b64,1,
+0x115b74,3,
+0x115b94,1,
+0x115ba0,2,
+0x115c00,26,
+0x115c80,14,
+0x115cc0,27,
 0x115d40,11,
 0x115d80,5,
 0x115da0,7,
 0x115dc0,7,
 0x115de0,6,
-0x115e00,11,
-0x115e40,19,
-0x115e90,6,
+0x115e00,14,
+0x115e40,13,
+0x115e80,7,
+0x115ea0,6,
 0x116000,2,
 0x116028,2,
 0x116050,2,
 0x116078,2,
-0x1160a0,7,
-0x1160c0,15,
+0x1160a0,8,
+0x1160c4,14,
 0x1161ac,1,
 0x1161d8,4,
 0x116200,6,
@@ -5687,7 +5771,9 @@
 0x116260,6,
 0x116280,3,
 0x116400,6,
-0x116420,3,
+0x116420,6,
+0x116440,3,
+0x116480,4,
 0x118000,1,
 0x118008,1,
 0x118010,14,
@@ -5695,40 +5781,47 @@
 0x118108,1,
 0x118110,14,
 0x118200,32,
-0x1182f8,34,
-0x1183f8,3,
+0x1182e0,2,
+0x118300,32,
+0x1183e0,2,
+0x118400,1,
 0x118408,1,
 0x118410,14,
 0x118500,1,
 0x118508,1,
 0x118510,14,
 0x118600,32,
-0x1186f8,34,
-0x1187f8,8,
+0x1186e0,2,
+0x118700,32,
+0x1187e0,2,
+0x118800,6,
 0x11881c,6,
-0x118a00,11,
-0x118a40,11,
-0x118a80,11,
-0x118ac0,11,
-0x118b00,2,
+0x118a00,3,
+0x118a10,3,
+0x118a40,3,
+0x118a50,3,
+0x118a80,3,
+0x118a90,3,
+0x118ac0,3,
+0x118ad0,3,
+0x118b00,3,
 0x118c04,3,
-0x118c14,12,
+0x118c14,16,
 0x118c84,1,
 0x118c8c,1,
-0x118ca0,2,
-0x118cb4,3,
-0x118e00,30,
+0x118e00,31,
 0x118e80,1,
 0x118e88,3,
-0x118f00,30,
+0x118f00,31,
 0x118f80,1,
 0x118f88,3,
 0x119000,22,
-0x119100,25,
+0x119100,26,
 0x119200,10,
-0x119240,2,
-0x119600,6,
-0x1196fc,55,
+0x119244,5,
+0x1195f8,3,
+0x119608,4,
+0x1196f4,45,
 0x119800,31,
 0x119900,31,
 0x119a00,6,
@@ -5748,28 +5841,33 @@
 0x119d74,1,
 0x119d80,20,
 0x119df4,1,
-0x119e00,16,
+0x119e00,17,
 0x11a000,3,
 0x11a010,35,
-0x11a0a0,2,
+0x11a0a0,5,
+0x11a0b8,1,
 0x11a0c0,19,
 0x11a110,35,
-0x11a1a0,2,
+0x11a1a0,5,
+0x11a1b8,1,
 0x11a1c0,16,
 0x11a204,1,
 0x11a270,36,
-0x11a304,1,
-0x11a340,48,
-0x11a404,37,
+0x11a400,4,
+0x11a418,1,
+0x11a420,9,
+0x11a464,1,
+0x11a474,9,
 0x11a4a0,6,
-0x11a4c0,3,
-0x11a500,4,
-0x11a518,1,
-0x11a520,9,
+0x11a4c0,6,
+0x11a4e0,3,
+0x11a504,1,
+0x11a50c,29,
+0x11a600,3,
 0x11a800,3,
-0x11a814,31,
-0x11a8a0,10,
-0x11a8d0,1,
+0x11a814,50,
+0x11a8e0,3,
+0x11a8f0,1,
 0x11a900,6,
 0x11a920,6,
 0x11a940,6,
@@ -5777,66 +5875,91 @@
 0x11a980,6,
 0x11a9a0,6,
 0x11a9c0,3,
-0x11aa00,7,
-0x11aa20,3,
-0x11aa30,1,
-0x11ac00,12,
-0x11ac34,22,
-0x11ad00,6,
-0x11ad20,6,
-0x11ad40,6,
-0x11ad60,6,
-0x11ad80,6,
-0x11ada0,3,
-0x11ae00,7,
-0x11ae20,3,
-0x11ae30,1,
+0x11aa00,12,
+0x11aa34,22,
+0x11aac0,7,
+0x11aae0,3,
+0x11aaf0,1,
+0x11ab00,6,
+0x11ab20,6,
+0x11ab40,6,
+0x11ab60,6,
+0x11ab80,6,
+0x11aba0,3,
+0x11ac00,13,
+0x11ac40,11,
+0x11ac80,1,
 0x11b000,6,
 0x11b020,6,
 0x11b040,3,
+0x11b060,4,
 0x11b0f0,3,
 0x11b100,6,
 0x11b120,6,
 0x11b140,3,
+0x11b160,4,
 0x11b1f0,3,
-0x11b200,5,
-0x11b218,2,
-0x11b400,6,
+0x11b200,8,
+0x11b240,13,
+0x11b3f8,8,
 0x11b420,6,
 0x11b440,3,
+0x11b460,4,
 0x11b4f0,3,
 0x11b500,6,
 0x11b520,6,
 0x11b540,3,
+0x11b560,4,
 0x11b5f0,3,
-0x11b600,5,
-0x11b618,2,
+0x11b600,8,
+0x11b640,13,
+0x11b7f8,2,
 0x11b804,1,
-0x11b820,11,
-0x11b880,1,
+0x11b820,10,
+0x11b880,2,
 0x11b904,1,
 0x11b90c,1,
 0x11b914,1,
 0x11b91c,1,
 0x11b924,1,
 0x11b92c,1,
-0x11ba00,12,
-0x11bc00,15,
+0x11ba20,9,
+0x11bb00,6,
+0x11bb20,6,
+0x11bb40,6,
+0x11bb60,6,
+0x11bb80,6,
+0x11bba0,3,
+0x11bc00,16,
+0x11bd00,30,
+0x11bd80,1,
+0x11bd88,5,
+0x11bda0,1,
+0x11bda8,2,
+0x11bdc0,10,
+0x11be00,9,
+0x11be28,2,
+0x11be40,9,
+0x11be68,2,
 0x11bf00,25,
+0x11bf70,4,
 0x11bf84,5,
-0x11bfa0,4,
-0x11c000,4,
+0x11bfa0,6,
+0x11bff8,7,
 0x11c018,3,
 0x11c028,3,
-0x11c038,22,
-0x11c094,40,
+0x11c038,63,
 0x11c140,11,
 0x11c184,10,
 0x11c1c0,22,
-0x11c220,6,
-0x11c240,5,
-0x11c260,5,
-0x11c2f8,46,
+0x11c220,1,
+0x11c228,2,
+0x11c240,1,
+0x11c248,7,
+0x11c268,7,
+0x11c288,3,
+0x11c298,2,
+0x11c2f4,46,
 0x11c3b4,1,
 0x11c3bc,1,
 0x11c3c4,1,
@@ -5844,24 +5967,25 @@
 0x11c3d4,1,
 0x11c3dc,1,
 0x11c3e4,1,
-0x11c3ec,1,
-0x11c400,9,
-0x11c440,9,
-0x11c7a0,3,
-0x11c7b0,3,
-0x11c7c0,12,
-0x11c800,4,
+0x11c3ec,15,
+0x11c440,10,
+0x11c7a0,4,
+0x11c7b8,14,
+0x11c800,5,
 0x11c818,3,
 0x11c828,3,
-0x11c838,22,
-0x11c894,40,
+0x11c838,63,
 0x11c940,11,
 0x11c984,10,
 0x11c9c0,22,
-0x11ca20,6,
-0x11ca40,5,
-0x11ca60,5,
-0x11caf8,46,
+0x11ca20,1,
+0x11ca28,2,
+0x11ca40,1,
+0x11ca48,7,
+0x11ca68,7,
+0x11ca88,3,
+0x11ca98,2,
+0x11caf4,46,
 0x11cbb4,1,
 0x11cbbc,1,
 0x11cbc4,1,
@@ -5869,30 +5993,20 @@
 0x11cbd4,1,
 0x11cbdc,1,
 0x11cbe4,1,
-0x11cbec,1,
-0x11cc00,9,
-0x11cc40,9,
-0x11cfa0,3,
-0x11cfb0,3,
-0x11cfc0,12,
-0x11d000,1,
+0x11cbec,15,
+0x11cc40,10,
+0x11cfa0,4,
+0x11cfb8,14,
+0x11d004,1,
 0x11d00c,3,
 0x11d020,5,
-0x11d038,46,
+0x11d038,3,
+0x11d048,43,
 0x11d118,24,
 0x11d200,32,
-0x11d2e0,2,
-0x11d2f0,4,
-0x11d304,1,
-0x11d314,3,
-0x11d324,1,
-0x11d330,4,
-0x11d344,1,
-0x11d354,3,
-0x11d364,1,
-0x11d374,3,
-0x11d394,1,
-0x11d3a0,2,
+0x11d284,3,
+0x11d294,3,
+0x11d2a4,11,
 0x11d400,6,
 0x11d420,6,
 0x11d440,6,
@@ -5909,29 +6023,42 @@
 0x11d5a0,6,
 0x11d5c0,6,
 0x11d5e0,6,
-0x11d600,3,
-0x11d800,2,
+0x11d600,6,
+0x11d620,3,
+0x11d800,4,
 0x11d840,15,
 0x11d880,7,
-0x11d8a0,21,
-0x11dc00,25,
-0x11dc80,13,
-0x11dcc0,15,
-0x11dd00,11,
+0x11d8a0,13,
+0x11d8e0,7,
+0x11dab8,14,
+0x11db04,1,
+0x11db14,3,
+0x11db24,1,
+0x11db34,3,
+0x11db44,1,
+0x11db54,3,
+0x11db64,1,
+0x11db74,3,
+0x11db94,1,
+0x11dba0,2,
+0x11dc00,26,
+0x11dc80,14,
+0x11dcc0,27,
 0x11dd40,11,
 0x11dd80,5,
 0x11dda0,7,
 0x11ddc0,7,
 0x11dde0,6,
-0x11de00,11,
-0x11de40,19,
-0x11de90,6,
+0x11de00,14,
+0x11de40,13,
+0x11de80,7,
+0x11dea0,6,
 0x11e000,2,
 0x11e028,2,
 0x11e050,2,
 0x11e078,2,
-0x11e0a0,7,
-0x11e0c0,15,
+0x11e0a0,8,
+0x11e0c4,14,
 0x11e1ac,1,
 0x11e1d8,4,
 0x11e200,6,
@@ -5940,7 +6067,9 @@
 0x11e260,6,
 0x11e280,3,
 0x11e400,6,
-0x11e420,3,
+0x11e420,6,
+0x11e440,3,
+0x11e480,4,
 0x120000,1,
 0x120008,1,
 0x120010,14,
@@ -5948,40 +6077,47 @@
 0x120108,1,
 0x120110,14,
 0x120200,32,
-0x1202f8,34,
-0x1203f8,3,
+0x1202e0,2,
+0x120300,32,
+0x1203e0,2,
+0x120400,1,
 0x120408,1,
 0x120410,14,
 0x120500,1,
 0x120508,1,
 0x120510,14,
 0x120600,32,
-0x1206f8,34,
-0x1207f8,8,
+0x1206e0,2,
+0x120700,32,
+0x1207e0,2,
+0x120800,6,
 0x12081c,6,
-0x120a00,11,
-0x120a40,11,
-0x120a80,11,
-0x120ac0,11,
-0x120b00,2,
+0x120a00,3,
+0x120a10,3,
+0x120a40,3,
+0x120a50,3,
+0x120a80,3,
+0x120a90,3,
+0x120ac0,3,
+0x120ad0,3,
+0x120b00,3,
 0x120c04,3,
-0x120c14,12,
+0x120c14,16,
 0x120c84,1,
 0x120c8c,1,
-0x120ca0,2,
-0x120cb4,3,
-0x120e00,30,
+0x120e00,31,
 0x120e80,1,
 0x120e88,3,
-0x120f00,30,
+0x120f00,31,
 0x120f80,1,
 0x120f88,3,
 0x121000,22,
-0x121100,25,
+0x121100,26,
 0x121200,10,
-0x121240,2,
-0x121600,6,
-0x1216fc,55,
+0x121244,5,
+0x1215f8,3,
+0x121608,4,
+0x1216f4,45,
 0x121800,31,
 0x121900,31,
 0x121a00,6,
@@ -6001,28 +6137,33 @@
 0x121d74,1,
 0x121d80,20,
 0x121df4,1,
-0x121e00,16,
+0x121e00,17,
 0x122000,3,
 0x122010,35,
-0x1220a0,2,
+0x1220a0,5,
+0x1220b8,1,
 0x1220c0,19,
 0x122110,35,
-0x1221a0,2,
+0x1221a0,5,
+0x1221b8,1,
 0x1221c0,16,
 0x122204,1,
 0x122270,36,
-0x122304,1,
-0x122340,48,
-0x122404,37,
+0x122400,4,
+0x122418,1,
+0x122420,9,
+0x122464,1,
+0x122474,9,
 0x1224a0,6,
-0x1224c0,3,
-0x122500,4,
-0x122518,1,
-0x122520,9,
+0x1224c0,6,
+0x1224e0,3,
+0x122504,1,
+0x12250c,29,
+0x122600,3,
 0x122800,3,
-0x122814,31,
-0x1228a0,10,
-0x1228d0,1,
+0x122814,50,
+0x1228e0,3,
+0x1228f0,1,
 0x122900,6,
 0x122920,6,
 0x122940,6,
@@ -6030,66 +6171,91 @@
 0x122980,6,
 0x1229a0,6,
 0x1229c0,3,
-0x122a00,7,
-0x122a20,3,
-0x122a30,1,
-0x122c00,12,
-0x122c34,22,
-0x122d00,6,
-0x122d20,6,
-0x122d40,6,
-0x122d60,6,
-0x122d80,6,
-0x122da0,3,
-0x122e00,7,
-0x122e20,3,
-0x122e30,1,
+0x122a00,12,
+0x122a34,22,
+0x122ac0,7,
+0x122ae0,3,
+0x122af0,1,
+0x122b00,6,
+0x122b20,6,
+0x122b40,6,
+0x122b60,6,
+0x122b80,6,
+0x122ba0,3,
+0x122c00,13,
+0x122c40,11,
+0x122c80,1,
 0x123000,6,
 0x123020,6,
 0x123040,3,
+0x123060,4,
 0x1230f0,3,
 0x123100,6,
 0x123120,6,
 0x123140,3,
+0x123160,4,
 0x1231f0,3,
-0x123200,5,
-0x123218,2,
-0x123400,6,
+0x123200,8,
+0x123240,13,
+0x1233f8,8,
 0x123420,6,
 0x123440,3,
+0x123460,4,
 0x1234f0,3,
 0x123500,6,
 0x123520,6,
 0x123540,3,
+0x123560,4,
 0x1235f0,3,
-0x123600,5,
-0x123618,2,
+0x123600,8,
+0x123640,13,
+0x1237f8,2,
 0x123804,1,
-0x123820,11,
-0x123880,1,
+0x123820,10,
+0x123880,2,
 0x123904,1,
 0x12390c,1,
 0x123914,1,
 0x12391c,1,
 0x123924,1,
 0x12392c,1,
-0x123a00,12,
-0x123c00,15,
+0x123a20,9,
+0x123b00,6,
+0x123b20,6,
+0x123b40,6,
+0x123b60,6,
+0x123b80,6,
+0x123ba0,3,
+0x123c00,16,
+0x123d00,30,
+0x123d80,1,
+0x123d88,5,
+0x123da0,1,
+0x123da8,2,
+0x123dc0,10,
+0x123e00,9,
+0x123e28,2,
+0x123e40,9,
+0x123e68,2,
 0x123f00,25,
+0x123f70,4,
 0x123f84,5,
-0x123fa0,4,
-0x124000,4,
+0x123fa0,6,
+0x123ff8,7,
 0x124018,3,
 0x124028,3,
-0x124038,22,
-0x124094,40,
+0x124038,63,
 0x124140,11,
 0x124184,10,
 0x1241c0,22,
-0x124220,6,
-0x124240,5,
-0x124260,5,
-0x1242f8,46,
+0x124220,1,
+0x124228,2,
+0x124240,1,
+0x124248,7,
+0x124268,7,
+0x124288,3,
+0x124298,2,
+0x1242f4,46,
 0x1243b4,1,
 0x1243bc,1,
 0x1243c4,1,
@@ -6097,24 +6263,25 @@
 0x1243d4,1,
 0x1243dc,1,
 0x1243e4,1,
-0x1243ec,1,
-0x124400,9,
-0x124440,9,
-0x1247a0,3,
-0x1247b0,3,
-0x1247c0,12,
-0x124800,4,
+0x1243ec,15,
+0x124440,10,
+0x1247a0,4,
+0x1247b8,14,
+0x124800,5,
 0x124818,3,
 0x124828,3,
-0x124838,22,
-0x124894,40,
+0x124838,63,
 0x124940,11,
 0x124984,10,
 0x1249c0,22,
-0x124a20,6,
-0x124a40,5,
-0x124a60,5,
-0x124af8,46,
+0x124a20,1,
+0x124a28,2,
+0x124a40,1,
+0x124a48,7,
+0x124a68,7,
+0x124a88,3,
+0x124a98,2,
+0x124af4,46,
 0x124bb4,1,
 0x124bbc,1,
 0x124bc4,1,
@@ -6122,30 +6289,20 @@
 0x124bd4,1,
 0x124bdc,1,
 0x124be4,1,
-0x124bec,1,
-0x124c00,9,
-0x124c40,9,
-0x124fa0,3,
-0x124fb0,3,
-0x124fc0,12,
-0x125000,1,
+0x124bec,15,
+0x124c40,10,
+0x124fa0,4,
+0x124fb8,14,
+0x125004,1,
 0x12500c,3,
 0x125020,5,
-0x125038,46,
+0x125038,3,
+0x125048,43,
 0x125118,24,
 0x125200,32,
-0x1252e0,2,
-0x1252f0,4,
-0x125304,1,
-0x125314,3,
-0x125324,1,
-0x125330,4,
-0x125344,1,
-0x125354,3,
-0x125364,1,
-0x125374,3,
-0x125394,1,
-0x1253a0,2,
+0x125284,3,
+0x125294,3,
+0x1252a4,11,
 0x125400,6,
 0x125420,6,
 0x125440,6,
@@ -6162,29 +6319,42 @@
 0x1255a0,6,
 0x1255c0,6,
 0x1255e0,6,
-0x125600,3,
-0x125800,2,
+0x125600,6,
+0x125620,3,
+0x125800,4,
 0x125840,15,
 0x125880,7,
-0x1258a0,21,
-0x125c00,25,
-0x125c80,13,
-0x125cc0,15,
-0x125d00,11,
+0x1258a0,13,
+0x1258e0,7,
+0x125ab8,14,
+0x125b04,1,
+0x125b14,3,
+0x125b24,1,
+0x125b34,3,
+0x125b44,1,
+0x125b54,3,
+0x125b64,1,
+0x125b74,3,
+0x125b94,1,
+0x125ba0,2,
+0x125c00,26,
+0x125c80,14,
+0x125cc0,27,
 0x125d40,11,
 0x125d80,5,
 0x125da0,7,
 0x125dc0,7,
 0x125de0,6,
-0x125e00,11,
-0x125e40,19,
-0x125e90,6,
+0x125e00,14,
+0x125e40,13,
+0x125e80,7,
+0x125ea0,6,
 0x126000,2,
 0x126028,2,
 0x126050,2,
 0x126078,2,
-0x1260a0,7,
-0x1260c0,15,
+0x1260a0,8,
+0x1260c4,14,
 0x1261ac,1,
 0x1261d8,4,
 0x126200,6,
@@ -6193,7 +6363,9 @@
 0x126260,6,
 0x126280,3,
 0x126400,6,
-0x126420,3,
+0x126420,6,
+0x126440,3,
+0x126480,4,
 0x128000,1,
 0x128008,1,
 0x128010,14,
@@ -6201,40 +6373,47 @@
 0x128108,1,
 0x128110,14,
 0x128200,32,
-0x1282f8,34,
-0x1283f8,3,
+0x1282e0,2,
+0x128300,32,
+0x1283e0,2,
+0x128400,1,
 0x128408,1,
 0x128410,14,
 0x128500,1,
 0x128508,1,
 0x128510,14,
 0x128600,32,
-0x1286f8,34,
-0x1287f8,8,
+0x1286e0,2,
+0x128700,32,
+0x1287e0,2,
+0x128800,6,
 0x12881c,6,
-0x128a00,11,
-0x128a40,11,
-0x128a80,11,
-0x128ac0,11,
-0x128b00,2,
+0x128a00,3,
+0x128a10,3,
+0x128a40,3,
+0x128a50,3,
+0x128a80,3,
+0x128a90,3,
+0x128ac0,3,
+0x128ad0,3,
+0x128b00,3,
 0x128c04,3,
-0x128c14,12,
+0x128c14,16,
 0x128c84,1,
 0x128c8c,1,
-0x128ca0,2,
-0x128cb4,3,
-0x128e00,30,
+0x128e00,31,
 0x128e80,1,
 0x128e88,3,
-0x128f00,30,
+0x128f00,31,
 0x128f80,1,
 0x128f88,3,
 0x129000,22,
-0x129100,25,
+0x129100,26,
 0x129200,10,
-0x129240,2,
-0x129600,6,
-0x1296fc,55,
+0x129244,5,
+0x1295f8,3,
+0x129608,4,
+0x1296f4,45,
 0x129800,31,
 0x129900,31,
 0x129a00,6,
@@ -6254,28 +6433,33 @@
 0x129d74,1,
 0x129d80,20,
 0x129df4,1,
-0x129e00,16,
+0x129e00,17,
 0x12a000,3,
 0x12a010,35,
-0x12a0a0,2,
+0x12a0a0,5,
+0x12a0b8,1,
 0x12a0c0,19,
 0x12a110,35,
-0x12a1a0,2,
+0x12a1a0,5,
+0x12a1b8,1,
 0x12a1c0,16,
 0x12a204,1,
 0x12a270,36,
-0x12a304,1,
-0x12a340,48,
-0x12a404,37,
+0x12a400,4,
+0x12a418,1,
+0x12a420,9,
+0x12a464,1,
+0x12a474,9,
 0x12a4a0,6,
-0x12a4c0,3,
-0x12a500,4,
-0x12a518,1,
-0x12a520,9,
+0x12a4c0,6,
+0x12a4e0,3,
+0x12a504,1,
+0x12a50c,29,
+0x12a600,3,
 0x12a800,3,
-0x12a814,31,
-0x12a8a0,10,
-0x12a8d0,1,
+0x12a814,50,
+0x12a8e0,3,
+0x12a8f0,1,
 0x12a900,6,
 0x12a920,6,
 0x12a940,6,
@@ -6283,66 +6467,91 @@
 0x12a980,6,
 0x12a9a0,6,
 0x12a9c0,3,
-0x12aa00,7,
-0x12aa20,3,
-0x12aa30,1,
-0x12ac00,12,
-0x12ac34,22,
-0x12ad00,6,
-0x12ad20,6,
-0x12ad40,6,
-0x12ad60,6,
-0x12ad80,6,
-0x12ada0,3,
-0x12ae00,7,
-0x12ae20,3,
-0x12ae30,1,
+0x12aa00,12,
+0x12aa34,22,
+0x12aac0,7,
+0x12aae0,3,
+0x12aaf0,1,
+0x12ab00,6,
+0x12ab20,6,
+0x12ab40,6,
+0x12ab60,6,
+0x12ab80,6,
+0x12aba0,3,
+0x12ac00,13,
+0x12ac40,11,
+0x12ac80,1,
 0x12b000,6,
 0x12b020,6,
 0x12b040,3,
+0x12b060,4,
 0x12b0f0,3,
 0x12b100,6,
 0x12b120,6,
 0x12b140,3,
+0x12b160,4,
 0x12b1f0,3,
-0x12b200,5,
-0x12b218,2,
-0x12b400,6,
+0x12b200,8,
+0x12b240,13,
+0x12b3f8,8,
 0x12b420,6,
 0x12b440,3,
+0x12b460,4,
 0x12b4f0,3,
 0x12b500,6,
 0x12b520,6,
 0x12b540,3,
+0x12b560,4,
 0x12b5f0,3,
-0x12b600,5,
-0x12b618,2,
+0x12b600,8,
+0x12b640,13,
+0x12b7f8,2,
 0x12b804,1,
-0x12b820,11,
-0x12b880,1,
+0x12b820,10,
+0x12b880,2,
 0x12b904,1,
 0x12b90c,1,
 0x12b914,1,
 0x12b91c,1,
 0x12b924,1,
 0x12b92c,1,
-0x12ba00,12,
-0x12bc00,15,
+0x12ba20,9,
+0x12bb00,6,
+0x12bb20,6,
+0x12bb40,6,
+0x12bb60,6,
+0x12bb80,6,
+0x12bba0,3,
+0x12bc00,16,
+0x12bd00,30,
+0x12bd80,1,
+0x12bd88,5,
+0x12bda0,1,
+0x12bda8,2,
+0x12bdc0,10,
+0x12be00,9,
+0x12be28,2,
+0x12be40,9,
+0x12be68,2,
 0x12bf00,25,
+0x12bf70,4,
 0x12bf84,5,
-0x12bfa0,4,
-0x12c000,4,
+0x12bfa0,6,
+0x12bff8,7,
 0x12c018,3,
 0x12c028,3,
-0x12c038,22,
-0x12c094,40,
+0x12c038,63,
 0x12c140,11,
 0x12c184,10,
 0x12c1c0,22,
-0x12c220,6,
-0x12c240,5,
-0x12c260,5,
-0x12c2f8,46,
+0x12c220,1,
+0x12c228,2,
+0x12c240,1,
+0x12c248,7,
+0x12c268,7,
+0x12c288,3,
+0x12c298,2,
+0x12c2f4,46,
 0x12c3b4,1,
 0x12c3bc,1,
 0x12c3c4,1,
@@ -6350,24 +6559,25 @@
 0x12c3d4,1,
 0x12c3dc,1,
 0x12c3e4,1,
-0x12c3ec,1,
-0x12c400,9,
-0x12c440,9,
-0x12c7a0,3,
-0x12c7b0,3,
-0x12c7c0,12,
-0x12c800,4,
+0x12c3ec,15,
+0x12c440,10,
+0x12c7a0,4,
+0x12c7b8,14,
+0x12c800,5,
 0x12c818,3,
 0x12c828,3,
-0x12c838,22,
-0x12c894,40,
+0x12c838,63,
 0x12c940,11,
 0x12c984,10,
 0x12c9c0,22,
-0x12ca20,6,
-0x12ca40,5,
-0x12ca60,5,
-0x12caf8,46,
+0x12ca20,1,
+0x12ca28,2,
+0x12ca40,1,
+0x12ca48,7,
+0x12ca68,7,
+0x12ca88,3,
+0x12ca98,2,
+0x12caf4,46,
 0x12cbb4,1,
 0x12cbbc,1,
 0x12cbc4,1,
@@ -6375,30 +6585,20 @@
 0x12cbd4,1,
 0x12cbdc,1,
 0x12cbe4,1,
-0x12cbec,1,
-0x12cc00,9,
-0x12cc40,9,
-0x12cfa0,3,
-0x12cfb0,3,
-0x12cfc0,12,
-0x12d000,1,
+0x12cbec,15,
+0x12cc40,10,
+0x12cfa0,4,
+0x12cfb8,14,
+0x12d004,1,
 0x12d00c,3,
 0x12d020,5,
-0x12d038,46,
+0x12d038,3,
+0x12d048,43,
 0x12d118,24,
 0x12d200,32,
-0x12d2e0,2,
-0x12d2f0,4,
-0x12d304,1,
-0x12d314,3,
-0x12d324,1,
-0x12d330,4,
-0x12d344,1,
-0x12d354,3,
-0x12d364,1,
-0x12d374,3,
-0x12d394,1,
-0x12d3a0,2,
+0x12d284,3,
+0x12d294,3,
+0x12d2a4,11,
 0x12d400,6,
 0x12d420,6,
 0x12d440,6,
@@ -6415,29 +6615,42 @@
 0x12d5a0,6,
 0x12d5c0,6,
 0x12d5e0,6,
-0x12d600,3,
-0x12d800,2,
+0x12d600,6,
+0x12d620,3,
+0x12d800,4,
 0x12d840,15,
 0x12d880,7,
-0x12d8a0,21,
-0x12dc00,25,
-0x12dc80,13,
-0x12dcc0,15,
-0x12dd00,11,
+0x12d8a0,13,
+0x12d8e0,7,
+0x12dab8,14,
+0x12db04,1,
+0x12db14,3,
+0x12db24,1,
+0x12db34,3,
+0x12db44,1,
+0x12db54,3,
+0x12db64,1,
+0x12db74,3,
+0x12db94,1,
+0x12dba0,2,
+0x12dc00,26,
+0x12dc80,14,
+0x12dcc0,27,
 0x12dd40,11,
 0x12dd80,5,
 0x12dda0,7,
 0x12ddc0,7,
 0x12dde0,6,
-0x12de00,11,
-0x12de40,19,
-0x12de90,6,
+0x12de00,14,
+0x12de40,13,
+0x12de80,7,
+0x12dea0,6,
 0x12e000,2,
 0x12e028,2,
 0x12e050,2,
 0x12e078,2,
-0x12e0a0,7,
-0x12e0c0,15,
+0x12e0a0,8,
+0x12e0c4,14,
 0x12e1ac,1,
 0x12e1d8,4,
 0x12e200,6,
@@ -6446,7 +6659,9 @@
 0x12e260,6,
 0x12e280,3,
 0x12e400,6,
-0x12e420,3,
+0x12e420,6,
+0x12e440,3,
+0x12e480,4,
 0x130000,1,
 0x130008,1,
 0x130010,14,
@@ -6454,40 +6669,47 @@
 0x130108,1,
 0x130110,14,
 0x130200,32,
-0x1302f8,34,
-0x1303f8,3,
+0x1302e0,2,
+0x130300,32,
+0x1303e0,2,
+0x130400,1,
 0x130408,1,
 0x130410,14,
 0x130500,1,
 0x130508,1,
 0x130510,14,
 0x130600,32,
-0x1306f8,34,
-0x1307f8,8,
+0x1306e0,2,
+0x130700,32,
+0x1307e0,2,
+0x130800,6,
 0x13081c,6,
-0x130a00,11,
-0x130a40,11,
-0x130a80,11,
-0x130ac0,11,
-0x130b00,2,
+0x130a00,3,
+0x130a10,3,
+0x130a40,3,
+0x130a50,3,
+0x130a80,3,
+0x130a90,3,
+0x130ac0,3,
+0x130ad0,3,
+0x130b00,3,
 0x130c04,3,
-0x130c14,12,
+0x130c14,16,
 0x130c84,1,
 0x130c8c,1,
-0x130ca0,2,
-0x130cb4,3,
-0x130e00,30,
+0x130e00,31,
 0x130e80,1,
 0x130e88,3,
-0x130f00,30,
+0x130f00,31,
 0x130f80,1,
 0x130f88,3,
 0x131000,22,
-0x131100,25,
+0x131100,26,
 0x131200,10,
-0x131240,2,
-0x131600,6,
-0x1316fc,55,
+0x131244,5,
+0x1315f8,3,
+0x131608,4,
+0x1316f4,45,
 0x131800,31,
 0x131900,31,
 0x131a00,6,
@@ -6507,28 +6729,33 @@
 0x131d74,1,
 0x131d80,20,
 0x131df4,1,
-0x131e00,16,
+0x131e00,17,
 0x132000,3,
 0x132010,35,
-0x1320a0,2,
+0x1320a0,5,
+0x1320b8,1,
 0x1320c0,19,
 0x132110,35,
-0x1321a0,2,
+0x1321a0,5,
+0x1321b8,1,
 0x1321c0,16,
 0x132204,1,
 0x132270,36,
-0x132304,1,
-0x132340,48,
-0x132404,37,
+0x132400,4,
+0x132418,1,
+0x132420,9,
+0x132464,1,
+0x132474,9,
 0x1324a0,6,
-0x1324c0,3,
-0x132500,4,
-0x132518,1,
-0x132520,9,
+0x1324c0,6,
+0x1324e0,3,
+0x132504,1,
+0x13250c,29,
+0x132600,3,
 0x132800,3,
-0x132814,31,
-0x1328a0,10,
-0x1328d0,1,
+0x132814,50,
+0x1328e0,3,
+0x1328f0,1,
 0x132900,6,
 0x132920,6,
 0x132940,6,
@@ -6536,66 +6763,91 @@
 0x132980,6,
 0x1329a0,6,
 0x1329c0,3,
-0x132a00,7,
-0x132a20,3,
-0x132a30,1,
-0x132c00,12,
-0x132c34,22,
-0x132d00,6,
-0x132d20,6,
-0x132d40,6,
-0x132d60,6,
-0x132d80,6,
-0x132da0,3,
-0x132e00,7,
-0x132e20,3,
-0x132e30,1,
+0x132a00,12,
+0x132a34,22,
+0x132ac0,7,
+0x132ae0,3,
+0x132af0,1,
+0x132b00,6,
+0x132b20,6,
+0x132b40,6,
+0x132b60,6,
+0x132b80,6,
+0x132ba0,3,
+0x132c00,13,
+0x132c40,11,
+0x132c80,1,
 0x133000,6,
 0x133020,6,
 0x133040,3,
+0x133060,4,
 0x1330f0,3,
 0x133100,6,
 0x133120,6,
 0x133140,3,
+0x133160,4,
 0x1331f0,3,
-0x133200,5,
-0x133218,2,
-0x133400,6,
+0x133200,8,
+0x133240,13,
+0x1333f8,8,
 0x133420,6,
 0x133440,3,
+0x133460,4,
 0x1334f0,3,
 0x133500,6,
 0x133520,6,
 0x133540,3,
+0x133560,4,
 0x1335f0,3,
-0x133600,5,
-0x133618,2,
+0x133600,8,
+0x133640,13,
+0x1337f8,2,
 0x133804,1,
-0x133820,11,
-0x133880,1,
+0x133820,10,
+0x133880,2,
 0x133904,1,
 0x13390c,1,
 0x133914,1,
 0x13391c,1,
 0x133924,1,
 0x13392c,1,
-0x133a00,12,
-0x133c00,15,
+0x133a20,9,
+0x133b00,6,
+0x133b20,6,
+0x133b40,6,
+0x133b60,6,
+0x133b80,6,
+0x133ba0,3,
+0x133c00,16,
+0x133d00,30,
+0x133d80,1,
+0x133d88,5,
+0x133da0,1,
+0x133da8,2,
+0x133dc0,10,
+0x133e00,9,
+0x133e28,2,
+0x133e40,9,
+0x133e68,2,
 0x133f00,25,
+0x133f70,4,
 0x133f84,5,
-0x133fa0,4,
-0x134000,4,
+0x133fa0,6,
+0x133ff8,7,
 0x134018,3,
 0x134028,3,
-0x134038,22,
-0x134094,40,
+0x134038,63,
 0x134140,11,
 0x134184,10,
 0x1341c0,22,
-0x134220,6,
-0x134240,5,
-0x134260,5,
-0x1342f8,46,
+0x134220,1,
+0x134228,2,
+0x134240,1,
+0x134248,7,
+0x134268,7,
+0x134288,3,
+0x134298,2,
+0x1342f4,46,
 0x1343b4,1,
 0x1343bc,1,
 0x1343c4,1,
@@ -6603,24 +6855,25 @@
 0x1343d4,1,
 0x1343dc,1,
 0x1343e4,1,
-0x1343ec,1,
-0x134400,9,
-0x134440,9,
-0x1347a0,3,
-0x1347b0,3,
-0x1347c0,12,
-0x134800,4,
+0x1343ec,15,
+0x134440,10,
+0x1347a0,4,
+0x1347b8,14,
+0x134800,5,
 0x134818,3,
 0x134828,3,
-0x134838,22,
-0x134894,40,
+0x134838,63,
 0x134940,11,
 0x134984,10,
 0x1349c0,22,
-0x134a20,6,
-0x134a40,5,
-0x134a60,5,
-0x134af8,46,
+0x134a20,1,
+0x134a28,2,
+0x134a40,1,
+0x134a48,7,
+0x134a68,7,
+0x134a88,3,
+0x134a98,2,
+0x134af4,46,
 0x134bb4,1,
 0x134bbc,1,
 0x134bc4,1,
@@ -6628,30 +6881,20 @@
 0x134bd4,1,
 0x134bdc,1,
 0x134be4,1,
-0x134bec,1,
-0x134c00,9,
-0x134c40,9,
-0x134fa0,3,
-0x134fb0,3,
-0x134fc0,12,
-0x135000,1,
+0x134bec,15,
+0x134c40,10,
+0x134fa0,4,
+0x134fb8,14,
+0x135004,1,
 0x13500c,3,
 0x135020,5,
-0x135038,46,
+0x135038,3,
+0x135048,43,
 0x135118,24,
 0x135200,32,
-0x1352e0,2,
-0x1352f0,4,
-0x135304,1,
-0x135314,3,
-0x135324,1,
-0x135330,4,
-0x135344,1,
-0x135354,3,
-0x135364,1,
-0x135374,3,
-0x135394,1,
-0x1353a0,2,
+0x135284,3,
+0x135294,3,
+0x1352a4,11,
 0x135400,6,
 0x135420,6,
 0x135440,6,
@@ -6668,29 +6911,42 @@
 0x1355a0,6,
 0x1355c0,6,
 0x1355e0,6,
-0x135600,3,
-0x135800,2,
+0x135600,6,
+0x135620,3,
+0x135800,4,
 0x135840,15,
 0x135880,7,
-0x1358a0,21,
-0x135c00,25,
-0x135c80,13,
-0x135cc0,15,
-0x135d00,11,
+0x1358a0,13,
+0x1358e0,7,
+0x135ab8,14,
+0x135b04,1,
+0x135b14,3,
+0x135b24,1,
+0x135b34,3,
+0x135b44,1,
+0x135b54,3,
+0x135b64,1,
+0x135b74,3,
+0x135b94,1,
+0x135ba0,2,
+0x135c00,26,
+0x135c80,14,
+0x135cc0,27,
 0x135d40,11,
 0x135d80,5,
 0x135da0,7,
 0x135dc0,7,
 0x135de0,6,
-0x135e00,11,
-0x135e40,19,
-0x135e90,6,
+0x135e00,14,
+0x135e40,13,
+0x135e80,7,
+0x135ea0,6,
 0x136000,2,
 0x136028,2,
 0x136050,2,
 0x136078,2,
-0x1360a0,7,
-0x1360c0,15,
+0x1360a0,8,
+0x1360c4,14,
 0x1361ac,1,
 0x1361d8,4,
 0x136200,6,
@@ -6699,7 +6955,9 @@
 0x136260,6,
 0x136280,3,
 0x136400,6,
-0x136420,3,
+0x136420,6,
+0x136440,3,
+0x136480,4,
 0x138000,1,
 0x138008,1,
 0x138010,14,
@@ -6707,40 +6965,47 @@
 0x138108,1,
 0x138110,14,
 0x138200,32,
-0x1382f8,34,
-0x1383f8,3,
+0x1382e0,2,
+0x138300,32,
+0x1383e0,2,
+0x138400,1,
 0x138408,1,
 0x138410,14,
 0x138500,1,
 0x138508,1,
 0x138510,14,
 0x138600,32,
-0x1386f8,34,
-0x1387f8,8,
+0x1386e0,2,
+0x138700,32,
+0x1387e0,2,
+0x138800,6,
 0x13881c,6,
-0x138a00,11,
-0x138a40,11,
-0x138a80,11,
-0x138ac0,11,
-0x138b00,2,
+0x138a00,3,
+0x138a10,3,
+0x138a40,3,
+0x138a50,3,
+0x138a80,3,
+0x138a90,3,
+0x138ac0,3,
+0x138ad0,3,
+0x138b00,3,
 0x138c04,3,
-0x138c14,12,
+0x138c14,16,
 0x138c84,1,
 0x138c8c,1,
-0x138ca0,2,
-0x138cb4,3,
-0x138e00,30,
+0x138e00,31,
 0x138e80,1,
 0x138e88,3,
-0x138f00,30,
+0x138f00,31,
 0x138f80,1,
 0x138f88,3,
 0x139000,22,
-0x139100,25,
+0x139100,26,
 0x139200,10,
-0x139240,2,
-0x139600,6,
-0x1396fc,55,
+0x139244,5,
+0x1395f8,3,
+0x139608,4,
+0x1396f4,45,
 0x139800,31,
 0x139900,31,
 0x139a00,6,
@@ -6760,28 +7025,33 @@
 0x139d74,1,
 0x139d80,20,
 0x139df4,1,
-0x139e00,16,
+0x139e00,17,
 0x13a000,3,
 0x13a010,35,
-0x13a0a0,2,
+0x13a0a0,5,
+0x13a0b8,1,
 0x13a0c0,19,
 0x13a110,35,
-0x13a1a0,2,
+0x13a1a0,5,
+0x13a1b8,1,
 0x13a1c0,16,
 0x13a204,1,
 0x13a270,36,
-0x13a304,1,
-0x13a340,48,
-0x13a404,37,
+0x13a400,4,
+0x13a418,1,
+0x13a420,9,
+0x13a464,1,
+0x13a474,9,
 0x13a4a0,6,
-0x13a4c0,3,
-0x13a500,4,
-0x13a518,1,
-0x13a520,9,
+0x13a4c0,6,
+0x13a4e0,3,
+0x13a504,1,
+0x13a50c,29,
+0x13a600,3,
 0x13a800,3,
-0x13a814,31,
-0x13a8a0,10,
-0x13a8d0,1,
+0x13a814,50,
+0x13a8e0,3,
+0x13a8f0,1,
 0x13a900,6,
 0x13a920,6,
 0x13a940,6,
@@ -6789,66 +7059,91 @@
 0x13a980,6,
 0x13a9a0,6,
 0x13a9c0,3,
-0x13aa00,7,
-0x13aa20,3,
-0x13aa30,1,
-0x13ac00,12,
-0x13ac34,22,
-0x13ad00,6,
-0x13ad20,6,
-0x13ad40,6,
-0x13ad60,6,
-0x13ad80,6,
-0x13ada0,3,
-0x13ae00,7,
-0x13ae20,3,
-0x13ae30,1,
+0x13aa00,12,
+0x13aa34,22,
+0x13aac0,7,
+0x13aae0,3,
+0x13aaf0,1,
+0x13ab00,6,
+0x13ab20,6,
+0x13ab40,6,
+0x13ab60,6,
+0x13ab80,6,
+0x13aba0,3,
+0x13ac00,13,
+0x13ac40,11,
+0x13ac80,1,
 0x13b000,6,
 0x13b020,6,
 0x13b040,3,
+0x13b060,4,
 0x13b0f0,3,
 0x13b100,6,
 0x13b120,6,
 0x13b140,3,
+0x13b160,4,
 0x13b1f0,3,
-0x13b200,5,
-0x13b218,2,
-0x13b400,6,
+0x13b200,8,
+0x13b240,13,
+0x13b3f8,8,
 0x13b420,6,
 0x13b440,3,
+0x13b460,4,
 0x13b4f0,3,
 0x13b500,6,
 0x13b520,6,
 0x13b540,3,
+0x13b560,4,
 0x13b5f0,3,
-0x13b600,5,
-0x13b618,2,
+0x13b600,8,
+0x13b640,13,
+0x13b7f8,2,
 0x13b804,1,
-0x13b820,11,
-0x13b880,1,
+0x13b820,10,
+0x13b880,2,
 0x13b904,1,
 0x13b90c,1,
 0x13b914,1,
 0x13b91c,1,
 0x13b924,1,
 0x13b92c,1,
-0x13ba00,12,
-0x13bc00,15,
+0x13ba20,9,
+0x13bb00,6,
+0x13bb20,6,
+0x13bb40,6,
+0x13bb60,6,
+0x13bb80,6,
+0x13bba0,3,
+0x13bc00,16,
+0x13bd00,30,
+0x13bd80,1,
+0x13bd88,5,
+0x13bda0,1,
+0x13bda8,2,
+0x13bdc0,10,
+0x13be00,9,
+0x13be28,2,
+0x13be40,9,
+0x13be68,2,
 0x13bf00,25,
+0x13bf70,4,
 0x13bf84,5,
-0x13bfa0,4,
-0x13c000,4,
+0x13bfa0,6,
+0x13bff8,7,
 0x13c018,3,
 0x13c028,3,
-0x13c038,22,
-0x13c094,40,
+0x13c038,63,
 0x13c140,11,
 0x13c184,10,
 0x13c1c0,22,
-0x13c220,6,
-0x13c240,5,
-0x13c260,5,
-0x13c2f8,46,
+0x13c220,1,
+0x13c228,2,
+0x13c240,1,
+0x13c248,7,
+0x13c268,7,
+0x13c288,3,
+0x13c298,2,
+0x13c2f4,46,
 0x13c3b4,1,
 0x13c3bc,1,
 0x13c3c4,1,
@@ -6856,24 +7151,25 @@
 0x13c3d4,1,
 0x13c3dc,1,
 0x13c3e4,1,
-0x13c3ec,1,
-0x13c400,9,
-0x13c440,9,
-0x13c7a0,3,
-0x13c7b0,3,
-0x13c7c0,12,
-0x13c800,4,
+0x13c3ec,15,
+0x13c440,10,
+0x13c7a0,4,
+0x13c7b8,14,
+0x13c800,5,
 0x13c818,3,
 0x13c828,3,
-0x13c838,22,
-0x13c894,40,
+0x13c838,63,
 0x13c940,11,
 0x13c984,10,
 0x13c9c0,22,
-0x13ca20,6,
-0x13ca40,5,
-0x13ca60,5,
-0x13caf8,46,
+0x13ca20,1,
+0x13ca28,2,
+0x13ca40,1,
+0x13ca48,7,
+0x13ca68,7,
+0x13ca88,3,
+0x13ca98,2,
+0x13caf4,46,
 0x13cbb4,1,
 0x13cbbc,1,
 0x13cbc4,1,
@@ -6881,30 +7177,20 @@
 0x13cbd4,1,
 0x13cbdc,1,
 0x13cbe4,1,
-0x13cbec,1,
-0x13cc00,9,
-0x13cc40,9,
-0x13cfa0,3,
-0x13cfb0,3,
-0x13cfc0,12,
-0x13d000,1,
+0x13cbec,15,
+0x13cc40,10,
+0x13cfa0,4,
+0x13cfb8,14,
+0x13d004,1,
 0x13d00c,3,
 0x13d020,5,
-0x13d038,46,
+0x13d038,3,
+0x13d048,43,
 0x13d118,24,
 0x13d200,32,
-0x13d2e0,2,
-0x13d2f0,4,
-0x13d304,1,
-0x13d314,3,
-0x13d324,1,
-0x13d330,4,
-0x13d344,1,
-0x13d354,3,
-0x13d364,1,
-0x13d374,3,
-0x13d394,1,
-0x13d3a0,2,
+0x13d284,3,
+0x13d294,3,
+0x13d2a4,11,
 0x13d400,6,
 0x13d420,6,
 0x13d440,6,
@@ -6921,29 +7207,42 @@
 0x13d5a0,6,
 0x13d5c0,6,
 0x13d5e0,6,
-0x13d600,3,
-0x13d800,2,
+0x13d600,6,
+0x13d620,3,
+0x13d800,4,
 0x13d840,15,
 0x13d880,7,
-0x13d8a0,21,
-0x13dc00,25,
-0x13dc80,13,
-0x13dcc0,15,
-0x13dd00,11,
+0x13d8a0,13,
+0x13d8e0,7,
+0x13dab8,14,
+0x13db04,1,
+0x13db14,3,
+0x13db24,1,
+0x13db34,3,
+0x13db44,1,
+0x13db54,3,
+0x13db64,1,
+0x13db74,3,
+0x13db94,1,
+0x13dba0,2,
+0x13dc00,26,
+0x13dc80,14,
+0x13dcc0,27,
 0x13dd40,11,
 0x13dd80,5,
 0x13dda0,7,
 0x13ddc0,7,
 0x13dde0,6,
-0x13de00,11,
-0x13de40,19,
-0x13de90,6,
+0x13de00,14,
+0x13de40,13,
+0x13de80,7,
+0x13dea0,6,
 0x13e000,2,
 0x13e028,2,
 0x13e050,2,
 0x13e078,2,
-0x13e0a0,7,
-0x13e0c0,15,
+0x13e0a0,8,
+0x13e0c4,14,
 0x13e1ac,1,
 0x13e1d8,4,
 0x13e200,6,
@@ -6952,7 +7251,9 @@
 0x13e260,6,
 0x13e280,3,
 0x13e400,6,
-0x13e420,3,
+0x13e420,6,
+0x13e440,3,
+0x13e480,4,
 0x140000,1,
 0x140008,1,
 0x140010,14,
@@ -6960,40 +7261,47 @@
 0x140108,1,
 0x140110,14,
 0x140200,32,
-0x1402f8,34,
-0x1403f8,3,
+0x1402e0,2,
+0x140300,32,
+0x1403e0,2,
+0x140400,1,
 0x140408,1,
 0x140410,14,
 0x140500,1,
 0x140508,1,
 0x140510,14,
 0x140600,32,
-0x1406f8,34,
-0x1407f8,8,
+0x1406e0,2,
+0x140700,32,
+0x1407e0,2,
+0x140800,6,
 0x14081c,6,
-0x140a00,11,
-0x140a40,11,
-0x140a80,11,
-0x140ac0,11,
-0x140b00,2,
+0x140a00,3,
+0x140a10,3,
+0x140a40,3,
+0x140a50,3,
+0x140a80,3,
+0x140a90,3,
+0x140ac0,3,
+0x140ad0,3,
+0x140b00,3,
 0x140c04,3,
-0x140c14,12,
+0x140c14,16,
 0x140c84,1,
 0x140c8c,1,
-0x140ca0,2,
-0x140cb4,3,
-0x140e00,30,
+0x140e00,31,
 0x140e80,1,
 0x140e88,3,
-0x140f00,30,
+0x140f00,31,
 0x140f80,1,
 0x140f88,3,
 0x141000,22,
-0x141100,25,
+0x141100,26,
 0x141200,10,
-0x141240,2,
-0x141600,6,
-0x1416fc,55,
+0x141244,5,
+0x1415f8,3,
+0x141608,4,
+0x1416f4,45,
 0x141800,31,
 0x141900,31,
 0x141a00,6,
@@ -7013,28 +7321,33 @@
 0x141d74,1,
 0x141d80,20,
 0x141df4,1,
-0x141e00,16,
+0x141e00,17,
 0x142000,3,
 0x142010,35,
-0x1420a0,2,
+0x1420a0,5,
+0x1420b8,1,
 0x1420c0,19,
 0x142110,35,
-0x1421a0,2,
+0x1421a0,5,
+0x1421b8,1,
 0x1421c0,16,
 0x142204,1,
 0x142270,36,
-0x142304,1,
-0x142340,48,
-0x142404,37,
+0x142400,4,
+0x142418,1,
+0x142420,9,
+0x142464,1,
+0x142474,9,
 0x1424a0,6,
-0x1424c0,3,
-0x142500,4,
-0x142518,1,
-0x142520,9,
+0x1424c0,6,
+0x1424e0,3,
+0x142504,1,
+0x14250c,29,
+0x142600,3,
 0x142800,3,
-0x142814,31,
-0x1428a0,10,
-0x1428d0,1,
+0x142814,50,
+0x1428e0,3,
+0x1428f0,1,
 0x142900,6,
 0x142920,6,
 0x142940,6,
@@ -7042,66 +7355,91 @@
 0x142980,6,
 0x1429a0,6,
 0x1429c0,3,
-0x142a00,7,
-0x142a20,3,
-0x142a30,1,
-0x142c00,12,
-0x142c34,22,
-0x142d00,6,
-0x142d20,6,
-0x142d40,6,
-0x142d60,6,
-0x142d80,6,
-0x142da0,3,
-0x142e00,7,
-0x142e20,3,
-0x142e30,1,
+0x142a00,12,
+0x142a34,22,
+0x142ac0,7,
+0x142ae0,3,
+0x142af0,1,
+0x142b00,6,
+0x142b20,6,
+0x142b40,6,
+0x142b60,6,
+0x142b80,6,
+0x142ba0,3,
+0x142c00,13,
+0x142c40,11,
+0x142c80,1,
 0x143000,6,
 0x143020,6,
 0x143040,3,
+0x143060,4,
 0x1430f0,3,
 0x143100,6,
 0x143120,6,
 0x143140,3,
+0x143160,4,
 0x1431f0,3,
-0x143200,5,
-0x143218,2,
-0x143400,6,
+0x143200,8,
+0x143240,13,
+0x1433f8,8,
 0x143420,6,
 0x143440,3,
+0x143460,4,
 0x1434f0,3,
 0x143500,6,
 0x143520,6,
 0x143540,3,
+0x143560,4,
 0x1435f0,3,
-0x143600,5,
-0x143618,2,
+0x143600,8,
+0x143640,13,
+0x1437f8,2,
 0x143804,1,
-0x143820,11,
-0x143880,1,
+0x143820,10,
+0x143880,2,
 0x143904,1,
 0x14390c,1,
 0x143914,1,
 0x14391c,1,
 0x143924,1,
 0x14392c,1,
-0x143a00,12,
-0x143c00,15,
+0x143a20,9,
+0x143b00,6,
+0x143b20,6,
+0x143b40,6,
+0x143b60,6,
+0x143b80,6,
+0x143ba0,3,
+0x143c00,16,
+0x143d00,30,
+0x143d80,1,
+0x143d88,5,
+0x143da0,1,
+0x143da8,2,
+0x143dc0,10,
+0x143e00,9,
+0x143e28,2,
+0x143e40,9,
+0x143e68,2,
 0x143f00,25,
+0x143f70,4,
 0x143f84,5,
-0x143fa0,4,
-0x144000,4,
+0x143fa0,6,
+0x143ff8,7,
 0x144018,3,
 0x144028,3,
-0x144038,22,
-0x144094,40,
+0x144038,63,
 0x144140,11,
 0x144184,10,
 0x1441c0,22,
-0x144220,6,
-0x144240,5,
-0x144260,5,
-0x1442f8,46,
+0x144220,1,
+0x144228,2,
+0x144240,1,
+0x144248,7,
+0x144268,7,
+0x144288,3,
+0x144298,2,
+0x1442f4,46,
 0x1443b4,1,
 0x1443bc,1,
 0x1443c4,1,
@@ -7109,24 +7447,25 @@
 0x1443d4,1,
 0x1443dc,1,
 0x1443e4,1,
-0x1443ec,1,
-0x144400,9,
-0x144440,9,
-0x1447a0,3,
-0x1447b0,3,
-0x1447c0,12,
-0x144800,4,
+0x1443ec,15,
+0x144440,10,
+0x1447a0,4,
+0x1447b8,14,
+0x144800,5,
 0x144818,3,
 0x144828,3,
-0x144838,22,
-0x144894,40,
+0x144838,63,
 0x144940,11,
 0x144984,10,
 0x1449c0,22,
-0x144a20,6,
-0x144a40,5,
-0x144a60,5,
-0x144af8,46,
+0x144a20,1,
+0x144a28,2,
+0x144a40,1,
+0x144a48,7,
+0x144a68,7,
+0x144a88,3,
+0x144a98,2,
+0x144af4,46,
 0x144bb4,1,
 0x144bbc,1,
 0x144bc4,1,
@@ -7134,30 +7473,20 @@
 0x144bd4,1,
 0x144bdc,1,
 0x144be4,1,
-0x144bec,1,
-0x144c00,9,
-0x144c40,9,
-0x144fa0,3,
-0x144fb0,3,
-0x144fc0,12,
-0x145000,1,
+0x144bec,15,
+0x144c40,10,
+0x144fa0,4,
+0x144fb8,14,
+0x145004,1,
 0x14500c,3,
 0x145020,5,
-0x145038,46,
+0x145038,3,
+0x145048,43,
 0x145118,24,
 0x145200,32,
-0x1452e0,2,
-0x1452f0,4,
-0x145304,1,
-0x145314,3,
-0x145324,1,
-0x145330,4,
-0x145344,1,
-0x145354,3,
-0x145364,1,
-0x145374,3,
-0x145394,1,
-0x1453a0,2,
+0x145284,3,
+0x145294,3,
+0x1452a4,11,
 0x145400,6,
 0x145420,6,
 0x145440,6,
@@ -7174,29 +7503,42 @@
 0x1455a0,6,
 0x1455c0,6,
 0x1455e0,6,
-0x145600,3,
-0x145800,2,
+0x145600,6,
+0x145620,3,
+0x145800,4,
 0x145840,15,
 0x145880,7,
-0x1458a0,21,
-0x145c00,25,
-0x145c80,13,
-0x145cc0,15,
-0x145d00,11,
+0x1458a0,13,
+0x1458e0,7,
+0x145ab8,14,
+0x145b04,1,
+0x145b14,3,
+0x145b24,1,
+0x145b34,3,
+0x145b44,1,
+0x145b54,3,
+0x145b64,1,
+0x145b74,3,
+0x145b94,1,
+0x145ba0,2,
+0x145c00,26,
+0x145c80,14,
+0x145cc0,27,
 0x145d40,11,
 0x145d80,5,
 0x145da0,7,
 0x145dc0,7,
 0x145de0,6,
-0x145e00,11,
-0x145e40,19,
-0x145e90,6,
+0x145e00,14,
+0x145e40,13,
+0x145e80,7,
+0x145ea0,6,
 0x146000,2,
 0x146028,2,
 0x146050,2,
 0x146078,2,
-0x1460a0,7,
-0x1460c0,15,
+0x1460a0,8,
+0x1460c4,14,
 0x1461ac,1,
 0x1461d8,4,
 0x146200,6,
@@ -7205,7 +7547,9 @@
 0x146260,6,
 0x146280,3,
 0x146400,6,
-0x146420,3,
+0x146420,6,
+0x146440,3,
+0x146480,4,
 0x148000,1,
 0x148008,1,
 0x148010,14,
@@ -7213,40 +7557,47 @@
 0x148108,1,
 0x148110,14,
 0x148200,32,
-0x1482f8,34,
-0x1483f8,3,
+0x1482e0,2,
+0x148300,32,
+0x1483e0,2,
+0x148400,1,
 0x148408,1,
 0x148410,14,
 0x148500,1,
 0x148508,1,
 0x148510,14,
 0x148600,32,
-0x1486f8,34,
-0x1487f8,8,
+0x1486e0,2,
+0x148700,32,
+0x1487e0,2,
+0x148800,6,
 0x14881c,6,
-0x148a00,11,
-0x148a40,11,
-0x148a80,11,
-0x148ac0,11,
-0x148b00,2,
+0x148a00,3,
+0x148a10,3,
+0x148a40,3,
+0x148a50,3,
+0x148a80,3,
+0x148a90,3,
+0x148ac0,3,
+0x148ad0,3,
+0x148b00,3,
 0x148c04,3,
-0x148c14,12,
+0x148c14,16,
 0x148c84,1,
 0x148c8c,1,
-0x148ca0,2,
-0x148cb4,3,
-0x148e00,30,
+0x148e00,31,
 0x148e80,1,
 0x148e88,3,
-0x148f00,30,
+0x148f00,31,
 0x148f80,1,
 0x148f88,3,
 0x149000,22,
-0x149100,25,
+0x149100,26,
 0x149200,10,
-0x149240,2,
-0x149600,6,
-0x1496fc,55,
+0x149244,5,
+0x1495f8,3,
+0x149608,4,
+0x1496f4,45,
 0x149800,31,
 0x149900,31,
 0x149a00,6,
@@ -7266,28 +7617,33 @@
 0x149d74,1,
 0x149d80,20,
 0x149df4,1,
-0x149e00,16,
+0x149e00,17,
 0x14a000,3,
 0x14a010,35,
-0x14a0a0,2,
+0x14a0a0,5,
+0x14a0b8,1,
 0x14a0c0,19,
 0x14a110,35,
-0x14a1a0,2,
+0x14a1a0,5,
+0x14a1b8,1,
 0x14a1c0,16,
 0x14a204,1,
 0x14a270,36,
-0x14a304,1,
-0x14a340,48,
-0x14a404,37,
+0x14a400,4,
+0x14a418,1,
+0x14a420,9,
+0x14a464,1,
+0x14a474,9,
 0x14a4a0,6,
-0x14a4c0,3,
-0x14a500,4,
-0x14a518,1,
-0x14a520,9,
+0x14a4c0,6,
+0x14a4e0,3,
+0x14a504,1,
+0x14a50c,29,
+0x14a600,3,
 0x14a800,3,
-0x14a814,31,
-0x14a8a0,10,
-0x14a8d0,1,
+0x14a814,50,
+0x14a8e0,3,
+0x14a8f0,1,
 0x14a900,6,
 0x14a920,6,
 0x14a940,6,
@@ -7295,66 +7651,91 @@
 0x14a980,6,
 0x14a9a0,6,
 0x14a9c0,3,
-0x14aa00,7,
-0x14aa20,3,
-0x14aa30,1,
-0x14ac00,12,
-0x14ac34,22,
-0x14ad00,6,
-0x14ad20,6,
-0x14ad40,6,
-0x14ad60,6,
-0x14ad80,6,
-0x14ada0,3,
-0x14ae00,7,
-0x14ae20,3,
-0x14ae30,1,
+0x14aa00,12,
+0x14aa34,22,
+0x14aac0,7,
+0x14aae0,3,
+0x14aaf0,1,
+0x14ab00,6,
+0x14ab20,6,
+0x14ab40,6,
+0x14ab60,6,
+0x14ab80,6,
+0x14aba0,3,
+0x14ac00,13,
+0x14ac40,11,
+0x14ac80,1,
 0x14b000,6,
 0x14b020,6,
 0x14b040,3,
+0x14b060,4,
 0x14b0f0,3,
 0x14b100,6,
 0x14b120,6,
 0x14b140,3,
+0x14b160,4,
 0x14b1f0,3,
-0x14b200,5,
-0x14b218,2,
-0x14b400,6,
+0x14b200,8,
+0x14b240,13,
+0x14b3f8,8,
 0x14b420,6,
 0x14b440,3,
+0x14b460,4,
 0x14b4f0,3,
 0x14b500,6,
 0x14b520,6,
 0x14b540,3,
+0x14b560,4,
 0x14b5f0,3,
-0x14b600,5,
-0x14b618,2,
+0x14b600,8,
+0x14b640,13,
+0x14b7f8,2,
 0x14b804,1,
-0x14b820,11,
-0x14b880,1,
+0x14b820,10,
+0x14b880,2,
 0x14b904,1,
 0x14b90c,1,
 0x14b914,1,
 0x14b91c,1,
 0x14b924,1,
 0x14b92c,1,
-0x14ba00,12,
-0x14bc00,15,
+0x14ba20,9,
+0x14bb00,6,
+0x14bb20,6,
+0x14bb40,6,
+0x14bb60,6,
+0x14bb80,6,
+0x14bba0,3,
+0x14bc00,16,
+0x14bd00,30,
+0x14bd80,1,
+0x14bd88,5,
+0x14bda0,1,
+0x14bda8,2,
+0x14bdc0,10,
+0x14be00,9,
+0x14be28,2,
+0x14be40,9,
+0x14be68,2,
 0x14bf00,25,
+0x14bf70,4,
 0x14bf84,5,
-0x14bfa0,4,
-0x14c000,4,
+0x14bfa0,6,
+0x14bff8,7,
 0x14c018,3,
 0x14c028,3,
-0x14c038,22,
-0x14c094,40,
+0x14c038,63,
 0x14c140,11,
 0x14c184,10,
 0x14c1c0,22,
-0x14c220,6,
-0x14c240,5,
-0x14c260,5,
-0x14c2f8,46,
+0x14c220,1,
+0x14c228,2,
+0x14c240,1,
+0x14c248,7,
+0x14c268,7,
+0x14c288,3,
+0x14c298,2,
+0x14c2f4,46,
 0x14c3b4,1,
 0x14c3bc,1,
 0x14c3c4,1,
@@ -7362,24 +7743,25 @@
 0x14c3d4,1,
 0x14c3dc,1,
 0x14c3e4,1,
-0x14c3ec,1,
-0x14c400,9,
-0x14c440,9,
-0x14c7a0,3,
-0x14c7b0,3,
-0x14c7c0,12,
-0x14c800,4,
+0x14c3ec,15,
+0x14c440,10,
+0x14c7a0,4,
+0x14c7b8,14,
+0x14c800,5,
 0x14c818,3,
 0x14c828,3,
-0x14c838,22,
-0x14c894,40,
+0x14c838,63,
 0x14c940,11,
 0x14c984,10,
 0x14c9c0,22,
-0x14ca20,6,
-0x14ca40,5,
-0x14ca60,5,
-0x14caf8,46,
+0x14ca20,1,
+0x14ca28,2,
+0x14ca40,1,
+0x14ca48,7,
+0x14ca68,7,
+0x14ca88,3,
+0x14ca98,2,
+0x14caf4,46,
 0x14cbb4,1,
 0x14cbbc,1,
 0x14cbc4,1,
@@ -7387,30 +7769,20 @@
 0x14cbd4,1,
 0x14cbdc,1,
 0x14cbe4,1,
-0x14cbec,1,
-0x14cc00,9,
-0x14cc40,9,
-0x14cfa0,3,
-0x14cfb0,3,
-0x14cfc0,12,
-0x14d000,1,
+0x14cbec,15,
+0x14cc40,10,
+0x14cfa0,4,
+0x14cfb8,14,
+0x14d004,1,
 0x14d00c,3,
 0x14d020,5,
-0x14d038,46,
+0x14d038,3,
+0x14d048,43,
 0x14d118,24,
 0x14d200,32,
-0x14d2e0,2,
-0x14d2f0,4,
-0x14d304,1,
-0x14d314,3,
-0x14d324,1,
-0x14d330,4,
-0x14d344,1,
-0x14d354,3,
-0x14d364,1,
-0x14d374,3,
-0x14d394,1,
-0x14d3a0,2,
+0x14d284,3,
+0x14d294,3,
+0x14d2a4,11,
 0x14d400,6,
 0x14d420,6,
 0x14d440,6,
@@ -7427,29 +7799,42 @@
 0x14d5a0,6,
 0x14d5c0,6,
 0x14d5e0,6,
-0x14d600,3,
-0x14d800,2,
+0x14d600,6,
+0x14d620,3,
+0x14d800,4,
 0x14d840,15,
 0x14d880,7,
-0x14d8a0,21,
-0x14dc00,25,
-0x14dc80,13,
-0x14dcc0,15,
-0x14dd00,11,
+0x14d8a0,13,
+0x14d8e0,7,
+0x14dab8,14,
+0x14db04,1,
+0x14db14,3,
+0x14db24,1,
+0x14db34,3,
+0x14db44,1,
+0x14db54,3,
+0x14db64,1,
+0x14db74,3,
+0x14db94,1,
+0x14dba0,2,
+0x14dc00,26,
+0x14dc80,14,
+0x14dcc0,27,
 0x14dd40,11,
 0x14dd80,5,
 0x14dda0,7,
 0x14ddc0,7,
 0x14dde0,6,
-0x14de00,11,
-0x14de40,19,
-0x14de90,6,
+0x14de00,14,
+0x14de40,13,
+0x14de80,7,
+0x14dea0,6,
 0x14e000,2,
 0x14e028,2,
 0x14e050,2,
 0x14e078,2,
-0x14e0a0,7,
-0x14e0c0,15,
+0x14e0a0,8,
+0x14e0c4,14,
 0x14e1ac,1,
 0x14e1d8,4,
 0x14e200,6,
@@ -7458,7 +7843,9 @@
 0x14e260,6,
 0x14e280,3,
 0x14e400,6,
-0x14e420,3,
+0x14e420,6,
+0x14e440,3,
+0x14e480,4,
 0x150000,1,
 0x150008,1,
 0x150010,14,
@@ -7466,40 +7853,47 @@
 0x150108,1,
 0x150110,14,
 0x150200,32,
-0x1502f8,34,
-0x1503f8,3,
+0x1502e0,2,
+0x150300,32,
+0x1503e0,2,
+0x150400,1,
 0x150408,1,
 0x150410,14,
 0x150500,1,
 0x150508,1,
 0x150510,14,
 0x150600,32,
-0x1506f8,34,
-0x1507f8,8,
+0x1506e0,2,
+0x150700,32,
+0x1507e0,2,
+0x150800,6,
 0x15081c,6,
-0x150a00,11,
-0x150a40,11,
-0x150a80,11,
-0x150ac0,11,
-0x150b00,2,
+0x150a00,3,
+0x150a10,3,
+0x150a40,3,
+0x150a50,3,
+0x150a80,3,
+0x150a90,3,
+0x150ac0,3,
+0x150ad0,3,
+0x150b00,3,
 0x150c04,3,
-0x150c14,12,
+0x150c14,16,
 0x150c84,1,
 0x150c8c,1,
-0x150ca0,2,
-0x150cb4,3,
-0x150e00,30,
+0x150e00,31,
 0x150e80,1,
 0x150e88,3,
-0x150f00,30,
+0x150f00,31,
 0x150f80,1,
 0x150f88,3,
 0x151000,22,
-0x151100,25,
+0x151100,26,
 0x151200,10,
-0x151240,2,
-0x151600,6,
-0x1516fc,55,
+0x151244,5,
+0x1515f8,3,
+0x151608,4,
+0x1516f4,45,
 0x151800,31,
 0x151900,31,
 0x151a00,6,
@@ -7519,28 +7913,33 @@
 0x151d74,1,
 0x151d80,20,
 0x151df4,1,
-0x151e00,16,
+0x151e00,17,
 0x152000,3,
 0x152010,35,
-0x1520a0,2,
+0x1520a0,5,
+0x1520b8,1,
 0x1520c0,19,
 0x152110,35,
-0x1521a0,2,
+0x1521a0,5,
+0x1521b8,1,
 0x1521c0,16,
 0x152204,1,
 0x152270,36,
-0x152304,1,
-0x152340,48,
-0x152404,37,
+0x152400,4,
+0x152418,1,
+0x152420,9,
+0x152464,1,
+0x152474,9,
 0x1524a0,6,
-0x1524c0,3,
-0x152500,4,
-0x152518,1,
-0x152520,9,
+0x1524c0,6,
+0x1524e0,3,
+0x152504,1,
+0x15250c,29,
+0x152600,3,
 0x152800,3,
-0x152814,31,
-0x1528a0,10,
-0x1528d0,1,
+0x152814,50,
+0x1528e0,3,
+0x1528f0,1,
 0x152900,6,
 0x152920,6,
 0x152940,6,
@@ -7548,66 +7947,91 @@
 0x152980,6,
 0x1529a0,6,
 0x1529c0,3,
-0x152a00,7,
-0x152a20,3,
-0x152a30,1,
-0x152c00,12,
-0x152c34,22,
-0x152d00,6,
-0x152d20,6,
-0x152d40,6,
-0x152d60,6,
-0x152d80,6,
-0x152da0,3,
-0x152e00,7,
-0x152e20,3,
-0x152e30,1,
+0x152a00,12,
+0x152a34,22,
+0x152ac0,7,
+0x152ae0,3,
+0x152af0,1,
+0x152b00,6,
+0x152b20,6,
+0x152b40,6,
+0x152b60,6,
+0x152b80,6,
+0x152ba0,3,
+0x152c00,13,
+0x152c40,11,
+0x152c80,1,
 0x153000,6,
 0x153020,6,
 0x153040,3,
+0x153060,4,
 0x1530f0,3,
 0x153100,6,
 0x153120,6,
 0x153140,3,
+0x153160,4,
 0x1531f0,3,
-0x153200,5,
-0x153218,2,
-0x153400,6,
+0x153200,8,
+0x153240,13,
+0x1533f8,8,
 0x153420,6,
 0x153440,3,
+0x153460,4,
 0x1534f0,3,
 0x153500,6,
 0x153520,6,
 0x153540,3,
+0x153560,4,
 0x1535f0,3,
-0x153600,5,
-0x153618,2,
+0x153600,8,
+0x153640,13,
+0x1537f8,2,
 0x153804,1,
-0x153820,11,
-0x153880,1,
+0x153820,10,
+0x153880,2,
 0x153904,1,
 0x15390c,1,
 0x153914,1,
 0x15391c,1,
 0x153924,1,
 0x15392c,1,
-0x153a00,12,
-0x153c00,15,
+0x153a20,9,
+0x153b00,6,
+0x153b20,6,
+0x153b40,6,
+0x153b60,6,
+0x153b80,6,
+0x153ba0,3,
+0x153c00,16,
+0x153d00,30,
+0x153d80,1,
+0x153d88,5,
+0x153da0,1,
+0x153da8,2,
+0x153dc0,10,
+0x153e00,9,
+0x153e28,2,
+0x153e40,9,
+0x153e68,2,
 0x153f00,25,
+0x153f70,4,
 0x153f84,5,
-0x153fa0,4,
-0x154000,4,
+0x153fa0,6,
+0x153ff8,7,
 0x154018,3,
 0x154028,3,
-0x154038,22,
-0x154094,40,
+0x154038,63,
 0x154140,11,
 0x154184,10,
 0x1541c0,22,
-0x154220,6,
-0x154240,5,
-0x154260,5,
-0x1542f8,46,
+0x154220,1,
+0x154228,2,
+0x154240,1,
+0x154248,7,
+0x154268,7,
+0x154288,3,
+0x154298,2,
+0x1542f4,46,
 0x1543b4,1,
 0x1543bc,1,
 0x1543c4,1,
@@ -7615,24 +8039,25 @@
 0x1543d4,1,
 0x1543dc,1,
 0x1543e4,1,
-0x1543ec,1,
-0x154400,9,
-0x154440,9,
-0x1547a0,3,
-0x1547b0,3,
-0x1547c0,12,
-0x154800,4,
+0x1543ec,15,
+0x154440,10,
+0x1547a0,4,
+0x1547b8,14,
+0x154800,5,
 0x154818,3,
 0x154828,3,
-0x154838,22,
-0x154894,40,
+0x154838,63,
 0x154940,11,
 0x154984,10,
 0x1549c0,22,
-0x154a20,6,
-0x154a40,5,
-0x154a60,5,
-0x154af8,46,
+0x154a20,1,
+0x154a28,2,
+0x154a40,1,
+0x154a48,7,
+0x154a68,7,
+0x154a88,3,
+0x154a98,2,
+0x154af4,46,
 0x154bb4,1,
 0x154bbc,1,
 0x154bc4,1,
@@ -7640,30 +8065,20 @@
 0x154bd4,1,
 0x154bdc,1,
 0x154be4,1,
-0x154bec,1,
-0x154c00,9,
-0x154c40,9,
-0x154fa0,3,
-0x154fb0,3,
-0x154fc0,12,
-0x155000,1,
+0x154bec,15,
+0x154c40,10,
+0x154fa0,4,
+0x154fb8,14,
+0x155004,1,
 0x15500c,3,
 0x155020,5,
-0x155038,46,
+0x155038,3,
+0x155048,43,
 0x155118,24,
 0x155200,32,
-0x1552e0,2,
-0x1552f0,4,
-0x155304,1,
-0x155314,3,
-0x155324,1,
-0x155330,4,
-0x155344,1,
-0x155354,3,
-0x155364,1,
-0x155374,3,
-0x155394,1,
-0x1553a0,2,
+0x155284,3,
+0x155294,3,
+0x1552a4,11,
 0x155400,6,
 0x155420,6,
 0x155440,6,
@@ -7680,29 +8095,42 @@
 0x1555a0,6,
 0x1555c0,6,
 0x1555e0,6,
-0x155600,3,
-0x155800,2,
+0x155600,6,
+0x155620,3,
+0x155800,4,
 0x155840,15,
 0x155880,7,
-0x1558a0,21,
-0x155c00,25,
-0x155c80,13,
-0x155cc0,15,
-0x155d00,11,
+0x1558a0,13,
+0x1558e0,7,
+0x155ab8,14,
+0x155b04,1,
+0x155b14,3,
+0x155b24,1,
+0x155b34,3,
+0x155b44,1,
+0x155b54,3,
+0x155b64,1,
+0x155b74,3,
+0x155b94,1,
+0x155ba0,2,
+0x155c00,26,
+0x155c80,14,
+0x155cc0,27,
 0x155d40,11,
 0x155d80,5,
 0x155da0,7,
 0x155dc0,7,
 0x155de0,6,
-0x155e00,11,
-0x155e40,19,
-0x155e90,6,
+0x155e00,14,
+0x155e40,13,
+0x155e80,7,
+0x155ea0,6,
 0x156000,2,
 0x156028,2,
 0x156050,2,
 0x156078,2,
-0x1560a0,7,
-0x1560c0,15,
+0x1560a0,8,
+0x1560c4,14,
 0x1561ac,1,
 0x1561d8,4,
 0x156200,6,
@@ -7711,7 +8139,9 @@
 0x156260,6,
 0x156280,3,
 0x156400,6,
-0x156420,3,
+0x156420,6,
+0x156440,3,
+0x156480,4,
 0x158000,1,
 0x158008,1,
 0x158010,14,
@@ -7719,40 +8149,47 @@
 0x158108,1,
 0x158110,14,
 0x158200,32,
-0x1582f8,34,
-0x1583f8,3,
+0x1582e0,2,
+0x158300,32,
+0x1583e0,2,
+0x158400,1,
 0x158408,1,
 0x158410,14,
 0x158500,1,
 0x158508,1,
 0x158510,14,
 0x158600,32,
-0x1586f8,34,
-0x1587f8,8,
+0x1586e0,2,
+0x158700,32,
+0x1587e0,2,
+0x158800,6,
 0x15881c,6,
-0x158a00,11,
-0x158a40,11,
-0x158a80,11,
-0x158ac0,11,
-0x158b00,2,
+0x158a00,3,
+0x158a10,3,
+0x158a40,3,
+0x158a50,3,
+0x158a80,3,
+0x158a90,3,
+0x158ac0,3,
+0x158ad0,3,
+0x158b00,3,
 0x158c04,3,
-0x158c14,12,
+0x158c14,16,
 0x158c84,1,
 0x158c8c,1,
-0x158ca0,2,
-0x158cb4,3,
-0x158e00,30,
+0x158e00,31,
 0x158e80,1,
 0x158e88,3,
-0x158f00,30,
+0x158f00,31,
 0x158f80,1,
 0x158f88,3,
 0x159000,22,
-0x159100,25,
+0x159100,26,
 0x159200,10,
-0x159240,2,
-0x159600,6,
-0x1596fc,55,
+0x159244,5,
+0x1595f8,3,
+0x159608,4,
+0x1596f4,45,
 0x159800,31,
 0x159900,31,
 0x159a00,6,
@@ -7772,28 +8209,33 @@
 0x159d74,1,
 0x159d80,20,
 0x159df4,1,
-0x159e00,16,
+0x159e00,17,
 0x15a000,3,
 0x15a010,35,
-0x15a0a0,2,
+0x15a0a0,5,
+0x15a0b8,1,
 0x15a0c0,19,
 0x15a110,35,
-0x15a1a0,2,
+0x15a1a0,5,
+0x15a1b8,1,
 0x15a1c0,16,
 0x15a204,1,
 0x15a270,36,
-0x15a304,1,
-0x15a340,48,
-0x15a404,37,
+0x15a400,4,
+0x15a418,1,
+0x15a420,9,
+0x15a464,1,
+0x15a474,9,
 0x15a4a0,6,
-0x15a4c0,3,
-0x15a500,4,
-0x15a518,1,
-0x15a520,9,
+0x15a4c0,6,
+0x15a4e0,3,
+0x15a504,1,
+0x15a50c,29,
+0x15a600,3,
 0x15a800,3,
-0x15a814,31,
-0x15a8a0,10,
-0x15a8d0,1,
+0x15a814,50,
+0x15a8e0,3,
+0x15a8f0,1,
 0x15a900,6,
 0x15a920,6,
 0x15a940,6,
@@ -7801,66 +8243,91 @@
 0x15a980,6,
 0x15a9a0,6,
 0x15a9c0,3,
-0x15aa00,7,
-0x15aa20,3,
-0x15aa30,1,
-0x15ac00,12,
-0x15ac34,22,
-0x15ad00,6,
-0x15ad20,6,
-0x15ad40,6,
-0x15ad60,6,
-0x15ad80,6,
-0x15ada0,3,
-0x15ae00,7,
-0x15ae20,3,
-0x15ae30,1,
+0x15aa00,12,
+0x15aa34,22,
+0x15aac0,7,
+0x15aae0,3,
+0x15aaf0,1,
+0x15ab00,6,
+0x15ab20,6,
+0x15ab40,6,
+0x15ab60,6,
+0x15ab80,6,
+0x15aba0,3,
+0x15ac00,13,
+0x15ac40,11,
+0x15ac80,1,
 0x15b000,6,
 0x15b020,6,
 0x15b040,3,
+0x15b060,4,
 0x15b0f0,3,
 0x15b100,6,
 0x15b120,6,
 0x15b140,3,
+0x15b160,4,
 0x15b1f0,3,
-0x15b200,5,
-0x15b218,2,
-0x15b400,6,
+0x15b200,8,
+0x15b240,13,
+0x15b3f8,8,
 0x15b420,6,
 0x15b440,3,
+0x15b460,4,
 0x15b4f0,3,
 0x15b500,6,
 0x15b520,6,
 0x15b540,3,
+0x15b560,4,
 0x15b5f0,3,
-0x15b600,5,
-0x15b618,2,
+0x15b600,8,
+0x15b640,13,
+0x15b7f8,2,
 0x15b804,1,
-0x15b820,11,
-0x15b880,1,
+0x15b820,10,
+0x15b880,2,
 0x15b904,1,
 0x15b90c,1,
 0x15b914,1,
 0x15b91c,1,
 0x15b924,1,
 0x15b92c,1,
-0x15ba00,12,
-0x15bc00,15,
+0x15ba20,9,
+0x15bb00,6,
+0x15bb20,6,
+0x15bb40,6,
+0x15bb60,6,
+0x15bb80,6,
+0x15bba0,3,
+0x15bc00,16,
+0x15bd00,30,
+0x15bd80,1,
+0x15bd88,5,
+0x15bda0,1,
+0x15bda8,2,
+0x15bdc0,10,
+0x15be00,9,
+0x15be28,2,
+0x15be40,9,
+0x15be68,2,
 0x15bf00,25,
+0x15bf70,4,
 0x15bf84,5,
-0x15bfa0,4,
-0x15c000,4,
+0x15bfa0,6,
+0x15bff8,7,
 0x15c018,3,
 0x15c028,3,
-0x15c038,22,
-0x15c094,40,
+0x15c038,63,
 0x15c140,11,
 0x15c184,10,
 0x15c1c0,22,
-0x15c220,6,
-0x15c240,5,
-0x15c260,5,
-0x15c2f8,46,
+0x15c220,1,
+0x15c228,2,
+0x15c240,1,
+0x15c248,7,
+0x15c268,7,
+0x15c288,3,
+0x15c298,2,
+0x15c2f4,46,
 0x15c3b4,1,
 0x15c3bc,1,
 0x15c3c4,1,
@@ -7868,24 +8335,25 @@
 0x15c3d4,1,
 0x15c3dc,1,
 0x15c3e4,1,
-0x15c3ec,1,
-0x15c400,9,
-0x15c440,9,
-0x15c7a0,3,
-0x15c7b0,3,
-0x15c7c0,12,
-0x15c800,4,
+0x15c3ec,15,
+0x15c440,10,
+0x15c7a0,4,
+0x15c7b8,14,
+0x15c800,5,
 0x15c818,3,
 0x15c828,3,
-0x15c838,22,
-0x15c894,40,
+0x15c838,63,
 0x15c940,11,
 0x15c984,10,
 0x15c9c0,22,
-0x15ca20,6,
-0x15ca40,5,
-0x15ca60,5,
-0x15caf8,46,
+0x15ca20,1,
+0x15ca28,2,
+0x15ca40,1,
+0x15ca48,7,
+0x15ca68,7,
+0x15ca88,3,
+0x15ca98,2,
+0x15caf4,46,
 0x15cbb4,1,
 0x15cbbc,1,
 0x15cbc4,1,
@@ -7893,30 +8361,20 @@
 0x15cbd4,1,
 0x15cbdc,1,
 0x15cbe4,1,
-0x15cbec,1,
-0x15cc00,9,
-0x15cc40,9,
-0x15cfa0,3,
-0x15cfb0,3,
-0x15cfc0,12,
-0x15d000,1,
+0x15cbec,15,
+0x15cc40,10,
+0x15cfa0,4,
+0x15cfb8,14,
+0x15d004,1,
 0x15d00c,3,
 0x15d020,5,
-0x15d038,46,
+0x15d038,3,
+0x15d048,43,
 0x15d118,24,
 0x15d200,32,
-0x15d2e0,2,
-0x15d2f0,4,
-0x15d304,1,
-0x15d314,3,
-0x15d324,1,
-0x15d330,4,
-0x15d344,1,
-0x15d354,3,
-0x15d364,1,
-0x15d374,3,
-0x15d394,1,
-0x15d3a0,2,
+0x15d284,3,
+0x15d294,3,
+0x15d2a4,11,
 0x15d400,6,
 0x15d420,6,
 0x15d440,6,
@@ -7933,29 +8391,42 @@
 0x15d5a0,6,
 0x15d5c0,6,
 0x15d5e0,6,
-0x15d600,3,
-0x15d800,2,
+0x15d600,6,
+0x15d620,3,
+0x15d800,4,
 0x15d840,15,
 0x15d880,7,
-0x15d8a0,21,
-0x15dc00,25,
-0x15dc80,13,
-0x15dcc0,15,
-0x15dd00,11,
+0x15d8a0,13,
+0x15d8e0,7,
+0x15dab8,14,
+0x15db04,1,
+0x15db14,3,
+0x15db24,1,
+0x15db34,3,
+0x15db44,1,
+0x15db54,3,
+0x15db64,1,
+0x15db74,3,
+0x15db94,1,
+0x15dba0,2,
+0x15dc00,26,
+0x15dc80,14,
+0x15dcc0,27,
 0x15dd40,11,
 0x15dd80,5,
 0x15dda0,7,
 0x15ddc0,7,
 0x15dde0,6,
-0x15de00,11,
-0x15de40,19,
-0x15de90,6,
+0x15de00,14,
+0x15de40,13,
+0x15de80,7,
+0x15dea0,6,
 0x15e000,2,
 0x15e028,2,
 0x15e050,2,
 0x15e078,2,
-0x15e0a0,7,
-0x15e0c0,15,
+0x15e0a0,8,
+0x15e0c4,14,
 0x15e1ac,1,
 0x15e1d8,4,
 0x15e200,6,
@@ -7964,7 +8435,9 @@
 0x15e260,6,
 0x15e280,3,
 0x15e400,6,
-0x15e420,3,
+0x15e420,6,
+0x15e440,3,
+0x15e480,4,
 0x160000,1,
 0x160008,1,
 0x160010,14,
@@ -7972,40 +8445,47 @@
 0x160108,1,
 0x160110,14,
 0x160200,32,
-0x1602f8,34,
-0x1603f8,3,
+0x1602e0,2,
+0x160300,32,
+0x1603e0,2,
+0x160400,1,
 0x160408,1,
 0x160410,14,
 0x160500,1,
 0x160508,1,
 0x160510,14,
 0x160600,32,
-0x1606f8,34,
-0x1607f8,8,
+0x1606e0,2,
+0x160700,32,
+0x1607e0,2,
+0x160800,6,
 0x16081c,6,
-0x160a00,11,
-0x160a40,11,
-0x160a80,11,
-0x160ac0,11,
-0x160b00,2,
+0x160a00,3,
+0x160a10,3,
+0x160a40,3,
+0x160a50,3,
+0x160a80,3,
+0x160a90,3,
+0x160ac0,3,
+0x160ad0,3,
+0x160b00,3,
 0x160c04,3,
-0x160c14,12,
+0x160c14,16,
 0x160c84,1,
 0x160c8c,1,
-0x160ca0,2,
-0x160cb4,3,
-0x160e00,30,
+0x160e00,31,
 0x160e80,1,
 0x160e88,3,
-0x160f00,30,
+0x160f00,31,
 0x160f80,1,
 0x160f88,3,
 0x161000,22,
-0x161100,25,
+0x161100,26,
 0x161200,10,
-0x161240,2,
-0x161600,6,
-0x1616fc,55,
+0x161244,5,
+0x1615f8,3,
+0x161608,4,
+0x1616f4,45,
 0x161800,31,
 0x161900,31,
 0x161a00,6,
@@ -8025,28 +8505,33 @@
 0x161d74,1,
 0x161d80,20,
 0x161df4,1,
-0x161e00,16,
+0x161e00,17,
 0x162000,3,
 0x162010,35,
-0x1620a0,2,
+0x1620a0,5,
+0x1620b8,1,
 0x1620c0,19,
 0x162110,35,
-0x1621a0,2,
+0x1621a0,5,
+0x1621b8,1,
 0x1621c0,16,
 0x162204,1,
 0x162270,36,
-0x162304,1,
-0x162340,48,
-0x162404,37,
+0x162400,4,
+0x162418,1,
+0x162420,9,
+0x162464,1,
+0x162474,9,
 0x1624a0,6,
-0x1624c0,3,
-0x162500,4,
-0x162518,1,
-0x162520,9,
+0x1624c0,6,
+0x1624e0,3,
+0x162504,1,
+0x16250c,29,
+0x162600,3,
 0x162800,3,
-0x162814,31,
-0x1628a0,10,
-0x1628d0,1,
+0x162814,50,
+0x1628e0,3,
+0x1628f0,1,
 0x162900,6,
 0x162920,6,
 0x162940,6,
@@ -8054,66 +8539,91 @@
 0x162980,6,
 0x1629a0,6,
 0x1629c0,3,
-0x162a00,7,
-0x162a20,3,
-0x162a30,1,
-0x162c00,12,
-0x162c34,22,
-0x162d00,6,
-0x162d20,6,
-0x162d40,6,
-0x162d60,6,
-0x162d80,6,
-0x162da0,3,
-0x162e00,7,
-0x162e20,3,
-0x162e30,1,
+0x162a00,12,
+0x162a34,22,
+0x162ac0,7,
+0x162ae0,3,
+0x162af0,1,
+0x162b00,6,
+0x162b20,6,
+0x162b40,6,
+0x162b60,6,
+0x162b80,6,
+0x162ba0,3,
+0x162c00,13,
+0x162c40,11,
+0x162c80,1,
 0x163000,6,
 0x163020,6,
 0x163040,3,
+0x163060,4,
 0x1630f0,3,
 0x163100,6,
 0x163120,6,
 0x163140,3,
+0x163160,4,
 0x1631f0,3,
-0x163200,5,
-0x163218,2,
-0x163400,6,
+0x163200,8,
+0x163240,13,
+0x1633f8,8,
 0x163420,6,
 0x163440,3,
+0x163460,4,
 0x1634f0,3,
 0x163500,6,
 0x163520,6,
 0x163540,3,
+0x163560,4,
 0x1635f0,3,
-0x163600,5,
-0x163618,2,
+0x163600,8,
+0x163640,13,
+0x1637f8,2,
 0x163804,1,
-0x163820,11,
-0x163880,1,
+0x163820,10,
+0x163880,2,
 0x163904,1,
 0x16390c,1,
 0x163914,1,
 0x16391c,1,
 0x163924,1,
 0x16392c,1,
-0x163a00,12,
-0x163c00,15,
+0x163a20,9,
+0x163b00,6,
+0x163b20,6,
+0x163b40,6,
+0x163b60,6,
+0x163b80,6,
+0x163ba0,3,
+0x163c00,16,
+0x163d00,30,
+0x163d80,1,
+0x163d88,5,
+0x163da0,1,
+0x163da8,2,
+0x163dc0,10,
+0x163e00,9,
+0x163e28,2,
+0x163e40,9,
+0x163e68,2,
 0x163f00,25,
+0x163f70,4,
 0x163f84,5,
-0x163fa0,4,
-0x164000,4,
+0x163fa0,6,
+0x163ff8,7,
 0x164018,3,
 0x164028,3,
-0x164038,22,
-0x164094,40,
+0x164038,63,
 0x164140,11,
 0x164184,10,
 0x1641c0,22,
-0x164220,6,
-0x164240,5,
-0x164260,5,
-0x1642f8,46,
+0x164220,1,
+0x164228,2,
+0x164240,1,
+0x164248,7,
+0x164268,7,
+0x164288,3,
+0x164298,2,
+0x1642f4,46,
 0x1643b4,1,
 0x1643bc,1,
 0x1643c4,1,
@@ -8121,24 +8631,25 @@
 0x1643d4,1,
 0x1643dc,1,
 0x1643e4,1,
-0x1643ec,1,
-0x164400,9,
-0x164440,9,
-0x1647a0,3,
-0x1647b0,3,
-0x1647c0,12,
-0x164800,4,
+0x1643ec,15,
+0x164440,10,
+0x1647a0,4,
+0x1647b8,14,
+0x164800,5,
 0x164818,3,
 0x164828,3,
-0x164838,22,
-0x164894,40,
+0x164838,63,
 0x164940,11,
 0x164984,10,
 0x1649c0,22,
-0x164a20,6,
-0x164a40,5,
-0x164a60,5,
-0x164af8,46,
+0x164a20,1,
+0x164a28,2,
+0x164a40,1,
+0x164a48,7,
+0x164a68,7,
+0x164a88,3,
+0x164a98,2,
+0x164af4,46,
 0x164bb4,1,
 0x164bbc,1,
 0x164bc4,1,
@@ -8146,30 +8657,20 @@
 0x164bd4,1,
 0x164bdc,1,
 0x164be4,1,
-0x164bec,1,
-0x164c00,9,
-0x164c40,9,
-0x164fa0,3,
-0x164fb0,3,
-0x164fc0,12,
-0x165000,1,
+0x164bec,15,
+0x164c40,10,
+0x164fa0,4,
+0x164fb8,14,
+0x165004,1,
 0x16500c,3,
 0x165020,5,
-0x165038,46,
+0x165038,3,
+0x165048,43,
 0x165118,24,
 0x165200,32,
-0x1652e0,2,
-0x1652f0,4,
-0x165304,1,
-0x165314,3,
-0x165324,1,
-0x165330,4,
-0x165344,1,
-0x165354,3,
-0x165364,1,
-0x165374,3,
-0x165394,1,
-0x1653a0,2,
+0x165284,3,
+0x165294,3,
+0x1652a4,11,
 0x165400,6,
 0x165420,6,
 0x165440,6,
@@ -8186,29 +8687,42 @@
 0x1655a0,6,
 0x1655c0,6,
 0x1655e0,6,
-0x165600,3,
-0x165800,2,
+0x165600,6,
+0x165620,3,
+0x165800,4,
 0x165840,15,
 0x165880,7,
-0x1658a0,21,
-0x165c00,25,
-0x165c80,13,
-0x165cc0,15,
-0x165d00,11,
+0x1658a0,13,
+0x1658e0,7,
+0x165ab8,14,
+0x165b04,1,
+0x165b14,3,
+0x165b24,1,
+0x165b34,3,
+0x165b44,1,
+0x165b54,3,
+0x165b64,1,
+0x165b74,3,
+0x165b94,1,
+0x165ba0,2,
+0x165c00,26,
+0x165c80,14,
+0x165cc0,27,
 0x165d40,11,
 0x165d80,5,
 0x165da0,7,
 0x165dc0,7,
 0x165de0,6,
-0x165e00,11,
-0x165e40,19,
-0x165e90,6,
+0x165e00,14,
+0x165e40,13,
+0x165e80,7,
+0x165ea0,6,
 0x166000,2,
 0x166028,2,
 0x166050,2,
 0x166078,2,
-0x1660a0,7,
-0x1660c0,15,
+0x1660a0,8,
+0x1660c4,14,
 0x1661ac,1,
 0x1661d8,4,
 0x166200,6,
@@ -8217,7 +8731,9 @@
 0x166260,6,
 0x166280,3,
 0x166400,6,
-0x166420,3,
+0x166420,6,
+0x166440,3,
+0x166480,4,
 0x168000,1,
 0x168008,1,
 0x168010,14,
@@ -8225,40 +8741,47 @@
 0x168108,1,
 0x168110,14,
 0x168200,32,
-0x1682f8,34,
-0x1683f8,3,
+0x1682e0,2,
+0x168300,32,
+0x1683e0,2,
+0x168400,1,
 0x168408,1,
 0x168410,14,
 0x168500,1,
 0x168508,1,
 0x168510,14,
 0x168600,32,
-0x1686f8,34,
-0x1687f8,8,
+0x1686e0,2,
+0x168700,32,
+0x1687e0,2,
+0x168800,6,
 0x16881c,6,
-0x168a00,11,
-0x168a40,11,
-0x168a80,11,
-0x168ac0,11,
-0x168b00,2,
+0x168a00,3,
+0x168a10,3,
+0x168a40,3,
+0x168a50,3,
+0x168a80,3,
+0x168a90,3,
+0x168ac0,3,
+0x168ad0,3,
+0x168b00,3,
 0x168c04,3,
-0x168c14,12,
+0x168c14,16,
 0x168c84,1,
 0x168c8c,1,
-0x168ca0,2,
-0x168cb4,3,
-0x168e00,30,
+0x168e00,31,
 0x168e80,1,
 0x168e88,3,
-0x168f00,30,
+0x168f00,31,
 0x168f80,1,
 0x168f88,3,
 0x169000,22,
-0x169100,25,
+0x169100,26,
 0x169200,10,
-0x169240,2,
-0x169600,6,
-0x1696fc,55,
+0x169244,5,
+0x1695f8,3,
+0x169608,4,
+0x1696f4,45,
 0x169800,31,
 0x169900,31,
 0x169a00,6,
@@ -8278,28 +8801,33 @@
 0x169d74,1,
 0x169d80,20,
 0x169df4,1,
-0x169e00,16,
+0x169e00,17,
 0x16a000,3,
 0x16a010,35,
-0x16a0a0,2,
+0x16a0a0,5,
+0x16a0b8,1,
 0x16a0c0,19,
 0x16a110,35,
-0x16a1a0,2,
+0x16a1a0,5,
+0x16a1b8,1,
 0x16a1c0,16,
 0x16a204,1,
 0x16a270,36,
-0x16a304,1,
-0x16a340,48,
-0x16a404,37,
+0x16a400,4,
+0x16a418,1,
+0x16a420,9,
+0x16a464,1,
+0x16a474,9,
 0x16a4a0,6,
-0x16a4c0,3,
-0x16a500,4,
-0x16a518,1,
-0x16a520,9,
+0x16a4c0,6,
+0x16a4e0,3,
+0x16a504,1,
+0x16a50c,29,
+0x16a600,3,
 0x16a800,3,
-0x16a814,31,
-0x16a8a0,10,
-0x16a8d0,1,
+0x16a814,50,
+0x16a8e0,3,
+0x16a8f0,1,
 0x16a900,6,
 0x16a920,6,
 0x16a940,6,
@@ -8307,66 +8835,91 @@
 0x16a980,6,
 0x16a9a0,6,
 0x16a9c0,3,
-0x16aa00,7,
-0x16aa20,3,
-0x16aa30,1,
-0x16ac00,12,
-0x16ac34,22,
-0x16ad00,6,
-0x16ad20,6,
-0x16ad40,6,
-0x16ad60,6,
-0x16ad80,6,
-0x16ada0,3,
-0x16ae00,7,
-0x16ae20,3,
-0x16ae30,1,
+0x16aa00,12,
+0x16aa34,22,
+0x16aac0,7,
+0x16aae0,3,
+0x16aaf0,1,
+0x16ab00,6,
+0x16ab20,6,
+0x16ab40,6,
+0x16ab60,6,
+0x16ab80,6,
+0x16aba0,3,
+0x16ac00,13,
+0x16ac40,11,
+0x16ac80,1,
 0x16b000,6,
 0x16b020,6,
 0x16b040,3,
+0x16b060,4,
 0x16b0f0,3,
 0x16b100,6,
 0x16b120,6,
 0x16b140,3,
+0x16b160,4,
 0x16b1f0,3,
-0x16b200,5,
-0x16b218,2,
-0x16b400,6,
+0x16b200,8,
+0x16b240,13,
+0x16b3f8,8,
 0x16b420,6,
 0x16b440,3,
+0x16b460,4,
 0x16b4f0,3,
 0x16b500,6,
 0x16b520,6,
 0x16b540,3,
+0x16b560,4,
 0x16b5f0,3,
-0x16b600,5,
-0x16b618,2,
+0x16b600,8,
+0x16b640,13,
+0x16b7f8,2,
 0x16b804,1,
-0x16b820,11,
-0x16b880,1,
+0x16b820,10,
+0x16b880,2,
 0x16b904,1,
 0x16b90c,1,
 0x16b914,1,
 0x16b91c,1,
 0x16b924,1,
 0x16b92c,1,
-0x16ba00,12,
-0x16bc00,15,
+0x16ba20,9,
+0x16bb00,6,
+0x16bb20,6,
+0x16bb40,6,
+0x16bb60,6,
+0x16bb80,6,
+0x16bba0,3,
+0x16bc00,16,
+0x16bd00,30,
+0x16bd80,1,
+0x16bd88,5,
+0x16bda0,1,
+0x16bda8,2,
+0x16bdc0,10,
+0x16be00,9,
+0x16be28,2,
+0x16be40,9,
+0x16be68,2,
 0x16bf00,25,
+0x16bf70,4,
 0x16bf84,5,
-0x16bfa0,4,
-0x16c000,4,
+0x16bfa0,6,
+0x16bff8,7,
 0x16c018,3,
 0x16c028,3,
-0x16c038,22,
-0x16c094,40,
+0x16c038,63,
 0x16c140,11,
 0x16c184,10,
 0x16c1c0,22,
-0x16c220,6,
-0x16c240,5,
-0x16c260,5,
-0x16c2f8,46,
+0x16c220,1,
+0x16c228,2,
+0x16c240,1,
+0x16c248,7,
+0x16c268,7,
+0x16c288,3,
+0x16c298,2,
+0x16c2f4,46,
 0x16c3b4,1,
 0x16c3bc,1,
 0x16c3c4,1,
@@ -8374,24 +8927,25 @@
 0x16c3d4,1,
 0x16c3dc,1,
 0x16c3e4,1,
-0x16c3ec,1,
-0x16c400,9,
-0x16c440,9,
-0x16c7a0,3,
-0x16c7b0,3,
-0x16c7c0,12,
-0x16c800,4,
+0x16c3ec,15,
+0x16c440,10,
+0x16c7a0,4,
+0x16c7b8,14,
+0x16c800,5,
 0x16c818,3,
 0x16c828,3,
-0x16c838,22,
-0x16c894,40,
+0x16c838,63,
 0x16c940,11,
 0x16c984,10,
 0x16c9c0,22,
-0x16ca20,6,
-0x16ca40,5,
-0x16ca60,5,
-0x16caf8,46,
+0x16ca20,1,
+0x16ca28,2,
+0x16ca40,1,
+0x16ca48,7,
+0x16ca68,7,
+0x16ca88,3,
+0x16ca98,2,
+0x16caf4,46,
 0x16cbb4,1,
 0x16cbbc,1,
 0x16cbc4,1,
@@ -8399,30 +8953,20 @@
 0x16cbd4,1,
 0x16cbdc,1,
 0x16cbe4,1,
-0x16cbec,1,
-0x16cc00,9,
-0x16cc40,9,
-0x16cfa0,3,
-0x16cfb0,3,
-0x16cfc0,12,
-0x16d000,1,
+0x16cbec,15,
+0x16cc40,10,
+0x16cfa0,4,
+0x16cfb8,14,
+0x16d004,1,
 0x16d00c,3,
 0x16d020,5,
-0x16d038,46,
+0x16d038,3,
+0x16d048,43,
 0x16d118,24,
 0x16d200,32,
-0x16d2e0,2,
-0x16d2f0,4,
-0x16d304,1,
-0x16d314,3,
-0x16d324,1,
-0x16d330,4,
-0x16d344,1,
-0x16d354,3,
-0x16d364,1,
-0x16d374,3,
-0x16d394,1,
-0x16d3a0,2,
+0x16d284,3,
+0x16d294,3,
+0x16d2a4,11,
 0x16d400,6,
 0x16d420,6,
 0x16d440,6,
@@ -8439,29 +8983,42 @@
 0x16d5a0,6,
 0x16d5c0,6,
 0x16d5e0,6,
-0x16d600,3,
-0x16d800,2,
+0x16d600,6,
+0x16d620,3,
+0x16d800,4,
 0x16d840,15,
 0x16d880,7,
-0x16d8a0,21,
-0x16dc00,25,
-0x16dc80,13,
-0x16dcc0,15,
-0x16dd00,11,
+0x16d8a0,13,
+0x16d8e0,7,
+0x16dab8,14,
+0x16db04,1,
+0x16db14,3,
+0x16db24,1,
+0x16db34,3,
+0x16db44,1,
+0x16db54,3,
+0x16db64,1,
+0x16db74,3,
+0x16db94,1,
+0x16dba0,2,
+0x16dc00,26,
+0x16dc80,14,
+0x16dcc0,27,
 0x16dd40,11,
 0x16dd80,5,
 0x16dda0,7,
 0x16ddc0,7,
 0x16dde0,6,
-0x16de00,11,
-0x16de40,19,
-0x16de90,6,
+0x16de00,14,
+0x16de40,13,
+0x16de80,7,
+0x16dea0,6,
 0x16e000,2,
 0x16e028,2,
 0x16e050,2,
 0x16e078,2,
-0x16e0a0,7,
-0x16e0c0,15,
+0x16e0a0,8,
+0x16e0c4,14,
 0x16e1ac,1,
 0x16e1d8,4,
 0x16e200,6,
@@ -8470,7 +9027,9 @@
 0x16e260,6,
 0x16e280,3,
 0x16e400,6,
-0x16e420,3,
+0x16e420,6,
+0x16e440,3,
+0x16e480,4,
 0x170000,1,
 0x170008,1,
 0x170010,14,
@@ -8478,40 +9037,47 @@
 0x170108,1,
 0x170110,14,
 0x170200,32,
-0x1702f8,34,
-0x1703f8,3,
+0x1702e0,2,
+0x170300,32,
+0x1703e0,2,
+0x170400,1,
 0x170408,1,
 0x170410,14,
 0x170500,1,
 0x170508,1,
 0x170510,14,
 0x170600,32,
-0x1706f8,34,
-0x1707f8,8,
+0x1706e0,2,
+0x170700,32,
+0x1707e0,2,
+0x170800,6,
 0x17081c,6,
-0x170a00,11,
-0x170a40,11,
-0x170a80,11,
-0x170ac0,11,
-0x170b00,2,
+0x170a00,3,
+0x170a10,3,
+0x170a40,3,
+0x170a50,3,
+0x170a80,3,
+0x170a90,3,
+0x170ac0,3,
+0x170ad0,3,
+0x170b00,3,
 0x170c04,3,
-0x170c14,12,
+0x170c14,16,
 0x170c84,1,
 0x170c8c,1,
-0x170ca0,2,
-0x170cb4,3,
-0x170e00,30,
+0x170e00,31,
 0x170e80,1,
 0x170e88,3,
-0x170f00,30,
+0x170f00,31,
 0x170f80,1,
 0x170f88,3,
 0x171000,22,
-0x171100,25,
+0x171100,26,
 0x171200,10,
-0x171240,2,
-0x171600,6,
-0x1716fc,55,
+0x171244,5,
+0x1715f8,3,
+0x171608,4,
+0x1716f4,45,
 0x171800,31,
 0x171900,31,
 0x171a00,6,
@@ -8531,28 +9097,33 @@
 0x171d74,1,
 0x171d80,20,
 0x171df4,1,
-0x171e00,16,
+0x171e00,17,
 0x172000,3,
 0x172010,35,
-0x1720a0,2,
+0x1720a0,5,
+0x1720b8,1,
 0x1720c0,19,
 0x172110,35,
-0x1721a0,2,
+0x1721a0,5,
+0x1721b8,1,
 0x1721c0,16,
 0x172204,1,
 0x172270,36,
-0x172304,1,
-0x172340,48,
-0x172404,37,
+0x172400,4,
+0x172418,1,
+0x172420,9,
+0x172464,1,
+0x172474,9,
 0x1724a0,6,
-0x1724c0,3,
-0x172500,4,
-0x172518,1,
-0x172520,9,
+0x1724c0,6,
+0x1724e0,3,
+0x172504,1,
+0x17250c,29,
+0x172600,3,
 0x172800,3,
-0x172814,31,
-0x1728a0,10,
-0x1728d0,1,
+0x172814,50,
+0x1728e0,3,
+0x1728f0,1,
 0x172900,6,
 0x172920,6,
 0x172940,6,
@@ -8560,66 +9131,91 @@
 0x172980,6,
 0x1729a0,6,
 0x1729c0,3,
-0x172a00,7,
-0x172a20,3,
-0x172a30,1,
-0x172c00,12,
-0x172c34,22,
-0x172d00,6,
-0x172d20,6,
-0x172d40,6,
-0x172d60,6,
-0x172d80,6,
-0x172da0,3,
-0x172e00,7,
-0x172e20,3,
-0x172e30,1,
+0x172a00,12,
+0x172a34,22,
+0x172ac0,7,
+0x172ae0,3,
+0x172af0,1,
+0x172b00,6,
+0x172b20,6,
+0x172b40,6,
+0x172b60,6,
+0x172b80,6,
+0x172ba0,3,
+0x172c00,13,
+0x172c40,11,
+0x172c80,1,
 0x173000,6,
 0x173020,6,
 0x173040,3,
+0x173060,4,
 0x1730f0,3,
 0x173100,6,
 0x173120,6,
 0x173140,3,
+0x173160,4,
 0x1731f0,3,
-0x173200,5,
-0x173218,2,
-0x173400,6,
+0x173200,8,
+0x173240,13,
+0x1733f8,8,
 0x173420,6,
 0x173440,3,
+0x173460,4,
 0x1734f0,3,
 0x173500,6,
 0x173520,6,
 0x173540,3,
+0x173560,4,
 0x1735f0,3,
-0x173600,5,
-0x173618,2,
+0x173600,8,
+0x173640,13,
+0x1737f8,2,
 0x173804,1,
-0x173820,11,
-0x173880,1,
+0x173820,10,
+0x173880,2,
 0x173904,1,
 0x17390c,1,
 0x173914,1,
 0x17391c,1,
 0x173924,1,
 0x17392c,1,
-0x173a00,12,
-0x173c00,15,
+0x173a20,9,
+0x173b00,6,
+0x173b20,6,
+0x173b40,6,
+0x173b60,6,
+0x173b80,6,
+0x173ba0,3,
+0x173c00,16,
+0x173d00,30,
+0x173d80,1,
+0x173d88,5,
+0x173da0,1,
+0x173da8,2,
+0x173dc0,10,
+0x173e00,9,
+0x173e28,2,
+0x173e40,9,
+0x173e68,2,
 0x173f00,25,
+0x173f70,4,
 0x173f84,5,
-0x173fa0,4,
-0x174000,4,
+0x173fa0,6,
+0x173ff8,7,
 0x174018,3,
 0x174028,3,
-0x174038,22,
-0x174094,40,
+0x174038,63,
 0x174140,11,
 0x174184,10,
 0x1741c0,22,
-0x174220,6,
-0x174240,5,
-0x174260,5,
-0x1742f8,46,
+0x174220,1,
+0x174228,2,
+0x174240,1,
+0x174248,7,
+0x174268,7,
+0x174288,3,
+0x174298,2,
+0x1742f4,46,
 0x1743b4,1,
 0x1743bc,1,
 0x1743c4,1,
@@ -8627,24 +9223,25 @@
 0x1743d4,1,
 0x1743dc,1,
 0x1743e4,1,
-0x1743ec,1,
-0x174400,9,
-0x174440,9,
-0x1747a0,3,
-0x1747b0,3,
-0x1747c0,12,
-0x174800,4,
+0x1743ec,15,
+0x174440,10,
+0x1747a0,4,
+0x1747b8,14,
+0x174800,5,
 0x174818,3,
 0x174828,3,
-0x174838,22,
-0x174894,40,
+0x174838,63,
 0x174940,11,
 0x174984,10,
 0x1749c0,22,
-0x174a20,6,
-0x174a40,5,
-0x174a60,5,
-0x174af8,46,
+0x174a20,1,
+0x174a28,2,
+0x174a40,1,
+0x174a48,7,
+0x174a68,7,
+0x174a88,3,
+0x174a98,2,
+0x174af4,46,
 0x174bb4,1,
 0x174bbc,1,
 0x174bc4,1,
@@ -8652,30 +9249,20 @@
 0x174bd4,1,
 0x174bdc,1,
 0x174be4,1,
-0x174bec,1,
-0x174c00,9,
-0x174c40,9,
-0x174fa0,3,
-0x174fb0,3,
-0x174fc0,12,
-0x175000,1,
+0x174bec,15,
+0x174c40,10,
+0x174fa0,4,
+0x174fb8,14,
+0x175004,1,
 0x17500c,3,
 0x175020,5,
-0x175038,46,
+0x175038,3,
+0x175048,43,
 0x175118,24,
 0x175200,32,
-0x1752e0,2,
-0x1752f0,4,
-0x175304,1,
-0x175314,3,
-0x175324,1,
-0x175330,4,
-0x175344,1,
-0x175354,3,
-0x175364,1,
-0x175374,3,
-0x175394,1,
-0x1753a0,2,
+0x175284,3,
+0x175294,3,
+0x1752a4,11,
 0x175400,6,
 0x175420,6,
 0x175440,6,
@@ -8692,29 +9279,42 @@
 0x1755a0,6,
 0x1755c0,6,
 0x1755e0,6,
-0x175600,3,
-0x175800,2,
+0x175600,6,
+0x175620,3,
+0x175800,4,
 0x175840,15,
 0x175880,7,
-0x1758a0,21,
-0x175c00,25,
-0x175c80,13,
-0x175cc0,15,
-0x175d00,11,
+0x1758a0,13,
+0x1758e0,7,
+0x175ab8,14,
+0x175b04,1,
+0x175b14,3,
+0x175b24,1,
+0x175b34,3,
+0x175b44,1,
+0x175b54,3,
+0x175b64,1,
+0x175b74,3,
+0x175b94,1,
+0x175ba0,2,
+0x175c00,26,
+0x175c80,14,
+0x175cc0,27,
 0x175d40,11,
 0x175d80,5,
 0x175da0,7,
 0x175dc0,7,
 0x175de0,6,
-0x175e00,11,
-0x175e40,19,
-0x175e90,6,
+0x175e00,14,
+0x175e40,13,
+0x175e80,7,
+0x175ea0,6,
 0x176000,2,
 0x176028,2,
 0x176050,2,
 0x176078,2,
-0x1760a0,7,
-0x1760c0,15,
+0x1760a0,8,
+0x1760c4,14,
 0x1761ac,1,
 0x1761d8,4,
 0x176200,6,
@@ -8723,7 +9323,9 @@
 0x176260,6,
 0x176280,3,
 0x176400,6,
-0x176420,3,
+0x176420,6,
+0x176440,3,
+0x176480,4,
 0x178000,1,
 0x178008,1,
 0x178010,14,
@@ -8731,40 +9333,47 @@
 0x178108,1,
 0x178110,14,
 0x178200,32,
-0x1782f8,34,
-0x1783f8,3,
+0x1782e0,2,
+0x178300,32,
+0x1783e0,2,
+0x178400,1,
 0x178408,1,
 0x178410,14,
 0x178500,1,
 0x178508,1,
 0x178510,14,
 0x178600,32,
-0x1786f8,34,
-0x1787f8,8,
+0x1786e0,2,
+0x178700,32,
+0x1787e0,2,
+0x178800,6,
 0x17881c,6,
-0x178a00,11,
-0x178a40,11,
-0x178a80,11,
-0x178ac0,11,
-0x178b00,2,
+0x178a00,3,
+0x178a10,3,
+0x178a40,3,
+0x178a50,3,
+0x178a80,3,
+0x178a90,3,
+0x178ac0,3,
+0x178ad0,3,
+0x178b00,3,
 0x178c04,3,
-0x178c14,12,
+0x178c14,16,
 0x178c84,1,
 0x178c8c,1,
-0x178ca0,2,
-0x178cb4,3,
-0x178e00,30,
+0x178e00,31,
 0x178e80,1,
 0x178e88,3,
-0x178f00,30,
+0x178f00,31,
 0x178f80,1,
 0x178f88,3,
 0x179000,22,
-0x179100,25,
+0x179100,26,
 0x179200,10,
-0x179240,2,
-0x179600,6,
-0x1796fc,55,
+0x179244,5,
+0x1795f8,3,
+0x179608,4,
+0x1796f4,45,
 0x179800,31,
 0x179900,31,
 0x179a00,6,
@@ -8784,28 +9393,33 @@
 0x179d74,1,
 0x179d80,20,
 0x179df4,1,
-0x179e00,16,
+0x179e00,17,
 0x17a000,3,
 0x17a010,35,
-0x17a0a0,2,
+0x17a0a0,5,
+0x17a0b8,1,
 0x17a0c0,19,
 0x17a110,35,
-0x17a1a0,2,
+0x17a1a0,5,
+0x17a1b8,1,
 0x17a1c0,16,
 0x17a204,1,
 0x17a270,36,
-0x17a304,1,
-0x17a340,48,
-0x17a404,37,
+0x17a400,4,
+0x17a418,1,
+0x17a420,9,
+0x17a464,1,
+0x17a474,9,
 0x17a4a0,6,
-0x17a4c0,3,
-0x17a500,4,
-0x17a518,1,
-0x17a520,9,
+0x17a4c0,6,
+0x17a4e0,3,
+0x17a504,1,
+0x17a50c,29,
+0x17a600,3,
 0x17a800,3,
-0x17a814,31,
-0x17a8a0,10,
-0x17a8d0,1,
+0x17a814,50,
+0x17a8e0,3,
+0x17a8f0,1,
 0x17a900,6,
 0x17a920,6,
 0x17a940,6,
@@ -8813,66 +9427,91 @@
 0x17a980,6,
 0x17a9a0,6,
 0x17a9c0,3,
-0x17aa00,7,
-0x17aa20,3,
-0x17aa30,1,
-0x17ac00,12,
-0x17ac34,22,
-0x17ad00,6,
-0x17ad20,6,
-0x17ad40,6,
-0x17ad60,6,
-0x17ad80,6,
-0x17ada0,3,
-0x17ae00,7,
-0x17ae20,3,
-0x17ae30,1,
+0x17aa00,12,
+0x17aa34,22,
+0x17aac0,7,
+0x17aae0,3,
+0x17aaf0,1,
+0x17ab00,6,
+0x17ab20,6,
+0x17ab40,6,
+0x17ab60,6,
+0x17ab80,6,
+0x17aba0,3,
+0x17ac00,13,
+0x17ac40,11,
+0x17ac80,1,
 0x17b000,6,
 0x17b020,6,
 0x17b040,3,
+0x17b060,4,
 0x17b0f0,3,
 0x17b100,6,
 0x17b120,6,
 0x17b140,3,
+0x17b160,4,
 0x17b1f0,3,
-0x17b200,5,
-0x17b218,2,
-0x17b400,6,
+0x17b200,8,
+0x17b240,13,
+0x17b3f8,8,
 0x17b420,6,
 0x17b440,3,
+0x17b460,4,
 0x17b4f0,3,
 0x17b500,6,
 0x17b520,6,
 0x17b540,3,
+0x17b560,4,
 0x17b5f0,3,
-0x17b600,5,
-0x17b618,2,
+0x17b600,8,
+0x17b640,13,
+0x17b7f8,2,
 0x17b804,1,
-0x17b820,11,
-0x17b880,1,
+0x17b820,10,
+0x17b880,2,
 0x17b904,1,
 0x17b90c,1,
 0x17b914,1,
 0x17b91c,1,
 0x17b924,1,
 0x17b92c,1,
-0x17ba00,12,
-0x17bc00,15,
+0x17ba20,9,
+0x17bb00,6,
+0x17bb20,6,
+0x17bb40,6,
+0x17bb60,6,
+0x17bb80,6,
+0x17bba0,3,
+0x17bc00,16,
+0x17bd00,30,
+0x17bd80,1,
+0x17bd88,5,
+0x17bda0,1,
+0x17bda8,2,
+0x17bdc0,10,
+0x17be00,9,
+0x17be28,2,
+0x17be40,9,
+0x17be68,2,
 0x17bf00,25,
+0x17bf70,4,
 0x17bf84,5,
-0x17bfa0,4,
-0x17c000,4,
+0x17bfa0,6,
+0x17bff8,7,
 0x17c018,3,
 0x17c028,3,
-0x17c038,22,
-0x17c094,40,
+0x17c038,63,
 0x17c140,11,
 0x17c184,10,
 0x17c1c0,22,
-0x17c220,6,
-0x17c240,5,
-0x17c260,5,
-0x17c2f8,46,
+0x17c220,1,
+0x17c228,2,
+0x17c240,1,
+0x17c248,7,
+0x17c268,7,
+0x17c288,3,
+0x17c298,2,
+0x17c2f4,46,
 0x17c3b4,1,
 0x17c3bc,1,
 0x17c3c4,1,
@@ -8880,24 +9519,25 @@
 0x17c3d4,1,
 0x17c3dc,1,
 0x17c3e4,1,
-0x17c3ec,1,
-0x17c400,9,
-0x17c440,9,
-0x17c7a0,3,
-0x17c7b0,3,
-0x17c7c0,12,
-0x17c800,4,
+0x17c3ec,15,
+0x17c440,10,
+0x17c7a0,4,
+0x17c7b8,14,
+0x17c800,5,
 0x17c818,3,
 0x17c828,3,
-0x17c838,22,
-0x17c894,40,
+0x17c838,63,
 0x17c940,11,
 0x17c984,10,
 0x17c9c0,22,
-0x17ca20,6,
-0x17ca40,5,
-0x17ca60,5,
-0x17caf8,46,
+0x17ca20,1,
+0x17ca28,2,
+0x17ca40,1,
+0x17ca48,7,
+0x17ca68,7,
+0x17ca88,3,
+0x17ca98,2,
+0x17caf4,46,
 0x17cbb4,1,
 0x17cbbc,1,
 0x17cbc4,1,
@@ -8905,30 +9545,20 @@
 0x17cbd4,1,
 0x17cbdc,1,
 0x17cbe4,1,
-0x17cbec,1,
-0x17cc00,9,
-0x17cc40,9,
-0x17cfa0,3,
-0x17cfb0,3,
-0x17cfc0,12,
-0x17d000,1,
+0x17cbec,15,
+0x17cc40,10,
+0x17cfa0,4,
+0x17cfb8,14,
+0x17d004,1,
 0x17d00c,3,
 0x17d020,5,
-0x17d038,46,
+0x17d038,3,
+0x17d048,43,
 0x17d118,24,
 0x17d200,32,
-0x17d2e0,2,
-0x17d2f0,4,
-0x17d304,1,
-0x17d314,3,
-0x17d324,1,
-0x17d330,4,
-0x17d344,1,
-0x17d354,3,
-0x17d364,1,
-0x17d374,3,
-0x17d394,1,
-0x17d3a0,2,
+0x17d284,3,
+0x17d294,3,
+0x17d2a4,11,
 0x17d400,6,
 0x17d420,6,
 0x17d440,6,
@@ -8945,29 +9575,42 @@
 0x17d5a0,6,
 0x17d5c0,6,
 0x17d5e0,6,
-0x17d600,3,
-0x17d800,2,
+0x17d600,6,
+0x17d620,3,
+0x17d800,4,
 0x17d840,15,
 0x17d880,7,
-0x17d8a0,21,
-0x17dc00,25,
-0x17dc80,13,
-0x17dcc0,15,
-0x17dd00,11,
+0x17d8a0,13,
+0x17d8e0,7,
+0x17dab8,14,
+0x17db04,1,
+0x17db14,3,
+0x17db24,1,
+0x17db34,3,
+0x17db44,1,
+0x17db54,3,
+0x17db64,1,
+0x17db74,3,
+0x17db94,1,
+0x17dba0,2,
+0x17dc00,26,
+0x17dc80,14,
+0x17dcc0,27,
 0x17dd40,11,
 0x17dd80,5,
 0x17dda0,7,
 0x17ddc0,7,
 0x17dde0,6,
-0x17de00,11,
-0x17de40,19,
-0x17de90,6,
+0x17de00,14,
+0x17de40,13,
+0x17de80,7,
+0x17dea0,6,
 0x17e000,2,
 0x17e028,2,
 0x17e050,2,
 0x17e078,2,
-0x17e0a0,7,
-0x17e0c0,15,
+0x17e0a0,8,
+0x17e0c4,14,
 0x17e1ac,1,
 0x17e1d8,4,
 0x17e200,6,
@@ -8976,7 +9619,9 @@
 0x17e260,6,
 0x17e280,3,
 0x17e400,6,
-0x17e420,3,
+0x17e420,6,
+0x17e440,3,
+0x17e480,4,
 0x1c0000,4,
 0x1c0028,4,
 0x1c0050,4,
@@ -9009,41 +9654,44 @@
 0x1c0640,10,
 0x1c0680,10,
 0x1c06c0,10,
-0x1c0700,66,
-0x1c080c,4,
-0x1c0820,3,
-0x1c0830,1,
-0x1c0838,3,
-0x1c0860,2,
+0x1c0700,6,
+0x1c0730,7,
+0x1c0750,1,
+0x1c0758,2,
+0x1c0840,1,
+0x1c0850,3,
+0x1c0864,1,
 0x1c0870,1,
 0x1c0880,11,
 0x1c08b0,3,
 0x1c08c0,3,
 0x1c08d0,5,
 0x1c08f0,1,
-0x1c0900,3,
-0x1c0910,3,
-0x1c0920,3,
-0x1c0930,3,
-0x1c0940,3,
-0x1c0950,3,
-0x1c0960,3,
-0x1c0970,3,
+0x1c0900,16,
 0x1c0980,60,
+0x1c0a80,3,
 0x1c0ab8,13,
 0x1c0b00,9,
 0x1c0b40,11,
 0x1c0b80,11,
 0x1c0bc0,11,
 0x1c0c00,6,
-0x1c0c1c,15,
-0x1c0c5c,15,
-0x1c0c9c,15,
-0x1c0cdc,15,
-0x1c0d1c,15,
-0x1c0d5c,15,
-0x1c0d9c,15,
-0x1c0ddc,30,
+0x1c0c1c,7,
+0x1c0c40,6,
+0x1c0c5c,7,
+0x1c0c80,6,
+0x1c0c9c,7,
+0x1c0cc0,6,
+0x1c0cdc,7,
+0x1c0d00,6,
+0x1c0d1c,7,
+0x1c0d40,6,
+0x1c0d5c,7,
+0x1c0d80,6,
+0x1c0d9c,7,
+0x1c0dc0,6,
+0x1c0ddc,7,
+0x1c0e00,21,
 0x1c0e60,5,
 0x1c0e80,1,
 0x1c0e90,15,
@@ -9147,8 +9795,9 @@
 0x1c22a0,5,
 0x1c22bc,3,
 0x1c22cc,6,
-0x1c22e8,5,
+0x1c22e8,4,
 0x1c2300,5,
+0x1c2320,3,
 0x1c2400,75,
 0x1c2530,3,
 0x1c2540,3,
@@ -9160,8 +9809,9 @@
 0x1c26a0,5,
 0x1c26bc,3,
 0x1c26cc,6,
-0x1c26e8,5,
+0x1c26e8,4,
 0x1c2700,5,
+0x1c2720,3,
 0x1c2800,75,
 0x1c2930,3,
 0x1c2940,3,
@@ -9173,8 +9823,9 @@
 0x1c2aa0,5,
 0x1c2abc,3,
 0x1c2acc,6,
-0x1c2ae8,5,
+0x1c2ae8,4,
 0x1c2b00,5,
+0x1c2b20,3,
 0x1c2c00,75,
 0x1c2d30,3,
 0x1c2d40,3,
@@ -9186,8 +9837,9 @@
 0x1c2ea0,5,
 0x1c2ebc,3,
 0x1c2ecc,6,
-0x1c2ee8,5,
+0x1c2ee8,4,
 0x1c2f00,5,
+0x1c2f20,3,
 0x1c3000,75,
 0x1c3130,3,
 0x1c3140,3,
@@ -9199,8 +9851,9 @@
 0x1c32a0,5,
 0x1c32bc,3,
 0x1c32cc,6,
-0x1c32e8,5,
+0x1c32e8,4,
 0x1c3300,5,
+0x1c3320,3,
 0x1c3400,75,
 0x1c3530,3,
 0x1c3540,3,
@@ -9212,8 +9865,9 @@
 0x1c36a0,5,
 0x1c36bc,3,
 0x1c36cc,6,
-0x1c36e8,5,
+0x1c36e8,4,
 0x1c3700,5,
+0x1c3720,3,
 0x1c3800,75,
 0x1c3930,3,
 0x1c3940,3,
@@ -9225,8 +9879,9 @@
 0x1c3aa0,5,
 0x1c3abc,3,
 0x1c3acc,6,
-0x1c3ae8,5,
+0x1c3ae8,4,
 0x1c3b00,5,
+0x1c3b20,3,
 0x1c3c00,75,
 0x1c3d30,3,
 0x1c3d40,3,
@@ -9238,8 +9893,9 @@
 0x1c3ea0,5,
 0x1c3ebc,3,
 0x1c3ecc,6,
-0x1c3ee8,5,
+0x1c3ee8,4,
 0x1c3f00,5,
+0x1c3f20,3,
 0x1c4000,4,
 0x1c4028,4,
 0x1c4050,4,
@@ -9272,41 +9928,44 @@
 0x1c4640,10,
 0x1c4680,10,
 0x1c46c0,10,
-0x1c4700,66,
-0x1c480c,4,
-0x1c4820,3,
-0x1c4830,1,
-0x1c4838,3,
-0x1c4860,2,
+0x1c4700,6,
+0x1c4730,7,
+0x1c4750,1,
+0x1c4758,2,
+0x1c4840,1,
+0x1c4850,3,
+0x1c4864,1,
 0x1c4870,1,
 0x1c4880,11,
 0x1c48b0,3,
 0x1c48c0,3,
 0x1c48d0,5,
 0x1c48f0,1,
-0x1c4900,3,
-0x1c4910,3,
-0x1c4920,3,
-0x1c4930,3,
-0x1c4940,3,
-0x1c4950,3,
-0x1c4960,3,
-0x1c4970,3,
+0x1c4900,16,
 0x1c4980,60,
+0x1c4a80,3,
 0x1c4ab8,13,
 0x1c4b00,9,
 0x1c4b40,11,
 0x1c4b80,11,
 0x1c4bc0,11,
 0x1c4c00,6,
-0x1c4c1c,15,
-0x1c4c5c,15,
-0x1c4c9c,15,
-0x1c4cdc,15,
-0x1c4d1c,15,
-0x1c4d5c,15,
-0x1c4d9c,15,
-0x1c4ddc,30,
+0x1c4c1c,7,
+0x1c4c40,6,
+0x1c4c5c,7,
+0x1c4c80,6,
+0x1c4c9c,7,
+0x1c4cc0,6,
+0x1c4cdc,7,
+0x1c4d00,6,
+0x1c4d1c,7,
+0x1c4d40,6,
+0x1c4d5c,7,
+0x1c4d80,6,
+0x1c4d9c,7,
+0x1c4dc0,6,
+0x1c4ddc,7,
+0x1c4e00,21,
 0x1c4e60,5,
 0x1c4e80,1,
 0x1c4e90,15,
@@ -9410,8 +10069,9 @@
 0x1c62a0,5,
 0x1c62bc,3,
 0x1c62cc,6,
-0x1c62e8,5,
+0x1c62e8,4,
 0x1c6300,5,
+0x1c6320,3,
 0x1c6400,75,
 0x1c6530,3,
 0x1c6540,3,
@@ -9423,8 +10083,9 @@
 0x1c66a0,5,
 0x1c66bc,3,
 0x1c66cc,6,
-0x1c66e8,5,
+0x1c66e8,4,
 0x1c6700,5,
+0x1c6720,3,
 0x1c6800,75,
 0x1c6930,3,
 0x1c6940,3,
@@ -9436,8 +10097,9 @@
 0x1c6aa0,5,
 0x1c6abc,3,
 0x1c6acc,6,
-0x1c6ae8,5,
+0x1c6ae8,4,
 0x1c6b00,5,
+0x1c6b20,3,
 0x1c6c00,75,
 0x1c6d30,3,
 0x1c6d40,3,
@@ -9449,8 +10111,9 @@
 0x1c6ea0,5,
 0x1c6ebc,3,
 0x1c6ecc,6,
-0x1c6ee8,5,
+0x1c6ee8,4,
 0x1c6f00,5,
+0x1c6f20,3,
 0x1c7000,75,
 0x1c7130,3,
 0x1c7140,3,
@@ -9462,8 +10125,9 @@
 0x1c72a0,5,
 0x1c72bc,3,
 0x1c72cc,6,
-0x1c72e8,5,
+0x1c72e8,4,
 0x1c7300,5,
+0x1c7320,3,
 0x1c7400,75,
 0x1c7530,3,
 0x1c7540,3,
@@ -9475,8 +10139,9 @@
 0x1c76a0,5,
 0x1c76bc,3,
 0x1c76cc,6,
-0x1c76e8,5,
+0x1c76e8,4,
 0x1c7700,5,
+0x1c7720,3,
 0x1c7800,75,
 0x1c7930,3,
 0x1c7940,3,
@@ -9488,8 +10153,9 @@
 0x1c7aa0,5,
 0x1c7abc,3,
 0x1c7acc,6,
-0x1c7ae8,5,
+0x1c7ae8,4,
 0x1c7b00,5,
+0x1c7b20,3,
 0x1c7c00,75,
 0x1c7d30,3,
 0x1c7d40,3,
@@ -9501,8 +10167,9 @@
 0x1c7ea0,5,
 0x1c7ebc,3,
 0x1c7ecc,6,
-0x1c7ee8,5,
+0x1c7ee8,4,
 0x1c7f00,5,
+0x1c7f20,3,
 0x1c8000,17,
 0x1c8054,73,
 0x1c81c0,1,
@@ -9517,18 +10184,10 @@
 0x1c8494,2,
 0x1c8510,13,
 0x1c8548,3,
-0x1c8558,1,
+0x1c8558,4,
 0x1c8600,40,
-0x1c8804,1,
-0x1c8820,11,
-0x1c8884,1,
-0x1c88a0,11,
-0x1c8904,1,
-0x1c8920,11,
-0x1c8984,1,
-0x1c89a0,11,
-0x1c8a04,1,
-0x1c8a20,11,
+0x1c8800,4,
+0x1c8a00,1,
 0x1c8c00,1,
 0x1c8c28,1,
 0x1c8c50,1,
@@ -9539,6 +10198,14 @@
 0x1c8e00,6,
 0x1c8e20,6,
 0x1c8e40,3,
+0x1c9084,1,
+0x1c908c,1,
+0x1c9094,1,
+0x1c909c,1,
+0x1c90a4,1,
+0x1c90ac,1,
+0x1c90b4,1,
+0x1c90bc,1,
 0x1c9120,10,
 0x1c9160,10,
 0x1c91a0,10,
@@ -9562,16 +10229,8 @@
 0x1c9c40,10,
 0x1c9c80,15,
 0x1c9d00,10,
-0x1c9e04,1,
-0x1c9e18,10,
-0x1c9e44,1,
-0x1c9e58,10,
-0x1c9e84,1,
-0x1c9e98,10,
-0x1c9ec4,1,
-0x1c9ed8,13,
-0x1ca004,1,
-0x1ca014,14,
+0x1c9e00,1,
+0x1ca000,1,
 0x1ca184,1,
 0x1ca18c,1,
 0x1ca1a4,1,
@@ -9633,18 +10292,10 @@
 0x1cc494,2,
 0x1cc510,13,
 0x1cc548,3,
-0x1cc558,1,
+0x1cc558,4,
 0x1cc600,40,
-0x1cc804,1,
-0x1cc820,11,
-0x1cc884,1,
-0x1cc8a0,11,
-0x1cc904,1,
-0x1cc920,11,
-0x1cc984,1,
-0x1cc9a0,11,
-0x1cca04,1,
-0x1cca20,11,
+0x1cc800,4,
+0x1cca00,1,
 0x1ccc00,1,
 0x1ccc28,1,
 0x1ccc50,1,
@@ -9655,6 +10306,14 @@
 0x1cce00,6,
 0x1cce20,6,
 0x1cce40,3,
+0x1cd084,1,
+0x1cd08c,1,
+0x1cd094,1,
+0x1cd09c,1,
+0x1cd0a4,1,
+0x1cd0ac,1,
+0x1cd0b4,1,
+0x1cd0bc,1,
 0x1cd120,10,
 0x1cd160,10,
 0x1cd1a0,10,
@@ -9678,16 +10337,8 @@
 0x1cdc40,10,
 0x1cdc80,15,
 0x1cdd00,10,
-0x1cde04,1,
-0x1cde18,10,
-0x1cde44,1,
-0x1cde58,10,
-0x1cde84,1,
-0x1cde98,10,
-0x1cdec4,1,
-0x1cded8,13,
-0x1ce004,1,
-0x1ce014,14,
+0x1cde00,1,
+0x1ce000,1,
 0x1ce184,1,
 0x1ce18c,1,
 0x1ce1a4,1,
@@ -9749,18 +10400,10 @@
 0x1d0494,2,
 0x1d0510,13,
 0x1d0548,3,
-0x1d0558,1,
+0x1d0558,4,
 0x1d0600,40,
-0x1d0804,1,
-0x1d0820,11,
-0x1d0884,1,
-0x1d08a0,11,
-0x1d0904,1,
-0x1d0920,11,
-0x1d0984,1,
-0x1d09a0,11,
-0x1d0a04,1,
-0x1d0a20,11,
+0x1d0800,4,
+0x1d0a00,1,
 0x1d0c00,1,
 0x1d0c28,1,
 0x1d0c50,1,
@@ -9771,6 +10414,14 @@
 0x1d0e00,6,
 0x1d0e20,6,
 0x1d0e40,3,
+0x1d1084,1,
+0x1d108c,1,
+0x1d1094,1,
+0x1d109c,1,
+0x1d10a4,1,
+0x1d10ac,1,
+0x1d10b4,1,
+0x1d10bc,1,
 0x1d1120,10,
 0x1d1160,10,
 0x1d11a0,10,
@@ -9794,16 +10445,8 @@
 0x1d1c40,10,
 0x1d1c80,15,
 0x1d1d00,10,
-0x1d1e04,1,
-0x1d1e18,10,
-0x1d1e44,1,
-0x1d1e58,10,
-0x1d1e84,1,
-0x1d1e98,10,
-0x1d1ec4,1,
-0x1d1ed8,13,
-0x1d2004,1,
-0x1d2014,14,
+0x1d1e00,1,
+0x1d2000,1,
 0x1d2184,1,
 0x1d218c,1,
 0x1d21a4,1,
@@ -9865,18 +10508,10 @@
 0x1d4494,2,
 0x1d4510,13,
 0x1d4548,3,
-0x1d4558,1,
+0x1d4558,4,
 0x1d4600,40,
-0x1d4804,1,
-0x1d4820,11,
-0x1d4884,1,
-0x1d48a0,11,
-0x1d4904,1,
-0x1d4920,11,
-0x1d4984,1,
-0x1d49a0,11,
-0x1d4a04,1,
-0x1d4a20,11,
+0x1d4800,4,
+0x1d4a00,1,
 0x1d4c00,1,
 0x1d4c28,1,
 0x1d4c50,1,
@@ -9887,6 +10522,14 @@
 0x1d4e00,6,
 0x1d4e20,6,
 0x1d4e40,3,
+0x1d5084,1,
+0x1d508c,1,
+0x1d5094,1,
+0x1d509c,1,
+0x1d50a4,1,
+0x1d50ac,1,
+0x1d50b4,1,
+0x1d50bc,1,
 0x1d5120,10,
 0x1d5160,10,
 0x1d51a0,10,
@@ -9910,16 +10553,8 @@
 0x1d5c40,10,
 0x1d5c80,15,
 0x1d5d00,10,
-0x1d5e04,1,
-0x1d5e18,10,
-0x1d5e44,1,
-0x1d5e58,10,
-0x1d5e84,1,
-0x1d5e98,10,
-0x1d5ec4,1,
-0x1d5ed8,13,
-0x1d6004,1,
-0x1d6014,14,
+0x1d5e00,1,
+0x1d6000,1,
 0x1d6184,1,
 0x1d618c,1,
 0x1d61a4,1,
@@ -10083,6 +10718,9 @@
 0x1d9a80,3,
 0x1d9b00,16,
 0x1d9e00,20,
+0x1d9e60,1,
+0x1d9e80,1,
+0x1d9e90,2,
 0x1dc004,1,
 0x1dc020,2,
 0x1dc030,10,
@@ -10204,25 +10842,7 @@
 0x1de6a0,6,
 0x1de6c0,6,
 0x1de6e0,3,
-0x1de700,1,
-0x1de708,1,
-0x1de710,1,
-0x1de718,1,
-0x1de720,1,
-0x1de728,1,
-0x1de730,1,
-0x1de738,1,
-0x1de740,1,
-0x1de748,1,
-0x1de750,1,
-0x1de758,1,
-0x1de760,1,
-0x1de768,1,
-0x1de770,1,
-0x1de778,1,
-0x1de780,1,
-0x1de788,1,
-0x1de790,3,
+0x1de700,39,
 0x1de7a0,14,
 0x1de7e0,1,
 0x1df000,2,
@@ -10242,25 +10862,7 @@
 0x1df6a0,6,
 0x1df6c0,6,
 0x1df6e0,3,
-0x1df700,1,
-0x1df708,1,
-0x1df710,1,
-0x1df718,1,
-0x1df720,1,
-0x1df728,1,
-0x1df730,1,
-0x1df738,1,
-0x1df740,1,
-0x1df748,1,
-0x1df750,1,
-0x1df758,1,
-0x1df760,1,
-0x1df768,1,
-0x1df770,1,
-0x1df778,1,
-0x1df780,1,
-0x1df788,1,
-0x1df790,3,
+0x1df700,39,
 0x1df7a0,14,
 0x1df7e0,1,
 0x1e8000,6,
@@ -10276,7 +10878,7 @@
 0x1e8200,1,
 0x1e8210,1,
 0x1e8220,2,
-0x1ec000,5,
+0x1ec000,7,
 0x1ec024,5,
 0x1ec040,16,
 0x1ec084,1,
@@ -10291,36 +10893,111 @@
 0x1ec820,6,
 0x1ec840,6,
 0x1ec860,3,
-0x1ec880,16,
-0x1ec8d0,12,
+0x1ec880,2,
+0x1ec8a0,8,
+0x1ec8d0,19,
 0x1edc00,2,
-0x1ee000,9,
-0x1ee104,1,
-0x1ee120,56,
+0x1ee004,1,
+0x1ee030,28,
+0x1ee100,6,
+0x1ee120,6,
+0x1ee140,6,
+0x1ee160,3,
+0x1ee180,13,
+0x1ee1c0,2,
 0x1ee204,1,
-0x1ee270,36,
-0x1ee304,1,
-0x1ee360,40,
+0x1ee300,64,
 0x1ee404,1,
 0x1ee470,36,
 0x1ee504,1,
-0x1ee568,66,
-0x1ee680,18,
-0x1ee700,20,
-0x1ee780,18,
-0x1ee800,19,
-0x1ef000,2,
-0x1ef028,2,
-0x1ef050,2,
-0x1ef078,2,
-0x1ef0a0,19,
-0x1ef1ac,1,
-0x1ef1d8,4,
-0x1ef200,6,
-0x1ef220,6,
-0x1ef240,6,
-0x1ef260,6,
-0x1ef280,3,
+0x1ee558,42,
+0x1ee604,1,
+0x1ee670,36,
+0x1ee704,1,
+0x1ee760,40,
+0x1ee804,1,
+0x1ee818,26,
+0x1ee884,1,
+0x1ee8c0,16,
+0x1ee904,1,
+0x1ee930,65,
+0x1eea80,21,
+0x1eeb00,14,
+0x1eeb80,20,
+0x1eec00,13,
+0x1eec80,8,
+0x1eee00,6,
+0x1eee20,6,
+0x1eee40,6,
+0x1eee60,6,
+0x1eee80,6,
+0x1eeea0,6,
+0x1eeec0,6,
+0x1eeee0,6,
+0x1eef00,6,
+0x1eef20,6,
+0x1eef40,6,
+0x1eef60,6,
+0x1eef80,6,
+0x1eefa0,6,
+0x1eefc0,6,
+0x1eefe0,3,
+0x1ef204,1,
+0x1ef20c,4,
+0x1ef224,1,
+0x1ef230,4,
+0x1ef244,1,
+0x1ef24c,1,
+0x1ef254,5,
+0x1ef284,1,
+0x1ef28c,3,
+0x1ef2a4,1,
+0x1ef2ac,3,
+0x1ef2c4,1,
+0x1ef2cc,1,
+0x1ef2d4,5,
+0x1ef304,1,
+0x1ef30c,8,
+0x1ef344,1,
+0x1ef34c,8,
+0x1ef380,2,
+0x1ef38c,8,
+0x1ef400,22,
+0x1ef480,22,
+0x1ef500,13,
+0x1ef540,13,
+0x1ef580,18,
+0x1ef600,18,
+0x1ef680,14,
+0x1ef6c0,14,
+0x1ef700,18,
+0x1ef780,18,
+0x1ef800,12,
+0x1ef840,12,
+0x1ef880,7,
+0x1ef904,1,
+0x1ef934,19,
+0x1ef9a0,2,
+0x1ef9c0,6,
+0x1efa00,13,
+0x1efa80,20,
+0x1efb00,9,
+0x1efb28,2,
+0x1efb80,6,
+0x1efba0,3,
+0x1efbc0,3,
+0x1efc00,2,
+0x1efc28,2,
+0x1efc50,2,
+0x1efc78,2,
+0x1efca0,20,
+0x1efdac,1,
+0x1efdd8,4,
+0x1efe00,6,
+0x1efe20,6,
+0x1efe40,6,
+0x1efe60,6,
+0x1efe80,3,
 0x200000,4,
 0x200014,1,
 0x200020,3,
@@ -10371,9 +11048,9 @@
 0x200c80,13,
 0x200cc0,12,
 0x200d00,14,
-0x200d40,4,
+0x200d40,6,
 0x200d80,14,
-0x200dc0,4,
+0x200dc0,6,
 0x200e00,11,
 0x200e40,6,
 0x200e60,6,
@@ -10383,8 +11060,8 @@
 0x201014,4,
 0x201040,3,
 0x201050,3,
-0x201080,42,
-0x201140,10,
+0x201080,43,
+0x201140,11,
 0x201180,1,
 0x20119c,15,
 0x201200,12,
@@ -10431,9 +11108,11 @@
 0x201d5c,1,
 0x201d80,1,
 0x201da0,1,
-0x201da8,7,
+0x201da8,4,
+0x201dc0,1,
 0x201de0,1,
-0x201de8,19,
+0x201de8,4,
+0x201e00,13,
 0x201e40,6,
 0x201e60,6,
 0x201e80,6,
@@ -10494,9 +11173,9 @@
 0x202c80,13,
 0x202cc0,12,
 0x202d00,14,
-0x202d40,4,
+0x202d40,6,
 0x202d80,14,
-0x202dc0,4,
+0x202dc0,6,
 0x202e00,11,
 0x202e40,6,
 0x202e60,6,
@@ -10506,8 +11185,8 @@
 0x203014,4,
 0x203040,3,
 0x203050,3,
-0x203080,42,
-0x203140,10,
+0x203080,43,
+0x203140,11,
 0x203180,1,
 0x20319c,15,
 0x203200,12,
@@ -10554,9 +11233,11 @@
 0x203d5c,1,
 0x203d80,1,
 0x203da0,1,
-0x203da8,7,
+0x203da8,4,
+0x203dc0,1,
 0x203de0,1,
-0x203de8,19,
+0x203de8,4,
+0x203e00,13,
 0x203e40,6,
 0x203e60,6,
 0x203e80,6,
@@ -10595,8 +11276,7 @@
 0x2046c0,11,
 0x204700,14,
 0x204740,14,
-0x204780,62,
-0x20487c,6,
+0x204780,69,
 0x204c00,6,
 0x204c40,14,
 0x204c80,9,
@@ -10646,8 +11326,7 @@
 0x2056c0,11,
 0x205700,14,
 0x205740,14,
-0x205780,62,
-0x20587c,6,
+0x205780,69,
 0x205c00,6,
 0x205c40,14,
 0x205c80,9,
@@ -10716,8 +11395,7 @@
 0x206c50,10,
 0x206c84,1,
 0x206c94,8,
-0x206cb8,9,
-0x206ce0,4,
+0x206cb8,14,
 0x207000,1,
 0x207028,1,
 0x207050,1,
@@ -10737,7 +11415,7 @@
 0x207520,6,
 0x207540,6,
 0x207560,3,
-0x207570,1,
+0x207570,3,
 0x208000,6,
 0x208020,3,
 0x208030,1,
@@ -10754,7 +11432,7 @@
 0x208428,1,
 0x208450,1,
 0x208478,1,
-0x2084a0,7,
+0x2084a0,6,
 0x2085ac,1,
 0x2085d8,4,
 0x208600,6,
@@ -10782,9 +11460,9 @@
 0x2090b0,22,
 0x209110,2,
 0x209120,22,
-0x209180,1,
+0x209180,2,
 0x2091a0,6,
-0x2091c0,8,
+0x2091c0,9,
 0x209200,42,
 0x2092c0,1,
 0x2092c8,13,
@@ -10802,7 +11480,7 @@
 0x209550,7,
 0x209570,18,
 0x2095bc,5,
-0x209800,448,
+0x209800,480,
 0x20a020,4,
 0x20a040,11,
 0x20a074,2,
@@ -10810,9 +11488,9 @@
 0x20a0b0,22,
 0x20a110,2,
 0x20a120,22,
-0x20a180,1,
+0x20a180,2,
 0x20a1a0,6,
-0x20a1c0,8,
+0x20a1c0,9,
 0x20a200,42,
 0x20a2c0,1,
 0x20a2c8,13,
@@ -10830,7 +11508,7 @@
 0x20a550,7,
 0x20a570,18,
 0x20a5bc,5,
-0x20a800,448,
+0x20a800,480,
 0x20b020,4,
 0x20b040,11,
 0x20b074,2,
@@ -10838,9 +11516,9 @@
 0x20b0b0,22,
 0x20b110,2,
 0x20b120,22,
-0x20b180,1,
+0x20b180,2,
 0x20b1a0,6,
-0x20b1c0,8,
+0x20b1c0,9,
 0x20b200,42,
 0x20b2c0,1,
 0x20b2c8,13,
@@ -10858,7 +11536,7 @@
 0x20b550,7,
 0x20b570,18,
 0x20b5bc,5,
-0x20b800,448,
+0x20b800,480,
 0x20c020,4,
 0x20c040,11,
 0x20c074,2,
@@ -10866,9 +11544,9 @@
 0x20c0b0,22,
 0x20c110,2,
 0x20c120,22,
-0x20c180,1,
+0x20c180,2,
 0x20c1a0,6,
-0x20c1c0,8,
+0x20c1c0,9,
 0x20c200,42,
 0x20c2c0,1,
 0x20c2c8,13,
@@ -10886,7 +11564,7 @@
 0x20c550,7,
 0x20c570,18,
 0x20c5bc,5,
-0x20c800,448,
+0x20c800,480,
 0x20f800,5,
 0x20f818,1,
 0x20f854,6,
@@ -10912,12 +11590,12 @@
 0x20fba4,1,
 0x20fbac,2,
 0x214000,3,
-0x214018,8,
-0x214100,56,
+0x214018,10,
+0x214100,58,
 0x2141f0,1,
 0x214400,3,
-0x214418,8,
-0x214500,56,
+0x214418,10,
+0x214500,58,
 0x2145f0,1,
 0x214800,3,
 0x214810,3,
@@ -10933,12 +11611,12 @@
 0x2149c4,1,
 0x2149d4,3,
 0x215000,3,
-0x215018,8,
-0x215100,56,
+0x215018,10,
+0x215100,58,
 0x2151f0,1,
 0x215400,3,
-0x215418,8,
-0x215500,56,
+0x215418,10,
+0x215500,58,
 0x2155f0,1,
 0x215800,3,
 0x215810,3,
@@ -10969,25 +11647,34 @@
 0x216800,19,
 0x216890,15,
 0x216910,15,
-0x216990,10,
+0x216a00,10,
 0x216ab8,4,
 0x216b00,3,
+0x216b10,1,
 0x216e00,6,
+0x216f00,5,
 0x217000,65,
 0x217800,6,
 0x217820,6,
 0x217840,6,
 0x217860,6,
-0x217880,3,
+0x217880,6,
+0x2178a0,6,
+0x2178c0,6,
+0x2178e0,3,
 0x217900,6,
 0x217920,6,
 0x217940,6,
 0x217960,6,
-0x217980,3,
+0x217980,6,
+0x2179a0,6,
+0x2179c0,6,
+0x2179e0,3,
 0x217a00,6,
-0x217a20,3,
-0x217a40,7,
+0x217a20,6,
+0x217a40,3,
 0x217a80,7,
+0x217aa0,7,
 0x217ac0,9,
 0x217b00,9,
 0x217b40,10,
@@ -11011,7 +11698,11 @@
 0x218000,2,
 0x21800c,3,
 0x218028,2,
-0x218038,47,
+0x218038,2,
+0x218080,29,
+0x2180f8,1,
+0x218100,13,
+0x218140,13,
 0x218500,6,
 0x218520,6,
 0x218540,3,
@@ -11023,7 +11714,11 @@
 0x218800,2,
 0x21880c,3,
 0x218828,2,
-0x218838,47,
+0x218838,2,
+0x218880,29,
+0x2188f8,1,
+0x218900,13,
+0x218940,13,
 0x218d00,6,
 0x218d20,6,
 0x218d40,3,
@@ -11036,7 +11731,7 @@
 0x219828,3,
 0x219850,3,
 0x219878,3,
-0x2198a0,8,
+0x2198a0,9,
 0x2199ac,1,
 0x2199d8,4,
 0x219a00,6,
@@ -11100,9 +11795,9 @@
 0x220c80,13,
 0x220cc0,12,
 0x220d00,14,
-0x220d40,4,
+0x220d40,6,
 0x220d80,14,
-0x220dc0,4,
+0x220dc0,6,
 0x220e00,11,
 0x220e40,6,
 0x220e60,6,
@@ -11112,8 +11807,8 @@
 0x221014,4,
 0x221040,3,
 0x221050,3,
-0x221080,42,
-0x221140,10,
+0x221080,43,
+0x221140,11,
 0x221180,1,
 0x22119c,15,
 0x221200,12,
@@ -11160,9 +11855,11 @@
 0x221d5c,1,
 0x221d80,1,
 0x221da0,1,
-0x221da8,7,
+0x221da8,4,
+0x221dc0,1,
 0x221de0,1,
-0x221de8,19,
+0x221de8,4,
+0x221e00,13,
 0x221e40,6,
 0x221e60,6,
 0x221e80,6,
@@ -11223,9 +11920,9 @@
 0x222c80,13,
 0x222cc0,12,
 0x222d00,14,
-0x222d40,4,
+0x222d40,6,
 0x222d80,14,
-0x222dc0,4,
+0x222dc0,6,
 0x222e00,11,
 0x222e40,6,
 0x222e60,6,
@@ -11235,8 +11932,8 @@
 0x223014,4,
 0x223040,3,
 0x223050,3,
-0x223080,42,
-0x223140,10,
+0x223080,43,
+0x223140,11,
 0x223180,1,
 0x22319c,15,
 0x223200,12,
@@ -11283,9 +11980,11 @@
 0x223d5c,1,
 0x223d80,1,
 0x223da0,1,
-0x223da8,7,
+0x223da8,4,
+0x223dc0,1,
 0x223de0,1,
-0x223de8,19,
+0x223de8,4,
+0x223e00,13,
 0x223e40,6,
 0x223e60,6,
 0x223e80,6,
@@ -11324,8 +12023,7 @@
 0x2246c0,11,
 0x224700,14,
 0x224740,14,
-0x224780,62,
-0x22487c,6,
+0x224780,69,
 0x224c00,6,
 0x224c40,14,
 0x224c80,9,
@@ -11375,8 +12073,7 @@
 0x2256c0,11,
 0x225700,14,
 0x225740,14,
-0x225780,62,
-0x22587c,6,
+0x225780,69,
 0x225c00,6,
 0x225c40,14,
 0x225c80,9,
@@ -11445,8 +12142,7 @@
 0x226c50,10,
 0x226c84,1,
 0x226c94,8,
-0x226cb8,9,
-0x226ce0,4,
+0x226cb8,14,
 0x227000,1,
 0x227028,1,
 0x227050,1,
@@ -11466,7 +12162,7 @@
 0x227520,6,
 0x227540,6,
 0x227560,3,
-0x227570,1,
+0x227570,3,
 0x228000,6,
 0x228020,3,
 0x228030,1,
@@ -11483,7 +12179,7 @@
 0x228428,1,
 0x228450,1,
 0x228478,1,
-0x2284a0,7,
+0x2284a0,6,
 0x2285ac,1,
 0x2285d8,4,
 0x228600,6,
@@ -11511,9 +12207,9 @@
 0x2290b0,22,
 0x229110,2,
 0x229120,22,
-0x229180,1,
+0x229180,2,
 0x2291a0,6,
-0x2291c0,8,
+0x2291c0,9,
 0x229200,42,
 0x2292c0,1,
 0x2292c8,13,
@@ -11531,7 +12227,7 @@
 0x229550,7,
 0x229570,18,
 0x2295bc,5,
-0x229800,448,
+0x229800,480,
 0x22a020,4,
 0x22a040,11,
 0x22a074,2,
@@ -11539,9 +12235,9 @@
 0x22a0b0,22,
 0x22a110,2,
 0x22a120,22,
-0x22a180,1,
+0x22a180,2,
 0x22a1a0,6,
-0x22a1c0,8,
+0x22a1c0,9,
 0x22a200,42,
 0x22a2c0,1,
 0x22a2c8,13,
@@ -11559,7 +12255,7 @@
 0x22a550,7,
 0x22a570,18,
 0x22a5bc,5,
-0x22a800,448,
+0x22a800,480,
 0x22b020,4,
 0x22b040,11,
 0x22b074,2,
@@ -11567,9 +12263,9 @@
 0x22b0b0,22,
 0x22b110,2,
 0x22b120,22,
-0x22b180,1,
+0x22b180,2,
 0x22b1a0,6,
-0x22b1c0,8,
+0x22b1c0,9,
 0x22b200,42,
 0x22b2c0,1,
 0x22b2c8,13,
@@ -11587,7 +12283,7 @@
 0x22b550,7,
 0x22b570,18,
 0x22b5bc,5,
-0x22b800,448,
+0x22b800,480,
 0x22c020,4,
 0x22c040,11,
 0x22c074,2,
@@ -11595,9 +12291,9 @@
 0x22c0b0,22,
 0x22c110,2,
 0x22c120,22,
-0x22c180,1,
+0x22c180,2,
 0x22c1a0,6,
-0x22c1c0,8,
+0x22c1c0,9,
 0x22c200,42,
 0x22c2c0,1,
 0x22c2c8,13,
@@ -11615,7 +12311,7 @@
 0x22c550,7,
 0x22c570,18,
 0x22c5bc,5,
-0x22c800,448,
+0x22c800,480,
 0x22f800,5,
 0x22f818,1,
 0x22f854,6,
@@ -11641,12 +12337,12 @@
 0x22fba4,1,
 0x22fbac,2,
 0x234000,3,
-0x234018,8,
-0x234100,56,
+0x234018,10,
+0x234100,58,
 0x2341f0,1,
 0x234400,3,
-0x234418,8,
-0x234500,56,
+0x234418,10,
+0x234500,58,
 0x2345f0,1,
 0x234800,3,
 0x234810,3,
@@ -11662,12 +12358,12 @@
 0x2349c4,1,
 0x2349d4,3,
 0x235000,3,
-0x235018,8,
-0x235100,56,
+0x235018,10,
+0x235100,58,
 0x2351f0,1,
 0x235400,3,
-0x235418,8,
-0x235500,56,
+0x235418,10,
+0x235500,58,
 0x2355f0,1,
 0x235800,3,
 0x235810,3,
@@ -11698,25 +12394,34 @@
 0x236800,19,
 0x236890,15,
 0x236910,15,
-0x236990,10,
+0x236a00,10,
 0x236ab8,4,
 0x236b00,3,
+0x236b10,1,
 0x236e00,6,
+0x236f00,5,
 0x237000,65,
 0x237800,6,
 0x237820,6,
 0x237840,6,
 0x237860,6,
-0x237880,3,
+0x237880,6,
+0x2378a0,6,
+0x2378c0,6,
+0x2378e0,3,
 0x237900,6,
 0x237920,6,
 0x237940,6,
 0x237960,6,
-0x237980,3,
+0x237980,6,
+0x2379a0,6,
+0x2379c0,6,
+0x2379e0,3,
 0x237a00,6,
-0x237a20,3,
-0x237a40,7,
+0x237a20,6,
+0x237a40,3,
 0x237a80,7,
+0x237aa0,7,
 0x237ac0,9,
 0x237b00,9,
 0x237b40,10,
@@ -11740,7 +12445,11 @@
 0x238000,2,
 0x23800c,3,
 0x238028,2,
-0x238038,47,
+0x238038,2,
+0x238080,29,
+0x2380f8,1,
+0x238100,13,
+0x238140,13,
 0x238500,6,
 0x238520,6,
 0x238540,3,
@@ -11752,7 +12461,11 @@
 0x238800,2,
 0x23880c,3,
 0x238828,2,
-0x238838,47,
+0x238838,2,
+0x238880,29,
+0x2388f8,1,
+0x238900,13,
+0x238940,13,
 0x238d00,6,
 0x238d20,6,
 0x238d40,3,
@@ -11765,7 +12478,7 @@
 0x239828,3,
 0x239850,3,
 0x239878,3,
-0x2398a0,8,
+0x2398a0,9,
 0x2399ac,1,
 0x2399d8,4,
 0x239a00,6,
@@ -11829,9 +12542,9 @@
 0x240c80,13,
 0x240cc0,12,
 0x240d00,14,
-0x240d40,4,
+0x240d40,6,
 0x240d80,14,
-0x240dc0,4,
+0x240dc0,6,
 0x240e00,11,
 0x240e40,6,
 0x240e60,6,
@@ -11841,8 +12554,8 @@
 0x241014,4,
 0x241040,3,
 0x241050,3,
-0x241080,42,
-0x241140,10,
+0x241080,43,
+0x241140,11,
 0x241180,1,
 0x24119c,15,
 0x241200,12,
@@ -11889,9 +12602,11 @@
 0x241d5c,1,
 0x241d80,1,
 0x241da0,1,
-0x241da8,7,
+0x241da8,4,
+0x241dc0,1,
 0x241de0,1,
-0x241de8,19,
+0x241de8,4,
+0x241e00,13,
 0x241e40,6,
 0x241e60,6,
 0x241e80,6,
@@ -11952,9 +12667,9 @@
 0x242c80,13,
 0x242cc0,12,
 0x242d00,14,
-0x242d40,4,
+0x242d40,6,
 0x242d80,14,
-0x242dc0,4,
+0x242dc0,6,
 0x242e00,11,
 0x242e40,6,
 0x242e60,6,
@@ -11964,8 +12679,8 @@
 0x243014,4,
 0x243040,3,
 0x243050,3,
-0x243080,42,
-0x243140,10,
+0x243080,43,
+0x243140,11,
 0x243180,1,
 0x24319c,15,
 0x243200,12,
@@ -12012,9 +12727,11 @@
 0x243d5c,1,
 0x243d80,1,
 0x243da0,1,
-0x243da8,7,
+0x243da8,4,
+0x243dc0,1,
 0x243de0,1,
-0x243de8,19,
+0x243de8,4,
+0x243e00,13,
 0x243e40,6,
 0x243e60,6,
 0x243e80,6,
@@ -12053,8 +12770,7 @@
 0x2446c0,11,
 0x244700,14,
 0x244740,14,
-0x244780,62,
-0x24487c,6,
+0x244780,69,
 0x244c00,6,
 0x244c40,14,
 0x244c80,9,
@@ -12104,8 +12820,7 @@
 0x2456c0,11,
 0x245700,14,
 0x245740,14,
-0x245780,62,
-0x24587c,6,
+0x245780,69,
 0x245c00,6,
 0x245c40,14,
 0x245c80,9,
@@ -12174,8 +12889,7 @@
 0x246c50,10,
 0x246c84,1,
 0x246c94,8,
-0x246cb8,9,
-0x246ce0,4,
+0x246cb8,14,
 0x247000,1,
 0x247028,1,
 0x247050,1,
@@ -12195,7 +12909,7 @@
 0x247520,6,
 0x247540,6,
 0x247560,3,
-0x247570,1,
+0x247570,3,
 0x248000,6,
 0x248020,3,
 0x248030,1,
@@ -12212,7 +12926,7 @@
 0x248428,1,
 0x248450,1,
 0x248478,1,
-0x2484a0,7,
+0x2484a0,6,
 0x2485ac,1,
 0x2485d8,4,
 0x248600,6,
@@ -12240,9 +12954,9 @@
 0x2490b0,22,
 0x249110,2,
 0x249120,22,
-0x249180,1,
+0x249180,2,
 0x2491a0,6,
-0x2491c0,8,
+0x2491c0,9,
 0x249200,42,
 0x2492c0,1,
 0x2492c8,13,
@@ -12260,7 +12974,7 @@
 0x249550,7,
 0x249570,18,
 0x2495bc,5,
-0x249800,448,
+0x249800,480,
 0x24a020,4,
 0x24a040,11,
 0x24a074,2,
@@ -12268,9 +12982,9 @@
 0x24a0b0,22,
 0x24a110,2,
 0x24a120,22,
-0x24a180,1,
+0x24a180,2,
 0x24a1a0,6,
-0x24a1c0,8,
+0x24a1c0,9,
 0x24a200,42,
 0x24a2c0,1,
 0x24a2c8,13,
@@ -12288,7 +13002,7 @@
 0x24a550,7,
 0x24a570,18,
 0x24a5bc,5,
-0x24a800,448,
+0x24a800,480,
 0x24b020,4,
 0x24b040,11,
 0x24b074,2,
@@ -12296,9 +13010,9 @@
 0x24b0b0,22,
 0x24b110,2,
 0x24b120,22,
-0x24b180,1,
+0x24b180,2,
 0x24b1a0,6,
-0x24b1c0,8,
+0x24b1c0,9,
 0x24b200,42,
 0x24b2c0,1,
 0x24b2c8,13,
@@ -12316,7 +13030,7 @@
 0x24b550,7,
 0x24b570,18,
 0x24b5bc,5,
-0x24b800,448,
+0x24b800,480,
 0x24c020,4,
 0x24c040,11,
 0x24c074,2,
@@ -12324,9 +13038,9 @@
 0x24c0b0,22,
 0x24c110,2,
 0x24c120,22,
-0x24c180,1,
+0x24c180,2,
 0x24c1a0,6,
-0x24c1c0,8,
+0x24c1c0,9,
 0x24c200,42,
 0x24c2c0,1,
 0x24c2c8,13,
@@ -12344,7 +13058,7 @@
 0x24c550,7,
 0x24c570,18,
 0x24c5bc,5,
-0x24c800,448,
+0x24c800,480,
 0x24f800,5,
 0x24f818,1,
 0x24f854,6,
@@ -12370,12 +13084,12 @@
 0x24fba4,1,
 0x24fbac,2,
 0x254000,3,
-0x254018,8,
-0x254100,56,
+0x254018,10,
+0x254100,58,
 0x2541f0,1,
 0x254400,3,
-0x254418,8,
-0x254500,56,
+0x254418,10,
+0x254500,58,
 0x2545f0,1,
 0x254800,3,
 0x254810,3,
@@ -12391,12 +13105,12 @@
 0x2549c4,1,
 0x2549d4,3,
 0x255000,3,
-0x255018,8,
-0x255100,56,
+0x255018,10,
+0x255100,58,
 0x2551f0,1,
 0x255400,3,
-0x255418,8,
-0x255500,56,
+0x255418,10,
+0x255500,58,
 0x2555f0,1,
 0x255800,3,
 0x255810,3,
@@ -12427,25 +13141,34 @@
 0x256800,19,
 0x256890,15,
 0x256910,15,
-0x256990,10,
+0x256a00,10,
 0x256ab8,4,
 0x256b00,3,
+0x256b10,1,
 0x256e00,6,
+0x256f00,5,
 0x257000,65,
 0x257800,6,
 0x257820,6,
 0x257840,6,
 0x257860,6,
-0x257880,3,
+0x257880,6,
+0x2578a0,6,
+0x2578c0,6,
+0x2578e0,3,
 0x257900,6,
 0x257920,6,
 0x257940,6,
 0x257960,6,
-0x257980,3,
+0x257980,6,
+0x2579a0,6,
+0x2579c0,6,
+0x2579e0,3,
 0x257a00,6,
-0x257a20,3,
-0x257a40,7,
+0x257a20,6,
+0x257a40,3,
 0x257a80,7,
+0x257aa0,7,
 0x257ac0,9,
 0x257b00,9,
 0x257b40,10,
@@ -12469,7 +13192,11 @@
 0x258000,2,
 0x25800c,3,
 0x258028,2,
-0x258038,47,
+0x258038,2,
+0x258080,29,
+0x2580f8,1,
+0x258100,13,
+0x258140,13,
 0x258500,6,
 0x258520,6,
 0x258540,3,
@@ -12481,7 +13208,11 @@
 0x258800,2,
 0x25880c,3,
 0x258828,2,
-0x258838,47,
+0x258838,2,
+0x258880,29,
+0x2588f8,1,
+0x258900,13,
+0x258940,13,
 0x258d00,6,
 0x258d20,6,
 0x258d40,3,
@@ -12494,7 +13225,7 @@
 0x259828,3,
 0x259850,3,
 0x259878,3,
-0x2598a0,8,
+0x2598a0,9,
 0x2599ac,1,
 0x2599d8,4,
 0x259a00,6,
@@ -12558,9 +13289,9 @@
 0x260c80,13,
 0x260cc0,12,
 0x260d00,14,
-0x260d40,4,
+0x260d40,6,
 0x260d80,14,
-0x260dc0,4,
+0x260dc0,6,
 0x260e00,11,
 0x260e40,6,
 0x260e60,6,
@@ -12570,8 +13301,8 @@
 0x261014,4,
 0x261040,3,
 0x261050,3,
-0x261080,42,
-0x261140,10,
+0x261080,43,
+0x261140,11,
 0x261180,1,
 0x26119c,15,
 0x261200,12,
@@ -12618,9 +13349,11 @@
 0x261d5c,1,
 0x261d80,1,
 0x261da0,1,
-0x261da8,7,
+0x261da8,4,
+0x261dc0,1,
 0x261de0,1,
-0x261de8,19,
+0x261de8,4,
+0x261e00,13,
 0x261e40,6,
 0x261e60,6,
 0x261e80,6,
@@ -12681,9 +13414,9 @@
 0x262c80,13,
 0x262cc0,12,
 0x262d00,14,
-0x262d40,4,
+0x262d40,6,
 0x262d80,14,
-0x262dc0,4,
+0x262dc0,6,
 0x262e00,11,
 0x262e40,6,
 0x262e60,6,
@@ -12693,8 +13426,8 @@
 0x263014,4,
 0x263040,3,
 0x263050,3,
-0x263080,42,
-0x263140,10,
+0x263080,43,
+0x263140,11,
 0x263180,1,
 0x26319c,15,
 0x263200,12,
@@ -12741,9 +13474,11 @@
 0x263d5c,1,
 0x263d80,1,
 0x263da0,1,
-0x263da8,7,
+0x263da8,4,
+0x263dc0,1,
 0x263de0,1,
-0x263de8,19,
+0x263de8,4,
+0x263e00,13,
 0x263e40,6,
 0x263e60,6,
 0x263e80,6,
@@ -12782,8 +13517,7 @@
 0x2646c0,11,
 0x264700,14,
 0x264740,14,
-0x264780,62,
-0x26487c,6,
+0x264780,69,
 0x264c00,6,
 0x264c40,14,
 0x264c80,9,
@@ -12833,8 +13567,7 @@
 0x2656c0,11,
 0x265700,14,
 0x265740,14,
-0x265780,62,
-0x26587c,6,
+0x265780,69,
 0x265c00,6,
 0x265c40,14,
 0x265c80,9,
@@ -12903,8 +13636,7 @@
 0x266c50,10,
 0x266c84,1,
 0x266c94,8,
-0x266cb8,9,
-0x266ce0,4,
+0x266cb8,14,
 0x267000,1,
 0x267028,1,
 0x267050,1,
@@ -12924,7 +13656,7 @@
 0x267520,6,
 0x267540,6,
 0x267560,3,
-0x267570,1,
+0x267570,3,
 0x268000,6,
 0x268020,3,
 0x268030,1,
@@ -12941,7 +13673,7 @@
 0x268428,1,
 0x268450,1,
 0x268478,1,
-0x2684a0,7,
+0x2684a0,6,
 0x2685ac,1,
 0x2685d8,4,
 0x268600,6,
@@ -12969,9 +13701,9 @@
 0x2690b0,22,
 0x269110,2,
 0x269120,22,
-0x269180,1,
+0x269180,2,
 0x2691a0,6,
-0x2691c0,8,
+0x2691c0,9,
 0x269200,42,
 0x2692c0,1,
 0x2692c8,13,
@@ -12989,7 +13721,7 @@
 0x269550,7,
 0x269570,18,
 0x2695bc,5,
-0x269800,448,
+0x269800,480,
 0x26a020,4,
 0x26a040,11,
 0x26a074,2,
@@ -12997,9 +13729,9 @@
 0x26a0b0,22,
 0x26a110,2,
 0x26a120,22,
-0x26a180,1,
+0x26a180,2,
 0x26a1a0,6,
-0x26a1c0,8,
+0x26a1c0,9,
 0x26a200,42,
 0x26a2c0,1,
 0x26a2c8,13,
@@ -13017,7 +13749,7 @@
 0x26a550,7,
 0x26a570,18,
 0x26a5bc,5,
-0x26a800,448,
+0x26a800,480,
 0x26b020,4,
 0x26b040,11,
 0x26b074,2,
@@ -13025,9 +13757,9 @@
 0x26b0b0,22,
 0x26b110,2,
 0x26b120,22,
-0x26b180,1,
+0x26b180,2,
 0x26b1a0,6,
-0x26b1c0,8,
+0x26b1c0,9,
 0x26b200,42,
 0x26b2c0,1,
 0x26b2c8,13,
@@ -13045,7 +13777,7 @@
 0x26b550,7,
 0x26b570,18,
 0x26b5bc,5,
-0x26b800,448,
+0x26b800,480,
 0x26c020,4,
 0x26c040,11,
 0x26c074,2,
@@ -13053,9 +13785,9 @@
 0x26c0b0,22,
 0x26c110,2,
 0x26c120,22,
-0x26c180,1,
+0x26c180,2,
 0x26c1a0,6,
-0x26c1c0,8,
+0x26c1c0,9,
 0x26c200,42,
 0x26c2c0,1,
 0x26c2c8,13,
@@ -13073,7 +13805,7 @@
 0x26c550,7,
 0x26c570,18,
 0x26c5bc,5,
-0x26c800,448,
+0x26c800,480,
 0x26f800,5,
 0x26f818,1,
 0x26f854,6,
@@ -13099,12 +13831,12 @@
 0x26fba4,1,
 0x26fbac,2,
 0x274000,3,
-0x274018,8,
-0x274100,56,
+0x274018,10,
+0x274100,58,
 0x2741f0,1,
 0x274400,3,
-0x274418,8,
-0x274500,56,
+0x274418,10,
+0x274500,58,
 0x2745f0,1,
 0x274800,3,
 0x274810,3,
@@ -13120,12 +13852,12 @@
 0x2749c4,1,
 0x2749d4,3,
 0x275000,3,
-0x275018,8,
-0x275100,56,
+0x275018,10,
+0x275100,58,
 0x2751f0,1,
 0x275400,3,
-0x275418,8,
-0x275500,56,
+0x275418,10,
+0x275500,58,
 0x2755f0,1,
 0x275800,3,
 0x275810,3,
@@ -13156,25 +13888,34 @@
 0x276800,19,
 0x276890,15,
 0x276910,15,
-0x276990,10,
+0x276a00,10,
 0x276ab8,4,
 0x276b00,3,
+0x276b10,1,
 0x276e00,6,
+0x276f00,5,
 0x277000,65,
 0x277800,6,
 0x277820,6,
 0x277840,6,
 0x277860,6,
-0x277880,3,
+0x277880,6,
+0x2778a0,6,
+0x2778c0,6,
+0x2778e0,3,
 0x277900,6,
 0x277920,6,
 0x277940,6,
 0x277960,6,
-0x277980,3,
+0x277980,6,
+0x2779a0,6,
+0x2779c0,6,
+0x2779e0,3,
 0x277a00,6,
-0x277a20,3,
-0x277a40,7,
+0x277a20,6,
+0x277a40,3,
 0x277a80,7,
+0x277aa0,7,
 0x277ac0,9,
 0x277b00,9,
 0x277b40,10,
@@ -13198,7 +13939,11 @@
 0x278000,2,
 0x27800c,3,
 0x278028,2,
-0x278038,47,
+0x278038,2,
+0x278080,29,
+0x2780f8,1,
+0x278100,13,
+0x278140,13,
 0x278500,6,
 0x278520,6,
 0x278540,3,
@@ -13210,7 +13955,11 @@
 0x278800,2,
 0x27880c,3,
 0x278828,2,
-0x278838,47,
+0x278838,2,
+0x278880,29,
+0x2788f8,1,
+0x278900,13,
+0x278940,13,
 0x278d00,6,
 0x278d20,6,
 0x278d40,3,
@@ -13223,7 +13972,7 @@
 0x279828,3,
 0x279850,3,
 0x279878,3,
-0x2798a0,8,
+0x2798a0,9,
 0x2799ac,1,
 0x2799d8,4,
 0x279a00,6,
@@ -13287,9 +14036,9 @@
 0x280c80,13,
 0x280cc0,12,
 0x280d00,14,
-0x280d40,4,
+0x280d40,6,
 0x280d80,14,
-0x280dc0,4,
+0x280dc0,6,
 0x280e00,11,
 0x280e40,6,
 0x280e60,6,
@@ -13299,8 +14048,8 @@
 0x281014,4,
 0x281040,3,
 0x281050,3,
-0x281080,42,
-0x281140,10,
+0x281080,43,
+0x281140,11,
 0x281180,1,
 0x28119c,15,
 0x281200,12,
@@ -13347,9 +14096,11 @@
 0x281d5c,1,
 0x281d80,1,
 0x281da0,1,
-0x281da8,7,
+0x281da8,4,
+0x281dc0,1,
 0x281de0,1,
-0x281de8,19,
+0x281de8,4,
+0x281e00,13,
 0x281e40,6,
 0x281e60,6,
 0x281e80,6,
@@ -13410,9 +14161,9 @@
 0x282c80,13,
 0x282cc0,12,
 0x282d00,14,
-0x282d40,4,
+0x282d40,6,
 0x282d80,14,
-0x282dc0,4,
+0x282dc0,6,
 0x282e00,11,
 0x282e40,6,
 0x282e60,6,
@@ -13422,8 +14173,8 @@
 0x283014,4,
 0x283040,3,
 0x283050,3,
-0x283080,42,
-0x283140,10,
+0x283080,43,
+0x283140,11,
 0x283180,1,
 0x28319c,15,
 0x283200,12,
@@ -13470,9 +14221,11 @@
 0x283d5c,1,
 0x283d80,1,
 0x283da0,1,
-0x283da8,7,
+0x283da8,4,
+0x283dc0,1,
 0x283de0,1,
-0x283de8,19,
+0x283de8,4,
+0x283e00,13,
 0x283e40,6,
 0x283e60,6,
 0x283e80,6,
@@ -13511,8 +14264,7 @@
 0x2846c0,11,
 0x284700,14,
 0x284740,14,
-0x284780,62,
-0x28487c,6,
+0x284780,69,
 0x284c00,6,
 0x284c40,14,
 0x284c80,9,
@@ -13562,8 +14314,7 @@
 0x2856c0,11,
 0x285700,14,
 0x285740,14,
-0x285780,62,
-0x28587c,6,
+0x285780,69,
 0x285c00,6,
 0x285c40,14,
 0x285c80,9,
@@ -13632,8 +14383,7 @@
 0x286c50,10,
 0x286c84,1,
 0x286c94,8,
-0x286cb8,9,
-0x286ce0,4,
+0x286cb8,14,
 0x287000,1,
 0x287028,1,
 0x287050,1,
@@ -13653,7 +14403,7 @@
 0x287520,6,
 0x287540,6,
 0x287560,3,
-0x287570,1,
+0x287570,3,
 0x288000,6,
 0x288020,3,
 0x288030,1,
@@ -13670,7 +14420,7 @@
 0x288428,1,
 0x288450,1,
 0x288478,1,
-0x2884a0,7,
+0x2884a0,6,
 0x2885ac,1,
 0x2885d8,4,
 0x288600,6,
@@ -13698,9 +14448,9 @@
 0x2890b0,22,
 0x289110,2,
 0x289120,22,
-0x289180,1,
+0x289180,2,
 0x2891a0,6,
-0x2891c0,8,
+0x2891c0,9,
 0x289200,42,
 0x2892c0,1,
 0x2892c8,13,
@@ -13718,7 +14468,7 @@
 0x289550,7,
 0x289570,18,
 0x2895bc,5,
-0x289800,448,
+0x289800,480,
 0x28a020,4,
 0x28a040,11,
 0x28a074,2,
@@ -13726,9 +14476,9 @@
 0x28a0b0,22,
 0x28a110,2,
 0x28a120,22,
-0x28a180,1,
+0x28a180,2,
 0x28a1a0,6,
-0x28a1c0,8,
+0x28a1c0,9,
 0x28a200,42,
 0x28a2c0,1,
 0x28a2c8,13,
@@ -13746,7 +14496,7 @@
 0x28a550,7,
 0x28a570,18,
 0x28a5bc,5,
-0x28a800,448,
+0x28a800,480,
 0x28b020,4,
 0x28b040,11,
 0x28b074,2,
@@ -13754,9 +14504,9 @@
 0x28b0b0,22,
 0x28b110,2,
 0x28b120,22,
-0x28b180,1,
+0x28b180,2,
 0x28b1a0,6,
-0x28b1c0,8,
+0x28b1c0,9,
 0x28b200,42,
 0x28b2c0,1,
 0x28b2c8,13,
@@ -13774,7 +14524,7 @@
 0x28b550,7,
 0x28b570,18,
 0x28b5bc,5,
-0x28b800,448,
+0x28b800,480,
 0x28c020,4,
 0x28c040,11,
 0x28c074,2,
@@ -13782,9 +14532,9 @@
 0x28c0b0,22,
 0x28c110,2,
 0x28c120,22,
-0x28c180,1,
+0x28c180,2,
 0x28c1a0,6,
-0x28c1c0,8,
+0x28c1c0,9,
 0x28c200,42,
 0x28c2c0,1,
 0x28c2c8,13,
@@ -13802,7 +14552,7 @@
 0x28c550,7,
 0x28c570,18,
 0x28c5bc,5,
-0x28c800,448,
+0x28c800,480,
 0x28f800,5,
 0x28f818,1,
 0x28f854,6,
@@ -13828,12 +14578,12 @@
 0x28fba4,1,
 0x28fbac,2,
 0x294000,3,
-0x294018,8,
-0x294100,56,
+0x294018,10,
+0x294100,58,
 0x2941f0,1,
 0x294400,3,
-0x294418,8,
-0x294500,56,
+0x294418,10,
+0x294500,58,
 0x2945f0,1,
 0x294800,3,
 0x294810,3,
@@ -13849,12 +14599,12 @@
 0x2949c4,1,
 0x2949d4,3,
 0x295000,3,
-0x295018,8,
-0x295100,56,
+0x295018,10,
+0x295100,58,
 0x2951f0,1,
 0x295400,3,
-0x295418,8,
-0x295500,56,
+0x295418,10,
+0x295500,58,
 0x2955f0,1,
 0x295800,3,
 0x295810,3,
@@ -13885,25 +14635,34 @@
 0x296800,19,
 0x296890,15,
 0x296910,15,
-0x296990,10,
+0x296a00,10,
 0x296ab8,4,
 0x296b00,3,
+0x296b10,1,
 0x296e00,6,
+0x296f00,5,
 0x297000,65,
 0x297800,6,
 0x297820,6,
 0x297840,6,
 0x297860,6,
-0x297880,3,
+0x297880,6,
+0x2978a0,6,
+0x2978c0,6,
+0x2978e0,3,
 0x297900,6,
 0x297920,6,
 0x297940,6,
 0x297960,6,
-0x297980,3,
+0x297980,6,
+0x2979a0,6,
+0x2979c0,6,
+0x2979e0,3,
 0x297a00,6,
-0x297a20,3,
-0x297a40,7,
+0x297a20,6,
+0x297a40,3,
 0x297a80,7,
+0x297aa0,7,
 0x297ac0,9,
 0x297b00,9,
 0x297b40,10,
@@ -13927,7 +14686,11 @@
 0x298000,2,
 0x29800c,3,
 0x298028,2,
-0x298038,47,
+0x298038,2,
+0x298080,29,
+0x2980f8,1,
+0x298100,13,
+0x298140,13,
 0x298500,6,
 0x298520,6,
 0x298540,3,
@@ -13939,7 +14702,11 @@
 0x298800,2,
 0x29880c,3,
 0x298828,2,
-0x298838,47,
+0x298838,2,
+0x298880,29,
+0x2988f8,1,
+0x298900,13,
+0x298940,13,
 0x298d00,6,
 0x298d20,6,
 0x298d40,3,
@@ -13952,7 +14719,7 @@
 0x299828,3,
 0x299850,3,
 0x299878,3,
-0x2998a0,8,
+0x2998a0,9,
 0x2999ac,1,
 0x2999d8,4,
 0x299a00,6,
@@ -14016,9 +14783,9 @@
 0x2a0c80,13,
 0x2a0cc0,12,
 0x2a0d00,14,
-0x2a0d40,4,
+0x2a0d40,6,
 0x2a0d80,14,
-0x2a0dc0,4,
+0x2a0dc0,6,
 0x2a0e00,11,
 0x2a0e40,6,
 0x2a0e60,6,
@@ -14028,8 +14795,8 @@
 0x2a1014,4,
 0x2a1040,3,
 0x2a1050,3,
-0x2a1080,42,
-0x2a1140,10,
+0x2a1080,43,
+0x2a1140,11,
 0x2a1180,1,
 0x2a119c,15,
 0x2a1200,12,
@@ -14076,9 +14843,11 @@
 0x2a1d5c,1,
 0x2a1d80,1,
 0x2a1da0,1,
-0x2a1da8,7,
+0x2a1da8,4,
+0x2a1dc0,1,
 0x2a1de0,1,
-0x2a1de8,19,
+0x2a1de8,4,
+0x2a1e00,13,
 0x2a1e40,6,
 0x2a1e60,6,
 0x2a1e80,6,
@@ -14139,9 +14908,9 @@
 0x2a2c80,13,
 0x2a2cc0,12,
 0x2a2d00,14,
-0x2a2d40,4,
+0x2a2d40,6,
 0x2a2d80,14,
-0x2a2dc0,4,
+0x2a2dc0,6,
 0x2a2e00,11,
 0x2a2e40,6,
 0x2a2e60,6,
@@ -14151,8 +14920,8 @@
 0x2a3014,4,
 0x2a3040,3,
 0x2a3050,3,
-0x2a3080,42,
-0x2a3140,10,
+0x2a3080,43,
+0x2a3140,11,
 0x2a3180,1,
 0x2a319c,15,
 0x2a3200,12,
@@ -14199,9 +14968,11 @@
 0x2a3d5c,1,
 0x2a3d80,1,
 0x2a3da0,1,
-0x2a3da8,7,
+0x2a3da8,4,
+0x2a3dc0,1,
 0x2a3de0,1,
-0x2a3de8,19,
+0x2a3de8,4,
+0x2a3e00,13,
 0x2a3e40,6,
 0x2a3e60,6,
 0x2a3e80,6,
@@ -14240,8 +15011,7 @@
 0x2a46c0,11,
 0x2a4700,14,
 0x2a4740,14,
-0x2a4780,62,
-0x2a487c,6,
+0x2a4780,69,
 0x2a4c00,6,
 0x2a4c40,14,
 0x2a4c80,9,
@@ -14291,8 +15061,7 @@
 0x2a56c0,11,
 0x2a5700,14,
 0x2a5740,14,
-0x2a5780,62,
-0x2a587c,6,
+0x2a5780,69,
 0x2a5c00,6,
 0x2a5c40,14,
 0x2a5c80,9,
@@ -14361,8 +15130,7 @@
 0x2a6c50,10,
 0x2a6c84,1,
 0x2a6c94,8,
-0x2a6cb8,9,
-0x2a6ce0,4,
+0x2a6cb8,14,
 0x2a7000,1,
 0x2a7028,1,
 0x2a7050,1,
@@ -14382,7 +15150,7 @@
 0x2a7520,6,
 0x2a7540,6,
 0x2a7560,3,
-0x2a7570,1,
+0x2a7570,3,
 0x2a8000,6,
 0x2a8020,3,
 0x2a8030,1,
@@ -14399,7 +15167,7 @@
 0x2a8428,1,
 0x2a8450,1,
 0x2a8478,1,
-0x2a84a0,7,
+0x2a84a0,6,
 0x2a85ac,1,
 0x2a85d8,4,
 0x2a8600,6,
@@ -14427,9 +15195,9 @@
 0x2a90b0,22,
 0x2a9110,2,
 0x2a9120,22,
-0x2a9180,1,
+0x2a9180,2,
 0x2a91a0,6,
-0x2a91c0,8,
+0x2a91c0,9,
 0x2a9200,42,
 0x2a92c0,1,
 0x2a92c8,13,
@@ -14447,7 +15215,7 @@
 0x2a9550,7,
 0x2a9570,18,
 0x2a95bc,5,
-0x2a9800,448,
+0x2a9800,480,
 0x2aa020,4,
 0x2aa040,11,
 0x2aa074,2,
@@ -14455,9 +15223,9 @@
 0x2aa0b0,22,
 0x2aa110,2,
 0x2aa120,22,
-0x2aa180,1,
+0x2aa180,2,
 0x2aa1a0,6,
-0x2aa1c0,8,
+0x2aa1c0,9,
 0x2aa200,42,
 0x2aa2c0,1,
 0x2aa2c8,13,
@@ -14475,7 +15243,7 @@
 0x2aa550,7,
 0x2aa570,18,
 0x2aa5bc,5,
-0x2aa800,448,
+0x2aa800,480,
 0x2ab020,4,
 0x2ab040,11,
 0x2ab074,2,
@@ -14483,9 +15251,9 @@
 0x2ab0b0,22,
 0x2ab110,2,
 0x2ab120,22,
-0x2ab180,1,
+0x2ab180,2,
 0x2ab1a0,6,
-0x2ab1c0,8,
+0x2ab1c0,9,
 0x2ab200,42,
 0x2ab2c0,1,
 0x2ab2c8,13,
@@ -14503,7 +15271,7 @@
 0x2ab550,7,
 0x2ab570,18,
 0x2ab5bc,5,
-0x2ab800,448,
+0x2ab800,480,
 0x2ac020,4,
 0x2ac040,11,
 0x2ac074,2,
@@ -14511,9 +15279,9 @@
 0x2ac0b0,22,
 0x2ac110,2,
 0x2ac120,22,
-0x2ac180,1,
+0x2ac180,2,
 0x2ac1a0,6,
-0x2ac1c0,8,
+0x2ac1c0,9,
 0x2ac200,42,
 0x2ac2c0,1,
 0x2ac2c8,13,
@@ -14531,7 +15299,7 @@
 0x2ac550,7,
 0x2ac570,18,
 0x2ac5bc,5,
-0x2ac800,448,
+0x2ac800,480,
 0x2af800,5,
 0x2af818,1,
 0x2af854,6,
@@ -14557,12 +15325,12 @@
 0x2afba4,1,
 0x2afbac,2,
 0x2b4000,3,
-0x2b4018,8,
-0x2b4100,56,
+0x2b4018,10,
+0x2b4100,58,
 0x2b41f0,1,
 0x2b4400,3,
-0x2b4418,8,
-0x2b4500,56,
+0x2b4418,10,
+0x2b4500,58,
 0x2b45f0,1,
 0x2b4800,3,
 0x2b4810,3,
@@ -14578,12 +15346,12 @@
 0x2b49c4,1,
 0x2b49d4,3,
 0x2b5000,3,
-0x2b5018,8,
-0x2b5100,56,
+0x2b5018,10,
+0x2b5100,58,
 0x2b51f0,1,
 0x2b5400,3,
-0x2b5418,8,
-0x2b5500,56,
+0x2b5418,10,
+0x2b5500,58,
 0x2b55f0,1,
 0x2b5800,3,
 0x2b5810,3,
@@ -14614,25 +15382,34 @@
 0x2b6800,19,
 0x2b6890,15,
 0x2b6910,15,
-0x2b6990,10,
+0x2b6a00,10,
 0x2b6ab8,4,
 0x2b6b00,3,
+0x2b6b10,1,
 0x2b6e00,6,
+0x2b6f00,5,
 0x2b7000,65,
 0x2b7800,6,
 0x2b7820,6,
 0x2b7840,6,
 0x2b7860,6,
-0x2b7880,3,
+0x2b7880,6,
+0x2b78a0,6,
+0x2b78c0,6,
+0x2b78e0,3,
 0x2b7900,6,
 0x2b7920,6,
 0x2b7940,6,
 0x2b7960,6,
-0x2b7980,3,
+0x2b7980,6,
+0x2b79a0,6,
+0x2b79c0,6,
+0x2b79e0,3,
 0x2b7a00,6,
-0x2b7a20,3,
-0x2b7a40,7,
+0x2b7a20,6,
+0x2b7a40,3,
 0x2b7a80,7,
+0x2b7aa0,7,
 0x2b7ac0,9,
 0x2b7b00,9,
 0x2b7b40,10,
@@ -14656,7 +15433,11 @@
 0x2b8000,2,
 0x2b800c,3,
 0x2b8028,2,
-0x2b8038,47,
+0x2b8038,2,
+0x2b8080,29,
+0x2b80f8,1,
+0x2b8100,13,
+0x2b8140,13,
 0x2b8500,6,
 0x2b8520,6,
 0x2b8540,3,
@@ -14668,7 +15449,11 @@
 0x2b8800,2,
 0x2b880c,3,
 0x2b8828,2,
-0x2b8838,47,
+0x2b8838,2,
+0x2b8880,29,
+0x2b88f8,1,
+0x2b8900,13,
+0x2b8940,13,
 0x2b8d00,6,
 0x2b8d20,6,
 0x2b8d40,3,
@@ -14681,7 +15466,7 @@
 0x2b9828,3,
 0x2b9850,3,
 0x2b9878,3,
-0x2b98a0,8,
+0x2b98a0,9,
 0x2b99ac,1,
 0x2b99d8,4,
 0x2b9a00,6,
@@ -14745,9 +15530,9 @@
 0x2c0c80,13,
 0x2c0cc0,12,
 0x2c0d00,14,
-0x2c0d40,4,
+0x2c0d40,6,
 0x2c0d80,14,
-0x2c0dc0,4,
+0x2c0dc0,6,
 0x2c0e00,11,
 0x2c0e40,6,
 0x2c0e60,6,
@@ -14757,8 +15542,8 @@
 0x2c1014,4,
 0x2c1040,3,
 0x2c1050,3,
-0x2c1080,42,
-0x2c1140,10,
+0x2c1080,43,
+0x2c1140,11,
 0x2c1180,1,
 0x2c119c,15,
 0x2c1200,12,
@@ -14805,9 +15590,11 @@
 0x2c1d5c,1,
 0x2c1d80,1,
 0x2c1da0,1,
-0x2c1da8,7,
+0x2c1da8,4,
+0x2c1dc0,1,
 0x2c1de0,1,
-0x2c1de8,19,
+0x2c1de8,4,
+0x2c1e00,13,
 0x2c1e40,6,
 0x2c1e60,6,
 0x2c1e80,6,
@@ -14868,9 +15655,9 @@
 0x2c2c80,13,
 0x2c2cc0,12,
 0x2c2d00,14,
-0x2c2d40,4,
+0x2c2d40,6,
 0x2c2d80,14,
-0x2c2dc0,4,
+0x2c2dc0,6,
 0x2c2e00,11,
 0x2c2e40,6,
 0x2c2e60,6,
@@ -14880,8 +15667,8 @@
 0x2c3014,4,
 0x2c3040,3,
 0x2c3050,3,
-0x2c3080,42,
-0x2c3140,10,
+0x2c3080,43,
+0x2c3140,11,
 0x2c3180,1,
 0x2c319c,15,
 0x2c3200,12,
@@ -14928,9 +15715,11 @@
 0x2c3d5c,1,
 0x2c3d80,1,
 0x2c3da0,1,
-0x2c3da8,7,
+0x2c3da8,4,
+0x2c3dc0,1,
 0x2c3de0,1,
-0x2c3de8,19,
+0x2c3de8,4,
+0x2c3e00,13,
 0x2c3e40,6,
 0x2c3e60,6,
 0x2c3e80,6,
@@ -14969,8 +15758,7 @@
 0x2c46c0,11,
 0x2c4700,14,
 0x2c4740,14,
-0x2c4780,62,
-0x2c487c,6,
+0x2c4780,69,
 0x2c4c00,6,
 0x2c4c40,14,
 0x2c4c80,9,
@@ -15020,8 +15808,7 @@
 0x2c56c0,11,
 0x2c5700,14,
 0x2c5740,14,
-0x2c5780,62,
-0x2c587c,6,
+0x2c5780,69,
 0x2c5c00,6,
 0x2c5c40,14,
 0x2c5c80,9,
@@ -15090,8 +15877,7 @@
 0x2c6c50,10,
 0x2c6c84,1,
 0x2c6c94,8,
-0x2c6cb8,9,
-0x2c6ce0,4,
+0x2c6cb8,14,
 0x2c7000,1,
 0x2c7028,1,
 0x2c7050,1,
@@ -15111,7 +15897,7 @@
 0x2c7520,6,
 0x2c7540,6,
 0x2c7560,3,
-0x2c7570,1,
+0x2c7570,3,
 0x2c8000,6,
 0x2c8020,3,
 0x2c8030,1,
@@ -15128,7 +15914,7 @@
 0x2c8428,1,
 0x2c8450,1,
 0x2c8478,1,
-0x2c84a0,7,
+0x2c84a0,6,
 0x2c85ac,1,
 0x2c85d8,4,
 0x2c8600,6,
@@ -15156,9 +15942,9 @@
 0x2c90b0,22,
 0x2c9110,2,
 0x2c9120,22,
-0x2c9180,1,
+0x2c9180,2,
 0x2c91a0,6,
-0x2c91c0,8,
+0x2c91c0,9,
 0x2c9200,42,
 0x2c92c0,1,
 0x2c92c8,13,
@@ -15176,7 +15962,7 @@
 0x2c9550,7,
 0x2c9570,18,
 0x2c95bc,5,
-0x2c9800,448,
+0x2c9800,480,
 0x2ca020,4,
 0x2ca040,11,
 0x2ca074,2,
@@ -15184,9 +15970,9 @@
 0x2ca0b0,22,
 0x2ca110,2,
 0x2ca120,22,
-0x2ca180,1,
+0x2ca180,2,
 0x2ca1a0,6,
-0x2ca1c0,8,
+0x2ca1c0,9,
 0x2ca200,42,
 0x2ca2c0,1,
 0x2ca2c8,13,
@@ -15204,7 +15990,7 @@
 0x2ca550,7,
 0x2ca570,18,
 0x2ca5bc,5,
-0x2ca800,448,
+0x2ca800,480,
 0x2cb020,4,
 0x2cb040,11,
 0x2cb074,2,
@@ -15212,9 +15998,9 @@
 0x2cb0b0,22,
 0x2cb110,2,
 0x2cb120,22,
-0x2cb180,1,
+0x2cb180,2,
 0x2cb1a0,6,
-0x2cb1c0,8,
+0x2cb1c0,9,
 0x2cb200,42,
 0x2cb2c0,1,
 0x2cb2c8,13,
@@ -15232,7 +16018,7 @@
 0x2cb550,7,
 0x2cb570,18,
 0x2cb5bc,5,
-0x2cb800,448,
+0x2cb800,480,
 0x2cc020,4,
 0x2cc040,11,
 0x2cc074,2,
@@ -15240,9 +16026,9 @@
 0x2cc0b0,22,
 0x2cc110,2,
 0x2cc120,22,
-0x2cc180,1,
+0x2cc180,2,
 0x2cc1a0,6,
-0x2cc1c0,8,
+0x2cc1c0,9,
 0x2cc200,42,
 0x2cc2c0,1,
 0x2cc2c8,13,
@@ -15260,7 +16046,7 @@
 0x2cc550,7,
 0x2cc570,18,
 0x2cc5bc,5,
-0x2cc800,448,
+0x2cc800,480,
 0x2cf800,5,
 0x2cf818,1,
 0x2cf854,6,
@@ -15286,12 +16072,12 @@
 0x2cfba4,1,
 0x2cfbac,2,
 0x2d4000,3,
-0x2d4018,8,
-0x2d4100,56,
+0x2d4018,10,
+0x2d4100,58,
 0x2d41f0,1,
 0x2d4400,3,
-0x2d4418,8,
-0x2d4500,56,
+0x2d4418,10,
+0x2d4500,58,
 0x2d45f0,1,
 0x2d4800,3,
 0x2d4810,3,
@@ -15307,12 +16093,12 @@
 0x2d49c4,1,
 0x2d49d4,3,
 0x2d5000,3,
-0x2d5018,8,
-0x2d5100,56,
+0x2d5018,10,
+0x2d5100,58,
 0x2d51f0,1,
 0x2d5400,3,
-0x2d5418,8,
-0x2d5500,56,
+0x2d5418,10,
+0x2d5500,58,
 0x2d55f0,1,
 0x2d5800,3,
 0x2d5810,3,
@@ -15343,25 +16129,34 @@
 0x2d6800,19,
 0x2d6890,15,
 0x2d6910,15,
-0x2d6990,10,
+0x2d6a00,10,
 0x2d6ab8,4,
 0x2d6b00,3,
+0x2d6b10,1,
 0x2d6e00,6,
+0x2d6f00,5,
 0x2d7000,65,
 0x2d7800,6,
 0x2d7820,6,
 0x2d7840,6,
 0x2d7860,6,
-0x2d7880,3,
+0x2d7880,6,
+0x2d78a0,6,
+0x2d78c0,6,
+0x2d78e0,3,
 0x2d7900,6,
 0x2d7920,6,
 0x2d7940,6,
 0x2d7960,6,
-0x2d7980,3,
+0x2d7980,6,
+0x2d79a0,6,
+0x2d79c0,6,
+0x2d79e0,3,
 0x2d7a00,6,
-0x2d7a20,3,
-0x2d7a40,7,
+0x2d7a20,6,
+0x2d7a40,3,
 0x2d7a80,7,
+0x2d7aa0,7,
 0x2d7ac0,9,
 0x2d7b00,9,
 0x2d7b40,10,
@@ -15385,7 +16180,11 @@
 0x2d8000,2,
 0x2d800c,3,
 0x2d8028,2,
-0x2d8038,47,
+0x2d8038,2,
+0x2d8080,29,
+0x2d80f8,1,
+0x2d8100,13,
+0x2d8140,13,
 0x2d8500,6,
 0x2d8520,6,
 0x2d8540,3,
@@ -15397,7 +16196,11 @@
 0x2d8800,2,
 0x2d880c,3,
 0x2d8828,2,
-0x2d8838,47,
+0x2d8838,2,
+0x2d8880,29,
+0x2d88f8,1,
+0x2d8900,13,
+0x2d8940,13,
 0x2d8d00,6,
 0x2d8d20,6,
 0x2d8d40,3,
@@ -15410,7 +16213,7 @@
 0x2d9828,3,
 0x2d9850,3,
 0x2d9878,3,
-0x2d98a0,8,
+0x2d98a0,9,
 0x2d99ac,1,
 0x2d99d8,4,
 0x2d9a00,6,
@@ -15474,9 +16277,9 @@
 0x2e0c80,13,
 0x2e0cc0,12,
 0x2e0d00,14,
-0x2e0d40,4,
+0x2e0d40,6,
 0x2e0d80,14,
-0x2e0dc0,4,
+0x2e0dc0,6,
 0x2e0e00,11,
 0x2e0e40,6,
 0x2e0e60,6,
@@ -15486,8 +16289,8 @@
 0x2e1014,4,
 0x2e1040,3,
 0x2e1050,3,
-0x2e1080,42,
-0x2e1140,10,
+0x2e1080,43,
+0x2e1140,11,
 0x2e1180,1,
 0x2e119c,15,
 0x2e1200,12,
@@ -15534,9 +16337,11 @@
 0x2e1d5c,1,
 0x2e1d80,1,
 0x2e1da0,1,
-0x2e1da8,7,
+0x2e1da8,4,
+0x2e1dc0,1,
 0x2e1de0,1,
-0x2e1de8,19,
+0x2e1de8,4,
+0x2e1e00,13,
 0x2e1e40,6,
 0x2e1e60,6,
 0x2e1e80,6,
@@ -15597,9 +16402,9 @@
 0x2e2c80,13,
 0x2e2cc0,12,
 0x2e2d00,14,
-0x2e2d40,4,
+0x2e2d40,6,
 0x2e2d80,14,
-0x2e2dc0,4,
+0x2e2dc0,6,
 0x2e2e00,11,
 0x2e2e40,6,
 0x2e2e60,6,
@@ -15609,8 +16414,8 @@
 0x2e3014,4,
 0x2e3040,3,
 0x2e3050,3,
-0x2e3080,42,
-0x2e3140,10,
+0x2e3080,43,
+0x2e3140,11,
 0x2e3180,1,
 0x2e319c,15,
 0x2e3200,12,
@@ -15657,9 +16462,11 @@
 0x2e3d5c,1,
 0x2e3d80,1,
 0x2e3da0,1,
-0x2e3da8,7,
+0x2e3da8,4,
+0x2e3dc0,1,
 0x2e3de0,1,
-0x2e3de8,19,
+0x2e3de8,4,
+0x2e3e00,13,
 0x2e3e40,6,
 0x2e3e60,6,
 0x2e3e80,6,
@@ -15698,8 +16505,7 @@
 0x2e46c0,11,
 0x2e4700,14,
 0x2e4740,14,
-0x2e4780,62,
-0x2e487c,6,
+0x2e4780,69,
 0x2e4c00,6,
 0x2e4c40,14,
 0x2e4c80,9,
@@ -15749,8 +16555,7 @@
 0x2e56c0,11,
 0x2e5700,14,
 0x2e5740,14,
-0x2e5780,62,
-0x2e587c,6,
+0x2e5780,69,
 0x2e5c00,6,
 0x2e5c40,14,
 0x2e5c80,9,
@@ -15819,8 +16624,7 @@
 0x2e6c50,10,
 0x2e6c84,1,
 0x2e6c94,8,
-0x2e6cb8,9,
-0x2e6ce0,4,
+0x2e6cb8,14,
 0x2e7000,1,
 0x2e7028,1,
 0x2e7050,1,
@@ -15840,7 +16644,7 @@
 0x2e7520,6,
 0x2e7540,6,
 0x2e7560,3,
-0x2e7570,1,
+0x2e7570,3,
 0x2e8000,6,
 0x2e8020,3,
 0x2e8030,1,
@@ -15857,7 +16661,7 @@
 0x2e8428,1,
 0x2e8450,1,
 0x2e8478,1,
-0x2e84a0,7,
+0x2e84a0,6,
 0x2e85ac,1,
 0x2e85d8,4,
 0x2e8600,6,
@@ -15885,9 +16689,9 @@
 0x2e90b0,22,
 0x2e9110,2,
 0x2e9120,22,
-0x2e9180,1,
+0x2e9180,2,
 0x2e91a0,6,
-0x2e91c0,8,
+0x2e91c0,9,
 0x2e9200,42,
 0x2e92c0,1,
 0x2e92c8,13,
@@ -15905,7 +16709,7 @@
 0x2e9550,7,
 0x2e9570,18,
 0x2e95bc,5,
-0x2e9800,448,
+0x2e9800,480,
 0x2ea020,4,
 0x2ea040,11,
 0x2ea074,2,
@@ -15913,9 +16717,9 @@
 0x2ea0b0,22,
 0x2ea110,2,
 0x2ea120,22,
-0x2ea180,1,
+0x2ea180,2,
 0x2ea1a0,6,
-0x2ea1c0,8,
+0x2ea1c0,9,
 0x2ea200,42,
 0x2ea2c0,1,
 0x2ea2c8,13,
@@ -15933,7 +16737,7 @@
 0x2ea550,7,
 0x2ea570,18,
 0x2ea5bc,5,
-0x2ea800,448,
+0x2ea800,480,
 0x2eb020,4,
 0x2eb040,11,
 0x2eb074,2,
@@ -15941,9 +16745,9 @@
 0x2eb0b0,22,
 0x2eb110,2,
 0x2eb120,22,
-0x2eb180,1,
+0x2eb180,2,
 0x2eb1a0,6,
-0x2eb1c0,8,
+0x2eb1c0,9,
 0x2eb200,42,
 0x2eb2c0,1,
 0x2eb2c8,13,
@@ -15961,7 +16765,7 @@
 0x2eb550,7,
 0x2eb570,18,
 0x2eb5bc,5,
-0x2eb800,448,
+0x2eb800,480,
 0x2ec020,4,
 0x2ec040,11,
 0x2ec074,2,
@@ -15969,9 +16773,9 @@
 0x2ec0b0,22,
 0x2ec110,2,
 0x2ec120,22,
-0x2ec180,1,
+0x2ec180,2,
 0x2ec1a0,6,
-0x2ec1c0,8,
+0x2ec1c0,9,
 0x2ec200,42,
 0x2ec2c0,1,
 0x2ec2c8,13,
@@ -15989,7 +16793,7 @@
 0x2ec550,7,
 0x2ec570,18,
 0x2ec5bc,5,
-0x2ec800,448,
+0x2ec800,480,
 0x2ef800,5,
 0x2ef818,1,
 0x2ef854,6,
@@ -16015,12 +16819,12 @@
 0x2efba4,1,
 0x2efbac,2,
 0x2f4000,3,
-0x2f4018,8,
-0x2f4100,56,
+0x2f4018,10,
+0x2f4100,58,
 0x2f41f0,1,
 0x2f4400,3,
-0x2f4418,8,
-0x2f4500,56,
+0x2f4418,10,
+0x2f4500,58,
 0x2f45f0,1,
 0x2f4800,3,
 0x2f4810,3,
@@ -16036,12 +16840,12 @@
 0x2f49c4,1,
 0x2f49d4,3,
 0x2f5000,3,
-0x2f5018,8,
-0x2f5100,56,
+0x2f5018,10,
+0x2f5100,58,
 0x2f51f0,1,
 0x2f5400,3,
-0x2f5418,8,
-0x2f5500,56,
+0x2f5418,10,
+0x2f5500,58,
 0x2f55f0,1,
 0x2f5800,3,
 0x2f5810,3,
@@ -16072,25 +16876,34 @@
 0x2f6800,19,
 0x2f6890,15,
 0x2f6910,15,
-0x2f6990,10,
+0x2f6a00,10,
 0x2f6ab8,4,
 0x2f6b00,3,
+0x2f6b10,1,
 0x2f6e00,6,
+0x2f6f00,5,
 0x2f7000,65,
 0x2f7800,6,
 0x2f7820,6,
 0x2f7840,6,
 0x2f7860,6,
-0x2f7880,3,
+0x2f7880,6,
+0x2f78a0,6,
+0x2f78c0,6,
+0x2f78e0,3,
 0x2f7900,6,
 0x2f7920,6,
 0x2f7940,6,
 0x2f7960,6,
-0x2f7980,3,
+0x2f7980,6,
+0x2f79a0,6,
+0x2f79c0,6,
+0x2f79e0,3,
 0x2f7a00,6,
-0x2f7a20,3,
-0x2f7a40,7,
+0x2f7a20,6,
+0x2f7a40,3,
 0x2f7a80,7,
+0x2f7aa0,7,
 0x2f7ac0,9,
 0x2f7b00,9,
 0x2f7b40,10,
@@ -16114,7 +16927,11 @@
 0x2f8000,2,
 0x2f800c,3,
 0x2f8028,2,
-0x2f8038,47,
+0x2f8038,2,
+0x2f8080,29,
+0x2f80f8,1,
+0x2f8100,13,
+0x2f8140,13,
 0x2f8500,6,
 0x2f8520,6,
 0x2f8540,3,
@@ -16126,7 +16943,11 @@
 0x2f8800,2,
 0x2f880c,3,
 0x2f8828,2,
-0x2f8838,47,
+0x2f8838,2,
+0x2f8880,29,
+0x2f88f8,1,
+0x2f8900,13,
+0x2f8940,13,
 0x2f8d00,6,
 0x2f8d20,6,
 0x2f8d40,3,
@@ -16139,7 +16960,7 @@
 0x2f9828,3,
 0x2f9850,3,
 0x2f9878,3,
-0x2f98a0,8,
+0x2f98a0,9,
 0x2f99ac,1,
 0x2f99d8,4,
 0x2f9a00,6,
@@ -16203,9 +17024,9 @@
 0x300c80,13,
 0x300cc0,12,
 0x300d00,14,
-0x300d40,4,
+0x300d40,6,
 0x300d80,14,
-0x300dc0,4,
+0x300dc0,6,
 0x300e00,11,
 0x300e40,6,
 0x300e60,6,
@@ -16215,8 +17036,8 @@
 0x301014,4,
 0x301040,3,
 0x301050,3,
-0x301080,42,
-0x301140,10,
+0x301080,43,
+0x301140,11,
 0x301180,1,
 0x30119c,15,
 0x301200,12,
@@ -16263,9 +17084,11 @@
 0x301d5c,1,
 0x301d80,1,
 0x301da0,1,
-0x301da8,7,
+0x301da8,4,
+0x301dc0,1,
 0x301de0,1,
-0x301de8,19,
+0x301de8,4,
+0x301e00,13,
 0x301e40,6,
 0x301e60,6,
 0x301e80,6,
@@ -16326,9 +17149,9 @@
 0x302c80,13,
 0x302cc0,12,
 0x302d00,14,
-0x302d40,4,
+0x302d40,6,
 0x302d80,14,
-0x302dc0,4,
+0x302dc0,6,
 0x302e00,11,
 0x302e40,6,
 0x302e60,6,
@@ -16338,8 +17161,8 @@
 0x303014,4,
 0x303040,3,
 0x303050,3,
-0x303080,42,
-0x303140,10,
+0x303080,43,
+0x303140,11,
 0x303180,1,
 0x30319c,15,
 0x303200,12,
@@ -16386,9 +17209,11 @@
 0x303d5c,1,
 0x303d80,1,
 0x303da0,1,
-0x303da8,7,
+0x303da8,4,
+0x303dc0,1,
 0x303de0,1,
-0x303de8,19,
+0x303de8,4,
+0x303e00,13,
 0x303e40,6,
 0x303e60,6,
 0x303e80,6,
@@ -16427,8 +17252,7 @@
 0x3046c0,11,
 0x304700,14,
 0x304740,14,
-0x304780,62,
-0x30487c,6,
+0x304780,69,
 0x304c00,6,
 0x304c40,14,
 0x304c80,9,
@@ -16478,8 +17302,7 @@
 0x3056c0,11,
 0x305700,14,
 0x305740,14,
-0x305780,62,
-0x30587c,6,
+0x305780,69,
 0x305c00,6,
 0x305c40,14,
 0x305c80,9,
@@ -16548,8 +17371,7 @@
 0x306c50,10,
 0x306c84,1,
 0x306c94,8,
-0x306cb8,9,
-0x306ce0,4,
+0x306cb8,14,
 0x307000,1,
 0x307028,1,
 0x307050,1,
@@ -16569,7 +17391,7 @@
 0x307520,6,
 0x307540,6,
 0x307560,3,
-0x307570,1,
+0x307570,3,
 0x308000,6,
 0x308020,3,
 0x308030,1,
@@ -16586,7 +17408,7 @@
 0x308428,1,
 0x308450,1,
 0x308478,1,
-0x3084a0,7,
+0x3084a0,6,
 0x3085ac,1,
 0x3085d8,4,
 0x308600,6,
@@ -16614,9 +17436,9 @@
 0x3090b0,22,
 0x309110,2,
 0x309120,22,
-0x309180,1,
+0x309180,2,
 0x3091a0,6,
-0x3091c0,8,
+0x3091c0,9,
 0x309200,42,
 0x3092c0,1,
 0x3092c8,13,
@@ -16634,7 +17456,7 @@
 0x309550,7,
 0x309570,18,
 0x3095bc,5,
-0x309800,448,
+0x309800,480,
 0x30a020,4,
 0x30a040,11,
 0x30a074,2,
@@ -16642,9 +17464,9 @@
 0x30a0b0,22,
 0x30a110,2,
 0x30a120,22,
-0x30a180,1,
+0x30a180,2,
 0x30a1a0,6,
-0x30a1c0,8,
+0x30a1c0,9,
 0x30a200,42,
 0x30a2c0,1,
 0x30a2c8,13,
@@ -16662,7 +17484,7 @@
 0x30a550,7,
 0x30a570,18,
 0x30a5bc,5,
-0x30a800,448,
+0x30a800,480,
 0x30b020,4,
 0x30b040,11,
 0x30b074,2,
@@ -16670,9 +17492,9 @@
 0x30b0b0,22,
 0x30b110,2,
 0x30b120,22,
-0x30b180,1,
+0x30b180,2,
 0x30b1a0,6,
-0x30b1c0,8,
+0x30b1c0,9,
 0x30b200,42,
 0x30b2c0,1,
 0x30b2c8,13,
@@ -16690,7 +17512,7 @@
 0x30b550,7,
 0x30b570,18,
 0x30b5bc,5,
-0x30b800,448,
+0x30b800,480,
 0x30c020,4,
 0x30c040,11,
 0x30c074,2,
@@ -16698,9 +17520,9 @@
 0x30c0b0,22,
 0x30c110,2,
 0x30c120,22,
-0x30c180,1,
+0x30c180,2,
 0x30c1a0,6,
-0x30c1c0,8,
+0x30c1c0,9,
 0x30c200,42,
 0x30c2c0,1,
 0x30c2c8,13,
@@ -16718,7 +17540,7 @@
 0x30c550,7,
 0x30c570,18,
 0x30c5bc,5,
-0x30c800,448,
+0x30c800,480,
 0x30f800,5,
 0x30f818,1,
 0x30f854,6,
@@ -16744,12 +17566,12 @@
 0x30fba4,1,
 0x30fbac,2,
 0x314000,3,
-0x314018,8,
-0x314100,56,
+0x314018,10,
+0x314100,58,
 0x3141f0,1,
 0x314400,3,
-0x314418,8,
-0x314500,56,
+0x314418,10,
+0x314500,58,
 0x3145f0,1,
 0x314800,3,
 0x314810,3,
@@ -16765,12 +17587,12 @@
 0x3149c4,1,
 0x3149d4,3,
 0x315000,3,
-0x315018,8,
-0x315100,56,
+0x315018,10,
+0x315100,58,
 0x3151f0,1,
 0x315400,3,
-0x315418,8,
-0x315500,56,
+0x315418,10,
+0x315500,58,
 0x3155f0,1,
 0x315800,3,
 0x315810,3,
@@ -16801,25 +17623,34 @@
 0x316800,19,
 0x316890,15,
 0x316910,15,
-0x316990,10,
+0x316a00,10,
 0x316ab8,4,
 0x316b00,3,
+0x316b10,1,
 0x316e00,6,
+0x316f00,5,
 0x317000,65,
 0x317800,6,
 0x317820,6,
 0x317840,6,
 0x317860,6,
-0x317880,3,
+0x317880,6,
+0x3178a0,6,
+0x3178c0,6,
+0x3178e0,3,
 0x317900,6,
 0x317920,6,
 0x317940,6,
 0x317960,6,
-0x317980,3,
+0x317980,6,
+0x3179a0,6,
+0x3179c0,6,
+0x3179e0,3,
 0x317a00,6,
-0x317a20,3,
-0x317a40,7,
+0x317a20,6,
+0x317a40,3,
 0x317a80,7,
+0x317aa0,7,
 0x317ac0,9,
 0x317b00,9,
 0x317b40,10,
@@ -16843,7 +17674,11 @@
 0x318000,2,
 0x31800c,3,
 0x318028,2,
-0x318038,47,
+0x318038,2,
+0x318080,29,
+0x3180f8,1,
+0x318100,13,
+0x318140,13,
 0x318500,6,
 0x318520,6,
 0x318540,3,
@@ -16855,7 +17690,11 @@
 0x318800,2,
 0x31880c,3,
 0x318828,2,
-0x318838,47,
+0x318838,2,
+0x318880,29,
+0x3188f8,1,
+0x318900,13,
+0x318940,13,
 0x318d00,6,
 0x318d20,6,
 0x318d40,3,
@@ -16868,7 +17707,7 @@
 0x319828,3,
 0x319850,3,
 0x319878,3,
-0x3198a0,8,
+0x3198a0,9,
 0x3199ac,1,
 0x3199d8,4,
 0x319a00,6,
@@ -16932,9 +17771,9 @@
 0x320c80,13,
 0x320cc0,12,
 0x320d00,14,
-0x320d40,4,
+0x320d40,6,
 0x320d80,14,
-0x320dc0,4,
+0x320dc0,6,
 0x320e00,11,
 0x320e40,6,
 0x320e60,6,
@@ -16944,8 +17783,8 @@
 0x321014,4,
 0x321040,3,
 0x321050,3,
-0x321080,42,
-0x321140,10,
+0x321080,43,
+0x321140,11,
 0x321180,1,
 0x32119c,15,
 0x321200,12,
@@ -16992,9 +17831,11 @@
 0x321d5c,1,
 0x321d80,1,
 0x321da0,1,
-0x321da8,7,
+0x321da8,4,
+0x321dc0,1,
 0x321de0,1,
-0x321de8,19,
+0x321de8,4,
+0x321e00,13,
 0x321e40,6,
 0x321e60,6,
 0x321e80,6,
@@ -17055,9 +17896,9 @@
 0x322c80,13,
 0x322cc0,12,
 0x322d00,14,
-0x322d40,4,
+0x322d40,6,
 0x322d80,14,
-0x322dc0,4,
+0x322dc0,6,
 0x322e00,11,
 0x322e40,6,
 0x322e60,6,
@@ -17067,8 +17908,8 @@
 0x323014,4,
 0x323040,3,
 0x323050,3,
-0x323080,42,
-0x323140,10,
+0x323080,43,
+0x323140,11,
 0x323180,1,
 0x32319c,15,
 0x323200,12,
@@ -17115,9 +17956,11 @@
 0x323d5c,1,
 0x323d80,1,
 0x323da0,1,
-0x323da8,7,
+0x323da8,4,
+0x323dc0,1,
 0x323de0,1,
-0x323de8,19,
+0x323de8,4,
+0x323e00,13,
 0x323e40,6,
 0x323e60,6,
 0x323e80,6,
@@ -17156,8 +17999,7 @@
 0x3246c0,11,
 0x324700,14,
 0x324740,14,
-0x324780,62,
-0x32487c,6,
+0x324780,69,
 0x324c00,6,
 0x324c40,14,
 0x324c80,9,
@@ -17207,8 +18049,7 @@
 0x3256c0,11,
 0x325700,14,
 0x325740,14,
-0x325780,62,
-0x32587c,6,
+0x325780,69,
 0x325c00,6,
 0x325c40,14,
 0x325c80,9,
@@ -17277,8 +18118,7 @@
 0x326c50,10,
 0x326c84,1,
 0x326c94,8,
-0x326cb8,9,
-0x326ce0,4,
+0x326cb8,14,
 0x327000,1,
 0x327028,1,
 0x327050,1,
@@ -17298,7 +18138,7 @@
 0x327520,6,
 0x327540,6,
 0x327560,3,
-0x327570,1,
+0x327570,3,
 0x328000,6,
 0x328020,3,
 0x328030,1,
@@ -17315,7 +18155,7 @@
 0x328428,1,
 0x328450,1,
 0x328478,1,
-0x3284a0,7,
+0x3284a0,6,
 0x3285ac,1,
 0x3285d8,4,
 0x328600,6,
@@ -17343,9 +18183,9 @@
 0x3290b0,22,
 0x329110,2,
 0x329120,22,
-0x329180,1,
+0x329180,2,
 0x3291a0,6,
-0x3291c0,8,
+0x3291c0,9,
 0x329200,42,
 0x3292c0,1,
 0x3292c8,13,
@@ -17363,7 +18203,7 @@
 0x329550,7,
 0x329570,18,
 0x3295bc,5,
-0x329800,448,
+0x329800,480,
 0x32a020,4,
 0x32a040,11,
 0x32a074,2,
@@ -17371,9 +18211,9 @@
 0x32a0b0,22,
 0x32a110,2,
 0x32a120,22,
-0x32a180,1,
+0x32a180,2,
 0x32a1a0,6,
-0x32a1c0,8,
+0x32a1c0,9,
 0x32a200,42,
 0x32a2c0,1,
 0x32a2c8,13,
@@ -17391,7 +18231,7 @@
 0x32a550,7,
 0x32a570,18,
 0x32a5bc,5,
-0x32a800,448,
+0x32a800,480,
 0x32b020,4,
 0x32b040,11,
 0x32b074,2,
@@ -17399,9 +18239,9 @@
 0x32b0b0,22,
 0x32b110,2,
 0x32b120,22,
-0x32b180,1,
+0x32b180,2,
 0x32b1a0,6,
-0x32b1c0,8,
+0x32b1c0,9,
 0x32b200,42,
 0x32b2c0,1,
 0x32b2c8,13,
@@ -17419,7 +18259,7 @@
 0x32b550,7,
 0x32b570,18,
 0x32b5bc,5,
-0x32b800,448,
+0x32b800,480,
 0x32c020,4,
 0x32c040,11,
 0x32c074,2,
@@ -17427,9 +18267,9 @@
 0x32c0b0,22,
 0x32c110,2,
 0x32c120,22,
-0x32c180,1,
+0x32c180,2,
 0x32c1a0,6,
-0x32c1c0,8,
+0x32c1c0,9,
 0x32c200,42,
 0x32c2c0,1,
 0x32c2c8,13,
@@ -17447,7 +18287,7 @@
 0x32c550,7,
 0x32c570,18,
 0x32c5bc,5,
-0x32c800,448,
+0x32c800,480,
 0x32f800,5,
 0x32f818,1,
 0x32f854,6,
@@ -17473,12 +18313,12 @@
 0x32fba4,1,
 0x32fbac,2,
 0x334000,3,
-0x334018,8,
-0x334100,56,
+0x334018,10,
+0x334100,58,
 0x3341f0,1,
 0x334400,3,
-0x334418,8,
-0x334500,56,
+0x334418,10,
+0x334500,58,
 0x3345f0,1,
 0x334800,3,
 0x334810,3,
@@ -17494,12 +18334,12 @@
 0x3349c4,1,
 0x3349d4,3,
 0x335000,3,
-0x335018,8,
-0x335100,56,
+0x335018,10,
+0x335100,58,
 0x3351f0,1,
 0x335400,3,
-0x335418,8,
-0x335500,56,
+0x335418,10,
+0x335500,58,
 0x3355f0,1,
 0x335800,3,
 0x335810,3,
@@ -17530,25 +18370,34 @@
 0x336800,19,
 0x336890,15,
 0x336910,15,
-0x336990,10,
+0x336a00,10,
 0x336ab8,4,
 0x336b00,3,
+0x336b10,1,
 0x336e00,6,
+0x336f00,5,
 0x337000,65,
 0x337800,6,
 0x337820,6,
 0x337840,6,
 0x337860,6,
-0x337880,3,
+0x337880,6,
+0x3378a0,6,
+0x3378c0,6,
+0x3378e0,3,
 0x337900,6,
 0x337920,6,
 0x337940,6,
 0x337960,6,
-0x337980,3,
+0x337980,6,
+0x3379a0,6,
+0x3379c0,6,
+0x3379e0,3,
 0x337a00,6,
-0x337a20,3,
-0x337a40,7,
+0x337a20,6,
+0x337a40,3,
 0x337a80,7,
+0x337aa0,7,
 0x337ac0,9,
 0x337b00,9,
 0x337b40,10,
@@ -17572,7 +18421,11 @@
 0x338000,2,
 0x33800c,3,
 0x338028,2,
-0x338038,47,
+0x338038,2,
+0x338080,29,
+0x3380f8,1,
+0x338100,13,
+0x338140,13,
 0x338500,6,
 0x338520,6,
 0x338540,3,
@@ -17584,7 +18437,11 @@
 0x338800,2,
 0x33880c,3,
 0x338828,2,
-0x338838,47,
+0x338838,2,
+0x338880,29,
+0x3388f8,1,
+0x338900,13,
+0x338940,13,
 0x338d00,6,
 0x338d20,6,
 0x338d40,3,
@@ -17597,7 +18454,7 @@
 0x339828,3,
 0x339850,3,
 0x339878,3,
-0x3398a0,8,
+0x3398a0,9,
 0x3399ac,1,
 0x3399d8,4,
 0x339a00,6,
@@ -17661,9 +18518,9 @@
 0x340c80,13,
 0x340cc0,12,
 0x340d00,14,
-0x340d40,4,
+0x340d40,6,
 0x340d80,14,
-0x340dc0,4,
+0x340dc0,6,
 0x340e00,11,
 0x340e40,6,
 0x340e60,6,
@@ -17673,8 +18530,8 @@
 0x341014,4,
 0x341040,3,
 0x341050,3,
-0x341080,42,
-0x341140,10,
+0x341080,43,
+0x341140,11,
 0x341180,1,
 0x34119c,15,
 0x341200,12,
@@ -17721,9 +18578,11 @@
 0x341d5c,1,
 0x341d80,1,
 0x341da0,1,
-0x341da8,7,
+0x341da8,4,
+0x341dc0,1,
 0x341de0,1,
-0x341de8,19,
+0x341de8,4,
+0x341e00,13,
 0x341e40,6,
 0x341e60,6,
 0x341e80,6,
@@ -17784,9 +18643,9 @@
 0x342c80,13,
 0x342cc0,12,
 0x342d00,14,
-0x342d40,4,
+0x342d40,6,
 0x342d80,14,
-0x342dc0,4,
+0x342dc0,6,
 0x342e00,11,
 0x342e40,6,
 0x342e60,6,
@@ -17796,8 +18655,8 @@
 0x343014,4,
 0x343040,3,
 0x343050,3,
-0x343080,42,
-0x343140,10,
+0x343080,43,
+0x343140,11,
 0x343180,1,
 0x34319c,15,
 0x343200,12,
@@ -17844,9 +18703,11 @@
 0x343d5c,1,
 0x343d80,1,
 0x343da0,1,
-0x343da8,7,
+0x343da8,4,
+0x343dc0,1,
 0x343de0,1,
-0x343de8,19,
+0x343de8,4,
+0x343e00,13,
 0x343e40,6,
 0x343e60,6,
 0x343e80,6,
@@ -17885,8 +18746,7 @@
 0x3446c0,11,
 0x344700,14,
 0x344740,14,
-0x344780,62,
-0x34487c,6,
+0x344780,69,
 0x344c00,6,
 0x344c40,14,
 0x344c80,9,
@@ -17936,8 +18796,7 @@
 0x3456c0,11,
 0x345700,14,
 0x345740,14,
-0x345780,62,
-0x34587c,6,
+0x345780,69,
 0x345c00,6,
 0x345c40,14,
 0x345c80,9,
@@ -18006,8 +18865,7 @@
 0x346c50,10,
 0x346c84,1,
 0x346c94,8,
-0x346cb8,9,
-0x346ce0,4,
+0x346cb8,14,
 0x347000,1,
 0x347028,1,
 0x347050,1,
@@ -18027,7 +18885,7 @@
 0x347520,6,
 0x347540,6,
 0x347560,3,
-0x347570,1,
+0x347570,3,
 0x348000,6,
 0x348020,3,
 0x348030,1,
@@ -18044,7 +18902,7 @@
 0x348428,1,
 0x348450,1,
 0x348478,1,
-0x3484a0,7,
+0x3484a0,6,
 0x3485ac,1,
 0x3485d8,4,
 0x348600,6,
@@ -18072,9 +18930,9 @@
 0x3490b0,22,
 0x349110,2,
 0x349120,22,
-0x349180,1,
+0x349180,2,
 0x3491a0,6,
-0x3491c0,8,
+0x3491c0,9,
 0x349200,42,
 0x3492c0,1,
 0x3492c8,13,
@@ -18092,7 +18950,7 @@
 0x349550,7,
 0x349570,18,
 0x3495bc,5,
-0x349800,448,
+0x349800,480,
 0x34a020,4,
 0x34a040,11,
 0x34a074,2,
@@ -18100,9 +18958,9 @@
 0x34a0b0,22,
 0x34a110,2,
 0x34a120,22,
-0x34a180,1,
+0x34a180,2,
 0x34a1a0,6,
-0x34a1c0,8,
+0x34a1c0,9,
 0x34a200,42,
 0x34a2c0,1,
 0x34a2c8,13,
@@ -18120,7 +18978,7 @@
 0x34a550,7,
 0x34a570,18,
 0x34a5bc,5,
-0x34a800,448,
+0x34a800,480,
 0x34b020,4,
 0x34b040,11,
 0x34b074,2,
@@ -18128,9 +18986,9 @@
 0x34b0b0,22,
 0x34b110,2,
 0x34b120,22,
-0x34b180,1,
+0x34b180,2,
 0x34b1a0,6,
-0x34b1c0,8,
+0x34b1c0,9,
 0x34b200,42,
 0x34b2c0,1,
 0x34b2c8,13,
@@ -18148,7 +19006,7 @@
 0x34b550,7,
 0x34b570,18,
 0x34b5bc,5,
-0x34b800,448,
+0x34b800,480,
 0x34c020,4,
 0x34c040,11,
 0x34c074,2,
@@ -18156,9 +19014,9 @@
 0x34c0b0,22,
 0x34c110,2,
 0x34c120,22,
-0x34c180,1,
+0x34c180,2,
 0x34c1a0,6,
-0x34c1c0,8,
+0x34c1c0,9,
 0x34c200,42,
 0x34c2c0,1,
 0x34c2c8,13,
@@ -18176,7 +19034,7 @@
 0x34c550,7,
 0x34c570,18,
 0x34c5bc,5,
-0x34c800,448,
+0x34c800,480,
 0x34f800,5,
 0x34f818,1,
 0x34f854,6,
@@ -18202,12 +19060,12 @@
 0x34fba4,1,
 0x34fbac,2,
 0x354000,3,
-0x354018,8,
-0x354100,56,
+0x354018,10,
+0x354100,58,
 0x3541f0,1,
 0x354400,3,
-0x354418,8,
-0x354500,56,
+0x354418,10,
+0x354500,58,
 0x3545f0,1,
 0x354800,3,
 0x354810,3,
@@ -18223,12 +19081,12 @@
 0x3549c4,1,
 0x3549d4,3,
 0x355000,3,
-0x355018,8,
-0x355100,56,
+0x355018,10,
+0x355100,58,
 0x3551f0,1,
 0x355400,3,
-0x355418,8,
-0x355500,56,
+0x355418,10,
+0x355500,58,
 0x3555f0,1,
 0x355800,3,
 0x355810,3,
@@ -18259,25 +19117,34 @@
 0x356800,19,
 0x356890,15,
 0x356910,15,
-0x356990,10,
+0x356a00,10,
 0x356ab8,4,
 0x356b00,3,
+0x356b10,1,
 0x356e00,6,
+0x356f00,5,
 0x357000,65,
 0x357800,6,
 0x357820,6,
 0x357840,6,
 0x357860,6,
-0x357880,3,
+0x357880,6,
+0x3578a0,6,
+0x3578c0,6,
+0x3578e0,3,
 0x357900,6,
 0x357920,6,
 0x357940,6,
 0x357960,6,
-0x357980,3,
+0x357980,6,
+0x3579a0,6,
+0x3579c0,6,
+0x3579e0,3,
 0x357a00,6,
-0x357a20,3,
-0x357a40,7,
+0x357a20,6,
+0x357a40,3,
 0x357a80,7,
+0x357aa0,7,
 0x357ac0,9,
 0x357b00,9,
 0x357b40,10,
@@ -18301,7 +19168,11 @@
 0x358000,2,
 0x35800c,3,
 0x358028,2,
-0x358038,47,
+0x358038,2,
+0x358080,29,
+0x3580f8,1,
+0x358100,13,
+0x358140,13,
 0x358500,6,
 0x358520,6,
 0x358540,3,
@@ -18313,7 +19184,11 @@
 0x358800,2,
 0x35880c,3,
 0x358828,2,
-0x358838,47,
+0x358838,2,
+0x358880,29,
+0x3588f8,1,
+0x358900,13,
+0x358940,13,
 0x358d00,6,
 0x358d20,6,
 0x358d40,3,
@@ -18326,7 +19201,7 @@
 0x359828,3,
 0x359850,3,
 0x359878,3,
-0x3598a0,8,
+0x3598a0,9,
 0x3599ac,1,
 0x3599d8,4,
 0x359a00,6,
@@ -18390,9 +19265,9 @@
 0x360c80,13,
 0x360cc0,12,
 0x360d00,14,
-0x360d40,4,
+0x360d40,6,
 0x360d80,14,
-0x360dc0,4,
+0x360dc0,6,
 0x360e00,11,
 0x360e40,6,
 0x360e60,6,
@@ -18402,8 +19277,8 @@
 0x361014,4,
 0x361040,3,
 0x361050,3,
-0x361080,42,
-0x361140,10,
+0x361080,43,
+0x361140,11,
 0x361180,1,
 0x36119c,15,
 0x361200,12,
@@ -18450,9 +19325,11 @@
 0x361d5c,1,
 0x361d80,1,
 0x361da0,1,
-0x361da8,7,
+0x361da8,4,
+0x361dc0,1,
 0x361de0,1,
-0x361de8,19,
+0x361de8,4,
+0x361e00,13,
 0x361e40,6,
 0x361e60,6,
 0x361e80,6,
@@ -18513,9 +19390,9 @@
 0x362c80,13,
 0x362cc0,12,
 0x362d00,14,
-0x362d40,4,
+0x362d40,6,
 0x362d80,14,
-0x362dc0,4,
+0x362dc0,6,
 0x362e00,11,
 0x362e40,6,
 0x362e60,6,
@@ -18525,8 +19402,8 @@
 0x363014,4,
 0x363040,3,
 0x363050,3,
-0x363080,42,
-0x363140,10,
+0x363080,43,
+0x363140,11,
 0x363180,1,
 0x36319c,15,
 0x363200,12,
@@ -18573,9 +19450,11 @@
 0x363d5c,1,
 0x363d80,1,
 0x363da0,1,
-0x363da8,7,
+0x363da8,4,
+0x363dc0,1,
 0x363de0,1,
-0x363de8,19,
+0x363de8,4,
+0x363e00,13,
 0x363e40,6,
 0x363e60,6,
 0x363e80,6,
@@ -18614,8 +19493,7 @@
 0x3646c0,11,
 0x364700,14,
 0x364740,14,
-0x364780,62,
-0x36487c,6,
+0x364780,69,
 0x364c00,6,
 0x364c40,14,
 0x364c80,9,
@@ -18665,8 +19543,7 @@
 0x3656c0,11,
 0x365700,14,
 0x365740,14,
-0x365780,62,
-0x36587c,6,
+0x365780,69,
 0x365c00,6,
 0x365c40,14,
 0x365c80,9,
@@ -18735,8 +19612,7 @@
 0x366c50,10,
 0x366c84,1,
 0x366c94,8,
-0x366cb8,9,
-0x366ce0,4,
+0x366cb8,14,
 0x367000,1,
 0x367028,1,
 0x367050,1,
@@ -18756,7 +19632,7 @@
 0x367520,6,
 0x367540,6,
 0x367560,3,
-0x367570,1,
+0x367570,3,
 0x368000,6,
 0x368020,3,
 0x368030,1,
@@ -18773,7 +19649,7 @@
 0x368428,1,
 0x368450,1,
 0x368478,1,
-0x3684a0,7,
+0x3684a0,6,
 0x3685ac,1,
 0x3685d8,4,
 0x368600,6,
@@ -18801,9 +19677,9 @@
 0x3690b0,22,
 0x369110,2,
 0x369120,22,
-0x369180,1,
+0x369180,2,
 0x3691a0,6,
-0x3691c0,8,
+0x3691c0,9,
 0x369200,42,
 0x3692c0,1,
 0x3692c8,13,
@@ -18821,7 +19697,7 @@
 0x369550,7,
 0x369570,18,
 0x3695bc,5,
-0x369800,448,
+0x369800,480,
 0x36a020,4,
 0x36a040,11,
 0x36a074,2,
@@ -18829,9 +19705,9 @@
 0x36a0b0,22,
 0x36a110,2,
 0x36a120,22,
-0x36a180,1,
+0x36a180,2,
 0x36a1a0,6,
-0x36a1c0,8,
+0x36a1c0,9,
 0x36a200,42,
 0x36a2c0,1,
 0x36a2c8,13,
@@ -18849,7 +19725,7 @@
 0x36a550,7,
 0x36a570,18,
 0x36a5bc,5,
-0x36a800,448,
+0x36a800,480,
 0x36b020,4,
 0x36b040,11,
 0x36b074,2,
@@ -18857,9 +19733,9 @@
 0x36b0b0,22,
 0x36b110,2,
 0x36b120,22,
-0x36b180,1,
+0x36b180,2,
 0x36b1a0,6,
-0x36b1c0,8,
+0x36b1c0,9,
 0x36b200,42,
 0x36b2c0,1,
 0x36b2c8,13,
@@ -18877,7 +19753,7 @@
 0x36b550,7,
 0x36b570,18,
 0x36b5bc,5,
-0x36b800,448,
+0x36b800,480,
 0x36c020,4,
 0x36c040,11,
 0x36c074,2,
@@ -18885,9 +19761,9 @@
 0x36c0b0,22,
 0x36c110,2,
 0x36c120,22,
-0x36c180,1,
+0x36c180,2,
 0x36c1a0,6,
-0x36c1c0,8,
+0x36c1c0,9,
 0x36c200,42,
 0x36c2c0,1,
 0x36c2c8,13,
@@ -18905,7 +19781,7 @@
 0x36c550,7,
 0x36c570,18,
 0x36c5bc,5,
-0x36c800,448,
+0x36c800,480,
 0x36f800,5,
 0x36f818,1,
 0x36f854,6,
@@ -18931,12 +19807,12 @@
 0x36fba4,1,
 0x36fbac,2,
 0x374000,3,
-0x374018,8,
-0x374100,56,
+0x374018,10,
+0x374100,58,
 0x3741f0,1,
 0x374400,3,
-0x374418,8,
-0x374500,56,
+0x374418,10,
+0x374500,58,
 0x3745f0,1,
 0x374800,3,
 0x374810,3,
@@ -18952,12 +19828,12 @@
 0x3749c4,1,
 0x3749d4,3,
 0x375000,3,
-0x375018,8,
-0x375100,56,
+0x375018,10,
+0x375100,58,
 0x3751f0,1,
 0x375400,3,
-0x375418,8,
-0x375500,56,
+0x375418,10,
+0x375500,58,
 0x3755f0,1,
 0x375800,3,
 0x375810,3,
@@ -18988,25 +19864,34 @@
 0x376800,19,
 0x376890,15,
 0x376910,15,
-0x376990,10,
+0x376a00,10,
 0x376ab8,4,
 0x376b00,3,
+0x376b10,1,
 0x376e00,6,
+0x376f00,5,
 0x377000,65,
 0x377800,6,
 0x377820,6,
 0x377840,6,
 0x377860,6,
-0x377880,3,
+0x377880,6,
+0x3778a0,6,
+0x3778c0,6,
+0x3778e0,3,
 0x377900,6,
 0x377920,6,
 0x377940,6,
 0x377960,6,
-0x377980,3,
+0x377980,6,
+0x3779a0,6,
+0x3779c0,6,
+0x3779e0,3,
 0x377a00,6,
-0x377a20,3,
-0x377a40,7,
+0x377a20,6,
+0x377a40,3,
 0x377a80,7,
+0x377aa0,7,
 0x377ac0,9,
 0x377b00,9,
 0x377b40,10,
@@ -19030,7 +19915,11 @@
 0x378000,2,
 0x37800c,3,
 0x378028,2,
-0x378038,47,
+0x378038,2,
+0x378080,29,
+0x3780f8,1,
+0x378100,13,
+0x378140,13,
 0x378500,6,
 0x378520,6,
 0x378540,3,
@@ -19042,7 +19931,11 @@
 0x378800,2,
 0x37880c,3,
 0x378828,2,
-0x378838,47,
+0x378838,2,
+0x378880,29,
+0x3788f8,1,
+0x378900,13,
+0x378940,13,
 0x378d00,6,
 0x378d20,6,
 0x378d40,3,
@@ -19055,7 +19948,7 @@
 0x379828,3,
 0x379850,3,
 0x379878,3,
-0x3798a0,8,
+0x3798a0,9,
 0x3799ac,1,
 0x3799d8,4,
 0x379a00,6,
@@ -19119,9 +20012,9 @@
 0x380c80,13,
 0x380cc0,12,
 0x380d00,14,
-0x380d40,4,
+0x380d40,6,
 0x380d80,14,
-0x380dc0,4,
+0x380dc0,6,
 0x380e00,11,
 0x380e40,6,
 0x380e60,6,
@@ -19131,8 +20024,8 @@
 0x381014,4,
 0x381040,3,
 0x381050,3,
-0x381080,42,
-0x381140,10,
+0x381080,43,
+0x381140,11,
 0x381180,1,
 0x38119c,15,
 0x381200,12,
@@ -19179,9 +20072,11 @@
 0x381d5c,1,
 0x381d80,1,
 0x381da0,1,
-0x381da8,7,
+0x381da8,4,
+0x381dc0,1,
 0x381de0,1,
-0x381de8,19,
+0x381de8,4,
+0x381e00,13,
 0x381e40,6,
 0x381e60,6,
 0x381e80,6,
@@ -19242,9 +20137,9 @@
 0x382c80,13,
 0x382cc0,12,
 0x382d00,14,
-0x382d40,4,
+0x382d40,6,
 0x382d80,14,
-0x382dc0,4,
+0x382dc0,6,
 0x382e00,11,
 0x382e40,6,
 0x382e60,6,
@@ -19254,8 +20149,8 @@
 0x383014,4,
 0x383040,3,
 0x383050,3,
-0x383080,42,
-0x383140,10,
+0x383080,43,
+0x383140,11,
 0x383180,1,
 0x38319c,15,
 0x383200,12,
@@ -19302,9 +20197,11 @@
 0x383d5c,1,
 0x383d80,1,
 0x383da0,1,
-0x383da8,7,
+0x383da8,4,
+0x383dc0,1,
 0x383de0,1,
-0x383de8,19,
+0x383de8,4,
+0x383e00,13,
 0x383e40,6,
 0x383e60,6,
 0x383e80,6,
@@ -19343,8 +20240,7 @@
 0x3846c0,11,
 0x384700,14,
 0x384740,14,
-0x384780,62,
-0x38487c,6,
+0x384780,69,
 0x384c00,6,
 0x384c40,14,
 0x384c80,9,
@@ -19394,8 +20290,7 @@
 0x3856c0,11,
 0x385700,14,
 0x385740,14,
-0x385780,62,
-0x38587c,6,
+0x385780,69,
 0x385c00,6,
 0x385c40,14,
 0x385c80,9,
@@ -19464,8 +20359,7 @@
 0x386c50,10,
 0x386c84,1,
 0x386c94,8,
-0x386cb8,9,
-0x386ce0,4,
+0x386cb8,14,
 0x387000,1,
 0x387028,1,
 0x387050,1,
@@ -19485,7 +20379,7 @@
 0x387520,6,
 0x387540,6,
 0x387560,3,
-0x387570,1,
+0x387570,3,
 0x388000,6,
 0x388020,3,
 0x388030,1,
@@ -19502,7 +20396,7 @@
 0x388428,1,
 0x388450,1,
 0x388478,1,
-0x3884a0,7,
+0x3884a0,6,
 0x3885ac,1,
 0x3885d8,4,
 0x388600,6,
@@ -19530,9 +20424,9 @@
 0x3890b0,22,
 0x389110,2,
 0x389120,22,
-0x389180,1,
+0x389180,2,
 0x3891a0,6,
-0x3891c0,8,
+0x3891c0,9,
 0x389200,42,
 0x3892c0,1,
 0x3892c8,13,
@@ -19550,7 +20444,7 @@
 0x389550,7,
 0x389570,18,
 0x3895bc,5,
-0x389800,448,
+0x389800,480,
 0x38a020,4,
 0x38a040,11,
 0x38a074,2,
@@ -19558,9 +20452,9 @@
 0x38a0b0,22,
 0x38a110,2,
 0x38a120,22,
-0x38a180,1,
+0x38a180,2,
 0x38a1a0,6,
-0x38a1c0,8,
+0x38a1c0,9,
 0x38a200,42,
 0x38a2c0,1,
 0x38a2c8,13,
@@ -19578,7 +20472,7 @@
 0x38a550,7,
 0x38a570,18,
 0x38a5bc,5,
-0x38a800,448,
+0x38a800,480,
 0x38b020,4,
 0x38b040,11,
 0x38b074,2,
@@ -19586,9 +20480,9 @@
 0x38b0b0,22,
 0x38b110,2,
 0x38b120,22,
-0x38b180,1,
+0x38b180,2,
 0x38b1a0,6,
-0x38b1c0,8,
+0x38b1c0,9,
 0x38b200,42,
 0x38b2c0,1,
 0x38b2c8,13,
@@ -19606,7 +20500,7 @@
 0x38b550,7,
 0x38b570,18,
 0x38b5bc,5,
-0x38b800,448,
+0x38b800,480,
 0x38c020,4,
 0x38c040,11,
 0x38c074,2,
@@ -19614,9 +20508,9 @@
 0x38c0b0,22,
 0x38c110,2,
 0x38c120,22,
-0x38c180,1,
+0x38c180,2,
 0x38c1a0,6,
-0x38c1c0,8,
+0x38c1c0,9,
 0x38c200,42,
 0x38c2c0,1,
 0x38c2c8,13,
@@ -19634,7 +20528,7 @@
 0x38c550,7,
 0x38c570,18,
 0x38c5bc,5,
-0x38c800,448,
+0x38c800,480,
 0x38f800,5,
 0x38f818,1,
 0x38f854,6,
@@ -19660,12 +20554,12 @@
 0x38fba4,1,
 0x38fbac,2,
 0x394000,3,
-0x394018,8,
-0x394100,56,
+0x394018,10,
+0x394100,58,
 0x3941f0,1,
 0x394400,3,
-0x394418,8,
-0x394500,56,
+0x394418,10,
+0x394500,58,
 0x3945f0,1,
 0x394800,3,
 0x394810,3,
@@ -19681,12 +20575,12 @@
 0x3949c4,1,
 0x3949d4,3,
 0x395000,3,
-0x395018,8,
-0x395100,56,
+0x395018,10,
+0x395100,58,
 0x3951f0,1,
 0x395400,3,
-0x395418,8,
-0x395500,56,
+0x395418,10,
+0x395500,58,
 0x3955f0,1,
 0x395800,3,
 0x395810,3,
@@ -19717,25 +20611,34 @@
 0x396800,19,
 0x396890,15,
 0x396910,15,
-0x396990,10,
+0x396a00,10,
 0x396ab8,4,
 0x396b00,3,
+0x396b10,1,
 0x396e00,6,
+0x396f00,5,
 0x397000,65,
 0x397800,6,
 0x397820,6,
 0x397840,6,
 0x397860,6,
-0x397880,3,
+0x397880,6,
+0x3978a0,6,
+0x3978c0,6,
+0x3978e0,3,
 0x397900,6,
 0x397920,6,
 0x397940,6,
 0x397960,6,
-0x397980,3,
+0x397980,6,
+0x3979a0,6,
+0x3979c0,6,
+0x3979e0,3,
 0x397a00,6,
-0x397a20,3,
-0x397a40,7,
+0x397a20,6,
+0x397a40,3,
 0x397a80,7,
+0x397aa0,7,
 0x397ac0,9,
 0x397b00,9,
 0x397b40,10,
@@ -19759,7 +20662,11 @@
 0x398000,2,
 0x39800c,3,
 0x398028,2,
-0x398038,47,
+0x398038,2,
+0x398080,29,
+0x3980f8,1,
+0x398100,13,
+0x398140,13,
 0x398500,6,
 0x398520,6,
 0x398540,3,
@@ -19771,7 +20678,11 @@
 0x398800,2,
 0x39880c,3,
 0x398828,2,
-0x398838,47,
+0x398838,2,
+0x398880,29,
+0x3988f8,1,
+0x398900,13,
+0x398940,13,
 0x398d00,6,
 0x398d20,6,
 0x398d40,3,
@@ -19784,7 +20695,7 @@
 0x399828,3,
 0x399850,3,
 0x399878,3,
-0x3998a0,8,
+0x3998a0,9,
 0x3999ac,1,
 0x3999d8,4,
 0x399a00,6,
@@ -19848,9 +20759,9 @@
 0x3a0c80,13,
 0x3a0cc0,12,
 0x3a0d00,14,
-0x3a0d40,4,
+0x3a0d40,6,
 0x3a0d80,14,
-0x3a0dc0,4,
+0x3a0dc0,6,
 0x3a0e00,11,
 0x3a0e40,6,
 0x3a0e60,6,
@@ -19860,8 +20771,8 @@
 0x3a1014,4,
 0x3a1040,3,
 0x3a1050,3,
-0x3a1080,42,
-0x3a1140,10,
+0x3a1080,43,
+0x3a1140,11,
 0x3a1180,1,
 0x3a119c,15,
 0x3a1200,12,
@@ -19908,9 +20819,11 @@
 0x3a1d5c,1,
 0x3a1d80,1,
 0x3a1da0,1,
-0x3a1da8,7,
+0x3a1da8,4,
+0x3a1dc0,1,
 0x3a1de0,1,
-0x3a1de8,19,
+0x3a1de8,4,
+0x3a1e00,13,
 0x3a1e40,6,
 0x3a1e60,6,
 0x3a1e80,6,
@@ -19971,9 +20884,9 @@
 0x3a2c80,13,
 0x3a2cc0,12,
 0x3a2d00,14,
-0x3a2d40,4,
+0x3a2d40,6,
 0x3a2d80,14,
-0x3a2dc0,4,
+0x3a2dc0,6,
 0x3a2e00,11,
 0x3a2e40,6,
 0x3a2e60,6,
@@ -19983,8 +20896,8 @@
 0x3a3014,4,
 0x3a3040,3,
 0x3a3050,3,
-0x3a3080,42,
-0x3a3140,10,
+0x3a3080,43,
+0x3a3140,11,
 0x3a3180,1,
 0x3a319c,15,
 0x3a3200,12,
@@ -20031,9 +20944,11 @@
 0x3a3d5c,1,
 0x3a3d80,1,
 0x3a3da0,1,
-0x3a3da8,7,
+0x3a3da8,4,
+0x3a3dc0,1,
 0x3a3de0,1,
-0x3a3de8,19,
+0x3a3de8,4,
+0x3a3e00,13,
 0x3a3e40,6,
 0x3a3e60,6,
 0x3a3e80,6,
@@ -20072,8 +20987,7 @@
 0x3a46c0,11,
 0x3a4700,14,
 0x3a4740,14,
-0x3a4780,62,
-0x3a487c,6,
+0x3a4780,69,
 0x3a4c00,6,
 0x3a4c40,14,
 0x3a4c80,9,
@@ -20123,8 +21037,7 @@
 0x3a56c0,11,
 0x3a5700,14,
 0x3a5740,14,
-0x3a5780,62,
-0x3a587c,6,
+0x3a5780,69,
 0x3a5c00,6,
 0x3a5c40,14,
 0x3a5c80,9,
@@ -20193,8 +21106,7 @@
 0x3a6c50,10,
 0x3a6c84,1,
 0x3a6c94,8,
-0x3a6cb8,9,
-0x3a6ce0,4,
+0x3a6cb8,14,
 0x3a7000,1,
 0x3a7028,1,
 0x3a7050,1,
@@ -20214,7 +21126,7 @@
 0x3a7520,6,
 0x3a7540,6,
 0x3a7560,3,
-0x3a7570,1,
+0x3a7570,3,
 0x3a8000,6,
 0x3a8020,3,
 0x3a8030,1,
@@ -20231,7 +21143,7 @@
 0x3a8428,1,
 0x3a8450,1,
 0x3a8478,1,
-0x3a84a0,7,
+0x3a84a0,6,
 0x3a85ac,1,
 0x3a85d8,4,
 0x3a8600,6,
@@ -20259,9 +21171,9 @@
 0x3a90b0,22,
 0x3a9110,2,
 0x3a9120,22,
-0x3a9180,1,
+0x3a9180,2,
 0x3a91a0,6,
-0x3a91c0,8,
+0x3a91c0,9,
 0x3a9200,42,
 0x3a92c0,1,
 0x3a92c8,13,
@@ -20279,7 +21191,7 @@
 0x3a9550,7,
 0x3a9570,18,
 0x3a95bc,5,
-0x3a9800,448,
+0x3a9800,480,
 0x3aa020,4,
 0x3aa040,11,
 0x3aa074,2,
@@ -20287,9 +21199,9 @@
 0x3aa0b0,22,
 0x3aa110,2,
 0x3aa120,22,
-0x3aa180,1,
+0x3aa180,2,
 0x3aa1a0,6,
-0x3aa1c0,8,
+0x3aa1c0,9,
 0x3aa200,42,
 0x3aa2c0,1,
 0x3aa2c8,13,
@@ -20307,7 +21219,7 @@
 0x3aa550,7,
 0x3aa570,18,
 0x3aa5bc,5,
-0x3aa800,448,
+0x3aa800,480,
 0x3ab020,4,
 0x3ab040,11,
 0x3ab074,2,
@@ -20315,9 +21227,9 @@
 0x3ab0b0,22,
 0x3ab110,2,
 0x3ab120,22,
-0x3ab180,1,
+0x3ab180,2,
 0x3ab1a0,6,
-0x3ab1c0,8,
+0x3ab1c0,9,
 0x3ab200,42,
 0x3ab2c0,1,
 0x3ab2c8,13,
@@ -20335,7 +21247,7 @@
 0x3ab550,7,
 0x3ab570,18,
 0x3ab5bc,5,
-0x3ab800,448,
+0x3ab800,480,
 0x3ac020,4,
 0x3ac040,11,
 0x3ac074,2,
@@ -20343,9 +21255,9 @@
 0x3ac0b0,22,
 0x3ac110,2,
 0x3ac120,22,
-0x3ac180,1,
+0x3ac180,2,
 0x3ac1a0,6,
-0x3ac1c0,8,
+0x3ac1c0,9,
 0x3ac200,42,
 0x3ac2c0,1,
 0x3ac2c8,13,
@@ -20363,7 +21275,7 @@
 0x3ac550,7,
 0x3ac570,18,
 0x3ac5bc,5,
-0x3ac800,448,
+0x3ac800,480,
 0x3af800,5,
 0x3af818,1,
 0x3af854,6,
@@ -20389,12 +21301,12 @@
 0x3afba4,1,
 0x3afbac,2,
 0x3b4000,3,
-0x3b4018,8,
-0x3b4100,56,
+0x3b4018,10,
+0x3b4100,58,
 0x3b41f0,1,
 0x3b4400,3,
-0x3b4418,8,
-0x3b4500,56,
+0x3b4418,10,
+0x3b4500,58,
 0x3b45f0,1,
 0x3b4800,3,
 0x3b4810,3,
@@ -20410,12 +21322,12 @@
 0x3b49c4,1,
 0x3b49d4,3,
 0x3b5000,3,
-0x3b5018,8,
-0x3b5100,56,
+0x3b5018,10,
+0x3b5100,58,
 0x3b51f0,1,
 0x3b5400,3,
-0x3b5418,8,
-0x3b5500,56,
+0x3b5418,10,
+0x3b5500,58,
 0x3b55f0,1,
 0x3b5800,3,
 0x3b5810,3,
@@ -20446,25 +21358,34 @@
 0x3b6800,19,
 0x3b6890,15,
 0x3b6910,15,
-0x3b6990,10,
+0x3b6a00,10,
 0x3b6ab8,4,
 0x3b6b00,3,
+0x3b6b10,1,
 0x3b6e00,6,
+0x3b6f00,5,
 0x3b7000,65,
 0x3b7800,6,
 0x3b7820,6,
 0x3b7840,6,
 0x3b7860,6,
-0x3b7880,3,
+0x3b7880,6,
+0x3b78a0,6,
+0x3b78c0,6,
+0x3b78e0,3,
 0x3b7900,6,
 0x3b7920,6,
 0x3b7940,6,
 0x3b7960,6,
-0x3b7980,3,
+0x3b7980,6,
+0x3b79a0,6,
+0x3b79c0,6,
+0x3b79e0,3,
 0x3b7a00,6,
-0x3b7a20,3,
-0x3b7a40,7,
+0x3b7a20,6,
+0x3b7a40,3,
 0x3b7a80,7,
+0x3b7aa0,7,
 0x3b7ac0,9,
 0x3b7b00,9,
 0x3b7b40,10,
@@ -20488,7 +21409,11 @@
 0x3b8000,2,
 0x3b800c,3,
 0x3b8028,2,
-0x3b8038,47,
+0x3b8038,2,
+0x3b8080,29,
+0x3b80f8,1,
+0x3b8100,13,
+0x3b8140,13,
 0x3b8500,6,
 0x3b8520,6,
 0x3b8540,3,
@@ -20500,7 +21425,11 @@
 0x3b8800,2,
 0x3b880c,3,
 0x3b8828,2,
-0x3b8838,47,
+0x3b8838,2,
+0x3b8880,29,
+0x3b88f8,1,
+0x3b8900,13,
+0x3b8940,13,
 0x3b8d00,6,
 0x3b8d20,6,
 0x3b8d40,3,
@@ -20513,7 +21442,7 @@
 0x3b9828,3,
 0x3b9850,3,
 0x3b9878,3,
-0x3b98a0,8,
+0x3b98a0,9,
 0x3b99ac,1,
 0x3b99d8,4,
 0x3b9a00,6,
@@ -20577,9 +21506,9 @@
 0x3c0c80,13,
 0x3c0cc0,12,
 0x3c0d00,14,
-0x3c0d40,4,
+0x3c0d40,6,
 0x3c0d80,14,
-0x3c0dc0,4,
+0x3c0dc0,6,
 0x3c0e00,11,
 0x3c0e40,6,
 0x3c0e60,6,
@@ -20589,8 +21518,8 @@
 0x3c1014,4,
 0x3c1040,3,
 0x3c1050,3,
-0x3c1080,42,
-0x3c1140,10,
+0x3c1080,43,
+0x3c1140,11,
 0x3c1180,1,
 0x3c119c,15,
 0x3c1200,12,
@@ -20637,9 +21566,11 @@
 0x3c1d5c,1,
 0x3c1d80,1,
 0x3c1da0,1,
-0x3c1da8,7,
+0x3c1da8,4,
+0x3c1dc0,1,
 0x3c1de0,1,
-0x3c1de8,19,
+0x3c1de8,4,
+0x3c1e00,13,
 0x3c1e40,6,
 0x3c1e60,6,
 0x3c1e80,6,
@@ -20700,9 +21631,9 @@
 0x3c2c80,13,
 0x3c2cc0,12,
 0x3c2d00,14,
-0x3c2d40,4,
+0x3c2d40,6,
 0x3c2d80,14,
-0x3c2dc0,4,
+0x3c2dc0,6,
 0x3c2e00,11,
 0x3c2e40,6,
 0x3c2e60,6,
@@ -20712,8 +21643,8 @@
 0x3c3014,4,
 0x3c3040,3,
 0x3c3050,3,
-0x3c3080,42,
-0x3c3140,10,
+0x3c3080,43,
+0x3c3140,11,
 0x3c3180,1,
 0x3c319c,15,
 0x3c3200,12,
@@ -20760,9 +21691,11 @@
 0x3c3d5c,1,
 0x3c3d80,1,
 0x3c3da0,1,
-0x3c3da8,7,
+0x3c3da8,4,
+0x3c3dc0,1,
 0x3c3de0,1,
-0x3c3de8,19,
+0x3c3de8,4,
+0x3c3e00,13,
 0x3c3e40,6,
 0x3c3e60,6,
 0x3c3e80,6,
@@ -20801,8 +21734,7 @@
 0x3c46c0,11,
 0x3c4700,14,
 0x3c4740,14,
-0x3c4780,62,
-0x3c487c,6,
+0x3c4780,69,
 0x3c4c00,6,
 0x3c4c40,14,
 0x3c4c80,9,
@@ -20852,8 +21784,7 @@
 0x3c56c0,11,
 0x3c5700,14,
 0x3c5740,14,
-0x3c5780,62,
-0x3c587c,6,
+0x3c5780,69,
 0x3c5c00,6,
 0x3c5c40,14,
 0x3c5c80,9,
@@ -20922,8 +21853,7 @@
 0x3c6c50,10,
 0x3c6c84,1,
 0x3c6c94,8,
-0x3c6cb8,9,
-0x3c6ce0,4,
+0x3c6cb8,14,
 0x3c7000,1,
 0x3c7028,1,
 0x3c7050,1,
@@ -20943,7 +21873,7 @@
 0x3c7520,6,
 0x3c7540,6,
 0x3c7560,3,
-0x3c7570,1,
+0x3c7570,3,
 0x3c8000,6,
 0x3c8020,3,
 0x3c8030,1,
@@ -20960,7 +21890,7 @@
 0x3c8428,1,
 0x3c8450,1,
 0x3c8478,1,
-0x3c84a0,7,
+0x3c84a0,6,
 0x3c85ac,1,
 0x3c85d8,4,
 0x3c8600,6,
@@ -20988,9 +21918,9 @@
 0x3c90b0,22,
 0x3c9110,2,
 0x3c9120,22,
-0x3c9180,1,
+0x3c9180,2,
 0x3c91a0,6,
-0x3c91c0,8,
+0x3c91c0,9,
 0x3c9200,42,
 0x3c92c0,1,
 0x3c92c8,13,
@@ -21008,7 +21938,7 @@
 0x3c9550,7,
 0x3c9570,18,
 0x3c95bc,5,
-0x3c9800,448,
+0x3c9800,480,
 0x3ca020,4,
 0x3ca040,11,
 0x3ca074,2,
@@ -21016,9 +21946,9 @@
 0x3ca0b0,22,
 0x3ca110,2,
 0x3ca120,22,
-0x3ca180,1,
+0x3ca180,2,
 0x3ca1a0,6,
-0x3ca1c0,8,
+0x3ca1c0,9,
 0x3ca200,42,
 0x3ca2c0,1,
 0x3ca2c8,13,
@@ -21036,7 +21966,7 @@
 0x3ca550,7,
 0x3ca570,18,
 0x3ca5bc,5,
-0x3ca800,448,
+0x3ca800,480,
 0x3cb020,4,
 0x3cb040,11,
 0x3cb074,2,
@@ -21044,9 +21974,9 @@
 0x3cb0b0,22,
 0x3cb110,2,
 0x3cb120,22,
-0x3cb180,1,
+0x3cb180,2,
 0x3cb1a0,6,
-0x3cb1c0,8,
+0x3cb1c0,9,
 0x3cb200,42,
 0x3cb2c0,1,
 0x3cb2c8,13,
@@ -21064,7 +21994,7 @@
 0x3cb550,7,
 0x3cb570,18,
 0x3cb5bc,5,
-0x3cb800,448,
+0x3cb800,480,
 0x3cc020,4,
 0x3cc040,11,
 0x3cc074,2,
@@ -21072,9 +22002,9 @@
 0x3cc0b0,22,
 0x3cc110,2,
 0x3cc120,22,
-0x3cc180,1,
+0x3cc180,2,
 0x3cc1a0,6,
-0x3cc1c0,8,
+0x3cc1c0,9,
 0x3cc200,42,
 0x3cc2c0,1,
 0x3cc2c8,13,
@@ -21092,7 +22022,7 @@
 0x3cc550,7,
 0x3cc570,18,
 0x3cc5bc,5,
-0x3cc800,448,
+0x3cc800,480,
 0x3cf800,5,
 0x3cf818,1,
 0x3cf854,6,
@@ -21118,12 +22048,12 @@
 0x3cfba4,1,
 0x3cfbac,2,
 0x3d4000,3,
-0x3d4018,8,
-0x3d4100,56,
+0x3d4018,10,
+0x3d4100,58,
 0x3d41f0,1,
 0x3d4400,3,
-0x3d4418,8,
-0x3d4500,56,
+0x3d4418,10,
+0x3d4500,58,
 0x3d45f0,1,
 0x3d4800,3,
 0x3d4810,3,
@@ -21139,12 +22069,12 @@
 0x3d49c4,1,
 0x3d49d4,3,
 0x3d5000,3,
-0x3d5018,8,
-0x3d5100,56,
+0x3d5018,10,
+0x3d5100,58,
 0x3d51f0,1,
 0x3d5400,3,
-0x3d5418,8,
-0x3d5500,56,
+0x3d5418,10,
+0x3d5500,58,
 0x3d55f0,1,
 0x3d5800,3,
 0x3d5810,3,
@@ -21175,25 +22105,34 @@
 0x3d6800,19,
 0x3d6890,15,
 0x3d6910,15,
-0x3d6990,10,
+0x3d6a00,10,
 0x3d6ab8,4,
 0x3d6b00,3,
+0x3d6b10,1,
 0x3d6e00,6,
+0x3d6f00,5,
 0x3d7000,65,
 0x3d7800,6,
 0x3d7820,6,
 0x3d7840,6,
 0x3d7860,6,
-0x3d7880,3,
+0x3d7880,6,
+0x3d78a0,6,
+0x3d78c0,6,
+0x3d78e0,3,
 0x3d7900,6,
 0x3d7920,6,
 0x3d7940,6,
 0x3d7960,6,
-0x3d7980,3,
+0x3d7980,6,
+0x3d79a0,6,
+0x3d79c0,6,
+0x3d79e0,3,
 0x3d7a00,6,
-0x3d7a20,3,
-0x3d7a40,7,
+0x3d7a20,6,
+0x3d7a40,3,
 0x3d7a80,7,
+0x3d7aa0,7,
 0x3d7ac0,9,
 0x3d7b00,9,
 0x3d7b40,10,
@@ -21217,7 +22156,11 @@
 0x3d8000,2,
 0x3d800c,3,
 0x3d8028,2,
-0x3d8038,47,
+0x3d8038,2,
+0x3d8080,29,
+0x3d80f8,1,
+0x3d8100,13,
+0x3d8140,13,
 0x3d8500,6,
 0x3d8520,6,
 0x3d8540,3,
@@ -21229,7 +22172,11 @@
 0x3d8800,2,
 0x3d880c,3,
 0x3d8828,2,
-0x3d8838,47,
+0x3d8838,2,
+0x3d8880,29,
+0x3d88f8,1,
+0x3d8900,13,
+0x3d8940,13,
 0x3d8d00,6,
 0x3d8d20,6,
 0x3d8d40,3,
@@ -21242,7 +22189,7 @@
 0x3d9828,3,
 0x3d9850,3,
 0x3d9878,3,
-0x3d98a0,8,
+0x3d98a0,9,
 0x3d99ac,1,
 0x3d99d8,4,
 0x3d9a00,6,
@@ -21306,9 +22253,9 @@
 0x3e0c80,13,
 0x3e0cc0,12,
 0x3e0d00,14,
-0x3e0d40,4,
+0x3e0d40,6,
 0x3e0d80,14,
-0x3e0dc0,4,
+0x3e0dc0,6,
 0x3e0e00,11,
 0x3e0e40,6,
 0x3e0e60,6,
@@ -21318,8 +22265,8 @@
 0x3e1014,4,
 0x3e1040,3,
 0x3e1050,3,
-0x3e1080,42,
-0x3e1140,10,
+0x3e1080,43,
+0x3e1140,11,
 0x3e1180,1,
 0x3e119c,15,
 0x3e1200,12,
@@ -21366,9 +22313,11 @@
 0x3e1d5c,1,
 0x3e1d80,1,
 0x3e1da0,1,
-0x3e1da8,7,
+0x3e1da8,4,
+0x3e1dc0,1,
 0x3e1de0,1,
-0x3e1de8,19,
+0x3e1de8,4,
+0x3e1e00,13,
 0x3e1e40,6,
 0x3e1e60,6,
 0x3e1e80,6,
@@ -21429,9 +22378,9 @@
 0x3e2c80,13,
 0x3e2cc0,12,
 0x3e2d00,14,
-0x3e2d40,4,
+0x3e2d40,6,
 0x3e2d80,14,
-0x3e2dc0,4,
+0x3e2dc0,6,
 0x3e2e00,11,
 0x3e2e40,6,
 0x3e2e60,6,
@@ -21441,8 +22390,8 @@
 0x3e3014,4,
 0x3e3040,3,
 0x3e3050,3,
-0x3e3080,42,
-0x3e3140,10,
+0x3e3080,43,
+0x3e3140,11,
 0x3e3180,1,
 0x3e319c,15,
 0x3e3200,12,
@@ -21489,9 +22438,11 @@
 0x3e3d5c,1,
 0x3e3d80,1,
 0x3e3da0,1,
-0x3e3da8,7,
+0x3e3da8,4,
+0x3e3dc0,1,
 0x3e3de0,1,
-0x3e3de8,19,
+0x3e3de8,4,
+0x3e3e00,13,
 0x3e3e40,6,
 0x3e3e60,6,
 0x3e3e80,6,
@@ -21530,8 +22481,7 @@
 0x3e46c0,11,
 0x3e4700,14,
 0x3e4740,14,
-0x3e4780,62,
-0x3e487c,6,
+0x3e4780,69,
 0x3e4c00,6,
 0x3e4c40,14,
 0x3e4c80,9,
@@ -21581,8 +22531,7 @@
 0x3e56c0,11,
 0x3e5700,14,
 0x3e5740,14,
-0x3e5780,62,
-0x3e587c,6,
+0x3e5780,69,
 0x3e5c00,6,
 0x3e5c40,14,
 0x3e5c80,9,
@@ -21651,8 +22600,7 @@
 0x3e6c50,10,
 0x3e6c84,1,
 0x3e6c94,8,
-0x3e6cb8,9,
-0x3e6ce0,4,
+0x3e6cb8,14,
 0x3e7000,1,
 0x3e7028,1,
 0x3e7050,1,
@@ -21672,7 +22620,7 @@
 0x3e7520,6,
 0x3e7540,6,
 0x3e7560,3,
-0x3e7570,1,
+0x3e7570,3,
 0x3e8000,6,
 0x3e8020,3,
 0x3e8030,1,
@@ -21689,7 +22637,7 @@
 0x3e8428,1,
 0x3e8450,1,
 0x3e8478,1,
-0x3e84a0,7,
+0x3e84a0,6,
 0x3e85ac,1,
 0x3e85d8,4,
 0x3e8600,6,
@@ -21717,9 +22665,9 @@
 0x3e90b0,22,
 0x3e9110,2,
 0x3e9120,22,
-0x3e9180,1,
+0x3e9180,2,
 0x3e91a0,6,
-0x3e91c0,8,
+0x3e91c0,9,
 0x3e9200,42,
 0x3e92c0,1,
 0x3e92c8,13,
@@ -21737,7 +22685,7 @@
 0x3e9550,7,
 0x3e9570,18,
 0x3e95bc,5,
-0x3e9800,448,
+0x3e9800,480,
 0x3ea020,4,
 0x3ea040,11,
 0x3ea074,2,
@@ -21745,9 +22693,9 @@
 0x3ea0b0,22,
 0x3ea110,2,
 0x3ea120,22,
-0x3ea180,1,
+0x3ea180,2,
 0x3ea1a0,6,
-0x3ea1c0,8,
+0x3ea1c0,9,
 0x3ea200,42,
 0x3ea2c0,1,
 0x3ea2c8,13,
@@ -21765,7 +22713,7 @@
 0x3ea550,7,
 0x3ea570,18,
 0x3ea5bc,5,
-0x3ea800,448,
+0x3ea800,480,
 0x3eb020,4,
 0x3eb040,11,
 0x3eb074,2,
@@ -21773,9 +22721,9 @@
 0x3eb0b0,22,
 0x3eb110,2,
 0x3eb120,22,
-0x3eb180,1,
+0x3eb180,2,
 0x3eb1a0,6,
-0x3eb1c0,8,
+0x3eb1c0,9,
 0x3eb200,42,
 0x3eb2c0,1,
 0x3eb2c8,13,
@@ -21793,7 +22741,7 @@
 0x3eb550,7,
 0x3eb570,18,
 0x3eb5bc,5,
-0x3eb800,448,
+0x3eb800,480,
 0x3ec020,4,
 0x3ec040,11,
 0x3ec074,2,
@@ -21801,9 +22749,9 @@
 0x3ec0b0,22,
 0x3ec110,2,
 0x3ec120,22,
-0x3ec180,1,
+0x3ec180,2,
 0x3ec1a0,6,
-0x3ec1c0,8,
+0x3ec1c0,9,
 0x3ec200,42,
 0x3ec2c0,1,
 0x3ec2c8,13,
@@ -21821,7 +22769,7 @@
 0x3ec550,7,
 0x3ec570,18,
 0x3ec5bc,5,
-0x3ec800,448,
+0x3ec800,480,
 0x3ef800,5,
 0x3ef818,1,
 0x3ef854,6,
@@ -21847,12 +22795,12 @@
 0x3efba4,1,
 0x3efbac,2,
 0x3f4000,3,
-0x3f4018,8,
-0x3f4100,56,
+0x3f4018,10,
+0x3f4100,58,
 0x3f41f0,1,
 0x3f4400,3,
-0x3f4418,8,
-0x3f4500,56,
+0x3f4418,10,
+0x3f4500,58,
 0x3f45f0,1,
 0x3f4800,3,
 0x3f4810,3,
@@ -21868,12 +22816,12 @@
 0x3f49c4,1,
 0x3f49d4,3,
 0x3f5000,3,
-0x3f5018,8,
-0x3f5100,56,
+0x3f5018,10,
+0x3f5100,58,
 0x3f51f0,1,
 0x3f5400,3,
-0x3f5418,8,
-0x3f5500,56,
+0x3f5418,10,
+0x3f5500,58,
 0x3f55f0,1,
 0x3f5800,3,
 0x3f5810,3,
@@ -21904,25 +22852,34 @@
 0x3f6800,19,
 0x3f6890,15,
 0x3f6910,15,
-0x3f6990,10,
+0x3f6a00,10,
 0x3f6ab8,4,
 0x3f6b00,3,
+0x3f6b10,1,
 0x3f6e00,6,
+0x3f6f00,5,
 0x3f7000,65,
 0x3f7800,6,
 0x3f7820,6,
 0x3f7840,6,
 0x3f7860,6,
-0x3f7880,3,
+0x3f7880,6,
+0x3f78a0,6,
+0x3f78c0,6,
+0x3f78e0,3,
 0x3f7900,6,
 0x3f7920,6,
 0x3f7940,6,
 0x3f7960,6,
-0x3f7980,3,
+0x3f7980,6,
+0x3f79a0,6,
+0x3f79c0,6,
+0x3f79e0,3,
 0x3f7a00,6,
-0x3f7a20,3,
-0x3f7a40,7,
+0x3f7a20,6,
+0x3f7a40,3,
 0x3f7a80,7,
+0x3f7aa0,7,
 0x3f7ac0,9,
 0x3f7b00,9,
 0x3f7b40,10,
@@ -21946,7 +22903,11 @@
 0x3f8000,2,
 0x3f800c,3,
 0x3f8028,2,
-0x3f8038,47,
+0x3f8038,2,
+0x3f8080,29,
+0x3f80f8,1,
+0x3f8100,13,
+0x3f8140,13,
 0x3f8500,6,
 0x3f8520,6,
 0x3f8540,3,
@@ -21958,7 +22919,11 @@
 0x3f8800,2,
 0x3f880c,3,
 0x3f8828,2,
-0x3f8838,47,
+0x3f8838,2,
+0x3f8880,29,
+0x3f88f8,1,
+0x3f8900,13,
+0x3f8940,13,
 0x3f8d00,6,
 0x3f8d20,6,
 0x3f8d40,3,
@@ -21971,7 +22936,7 @@
 0x3f9828,3,
 0x3f9850,3,
 0x3f9878,3,
-0x3f98a0,8,
+0x3f98a0,9,
 0x3f99ac,1,
 0x3f99d8,4,
 0x3f9a00,6,
diff --git a/mstflint.spec b/mstflint.spec
index 501f3d0..adf123a 100644
--- a/mstflint.spec
+++ b/mstflint.spec
@@ -1,6 +1,6 @@
 %{!?ibmadlib: %define ibmadlib libibmad-devel}
 %{!?name: %define name mstflint}
-%{!?version: %define version 4.0.1}
+%{!?version: %define version 4.1.0}
 %{!?release: %define release 1}
 %{!?buildtype: %define buildtype "native"}
 %{!?noinband: %define noinband 0}
@@ -11,13 +11,13 @@
 
 Summary: Mellanox firmware burning application
 Name: %{name}
-Version: 4.0.1
-Release: 1.43.g97d7275
+Version: 4.1.0
+Release: 1.44.g8d7fa4a
 License: GPL/BSD
 Url: http://openfabrics.org
 Group: System Environment/Base
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
-Source: http://www.openfabrics.org/downloads/mstflint-4.0.1-1.43.g97d7275.tar.gz
+Source: http://www.openfabrics.org/downloads/mstflint-4.1.0-1.44.g8d7fa4a.tar.gz
 ExclusiveArch: i386 i486 i586 i686 x86_64 ia64 ppc ppc64 ppc64le arm64 aarch64
 BuildRequires: zlib-devel %{ibmadlib}
 
@@ -84,6 +84,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/*
 
 %changelog
+* Wed Aug 26 2015 Adrian Chiris <adrianc at dev.mellanox.co.il>
+   MFT 4.1.0 Updates
+   
 * Wed Jun 05 2015 Adrian Chiris <adrianc at dev.mellanox.co.il>
    MFT 4.0.1 Updates
 
diff --git a/mstflint.spec.in b/mstflint.spec.in
index 0b63743..a9d0ff3 100644
--- a/mstflint.spec.in
+++ b/mstflint.spec.in
@@ -1,6 +1,6 @@
 %{!?ibmadlib: %define ibmadlib libibmad-devel}
 %{!?name: %define name mstflint}
-%{!?version: %define version 4.0.1}
+%{!?version: %define version 4.1.0}
 %{!?release: %define release 1}
 %{!?buildtype: %define buildtype "native"}
 %{!?noinband: %define noinband 0}
@@ -84,6 +84,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/*
 
 %changelog
+* Wed Aug 26 2015 Adrian Chiris <adrianc at dev.mellanox.co.il>
+   MFT 4.1.0 Updates
+   
 * Wed Jun 05 2015 Adrian Chiris <adrianc at dev.mellanox.co.il>
    MFT 4.0.1 Updates
 
diff --git a/mtcr_ul/mtcr_icmd_cif.h b/mtcr_ul/mtcr_icmd_cif.h
index 28a6abb..a103525 100644
--- a/mtcr_ul/mtcr_icmd_cif.h
+++ b/mtcr_ul/mtcr_icmd_cif.h
@@ -1,5 +1,4 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+/* Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -28,6 +27,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id$
+ *
  */
 
 #ifndef _MTCR_ICMD_CIF     /* guard */
@@ -53,6 +55,7 @@ extern "C" {
 #define INOUT
 
 #define FLASH_REG_ACCESS	0x9001
+#define ICMD_MAX_CMD_SIZE   0x300 // max mailbox size
 
 /* --------- Functional API ---------------------------------------- */
 /**
diff --git a/mtcr_ul/mtcr_tools_cif.c b/mtcr_ul/mtcr_tools_cif.c
index 45da20a..a80404f 100644
--- a/mtcr_ul/mtcr_tools_cif.c
+++ b/mtcr_ul/mtcr_tools_cif.c
@@ -121,14 +121,7 @@ static int translate_status(int status) {
     }
 }
 
-#ifdef __FreeBSD__
-void mpci_change(mfile* mf)
-{
-    (void)mf;
-}
-#else
 extern void mpci_change(mfile* mf);
-#endif
 
 static void tools_cmdif_pack(tools_cmdif* cmd, u_int32_t* buf) {
     memset((char*)buf, 0, CMD_IF_SIZE);
@@ -372,6 +365,8 @@ static int tools_cmdif_cr_mbox_read(mfile* mf, u_int32_t offset, u_int8_t* data,
 int tools_cmdif_is_supported(mfile *mf)
 {
     int rc = ME_OK;
+    // run mailbox write cmd (read command fails after driver restart or internal reset)
+    u_int32_t writebuf[2] = {0};
     if (!mf) {
         return ME_BAD_PARAMS;
     }
@@ -381,8 +376,6 @@ int tools_cmdif_is_supported(mfile *mf)
         rc = ME_SEM_LOCKED;
         goto cleanup;
     }
-    // run mailbox write cmd (read command fails after driver restart or internal reset)
-    u_int32_t writebuf[2] = {0};
     rc = tools_cmdif_mbox_write(mf, 0, writebuf);
     if (rc) {
         tools_cmdif_flash_lock(mf, 0);
diff --git a/mtcr_ul/mtcr_ul.c b/mtcr_ul/mtcr_ul.c
index 2a5127f..4579ad5 100644
--- a/mtcr_ul/mtcr_ul.c
+++ b/mtcr_ul/mtcr_ul.c
@@ -132,9 +132,13 @@ struct pciconf_context {
     int              fd;
 };
 
+#define CX3_SW_ID    4099
+#define CX3PRO_SW_ID 4103
+
 /* Forward decl*/
 static int get_inband_dev_from_pci(char* inband_dev, char* pci_dev);
 
+int check_force_config(unsigned my_domain, unsigned my_bus, unsigned my_dev, unsigned my_func);
 /*
  * Lock file section:
  *
@@ -540,7 +544,6 @@ int mtcr_mmap(struct pcicr_context *mf, const char *name, off_t off, int ioctl_n
         errno = err;
         return -1;
     }
-
     return 0;
 }
 
@@ -606,7 +609,6 @@ int mtcr_pcicr_open(mfile *mf, const char *name, char* conf_name, off_t off, int
     }
 
     rc = mtcr_check_signature(mf);
-
 end:
     if (rc) {
         mtcr_pcicr_mclose(mf);
@@ -1141,8 +1143,6 @@ int mtcr_inband_open(mfile* mf, const char* name)
 #endif
 }
 
-
-
 static
 enum mtcr_access_method mtcr_parse_name(const char* name, int *force,
                         unsigned *domain_p, unsigned *bus_p,
@@ -1153,6 +1153,7 @@ enum mtcr_access_method mtcr_parse_name(const char* name, int *force,
     unsigned my_dev;
     unsigned my_func;
     int scnt, r;
+    int force_config = 0;
     char config[] = "/config";
     char resource0[] = "/resource0";
     char procbuspci[] = "/proc/bus/pci/";
@@ -1212,16 +1213,23 @@ enum mtcr_access_method mtcr_parse_name(const char* name, int *force,
                   &my_domain, &my_bus, &my_dev, &my_func);
         if (scnt != 4)
             goto parse_error;
+        if (sscanf(name, "mlx5_%x", &tmp) == 1) {
+            force_config = 1;
+        }
         goto name_parsed;
     }
 
     scnt = sscanf(name, "%x:%x.%x", &my_bus, &my_dev, &my_func);
-    if (scnt == 3)
+    if (scnt == 3) {
+        force_config = check_force_config(my_domain, my_bus, my_dev, my_func);
         goto name_parsed;
+    }
 
     scnt = sscanf(name, "%x:%x:%x.%x", &my_domain, &my_bus, &my_dev, &my_func);
-    if (scnt == 4)
+    if (scnt == 4) {
+        force_config = check_force_config(my_domain, my_bus, my_dev, my_func);
         goto name_parsed;
+    }
 
 parse_error:
     fprintf(stderr,"Unable to parse device name %s\n", name);
@@ -1238,6 +1246,9 @@ name_parsed:
     // on ARM processors MMAP not supported
     return MTCR_ACCESS_CONFIG;
 #else
+    if (force_config) {
+        return MTCR_ACCESS_CONFIG;
+    }
     return MTCR_ACCESS_MEMORY;
 #endif
 }
@@ -1255,10 +1266,58 @@ int mwrite4_block (mfile *mf, unsigned int offset, u_int32_t* data, int byte_len
 
 int msw_reset(mfile *mf)
 {
-    (void)mf; /* Warning */
+#ifndef NO_INBAND
+    switch (mf->access_type) {
+    case MTCR_ACCESS_INBAND:
+        return mib_swreset(mf);
+    default:
+        errno = EPERM;
+        return -1;
+    }
+#else
+    (void)mf;
+    return -1;
+#endif
+}
+
+int mhca_reset(mfile *mf)
+{
+    (void)mf;
+    errno = ENOTSUP;
     return -1;
 }
 
+int is_supported_device(char* devname)
+{
+    static char* unsupported_dev_ids[] = {
+            "0x0600", //FPGA
+            "-1"
+    };
+    char fname[64];
+    char devid[64];
+    FILE* f;
+    int ret_val = 1;
+    int i = 0;
+    sprintf(fname, "/sys/bus/pci/devices/%s/device", devname);
+    f = fopen(fname, "r");
+    if (f == NULL) {
+        //printf("-D- Could not open file: %s\n", fname);
+        return 1;
+    }
+    if (fgets(devid, sizeof(devid), f)) {
+        while (strcmp(unsupported_dev_ids[i], "-1")) {
+            if (!strncmp(devid, unsupported_dev_ids[i], strlen(unsupported_dev_ids[i]))) {
+                //printf("-D- device: %s, with devid: %s is unsupported\n", devname, devid);
+                ret_val = 0;
+                break;
+            }
+            i++;
+        }
+    }
+    fclose(f);
+    return ret_val;
+}
+
 int mdevices(char *buf, int len, int mask)
 {
 
@@ -1309,7 +1368,8 @@ int mdevices(char *buf, int len, int mask)
             goto cleanup_dir_opened;
         }
         if (fgets(inbuf, sizeof(inbuf), f)) {
-            if(!strncmp(inbuf, MLNX_PCI_VENDOR_ID, strlen(MLNX_PCI_VENDOR_ID))) {
+            if(!strncmp(inbuf, MLNX_PCI_VENDOR_ID, strlen(MLNX_PCI_VENDOR_ID)) &&
+                    is_supported_device(dir->d_name)) {
                 rsz = sz + 1; //dev name size + place for Null char
                 if ((pos + rsz) > len) {
                     ndevs = -1;
@@ -1354,6 +1414,22 @@ int read_pci_config_header(u_int16_t domain, u_int8_t bus, u_int8_t dev, u_int8_
     return 0;
 }
 
+
+int check_force_config(unsigned my_domain, unsigned my_bus, unsigned my_dev, unsigned my_func)
+{
+    u_int8_t conf_header[0x40];
+    u_int32_t *conf_header_32p = (u_int32_t*)conf_header;
+    if (read_pci_config_header(my_domain, my_bus, my_dev, my_func, conf_header)) {
+        return 0;
+    }
+    u_int32_t devid = __le32_to_cpu(conf_header_32p[0]) >> 16;
+    if (devid == CX3PRO_SW_ID || devid == CX3_SW_ID) {
+        return 0;
+    }
+    return 1;
+}
+
+
 dev_info* mdevices_info(int mask, int* len)
 {
     char* devs = 0;
@@ -1669,11 +1745,12 @@ extern void mpci_change(mfile* mf)
     mf->ctx = tmp_ctx;
 }
 
-mfile *mopen_fw_ctx(void* fw_cmd_context, void* fw_cmd_func)
+mfile *mopen_fw_ctx(void* fw_cmd_context, void* fw_cmd_func, void* extra_data)
 {
 	// not implemented
     TOOLS_UNUSED(fw_cmd_context);
     TOOLS_UNUSED(fw_cmd_func);
+    TOOLS_UNUSED(extra_data);
 	return NULL;
 }
 
@@ -1864,7 +1941,7 @@ enum {
 
 #define REGISTER_HEADERS_SIZE 12
 #define INBAND_MAX_REG_SIZE 44
-#define ICMD_MAX_REG_SIZE 236
+#define ICMD_MAX_REG_SIZE (ICMD_MAX_CMD_SIZE - REGISTER_HEADERS_SIZE)
 #define TOOLS_HCR_MAX_REG_SIZE (TOOLS_HCR_MAX_MBOX - REGISTER_HEADERS_SIZE)
 
 static int supports_icmd(mfile* mf);
@@ -2069,41 +2146,41 @@ static int mreg_send_raw(mfile *mf, u_int16_t reg_id, maccess_reg_method_t metho
     return ME_OK;
 }
 
-
-#define CIB_HW_ID     511
-#define CX4_HW_ID     521
-#define CX4LX_HW_ID   523
-#define SW_IB_HW_ID   583
-#define CX3_PRO_HW_ID 0x1F7
-#define CX3_HW_ID_REV 0x1f5
+// needed device HW IDs
+#define CONNECTX3_PRO_HW_ID 0x1f7
+#define CONNECTX3_HW_ID 0x1f5
+#define SWITCHX_HW_ID 0x245
+#define INFINISCALE4_HW_ID 0x1b3
 
 #define HW_ID_ADDR 0xf0014
 
+
 static int supports_icmd(mfile* mf) {
     u_int32_t dev_id;
-    if (mread4(mf,HW_ID_ADDR, &dev_id) !=4) { // cr might be locked and retured 0xbad0cafe but we dont care we search for device that supports icmd
-        return 1;
-    }
-    switch (dev_id & 0xffff) { // that the hw device id
-        case CIB_HW_ID :
-        case CX4_HW_ID :
-        case CX4LX_HW_ID :
-        case SW_IB_HW_ID :
-            return 1;
-        default:
-            break;
-    }
-   return 0;
+
+     if (mread4(mf,HW_ID_ADDR, &dev_id) != 4 ) {// cr might be locked and retured 0xbad0cafe but we dont care we search for device that supports icmd
+         return 0;
+     }
+     switch (dev_id & 0xffff) { // that the hw device id
+         case CONNECTX3_HW_ID :
+         case CONNECTX3_PRO_HW_ID :
+         case INFINISCALE4_HW_ID :
+         case SWITCHX_HW_ID :
+            return 0;
+         default:
+             break;
+     }
+   return 1;
 }
 
 static int supports_tools_cmdif_reg(mfile* mf) {
     u_int32_t dev_id;
     if (mread4(mf,HW_ID_ADDR, &dev_id) != 4) { // cr might be locked and retured 0xbad0cafe but we dont care we search for device that supports tools cmdif
-        return 1;
+        return 0;
     }
     switch (dev_id & 0xffff) { // that the hw device id
-    case CX3_HW_ID_REV : //Cx3
-    case CX3_PRO_HW_ID : // Cx3-pro
+    case CONNECTX3_HW_ID : //Cx3
+    case CONNECTX3_PRO_HW_ID : // Cx3-pro
         if (tools_cmdif_is_supported(mf) == ME_OK) {
             return 1;
         }
diff --git a/mtcr_ul/mtcr_ul_icmd_cif.c b/mtcr_ul/mtcr_ul_icmd_cif.c
index 5f351d6..f44f5a2 100644
--- a/mtcr_ul/mtcr_ul_icmd_cif.c
+++ b/mtcr_ul/mtcr_ul_icmd_cif.c
@@ -59,7 +59,6 @@
 #define OPCODE_BITLEN       16
 #define STATUS_BITOFF       8
 #define STATUS_BITLEN       8
-#define ICMD_MAX_CMD_SIZE   256
 
 #define VCR_CTRL_ADDR       0x0
 #define VCR_SEMAPHORE62     0x0 // semaphore Domain
@@ -182,6 +181,7 @@ enum {
 #define HW_ID_ADDR 0xf0014
 #define CIB_HW_ID 511
 #define CX4_HW_ID 521
+#define CX4LX_HW_ID 523
 #define SW_IB_HW_ID 583
 #define SW_EN_HW_ID 585
 
@@ -191,6 +191,7 @@ enum {
         MREAD4((mf), (HW_ID_ADDR), &(_hw_id));\
         switch (_hw_id & 0xffff) {\
         case (CX4_HW_ID):\
+        case (CX4LX_HW_ID):\
             addr = addr_cx4;\
             break;\
         case (SW_IB_HW_ID):\
diff --git a/reg_access/reg_access.c b/reg_access/reg_access.c
index 28f4fb3..727cb4c 100644
--- a/reg_access/reg_access.c
+++ b/reg_access/reg_access.c
@@ -40,8 +40,9 @@
 #define REG_ID_PMDIC 0x9021
 #define REG_ID_MNVA  0x9024
 #define REG_ID_MNVI  0x9025
-#define REG_ID_MNVIA 0x9029
+#define REG_ID_MNVIA 0x9029 // 4th gen
 #define REG_ID_NVQC  0x9030
+#define REG_ID_NVIA  0x9033 // 5th gen
 
 // TODO: get correct register ID for mfrl mfai
 #define REG_ID_MFRL 0x9028
@@ -228,14 +229,14 @@ reg_access_status_t reg_access_nvdi (mfile* mf, reg_access_method_t method, stru
 }
 
 /************************************
- * Function: reg_access_nvdia
+ * Function: reg_access_nvia
  ************************************/
-reg_access_status_t reg_access_nvdia (mfile* mf, reg_access_method_t method, struct tools_open_nvdia* nvdia)
+reg_access_status_t reg_access_nvia (mfile* mf, reg_access_method_t method, struct tools_open_nvia* nvia)
 {
     if (method != REG_ACCESS_METHOD_SET ) { // this register supports only set method
         return ME_REG_ACCESS_BAD_METHOD;
     }
-    REG_ACCCESS(mf, method, REG_ID_MNVIA, nvdia, nvdia, tools_open);
+    REG_ACCCESS(mf, method, REG_ID_NVIA, nvia, nvia, tools_open);
 }
 
 /************************************
diff --git a/reg_access/reg_access.h b/reg_access/reg_access.h
index edc3054..ce8db97 100644
--- a/reg_access/reg_access.h
+++ b/reg_access/reg_access.h
@@ -69,7 +69,7 @@ reg_access_status_t reg_access_mfrl (mfile* mf, reg_access_method_t method, stru
 reg_access_status_t reg_access_mfai (mfile* mf, reg_access_method_t method, struct cibfw_register_mfai* mfai);
 reg_access_status_t reg_access_nvda (mfile* mf, reg_access_method_t method, struct tools_open_nvda* nvda);
 reg_access_status_t reg_access_nvdi (mfile* mf, reg_access_method_t method, struct tools_open_nvdi* nvdi);
-reg_access_status_t reg_access_nvdia (mfile* mf, reg_access_method_t method, struct tools_open_nvdia* nvdia);
+reg_access_status_t reg_access_nvia (mfile* mf, reg_access_method_t method, struct tools_open_nvia* nvdia);
 reg_access_status_t reg_access_nvqc (mfile* mf, reg_access_method_t method, struct tools_open_nvqc* nvqc);
 
 #ifdef __cplusplus
diff --git a/small_utils/hca_self_test.ofed b/small_utils/hca_self_test.ofed
index acd4fd9..337331a 100755
--- a/small_utils/hca_self_test.ofed
+++ b/small_utils/hca_self_test.ofed
@@ -109,11 +109,12 @@ done
 
 
 HCA_LSPCI_NAME="InfiniBand"
+HCA_LSPCI_NAME_NEW="Infiniband controller"
 VPI_LSPCI_NAME="Network controller"
 NIC_LSPCI_NAME="Ethernet controller"
 MEM_CON_LSPCI_NAME="Memory controller"
 
-MEL_LSPCI_NAME_EXP="${HCA_LSPCI_NAME}|${VPI_LSPCI_NAME}|${NIC_LSPCI_NAME}"
+MEL_LSPCI_NAME_EXP="${HCA_LSPCI_NAME}|${HCA_LSPCI_NAME_NEW}|${VPI_LSPCI_NAME}|${NIC_LSPCI_NAME}"
 
 echo "---- Performing Adapter Device Self Test ----"
 
@@ -244,7 +245,7 @@ function get_ca_type() {
 
     current_pci_info=`get_curr_ca_pci_info $loop_cnt`
 
-    if [[ ${current_pci_info} =~ ${HCA_LSPCI_NAME} ]] || [[ ${current_pci_info} =~ ${MEM_CON_LSPCI_NAME} ]]; then
+    if [[ ${current_pci_info} =~ ${HCA_LSPCI_NAME} ]] || [[ ${current_pci_info} =~ ${HCA_LSPCI_NAME_NEW} ]] || [[ ${current_pci_info} =~ ${MEM_CON_LSPCI_NAME} ]]; then
         ca_type=HCA
     elif [[ ${current_pci_info}  =~ ${VPI_LSPCI_NAME} ]]; then
         ca_type=VPI
diff --git a/tools_layouts/adb_to_c_utils.c b/tools_layouts/adb_to_c_utils.c
index 56f4ccd..cd39ab9 100644
--- a/tools_layouts/adb_to_c_utils.c
+++ b/tools_layouts/adb_to_c_utils.c
@@ -31,9 +31,9 @@
  */
 
 /***
- *** This file was generated at "2015-04-20 13:45:50"
+ *** This file was generated at "2015-06-17 12:05:46"
  *** by:
- ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/connectx4/connectx4.adb --file-prefix connectx4 --prefix connectx4_
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
  ***/
 
 #include <assert.h>
diff --git a/tools_layouts/adb_to_c_utils.h b/tools_layouts/adb_to_c_utils.h
index ac51109..c0e22f1 100644
--- a/tools_layouts/adb_to_c_utils.h
+++ b/tools_layouts/adb_to_c_utils.h
@@ -31,9 +31,9 @@
  */
 
 /***
- *** This file was generated at "2015-04-20 13:45:50"
+ *** This file was generated at "2015-06-17 12:05:46"
  *** by:
- ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/connectx4/connectx4.adb --file-prefix connectx4 --prefix connectx4_
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
  ***/
 
 #ifndef ADABE_TO_C_UTILS
diff --git a/tools_layouts/cibfw_layouts.c b/tools_layouts/cibfw_layouts.c
index 8243994..d72ee07 100644
--- a/tools_layouts/cibfw_layouts.c
+++ b/tools_layouts/cibfw_layouts.c
@@ -31,7 +31,7 @@
  */
 
 /***
- *** This file was generated at "2015-02-05 17:00:49"
+ *** This file was generated at "2015-06-17 12:05:15"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/cibfw/cibfw.adb --file-prefix cibfw --prefix cibfw_
  ***/
@@ -329,6 +329,64 @@ void cibfw_module_versions_dump(const struct cibfw_module_versions *ptr_struct,
 	cibfw_module_versions_print(ptr_struct, file, 0);
 }
 
+void cibfw_image_size_pack(const struct cibfw_image_size *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=24;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->log_step);
+
+	offset=32;
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->max_size);
+
+}
+
+void cibfw_image_size_unpack(struct cibfw_image_size *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=24;
+	ptr_struct->log_step = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+	offset=32;
+	ptr_struct->max_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void cibfw_image_size_print(const struct cibfw_image_size *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== cibfw_image_size ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "log_step             : "UH_FMT"\n", ptr_struct->log_step);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "max_size             : "U32H_FMT"\n", ptr_struct->max_size);
+
+}
+
+int cibfw_image_size_size(void){
+	 return 8;
+}
+
+void cibfw_image_size_dump(const struct cibfw_image_size *ptr_struct, FILE* file) {
+	cibfw_image_size_print(ptr_struct, file, 0);
+}
+
 void cibfw_TRIPPLE_VERSION_pack(const struct cibfw_TRIPPLE_VERSION *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
@@ -655,6 +713,12 @@ void cibfw_image_info_pack(const struct cibfw_image_info *ptr_struct, u_int8_t*
 	(void)ptr_struct;
 	(void)ptr_buff;
 
+	offset=8;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->minor_version);
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->major_version);
+
 	offset=32;
 	cibfw_FW_VERSION_pack(&(ptr_struct->FW_VERSION), ptr_buff + offset/8);
 
@@ -674,6 +738,9 @@ void cibfw_image_info_pack(const struct cibfw_image_info *ptr_struct, u_int8_t*
 	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->vsd[i]);
 	}
 
+	offset=2112;
+	cibfw_image_size_pack(&(ptr_struct->image_size), ptr_buff + offset/8);
+
 	for (i=0; i < 4; i++) {
 	offset=adb2c_calc_array_field_address(2240, 32, i, 8192, 1);
 	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->supported_hw_id[i]);
@@ -702,6 +769,12 @@ void cibfw_image_info_unpack(struct cibfw_image_info *ptr_struct, const u_int8_t
 	(void)ptr_struct;
 	(void)ptr_buff;
 
+	offset=8;
+	ptr_struct->minor_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+	offset=0;
+	ptr_struct->major_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
 	offset=32;
 	cibfw_FW_VERSION_unpack(&(ptr_struct->FW_VERSION), ptr_buff + offset/8);
 
@@ -723,6 +796,9 @@ void cibfw_image_info_unpack(struct cibfw_image_info *ptr_struct, const u_int8_t
 	}
 
 	ptr_struct->vsd[208] = '\0';
+	offset=2112;
+	cibfw_image_size_unpack(&(ptr_struct->image_size), ptr_buff + offset/8);
+
 	for (i=0; i < 4; i++) {
 	offset=adb2c_calc_array_field_address(2240, 32, i, 8192, 1);
 	ptr_struct->supported_hw_id[i] = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
@@ -751,6 +827,12 @@ void cibfw_image_info_print(const struct cibfw_image_info *ptr_struct, FILE* fil
 	(void)indent_level;
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "minor_version        : "UH_FMT"\n", ptr_struct->minor_version);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "major_version        : "UH_FMT"\n", ptr_struct->major_version);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "FW_VERSION:\n");
 	cibfw_FW_VERSION_print(&(ptr_struct->FW_VERSION), file, indent_level + 1);
 
@@ -763,6 +845,10 @@ void cibfw_image_info_print(const struct cibfw_image_info *ptr_struct, FILE* fil
 	fprintf(file, "vsd_vendor_id        : "UH_FMT"\n", ptr_struct->vsd_vendor_id);
 
 	fprintf(file, "vsd                  : \"%s\"\n", ptr_struct->vsd);
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "image_size:\n");
+	cibfw_image_size_print(&(ptr_struct->image_size), file, indent_level + 1);
+
 	for (i=0; i < 4; i++) {
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "supported_hw_id_%03d : "U32H_FMT"\n", i, ptr_struct->supported_hw_id[i]);
diff --git a/tools_layouts/cibfw_layouts.h b/tools_layouts/cibfw_layouts.h
index 2fc0f48..0c449c3 100644
--- a/tools_layouts/cibfw_layouts.h
+++ b/tools_layouts/cibfw_layouts.h
@@ -31,7 +31,7 @@
  */
 
 /***
- *** This file was generated at "2015-02-05 17:00:49"
+ *** This file was generated at "2015-06-17 12:05:15"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/cibfw/cibfw.adb --file-prefix cibfw --prefix cibfw_
  ***/
@@ -119,6 +119,19 @@ struct cibfw_module_versions {
 
 /* Description -   */
 /* Size in bytes - 8 */
+struct cibfw_image_size {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - log of next address in bytes to search for an image. Address in bytes is 2^log_step */
+	/* 0.0 - 0.7 */
+	 u_int8_t log_step;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+	/* Description - Max possible size in bytes of image. Image read / write should not occure beyond this address */
+	/* 4.0 - 8.31 */
+	 u_int32_t max_size;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
 struct cibfw_TRIPPLE_VERSION {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
@@ -211,6 +224,13 @@ struct cibfw_operation_key {
 /* Description -   */
 /* Size in bytes - 1024 */
 struct cibfw_image_info {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - IMAGE_INFO section minor version */
+	/* 0.16 - 0.23 */
+	 u_int8_t minor_version;
+	/* Description - IMAGE_INFO section major version */
+	/* 0.24 - 4.31 */
+	 u_int8_t major_version;
 /*---------------- DWORD[1] (Offset 0x4) ----------------*/
 	/* Description -  */
 	/* 4.0 - 20.31 */
@@ -231,6 +251,10 @@ struct cibfw_image_info {
 	/* Description -  */
 	/* 56.24 - 264.23 */
 	 char vsd[209];
+/*---------------- DWORD[66] (Offset 0x108) ----------------*/
+	/* Description - image size parameters */
+	/* 264.0 - 272.31 */
+	 struct cibfw_image_size image_size;
 /*---------------- DWORD[70] (Offset 0x118) ----------------*/
 	/* Description - HW device(s) supported by this FW image.
 0 means invalid entry.
@@ -498,7 +522,6 @@ void cibfw_uint64_print(const struct cibfw_uint64 *ptr_struct, FILE* file, int i
 int cibfw_uint64_size(void);
 #define CIBFW_UINT64_SIZE    (0x8)
 void cibfw_uint64_dump(const struct cibfw_uint64 *ptr_struct, FILE* file);
-;
 /* module_version */
 void cibfw_module_version_pack(const struct cibfw_module_version *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_module_version_unpack(struct cibfw_module_version *ptr_struct, const u_int8_t* ptr_buff);
@@ -506,7 +529,6 @@ void cibfw_module_version_print(const struct cibfw_module_version *ptr_struct, F
 int cibfw_module_version_size(void);
 #define CIBFW_MODULE_VERSION_SIZE    (0x4)
 void cibfw_module_version_dump(const struct cibfw_module_version *ptr_struct, FILE* file);
-;
 /* uid_entry */
 void cibfw_uid_entry_pack(const struct cibfw_uid_entry *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_uid_entry_unpack(struct cibfw_uid_entry *ptr_struct, const u_int8_t* ptr_buff);
@@ -514,7 +536,6 @@ void cibfw_uid_entry_print(const struct cibfw_uid_entry *ptr_struct, FILE* file,
 int cibfw_uid_entry_size(void);
 #define CIBFW_UID_ENTRY_SIZE    (0x10)
 void cibfw_uid_entry_dump(const struct cibfw_uid_entry *ptr_struct, FILE* file);
-;
 /* module_versions */
 void cibfw_module_versions_pack(const struct cibfw_module_versions *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_module_versions_unpack(struct cibfw_module_versions *ptr_struct, const u_int8_t* ptr_buff);
@@ -522,7 +543,13 @@ void cibfw_module_versions_print(const struct cibfw_module_versions *ptr_struct,
 int cibfw_module_versions_size(void);
 #define CIBFW_MODULE_VERSIONS_SIZE    (0x40)
 void cibfw_module_versions_dump(const struct cibfw_module_versions *ptr_struct, FILE* file);
-;
+/* image_size */
+void cibfw_image_size_pack(const struct cibfw_image_size *ptr_struct, u_int8_t* ptr_buff);
+void cibfw_image_size_unpack(struct cibfw_image_size *ptr_struct, const u_int8_t* ptr_buff);
+void cibfw_image_size_print(const struct cibfw_image_size *ptr_struct, FILE* file, int indent_level);
+int cibfw_image_size_size(void);
+#define CIBFW_IMAGE_SIZE_SIZE    (0x8)
+void cibfw_image_size_dump(const struct cibfw_image_size *ptr_struct, FILE* file);
 /* TRIPPLE_VERSION */
 void cibfw_TRIPPLE_VERSION_pack(const struct cibfw_TRIPPLE_VERSION *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_TRIPPLE_VERSION_unpack(struct cibfw_TRIPPLE_VERSION *ptr_struct, const u_int8_t* ptr_buff);
@@ -530,7 +557,6 @@ void cibfw_TRIPPLE_VERSION_print(const struct cibfw_TRIPPLE_VERSION *ptr_struct,
 int cibfw_TRIPPLE_VERSION_size(void);
 #define CIBFW_TRIPPLE_VERSION_SIZE    (0x8)
 void cibfw_TRIPPLE_VERSION_dump(const struct cibfw_TRIPPLE_VERSION *ptr_struct, FILE* file);
-;
 /* FW_VERSION */
 void cibfw_FW_VERSION_pack(const struct cibfw_FW_VERSION *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_FW_VERSION_unpack(struct cibfw_FW_VERSION *ptr_struct, const u_int8_t* ptr_buff);
@@ -538,7 +564,6 @@ void cibfw_FW_VERSION_print(const struct cibfw_FW_VERSION *ptr_struct, FILE* fil
 int cibfw_FW_VERSION_size(void);
 #define CIBFW_FW_VERSION_SIZE    (0x10)
 void cibfw_FW_VERSION_dump(const struct cibfw_FW_VERSION *ptr_struct, FILE* file);
-;
 /* guids */
 void cibfw_guids_pack(const struct cibfw_guids *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_guids_unpack(struct cibfw_guids *ptr_struct, const u_int8_t* ptr_buff);
@@ -546,7 +571,6 @@ void cibfw_guids_print(const struct cibfw_guids *ptr_struct, FILE* file, int ind
 int cibfw_guids_size(void);
 #define CIBFW_GUIDS_SIZE    (0x40)
 void cibfw_guids_dump(const struct cibfw_guids *ptr_struct, FILE* file);
-;
 /* operation_key */
 void cibfw_operation_key_pack(const struct cibfw_operation_key *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_operation_key_unpack(struct cibfw_operation_key *ptr_struct, const u_int8_t* ptr_buff);
@@ -554,7 +578,6 @@ void cibfw_operation_key_print(const struct cibfw_operation_key *ptr_struct, FIL
 int cibfw_operation_key_size(void);
 #define CIBFW_OPERATION_KEY_SIZE    (0x10)
 void cibfw_operation_key_dump(const struct cibfw_operation_key *ptr_struct, FILE* file);
-;
 /* image_info */
 void cibfw_image_info_pack(const struct cibfw_image_info *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_image_info_unpack(struct cibfw_image_info *ptr_struct, const u_int8_t* ptr_buff);
@@ -562,7 +585,6 @@ void cibfw_image_info_print(const struct cibfw_image_info *ptr_struct, FILE* fil
 int cibfw_image_info_size(void);
 #define CIBFW_IMAGE_INFO_SIZE    (0x400)
 void cibfw_image_info_dump(const struct cibfw_image_info *ptr_struct, FILE* file);
-;
 /* mfg_info */
 void cibfw_mfg_info_pack(const struct cibfw_mfg_info *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_mfg_info_unpack(struct cibfw_mfg_info *ptr_struct, const u_int8_t* ptr_buff);
@@ -570,7 +592,6 @@ void cibfw_mfg_info_print(const struct cibfw_mfg_info *ptr_struct, FILE* file, i
 int cibfw_mfg_info_size(void);
 #define CIBFW_MFG_INFO_SIZE    (0x140)
 void cibfw_mfg_info_dump(const struct cibfw_mfg_info *ptr_struct, FILE* file);
-;
 /* device_info */
 void cibfw_device_info_pack(const struct cibfw_device_info *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_device_info_unpack(struct cibfw_device_info *ptr_struct, const u_int8_t* ptr_buff);
@@ -578,7 +599,6 @@ void cibfw_device_info_print(const struct cibfw_device_info *ptr_struct, FILE* f
 int cibfw_device_info_size(void);
 #define CIBFW_DEVICE_INFO_SIZE    (0x200)
 void cibfw_device_info_dump(const struct cibfw_device_info *ptr_struct, FILE* file);
-;
 /* register_mfrl */
 void cibfw_register_mfrl_pack(const struct cibfw_register_mfrl *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_register_mfrl_unpack(struct cibfw_register_mfrl *ptr_struct, const u_int8_t* ptr_buff);
@@ -586,7 +606,6 @@ void cibfw_register_mfrl_print(const struct cibfw_register_mfrl *ptr_struct, FIL
 int cibfw_register_mfrl_size(void);
 #define CIBFW_REGISTER_MFRL_SIZE    (0x10)
 void cibfw_register_mfrl_dump(const struct cibfw_register_mfrl *ptr_struct, FILE* file);
-;
 /* itoc_header */
 void cibfw_itoc_header_pack(const struct cibfw_itoc_header *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_itoc_header_unpack(struct cibfw_itoc_header *ptr_struct, const u_int8_t* ptr_buff);
@@ -594,7 +613,6 @@ void cibfw_itoc_header_print(const struct cibfw_itoc_header *ptr_struct, FILE* f
 int cibfw_itoc_header_size(void);
 #define CIBFW_ITOC_HEADER_SIZE    (0x20)
 void cibfw_itoc_header_dump(const struct cibfw_itoc_header *ptr_struct, FILE* file);
-;
 /* itoc_entry */
 void cibfw_itoc_entry_pack(const struct cibfw_itoc_entry *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_itoc_entry_unpack(struct cibfw_itoc_entry *ptr_struct, const u_int8_t* ptr_buff);
@@ -602,7 +620,6 @@ void cibfw_itoc_entry_print(const struct cibfw_itoc_entry *ptr_struct, FILE* fil
 int cibfw_itoc_entry_size(void);
 #define CIBFW_ITOC_ENTRY_SIZE    (0x20)
 void cibfw_itoc_entry_dump(const struct cibfw_itoc_entry *ptr_struct, FILE* file);
-;
 /* register_mfai */
 void cibfw_register_mfai_pack(const struct cibfw_register_mfai *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_register_mfai_unpack(struct cibfw_register_mfai *ptr_struct, const u_int8_t* ptr_buff);
@@ -610,7 +627,6 @@ void cibfw_register_mfai_print(const struct cibfw_register_mfai *ptr_struct, FIL
 int cibfw_register_mfai_size(void);
 #define CIBFW_REGISTER_MFAI_SIZE    (0x10)
 void cibfw_register_mfai_dump(const struct cibfw_register_mfai *ptr_struct, FILE* file);
-;
 /* cibfw_Nodes */
 void cibfw_cibfw_Nodes_pack(const union cibfw_cibfw_Nodes *ptr_struct, u_int8_t* ptr_buff);
 void cibfw_cibfw_Nodes_unpack(union cibfw_cibfw_Nodes *ptr_struct, const u_int8_t* ptr_buff);
@@ -618,7 +634,6 @@ void cibfw_cibfw_Nodes_print(const union cibfw_cibfw_Nodes *ptr_struct, FILE* fi
 int cibfw_cibfw_Nodes_size(void);
 #define CIBFW_CIBFW_NODES_SIZE    (0x400)
 void cibfw_cibfw_Nodes_dump(const union cibfw_cibfw_Nodes *ptr_struct, FILE* file);
-;
 
 
 #ifdef __cplusplus
diff --git a/tools_layouts/cx4fw_layouts.c b/tools_layouts/cx4fw_layouts.c
index 2eeb44d..d723ac7 100644
--- a/tools_layouts/cx4fw_layouts.c
+++ b/tools_layouts/cx4fw_layouts.c
@@ -29,6 +29,7 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
+ 
 
 /***
  *** This file was generated at "2015-04-20 13:45:40"
diff --git a/tools_layouts/register_access_open_layouts.h b/tools_layouts/register_access_open_layouts.h
index badb185..8ca4e39 100644
--- a/tools_layouts/register_access_open_layouts.h
+++ b/tools_layouts/register_access_open_layouts.h
@@ -31,7 +31,7 @@
  */
 
 /***
- *** This file was generated at "2015-02-05 17:01:35"
+ *** This file was generated at "2015-06-17 12:05:44"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access_open/register_access_open.adb --file-prefix register_access_open --prefix register_access_
  ***/
@@ -142,7 +142,6 @@ void register_access_mfba_print(const struct register_access_mfba *ptr_struct, F
 int register_access_mfba_size(void);
 #define REGISTER_ACCESS_MFBA_SIZE    (0x10c)
 void register_access_mfba_dump(const struct register_access_mfba *ptr_struct, FILE* file);
-;
 /* mfpa */
 void register_access_mfpa_pack(const struct register_access_mfpa *ptr_struct, u_int8_t* ptr_buff);
 void register_access_mfpa_unpack(struct register_access_mfpa *ptr_struct, const u_int8_t* ptr_buff);
@@ -150,7 +149,6 @@ void register_access_mfpa_print(const struct register_access_mfpa *ptr_struct, F
 int register_access_mfpa_size(void);
 #define REGISTER_ACCESS_MFPA_SIZE    (0x24)
 void register_access_mfpa_dump(const struct register_access_mfpa *ptr_struct, FILE* file);
-;
 /* mfbe */
 void register_access_mfbe_pack(const struct register_access_mfbe *ptr_struct, u_int8_t* ptr_buff);
 void register_access_mfbe_unpack(struct register_access_mfbe *ptr_struct, const u_int8_t* ptr_buff);
@@ -158,7 +156,6 @@ void register_access_mfbe_print(const struct register_access_mfbe *ptr_struct, F
 int register_access_mfbe_size(void);
 #define REGISTER_ACCESS_MFBE_SIZE    (0xc)
 void register_access_mfbe_dump(const struct register_access_mfbe *ptr_struct, FILE* file);
-;
 /* register_access_open_Nodes */
 void register_access_register_access_open_Nodes_pack(const union register_access_register_access_open_Nodes *ptr_struct, u_int8_t* ptr_buff);
 void register_access_register_access_open_Nodes_unpack(union register_access_register_access_open_Nodes *ptr_struct, const u_int8_t* ptr_buff);
@@ -166,7 +163,6 @@ void register_access_register_access_open_Nodes_print(const union register_acces
 int register_access_register_access_open_Nodes_size(void);
 #define REGISTER_ACCESS_REGISTER_ACCESS_OPEN_NODES_SIZE    (0x10c)
 void register_access_register_access_open_Nodes_dump(const union register_access_register_access_open_Nodes *ptr_struct, FILE* file);
-;
 
 
 #ifdef __cplusplus
diff --git a/tools_layouts/register_access_sib_layouts.c b/tools_layouts/register_access_sib_layouts.c
index 26a10a2..60bee42 100644
--- a/tools_layouts/register_access_sib_layouts.c
+++ b/tools_layouts/register_access_sib_layouts.c
@@ -31,7 +31,7 @@
  */
 
 /***
- *** This file was generated at "2015-02-05 17:00:28"
+ *** This file was generated at "2015-06-17 12:04:46"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access/register_access_sib.adb --file-prefix register_access_sib --prefix register_access_sib_
  ***/
@@ -507,12 +507,12 @@ void register_access_sib_mtmp_pack(const struct register_access_sib_mtmp *ptr_st
 	offset=144;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->temperature_threshold_lo);
 
-	offset=160;
-	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->name_lo);
-
 	offset=192;
 	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->name_hi);
 
+	offset=224;
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->name_lo);
+
 }
 
 void register_access_sib_mtmp_unpack(struct register_access_sib_mtmp *ptr_struct, const u_int8_t* ptr_buff){
@@ -552,12 +552,12 @@ void register_access_sib_mtmp_unpack(struct register_access_sib_mtmp *ptr_struct
 	offset=144;
 	ptr_struct->temperature_threshold_lo = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
 
-	offset=160;
-	ptr_struct->name_lo = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
-
 	offset=192;
 	ptr_struct->name_hi = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
 
+	offset=224;
+	ptr_struct->name_lo = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
 }
 
 void register_access_sib_mtmp_print(const struct register_access_sib_mtmp *ptr_struct, FILE* file, int indent_level){
@@ -596,15 +596,15 @@ void register_access_sib_mtmp_print(const struct register_access_sib_mtmp *ptr_s
 	fprintf(file, "temperature_threshold_lo : "UH_FMT"\n", ptr_struct->temperature_threshold_lo);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "name_lo              : "U32H_FMT"\n", ptr_struct->name_lo);
+	fprintf(file, "name_hi              : "U32H_FMT"\n", ptr_struct->name_hi);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "name_hi              : "U32H_FMT"\n", ptr_struct->name_hi);
+	fprintf(file, "name_lo              : "U32H_FMT"\n", ptr_struct->name_lo);
 
 }
 
 int register_access_sib_mtmp_size(void){
-	 return 28;
+	 return 32;
 }
 
 void register_access_sib_mtmp_dump(const struct register_access_sib_mtmp *ptr_struct, FILE* file) {
diff --git a/tools_layouts/register_access_sib_layouts.h b/tools_layouts/register_access_sib_layouts.h
index e4325dc..6ca28b8 100644
--- a/tools_layouts/register_access_sib_layouts.h
+++ b/tools_layouts/register_access_sib_layouts.h
@@ -31,7 +31,7 @@
  */
 
 /***
- *** This file was generated at "2015-02-05 17:00:28"
+ *** This file was generated at "2015-06-17 12:04:46"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access/register_access_sib.adb --file-prefix register_access_sib --prefix register_access_sib_
  ***/
@@ -162,7 +162,7 @@ struct register_access_sib_mgir {
 };
 
 /* Description -   */
-/* Size in bytes - 28 */
+/* Size in bytes - 32 */
 struct register_access_sib_mtmp {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description - Sensors index to access */
@@ -200,14 +200,14 @@ will be generated */
 	/* Description -  */
 	/* 16.0 - 16.15 */
 	 u_int16_t temperature_threshold_lo;
-/*---------------- DWORD[5] (Offset 0x14) ----------------*/
-	/* Description -  */
-	/* 20.0 - 24.31 */
-	 u_int32_t name_lo;
 /*---------------- DWORD[6] (Offset 0x18) ----------------*/
 	/* Description -  */
 	/* 24.0 - 28.31 */
 	 u_int32_t name_hi;
+/*---------------- DWORD[7] (Offset 0x1c) ----------------*/
+	/* Description -  */
+	/* 28.0 - 32.31 */
+	 u_int32_t name_lo;
 };
 
 /* Description -   */
@@ -215,7 +215,7 @@ will be generated */
 union register_access_sib_register_access_sib_Nodes {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 28.31 */
+	/* 0.0 - 32.31 */
 	 struct register_access_sib_mtmp mtmp;
 	/* Description -  */
 	/* 0.0 - 128.31 */
@@ -231,7 +231,6 @@ void register_access_sib_IB_PSID__print(const struct register_access_sib_IB_PSID
 int register_access_sib_IB_PSID__size(void);
 #define REGISTER_ACCESS_SIB_IB_PSID__SIZE    (0x10)
 void register_access_sib_IB_PSID__dump(const struct register_access_sib_IB_PSID_ *ptr_struct, FILE* file);
-;
 /* IB_SWInfo_ */
 void register_access_sib_IB_SWInfo__pack(const struct register_access_sib_IB_SWInfo_ *ptr_struct, u_int8_t* ptr_buff);
 void register_access_sib_IB_SWInfo__unpack(struct register_access_sib_IB_SWInfo_ *ptr_struct, const u_int8_t* ptr_buff);
@@ -239,7 +238,6 @@ void register_access_sib_IB_SWInfo__print(const struct register_access_sib_IB_SW
 int register_access_sib_IB_SWInfo__size(void);
 #define REGISTER_ACCESS_SIB_IB_SWINFO__SIZE    (0x20)
 void register_access_sib_IB_SWInfo__dump(const struct register_access_sib_IB_SWInfo_ *ptr_struct, FILE* file);
-;
 /* IB_FWInfo_ */
 void register_access_sib_IB_FWInfo__pack(const struct register_access_sib_IB_FWInfo_ *ptr_struct, u_int8_t* ptr_buff);
 void register_access_sib_IB_FWInfo__unpack(struct register_access_sib_IB_FWInfo_ *ptr_struct, const u_int8_t* ptr_buff);
@@ -247,7 +245,6 @@ void register_access_sib_IB_FWInfo__print(const struct register_access_sib_IB_FW
 int register_access_sib_IB_FWInfo__size(void);
 #define REGISTER_ACCESS_SIB_IB_FWINFO__SIZE    (0x40)
 void register_access_sib_IB_FWInfo__dump(const struct register_access_sib_IB_FWInfo_ *ptr_struct, FILE* file);
-;
 /* IB_HWInfo_ */
 void register_access_sib_IB_HWInfo__pack(const struct register_access_sib_IB_HWInfo_ *ptr_struct, u_int8_t* ptr_buff);
 void register_access_sib_IB_HWInfo__unpack(struct register_access_sib_IB_HWInfo_ *ptr_struct, const u_int8_t* ptr_buff);
@@ -255,7 +252,6 @@ void register_access_sib_IB_HWInfo__print(const struct register_access_sib_IB_HW
 int register_access_sib_IB_HWInfo__size(void);
 #define REGISTER_ACCESS_SIB_IB_HWINFO__SIZE    (0x20)
 void register_access_sib_IB_HWInfo__dump(const struct register_access_sib_IB_HWInfo_ *ptr_struct, FILE* file);
-;
 /* mgir */
 void register_access_sib_mgir_pack(const struct register_access_sib_mgir *ptr_struct, u_int8_t* ptr_buff);
 void register_access_sib_mgir_unpack(struct register_access_sib_mgir *ptr_struct, const u_int8_t* ptr_buff);
@@ -263,15 +259,13 @@ void register_access_sib_mgir_print(const struct register_access_sib_mgir *ptr_s
 int register_access_sib_mgir_size(void);
 #define REGISTER_ACCESS_SIB_MGIR_SIZE    (0x80)
 void register_access_sib_mgir_dump(const struct register_access_sib_mgir *ptr_struct, FILE* file);
-;
 /* mtmp */
 void register_access_sib_mtmp_pack(const struct register_access_sib_mtmp *ptr_struct, u_int8_t* ptr_buff);
 void register_access_sib_mtmp_unpack(struct register_access_sib_mtmp *ptr_struct, const u_int8_t* ptr_buff);
 void register_access_sib_mtmp_print(const struct register_access_sib_mtmp *ptr_struct, FILE* file, int indent_level);
 int register_access_sib_mtmp_size(void);
-#define REGISTER_ACCESS_SIB_MTMP_SIZE    (0x1c)
+#define REGISTER_ACCESS_SIB_MTMP_SIZE    (0x20)
 void register_access_sib_mtmp_dump(const struct register_access_sib_mtmp *ptr_struct, FILE* file);
-;
 /* register_access_sib_Nodes */
 void register_access_sib_register_access_sib_Nodes_pack(const union register_access_sib_register_access_sib_Nodes *ptr_struct, u_int8_t* ptr_buff);
 void register_access_sib_register_access_sib_Nodes_unpack(union register_access_sib_register_access_sib_Nodes *ptr_struct, const u_int8_t* ptr_buff);
@@ -279,7 +273,6 @@ void register_access_sib_register_access_sib_Nodes_print(const union register_ac
 int register_access_sib_register_access_sib_Nodes_size(void);
 #define REGISTER_ACCESS_SIB_REGISTER_ACCESS_SIB_NODES_SIZE    (0x80)
 void register_access_sib_register_access_sib_Nodes_dump(const union register_access_sib_register_access_sib_Nodes *ptr_struct, FILE* file);
-;
 
 
 #ifdef __cplusplus
diff --git a/tools_layouts/tools_open_layouts.c b/tools_layouts/tools_open_layouts.c
index 42f2c10..fa3945a 100644
--- a/tools_layouts/tools_open_layouts.c
+++ b/tools_layouts/tools_open_layouts.c
@@ -31,7 +31,7 @@
  */
 
 /***
- *** This file was generated at "2015-06-16 07:00:30"
+ *** This file was generated at "2015-08-31 18:48:47"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
  ***/
@@ -86,7 +86,7 @@ void tools_open_tlv_type_dw_dump(const struct tools_open_tlv_type_dw *ptr_struct
 	tools_open_tlv_type_dw_print(ptr_struct, file, 0);
 }
 
-void tools_open_eswitch_type_pack(const struct tools_open_eswitch_type *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_per_port_type_pack(const struct tools_open_per_port_type *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -97,18 +97,15 @@ void tools_open_eswitch_type_pack(const struct tools_open_eswitch_type *ptr_stru
 	offset=16;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->param_idx);
 
-	offset=14;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->port);
-
 	offset=8;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 6, (u_int32_t)ptr_struct->host);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->port);
 
 	offset=0;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->param_class);
 
 }
 
-void tools_open_eswitch_type_unpack(struct tools_open_eswitch_type *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_per_port_type_unpack(struct tools_open_per_port_type *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -121,20 +118,17 @@ void tools_open_eswitch_type_unpack(struct tools_open_eswitch_type *ptr_struct,
 	offset=16;
 	ptr_struct->param_idx = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
 
-	offset=14;
-	ptr_struct->port = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
 	offset=8;
-	ptr_struct->host = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 6);
+	ptr_struct->port = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
 
 	offset=0;
 	ptr_struct->param_class = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
 
 }
 
-void tools_open_eswitch_type_print(const struct tools_open_eswitch_type *ptr_struct, FILE* file, int indent_level){
+void tools_open_per_port_type_print(const struct tools_open_per_port_type *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_eswitch_type ========\n");
+	fprintf(file, "======== tools_open_per_port_type ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -147,22 +141,19 @@ void tools_open_eswitch_type_print(const struct tools_open_eswitch_type *ptr_str
 	fprintf(file, "port                 : "UH_FMT"\n", ptr_struct->port);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "host                 : "UH_FMT"\n", ptr_struct->host);
-
-	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "param_class          : "UH_FMT"\n", ptr_struct->param_class);
 
 }
 
-int tools_open_eswitch_type_size(void){
+int tools_open_per_port_type_size(void){
 	 return 4;
 }
 
-void tools_open_eswitch_type_dump(const struct tools_open_eswitch_type *ptr_struct, FILE* file) {
-	tools_open_eswitch_type_print(ptr_struct, file, 0);
+void tools_open_per_port_type_dump(const struct tools_open_per_port_type *ptr_struct, FILE* file) {
+	tools_open_per_port_type_print(ptr_struct, file, 0);
 }
 
-void tools_open_per_host_type_pack(const struct tools_open_per_host_type *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_bmc_type_pack(const struct tools_open_bmc_type *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -170,11 +161,11 @@ void tools_open_per_host_type_pack(const struct tools_open_per_host_type *ptr_st
 	(void)ptr_struct;
 	(void)ptr_buff;
 
-	offset=22;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 10, (u_int32_t)ptr_struct->param_idx);
+	offset=19;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 13, (u_int32_t)ptr_struct->param_idx);
 
 	offset=14;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->function);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->channel);
 
 	offset=8;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 6, (u_int32_t)ptr_struct->host);
@@ -184,7 +175,7 @@ void tools_open_per_host_type_pack(const struct tools_open_per_host_type *ptr_st
 
 }
 
-void tools_open_per_host_type_unpack(struct tools_open_per_host_type *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_bmc_type_unpack(struct tools_open_bmc_type *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -194,11 +185,11 @@ void tools_open_per_host_type_unpack(struct tools_open_per_host_type *ptr_struct
 	(void)ptr_struct;
 	(void)ptr_buff;
 
-	offset=22;
-	ptr_struct->param_idx = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 10);
+	offset=19;
+	ptr_struct->param_idx = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 13);
 
 	offset=14;
-	ptr_struct->function = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+	ptr_struct->channel = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 5);
 
 	offset=8;
 	ptr_struct->host = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 6);
@@ -208,9 +199,9 @@ void tools_open_per_host_type_unpack(struct tools_open_per_host_type *ptr_struct
 
 }
 
-void tools_open_per_host_type_print(const struct tools_open_per_host_type *ptr_struct, FILE* file, int indent_level){
+void tools_open_bmc_type_print(const struct tools_open_bmc_type *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_per_host_type ========\n");
+	fprintf(file, "======== tools_open_bmc_type ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -220,7 +211,7 @@ void tools_open_per_host_type_print(const struct tools_open_per_host_type *ptr_s
 	fprintf(file, "param_idx            : "UH_FMT"\n", ptr_struct->param_idx);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "function             : "UH_FMT"\n", ptr_struct->function);
+	fprintf(file, "channel              : "UH_FMT"\n", ptr_struct->channel);
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "host                 : "UH_FMT"\n", ptr_struct->host);
@@ -230,15 +221,15 @@ void tools_open_per_host_type_print(const struct tools_open_per_host_type *ptr_s
 
 }
 
-int tools_open_per_host_type_size(void){
+int tools_open_bmc_type_size(void){
 	 return 4;
 }
 
-void tools_open_per_host_type_dump(const struct tools_open_per_host_type *ptr_struct, FILE* file) {
-	tools_open_per_host_type_print(ptr_struct, file, 0);
+void tools_open_bmc_type_dump(const struct tools_open_bmc_type *ptr_struct, FILE* file) {
+	tools_open_bmc_type_print(ptr_struct, file, 0);
 }
 
-void tools_open_bmc_type_pack(const struct tools_open_bmc_type *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_per_host_type_pack(const struct tools_open_per_host_type *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -246,11 +237,11 @@ void tools_open_bmc_type_pack(const struct tools_open_bmc_type *ptr_struct, u_in
 	(void)ptr_struct;
 	(void)ptr_buff;
 
-	offset=19;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 13, (u_int32_t)ptr_struct->param_idx);
+	offset=22;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 10, (u_int32_t)ptr_struct->param_idx);
 
 	offset=14;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->channel);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->function);
 
 	offset=8;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 6, (u_int32_t)ptr_struct->host);
@@ -260,7 +251,7 @@ void tools_open_bmc_type_pack(const struct tools_open_bmc_type *ptr_struct, u_in
 
 }
 
-void tools_open_bmc_type_unpack(struct tools_open_bmc_type *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_per_host_type_unpack(struct tools_open_per_host_type *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -270,11 +261,11 @@ void tools_open_bmc_type_unpack(struct tools_open_bmc_type *ptr_struct, const u_
 	(void)ptr_struct;
 	(void)ptr_buff;
 
-	offset=19;
-	ptr_struct->param_idx = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 13);
+	offset=22;
+	ptr_struct->param_idx = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 10);
 
 	offset=14;
-	ptr_struct->channel = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 5);
+	ptr_struct->function = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
 
 	offset=8;
 	ptr_struct->host = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 6);
@@ -284,9 +275,9 @@ void tools_open_bmc_type_unpack(struct tools_open_bmc_type *ptr_struct, const u_
 
 }
 
-void tools_open_bmc_type_print(const struct tools_open_bmc_type *ptr_struct, FILE* file, int indent_level){
+void tools_open_per_host_type_print(const struct tools_open_per_host_type *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_bmc_type ========\n");
+	fprintf(file, "======== tools_open_per_host_type ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -296,7 +287,7 @@ void tools_open_bmc_type_print(const struct tools_open_bmc_type *ptr_struct, FIL
 	fprintf(file, "param_idx            : "UH_FMT"\n", ptr_struct->param_idx);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "channel              : "UH_FMT"\n", ptr_struct->channel);
+	fprintf(file, "function             : "UH_FMT"\n", ptr_struct->function);
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "host                 : "UH_FMT"\n", ptr_struct->host);
@@ -306,15 +297,15 @@ void tools_open_bmc_type_print(const struct tools_open_bmc_type *ptr_struct, FIL
 
 }
 
-int tools_open_bmc_type_size(void){
+int tools_open_per_host_type_size(void){
 	 return 4;
 }
 
-void tools_open_bmc_type_dump(const struct tools_open_bmc_type *ptr_struct, FILE* file) {
-	tools_open_bmc_type_print(ptr_struct, file, 0);
+void tools_open_per_host_type_dump(const struct tools_open_per_host_type *ptr_struct, FILE* file) {
+	tools_open_per_host_type_print(ptr_struct, file, 0);
 }
 
-void tools_open_per_port_type_pack(const struct tools_open_per_port_type *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_eswitch_type_pack(const struct tools_open_eswitch_type *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -325,15 +316,18 @@ void tools_open_per_port_type_pack(const struct tools_open_per_port_type *ptr_st
 	offset=16;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->param_idx);
 
+	offset=14;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->port);
+
 	offset=8;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->port);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 6, (u_int32_t)ptr_struct->host);
 
 	offset=0;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->param_class);
 
 }
 
-void tools_open_per_port_type_unpack(struct tools_open_per_port_type *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_eswitch_type_unpack(struct tools_open_eswitch_type *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -346,17 +340,20 @@ void tools_open_per_port_type_unpack(struct tools_open_per_port_type *ptr_struct
 	offset=16;
 	ptr_struct->param_idx = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
 
+	offset=14;
+	ptr_struct->port = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
 	offset=8;
-	ptr_struct->port = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+	ptr_struct->host = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 6);
 
 	offset=0;
 	ptr_struct->param_class = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
 
 }
 
-void tools_open_per_port_type_print(const struct tools_open_per_port_type *ptr_struct, FILE* file, int indent_level){
+void tools_open_eswitch_type_print(const struct tools_open_eswitch_type *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_per_port_type ========\n");
+	fprintf(file, "======== tools_open_eswitch_type ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -369,16 +366,19 @@ void tools_open_per_port_type_print(const struct tools_open_per_port_type *ptr_s
 	fprintf(file, "port                 : "UH_FMT"\n", ptr_struct->port);
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "host                 : "UH_FMT"\n", ptr_struct->host);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "param_class          : "UH_FMT"\n", ptr_struct->param_class);
 
 }
 
-int tools_open_per_port_type_size(void){
+int tools_open_eswitch_type_size(void){
 	 return 4;
 }
 
-void tools_open_per_port_type_dump(const struct tools_open_per_port_type *ptr_struct, FILE* file) {
-	tools_open_per_port_type_print(ptr_struct, file, 0);
+void tools_open_eswitch_type_dump(const struct tools_open_eswitch_type *ptr_struct, FILE* file) {
+	tools_open_eswitch_type_print(ptr_struct, file, 0);
 }
 
 void tools_open_global_type_pack(const struct tools_open_global_type *ptr_struct, u_int8_t* ptr_buff){
@@ -462,20 +462,20 @@ void tools_open_tlv_type_print(const union tools_open_tlv_type *ptr_struct, FILE
 	tools_open_global_type_print(&(ptr_struct->global), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "per_port:\n");
-	tools_open_per_port_type_print(&(ptr_struct->per_port), file, indent_level + 1);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "bmc:\n");
-	tools_open_bmc_type_print(&(ptr_struct->bmc), file, indent_level + 1);
+	fprintf(file, "eswitch:\n");
+	tools_open_eswitch_type_print(&(ptr_struct->eswitch), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "per_host:\n");
 	tools_open_per_host_type_print(&(ptr_struct->per_host), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "eswitch:\n");
-	tools_open_eswitch_type_print(&(ptr_struct->eswitch), file, indent_level + 1);
+	fprintf(file, "bmc:\n");
+	tools_open_bmc_type_print(&(ptr_struct->bmc), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "per_port:\n");
+	tools_open_per_port_type_print(&(ptr_struct->per_port), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "tlv_type_dw:\n");
@@ -549,100 +549,6 @@ void tools_open_pmdio_addr_data_dump(const struct tools_open_pmdio_addr_data *pt
 	tools_open_pmdio_addr_data_print(ptr_struct, file, 0);
 }
 
-void tools_open_nv_hdr_pack(const struct tools_open_nv_hdr *ptr_struct, u_int8_t* ptr_buff){
-	u_int32_t offset;
-	int i=0;
-	(void)offset;
-	(void)i;
-	(void)ptr_struct;
-	(void)ptr_buff;
-
-	offset=16;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->type);
-
-	offset=2;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->length);
-
-	offset=40;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->type_mod);
-
-	offset=39;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->shadow);
-
-	offset=37;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->pad_cnt);
-
-	offset=32;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->version);
-
-}
-
-void tools_open_nv_hdr_unpack(struct tools_open_nv_hdr *ptr_struct, const u_int8_t* ptr_buff){
-	u_int32_t offset;
-	int i=0;
-	u_int8_t val=0;
-	(void)val;
-	(void)offset;
-	(void)i;
-	(void)ptr_struct;
-	(void)ptr_buff;
-
-	offset=16;
-	ptr_struct->type = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
-
-	offset=2;
-	ptr_struct->length = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
-
-	offset=40;
-	ptr_struct->type_mod = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
-
-	offset=39;
-	ptr_struct->shadow = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-	offset=37;
-	ptr_struct->pad_cnt = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
-	offset=32;
-	ptr_struct->version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
-
-}
-
-void tools_open_nv_hdr_print(const struct tools_open_nv_hdr *ptr_struct, FILE* file, int indent_level){
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_nv_hdr ========\n");
-	int i=0;
-	(void)i;(void)ptr_struct;
-	(void)file;
-	(void)indent_level;
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "type                 : "UH_FMT"\n", ptr_struct->type);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "length               : "UH_FMT"\n", ptr_struct->length);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "type_mod             : "UH_FMT"\n", ptr_struct->type_mod);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "shadow               : "UH_FMT"\n", ptr_struct->shadow);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "pad_cnt              : "UH_FMT"\n", ptr_struct->pad_cnt);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "version              : "UH_FMT"\n", ptr_struct->version);
-
-}
-
-int tools_open_nv_hdr_size(void){
-	 return 8;
-}
-
-void tools_open_nv_hdr_dump(const struct tools_open_nv_hdr *ptr_struct, FILE* file) {
-	tools_open_nv_hdr_print(ptr_struct, file, 0);
-}
-
 void tools_open_nv_hdr_fifth_gen_pack(const struct tools_open_nv_hdr_fifth_gen *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
@@ -747,7 +653,7 @@ void tools_open_nv_hdr_fifth_gen_dump(const struct tools_open_nv_hdr_fifth_gen *
 	tools_open_nv_hdr_fifth_gen_print(ptr_struct, file, 0);
 }
 
-void tools_open_pmdio_pack(const struct tools_open_pmdio *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_nv_hdr_pack(const struct tools_open_nv_hdr *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -755,35 +661,129 @@ void tools_open_pmdio_pack(const struct tools_open_pmdio *ptr_struct, u_int8_t*
 	(void)ptr_struct;
 	(void)ptr_buff;
 
-	offset=29;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->operation);
-
-	offset=22;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->clause);
-
-	offset=8;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->local_port);
+	offset=16;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->type);
 
-	offset=0;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->lock);
+	offset=2;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->length);
 
-	offset=59;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->reg_adr_mmd);
+	offset=40;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->type_mod);
 
-	offset=48;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->last_op_idx);
+	offset=39;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->shadow);
 
-	offset=40;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->num_ops_done);
+	offset=37;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->pad_cnt);
 
-	for (i=0; i < 64; i++) {
-	offset=adb2c_calc_array_field_address(64, 32, i, 2112, 1);
-	tools_open_pmdio_addr_data_pack(&(ptr_struct->mdio_trans[i]), ptr_buff + offset/8);
-	}
+	offset=32;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->version);
 
 }
 
-void tools_open_pmdio_unpack(struct tools_open_pmdio *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_nv_hdr_unpack(struct tools_open_nv_hdr *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=16;
+	ptr_struct->type = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+	offset=2;
+	ptr_struct->length = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+
+	offset=40;
+	ptr_struct->type_mod = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+	offset=39;
+	ptr_struct->shadow = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=37;
+	ptr_struct->pad_cnt = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+	offset=32;
+	ptr_struct->version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
+
+}
+
+void tools_open_nv_hdr_print(const struct tools_open_nv_hdr *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_nv_hdr ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "type                 : "UH_FMT"\n", ptr_struct->type);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "length               : "UH_FMT"\n", ptr_struct->length);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "type_mod             : "UH_FMT"\n", ptr_struct->type_mod);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "shadow               : "UH_FMT"\n", ptr_struct->shadow);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "pad_cnt              : "UH_FMT"\n", ptr_struct->pad_cnt);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "version              : "UH_FMT"\n", ptr_struct->version);
+
+}
+
+int tools_open_nv_hdr_size(void){
+	 return 8;
+}
+
+void tools_open_nv_hdr_dump(const struct tools_open_nv_hdr *ptr_struct, FILE* file) {
+	tools_open_nv_hdr_print(ptr_struct, file, 0);
+}
+
+void tools_open_pmdio_pack(const struct tools_open_pmdio *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=29;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->operation);
+
+	offset=22;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->clause);
+
+	offset=8;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->local_port);
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->lock);
+
+	offset=59;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->reg_adr_mmd);
+
+	offset=48;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->last_op_idx);
+
+	offset=40;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->num_ops_done);
+
+	for (i=0; i < 64; i++) {
+	offset=adb2c_calc_array_field_address(64, 32, i, 2112, 1);
+	tools_open_pmdio_addr_data_pack(&(ptr_struct->mdio_trans[i]), ptr_buff + offset/8);
+	}
+
+}
+
+void tools_open_pmdio_unpack(struct tools_open_pmdio *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -951,7 +951,7 @@ void tools_open_pmdic_dump(const struct tools_open_pmdic *ptr_struct, FILE* file
 	tools_open_pmdic_print(ptr_struct, file, 0);
 }
 
-void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_nvdi_pack(const struct tools_open_nvdi *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -960,11 +960,11 @@ void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* pt
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+	tools_open_nv_hdr_fifth_gen_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
 
 }
 
-void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_nvdi_unpack(struct tools_open_nvdi *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -975,13 +975,13 @@ void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t*
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+	tools_open_nv_hdr_fifth_gen_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
 
 }
 
-void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file, int indent_level){
+void tools_open_nvdi_print(const struct tools_open_nvdi *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_mnvi ========\n");
+	fprintf(file, "======== tools_open_nvdi ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -989,19 +989,19 @@ void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file,
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "nv_hdr:\n");
-	tools_open_nv_hdr_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
+	tools_open_nv_hdr_fifth_gen_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
 
 }
 
-int tools_open_mnvi_size(void){
-	 return 8;
+int tools_open_nvdi_size(void){
+	 return 12;
 }
 
-void tools_open_mnvi_dump(const struct tools_open_mnvi *ptr_struct, FILE* file) {
-	tools_open_mnvi_print(ptr_struct, file, 0);
+void tools_open_nvdi_dump(const struct tools_open_nvdi *ptr_struct, FILE* file) {
+	tools_open_nvdi_print(ptr_struct, file, 0);
 }
 
-void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_nvda_pack(const struct tools_open_nvda *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -1010,11 +1010,16 @@ void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t*
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+	tools_open_nv_hdr_fifth_gen_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+
+	for (i=0; i < 128; i++) {
+	offset=adb2c_calc_array_field_address(120, 8, i, 2048, 1);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->data[i]);
+	}
 
 }
 
-void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_nvda_unpack(struct tools_open_nvda *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -1025,13 +1030,18 @@ void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+	tools_open_nv_hdr_fifth_gen_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+
+	for (i=0; i < 128; i++) {
+	offset=adb2c_calc_array_field_address(120, 8, i, 2048, 1);
+	ptr_struct->data[i] = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+	}
 
 }
 
-void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* file, int indent_level){
+void tools_open_nvda_print(const struct tools_open_nvda *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_mnvia ========\n");
+	fprintf(file, "======== tools_open_nvda ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -1039,16 +1049,80 @@ void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* fil
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "nv_hdr:\n");
-	tools_open_nv_hdr_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
+	tools_open_nv_hdr_fifth_gen_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
+
+	for (i=0; i < 128; i++) {
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "data_%03d            : "UH_FMT"\n", i, ptr_struct->data[i]);
+	}
 
 }
 
-int tools_open_mnvia_size(void){
-	 return 8;
+int tools_open_nvda_size(void){
+	 return 256;
 }
 
-void tools_open_mnvia_dump(const struct tools_open_mnvia *ptr_struct, FILE* file) {
-	tools_open_mnvia_print(ptr_struct, file, 0);
+void tools_open_nvda_dump(const struct tools_open_nvda *ptr_struct, FILE* file) {
+	tools_open_nvda_print(ptr_struct, file, 0);
+}
+
+void tools_open_nvia_pack(const struct tools_open_nvia *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=0;
+	tools_open_nv_hdr_fifth_gen_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+
+	offset=125;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->target);
+
+}
+
+void tools_open_nvia_unpack(struct tools_open_nvia *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=0;
+	tools_open_nv_hdr_fifth_gen_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+
+	offset=125;
+	ptr_struct->target = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 3);
+
+}
+
+void tools_open_nvia_print(const struct tools_open_nvia *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_nvia ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nv_hdr:\n");
+	tools_open_nv_hdr_fifth_gen_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "target               : "UH_FMT"\n", ptr_struct->target);
+
+}
+
+int tools_open_nvia_size(void){
+	 return 20;
+}
+
+void tools_open_nvia_dump(const struct tools_open_nvia *ptr_struct, FILE* file) {
+	tools_open_nvia_print(ptr_struct, file, 0);
 }
 
 void tools_open_nvqc_pack(const struct tools_open_nvqc *ptr_struct, u_int8_t* ptr_buff){
@@ -1128,7 +1202,7 @@ void tools_open_nvqc_dump(const struct tools_open_nvqc *ptr_struct, FILE* file)
 	tools_open_nvqc_print(ptr_struct, file, 0);
 }
 
-void tools_open_nvdia_pack(const struct tools_open_nvdia *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -1137,11 +1211,11 @@ void tools_open_nvdia_pack(const struct tools_open_nvdia *ptr_struct, u_int8_t*
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_fifth_gen_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+	tools_open_nv_hdr_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
 
 }
 
-void tools_open_nvdia_unpack(struct tools_open_nvdia *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -1152,13 +1226,13 @@ void tools_open_nvdia_unpack(struct tools_open_nvdia *ptr_struct, const u_int8_t
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_fifth_gen_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
+	tools_open_nv_hdr_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
 
 }
 
-void tools_open_nvdia_print(const struct tools_open_nvdia *ptr_struct, FILE* file, int indent_level){
+void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_nvdia ========\n");
+	fprintf(file, "======== tools_open_mnvia ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -1166,19 +1240,19 @@ void tools_open_nvdia_print(const struct tools_open_nvdia *ptr_struct, FILE* fil
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "nv_hdr:\n");
-	tools_open_nv_hdr_fifth_gen_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
+	tools_open_nv_hdr_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
 
 }
 
-int tools_open_nvdia_size(void){
-	 return 12;
+int tools_open_mnvia_size(void){
+	 return 8;
 }
 
-void tools_open_nvdia_dump(const struct tools_open_nvdia *ptr_struct, FILE* file) {
-	tools_open_nvdia_print(ptr_struct, file, 0);
+void tools_open_mnvia_dump(const struct tools_open_mnvia *ptr_struct, FILE* file) {
+	tools_open_mnvia_print(ptr_struct, file, 0);
 }
 
-void tools_open_nvda_pack(const struct tools_open_nvda *ptr_struct, u_int8_t* ptr_buff){
+void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	(void)offset;
@@ -1187,16 +1261,11 @@ void tools_open_nvda_pack(const struct tools_open_nvda *ptr_struct, u_int8_t* pt
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_fifth_gen_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
-
-	for (i=0; i < 128; i++) {
-	offset=adb2c_calc_array_field_address(120, 8, i, 2048, 1);
-	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->data[i]);
-	}
+	tools_open_nv_hdr_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
 
 }
 
-void tools_open_nvda_unpack(struct tools_open_nvda *ptr_struct, const u_int8_t* ptr_buff){
+void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
 	u_int8_t val=0;
@@ -1207,18 +1276,13 @@ void tools_open_nvda_unpack(struct tools_open_nvda *ptr_struct, const u_int8_t*
 	(void)ptr_buff;
 
 	offset=0;
-	tools_open_nv_hdr_fifth_gen_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
-
-	for (i=0; i < 128; i++) {
-	offset=adb2c_calc_array_field_address(120, 8, i, 2048, 1);
-	ptr_struct->data[i] = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
-	}
+	tools_open_nv_hdr_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
 
 }
 
-void tools_open_nvda_print(const struct tools_open_nvda *ptr_struct, FILE* file, int indent_level){
+void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_nvda ========\n");
+	fprintf(file, "======== tools_open_mnvi ========\n");
 	int i=0;
 	(void)i;(void)ptr_struct;
 	(void)file;
@@ -1226,71 +1290,16 @@ void tools_open_nvda_print(const struct tools_open_nvda *ptr_struct, FILE* file,
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "nv_hdr:\n");
-	tools_open_nv_hdr_fifth_gen_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
-
-	for (i=0; i < 128; i++) {
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "data_%03d            : "UH_FMT"\n", i, ptr_struct->data[i]);
-	}
+	tools_open_nv_hdr_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
 
 }
 
-int tools_open_nvda_size(void){
-	 return 256;
+int tools_open_mnvi_size(void){
+	 return 8;
 }
 
-void tools_open_nvda_dump(const struct tools_open_nvda *ptr_struct, FILE* file) {
-	tools_open_nvda_print(ptr_struct, file, 0);
-}
-
-void tools_open_nvdi_pack(const struct tools_open_nvdi *ptr_struct, u_int8_t* ptr_buff){
-	u_int32_t offset;
-	int i=0;
-	(void)offset;
-	(void)i;
-	(void)ptr_struct;
-	(void)ptr_buff;
-
-	offset=0;
-	tools_open_nv_hdr_fifth_gen_pack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
-
-}
-
-void tools_open_nvdi_unpack(struct tools_open_nvdi *ptr_struct, const u_int8_t* ptr_buff){
-	u_int32_t offset;
-	int i=0;
-	u_int8_t val=0;
-	(void)val;
-	(void)offset;
-	(void)i;
-	(void)ptr_struct;
-	(void)ptr_buff;
-
-	offset=0;
-	tools_open_nv_hdr_fifth_gen_unpack(&(ptr_struct->nv_hdr), ptr_buff + offset/8);
-
-}
-
-void tools_open_nvdi_print(const struct tools_open_nvdi *ptr_struct, FILE* file, int indent_level){
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "======== tools_open_nvdi ========\n");
-	int i=0;
-	(void)i;(void)ptr_struct;
-	(void)file;
-	(void)indent_level;
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "nv_hdr:\n");
-	tools_open_nv_hdr_fifth_gen_print(&(ptr_struct->nv_hdr), file, indent_level + 1);
-
-}
-
-int tools_open_nvdi_size(void){
-	 return 12;
-}
-
-void tools_open_nvdi_dump(const struct tools_open_nvdi *ptr_struct, FILE* file) {
-	tools_open_nvdi_print(ptr_struct, file, 0);
+void tools_open_mnvi_dump(const struct tools_open_mnvi *ptr_struct, FILE* file) {
+	tools_open_mnvi_print(ptr_struct, file, 0);
 }
 
 void tools_open_mnva_pack(const struct tools_open_mnva *ptr_struct, u_int8_t* ptr_buff){
@@ -1366,38 +1375,50 @@ void tools_open_query_def_params_per_port_pack(const struct tools_open_query_def
 	(void)ptr_struct;
 	(void)ptr_buff;
 
+	offset=13;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->nv_config_vpi);
+
+	offset=12;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->nv_config_wol);
+
 	offset=0;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->fw_default_config_payload_version);
 
 	offset=52;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->boot_vlan);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->default_boot_vlan);
 
 	offset=44;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->boot_protocol);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->default_boot_protocol);
 
 	offset=40;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->boot_retry_cnt);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->default_boot_retry_cnt);
 
 	offset=37;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->network_link_type);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->default_network_link_type);
 
 	offset=36;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_magic);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->default_en_wol_magic);
 
 	offset=35;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->boot_vlan_en);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->default_boot_vlan_en);
 
 	offset=34;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->boot_option_rom_en);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->default_boot_option_rom_en);
 
 	offset=33;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->pprx);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->default_pprx);
 
 	offset=32;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->pptx);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->default_pptx);
 
 	offset=80;
-	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->boot_pkey);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->default_boot_pkey);
+
+	offset=68;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->nv_config_infiniband_dhcp_settings);
+
+	offset=67;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->nv_config_infiniband_boot_settings);
 
 	offset=66;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->nv_config_dhcp_iscsi_parameters);
@@ -1408,6 +1429,12 @@ void tools_open_query_def_params_per_port_pack(const struct tools_open_query_def
 	offset=64;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->nv_config_boot_parameters);
 
+	offset=108;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->client_indentifier);
+
+	offset=106;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->mac_admin_bit);
+
 	offset=104;
 	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->iscsi_boot_to_target);
 
@@ -1447,38 +1474,50 @@ void tools_open_query_def_params_per_port_unpack(struct tools_open_query_def_par
 	(void)ptr_struct;
 	(void)ptr_buff;
 
+	offset=13;
+	ptr_struct->nv_config_vpi = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=12;
+	ptr_struct->nv_config_wol = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
 	offset=0;
 	ptr_struct->fw_default_config_payload_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
 
 	offset=52;
-	ptr_struct->boot_vlan = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+	ptr_struct->default_boot_vlan = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
 
 	offset=44;
-	ptr_struct->boot_protocol = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
+	ptr_struct->default_boot_protocol = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
 
 	offset=40;
-	ptr_struct->boot_retry_cnt = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
+	ptr_struct->default_boot_retry_cnt = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
 
 	offset=37;
-	ptr_struct->network_link_type = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+	ptr_struct->default_network_link_type = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
 
 	offset=36;
-	ptr_struct->en_wol_magic = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+	ptr_struct->default_en_wol_magic = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
 	offset=35;
-	ptr_struct->boot_vlan_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+	ptr_struct->default_boot_vlan_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
 	offset=34;
-	ptr_struct->boot_option_rom_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+	ptr_struct->default_boot_option_rom_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
 	offset=33;
-	ptr_struct->pprx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+	ptr_struct->default_pprx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
 	offset=32;
-	ptr_struct->pptx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+	ptr_struct->default_pptx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
 	offset=80;
-	ptr_struct->boot_pkey = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+	ptr_struct->default_boot_pkey = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+	offset=68;
+	ptr_struct->nv_config_infiniband_dhcp_settings = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=67;
+	ptr_struct->nv_config_infiniband_boot_settings = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
 	offset=66;
 	ptr_struct->nv_config_dhcp_iscsi_parameters = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
@@ -1489,6 +1528,12 @@ void tools_open_query_def_params_per_port_unpack(struct tools_open_query_def_par
 	offset=64;
 	ptr_struct->nv_config_boot_parameters = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
+	offset=108;
+	ptr_struct->client_indentifier = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+	offset=106;
+	ptr_struct->mac_admin_bit = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
 	offset=104;
 	ptr_struct->iscsi_boot_to_target = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
 
@@ -1527,37 +1572,49 @@ void tools_open_query_def_params_per_port_print(const struct tools_open_query_de
 	(void)indent_level;
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nv_config_vpi        : "UH_FMT"\n", ptr_struct->nv_config_vpi);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nv_config_wol        : "UH_FMT"\n", ptr_struct->nv_config_wol);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "fw_default_config_payload_version : "UH_FMT"\n", ptr_struct->fw_default_config_payload_version);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "boot_vlan            : "UH_FMT"\n", ptr_struct->boot_vlan);
+	fprintf(file, "default_boot_vlan    : "UH_FMT"\n", ptr_struct->default_boot_vlan);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "boot_protocol        : "UH_FMT"\n", ptr_struct->boot_protocol);
+	fprintf(file, "default_boot_protocol : "UH_FMT"\n", ptr_struct->default_boot_protocol);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "boot_retry_cnt       : "UH_FMT"\n", ptr_struct->boot_retry_cnt);
+	fprintf(file, "default_boot_retry_cnt : "UH_FMT"\n", ptr_struct->default_boot_retry_cnt);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "network_link_type    : "UH_FMT"\n", ptr_struct->network_link_type);
+	fprintf(file, "default_network_link_type : "UH_FMT"\n", ptr_struct->default_network_link_type);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "en_wol_magic         : "UH_FMT"\n", ptr_struct->en_wol_magic);
+	fprintf(file, "default_en_wol_magic : "UH_FMT"\n", ptr_struct->default_en_wol_magic);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "boot_vlan_en         : "UH_FMT"\n", ptr_struct->boot_vlan_en);
+	fprintf(file, "default_boot_vlan_en : "UH_FMT"\n", ptr_struct->default_boot_vlan_en);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "boot_option_rom_en   : "UH_FMT"\n", ptr_struct->boot_option_rom_en);
+	fprintf(file, "default_boot_option_rom_en : "UH_FMT"\n", ptr_struct->default_boot_option_rom_en);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "pprx                 : "UH_FMT"\n", ptr_struct->pprx);
+	fprintf(file, "default_pprx         : "UH_FMT"\n", ptr_struct->default_pprx);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "pptx                 : "UH_FMT"\n", ptr_struct->pptx);
+	fprintf(file, "default_pptx         : "UH_FMT"\n", ptr_struct->default_pptx);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "boot_pkey            : "UH_FMT"\n", ptr_struct->boot_pkey);
+	fprintf(file, "default_boot_pkey    : "UH_FMT"\n", ptr_struct->default_boot_pkey);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nv_config_infiniband_dhcp_settings : "UH_FMT"\n", ptr_struct->nv_config_infiniband_dhcp_settings);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nv_config_infiniband_boot_settings : "UH_FMT"\n", ptr_struct->nv_config_infiniband_boot_settings);
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "nv_config_dhcp_iscsi_parameters : "UH_FMT"\n", ptr_struct->nv_config_dhcp_iscsi_parameters);
@@ -1569,6 +1626,12 @@ void tools_open_query_def_params_per_port_print(const struct tools_open_query_de
 	fprintf(file, "nv_config_boot_parameters : "UH_FMT"\n", ptr_struct->nv_config_boot_parameters);
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "client_indentifier   : "UH_FMT"\n", ptr_struct->client_indentifier);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "mac_admin_bit        : "UH_FMT"\n", ptr_struct->mac_admin_bit);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "iscsi_boot_to_target : "UH_FMT"\n", ptr_struct->iscsi_boot_to_target);
 
 	adb2c_add_indentation(file, indent_level);
@@ -1728,12 +1791,12 @@ void tools_open_phy_reg_dump(const union tools_open_phy_reg *ptr_struct, FILE* f
 
 void tools_open_mnv_cfg_pack(const union tools_open_mnv_cfg *ptr_struct, u_int8_t* ptr_buff)
 {
-	tools_open_mnvi_pack(&(ptr_struct->mnvi), ptr_buff);
+	tools_open_nvdi_pack(&(ptr_struct->nvdi), ptr_buff);
 }
 
 void tools_open_mnv_cfg_unpack(union tools_open_mnv_cfg *ptr_struct, const u_int8_t* ptr_buff)
 {
-	tools_open_mnvi_unpack(&(ptr_struct->mnvi), ptr_buff);
+	tools_open_nvdi_unpack(&(ptr_struct->nvdi), ptr_buff);
 }
 
 void tools_open_mnv_cfg_print(const union tools_open_mnv_cfg *ptr_struct, FILE* file, int indent_level){
@@ -1749,37 +1812,510 @@ void tools_open_mnv_cfg_print(const union tools_open_mnv_cfg *ptr_struct, FILE*
 	tools_open_mnva_print(&(ptr_struct->mnva), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "nvdi:\n");
-	tools_open_nvdi_print(&(ptr_struct->nvdi), file, indent_level + 1);
+	fprintf(file, "mnvi:\n");
+	tools_open_mnvi_print(&(ptr_struct->mnvi), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "mnvia:\n");
+	tools_open_mnvia_print(&(ptr_struct->mnvia), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nvqc:\n");
+	tools_open_nvqc_print(&(ptr_struct->nvqc), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nvia:\n");
+	tools_open_nvia_print(&(ptr_struct->nvia), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "nvda:\n");
 	tools_open_nvda_print(&(ptr_struct->nvda), file, indent_level + 1);
 
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "nvdia:\n");
-	tools_open_nvdia_print(&(ptr_struct->nvdia), file, indent_level + 1);
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "nvdi:\n");
+	tools_open_nvdi_print(&(ptr_struct->nvdi), file, indent_level + 1);
+
+}
+
+int tools_open_mnv_cfg_size(void){
+	 return 256;
+}
+
+void tools_open_mnv_cfg_dump(const union tools_open_mnv_cfg *ptr_struct, FILE* file) {
+	tools_open_mnv_cfg_print(ptr_struct, file, 0);
+}
+
+void tools_open_lldp_nb_capability_pack(const struct tools_open_lldp_nb_capability *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->lldp_nb_supported);
+
+	offset=48;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->max_total_lldp_tlv_len);
+
+	for (i=0; i < 16; i++) {
+	offset=adb2c_calc_array_field_address(88, 8, i, 192, 1);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->supported_lldp_tx_tlv_mask[i]);
+	}
+
+}
+
+void tools_open_lldp_nb_capability_unpack(struct tools_open_lldp_nb_capability *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=0;
+	ptr_struct->lldp_nb_supported = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=48;
+	ptr_struct->max_total_lldp_tlv_len = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+	for (i=0; i < 16; i++) {
+	offset=adb2c_calc_array_field_address(88, 8, i, 192, 1);
+	ptr_struct->supported_lldp_tx_tlv_mask[i] = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+	}
+
+}
+
+void tools_open_lldp_nb_capability_print(const struct tools_open_lldp_nb_capability *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_lldp_nb_capability ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_nb_supported    : "UH_FMT"\n", ptr_struct->lldp_nb_supported);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "max_total_lldp_tlv_len : "UH_FMT"\n", ptr_struct->max_total_lldp_tlv_len);
+
+	for (i=0; i < 16; i++) {
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "supported_lldp_tx_tlv_mask_%03d : "UH_FMT"\n", i, ptr_struct->supported_lldp_tx_tlv_mask[i]);
+	}
+
+}
+
+int tools_open_lldp_nb_capability_size(void){
+	 return 24;
+}
+
+void tools_open_lldp_nb_capability_dump(const struct tools_open_lldp_nb_capability *ptr_struct, FILE* file) {
+	tools_open_lldp_nb_capability_print(ptr_struct, file, 0);
+}
+
+void tools_open_lldp_nb_pack(const struct tools_open_lldp_nb *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=1;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->lldp_nb_rx_en);
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->lldp_nb_tx_en);
+
+	offset=84;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->lldp_msg_tx_interval);
+
+	for (i=0; i < 16; i++) {
+	offset=adb2c_calc_array_field_address(120, 8, i, 224, 1);
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->lldp_tx_tlv_mask[i]);
+	}
+
+}
+
+void tools_open_lldp_nb_unpack(struct tools_open_lldp_nb *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=1;
+	ptr_struct->lldp_nb_rx_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=0;
+	ptr_struct->lldp_nb_tx_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=84;
+	ptr_struct->lldp_msg_tx_interval = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+
+	for (i=0; i < 16; i++) {
+	offset=adb2c_calc_array_field_address(120, 8, i, 224, 1);
+	ptr_struct->lldp_tx_tlv_mask[i] = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+	}
+
+}
+
+void tools_open_lldp_nb_print(const struct tools_open_lldp_nb *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_lldp_nb ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_nb_rx_en        : "UH_FMT"\n", ptr_struct->lldp_nb_rx_en);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_nb_tx_en        : "UH_FMT"\n", ptr_struct->lldp_nb_tx_en);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_msg_tx_interval : "UH_FMT"\n", ptr_struct->lldp_msg_tx_interval);
+
+	for (i=0; i < 16; i++) {
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_tx_tlv_mask_%03d : "UH_FMT"\n", i, ptr_struct->lldp_tx_tlv_mask[i]);
+	}
+
+}
+
+int tools_open_lldp_nb_size(void){
+	 return 28;
+}
+
+void tools_open_lldp_nb_dump(const struct tools_open_lldp_nb *ptr_struct, FILE* file) {
+	tools_open_lldp_nb_print(ptr_struct, file, 0);
+}
+
+void tools_open_roce_cc_ecn_pack(const struct tools_open_roce_cc_ecn *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=1;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->clamp_tgt_rate_after_time_inc);
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->clamp_tgt_rate);
+
+	offset=47;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->rpg_time_reset);
+
+	offset=81;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 15, (u_int32_t)ptr_struct->rpg_byte_reset);
+
+	offset=123;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->rpg_threshold);
+
+	offset=129;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 31, (u_int32_t)ptr_struct->rpg_max_rate);
+
+	offset=175;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->rpg_ai_rate);
+
+	offset=207;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->rpg_hai_rate);
+
+	offset=252;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->rpg_gd);
+
+	offset=280;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->rpg_min_dec_fac);
+
+	offset=303;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->rpg_min_rate);
+
+	offset=335;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->rate_to_set_on_first_cnp);
+
+	offset=374;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 10, (u_int32_t)ptr_struct->dce_tcp_g);
+
+	offset=399;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->dce_tcp_rtt);
+
+	offset=431;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->rate_reduce_monitor_period);
+
+	offset=470;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 10, (u_int32_t)ptr_struct->initial_alpha_value);
+
+	offset=495;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 17, (u_int32_t)ptr_struct->min_time_between_cnps);
+
+	offset=541;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->cnp_dscp);
+
+	offset=530;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 6, (u_int32_t)ptr_struct->cnp_802p_prio);
+
+}
+
+void tools_open_roce_cc_ecn_unpack(struct tools_open_roce_cc_ecn *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=1;
+	ptr_struct->clamp_tgt_rate_after_time_inc = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=0;
+	ptr_struct->clamp_tgt_rate = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=47;
+	ptr_struct->rpg_time_reset = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=81;
+	ptr_struct->rpg_byte_reset = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 15);
+
+	offset=123;
+	ptr_struct->rpg_threshold = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 5);
+
+	offset=129;
+	ptr_struct->rpg_max_rate = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 31);
+
+	offset=175;
+	ptr_struct->rpg_ai_rate = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=207;
+	ptr_struct->rpg_hai_rate = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=252;
+	ptr_struct->rpg_gd = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
+
+	offset=280;
+	ptr_struct->rpg_min_dec_fac = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+	offset=303;
+	ptr_struct->rpg_min_rate = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=335;
+	ptr_struct->rate_to_set_on_first_cnp = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=374;
+	ptr_struct->dce_tcp_g = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 10);
+
+	offset=399;
+	ptr_struct->dce_tcp_rtt = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=431;
+	ptr_struct->rate_reduce_monitor_period = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=470;
+	ptr_struct->initial_alpha_value = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 10);
+
+	offset=495;
+	ptr_struct->min_time_between_cnps = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 17);
+
+	offset=541;
+	ptr_struct->cnp_dscp = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 3);
+
+	offset=530;
+	ptr_struct->cnp_802p_prio = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 6);
+
+}
+
+void tools_open_roce_cc_ecn_print(const struct tools_open_roce_cc_ecn *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_roce_cc_ecn ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "clamp_tgt_rate_after_time_inc : "UH_FMT"\n", ptr_struct->clamp_tgt_rate_after_time_inc);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "clamp_tgt_rate       : "UH_FMT"\n", ptr_struct->clamp_tgt_rate);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_time_reset       : "UH_FMT"\n", ptr_struct->rpg_time_reset);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_byte_reset       : "UH_FMT"\n", ptr_struct->rpg_byte_reset);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_threshold        : "UH_FMT"\n", ptr_struct->rpg_threshold);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_max_rate         : "UH_FMT"\n", ptr_struct->rpg_max_rate);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_ai_rate          : "UH_FMT"\n", ptr_struct->rpg_ai_rate);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_hai_rate         : "UH_FMT"\n", ptr_struct->rpg_hai_rate);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_gd               : "UH_FMT"\n", ptr_struct->rpg_gd);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_min_dec_fac      : "UH_FMT"\n", ptr_struct->rpg_min_dec_fac);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rpg_min_rate         : "UH_FMT"\n", ptr_struct->rpg_min_rate);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rate_to_set_on_first_cnp : "UH_FMT"\n", ptr_struct->rate_to_set_on_first_cnp);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "dce_tcp_g            : "UH_FMT"\n", ptr_struct->dce_tcp_g);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "dce_tcp_rtt          : "UH_FMT"\n", ptr_struct->dce_tcp_rtt);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "rate_reduce_monitor_period : "UH_FMT"\n", ptr_struct->rate_reduce_monitor_period);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "initial_alpha_value  : "UH_FMT"\n", ptr_struct->initial_alpha_value);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "min_time_between_cnps : "UH_FMT"\n", ptr_struct->min_time_between_cnps);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "cnp_dscp             : "UH_FMT"\n", ptr_struct->cnp_dscp);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "cnp_802p_prio        : "UH_FMT"\n", ptr_struct->cnp_802p_prio);
+
+}
+
+int tools_open_roce_cc_ecn_size(void){
+	 return 68;
+}
+
+void tools_open_roce_cc_ecn_dump(const struct tools_open_roce_cc_ecn *ptr_struct, FILE* file) {
+	tools_open_roce_cc_ecn_print(ptr_struct, file, 0);
+}
+
+void tools_open_roce_cc_pack(const struct tools_open_roce_cc *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=24;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->roce_cc_enable_priority);
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->roce_cc_algorithm);
+
+}
+
+void tools_open_roce_cc_unpack(struct tools_open_roce_cc *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=24;
+	ptr_struct->roce_cc_enable_priority = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+	offset=0;
+	ptr_struct->roce_cc_algorithm = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+}
+
+void tools_open_roce_cc_print(const struct tools_open_roce_cc *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_roce_cc ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "roce_cc_enable_priority : "UH_FMT"\n", ptr_struct->roce_cc_enable_priority);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "roce_cc_algorithm    : "UH_FMT"\n", ptr_struct->roce_cc_algorithm);
+
+}
+
+int tools_open_roce_cc_size(void){
+	 return 4;
+}
+
+void tools_open_roce_cc_dump(const struct tools_open_roce_cc *ptr_struct, FILE* file) {
+	tools_open_roce_cc_print(ptr_struct, file, 0);
+}
+
+void tools_open_roce_v_1_5_next_protocol_pack(const struct tools_open_roce_v_1_5_next_protocol *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=24;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->roce_over_ip_next_protocol);
+
+}
+
+void tools_open_roce_v_1_5_next_protocol_unpack(struct tools_open_roce_v_1_5_next_protocol *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=24;
+	ptr_struct->roce_over_ip_next_protocol = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
 
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "nvqc:\n");
-	tools_open_nvqc_print(&(ptr_struct->nvqc), file, indent_level + 1);
+}
 
+void tools_open_roce_v_1_5_next_protocol_print(const struct tools_open_roce_v_1_5_next_protocol *ptr_struct, FILE* file, int indent_level){
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "mnvia:\n");
-	tools_open_mnvia_print(&(ptr_struct->mnvia), file, indent_level + 1);
+	fprintf(file, "======== tools_open_roce_v_1_5_next_protocol ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "mnvi:\n");
-	tools_open_mnvi_print(&(ptr_struct->mnvi), file, indent_level + 1);
+	fprintf(file, "roce_over_ip_next_protocol : "UH_FMT"\n", ptr_struct->roce_over_ip_next_protocol);
 
 }
 
-int tools_open_mnv_cfg_size(void){
-	 return 256;
+int tools_open_roce_v_1_5_next_protocol_size(void){
+	 return 4;
 }
 
-void tools_open_mnv_cfg_dump(const union tools_open_mnv_cfg *ptr_struct, FILE* file) {
-	tools_open_mnv_cfg_print(ptr_struct, file, 0);
+void tools_open_roce_v_1_5_next_protocol_dump(const struct tools_open_roce_v_1_5_next_protocol *ptr_struct, FILE* file) {
+	tools_open_roce_v_1_5_next_protocol_print(ptr_struct, file, 0);
 }
 
 void tools_open_vpi_settings_pack(const struct tools_open_vpi_settings *ptr_struct, u_int8_t* ptr_buff){
@@ -2032,6 +2568,91 @@ void tools_open_preboot_flow_ctrl_dump(const struct tools_open_preboot_flow_ctrl
 	tools_open_preboot_flow_ctrl_print(ptr_struct, file, 0);
 }
 
+void tools_open_preboot_boot_settings_pack(const struct tools_open_preboot_boot_settings *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=20;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->boot_vlan);
+
+	offset=8;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->legacy_boot_protocol);
+
+	offset=5;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->boot_retry_count);
+
+	offset=1;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->boot_vlan_en);
+
+	offset=0;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->boot_option_rom_en);
+
+}
+
+void tools_open_preboot_boot_settings_unpack(struct tools_open_preboot_boot_settings *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=20;
+	ptr_struct->boot_vlan = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+
+	offset=8;
+	ptr_struct->legacy_boot_protocol = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+	offset=5;
+	ptr_struct->boot_retry_count = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 3);
+
+	offset=1;
+	ptr_struct->boot_vlan_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+	offset=0;
+	ptr_struct->boot_option_rom_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+}
+
+void tools_open_preboot_boot_settings_print(const struct tools_open_preboot_boot_settings *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_preboot_boot_settings ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "boot_vlan            : "UH_FMT"\n", ptr_struct->boot_vlan);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "legacy_boot_protocol : "UH_FMT"\n", ptr_struct->legacy_boot_protocol);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "boot_retry_count     : "UH_FMT"\n", ptr_struct->boot_retry_count);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "boot_vlan_en         : "UH_FMT"\n", ptr_struct->boot_vlan_en);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "boot_option_rom_en   : "UH_FMT"\n", ptr_struct->boot_option_rom_en);
+
+}
+
+int tools_open_preboot_boot_settings_size(void){
+	 return 4;
+}
+
+void tools_open_preboot_boot_settings_dump(const struct tools_open_preboot_boot_settings *ptr_struct, FILE* file) {
+	tools_open_preboot_boot_settings_print(ptr_struct, file, 0);
+}
+
 void tools_open_boot_settings_pack(const struct tools_open_boot_settings *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
@@ -2314,6 +2935,55 @@ void tools_open_iscsi_settings_dump(const struct tools_open_iscsi_settings *ptr_
 	tools_open_iscsi_settings_print(ptr_struct, file, 0);
 }
 
+void tools_open_port_boot_state_pack(const struct tools_open_port_boot_state *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=30;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->port_boot_state);
+
+}
+
+void tools_open_port_boot_state_unpack(struct tools_open_port_boot_state *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=30;
+	ptr_struct->port_boot_state = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+}
+
+void tools_open_port_boot_state_print(const struct tools_open_port_boot_state *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_port_boot_state ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "port_boot_state      : "UH_FMT"\n", ptr_struct->port_boot_state);
+
+}
+
+int tools_open_port_boot_state_size(void){
+	 return 4;
+}
+
+void tools_open_port_boot_state_dump(const struct tools_open_port_boot_state *ptr_struct, FILE* file) {
+	tools_open_port_boot_state_print(ptr_struct, file, 0);
+}
+
 void tools_open_pci_configuration_pack(const struct tools_open_pci_configuration *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
@@ -2570,10 +3240,7 @@ void tools_open_pci_capabilities_pack(const struct tools_open_pci_capabilities *
 	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->max_total_msix);
 
 	offset=128;
-	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->log_max_total_bar_h);
-
-	offset=160;
-	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->log_max_total_bar_l);
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->log_max_total_bar);
 
 }
 
@@ -2642,10 +3309,7 @@ void tools_open_pci_capabilities_unpack(struct tools_open_pci_capabilities *ptr_
 	ptr_struct->max_total_msix = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
 
 	offset=128;
-	ptr_struct->log_max_total_bar_h = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
-
-	offset=160;
-	ptr_struct->log_max_total_bar_l = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+	ptr_struct->log_max_total_bar = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
 
 }
 
@@ -2712,15 +3376,12 @@ void tools_open_pci_capabilities_print(const struct tools_open_pci_capabilities
 	fprintf(file, "max_total_msix       : "U32H_FMT"\n", ptr_struct->max_total_msix);
 
 	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "log_max_total_bar_h  : "U32H_FMT"\n", ptr_struct->log_max_total_bar_h);
-
-	adb2c_add_indentation(file, indent_level);
-	fprintf(file, "log_max_total_bar_l  : "U32H_FMT"\n", ptr_struct->log_max_total_bar_l);
+	fprintf(file, "log_max_total_bar    : "U32H_FMT"\n", ptr_struct->log_max_total_bar);
 
 }
 
 int tools_open_pci_capabilities_size(void){
-	 return 24;
+	 return 20;
 }
 
 void tools_open_pci_capabilities_dump(const struct tools_open_pci_capabilities *ptr_struct, FILE* file) {
@@ -2825,6 +3486,140 @@ void tools_open_tpt_capabilities_dump(const struct tools_open_tpt_capabilities *
 	tools_open_tpt_capabilities_print(ptr_struct, file, 0);
 }
 
+void tools_open_infiniband_dc_settings_pack(const struct tools_open_infiniband_dc_settings *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=27;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->log_dcr_hash_table_size);
+
+	offset=40;
+	adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->dcr_lifo_size);
+
+}
+
+void tools_open_infiniband_dc_settings_unpack(struct tools_open_infiniband_dc_settings *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=27;
+	ptr_struct->log_dcr_hash_table_size = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 5);
+
+	offset=40;
+	ptr_struct->dcr_lifo_size = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
+
+}
+
+void tools_open_infiniband_dc_settings_print(const struct tools_open_infiniband_dc_settings *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_infiniband_dc_settings ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "log_dcr_hash_table_size : "UH_FMT"\n", ptr_struct->log_dcr_hash_table_size);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "dcr_lifo_size        : "UH_FMT"\n", ptr_struct->dcr_lifo_size);
+
+}
+
+int tools_open_infiniband_dc_settings_size(void){
+	 return 8;
+}
+
+void tools_open_infiniband_dc_settings_dump(const struct tools_open_infiniband_dc_settings *ptr_struct, FILE* file) {
+	tools_open_infiniband_dc_settings_print(ptr_struct, file, 0);
+}
+
+void tools_open_infiniband_dc_capabilities_pack(const struct tools_open_infiniband_dc_capabilities *ptr_struct, u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=0;
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->min_log_dcr_hash_table_size);
+
+	offset=32;
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->max_log_dcr_hash_table_size);
+
+	offset=64;
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->min_dcr_lifo_size);
+
+	offset=96;
+	adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->max_dcr_lifo_size);
+
+}
+
+void tools_open_infiniband_dc_capabilities_unpack(struct tools_open_infiniband_dc_capabilities *ptr_struct, const u_int8_t* ptr_buff){
+	u_int32_t offset;
+	int i=0;
+	u_int8_t val=0;
+	(void)val;
+	(void)offset;
+	(void)i;
+	(void)ptr_struct;
+	(void)ptr_buff;
+
+	offset=0;
+	ptr_struct->min_log_dcr_hash_table_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+	offset=32;
+	ptr_struct->max_log_dcr_hash_table_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+	offset=64;
+	ptr_struct->min_dcr_lifo_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+	offset=96;
+	ptr_struct->max_dcr_lifo_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void tools_open_infiniband_dc_capabilities_print(const struct tools_open_infiniband_dc_capabilities *ptr_struct, FILE* file, int indent_level){
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "======== tools_open_infiniband_dc_capabilities ========\n");
+	int i=0;
+	(void)i;(void)ptr_struct;
+	(void)file;
+	(void)indent_level;
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "min_log_dcr_hash_table_size : "U32H_FMT"\n", ptr_struct->min_log_dcr_hash_table_size);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "max_log_dcr_hash_table_size : "U32H_FMT"\n", ptr_struct->max_log_dcr_hash_table_size);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "min_dcr_lifo_size    : "U32H_FMT"\n", ptr_struct->min_dcr_lifo_size);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "max_dcr_lifo_size    : "U32H_FMT"\n", ptr_struct->max_dcr_lifo_size);
+
+}
+
+int tools_open_infiniband_dc_capabilities_size(void){
+	 return 16;
+}
+
+void tools_open_infiniband_dc_capabilities_dump(const struct tools_open_infiniband_dc_capabilities *ptr_struct, FILE* file) {
+	tools_open_infiniband_dc_capabilities_print(ptr_struct, file, 0);
+}
+
 void tools_open_wol_pack(const struct tools_open_wol *ptr_struct, u_int8_t* ptr_buff){
 	u_int32_t offset;
 	int i=0;
@@ -3002,12 +3797,12 @@ void tools_open_access_registers_dump(const union tools_open_access_registers *p
 
 void tools_open_nv_cfg_pack(const union tools_open_nv_cfg *ptr_struct, u_int8_t* ptr_buff)
 {
-	tools_open_vpi_settings_pack(&(ptr_struct->vpi_settings), ptr_buff);
+	tools_open_lldp_nb_capability_pack(&(ptr_struct->lldp_nb_capability), ptr_buff);
 }
 
 void tools_open_nv_cfg_unpack(union tools_open_nv_cfg *ptr_struct, const u_int8_t* ptr_buff)
 {
-	tools_open_vpi_settings_unpack(&(ptr_struct->vpi_settings), ptr_buff);
+	tools_open_lldp_nb_capability_unpack(&(ptr_struct->lldp_nb_capability), ptr_buff);
 }
 
 void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* file, int indent_level){
@@ -3023,6 +3818,14 @@ void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* fi
 	tools_open_wol_print(&(ptr_struct->wol), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "infiniband_dc_capabilities:\n");
+	tools_open_infiniband_dc_capabilities_print(&(ptr_struct->infiniband_dc_capabilities), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "infiniband_dc_settings:\n");
+	tools_open_infiniband_dc_settings_print(&(ptr_struct->infiniband_dc_settings), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "tpt_capabilities:\n");
 	tools_open_tpt_capabilities_print(&(ptr_struct->tpt_capabilities), file, indent_level + 1);
 
@@ -3039,6 +3842,10 @@ void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* fi
 	tools_open_pci_configuration_print(&(ptr_struct->pci_configuration), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "port_boot_state:\n");
+	tools_open_port_boot_state_print(&(ptr_struct->port_boot_state), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "iscsi_settings:\n");
 	tools_open_iscsi_settings_print(&(ptr_struct->iscsi_settings), file, indent_level + 1);
 
@@ -3051,6 +3858,10 @@ void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* fi
 	tools_open_boot_settings_print(&(ptr_struct->boot_settings), file, indent_level + 1);
 
 	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "preboot_boot_settings:\n");
+	tools_open_preboot_boot_settings_print(&(ptr_struct->preboot_boot_settings), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
 	fprintf(file, "preboot_flow_ctrl:\n");
 	tools_open_preboot_flow_ctrl_print(&(ptr_struct->preboot_flow_ctrl), file, indent_level + 1);
 
@@ -3066,6 +3877,26 @@ void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* fi
 	fprintf(file, "vpi_settings:\n");
 	tools_open_vpi_settings_print(&(ptr_struct->vpi_settings), file, indent_level + 1);
 
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "roce_v_1_5_next_protocol:\n");
+	tools_open_roce_v_1_5_next_protocol_print(&(ptr_struct->roce_v_1_5_next_protocol), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "roce_cc:\n");
+	tools_open_roce_cc_print(&(ptr_struct->roce_cc), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "roce_cc_ecn:\n");
+	tools_open_roce_cc_ecn_print(&(ptr_struct->roce_cc_ecn), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_nb:\n");
+	tools_open_lldp_nb_print(&(ptr_struct->lldp_nb), file, indent_level + 1);
+
+	adb2c_add_indentation(file, indent_level);
+	fprintf(file, "lldp_nb_capability:\n");
+	tools_open_lldp_nb_capability_print(&(ptr_struct->lldp_nb_capability), file, indent_level + 1);
+
 }
 
 int tools_open_nv_cfg_size(void){
diff --git a/tools_layouts/tools_open_layouts.h b/tools_layouts/tools_open_layouts.h
index 783bc55..1d7afd7 100644
--- a/tools_layouts/tools_open_layouts.h
+++ b/tools_layouts/tools_open_layouts.h
@@ -29,10 +29,9 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
- 
 
 /***
- *** This file was generated at "2015-06-16 07:00:30"
+ *** This file was generated at "2015-08-31 18:48:47"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
  ***/
@@ -55,32 +54,29 @@ struct tools_open_tlv_type_dw {
 
 /* Description -   */
 /* Size in bytes - 4 */
-struct tools_open_eswitch_type {
+struct tools_open_per_port_type {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
 	/* 0.0 - 0.15 */
 	 u_int16_t param_idx;
 	/* Description -  */
-	/* 0.16 - 0.17 */
+	/* 0.16 - 0.23 */
 	 u_int8_t port;
 	/* Description -  */
-	/* 0.18 - 0.23 */
-	 u_int8_t host;
-	/* Description -  */
 	/* 0.24 - 4.31 */
 	 u_int8_t param_class;
 };
 
 /* Description -   */
 /* Size in bytes - 4 */
-struct tools_open_per_host_type {
+struct tools_open_bmc_type {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 0.9 */
+	/* 0.0 - 0.12 */
 	 u_int16_t param_idx;
 	/* Description -  */
-	/* 0.10 - 0.17 */
-	 u_int8_t function;
+	/* 0.13 - 0.17 */
+	 u_int8_t channel;
 	/* Description -  */
 	/* 0.18 - 0.23 */
 	 u_int8_t host;
@@ -91,14 +87,14 @@ struct tools_open_per_host_type {
 
 /* Description -   */
 /* Size in bytes - 4 */
-struct tools_open_bmc_type {
+struct tools_open_per_host_type {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 0.12 */
+	/* 0.0 - 0.9 */
 	 u_int16_t param_idx;
 	/* Description -  */
-	/* 0.13 - 0.17 */
-	 u_int8_t channel;
+	/* 0.10 - 0.17 */
+	 u_int8_t function;
 	/* Description -  */
 	/* 0.18 - 0.23 */
 	 u_int8_t host;
@@ -109,15 +105,18 @@ struct tools_open_bmc_type {
 
 /* Description -   */
 /* Size in bytes - 4 */
-struct tools_open_per_port_type {
+struct tools_open_eswitch_type {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
 	/* 0.0 - 0.15 */
 	 u_int16_t param_idx;
 	/* Description -  */
-	/* 0.16 - 0.23 */
+	/* 0.16 - 0.17 */
 	 u_int8_t port;
 	/* Description -  */
+	/* 0.18 - 0.23 */
+	 u_int8_t host;
+	/* Description -  */
 	/* 0.24 - 4.31 */
 	 u_int8_t param_class;
 };
@@ -143,16 +142,16 @@ union tools_open_tlv_type {
 	 struct tools_open_global_type global;
 	/* Description -  */
 	/* 0.0 - 4.31 */
-	 struct tools_open_per_port_type per_port;
+	 struct tools_open_eswitch_type eswitch;
 	/* Description -  */
 	/* 0.0 - 4.31 */
-	 struct tools_open_bmc_type bmc;
+	 struct tools_open_per_host_type per_host;
 	/* Description -  */
 	/* 0.0 - 4.31 */
-	 struct tools_open_per_host_type per_host;
+	 struct tools_open_bmc_type bmc;
 	/* Description -  */
 	/* 0.0 - 4.31 */
-	 struct tools_open_eswitch_type eswitch;
+	 struct tools_open_per_port_type per_port;
 	/* Description -  */
 	/* 0.0 - 4.31 */
 	 struct tools_open_tlv_type_dw tlv_type_dw;
@@ -173,31 +172,6 @@ This field is only valid for Address + Read and Address + Write operations, prov
 };
 
 /* Description -   */
-/* Size in bytes - 8 */
-struct tools_open_nv_hdr {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-	/* Description - Tlv type */
-	/* 0.0 - 0.15 */
-	 u_int16_t type;
-	/* Description - size of tlv data in dwords (not including header) */
-	/* 0.18 - 0.29 */
-	 u_int16_t length;
-/*---------------- DWORD[1] (Offset 0x4) ----------------*/
-	/* Description - Type Modifier. E.G.: Port number when the config is port related */
-	/* 4.16 - 4.23 */
-	 u_int8_t type_mod;
-	/* Description - Shadow: i.e if set the Fw will not update the tlv immediately but wait for a command */
-	/* 4.24 - 4.24 */
-	 u_int8_t shadow;
-	/* Description - Pad count: for non dword alligned tlvs */
-	/* 4.25 - 4.26 */
-	 u_int8_t pad_cnt;
-	/* Description - Data version can be set by caller or left as 0. */
-	/* 4.28 - 8.31 */
-	 u_int8_t version;
-};
-
-/* Description -   */
 /* Size in bytes - 12 */
 struct tools_open_nv_hdr_fifth_gen {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
@@ -234,6 +208,31 @@ struct tools_open_nv_hdr_fifth_gen {
 };
 
 /* Description -   */
+/* Size in bytes - 8 */
+struct tools_open_nv_hdr {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Tlv type */
+	/* 0.0 - 0.15 */
+	 u_int16_t type;
+	/* Description - size of tlv data in dwords (not including header) */
+	/* 0.18 - 0.29 */
+	 u_int16_t length;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+	/* Description - Type Modifier. E.G.: Port number when the config is port related */
+	/* 4.16 - 4.23 */
+	 u_int8_t type_mod;
+	/* Description - Shadow: i.e if set the Fw will not update the tlv immediately but wait for a command */
+	/* 4.24 - 4.24 */
+	 u_int8_t shadow;
+	/* Description - Pad count: for non dword alligned tlvs */
+	/* 4.25 - 4.26 */
+	 u_int8_t pad_cnt;
+	/* Description - Data version can be set by caller or left as 0. */
+	/* 4.28 - 8.31 */
+	 u_int8_t version;
+};
+
+/* Description -   */
 /* Size in bytes - 264 */
 struct tools_open_pmdio {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
@@ -322,21 +321,41 @@ Used for external Phy FW burning. When set, the MDIO I/F is used for an external
 };
 
 /* Description -   */
-/* Size in bytes - 8 */
-struct tools_open_mnvi {
+/* Size in bytes - 12 */
+struct tools_open_nvdi {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 8.31 */
-	 struct tools_open_nv_hdr nv_hdr;
+	/* 0.0 - 12.31 */
+	 struct tools_open_nv_hdr_fifth_gen nv_hdr;
 };
 
 /* Description -   */
-/* Size in bytes - 8 */
-struct tools_open_mnvia {
+/* Size in bytes - 256 */
+struct tools_open_nvda {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 8.31 */
-	 struct tools_open_nv_hdr nv_hdr;
+	/* 0.0 - 12.31 */
+	 struct tools_open_nv_hdr_fifth_gen nv_hdr;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+	/* Description -  */
+	/* 12.24 - 140.23 */
+	 u_int8_t data[128];
+};
+
+/* Description -   */
+/* Size in bytes - 20 */
+struct tools_open_nvia {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description -  */
+	/* 0.0 - 12.31 */
+	 struct tools_open_nv_hdr_fifth_gen nv_hdr;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+	/* Description - Information targeted for invalidation
+0 - All NVRAM parameters
+1 - NVLOG
+ */
+	/* 12.0 - 12.2 */
+	 u_int8_t target;
 };
 
 /* Description -   */
@@ -359,34 +378,21 @@ struct tools_open_nvqc {
 };
 
 /* Description -   */
-/* Size in bytes - 12 */
-struct tools_open_nvdia {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-	/* Description -  */
-	/* 0.0 - 12.31 */
-	 struct tools_open_nv_hdr_fifth_gen nv_hdr;
-};
-
-/* Description -   */
-/* Size in bytes - 256 */
-struct tools_open_nvda {
+/* Size in bytes - 8 */
+struct tools_open_mnvia {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 12.31 */
-	 struct tools_open_nv_hdr_fifth_gen nv_hdr;
-/*---------------- DWORD[3] (Offset 0xc) ----------------*/
-	/* Description -  */
-	/* 12.24 - 140.23 */
-	 u_int8_t data[128];
+	/* 0.0 - 8.31 */
+	 struct tools_open_nv_hdr nv_hdr;
 };
 
 /* Description -   */
-/* Size in bytes - 12 */
-struct tools_open_nvdi {
+/* Size in bytes - 8 */
+struct tools_open_mnvi {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description -  */
-	/* 0.0 - 12.31 */
-	 struct tools_open_nv_hdr_fifth_gen nv_hdr;
+	/* 0.0 - 8.31 */
+	 struct tools_open_nv_hdr nv_hdr;
 };
 
 /* Description -   */
@@ -406,41 +412,53 @@ struct tools_open_mnva {
 /* Size in bytes - 28 */
 struct tools_open_query_def_params_per_port {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Firmware supports NV config settings 0x12 on the given port. */
+	/* 0.18 - 0.18 */
+	 u_int8_t nv_config_vpi;
+	/* Description - Firmware supports NV config settings 0x10 on the given port. */
+	/* 0.19 - 0.19 */
+	 u_int8_t nv_config_wol;
 	/* Description -  */
 	/* 0.24 - 4.31 */
 	 u_int8_t fw_default_config_payload_version;
 /*---------------- DWORD[1] (Offset 0x4) ----------------*/
 	/* Description -  */
 	/* 4.0 - 4.11 */
-	 u_int16_t boot_vlan;
+	 u_int16_t default_boot_vlan;
 	/* Description -  */
 	/* 4.16 - 4.19 */
-	 u_int8_t boot_protocol;
+	 u_int8_t default_boot_protocol;
 	/* Description -  */
 	/* 4.20 - 4.23 */
-	 u_int8_t boot_retry_cnt;
+	 u_int8_t default_boot_retry_cnt;
 	/* Description -  */
 	/* 4.25 - 4.26 */
-	 u_int8_t network_link_type;
+	 u_int8_t default_network_link_type;
 	/* Description -  */
 	/* 4.27 - 4.27 */
-	 u_int8_t en_wol_magic;
+	 u_int8_t default_en_wol_magic;
 	/* Description -  */
 	/* 4.28 - 4.28 */
-	 u_int8_t boot_vlan_en;
+	 u_int8_t default_boot_vlan_en;
 	/* Description -  */
 	/* 4.29 - 4.29 */
-	 u_int8_t boot_option_rom_en;
+	 u_int8_t default_boot_option_rom_en;
 	/* Description -  */
 	/* 4.30 - 4.30 */
-	 u_int8_t pprx;
+	 u_int8_t default_pprx;
 	/* Description -  */
 	/* 4.31 - 8.31 */
-	 u_int8_t pptx;
+	 u_int8_t default_pptx;
 /*---------------- DWORD[2] (Offset 0x8) ----------------*/
 	/* Description -  */
 	/* 8.0 - 8.15 */
-	 u_int16_t boot_pkey;
+	 u_int16_t default_boot_pkey;
+	/* Description - Legacy option ROM supports NV config setting 0x2023. */
+	/* 8.27 - 8.27 */
+	 u_int8_t nv_config_infiniband_dhcp_settings;
+	/* Description - Legacy option ROM supports NV config setting 0x2022. */
+	/* 8.28 - 8.28 */
+	 u_int8_t nv_config_infiniband_boot_settings;
 	/* Description -  */
 	/* 8.29 - 8.29 */
 	 u_int8_t nv_config_dhcp_iscsi_parameters;
@@ -451,6 +469,12 @@ struct tools_open_query_def_params_per_port {
 	/* 8.31 - 12.31 */
 	 u_int8_t nv_config_boot_parameters;
 /*---------------- DWORD[3] (Offset 0xc) ----------------*/
+	/* Description - Default value of the client_identifier field in the InfiniBand DHCP settings TLV. */
+	/* 12.18 - 12.19 */
+	 u_int8_t client_indentifier;
+	/* Description - Default value of the mac_admin_bit in the InfiniBand DHCP settings TLV. */
+	/* 12.20 - 12.21 */
+	 u_int8_t mac_admin_bit;
 	/* Description -  */
 	/* 12.22 - 12.23 */
 	 u_int8_t iscsi_boot_to_target;
@@ -523,23 +547,225 @@ union tools_open_mnv_cfg {
 	/* 0.0 - 256.31 */
 	 struct tools_open_mnva mnva;
 	/* Description -  */
-	/* 0.0 - 12.31 */
-	 struct tools_open_nvdi nvdi;
-	/* Description -  */
-	/* 0.0 - 256.31 */
-	 struct tools_open_nvda nvda;
-	/* Description -  */
-	/* 0.0 - 12.31 */
-	 struct tools_open_nvdia nvdia;
-	/* Description -  */
 	/* 0.0 - 8.31 */
-	 struct tools_open_nvqc nvqc;
+	 struct tools_open_mnvi mnvi;
 	/* Description -  */
 	/* 0.0 - 8.31 */
 	 struct tools_open_mnvia mnvia;
 	/* Description -  */
 	/* 0.0 - 8.31 */
-	 struct tools_open_mnvi mnvi;
+	 struct tools_open_nvqc nvqc;
+	/* Description -  */
+	/* 0.0 - 20.31 */
+	 struct tools_open_nvia nvia;
+	/* Description -  */
+	/* 0.0 - 256.31 */
+	 struct tools_open_nvda nvda;
+	/* Description -  */
+	/* 0.0 - 12.31 */
+	 struct tools_open_nvdi nvdi;
+};
+
+/* Description -   */
+/* Size in bytes - 24 */
+struct tools_open_lldp_nb_capability {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Indicate if LLDP-NB is supported by this firmware
+Default: Enabled
+ */
+	/* 0.31 - 4.31 */
+	 u_int8_t lldp_nb_supported;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+	/* Description - The overall (scratchpad) memory size for holding LLDP-TLVs. The memory is first filled with TLVs that the LLDP need to send (TX) the rest of the area is used for incoming TLVs
+
+Default: 3000 octets 
+ */
+	/* 4.0 - 4.15 */
+	 u_int16_t max_total_lldp_tlv_len;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+	/* Description - A bitmask saying which of the LLDP-TLV the client is capable of sending
+TBD: we think that this is redundant
+ */
+	/* 8.24 - 24.23 */
+	 u_int8_t supported_lldp_tx_tlv_mask[16];
+};
+
+/* Description -   */
+/* Size in bytes - 28 */
+struct tools_open_lldp_nb {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Enable processing of incoming LLDB NB BPDUs
+Default: Disable
+ */
+	/* 0.30 - 0.30 */
+	 u_int8_t lldp_nb_rx_en;
+	/* Description - Enable transmission of LLDP Next Bridge BPDUs
+Default: Enabled
+ */
+	/* 0.31 - 4.31 */
+	 u_int8_t lldp_nb_tx_en;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+	/* Description - Interval for sending LLDP NB PDUs in seconds
+Default: 30
+ */
+	/* 8.0 - 8.11 */
+	 u_int16_t lldp_msg_tx_interval;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+	/* Description - A bitmask saying which of the LLDP-TLV to send
+Default: b1111  (only TLVs 0..3) – according to the standard these are mandatory TLVs that must always be enabled
+
+An enabled TLV will not be send if a corresponding TLV is not defined
+ */
+	/* 12.24 - 28.23 */
+	 u_int8_t lldp_tx_tlv_mask[16];
+};
+
+/* Description -   */
+/* Size in bytes - 68 */
+struct tools_open_roce_cc_ecn {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Default: True
+When receiving an CNP, the target rate should be updated if the transmission rate was increased due to the timer, and not only due to the byte counter
+ */
+	/* 0.30 - 0.30 */
+	 u_int8_t clamp_tgt_rate_after_time_inc;
+	/* Description - default - False
+ */
+	/* 0.31 - 4.31 */
+	 u_int8_t clamp_tgt_rate;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+	/* Description - Time between rate increases if no CNPs are received. Given in u-seconds.
+Default: 2
+ */
+	/* 4.0 - 4.16 */
+	 u_int32_t rpg_time_reset;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+	/* Description - Transmitted data between rate increases if no CNPs are received. Given in Bytes.
+  0 == disabled  TBD: update the PRM
+Default: 150
+ */
+	/* 8.0 - 8.14 */
+	 u_int16_t rpg_byte_reset;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+	/* Description - The number of times rpByteStage or rpTimeStage can count before the RP rate control state machine advances states.
+Default: 5
+ */
+	/* 12.0 - 12.4 */
+	 u_int8_t rpg_threshold;
+/*---------------- DWORD[4] (Offset 0x10) ----------------*/
+	/* Description - The maximum rate, in Mbits per second, at which an RP can transmit. Once this limit is reached, the RP rate limited is released and the flow is not rate limited any more.
+Default: 0 (Full port speed) – TBD update PRM
+ */
+	/* 16.0 - 16.30 */
+	 u_int32_t rpg_max_rate;
+/*---------------- DWORD[5] (Offset 0x14) ----------------*/
+	/* Description - The rate, in Mbits per second, used to increase rpTargetRate in the RPR_ACTIVE_INCREASE.
+Default:  10
+ */
+	/* 20.0 - 20.16 */
+	 u_int32_t rpg_ai_rate;
+/*---------------- DWORD[6] (Offset 0x18) ----------------*/
+	/* Description - The rate, in Mbits per second, used to increase rpTargetRate in the RPR_HYPER_INCREASE state
+Default: 50
+ */
+	/* 24.0 - 24.16 */
+	 u_int32_t rpg_hai_rate;
+/*---------------- DWORD[7] (Offset 0x1c) ----------------*/
+	/* Description - -  If a CNP is received, the flow rate is reduced at the beginning of the next rate_reduce_monitor_period interval to (1-Alpha/Gd)*CurrentRate. rpg_gd is given as log2(Gd), where Gd may only be powers of 2.
+Default: 7 
+ */
+	/* 28.0 - 28.3 */
+	 u_int8_t rpg_gd;
+/*---------------- DWORD[8] (Offset 0x20) ----------------*/
+	/* Description - The minimum factor by which the current transmit rate can be changed when processing a CNP. Value is given as a percentage (1-100).
+Default: 50
+ */
+	/* 32.0 - 32.7 */
+	 u_int8_t rpg_min_dec_fac;
+/*---------------- DWORD[9] (Offset 0x24) ----------------*/
+	/* Description - The minimum value, in Mb per second, for rate to limit.
+Default: 2000
+ */
+	/* 36.0 - 36.16 */
+	 u_int32_t rpg_min_rate;
+/*---------------- DWORD[10] (Offset 0x28) ----------------*/
+	/* Description - The rate that is set for the flow when a rate limiter is allocated to it upon first CNP received, in Mbps
+Default: 0 Port speed (TBD update PRM)
+ */
+	/* 40.0 - 40.16 */
+	 u_int32_t rate_to_set_on_first_cnp;
+/*---------------- DWORD[11] (Offset 0x2c) ----------------*/
+	/* Description - Used to update the congestion estimator (alpha) once every dce_tcp_rtt microseconds, according to the equation:
+Alpha = (cnp_received * dceTcpG) + (1 - dceTcpG) * alpha .
+dceTcpG is divided by 2^10.
+cnp_received is set to one if a CNP was received for this flow during period since the previous update and the current update
+Default: 64
+ */
+	/* 44.0 - 44.9 */
+	 u_int16_t dce_tcp_g;
+/*---------------- DWORD[12] (Offset 0x30) ----------------*/
+	/* Description - The time between updates of the alpha value, in microseconds.
+Default: 2
+ */
+	/* 48.0 - 48.16 */
+	 u_int32_t dce_tcp_rtt;
+/*---------------- DWORD[13] (Offset 0x34) ----------------*/
+	/* Description - The minimum time between 2 consecutive rate reductions for a single flow. Rate reduction will occur only if a CNP is received during the relevant time interval.
+Default: 2
+ */
+	/* 52.0 - 52.16 */
+	 u_int32_t rate_reduce_monitor_period;
+/*---------------- DWORD[14] (Offset 0x38) ----------------*/
+	/* Description - The initial value of alpha to use when receiving the first CNP for a flow. Expressed in a fixed point fraction of 2^10.
+Default: TBD
+ */
+	/* 56.0 - 56.9 */
+	 u_int16_t initial_alpha_value;
+/*---------------- DWORD[15] (Offset 0x3c) ----------------*/
+	/* Description - Minimum time between sending cnps from the port, in microseconds.
+Default: 0 
+ */
+	/* 60.0 - 60.16 */
+	 u_int32_t min_time_between_cnps;
+/*---------------- DWORD[16] (Offset 0x40) ----------------*/
+	/* Description - The DiffServ Code Point of the generated CNP for this port
+Default: 0
+ */
+	/* 64.0 - 64.2 */
+	 u_int8_t cnp_dscp;
+	/* Description - The 802.1p priority value of the generated CNP for this port
+Default: 7
+ */
+	/* 64.8 - 64.13 */
+	 u_int8_t cnp_802p_prio;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_roce_cc {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Per priority enable disable (0..7)
+Default: False
+ */
+	/* 0.0 - 0.7 */
+	 u_int8_t roce_cc_enable_priority;
+	/* Description - 0 = ECN
+1 = QCN
+ */
+	/* 0.31 - 4.31 */
+	 u_int8_t roce_cc_algorithm;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_roce_v_1_5_next_protocol {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - the next protocol value set in the IPv4/IPv6
+packets for RoCE v1.5
+default = 0xfe
+ */
+	/* 0.0 - 0.7 */
+	 u_int8_t roce_over_ip_next_protocol;
 };
 
 /* Description -   */
@@ -620,6 +846,37 @@ PFC and global pauses are mutually exclusive.
 
 /* Description -   */
 /* Size in bytes - 4 */
+struct tools_open_preboot_boot_settings {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - VLAN ID for network boot. */
+	/* 0.0 - 0.11 */
+	 u_int16_t boot_vlan;
+	/* Description - 0  None disable legacy boot.
+1  PXE (DHCP/TFTP boot).
+2  iSCSI
+
+3  PXE + iSCSI
+4-255  Reserved
+ */
+	/* 0.16 - 0.23 */
+	 u_int8_t legacy_boot_protocol;
+	/* Description - Number of retries to attempt in case of boot failure.
+7 indicate indefinite retries.
+ */
+	/* 0.24 - 0.26 */
+	 u_int8_t boot_retry_count;
+	/* Description - 1 Enable VLAN mode for network boot */
+	/* 0.30 - 0.30 */
+	 u_int8_t boot_vlan_en;
+	/* Description - 0 disable boot option ROM: disables installation of the UNDI/16 driver. The option ROM is still required to expose CLP, UEFI and so on.
+1 enable boot option ROM
+ */
+	/* 0.31 - 4.31 */
+	 u_int8_t boot_option_rom_en;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
 struct tools_open_boot_settings {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description - VLAN ID for network boot. */
@@ -652,7 +909,7 @@ struct tools_open_boot_settings {
 /* Size in bytes - 4 */
 struct tools_open_infiniband_boot_settings {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
-	/* Description - P_Key to be used by PXE boot. */
+	/* Description - P_key to be used by PXE boot. */
 	/* 0.0 - 0.15 */
 	 u_int16_t boot_pkey;
 };
@@ -707,6 +964,19 @@ struct tools_open_iscsi_settings {
 };
 
 /* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_port_boot_state {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - 0 Normal operation
+1 SFP power off
+2 SERDES power off
+3 admin linkDown
+ */
+	/* 0.0 - 0.1 */
+	 u_int8_t port_boot_state;
+};
+
+/* Description -   */
 /* Size in bytes - 12 */
 struct tools_open_pci_configuration {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
@@ -768,7 +1038,7 @@ struct tools_open_pci_configuration {
 };
 
 /* Description -   */
-/* Size in bytes - 24 */
+/* Size in bytes - 20 */
 struct tools_open_pci_capabilities {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description - 1 when max_pf_uar_bar_size field is configurable and the log_max_pf_uar_bar_size field is valid */
@@ -831,11 +1101,7 @@ struct tools_open_pci_capabilities {
 /*---------------- DWORD[4] (Offset 0x10) ----------------*/
 	/* Description - Log 2 of the maximum total of the MMIO space for all PFs and VFs combined */
 	/* 16.0 - 20.31 */
-	 u_int32_t log_max_total_bar_h;
-/*---------------- DWORD[5] (Offset 0x14) ----------------*/
-	/* Description - Log 2 of the maximum total of the MMIO space for all PFs and VFs combined */
-	/* 20.0 - 24.31 */
-	 u_int32_t log_max_total_bar_l;
+	 u_int32_t log_max_total_bar;
 };
 
 /* Description -   */
@@ -864,6 +1130,40 @@ struct tools_open_tpt_capabilities {
 
 /* Description -   */
 /* Size in bytes - 8 */
+struct tools_open_infiniband_dc_settings {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description - Hash table size minus one */
+	/* 0.0 - 0.4 */
+	 u_int8_t log_dcr_hash_table_size;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+	/* Description - The amount of total DCRs available to join linked-lists after hash DCRs. This is a dynamic pool of DCRs that can be used to connect all incoming connections. */
+	/* 4.0 - 4.23 */
+	 u_int32_t dcr_lifo_size;
+};
+
+/* Description -   */
+/* Size in bytes - 16 */
+struct tools_open_infiniband_dc_capabilities {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+	/* Description -  */
+	/* 0.0 - 4.31 */
+	 u_int32_t min_log_dcr_hash_table_size;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+	/* Description -  */
+	/* 4.0 - 8.31 */
+	 u_int32_t max_log_dcr_hash_table_size;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+	/* Description -  */
+	/* 8.0 - 12.31 */
+	 u_int32_t min_dcr_lifo_size;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+	/* Description -  */
+	/* 12.0 - 16.31 */
+	 u_int32_t max_dcr_lifo_size;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
 struct tools_open_wol {
 /*---------------- DWORD[0] (Offset 0x0) ----------------*/
 	/* Description - Enable Wake on secure on password magic packet */
@@ -921,18 +1221,27 @@ union tools_open_nv_cfg {
 	/* 0.0 - 8.31 */
 	 struct tools_open_wol wol;
 	/* Description -  */
+	/* 0.0 - 16.31 */
+	 struct tools_open_infiniband_dc_capabilities infiniband_dc_capabilities;
+	/* Description -  */
+	/* 0.0 - 8.31 */
+	 struct tools_open_infiniband_dc_settings infiniband_dc_settings;
+	/* Description -  */
 	/* 0.0 - 4.31 */
 	 struct tools_open_tpt_capabilities tpt_capabilities;
 	/* Description -  */
 	/* 0.0 - 4.31 */
 	 struct tools_open_tpt_configuration tpt_configuration;
 	/* Description -  */
-	/* 0.0 - 24.31 */
+	/* 0.0 - 20.31 */
 	 struct tools_open_pci_capabilities pci_capabilities;
 	/* Description -  */
 	/* 0.0 - 12.31 */
 	 struct tools_open_pci_configuration pci_configuration;
 	/* Description -  */
+	/* 0.0 - 4.31 */
+	 struct tools_open_port_boot_state port_boot_state;
+	/* Description -  */
 	/* 0.0 - 12.31 */
 	 struct tools_open_iscsi_settings iscsi_settings;
 	/* Description -  */
@@ -943,6 +1252,9 @@ union tools_open_nv_cfg {
 	 struct tools_open_boot_settings boot_settings;
 	/* Description -  */
 	/* 0.0 - 4.31 */
+	 struct tools_open_preboot_boot_settings preboot_boot_settings;
+	/* Description -  */
+	/* 0.0 - 4.31 */
 	 struct tools_open_preboot_flow_ctrl preboot_flow_ctrl;
 	/* Description -  */
 	/* 0.0 - 4.31 */
@@ -953,6 +1265,21 @@ union tools_open_nv_cfg {
 	/* Description -  */
 	/* 0.0 - 4.31 */
 	 struct tools_open_vpi_settings vpi_settings;
+	/* Description -  */
+	/* 0.0 - 4.31 */
+	 struct tools_open_roce_v_1_5_next_protocol roce_v_1_5_next_protocol;
+	/* Description -  */
+	/* 0.0 - 4.31 */
+	 struct tools_open_roce_cc roce_cc;
+	/* Description -  */
+	/* 0.0 - 68.31 */
+	 struct tools_open_roce_cc_ecn roce_cc_ecn;
+	/* Description -  */
+	/* 0.0 - 28.31 */
+	 struct tools_open_lldp_nb lldp_nb;
+	/* Description -  */
+	/* 0.0 - 24.31 */
+	 struct tools_open_lldp_nb_capability lldp_nb_capability;
 };
 
 /* Description -   */
@@ -992,27 +1319,6 @@ void tools_open_tlv_type_dw_print(const struct tools_open_tlv_type_dw *ptr_struc
 int tools_open_tlv_type_dw_size(void);
 #define TOOLS_OPEN_TLV_TYPE_DW_SIZE    (0x4)
 void tools_open_tlv_type_dw_dump(const struct tools_open_tlv_type_dw *ptr_struct, FILE* file);
-/* eswitch_type */
-void tools_open_eswitch_type_pack(const struct tools_open_eswitch_type *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_eswitch_type_unpack(struct tools_open_eswitch_type *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_eswitch_type_print(const struct tools_open_eswitch_type *ptr_struct, FILE* file, int indent_level);
-int tools_open_eswitch_type_size(void);
-#define TOOLS_OPEN_ESWITCH_TYPE_SIZE    (0x4)
-void tools_open_eswitch_type_dump(const struct tools_open_eswitch_type *ptr_struct, FILE* file);
-/* per_host_type */
-void tools_open_per_host_type_pack(const struct tools_open_per_host_type *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_per_host_type_unpack(struct tools_open_per_host_type *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_per_host_type_print(const struct tools_open_per_host_type *ptr_struct, FILE* file, int indent_level);
-int tools_open_per_host_type_size(void);
-#define TOOLS_OPEN_PER_HOST_TYPE_SIZE    (0x4)
-void tools_open_per_host_type_dump(const struct tools_open_per_host_type *ptr_struct, FILE* file);
-/* bmc_type */
-void tools_open_bmc_type_pack(const struct tools_open_bmc_type *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_bmc_type_unpack(struct tools_open_bmc_type *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_bmc_type_print(const struct tools_open_bmc_type *ptr_struct, FILE* file, int indent_level);
-int tools_open_bmc_type_size(void);
-#define TOOLS_OPEN_BMC_TYPE_SIZE    (0x4)
-void tools_open_bmc_type_dump(const struct tools_open_bmc_type *ptr_struct, FILE* file);
 /* per_port_type */
 void tools_open_per_port_type_pack(const struct tools_open_per_port_type *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_per_port_type_unpack(struct tools_open_per_port_type *ptr_struct, const u_int8_t* ptr_buff);
@@ -1020,6 +1326,27 @@ void tools_open_per_port_type_print(const struct tools_open_per_port_type *ptr_s
 int tools_open_per_port_type_size(void);
 #define TOOLS_OPEN_PER_PORT_TYPE_SIZE    (0x4)
 void tools_open_per_port_type_dump(const struct tools_open_per_port_type *ptr_struct, FILE* file);
+/* bmc_type */
+void tools_open_bmc_type_pack(const struct tools_open_bmc_type *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_bmc_type_unpack(struct tools_open_bmc_type *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_bmc_type_print(const struct tools_open_bmc_type *ptr_struct, FILE* file, int indent_level);
+int tools_open_bmc_type_size(void);
+#define TOOLS_OPEN_BMC_TYPE_SIZE    (0x4)
+void tools_open_bmc_type_dump(const struct tools_open_bmc_type *ptr_struct, FILE* file);
+/* per_host_type */
+void tools_open_per_host_type_pack(const struct tools_open_per_host_type *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_per_host_type_unpack(struct tools_open_per_host_type *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_per_host_type_print(const struct tools_open_per_host_type *ptr_struct, FILE* file, int indent_level);
+int tools_open_per_host_type_size(void);
+#define TOOLS_OPEN_PER_HOST_TYPE_SIZE    (0x4)
+void tools_open_per_host_type_dump(const struct tools_open_per_host_type *ptr_struct, FILE* file);
+/* eswitch_type */
+void tools_open_eswitch_type_pack(const struct tools_open_eswitch_type *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_eswitch_type_unpack(struct tools_open_eswitch_type *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_eswitch_type_print(const struct tools_open_eswitch_type *ptr_struct, FILE* file, int indent_level);
+int tools_open_eswitch_type_size(void);
+#define TOOLS_OPEN_ESWITCH_TYPE_SIZE    (0x4)
+void tools_open_eswitch_type_dump(const struct tools_open_eswitch_type *ptr_struct, FILE* file);
 /* global_type */
 void tools_open_global_type_pack(const struct tools_open_global_type *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_global_type_unpack(struct tools_open_global_type *ptr_struct, const u_int8_t* ptr_buff);
@@ -1041,13 +1368,6 @@ void tools_open_pmdio_addr_data_print(const struct tools_open_pmdio_addr_data *p
 int tools_open_pmdio_addr_data_size(void);
 #define TOOLS_OPEN_PMDIO_ADDR_DATA_SIZE    (0x4)
 void tools_open_pmdio_addr_data_dump(const struct tools_open_pmdio_addr_data *ptr_struct, FILE* file);
-/* nv_hdr */
-void tools_open_nv_hdr_pack(const struct tools_open_nv_hdr *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_nv_hdr_unpack(struct tools_open_nv_hdr *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_nv_hdr_print(const struct tools_open_nv_hdr *ptr_struct, FILE* file, int indent_level);
-int tools_open_nv_hdr_size(void);
-#define TOOLS_OPEN_NV_HDR_SIZE    (0x8)
-void tools_open_nv_hdr_dump(const struct tools_open_nv_hdr *ptr_struct, FILE* file);
 /* nv_hdr_fifth_gen */
 void tools_open_nv_hdr_fifth_gen_pack(const struct tools_open_nv_hdr_fifth_gen *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_nv_hdr_fifth_gen_unpack(struct tools_open_nv_hdr_fifth_gen *ptr_struct, const u_int8_t* ptr_buff);
@@ -1055,6 +1375,13 @@ void tools_open_nv_hdr_fifth_gen_print(const struct tools_open_nv_hdr_fifth_gen
 int tools_open_nv_hdr_fifth_gen_size(void);
 #define TOOLS_OPEN_NV_HDR_FIFTH_GEN_SIZE    (0xc)
 void tools_open_nv_hdr_fifth_gen_dump(const struct tools_open_nv_hdr_fifth_gen *ptr_struct, FILE* file);
+/* nv_hdr */
+void tools_open_nv_hdr_pack(const struct tools_open_nv_hdr *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_nv_hdr_unpack(struct tools_open_nv_hdr *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_nv_hdr_print(const struct tools_open_nv_hdr *ptr_struct, FILE* file, int indent_level);
+int tools_open_nv_hdr_size(void);
+#define TOOLS_OPEN_NV_HDR_SIZE    (0x8)
+void tools_open_nv_hdr_dump(const struct tools_open_nv_hdr *ptr_struct, FILE* file);
 /* pmdio */
 void tools_open_pmdio_pack(const struct tools_open_pmdio *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_pmdio_unpack(struct tools_open_pmdio *ptr_struct, const u_int8_t* ptr_buff);
@@ -1069,41 +1396,6 @@ void tools_open_pmdic_print(const struct tools_open_pmdic *ptr_struct, FILE* fil
 int tools_open_pmdic_size(void);
 #define TOOLS_OPEN_PMDIC_SIZE    (0xc)
 void tools_open_pmdic_dump(const struct tools_open_pmdic *ptr_struct, FILE* file);
-/* mnvi */
-void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file, int indent_level);
-int tools_open_mnvi_size(void);
-#define TOOLS_OPEN_MNVI_SIZE    (0x8)
-void tools_open_mnvi_dump(const struct tools_open_mnvi *ptr_struct, FILE* file);
-/* mnvia */
-void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* file, int indent_level);
-int tools_open_mnvia_size(void);
-#define TOOLS_OPEN_MNVIA_SIZE    (0x8)
-void tools_open_mnvia_dump(const struct tools_open_mnvia *ptr_struct, FILE* file);
-/* nvqc */
-void tools_open_nvqc_pack(const struct tools_open_nvqc *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_nvqc_unpack(struct tools_open_nvqc *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_nvqc_print(const struct tools_open_nvqc *ptr_struct, FILE* file, int indent_level);
-int tools_open_nvqc_size(void);
-#define TOOLS_OPEN_NVQC_SIZE    (0x8)
-void tools_open_nvqc_dump(const struct tools_open_nvqc *ptr_struct, FILE* file);
-/* nvdia */
-void tools_open_nvdia_pack(const struct tools_open_nvdia *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_nvdia_unpack(struct tools_open_nvdia *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_nvdia_print(const struct tools_open_nvdia *ptr_struct, FILE* file, int indent_level);
-int tools_open_nvdia_size(void);
-#define TOOLS_OPEN_NVDIA_SIZE    (0xc)
-void tools_open_nvdia_dump(const struct tools_open_nvdia *ptr_struct, FILE* file);
-/* nvda */
-void tools_open_nvda_pack(const struct tools_open_nvda *ptr_struct, u_int8_t* ptr_buff);
-void tools_open_nvda_unpack(struct tools_open_nvda *ptr_struct, const u_int8_t* ptr_buff);
-void tools_open_nvda_print(const struct tools_open_nvda *ptr_struct, FILE* file, int indent_level);
-int tools_open_nvda_size(void);
-#define TOOLS_OPEN_NVDA_SIZE    (0x100)
-void tools_open_nvda_dump(const struct tools_open_nvda *ptr_struct, FILE* file);
 /* nvdi */
 void tools_open_nvdi_pack(const struct tools_open_nvdi *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_nvdi_unpack(struct tools_open_nvdi *ptr_struct, const u_int8_t* ptr_buff);
@@ -1111,6 +1403,41 @@ void tools_open_nvdi_print(const struct tools_open_nvdi *ptr_struct, FILE* file,
 int tools_open_nvdi_size(void);
 #define TOOLS_OPEN_NVDI_SIZE    (0xc)
 void tools_open_nvdi_dump(const struct tools_open_nvdi *ptr_struct, FILE* file);
+/* nvda */
+void tools_open_nvda_pack(const struct tools_open_nvda *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_nvda_unpack(struct tools_open_nvda *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_nvda_print(const struct tools_open_nvda *ptr_struct, FILE* file, int indent_level);
+int tools_open_nvda_size(void);
+#define TOOLS_OPEN_NVDA_SIZE    (0x100)
+void tools_open_nvda_dump(const struct tools_open_nvda *ptr_struct, FILE* file);
+/* nvia */
+void tools_open_nvia_pack(const struct tools_open_nvia *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_nvia_unpack(struct tools_open_nvia *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_nvia_print(const struct tools_open_nvia *ptr_struct, FILE* file, int indent_level);
+int tools_open_nvia_size(void);
+#define TOOLS_OPEN_NVIA_SIZE    (0x14)
+void tools_open_nvia_dump(const struct tools_open_nvia *ptr_struct, FILE* file);
+/* nvqc */
+void tools_open_nvqc_pack(const struct tools_open_nvqc *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_nvqc_unpack(struct tools_open_nvqc *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_nvqc_print(const struct tools_open_nvqc *ptr_struct, FILE* file, int indent_level);
+int tools_open_nvqc_size(void);
+#define TOOLS_OPEN_NVQC_SIZE    (0x8)
+void tools_open_nvqc_dump(const struct tools_open_nvqc *ptr_struct, FILE* file);
+/* mnvia */
+void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnvia_size(void);
+#define TOOLS_OPEN_MNVIA_SIZE    (0x8)
+void tools_open_mnvia_dump(const struct tools_open_mnvia *ptr_struct, FILE* file);
+/* mnvi */
+void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnvi_size(void);
+#define TOOLS_OPEN_MNVI_SIZE    (0x8)
+void tools_open_mnvi_dump(const struct tools_open_mnvi *ptr_struct, FILE* file);
 /* mnva */
 void tools_open_mnva_pack(const struct tools_open_mnva *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_mnva_unpack(struct tools_open_mnva *ptr_struct, const u_int8_t* ptr_buff);
@@ -1146,6 +1473,41 @@ void tools_open_mnv_cfg_print(const union tools_open_mnv_cfg *ptr_struct, FILE*
 int tools_open_mnv_cfg_size(void);
 #define TOOLS_OPEN_MNV_CFG_SIZE    (0x100)
 void tools_open_mnv_cfg_dump(const union tools_open_mnv_cfg *ptr_struct, FILE* file);
+/* lldp_nb_capability */
+void tools_open_lldp_nb_capability_pack(const struct tools_open_lldp_nb_capability *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_lldp_nb_capability_unpack(struct tools_open_lldp_nb_capability *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_lldp_nb_capability_print(const struct tools_open_lldp_nb_capability *ptr_struct, FILE* file, int indent_level);
+int tools_open_lldp_nb_capability_size(void);
+#define TOOLS_OPEN_LLDP_NB_CAPABILITY_SIZE    (0x18)
+void tools_open_lldp_nb_capability_dump(const struct tools_open_lldp_nb_capability *ptr_struct, FILE* file);
+/* lldp_nb */
+void tools_open_lldp_nb_pack(const struct tools_open_lldp_nb *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_lldp_nb_unpack(struct tools_open_lldp_nb *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_lldp_nb_print(const struct tools_open_lldp_nb *ptr_struct, FILE* file, int indent_level);
+int tools_open_lldp_nb_size(void);
+#define TOOLS_OPEN_LLDP_NB_SIZE    (0x1c)
+void tools_open_lldp_nb_dump(const struct tools_open_lldp_nb *ptr_struct, FILE* file);
+/* roce_cc_ecn */
+void tools_open_roce_cc_ecn_pack(const struct tools_open_roce_cc_ecn *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_roce_cc_ecn_unpack(struct tools_open_roce_cc_ecn *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_roce_cc_ecn_print(const struct tools_open_roce_cc_ecn *ptr_struct, FILE* file, int indent_level);
+int tools_open_roce_cc_ecn_size(void);
+#define TOOLS_OPEN_ROCE_CC_ECN_SIZE    (0x44)
+void tools_open_roce_cc_ecn_dump(const struct tools_open_roce_cc_ecn *ptr_struct, FILE* file);
+/* roce_cc */
+void tools_open_roce_cc_pack(const struct tools_open_roce_cc *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_roce_cc_unpack(struct tools_open_roce_cc *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_roce_cc_print(const struct tools_open_roce_cc *ptr_struct, FILE* file, int indent_level);
+int tools_open_roce_cc_size(void);
+#define TOOLS_OPEN_ROCE_CC_SIZE    (0x4)
+void tools_open_roce_cc_dump(const struct tools_open_roce_cc *ptr_struct, FILE* file);
+/* roce_v_1_5_next_protocol */
+void tools_open_roce_v_1_5_next_protocol_pack(const struct tools_open_roce_v_1_5_next_protocol *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_roce_v_1_5_next_protocol_unpack(struct tools_open_roce_v_1_5_next_protocol *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_roce_v_1_5_next_protocol_print(const struct tools_open_roce_v_1_5_next_protocol *ptr_struct, FILE* file, int indent_level);
+int tools_open_roce_v_1_5_next_protocol_size(void);
+#define TOOLS_OPEN_ROCE_V_1_5_NEXT_PROTOCOL_SIZE    (0x4)
+void tools_open_roce_v_1_5_next_protocol_dump(const struct tools_open_roce_v_1_5_next_protocol *ptr_struct, FILE* file);
 /* vpi_settings */
 void tools_open_vpi_settings_pack(const struct tools_open_vpi_settings *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_vpi_settings_unpack(struct tools_open_vpi_settings *ptr_struct, const u_int8_t* ptr_buff);
@@ -1174,6 +1536,13 @@ void tools_open_preboot_flow_ctrl_print(const struct tools_open_preboot_flow_ctr
 int tools_open_preboot_flow_ctrl_size(void);
 #define TOOLS_OPEN_PREBOOT_FLOW_CTRL_SIZE    (0x4)
 void tools_open_preboot_flow_ctrl_dump(const struct tools_open_preboot_flow_ctrl *ptr_struct, FILE* file);
+/* preboot_boot_settings */
+void tools_open_preboot_boot_settings_pack(const struct tools_open_preboot_boot_settings *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_preboot_boot_settings_unpack(struct tools_open_preboot_boot_settings *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_preboot_boot_settings_print(const struct tools_open_preboot_boot_settings *ptr_struct, FILE* file, int indent_level);
+int tools_open_preboot_boot_settings_size(void);
+#define TOOLS_OPEN_PREBOOT_BOOT_SETTINGS_SIZE    (0x4)
+void tools_open_preboot_boot_settings_dump(const struct tools_open_preboot_boot_settings *ptr_struct, FILE* file);
 /* boot_settings */
 void tools_open_boot_settings_pack(const struct tools_open_boot_settings *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_boot_settings_unpack(struct tools_open_boot_settings *ptr_struct, const u_int8_t* ptr_buff);
@@ -1195,6 +1564,13 @@ void tools_open_iscsi_settings_print(const struct tools_open_iscsi_settings *ptr
 int tools_open_iscsi_settings_size(void);
 #define TOOLS_OPEN_ISCSI_SETTINGS_SIZE    (0xc)
 void tools_open_iscsi_settings_dump(const struct tools_open_iscsi_settings *ptr_struct, FILE* file);
+/* port_boot_state */
+void tools_open_port_boot_state_pack(const struct tools_open_port_boot_state *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_port_boot_state_unpack(struct tools_open_port_boot_state *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_port_boot_state_print(const struct tools_open_port_boot_state *ptr_struct, FILE* file, int indent_level);
+int tools_open_port_boot_state_size(void);
+#define TOOLS_OPEN_PORT_BOOT_STATE_SIZE    (0x4)
+void tools_open_port_boot_state_dump(const struct tools_open_port_boot_state *ptr_struct, FILE* file);
 /* pci_configuration */
 void tools_open_pci_configuration_pack(const struct tools_open_pci_configuration *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_pci_configuration_unpack(struct tools_open_pci_configuration *ptr_struct, const u_int8_t* ptr_buff);
@@ -1207,7 +1583,7 @@ void tools_open_pci_capabilities_pack(const struct tools_open_pci_capabilities *
 void tools_open_pci_capabilities_unpack(struct tools_open_pci_capabilities *ptr_struct, const u_int8_t* ptr_buff);
 void tools_open_pci_capabilities_print(const struct tools_open_pci_capabilities *ptr_struct, FILE* file, int indent_level);
 int tools_open_pci_capabilities_size(void);
-#define TOOLS_OPEN_PCI_CAPABILITIES_SIZE    (0x18)
+#define TOOLS_OPEN_PCI_CAPABILITIES_SIZE    (0x14)
 void tools_open_pci_capabilities_dump(const struct tools_open_pci_capabilities *ptr_struct, FILE* file);
 /* tpt_configuration */
 void tools_open_tpt_configuration_pack(const struct tools_open_tpt_configuration *ptr_struct, u_int8_t* ptr_buff);
@@ -1223,6 +1599,20 @@ void tools_open_tpt_capabilities_print(const struct tools_open_tpt_capabilities
 int tools_open_tpt_capabilities_size(void);
 #define TOOLS_OPEN_TPT_CAPABILITIES_SIZE    (0x4)
 void tools_open_tpt_capabilities_dump(const struct tools_open_tpt_capabilities *ptr_struct, FILE* file);
+/* infiniband_dc_settings */
+void tools_open_infiniband_dc_settings_pack(const struct tools_open_infiniband_dc_settings *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_infiniband_dc_settings_unpack(struct tools_open_infiniband_dc_settings *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_infiniband_dc_settings_print(const struct tools_open_infiniband_dc_settings *ptr_struct, FILE* file, int indent_level);
+int tools_open_infiniband_dc_settings_size(void);
+#define TOOLS_OPEN_INFINIBAND_DC_SETTINGS_SIZE    (0x8)
+void tools_open_infiniband_dc_settings_dump(const struct tools_open_infiniband_dc_settings *ptr_struct, FILE* file);
+/* infiniband_dc_capabilities */
+void tools_open_infiniband_dc_capabilities_pack(const struct tools_open_infiniband_dc_capabilities *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_infiniband_dc_capabilities_unpack(struct tools_open_infiniband_dc_capabilities *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_infiniband_dc_capabilities_print(const struct tools_open_infiniband_dc_capabilities *ptr_struct, FILE* file, int indent_level);
+int tools_open_infiniband_dc_capabilities_size(void);
+#define TOOLS_OPEN_INFINIBAND_DC_CAPABILITIES_SIZE    (0x10)
+void tools_open_infiniband_dc_capabilities_dump(const struct tools_open_infiniband_dc_capabilities *ptr_struct, FILE* file);
 /* wol */
 void tools_open_wol_pack(const struct tools_open_wol *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_wol_unpack(struct tools_open_wol *ptr_struct, const u_int8_t* ptr_buff);
diff --git a/tools_res_mgmt/tools_res_mgmt.c b/tools_res_mgmt/tools_res_mgmt.c
index 60fe44f..08ee072 100644
--- a/tools_res_mgmt/tools_res_mgmt.c
+++ b/tools_res_mgmt/tools_res_mgmt.c
@@ -151,7 +151,7 @@ static struct device_sem_info g_dev_sem_info_db[] = {
                 0,               // vsec_sem_supported
         },
         {
-                DeviceSwitchEN,  // dev_id
+                DeviceSpectrum,  // dev_id
                 {0xa24f8},       // hw_sem_addr
                 0,               // vsec_sem_supported
         },

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ofed/mstflint.git



More information about the Pkg-ofed-commits mailing list