[SRU][Jammy:linux-bluefield][PATCH 1/1] UBUNTU: SAUCE: pka: Add pka driver.

Mahantesh Salimath mahantesh at nvidia.com
Thu Jun 30 21:42:35 UTC 2022


BugLink: https://bugs.launchpad.net/elbridge/+bug/1980415

* This driver is picked from internal linux repo;bfdev-5.4.60 branch.
  For commit history, please refer to above repo and branch.

Signed-off-by: Mahantesh Salimath <mahantesh at nvidia.com>
Reviewed-by: Khalil Blaiech <kblaiech at nvidia.com>
Signed-off-by: Mahantesh Salimath <mahantesh at nvidia.com>
---
diff --git a/drivers/platform/mellanox/mlxbf_pka/Kconfig b/drivers/platform/mellanox/mlxbf_pka/Kconfig
new file mode 100644
index 000000000000..ebc038ec740d
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/Kconfig
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: GPL-2.0-only OR Linux-OpenIB
+#
+# Platform support for Mellanox BlueField PKA
+#
+
+config MLXBF_PKA
+        tristate "Mellanox BlueField Public Key Accelerator driver"
+        depends on ARM64 && IOMMU_API && VFIO_IOMMU_TYPE1 && VFIO_PLATFORM
+        help
+          If you say yes to this option, support will be included for the
+          Public Key Accelerator device on Mellanox BlueField SoCs.
+
+          This driver can also be built as a module.  If so, the module will
+          be called pka-mlxbf.
diff --git a/drivers/platform/mellanox/mlxbf_pka/Makefile b/drivers/platform/mellanox/mlxbf_pka/Makefile
new file mode 100644
index 000000000000..d9f5be4d6da5
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/Makefile
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-only OR Linux-OpenIB
+#
+# Makefile for Mellanox BlueField PKA Driver
+#
+
+obj-m += mlxbf-pka.o
+
+mlxbf-pka-y := mlxbf_pka_drv.o
+mlxbf-pka-y += mlxbf_pka_dev.o
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_addrs.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_addrs.h
new file mode 100644
index 000000000000..3a30e79f2b71
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_addrs.h
@@ -0,0 +1,284 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_ADDRS_H__
+#define __PKA_ADDRS_H__
+
+// Define memory size in bytes
+#define MEM_SIZE_4KB        0x1000
+#define MEM_SIZE_8KB        0x2000
+#define MEM_SIZE_16KB       0x4000
+#define MEM_SIZE_32KB       0x8000
+#define MEM_SIZE_64KB       0x10000
+
+//
+// COMMON SPACE
+//
+#define CRYPTO_COMMON_BASE  0x0
+
+// Common IO CSR addresses/offsets: These are all addressed as 8-byte registers.
+#define DEV_INFO_ADDR       (0x00 | CRYPTO_COMMON_BASE)
+#define DEV_CTL_ADDR        (0x08 | CRYPTO_COMMON_BASE)
+#define MMIO_INFO_ADDR      (0x10 | CRYPTO_COMMON_BASE)
+#define SCRATCHPAD_ADDR     (0x20 | CRYPTO_COMMON_BASE)
+#define SEMAPHORE0_ADDR     (0x28 | CRYPTO_COMMON_BASE)
+#define SEMAPHORE1_ADDR     (0x30 | CRYPTO_COMMON_BASE)
+#define CLOCK_COUNT_ADDR    (0x38 | CRYPTO_COMMON_BASE)
+#define INT_SETUP_ADDR      (0x40 | CRYPTO_COMMON_BASE)
+#define CRED_CTL_ADDR       (0x50 | CRYPTO_COMMON_BASE)
+#define SAM_CTL_ADDR        (0x58 | CRYPTO_COMMON_BASE)
+
+//
+// CRYPTO SPACE
+//
+
+// All addresses/offsets herein are BYTE addresses.
+
+// EIP154 CSRS:
+
+// Global Control Space CSR addresses/offsets. These are accessed from the
+// ARM as 8 byte reads/writes however only the bottom 32 bits are implemented.
+#define PKA_CLOCK_SWITCH_ADDR   0x11C68
+#define PKA_CLK_FORCE_ADDR      0x11C80
+#define MODE_SELECTION_ADDR     0x11C88
+#define PKA_PROT_STATUS_ADDR    0x11C90
+#define PKA_OPTIONS_ADDR        0x11DF0
+#define PKA_VERSION_ADDR        0x11DF8
+
+// Advanced Interrupt Controller CSR addresses/offsets. These are accessed
+// from the ARM as 8 byte reads/writes however only the bottom 32 bits are
+// implemented.
+#define AIC_POL_CTRL_ADDR       0x11E00
+#define AIC_TYPE_CTRL_ADDR      0x11E08
+#define AIC_ENABLE_CTRL_ADDR    0x11E10
+#define AIC_RAW_STAT_ADDR       0x11E18
+#define AIC_ENABLE_SET_ADDR     0x11E18
+#define AIC_ENABLED_STAT_ADDR   0x11E20
+#define AIC_ACK_ADDR            0x11E20
+#define AIC_ENABLE_CLR_ADDR     0x11E28
+#define AIC_OPTIONS_ADDR        0x11E30
+#define AIC_VERSION_ADDR        0x11E38
+
+// The True Random Number Generator CSR addresses/offsets. These are accessed
+// from the ARM as 8 byte reads/writes however only the bottom 32 bits are
+// implemented.
+#define TRNG_OUTPUT_0_ADDR      0x12000
+#define TRNG_OUTPUT_1_ADDR      0x12008
+#define TRNG_OUTPUT_2_ADDR      0x12010
+#define TRNG_OUTPUT_3_ADDR      0x12018
+#define TRNG_STATUS_ADDR        0x12020
+#define TRNG_INTACK_ADDR        0x12020
+#define TRNG_CONTROL_ADDR       0x12028
+#define TRNG_CONFIG_ADDR        0x12030
+#define TRNG_ALARMCNT_ADDR      0x12038
+#define TRNG_FROENABLE_ADDR     0x12040
+#define TRNG_FRODETUNE_ADDR     0x12048
+#define TRNG_ALARMMASK_ADDR     0x12050
+#define TRNG_ALARMSTOP_ADDR     0x12058
+#define TRNG_BLOCKCNT_ADDR      0x120E8
+#define TRNG_OPTIONS_ADDR       0x120F0
+#define TRNG_TEST_ADDR          0x120E0
+#define TRNG_RAW_L_ADDR         0x12060
+#define TRNG_RAW_H_ADDR         0x12068
+#define TRNG_RUN_CNT_ADDR       0x12080
+#define TRNG_MONOBITCNT_ADDR    0x120B8
+#define TRNG_POKER_3_0_ADDR     0x120C0
+#define TRNG_POKER_7_4          0x120C8
+#define TRNG_POKER_B_8          0x120D0
+#define TRNG_POKER_F_C          0x120D8
+
+#define TRNG_PS_AI_0_ADDR       0x12080
+#define TRNG_PS_AI_1_ADDR       0x12088
+#define TRNG_PS_AI_2_ADDR       0x12090
+#define TRNG_PS_AI_3_ADDR       0x12098
+#define TRNG_PS_AI_4_ADDR       0x120A0
+#define TRNG_PS_AI_5_ADDR       0x120A8
+#define TRNG_PS_AI_6_ADDR       0x120B0
+#define TRNG_PS_AI_7_ADDR       0x120B8
+#define TRNG_PS_AI_8_ADDR       0x120C0
+#define TRNG_PS_AI_9_ADDR       0x120C8
+#define TRNG_PS_AI_10_ADDR      0x120D0
+#define TRNG_PS_AI_11_ADDR      0x120D8
+
+// Control register address/offset. This is accessed from the ARM using 8
+// byte reads/writes however only the bottom 32 bits are implemented.
+#define PKA_MASTER_SEQ_CTRL_ADDR    0x27F90
+
+// Ring CSRs:  These are all accessed from the ARM using 8 byte reads/writes
+// however only the bottom 32 bits are implemented.
+
+// Ring 0 CSRS
+#define COMMAND_COUNT_0_ADDR    0x80080
+#define RESULT_COUNT_0_ADDR     0x80088
+#define IRQ_THRESH_0_ADDR       0x80090
+
+// Ring 1 CSRS:
+#define COMMAND_COUNT_1_ADDR    0x90080
+#define RESULT_COUNT_1_ADDR     0x90088
+#define IRQ_THRESH_1_ADDR       0x90090
+
+// Ring 2 CSRS:
+#define COMMAND_COUNT_2_ADDR    0xA0080
+#define RESULT_COUNT_2_ADDR     0xA0088
+#define IRQ_THRESH_2_ADDR       0xA0090
+
+// Ring 3 CSRS:
+#define COMMAND_COUNT_3_ADDR    0xB0080
+#define RESULT_COUNT_3_ADDR     0xB0088
+#define IRQ_THRESH_3_ADDR       0xB0090
+
+// EIP154 RAM regions: Note that the FARM_PROG_RAM_X address range overlaps
+// with the FARM_DATA_RAM_X and FARM_DATA_RAM_X_EXT address ranges.  This
+// conflict is resolved by using the FARM_PROG_RAM_X only when the
+// Sequencer is in SW reset, and the DATA_RAMs are picked only when the
+// engine is operation.
+//
+//  Note:
+//      The FARM_DATA_RAM_X_EXT RAMs may also be
+//      called the LNME FIFO RAMs in some of the documentation.
+//
+//          PKA_BUFFER_RAM        : 1024 x 64  -  8K bytes
+//          PKA_SECURE_RAM        : 1536 x 64  - 12K bytes
+//          PKA_MASTER_PROG_RAM   : 8192 x 32  - 32K bytes
+//          FARM_DATA_RAM_X       : 1024 x 64  -  8K bytes
+//          FARM_DATA_RAM_X_EXT   :  256 x 32  -  1K bytes
+//          FARM_PROG_RAM_X       : 2048 x 32  -  8K bytes
+//
+//  Note:
+//      *TBD* Since hardware guys multiplied the address per 2, the size of
+//      each memory/registers group increased and become two times larger.
+//      Memory size should be adjusted accordingly:
+//          PKA Buffer RAM size :                8KB  --> 16KB
+//          PKA Secure RAM size :                8KB  --> 16KB
+//          PKA Master Program RAM size :       32KB  --> 64KB
+//          PKA Farm Data RAM size :             4KB  -->  8KB
+//          PKA Farm Data RAM extension size :   4KB  -->  8KB
+//          PKA Farm Program RAM size :          8KB  --> 16KB
+//
+#define PKA_BUFFER_RAM_BASE         0x00000
+#define PKA_BUFFER_RAM_SIZE         MEM_SIZE_16KB   // 0x00000...0x03FFF
+
+#define PKA_SECURE_RAM_BASE         0x20000
+#define PKA_SECURE_RAM_SIZE         MEM_SIZE_16KB   // 0x20000...0x23FFF
+
+#define PKA_MASTER_PROG_RAM_BASE    0x30000
+#define PKA_MASTER_PROG_RAM_SIZE    MEM_SIZE_64KB   // 0x30000...0x3FFFF
+
+#define FARM_DATA_RAM_0_BASE        0x40000
+#define FARM_DATA_RAM_0_SIZE        MEM_SIZE_8KB    // 0x40000...0x41FFF
+#define FARM_DATA_RAM_0_EXT_BASE    0x42000
+#define FARM_DATA_RAM_0_EXT_SIZE    MEM_SIZE_8KB    // 0x42000...0x43FFF
+#define FARM_PROG_RAM_0_BASE        0x40000
+#define FARM_PROG_RAM_0_SIZE        MEM_SIZE_16KB   // 0x40000...0x43FFF
+#define FARM_DATA_RAM_1_BASE        0x44000
+#define FARM_DATA_RAM_1_SIZE        MEM_SIZE_8KB    // 0x44000...0x45FFF
+#define FARM_DATA_RAM_1_EXT_BASE    0x46000
+#define FARM_DATA_RAM_1_EXT_SIZE    MEM_SIZE_8KB    // 0x46000...0x47FFF
+#define FARM_PROG_RAM_1_BASE        0x44000
+#define FARM_PROG_RAM_1_SIZE        MEM_SIZE_16KB   // 0x44000...0x47FFF
+#define FARM_DATA_RAM_2_BASE        0x48000
+#define FARM_DATA_RAM_2_SIZE        MEM_SIZE_8KB    // 0x48000...0x49FFF
+#define FARM_DATA_RAM_2_EXT_BASE    0x4A000
+#define FARM_DATA_RAM_2_EXT_SIZE    MEM_SIZE_8KB    // 0x4A000...0x4BFFF
+#define FARM_PROG_RAM_2_BASE        0x48000
+#define FARM_PROG_RAM_2_SIZE        MEM_SIZE_16KB   // 0x48000...0x4BFFF
+#define FARM_DATA_RAM_3_BASE        0x4C000
+#define FARM_DATA_RAM_3_SIZE        MEM_SIZE_8KB    // 0x4C000...0x4DFFF
+#define FARM_DATA_RAM_3_EXT_BASE    0x4E000
+#define FARM_DATA_RAM_3_EXT_SIZE    MEM_SIZE_8KB    // 0x4E000...0x4FFFF
+#define FARM_PROG_RAM_3_BASE        0x4C000
+#define FARM_PROG_RAM_3_SIZE        MEM_SIZE_16KB   // 0x4C000...0x4FFFF
+#define FARM_DATA_RAM_4_BASE        0x50000
+#define FARM_DATA_RAM_4_SIZE        MEM_SIZE_8KB    // 0x50000...0x51FFF
+#define FARM_DATA_RAM_4_EXT_BASE    0x52000
+#define FARM_DATA_RAM_4_EXT_SIZE    MEM_SIZE_8KB    // 0x52000...0x53FFF
+#define FARM_PROG_RAM_4_BASE        0x50000
+#define FARM_PROG_RAM_4_SIZE        MEM_SIZE_16KB   // 0x50000...0x53FFF
+#define FARM_DATA_RAM_5_BASE        0x54000
+#define FARM_DATA_RAM_5_SIZE        MEM_SIZE_8KB    // 0x54000...0x55FFF
+#define FARM_DATA_RAM_5_EXT_BASE    0x56000
+#define FARM_DATA_RAM_5_EXT_SIZE    MEM_SIZE_8KB    // 0x56000...0x57FFF
+#define FARM_PROG_RAM_5_BASE        0x54000
+#define FARM_PROG_RAM_5_SIZE        MEM_SIZE_16KB   // 0x54000...0x57FFF
+
+// PKA Buffer RAM offsets. These are NOT real CSR's but instead are
+// specific offset/addresses within the EIP154 PKA_BUFFER_RAM.
+
+// Ring 0:
+#define RING_CMMD_BASE_0_ADDR   0x00000
+#define RING_RSLT_BASE_0_ADDR   0x00010
+#define RING_SIZE_TYPE_0_ADDR   0x00020
+#define RING_RW_PTRS_0_ADDR     0x00028
+#define RING_RW_STAT_0_ADDR     0x00030
+
+// Ring 1
+#define RING_CMMD_BASE_1_ADDR   0x00040
+#define RING_RSLT_BASE_1_ADDR   0x00050
+#define RING_SIZE_TYPE_1_ADDR   0x00060
+#define RING_RW_PTRS_1_ADDR     0x00068
+#define RING_RW_STAT_1_ADDR     0x00070
+
+// Ring 2
+#define RING_CMMD_BASE_2_ADDR   0x00080
+#define RING_RSLT_BASE_2_ADDR   0x00090
+#define RING_SIZE_TYPE_2_ADDR   0x000A0
+#define RING_RW_PTRS_2_ADDR     0x000A8
+#define RING_RW_STAT_2_ADDR     0x000B0
+
+// Ring 3
+#define RING_CMMD_BASE_3_ADDR   0x000C0
+#define RING_RSLT_BASE_3_ADDR   0x000D0
+#define RING_SIZE_TYPE_3_ADDR   0x000E0
+#define RING_RW_PTRS_3_ADDR     0x000E8
+#define RING_RW_STAT_3_ADDR     0x000F0
+
+// Ring Options
+#define PKA_RING_OPTIONS_ADDR   0x07FF8
+
+// Alternate Window RAM size
+#define PKA_WINDOW_RAM_REGION_SIZE      MEM_SIZE_16KB
+
+// Currently, we do not use these MiCA specific CSRs.
+
+// The PKI (not EIP154) CSR address/offsets: These are all addressed as
+// 8-byte registers.
+#define PKA_INT_MASK_ADDR           0x00
+#define PKA_INT_MASK_SET_ADDR       0x08
+#define PKA_INT_MASK_RESET_ADDR     0x10
+#define PKA_ZEROIZE_ADDR            0x40
+#define TST_FRO_ADDR                0x50
+#define FRO_COUNT_ADDR              0x58
+#define PKA_PARITY_CTL_ADDR         0x60
+#define PKA_PARITY_STAT_ADDR        0x68
+
+#endif // __PKA_ADDRS_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_config.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_config.h
new file mode 100644
index 000000000000..2f2fd8377c47
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_config.h
@@ -0,0 +1,226 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_CONFIG_H__
+#define __PKA_CONFIG_H__
+
+#include "mlxbf_pka_addrs.h"
+
+// The maximum number of PKA shims refered to as IO blocks.
+#define PKA_MAX_NUM_IO_BLOCKS           8
+// The maximum number of Rings supported by IO block (shim).
+#define PKA_MAX_NUM_IO_BLOCK_RINGS      4
+
+#define PKA_MAX_NUM_RINGS \
+    (PKA_MAX_NUM_IO_BLOCK_RINGS * PKA_MAX_NUM_IO_BLOCKS)
+
+// Resources are regions which include info control/status words,
+// count registers and host window ram.
+#define PKA_MAX_NUM_RING_RESOURCES      3
+
+// PKA Ring resources.
+// Define Ring resources parameters including base address, size (in bytes)
+// and ring spacing.
+#define PKA_RING_WORDS_ADDR         PKA_BUFFER_RAM_BASE
+#define PKA_RING_CNTRS_ADDR         COMMAND_COUNT_0_ADDR
+
+#define PKA_RING_WORDS_SIZE         0x40        // 64 bytes
+#define PKA_RING_CNTRS_SIZE         0x20        // 32 bytes (3 count registers)
+#define PKA_RING_MEM_SIZE           0x4000      // 16K bytes
+
+#define PKA_RING_WORDS_SPACING      0x40        // 64  bytes
+#define PKA_RING_CNTRS_SPACING      0x10000     // 64K bytes
+#define PKA_RING_MEM_0_SPACING      0x4000      // 16K bytes
+#define PKA_RING_MEM_1_SPACING      0x10000     // 64K bytes
+
+// PKA Window RAM parameters.
+// Define whether to split or not Window RAM during PKA device creation phase.
+#define SPLIT_WINDOW_RAM_MODE_ENABLED        1
+#define SPLIT_WINDOW_RAM_MODE_DISABLED       0
+#define PKA_SPLIT_WINDOW_RAM_MODE            SPLIT_WINDOW_RAM_MODE_DISABLED
+// Defines for Window RAM partition. It is valid for 16K memory.
+#define PKA_WINDOW_RAM_RING_MEM_SIZE         0x0800 //  2KB
+#define PKA_WINDOW_RAM_DATA_MEM_SIZE         0x3800 // 14KB
+
+// Offset mask, common to both Window and Alternate Window RAM.
+#define PKA_WINDOW_RAM_OFFSET_MASK1          0x730000
+
+// Macro for mapping PKA Ring address into Window RAM address. It converts the
+// ring address, either physical address or virtual address, to valid address
+// into the Window RAM. This is done assuming the Window RAM base, size and
+// mask. Here, base is the actual physical address of the Window RAM, with the
+// help of mask it is reduced to Window RAM offset within that PKA block.
+// Further, with the help of addr and size, we arrive at the Window RAM
+// offset address for a PKA Ring within the given Window RAM.
+#define PKA_RING_MEM_ADDR(base, mask, addr, size) \
+    ((base & mask) | (((addr) & 0xffff) | \
+        ((((addr) & ~((size) - 1)) & 0xf0000) >> 2)))
+
+// PKA Master Sequencer Control/Status Register
+//  Write '1' to bit [31] puts the Master controller Sequencer in a reset
+//  reset state. Resetting the Sequencer (in order to load other firmware)
+//  should only be done when the EIP-154 is not performing any operations.
+#define PKA_MASTER_SEQ_CTRL_RESET_VAL           0x80000000
+//  Write '1' to bit [30] will reset all Command and Result counters. This
+//  bit is write-only and self clearing and can only be set if the ‘Reset’
+//  bit [31] is ‘1’.
+#define PKA_MASTER_SEQ_CTRL_CLEAR_COUNTERS_VAL  0x40000000
+//  Bit [8] in the PKA Master Sequencer Control/Status Register is tied to
+//  the 'pka_master_irq interrupt' on the EIP-154 interrupt controller.
+#define PKA_MASTER_SEQ_CTRL_MASTER_IRQ_BIT      8
+//  Sequencer status bits are used by the Master controller Sequencer to
+//  reflect status. Bit [0] is tied to the 'pka_master_irq' interrupt on
+//  the EIP-154 interrupt controller.
+#define PKA_MASTER_SEQ_CTRL_STATUS_BYTE         0x01
+// 'pka_master_irq' mask for the Master controller Sequencer Status Register.
+#define PKA_MASTER_SEQ_CTRL_MASTER_IRQ_MASK     0x100
+
+// Advanced Interrupt Controller (AIC) configuration
+//  AIC Polarity Control Register is used to set each individual interrupt
+//  signal (High Level / Rising Edge) during the initialization phase.
+//   '0' = Low level or falling edge.
+//   '1' = High level or rising edge.
+#define PKA_AIC_POL_CTRL_REG_VAL                0x000FFFFF
+//  AIC Type Control Register is used to set each interrupt to level or edge.
+//   '0' = Level.
+//   '1' = Edge.
+#define PKA_AIC_TYPE_CTRL_REG_VAL               0x000FFFFF
+//  AIC Enable Control Register is used to enable interrupt inputs.
+//   '0' = Disabled.
+//   '1' = Enabled.
+#define PKA_AIC_ENABLE_CTRL_REG_VAL             0x000F030F
+//  AIC Enabled Status Register bits reflect the status of the interrupts
+//  gated with the enable bits of the AIC_ENABLE_CTRL Register.
+//   '0' = Inactive.
+//   '1' = Pending.
+#define PKA_AIC_ENABLE_STAT_REG_VAL             0x000F030F
+
+// 'pka_master_irq' mask for the AIC Enabled Status Register.
+#define PKA_AIC_ENABLED_STAT_MASTER_IRQ_MASK    0x100
+
+// PKA_RING_OPTIONS field to specify the priority in which rings are handled:
+//  '00' = full rotating priority,
+//  '01' = fixed priority (ring 0 lowest),
+//  '10' = ring 0 has the highest priority and the remaining rings have
+//         rotating priority,
+//  '11' = reserved, do not use.
+#define PKA_FULL_ROTATING_PRIORITY              0x0
+#define PKA_FIXED_PRIORITY                      0x1
+#define PKA_RING_0_HAS_THE_HIGHEST_PRIORITY     0x2
+#define PKA_RESERVED                            0x3
+#define PKA_RING_OPTIONS_PRIORITY               PKA_FULL_ROTATING_PRIORITY
+
+// 'Signature' byte used because the ring options are transferred through RAM
+// which does not have a defined reset value.  The EIP-154  master controller
+// keeps reading the  PKA_RING_OPTIONS word at start-up until the ‘Signature’
+// byte contains 0x46 and the ‘Reserved’ field contains zero.
+#define PKA_RING_OPTIONS_SIGNATURE_BYTE         0x46
+
+// Order of the result reporting: Two schemas are available:
+//  InOrder    - This means that the results will be reported in the same order
+//               as the commands were provided.
+//  OutOfOrder - This means that the results are reported as soon as they are
+//               available
+#define PKA_RING_TYPE_IN_ORDER_BIT          1
+#define PKA_RING_TYPE_OUT_OF_ORDER_BIT      0
+#define PKA_RING_TYPE_IN_ORDER              PKA_RING_TYPE_OUT_OF_ORDER_BIT
+
+// Byte order of the data written/read to/from Rings.
+//  Little Endian (LE) - The least significant bytes have the lowest address.
+//  Big    Endian (BE) - The most significant bytes come first.
+#define PKA_RING_BYTE_ORDER_LE              0
+#define PKA_RING_BYTE_ORDER_BE              1
+#define PKA_RING_BYTE_ORDER                 PKA_RING_BYTE_ORDER_LE
+
+// 'trng_clk_on' mask for PKA Clock Switch Forcing Register. Turn on the
+// TRNG clock. When the TRNG is controlled via the Host slave interface,
+// this engine needs to be turned on by setting bit 11.
+#define PKA_CLK_FORCE_TRNG_ON               0x800
+
+// Number of TRNG Output registers
+#define PKA_TRNG_OUTPUT_CNT                 4
+
+// TRNG Configuration
+#define PKA_TRNG_CONFIG_REG_VAL             0x00020008
+// TRNG Alarm Counter Register Value
+#define PKA_TRNG_ALARMCNT_REG_VAL           0x000200FF
+// TRNG FRO Enable Register Value
+#define PKA_TRNG_FROENABLE_REG_VAL          0x00FFFFFF
+// TRNG Control Register Value; Set bit 10 to start the EIP-76 a.k.a TRNG
+// engine, gathering entropy from the FROs.
+#define PKA_TRNG_CONTROL_REG_VAL            0x00000400
+
+// TRNG Control bit
+#define PKA_TRNG_CONTROL_TEST_MODE          0x100
+
+// TRNG Control Register Value; Set bit 10 and 12 to start the EIP-76 a.k.a TRNG
+// engine with DRBG enabled, gathering entropy from the FROs.
+#define PKA_TRNG_CONTROL_DRBG_REG_VAL       0x00001400
+
+// DRBG enabled TRNG 'request_data' value. REQ_DATA_VAL (in accordance with
+// DATA_BLOCK_MASK) requests 256 blocks of 128-bit random output.
+// 4095 blocks is the max number that can be requested for the TRNG(with DRBG)
+// configuration on Bluefield platforms.
+#define PKA_TRNG_CONTROL_REQ_DATA_VAL       0x10010000
+
+// Mask for 'Data Block' in TRNG Control Register.
+#define PKA_TRNG_DRBG_DATA_BLOCK_MASK       0xfff00000
+
+// Set bit 12 of TRNG Control Register to enable DRBG functionality.
+#define PKA_TRNG_CONTROL_DRBG_ENABLE_VAL    0x00001000
+
+// Set bit 8 a.ka 'test_sp_800_90 DRBG' bit in the TRNG Test Register.
+#define PKA_TRNG_TEST_DRBG_VAL              0x00000080
+
+// Number of Personalization String/Additional Input Registers
+#define PKA_TRNG_PS_AI_REG_COUNT            12
+
+// DRBG Reseed enable
+#define PKA_TRNG_CONTROL_DRBG_RESEED        0x00008000
+
+// TRNG Status bits
+#define PKA_TRNG_STATUS_READY               0x1
+#define PKA_TRNG_STATUS_SHUTDOWN_OFLO       0x2
+#define PKA_TRNG_STATUS_TEST_READY          0x100
+#define PKA_TRNG_STATUS_MONOBIT_FAIL        0x80
+#define PKA_TRNG_STATUS_RUN_FAIL            0x10
+#define PKA_TRNG_STATUS_POKER_FAIL          0x40
+
+// TRNG Alarm Counter bits
+#define PKA_TRNG_ALARMCNT_STALL_RUN_POKER   0x8000
+
+// TRNG Test bits
+#define PKA_TRNG_TEST_KNOWN_NOISE           0x20
+#define PKA_TRNG_TEST_NOISE                 0x2000
+
+#endif // __PKA_CONFIG_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_cpu.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_cpu.h
new file mode 100644
index 000000000000..3e65d79c7971
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_cpu.h
@@ -0,0 +1,72 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_CPU_H__
+#define __PKA_CPU_H__
+
+#include <linux/types.h>
+#include <linux/timex.h>
+
+#define PKA_AARCH_64
+#define MAX_CPU_NUMBER 16      // BlueField specific
+
+#define MEGA 1000000
+#define GIGA 1000000000
+
+#define MS_PER_S 1000
+#define US_PER_S 1000000
+#define NS_PER_S 1000000000
+
+// Initial guess at our CPU speed.  We set this to be larger than any
+// possible real speed, so that any calculated delays will be too long,
+// rather than too short.
+//
+//*Warning: use dummy value for frequency
+//#define CPU_HZ_MAX      (2 * GIGA) // Cortex A72 : 2 GHz max -> 2.5 GHz max
+#define CPU_HZ_MAX        (1255 * MEGA) // CPU Freq for High/Bin Chip
+
+// YIELD hints the CPU to switch to another thread if possible
+// and executes as a NOP otherwise.
+#define pka_cpu_yield() ({ asm volatile("yield" : : : "memory"); })
+// ISB flushes the pipeline, then restarts. This is guaranteed to
+// stall the CPU a number of cycles.
+#define pka_cpu_relax() ({ asm volatile("isb" : : : "memory"); })
+
+// Processor speed in hertz; used in routines which might be called very
+// early in boot.
+static inline uint64_t pka_early_cpu_speed(void)
+{
+  return CPU_HZ_MAX;
+}
+
+#endif // __PKA_CPU_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_debug.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_debug.h
new file mode 100644
index 000000000000..f4a2aa6fba4b
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_debug.h
@@ -0,0 +1,66 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_DEBUG_H__
+#define __PKA_DEBUG_H__
+
+// PKA library bitmask. Use those bits to enable debug messages
+#define PKA_DRIVER              0x0001
+#define PKA_DEV                 0x0002
+#define PKA_RING                0x0004
+#define PKA_QUEUE               0x0008
+#define PKA_MEM                 0x0010
+#define PKA_USER                0x0020
+#define PKA_TESTS               0x0040
+// PKA debug mask. This indicates the debug/verbosity level.
+#define PKA_DEBUG_LIB_MASK      0x0040
+
+#define PKA_PRINT(lib, fmt, args...) \
+    ({ pr_info(#lib": "fmt, ##args); })
+
+#define PKA_ERROR(lib, fmt, args...) \
+    ({ pr_err(#lib": %s: error: "fmt, __func__, ##args); })
+
+#define PKA_DEBUG(lib, fmt, args...) \
+    ({                                                    \
+        if (lib & PKA_DEBUG_LIB_MASK)                     \
+            pr_debug(#lib": %s: "fmt, __func__, ##args);  \
+    })
+
+#define PKA_PANIC(lib, msg, args...) \
+    ({ \
+        pr_info(#lib": %s: panic: "msg, __func__, ##args); \
+        panic(msg, ##args);                                     \
+    })
+
+#endif // __PKA_DEBUG_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_dev.c b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_dev.c
new file mode 100644
index 000000000000..c49c8db90b41
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_dev.c
@@ -0,0 +1,2414 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include <linux/delay.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/ioport.h>
+#include <linux/timex.h>
+#include <linux/vfio.h>
+
+#include "mlxbf_pka_dev.h"
+
+#define BYTES_PER_WORD 4
+#define BYTES_PER_DOUBLE_WORD 8
+
+// Personalization string "NVIDIA-MELLANOX-BLUEFIELD-TRUE_RANDOM_NUMBER_GEN"
+uint32_t pka_trng_drbg_ps_str[] =
+{
+    0x4e564944, 0x49412d4d, 0x454c4c41, 0x4e4f582d,
+    0x424c5545, 0x4649454c, 0x442d5452, 0x55455f52,
+    0x414e444f, 0x4d5f4e55, 0x4d424552, 0x5f47454e
+};
+
+// Personalization string for DRBG test
+uint32_t pka_trng_drbg_test_ps_str[] =
+{
+    0x64299d83, 0xc34d7098, 0x5bd1f51d, 0xddccfdc1,
+    0xdd0455b7, 0x166279e5, 0x0974cb1b, 0x2f2cd100,
+    0x59a5060a, 0xca79940d, 0xd4e29a40, 0x56b7b779
+};
+
+// First Entropy string for DRBG test
+uint32_t pka_trng_drbg_test_etpy_str1[] =
+{
+    0xaa6bbcab, 0xef45e339, 0x136ca1e7, 0xbce1c881,
+    0x9fa37b09, 0x63b53667, 0xb36e0053, 0xa202ed81,
+    0x4650d90d, 0x8eed6127, 0x666f2402, 0x0dfd3af9
+};
+
+// Second Entropy string for DRBG test
+uint32_t pka_trng_drbg_test_etpy_str2[] =
+{
+    0x35c1b7a1, 0x0154c52b, 0xd5777390, 0x226a4fdb,
+    0x5f16080d, 0x06b68369, 0xd0c93d00, 0x3336e27f,
+    0x1abf2c37, 0xe6ab006c, 0xa4adc6e1, 0x8e1907a2
+};
+
+// Known answer for DRBG test
+uint32_t pka_trng_drbg_test_output[] =
+{
+    0xb663b9f1, 0x24943e13, 0x80f7dce5, 0xaba1a16f
+};
+
+pka_dev_gbl_config_t pka_gbl_config;
+
+// Global PKA shim resource info table
+static pka_dev_gbl_shim_res_info_t pka_gbl_res_tbl[PKA_MAX_NUM_IO_BLOCKS];
+
+// Start a PKA device timer.
+static uint64_t pka_dev_timer_start(uint32_t usec)
+{
+  uint64_t cur_time = get_cycles();
+  return (cur_time + (pka_early_cpu_speed() * usec) / 1000000ULL);
+}
+
+// Test a PKA device timer for completion.
+static int pka_dev_timer_done(uint64_t timer)
+{
+  return (get_cycles() >= timer);
+}
+
+// Return register base address
+static uint64_t pka_dev_get_register_base(uint64_t base, uint64_t reg_addr)
+{
+    return (base + reg_addr) & PAGE_MASK;
+}
+
+// Return register offset
+static uint64_t pka_dev_get_register_offset(uint64_t base, uint64_t reg_addr)
+{
+    return (base + reg_addr) & ~PAGE_MASK;
+}
+
+// Return word offset within io memory
+static uint64_t pka_dev_get_word_offset(uint64_t mem_base, uint64_t word_addr,
+                                            uint64_t mem_size)
+{
+    return (mem_base + word_addr) & (mem_size - 1);
+}
+
+static uint64_t pka_dev_io_read(void *mem_ptr, uint64_t mem_off)
+{
+    uint64_t    data;
+
+    data = pka_mmio_read(mem_ptr + mem_off);
+
+    return data;
+}
+
+static void pka_dev_io_write(void *mem_ptr, uint64_t mem_off, uint64_t value)
+{
+    pka_mmio_write(mem_ptr + mem_off, value);
+}
+
+// Add the resource to the global resource table
+static int pka_dev_add_resource(pka_dev_res_t *res_ptr, uint32_t shim_idx)
+{
+    uint8_t res_cnt;
+
+    res_cnt = pka_gbl_res_tbl[shim_idx].res_cnt;
+
+    if (res_cnt >= PKA_DEV_SHIM_RES_CNT)
+        return -ENOMEM;
+
+    pka_gbl_res_tbl[shim_idx].res_tbl[res_cnt] = res_ptr;
+    pka_gbl_res_tbl[shim_idx].res_cnt++;
+
+    return 0;
+}
+
+// Remove the resource from the global resource table
+static int pka_dev_put_resource(pka_dev_res_t *res,  uint32_t shim_idx)
+{
+    pka_dev_res_t *res_ptr;
+    uint8_t        res_idx;
+
+    for (res_idx = 0; res_idx < PKA_DEV_SHIM_RES_CNT; res_idx++)
+    {
+        res_ptr = pka_gbl_res_tbl[shim_idx].res_tbl[res_idx];
+        if (res_ptr && strcmp(res_ptr->name, res->name) == 0)
+        {
+            pka_gbl_res_tbl[shim_idx].res_tbl[res_idx] = NULL;
+            pka_gbl_res_tbl[shim_idx].res_cnt--;
+            break;
+        }
+    }
+
+    // Check whether the resource shares the same memory map; If so,
+    // the memory map shouldn't be released.
+    for (res_idx = 0; res_idx < PKA_DEV_SHIM_RES_CNT; res_idx++)
+    {
+        res_ptr = pka_gbl_res_tbl[shim_idx].res_tbl[res_idx];
+        if (res_ptr && (res_ptr->base == res->base))
+            return -EBUSY;
+    }
+
+    return 0;
+}
+
+static void* pka_dev_get_resource_ioaddr(uint64_t res_base, uint32_t shim_idx)
+{
+    pka_dev_res_t *res_ptr;
+    uint8_t        res_cnt, res_idx;
+
+    res_cnt = pka_gbl_res_tbl[shim_idx].res_cnt;
+
+    if (res_cnt == 0)
+        return NULL;
+
+    for (res_idx = 0; res_idx < res_cnt; res_idx++)
+    {
+        res_ptr = pka_gbl_res_tbl[shim_idx].res_tbl[res_idx];
+        if (res_ptr->base == res_base)
+            return res_ptr->ioaddr;
+    }
+
+    return NULL;
+}
+
+// Set PKA device resource config - - map io memory if needed.
+static int pka_dev_set_resource_config(pka_dev_shim_t *shim,
+                                       pka_dev_res_t  *res_ptr,
+                                       uint64_t        res_base,
+                                       uint64_t        res_size,
+                                       uint64_t        res_type,
+                                       char            *res_name)
+{
+    int ret = 0;
+
+    if (res_ptr->status == PKA_DEV_RES_STATUS_MAPPED)
+        return -EPERM;
+
+    if (res_type == PKA_DEV_RES_TYPE_REG)
+        res_ptr->base = res_base;
+
+    if (res_type == PKA_DEV_RES_TYPE_MEM)
+        res_ptr->base = shim->mem_res.eip154_base + res_base;
+
+    res_ptr->size    = res_size;
+    res_ptr->type    = res_type;
+    res_ptr->name    = res_name;
+    res_ptr->status  = PKA_DEV_RES_STATUS_UNMAPPED;
+    res_ptr->ioaddr  = pka_dev_get_resource_ioaddr(res_ptr->base,
+                                                   shim->shim_id);
+    if (!res_ptr->ioaddr)
+    {
+        if (!request_mem_region(res_ptr->base, res_ptr->size, res_ptr->name))
+        {
+            PKA_ERROR(PKA_DEV, "failed to get io memory region\n");
+            return -EPERM;
+        }
+
+        res_ptr->ioaddr = ioremap(res_ptr->base, res_ptr->size);
+    }
+
+    res_ptr->status = PKA_DEV_RES_STATUS_MAPPED;
+
+    if (!res_ptr->ioaddr || pka_dev_add_resource(res_ptr, shim->shim_id))
+    {
+        PKA_ERROR(PKA_DEV, "unable to map io memory\n");
+        release_mem_region(res_ptr->base, res_ptr->size);
+        return -ENOMEM;
+    }
+    return ret;
+}
+
+// Unset PKA device resource config - unmap io memory if needed.
+static void pka_dev_unset_resource_config(pka_dev_shim_t *shim,
+                                          pka_dev_res_t  *res_ptr)
+{
+    int ret = -EBUSY;
+
+    if (res_ptr->status != PKA_DEV_RES_STATUS_MAPPED)
+        return;
+
+    if (res_ptr->ioaddr &&
+            ret != pka_dev_put_resource(res_ptr, shim->shim_id))
+    {
+        iounmap(res_ptr->ioaddr);
+        release_mem_region(res_ptr->base, res_ptr->size);
+    }
+
+    res_ptr->status = PKA_DEV_RES_STATUS_UNMAPPED;
+}
+
+int pka_dev_clear_ring_counters(pka_dev_ring_t *ring)
+{
+    pka_dev_shim_t *shim;
+    pka_dev_res_t  *master_seq_ctrl_ptr;
+    void           *master_reg_ptr;
+    uint64_t        master_reg_base, master_reg_off;
+
+    shim = ring->shim;
+    master_seq_ctrl_ptr = &shim->resources.master_seq_ctrl;
+    master_reg_base = master_seq_ctrl_ptr->base;
+    master_reg_ptr  = master_seq_ctrl_ptr->ioaddr;
+    master_reg_off  = pka_dev_get_register_offset(master_reg_base,
+                                                    PKA_MASTER_SEQ_CTRL_ADDR);
+
+    // push the EIP-154 master controller into reset.
+    pka_dev_io_write(master_reg_ptr, master_reg_off,
+                            PKA_MASTER_SEQ_CTRL_RESET_VAL);
+
+    // clear counters.
+    pka_dev_io_write(master_reg_ptr, master_reg_off,
+                        PKA_MASTER_SEQ_CTRL_CLEAR_COUNTERS_VAL);
+
+    // take the EIP-154 master controller out of reset.
+    pka_dev_io_write(master_reg_ptr, master_reg_off, 0);
+
+    return 0;
+}
+
+// Initialize ring. Set ring parameters and configure ring resources.
+// It returns 0 on success, a negative error code on failure.
+static int pka_dev_init_ring(pka_dev_ring_t *ring, uint32_t ring_id,
+                        pka_dev_shim_t *shim)
+{
+    int ret = 0;
+
+    pka_dev_res_t *ring_info_words_ptr;
+    pka_dev_res_t *ring_counters_ptr;
+    pka_dev_res_t *ring_window_ram_ptr;
+
+    uint32_t ring_words_off;
+    uint32_t ring_cntrs_off;
+    uint32_t ring_mem_off;
+    uint32_t ring_mem_base;
+
+    uint32_t shim_ring_id;
+    uint8_t  window_ram_split;
+
+    if (ring->status != PKA_DEV_RING_STATUS_UNDEFINED)
+    {
+        PKA_ERROR(PKA_DEV, "PKA ring must be undefined\n");
+        return -EPERM;
+    }
+
+    if (ring_id > PKA_MAX_NUM_RINGS - 1)
+    {
+        PKA_ERROR(PKA_DEV, "invalid ring identifier\n");
+        return -EINVAL;
+    }
+
+    ring->ring_id        = ring_id;
+    ring->shim           = shim;
+    ring->resources_num  = PKA_MAX_NUM_RING_RESOURCES;
+
+    shim_ring_id              = ring_id % PKA_MAX_NUM_IO_BLOCK_RINGS;
+    shim->rings[shim_ring_id] = ring;
+
+    // Configure ring information control/status words resource
+    ring_info_words_ptr         = &ring->resources.info_words;
+    ring_words_off              = shim_ring_id * PKA_RING_WORDS_SPACING;
+    ring_info_words_ptr->base   = ring_words_off + shim->mem_res.eip154_base +
+                                  PKA_RING_WORDS_ADDR;
+    ring_info_words_ptr->size   = PKA_RING_WORDS_SIZE;
+    ring_info_words_ptr->type   = PKA_DEV_RES_TYPE_MEM;
+    ring_info_words_ptr->status = PKA_DEV_RES_STATUS_UNMAPPED;
+    ring_info_words_ptr->name   = "PKA_RING_INFO";
+
+    // Configure ring counters registers resource
+    ring_counters_ptr           = &ring->resources.counters;
+    ring_cntrs_off              = shim_ring_id * PKA_RING_CNTRS_SPACING;
+    ring_counters_ptr->base     = ring_cntrs_off + shim->mem_res.eip154_base +
+                                  PKA_RING_CNTRS_ADDR;
+    ring_counters_ptr->size     = PKA_RING_CNTRS_SIZE;
+    ring_counters_ptr->type     = PKA_DEV_RES_TYPE_REG;
+    ring_counters_ptr->status   = PKA_DEV_RES_STATUS_UNMAPPED;
+    ring_counters_ptr->name     = "PKA_RING_CNTRS";
+
+    // Configure ring window RAM resource
+    window_ram_split = shim->window_ram_split;
+    if (window_ram_split == PKA_SHIM_WINDOW_RAM_SPLIT_ENABLED)
+    {
+        ring_mem_off  = shim_ring_id * PKA_RING_MEM_1_SPACING;
+        ring_mem_base = ring_mem_off + shim->mem_res.alt_wndw_ram_0_base;
+    }
+    else
+    {
+        ring_mem_off  = shim_ring_id * PKA_RING_MEM_0_SPACING;
+        ring_mem_base = ring_mem_off + shim->mem_res.wndw_ram_base;
+    }
+
+    ring_window_ram_ptr         = &ring->resources.window_ram;
+    ring_window_ram_ptr->base   = ring_mem_base;
+    ring_window_ram_ptr->size   = PKA_RING_MEM_SIZE;
+    ring_window_ram_ptr->type   = PKA_DEV_RES_TYPE_MEM;
+    ring_window_ram_ptr->status = PKA_DEV_RES_STATUS_UNMAPPED;
+    ring_window_ram_ptr->name   = "PKA_RING_WINDOW";
+
+    ring->ring_info = kzalloc(sizeof(pka_dev_hw_ring_info_t), GFP_KERNEL);
+    if (!ring->ring_info)
+    {
+        PKA_ERROR(PKA_DEV, "unable to kmalloc\n");
+        kfree(ring->ring_info);
+        return -ENOMEM;
+    }
+
+    mutex_init(&ring->mutex);
+    ring->status  = PKA_DEV_RING_STATUS_INITIALIZED;
+
+    return ret;
+}
+
+// Release a given Ring.
+static int pka_dev_release_ring(pka_dev_ring_t *ring)
+{
+    int ret = 0;
+
+    pka_dev_shim_t *shim;
+    uint32_t        shim_ring_id;
+
+    if (ring->status == PKA_DEV_RING_STATUS_UNDEFINED)
+        return ret;
+
+    if (ring->status == PKA_DEV_RING_STATUS_BUSY)
+    {
+        PKA_ERROR(PKA_DEV, "PKA ring is busy\n");
+        return -EBUSY;
+    }
+
+    shim = ring->shim;
+
+    if (shim->status == PKA_SHIM_STATUS_RUNNING)
+    {
+        PKA_ERROR(PKA_DEV, "PKA shim is running\n");
+        return -EPERM;
+    }
+
+    pka_dev_unset_resource_config(shim, &ring->resources.info_words);
+    pka_dev_unset_resource_config(shim, &ring->resources.counters);
+    pka_dev_unset_resource_config(shim, &ring->resources.window_ram);
+
+    kfree(ring->ring_info);
+
+    ring->status = PKA_DEV_RING_STATUS_UNDEFINED;
+    shim_ring_id = ring->ring_id % PKA_MAX_NUM_IO_BLOCK_RINGS;
+    shim->rings[shim_ring_id] = NULL;
+    shim->rings_num--;
+
+    return ret;
+}
+
+// Partition the window RAM for a given PKA ring.  Here we statically divide
+// the 16K memory region into three partitions:  First partition is reserved
+// for command descriptor ring (1K), second partition is reserved for result
+// descriptor ring (1K), and the remaining 14K are reserved for vector data.
+// Through this memroy partition scheme, command/result descriptor rings hold
+// a total of 1KB/64B = 16 descriptors each. The adresses for the rings start
+// at offset 0x3800.  Also note that it is possible to have rings full while
+// the vector data can support more data,  the opposite can also happen, but
+// it is not suitable. For instance ECC point multiplication requires 8 input
+// vectors and 2 output vectors, a total of 10 vectors. If each vector has a
+// length of 24 words (24x4B = 96B), we can process 14KB/960B = 14 operations
+// which is close to 16 the total descriptors supported by rings. On the other
+// hand, using 12K vector data region, allows to process only 12 operations,
+// while rings can hold 32 descriptors (ring usage is significantly low).
+// For ECDSA verify, we have 12 vectors which require 1152B, with 14KB we can
+// handle 12 operations, against 10 operations with 12KB vector data memory.
+// We believe that the aformentionned memory partition help us to leverage
+// the trade-off between supported descriptors and required vectors. Note
+// that these examples gives approximative values and does not include buffer
+// word padding across vectors.
+//
+// The function also writes the result descriptor rings base addresses, size
+// and type, and initialize the read and write pointers and statistics. It
+// returns 0 on success, a negative error code on failure.
+//
+// This function must be called once per ring, at initialization before any
+// other fonctions are called.
+static int pka_dev_partition_mem(pka_dev_ring_t *ring)
+{
+    int ret = 0;
+
+    pka_dev_shim_t         *shim;
+    pka_dev_hw_ring_info_t *ring_info;
+
+    uint32_t ring_mem_base;
+    uint32_t ring_mem_size;
+    uint32_t data_mem_base;
+    uint32_t data_mem_size;
+
+    uint64_t cmd_desc_ring_base;
+    uint32_t cmd_desc_ring_size;
+    uint64_t rslt_desc_ring_base;
+    uint32_t rslt_desc_ring_size;
+
+    uint16_t num_cmd_desc;
+    uint16_t host_desc_size;
+    uint8_t  ring_in_order;
+
+    uint64_t window_ram_base;
+    uint64_t window_ram_size;
+
+    shim = ring->shim;
+
+    if (!ring->shim ||
+            ring->status != PKA_DEV_RING_STATUS_INITIALIZED)
+        return -EPERM;
+
+    ring_in_order   = shim->ring_type;
+    window_ram_base = ring->resources.window_ram.base;
+    window_ram_size = ring->resources.window_ram.size;
+    // Partition ring memory.  Give ring pair (cmmd descriptor ring and rslt
+    // descriptor ring) an equal portion of the memory.  The cmmd descriptor
+    // ring and result descriptor ring are used as "non-overlapping" ring.
+    // Currently set aside 1/8 of the window RAM for command/result descriptor
+    // rings - giving a total of 1K/64B = 16 descriptors per ring.
+    // The remaining memory is "Data Memory" - i.e. memory to hold the command
+    // operands and results - also called input/output vectors (in all cases
+    // these vectors are just single large integers - often in the range of
+    // hundreds to thousands of bits long).
+    ring_mem_size  = PKA_WINDOW_RAM_RING_MEM_SIZE / 2;
+    data_mem_size  = PKA_WINDOW_RAM_DATA_MEM_SIZE;
+    data_mem_base  = window_ram_base;
+    ring_mem_base  = data_mem_base + data_mem_size;
+
+    num_cmd_desc   = ring_mem_size / CMD_DESC_SIZE;
+    host_desc_size = CMD_DESC_SIZE / BYTES_PER_WORD;
+
+    cmd_desc_ring_size  = num_cmd_desc * CMD_DESC_SIZE;
+    rslt_desc_ring_size = cmd_desc_ring_size;
+
+    ring->num_cmd_desc  = num_cmd_desc;
+
+    // The command and result descriptor rings may be placed at different
+    // (non-overlapping) locations in Window RAM memory space. PKI command
+    // interface: Most of the functionality is defined by the EIP-154 master
+    // firmware on the EIP-154 master controller Sequencer.
+    cmd_desc_ring_base  = ring_mem_base;
+    rslt_desc_ring_base = ring_mem_base + cmd_desc_ring_size;
+
+    cmd_desc_ring_base  =
+            PKA_RING_MEM_ADDR(window_ram_base, shim->mem_res.wndw_ram_off_mask,
+                              cmd_desc_ring_base, window_ram_size);
+    rslt_desc_ring_base =
+            PKA_RING_MEM_ADDR(window_ram_base, shim->mem_res.wndw_ram_off_mask,
+                              rslt_desc_ring_base, window_ram_size);
+
+    ring_info = ring->ring_info;
+    // Fill ring information.
+    ring_info->cmmd_base      = cmd_desc_ring_base;
+    ring_info->rslt_base      = rslt_desc_ring_base;
+    ring_info->size           = num_cmd_desc - 1;
+    ring_info->host_desc_size = host_desc_size;
+    ring_info->in_order       = ring_in_order;
+    ring_info->cmmd_rd_ptr    = 0x0;
+    ring_info->rslt_wr_ptr    = 0x0;
+    ring_info->cmmd_rd_stats  = 0x0;
+    ring_info->rslt_wr_stats  = 0x0;
+
+    return ret;
+}
+
+// Write the ring base address, ring size and type, and initialize (clear)
+// the read and write pointers and statistics.
+static int pka_dev_write_ring_info(pka_dev_res_t *buffer_ram_ptr,
+                                   uint8_t        ring_id,
+                                   uint32_t       ring_cmmd_base_val,
+                                   uint32_t       ring_rslt_base_val,
+                                   uint32_t       ring_size_type_val)
+{
+    uint32_t  ring_spacing;
+    uint64_t  word_off;
+    int       ret = 0;
+
+    if (buffer_ram_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            buffer_ram_ptr->type != PKA_DEV_RES_TYPE_MEM)
+        return -EPERM;
+
+    PKA_DEBUG(PKA_DEV, "Writing ring information control/status words\n");
+
+    ring_spacing = ring_id * PKA_RING_WORDS_SPACING;
+
+    // Write the command ring base address  that  the  EIP-154
+    // master firmware uses with the command ring read pointer
+    // to get command descriptors from the Host ring. After the
+    // initialization, although the word is writeable it should
+    // be regarded as read-only.
+    word_off = pka_dev_get_word_offset(buffer_ram_ptr->base,
+                                    RING_CMMD_BASE_0_ADDR + ring_spacing,
+                                    PKA_BUFFER_RAM_SIZE);
+    pka_dev_io_write(buffer_ram_ptr->ioaddr, word_off, ring_cmmd_base_val);
+
+    // Write the result  ring base address  that  the  EIP-154
+    // master firmware uses with the result ring write pointer
+    // to put the result descriptors in the Host ring.   After
+    // the initialization,  although the word is writeable  it
+    // should be regarded as read-only.
+    word_off = pka_dev_get_word_offset(buffer_ram_ptr->base,
+                                    RING_RSLT_BASE_0_ADDR + ring_spacing,
+                                    PKA_BUFFER_RAM_SIZE);
+    pka_dev_io_write(buffer_ram_ptr->ioaddr, word_off, ring_rslt_base_val);
+
+    // Write the ring size (number of descriptors), the size of
+    // the descriptor and the result reporting scheme. After the
+    // initialization,  although the word is writeable it should
+    // be regarded as read-only.
+    word_off = pka_dev_get_word_offset(buffer_ram_ptr->base,
+                                    RING_SIZE_TYPE_0_ADDR + ring_spacing,
+                                    PKA_BUFFER_RAM_SIZE);
+    pka_dev_io_write(buffer_ram_ptr->ioaddr, word_off, ring_size_type_val);
+
+    // Write the command and result ring indices that the  EIP-154
+    // master firmware uses. This word should be written with zero
+    // when the ring information is initialized.  After the
+    // initialization, although the word is writeable it should be
+    // regarded as read-only.
+    word_off = pka_dev_get_word_offset(buffer_ram_ptr->base,
+                                    RING_RW_PTRS_0_ADDR + ring_spacing,
+                                    PKA_BUFFER_RAM_SIZE);
+    pka_dev_io_write(buffer_ram_ptr->ioaddr, word_off, 0);
+
+    // Write the ring statistics   (two 16-bit counters,  one for
+    // commands and one for results) from EIP-154 master firmware
+    // point of view.  This word should be written with zero when
+    // the ring information is initialized.  After the initializa-
+    // -tion, although the word is writeable it should be regarded
+    // as read-only.
+    word_off = pka_dev_get_word_offset(buffer_ram_ptr->base,
+                                    RING_RW_STAT_0_ADDR + ring_spacing,
+                                    PKA_BUFFER_RAM_SIZE);
+    pka_dev_io_write(buffer_ram_ptr->ioaddr, word_off, 0);
+
+    return ret;
+}
+
+// Set up the control/status words. Upon a PKI command the EIP-154 master
+// firmware will read and partially update the ring information.
+static int pka_dev_set_ring_info(pka_dev_ring_t *ring)
+{
+    int ret = 0;
+
+    pka_dev_shim_t         *shim;
+    pka_dev_hw_ring_info_t *ring_info;
+    pka_dev_res_t          *buffer_ram_ptr;
+
+    uint32_t ring_cmmd_base_val;
+    uint32_t ring_rslt_base_val;
+    uint32_t ring_size_type_val;
+
+    uint8_t  ring_id;
+
+    shim = ring->shim;
+    // Ring info configuration MUST be done when the PKA ring
+    // is initilaized.
+    if ((shim->status != PKA_SHIM_STATUS_INITIALIZED &&
+         shim->status != PKA_SHIM_STATUS_RUNNING     &&
+         shim->status != PKA_SHIM_STATUS_STOPPED)    ||
+            ring->status != PKA_DEV_RING_STATUS_INITIALIZED)
+        return -EPERM;
+
+    ring_id = ring->ring_id % PKA_MAX_NUM_IO_BLOCK_RINGS;
+
+    // Partition ring memory.
+    ret = pka_dev_partition_mem(ring);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to initialize ring memory\n");
+        return ret;
+    }
+
+    // Fill ring infomation.
+    ring_info = ring->ring_info;
+
+    ring_cmmd_base_val  = ring_info->cmmd_base;
+    ring_rslt_base_val  = ring_info->rslt_base;
+
+    ring_size_type_val  = (ring_info->in_order       & 0x0001) << 31;
+    ring_size_type_val |= (ring_info->host_desc_size & 0x03FF) << 18;
+    ring_size_type_val |= (ring->num_cmd_desc - 1)   & 0xFFFF;
+
+    buffer_ram_ptr = &shim->resources.buffer_ram;
+    // Write ring information status/control words in the PKA Buffer RAM
+    ret = pka_dev_write_ring_info(buffer_ram_ptr, ring_id, ring_cmmd_base_val,
+                                    ring_rslt_base_val, ring_size_type_val);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to wirte ring information\n");
+        return ret;
+    }
+
+    ring->status = PKA_DEV_RING_STATUS_READY;
+
+    return ret;
+}
+
+// Create shim. Set shim parameters and configure shim resources.
+// It returns 0 on success, a negative error code on failure.
+static int pka_dev_create_shim(pka_dev_shim_t *shim, uint32_t shim_id,
+                               uint8_t split, struct pka_dev_mem_res *mem_res)
+{
+    int ret = 0;
+
+    uint64_t reg_base;
+    uint64_t reg_size;
+
+    if (shim->status == PKA_SHIM_STATUS_CREATED)
+        return ret;
+
+    if (shim->status != PKA_SHIM_STATUS_UNDEFINED)
+    {
+        PKA_ERROR(PKA_DEV, "PKA device must be undefined\n");
+        return -EPERM;
+    }
+
+    if (shim_id > PKA_MAX_NUM_IO_BLOCKS - 1)
+    {
+        PKA_ERROR(PKA_DEV, "invalid shim identifier\n");
+        return -EINVAL;
+    }
+
+    shim->shim_id    = shim_id;
+    shim->mem_res    = *mem_res;
+
+    if (split)
+        shim->window_ram_split = PKA_SHIM_WINDOW_RAM_SPLIT_ENABLED;
+    else
+        shim->window_ram_split = PKA_SHIM_WINDOW_RAM_SPLIT_DISABLED;
+
+    shim->ring_type     = PKA_RING_TYPE_IN_ORDER;
+    shim->ring_priority = PKA_RING_OPTIONS_PRIORITY;
+    shim->rings_num     = PKA_MAX_NUM_IO_BLOCK_RINGS;
+    shim->rings = kzalloc(sizeof(pka_dev_ring_t) * shim->rings_num,
+                                GFP_KERNEL);
+    if (!shim->rings)
+    {
+        PKA_ERROR(PKA_DEV, "unable to kmalloc\n");
+        return -ENOMEM;
+    }
+
+    // Set PKA device Buffer RAM config
+    ret = pka_dev_set_resource_config(shim, &shim->resources.buffer_ram,
+                                      PKA_BUFFER_RAM_BASE,
+                                      PKA_BUFFER_RAM_SIZE,
+                                      PKA_DEV_RES_TYPE_MEM,
+                                      "PKA_BUFFER_RAM");
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "unable to set Buffer RAM config\n");
+        return ret;
+    }
+
+    // Set PKA device Master Program RAM config
+    ret = pka_dev_set_resource_config(shim, &shim->resources.master_prog_ram,
+                                      PKA_MASTER_PROG_RAM_BASE,
+                                      PKA_MASTER_PROG_RAM_SIZE,
+                                      PKA_DEV_RES_TYPE_MEM,
+                                      "PKA_MASTER_PROG_RAM");
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "unable to set Master Program RAM config\n");
+        return ret;
+    }
+
+    // Set PKA device Master Controller register
+    reg_size = PAGE_SIZE;
+    reg_base = pka_dev_get_register_base(shim->mem_res.eip154_base,
+                                         PKA_MASTER_SEQ_CTRL_ADDR);
+    ret = pka_dev_set_resource_config(shim, &shim->resources.master_seq_ctrl,
+                                      reg_base, reg_size,
+                                      PKA_DEV_RES_TYPE_REG,
+                                      "PKA_MASTER_SEQ_CTRL");
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "unable to set Master Controller register "
+                                    "config\n");
+        return ret;
+    }
+
+    // Set PKA device AIC registers
+    reg_size = PAGE_SIZE;
+    reg_base = pka_dev_get_register_base(shim->mem_res.eip154_base,
+                                         AIC_POL_CTRL_ADDR);
+    ret = pka_dev_set_resource_config(shim, &shim->resources.aic_csr,
+                                      reg_base, reg_size,
+                                      PKA_DEV_RES_TYPE_REG,
+                                      "PKA_AIC_CSR");
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "unable to set AIC registers config\n");
+        return ret;
+    }
+
+    // Set PKA device TRNG registers
+    reg_size = PAGE_SIZE;
+    reg_base = pka_dev_get_register_base(shim->mem_res.eip154_base,
+                                         TRNG_OUTPUT_0_ADDR);
+    ret = pka_dev_set_resource_config(shim, &shim->resources.trng_csr,
+                                      reg_base, reg_size,
+                                      PKA_DEV_RES_TYPE_REG,
+                                      "PKA_TRNG_CSR");
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "unable to setup the TRNG\n");
+        return ret;
+    }
+
+    // Set PKA device 'glue' logic registers
+    reg_size = PAGE_SIZE;
+    reg_base = pka_dev_get_register_base(shim->mem_res.csr_base,
+                                         PKA_INT_MASK_ADDR);
+    ret = pka_dev_set_resource_config(shim, &shim->resources.ext_csr,
+                                      reg_base, reg_size,
+                                      PKA_DEV_RES_TYPE_REG,
+                                      "PKA_EXT_CSR");
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "unable to setup the MiCA specific registers\n");
+        return ret;
+    }
+
+    shim->status = PKA_SHIM_STATUS_CREATED;
+
+    return ret;
+}
+
+// Delete shim and unset shim resources.
+static int pka_dev_delete_shim(pka_dev_shim_t *shim)
+{
+    int ret = 0;
+    pka_dev_res_t *res_buffer_ram, *res_master_prog_ram;
+    pka_dev_res_t *res_master_seq_ctrl, *res_aic_csr, *res_trng_csr;
+
+    PKA_DEBUG(PKA_DEV, "PKA device delete shim\n");
+
+    if (shim->status == PKA_SHIM_STATUS_UNDEFINED)
+        return ret;
+
+    if (shim->status != PKA_SHIM_STATUS_FINALIZED &&
+            shim->status != PKA_SHIM_STATUS_CREATED)
+    {
+        PKA_ERROR(PKA_DEV, "PKA device status must be finalized\n");
+        return -EPERM;
+    }
+
+    res_buffer_ram      = &shim->resources.buffer_ram;
+    res_master_prog_ram = &shim->resources.master_prog_ram;
+    res_master_seq_ctrl = &shim->resources.master_seq_ctrl;
+    res_aic_csr         = &shim->resources.aic_csr;
+    res_trng_csr        = &shim->resources.trng_csr;
+
+    pka_dev_unset_resource_config(shim, res_buffer_ram);
+    pka_dev_unset_resource_config(shim, res_master_prog_ram);
+    pka_dev_unset_resource_config(shim, res_master_seq_ctrl);
+    pka_dev_unset_resource_config(shim, res_aic_csr);
+    pka_dev_unset_resource_config(shim, res_trng_csr);
+
+    kfree(shim->rings);
+
+    shim->status = PKA_SHIM_STATUS_UNDEFINED;
+
+    return ret;
+}
+
+static int pka_dev_config_aic_interrupts(pka_dev_res_t *aic_csr_ptr)
+{
+    int ret = 0;
+
+    uint64_t  csr_reg_base, csr_reg_off;
+    void     *csr_reg_ptr;
+
+    if (aic_csr_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            aic_csr_ptr->type != PKA_DEV_RES_TYPE_REG)
+        return -EPERM;
+
+    PKA_DEBUG(PKA_DEV, "configure the AIC so that all interrupts "
+                "are properly recognized\n");
+
+    csr_reg_base = aic_csr_ptr->base;
+    csr_reg_ptr  = aic_csr_ptr->ioaddr;
+
+    // Configure the signal polarity for each interrupt.
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, AIC_POL_CTRL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_AIC_POL_CTRL_REG_VAL);
+
+    // Configure the signal type for each interrupt
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, AIC_TYPE_CTRL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_AIC_TYPE_CTRL_REG_VAL);
+
+    // Set the enable control register
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, AIC_ENABLE_CTRL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_AIC_ENABLE_CTRL_REG_VAL);
+
+    // Set the enabled status register
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, AIC_ENABLED_STAT_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_AIC_ENABLE_STAT_REG_VAL);
+
+    // *TBD* Write PKA_INT_MASK_RESET with 1's for each interrupt bit
+    // to allow them to propagate out the interrupt controller.
+    // EIP-154 interrupts can still be programmed and observed via polling
+    // regardless of whether PKA_INT_MASK is masking out the interrupts or
+    // not. The mask is for system propagation, i.e. propagate to the GIC.
+    // Bit positions are as follows:
+    //  Bit  10   - parity_error_irq (non EIP-154 interrupt)
+    //  Bit   9   - trng_irq
+    //  Bit   8   - pka_master_irq
+    //  Bits  7:4 - pka_queue_*_result_irq
+    //  Bits  3:0 - pka_queue_*_empty_irq
+
+    return ret;
+}
+
+static int pka_dev_load_image(pka_dev_res_t *res_ptr, const uint32_t *data_buf,
+                                    uint32_t size)
+{
+    uint64_t data_rd;
+    int      mismatches;
+    int      i, j, ret = 0;
+
+    if (res_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            res_ptr->type != PKA_DEV_RES_TYPE_MEM)
+        return -EPERM;
+
+    // Note that the image size is in word of 4 bytes and memory 'writes'
+    // are 8 bytes aligned, thus the memory start address and end address
+    // are shifted.
+    if (res_ptr->size < (size * BYTES_PER_WORD) << 1)
+    {
+        PKA_ERROR(PKA_DEV, "image size greater than memory size\n");
+        return -EINVAL;
+    }
+
+    for (i = 0, j = 0; i < size; i++, j += BYTES_PER_DOUBLE_WORD)
+        pka_dev_io_write(res_ptr->ioaddr, j,
+                            (uint64_t) data_buf[i]);
+
+    mismatches = 0;
+    PKA_DEBUG(PKA_DEV, "PKA DEV: verifying image (%u words)\n", size);
+    for (i = 0, j = 0; i < size; i++, j += BYTES_PER_DOUBLE_WORD)
+    {
+        data_rd = pka_dev_io_read(res_ptr->ioaddr, j);
+        if (data_rd != (uint64_t) data_buf[i])
+        {
+            mismatches += 1;
+            PKA_DEBUG(PKA_DEV, "error while loading image: "
+                    "addr:0x%llx expected data: 0x%x actual data: 0x%llx\n",
+                    res_ptr->base + j,
+                    data_buf[i], data_rd);
+        }
+    }
+
+    if (mismatches > 0)
+    {
+        PKA_PANIC(PKA_DEV, "error while loading image: mismatches: %d\n",
+                        mismatches);
+        return -EAGAIN;
+    }
+
+    return ret;
+}
+
+static int
+pka_dev_config_master_seq_controller(pka_dev_shim_t *shim,
+                                     pka_dev_res_t *master_seq_ctrl_ptr)
+{
+    pka_dev_res_t  *aic_csr_ptr, *master_prog_ram;
+    void           *aic_reg_ptr, *master_reg_ptr;
+
+    uint64_t        aic_reg_base, aic_reg_off;
+    uint64_t        master_reg_base, master_reg_off;
+
+    const uint32_t *boot_img_ptr, *master_img_ptr;
+    uint32_t        boot_img_size, master_img_size;
+
+    uint32_t        pka_master_irq;
+
+    uint64_t        timer;
+    uint8_t         status_bits;
+    uint8_t         shim_fw_id;
+    int             ret = 0;
+
+    if (master_seq_ctrl_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            master_seq_ctrl_ptr->type != PKA_DEV_RES_TYPE_REG)
+        return -EPERM;
+
+    master_reg_base = master_seq_ctrl_ptr->base;
+    master_reg_ptr  = master_seq_ctrl_ptr->ioaddr;
+    master_reg_off  = pka_dev_get_register_offset(master_reg_base,
+                                                    PKA_MASTER_SEQ_CTRL_ADDR);
+
+    PKA_DEBUG(PKA_DEV, "push the EIP-154 master controller into reset\n");
+    pka_dev_io_write(master_reg_ptr, master_reg_off,
+                            PKA_MASTER_SEQ_CTRL_RESET_VAL);
+
+    shim_fw_id = pka_firmware_get_id();
+
+    // Load boot image into PKA_MASTER_PROG_RAM
+    boot_img_size = pka_firmware_array[shim_fw_id].boot_img_size;
+    PKA_DEBUG(PKA_DEV, "loading boot image (%d words)\n", boot_img_size);
+
+    boot_img_ptr = pka_firmware_array[shim_fw_id].boot_img;
+    ret = pka_dev_load_image(&shim->resources.master_prog_ram,
+                                boot_img_ptr, boot_img_size);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to load boot image\n");
+        return ret;
+    }
+
+    PKA_DEBUG(PKA_DEV, "take the EIP-154 master controller out of reset\n");
+    pka_dev_io_write(master_reg_ptr, master_reg_off, 0);
+
+    // Poll for 'pka_master_irq' bit in AIC_ENABLED_STAT register to indicate
+    // sequencer is initialized
+    aic_csr_ptr = &shim->resources.aic_csr;
+    if (aic_csr_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            aic_csr_ptr->type != PKA_DEV_RES_TYPE_REG)
+        return -EPERM;
+
+    aic_reg_base = aic_csr_ptr->base;
+    aic_reg_ptr  = aic_csr_ptr->ioaddr;
+    aic_reg_off  = pka_dev_get_register_offset(aic_reg_base,
+                                                AIC_ENABLED_STAT_ADDR);
+
+    pka_master_irq = 0;
+    PKA_DEBUG(PKA_DEV, "poll for 'pka_master_irq'\n");
+    timer = pka_dev_timer_start(100000);       // 100 msec
+    while (pka_master_irq == 0)
+    {
+        pka_master_irq |= pka_dev_io_read(aic_reg_ptr, aic_reg_off)
+                                & PKA_AIC_ENABLED_STAT_MASTER_IRQ_MASK;
+        if (pka_dev_timer_done(timer))
+        {
+            //PKA_PANIC(PKA_DEV, "failed to load firmware\n");
+            return -EAGAIN;
+        }
+    }
+    PKA_DEBUG(PKA_DEV, "'pka_master_irq' is active\n");
+
+    // Verify that the EIP-154 boot firmware has finished without errors
+    status_bits = (uint8_t)((pka_dev_io_read(master_reg_ptr,
+                        master_reg_off) >> PKA_MASTER_SEQ_CTRL_MASTER_IRQ_BIT)
+                        & 0xff);
+    if (status_bits != PKA_MASTER_SEQ_CTRL_STATUS_BYTE)
+    {
+        // If the error indication (bit [15]) is set,
+        // the EIP-154 boot firmware encountered an error and is stopped.
+        if ((status_bits >> (PKA_MASTER_SEQ_CTRL_MASTER_IRQ_BIT - 1)) == 1)
+        {
+            PKA_ERROR(PKA_DEV,
+                "boot firmware encountered an error 0x%x and is stopped\n",
+                 status_bits);
+            return -EAGAIN;
+        }
+        PKA_DEBUG(PKA_DEV, "boot firmware in progress %d", status_bits);
+    }
+    PKA_DEBUG(PKA_DEV, "boot firmware has finished successfully\n");
+
+    PKA_DEBUG(PKA_DEV, "push the EIP-154 master controller into reset\n");
+    pka_dev_io_write(master_reg_ptr, master_reg_off,
+                        PKA_MASTER_SEQ_CTRL_RESET_VAL);
+
+    // Load Master image into PKA_MASTER_PROG_RAM
+    master_img_size = pka_firmware_array[shim_fw_id].master_img_size;
+    PKA_DEBUG(PKA_DEV, "loading master image (%d words)\n",
+                master_img_size);
+    master_prog_ram = &shim->resources.master_prog_ram;
+    master_img_ptr = pka_firmware_array[shim_fw_id].master_img;
+    ret = pka_dev_load_image(master_prog_ram, master_img_ptr,
+                                master_img_size);
+    if (ret)
+    {
+        pr_err("PKA DEV: failed to load master image\n");
+        return ret;
+    }
+
+    PKA_DEBUG(PKA_DEV, "take the EIP-154 master controller out of reset\n");
+    pka_dev_io_write(master_reg_ptr, master_reg_off, 0);
+
+    return ret;
+}
+
+// Configure ring options.
+static int pka_dev_config_ring_options(pka_dev_res_t *buffer_ram_ptr,
+                                    uint32_t rings_num, uint8_t ring_priority)
+{
+    uint64_t control_word;
+    uint64_t word_off;
+    int      ret = 0;
+
+    if (buffer_ram_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            buffer_ram_ptr->type != PKA_DEV_RES_TYPE_MEM)
+        return -EPERM;
+
+    if (rings_num > PKA_MAX_NUM_RINGS ||
+            rings_num < 1)
+    {
+        PKA_ERROR(PKA_DEV, "invalid rings number\n");
+        return -EINVAL;
+    }
+
+    PKA_DEBUG(PKA_DEV, "Configure PKA ring options control word\n");
+
+    // Write PKA_RING_OPTIONS control word located in the PKA_BUFFER_RAM. The
+    // value of this word is determined by the PKA I/O block (Shim). Set the
+    // number of implemented command/result ring pairs that is available in
+    // this EIP-154, encoded as binary value, which is 4.
+    control_word  = (uint64_t) 0x0;
+    control_word |= ring_priority & 0xff;
+    control_word |= ((rings_num - 1) << 8) & 0xff00;
+    control_word |= (PKA_RING_OPTIONS_SIGNATURE_BYTE << 24) & 0xff000000;
+    word_off = pka_dev_get_word_offset(buffer_ram_ptr->base,
+                                PKA_RING_OPTIONS_ADDR, PKA_BUFFER_RAM_SIZE);
+    pka_dev_io_write(buffer_ram_ptr->ioaddr, word_off, control_word);
+
+    return ret;
+}
+
+static int pka_dev_config_trng_clk(pka_dev_res_t *aic_csr_ptr)
+{
+    int ret = 0;
+
+    uint64_t  csr_reg_base, csr_reg_off;
+    uint64_t  timer;
+    uint32_t  trng_clk_en = 0;
+    void     *csr_reg_ptr;
+
+    if (aic_csr_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            aic_csr_ptr->type != PKA_DEV_RES_TYPE_REG)
+        return -EPERM;
+
+    PKA_DEBUG(PKA_DEV, "Turn on TRNG clock\n");
+
+    csr_reg_base = aic_csr_ptr->base;
+    csr_reg_ptr  = aic_csr_ptr->ioaddr;
+
+    // Enable the TRNG clock in PKA_CLK_FORCE.
+    // In general, this register should be left in its default state of all
+    // zeroes! Only when the TRNG is directly controlled via the Host slave
+    // interface, the engine needs to be turned on using the ’trng_clk_on’
+    // bit in this register. In case the TRNG is controlled via internal
+    // firmware, this is not required.
+    csr_reg_off =
+        pka_dev_get_register_offset(csr_reg_base, PKA_CLK_FORCE_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_CLK_FORCE_TRNG_ON);
+    // Check whether the system clock for TRNG engine is enabled. The clock
+    // MUST be running to provide access to the TRNG.
+    timer = pka_dev_timer_start(100000); // 100 msec
+    while (trng_clk_en == 0)
+    {
+        trng_clk_en |= pka_dev_io_read(csr_reg_ptr, csr_reg_off)
+                                & PKA_CLK_FORCE_TRNG_ON;
+        if (pka_dev_timer_done(timer))
+        {
+            PKA_DEBUG(PKA_DEV, "Failed to enable TRNG clock\n");
+            return -EAGAIN;
+        }
+    }
+    PKA_DEBUG(PKA_DEV, "'trng_clk_on' is enabled\n");
+
+    return ret;
+}
+
+static int pka_dev_trng_wait_test_ready(void *csr_reg_ptr, uint64_t csr_reg_base)
+{
+    uint64_t csr_reg_off, timer, test_ready, csr_reg_val;
+
+    test_ready  = 0;
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_STATUS_ADDR);
+    timer       = pka_dev_timer_start(1000000); // 1000 ms
+
+    while (!test_ready)
+    {
+        csr_reg_val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+        test_ready  = csr_reg_val & PKA_TRNG_STATUS_TEST_READY;
+
+        if (pka_dev_timer_done(timer))
+        {
+            PKA_DEBUG(PKA_DEV, "TRNG: TEST ready timer done, 0x%llx\n", csr_reg_val);
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+static int pka_dev_trng_enable_test(void *csr_reg_ptr, uint64_t csr_reg_base,
+                                    uint32_t test)
+{
+    uint64_t csr_reg_val, csr_reg_off;
+
+    //  Set the ‘test_mode’ bit in the TRNG_CONTROL register and the
+    //  ‘test_known_noise’ bit in the TRNG_TEST register – this will
+    //  immediately set the ‘test_ready’ bit (in the TRNG_STATUS register)
+    //  to indicate that data can be written. It will also reset the
+    //  ‘monobit test’, ‘run test’ and ‘poker test’ circuits to their
+    //  initial states. Note that the TRNG need not be enabled for this
+    //  test.
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    csr_reg_val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off,
+                     csr_reg_val | PKA_TRNG_CONTROL_TEST_MODE);
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_TEST_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, test);
+
+    // Wait until the 'test_ready' bit is set
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_STATUS_ADDR);
+    do
+    {
+        csr_reg_val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+    } while((csr_reg_val & PKA_TRNG_STATUS_TEST_READY) == 0);
+
+    // Check whether the 'monobit test', 'run test' and 'poker test'
+    // are reset.
+    if (csr_reg_val & (PKA_TRNG_STATUS_MONOBIT_FAIL
+        | PKA_TRNG_STATUS_RUN_FAIL
+        | PKA_TRNG_STATUS_POKER_FAIL))
+    {
+        PKA_ERROR(PKA_DEV, "Test bits aren't reset, TRNG_STATUS:0x%llx\n",
+            csr_reg_val);
+        return -EAGAIN;
+    }
+
+    // Set 'stall_run_poker' bit to allow inspecting the state of the
+    // result counters which would otherwise be reset immediately for
+    // the next 20,000 bits block to test.
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_ALARMCNT_ADDR);
+    csr_reg_val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off,
+                     csr_reg_val | PKA_TRNG_ALARMCNT_STALL_RUN_POKER);
+
+    return 0;
+}
+
+static int pka_dev_trng_test_circuits(void *csr_reg_ptr, uint64_t csr_reg_base,
+                                      uint64_t datal, uint64_t datah,
+                                      int count, uint8_t add_half,
+                                      uint64_t *monobit_fail_cnt,
+                                      uint64_t *run_fail_cnt,
+                                      uint64_t *poker_fail_cnt)
+{
+    uint64_t status, csr_reg_off;
+    int test_idx, error;
+
+    if (monobit_fail_cnt == NULL || run_fail_cnt == NULL || poker_fail_cnt == NULL)
+        return -EINVAL;
+
+    error = 0;
+
+    for (test_idx = 0; test_idx < count; test_idx++)
+    {
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_RAW_L_ADDR);
+        pka_dev_io_write(csr_reg_ptr, csr_reg_off, datal);
+
+        if (add_half)
+        {
+            if (test_idx < count - 1)
+            {
+                csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_RAW_H_ADDR);
+                pka_dev_io_write(csr_reg_ptr, csr_reg_off, datah);
+            }
+        }
+        else
+        {
+            csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_RAW_H_ADDR);
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, datah);
+        }
+
+        // Wait until the ‘test_ready’ bit in the TRNG_STATUS register
+        // becomes ‘1’ again, signaling readiness for the next 64 bits
+        // of test data. At this point, the previous test data has
+        // been handled so the counter states can be inspected.
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_STATUS_ADDR);
+        do
+        {
+            status = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+        } while((status & PKA_TRNG_STATUS_TEST_READY) == 0);
+
+        // Check test status bits.
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_INTACK_ADDR);
+        if (status & PKA_TRNG_STATUS_MONOBIT_FAIL)
+        {
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_STATUS_MONOBIT_FAIL);
+            *monobit_fail_cnt += 1;
+        }
+        else if (status & PKA_TRNG_STATUS_RUN_FAIL)
+        {
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_STATUS_RUN_FAIL);
+            *run_fail_cnt += 1;
+        }
+        else if (status & PKA_TRNG_STATUS_POKER_FAIL)
+        {
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_STATUS_POKER_FAIL);
+            *poker_fail_cnt += 1;
+        }
+
+    }
+
+    error = (*monobit_fail_cnt || *poker_fail_cnt || *run_fail_cnt) ? -EIO : 0;
+
+    return error;
+}
+
+static void pka_dev_trng_disable_test(void *csr_reg_ptr, uint64_t csr_reg_base)
+{
+    uint64_t status, val, csr_reg_off;
+
+    // When done, clear the ‘test_known_noise’ bit in the TRNG_TEST
+    // register (will immediately clear the ‘test_ready’ bit in the
+    // TRNG_STATUS register and reset the ‘monobit test’, ‘run test’
+    // and ‘poker test’ circuits) and clear the ‘test_mode’ bit in
+    // the TRNG_CONTROL register.
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_TEST_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_STATUS_ADDR);
+    status = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+    if (status & PKA_TRNG_STATUS_TEST_READY)
+        PKA_PRINT(PKA_DEV, "Warning: Test ready bit is still set\n");
+
+    if (status & (PKA_TRNG_STATUS_MONOBIT_FAIL
+        | PKA_TRNG_STATUS_RUN_FAIL
+        | PKA_TRNG_STATUS_POKER_FAIL))
+        PKA_PRINT(PKA_DEV,
+            "Warning: Test bits are still set, TRNG_STATUS:0x%llx\n", status);
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off,
+        (val & ~PKA_TRNG_STATUS_TEST_READY));
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_ALARMCNT_ADDR);
+    val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off,
+        (val & ~PKA_TRNG_ALARMCNT_STALL_RUN_POKER));
+
+    return;
+}
+
+static int pka_dev_trng_test_known_answer_basic(void *csr_reg_ptr,
+                                                uint64_t csr_reg_base)
+{
+    int ret, cnt_idx, cnt_off;
+    uint64_t monobit_fail_cnt, run_fail_cnt, poker_fail_cnt, monobit_cnt;
+    uint64_t poker_cnt[4], csr_reg_off;
+    uint64_t poker_test_exp_cnt[4] = {
+        0x20f42bf4, 0xaf415f4, 0xf4f4fff4, 0xfff4f4f4
+    };
+
+    PKA_DEBUG(PKA_DEV, "Run known-answer test circuits\n");
+
+    monobit_fail_cnt = 0;
+    run_fail_cnt     = 0;
+    poker_fail_cnt   = 0;
+
+    ret = pka_dev_trng_enable_test(csr_reg_ptr, csr_reg_base,
+              PKA_TRNG_TEST_KNOWN_NOISE);
+    if (ret)
+        return ret;
+
+    ret = pka_dev_trng_test_circuits(csr_reg_ptr, csr_reg_base, 0x11111333,
+              0x3555779f, 11, 0, &monobit_fail_cnt, &run_fail_cnt,
+              &poker_fail_cnt);
+
+    ret |= pka_dev_trng_test_circuits(csr_reg_ptr, csr_reg_base, 0x01234567,
+               0x89abcdef, 302, 1, &monobit_fail_cnt, &run_fail_cnt,
+               &poker_fail_cnt);
+
+    PKA_DEBUG(PKA_DEV, "monobit_fail_cnt : 0x%llx\n", monobit_fail_cnt);
+    PKA_DEBUG(PKA_DEV, "poker_fail_cnt   : 0x%llx\n", poker_fail_cnt);
+    PKA_DEBUG(PKA_DEV, "run_fail_cnt     : 0x%llx\n", run_fail_cnt);
+
+    for (cnt_idx = 0, cnt_off = 0; cnt_idx < 4; cnt_idx++, cnt_off += 8)
+    {
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                          (TRNG_POKER_3_0_ADDR + cnt_off));
+        poker_cnt[cnt_idx] = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+    }
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                      TRNG_MONOBITCNT_ADDR);
+    monobit_cnt = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+    if (!ret)
+    {
+        if (memcmp(poker_cnt, poker_test_exp_cnt, sizeof(poker_test_exp_cnt)))
+        {
+            PKA_DEBUG(PKA_DEV, "invalid poker counters!\n");
+            ret = -EIO;
+        }
+
+        if (monobit_cnt != 9978)
+        {
+            PKA_DEBUG(PKA_DEV, "invalid sum of squares!\n");
+            ret = -EIO;
+        }
+    }
+
+    pka_dev_trng_disable_test(csr_reg_ptr, csr_reg_base);
+
+    return ret;
+}
+
+static int pka_dev_trng_test_known_answer_poker_fail(void *csr_reg_ptr,
+                                                     uint64_t csr_reg_base)
+{
+    uint64_t monobit_fail_cnt, run_fail_cnt, poker_fail_cnt;
+    int ret;
+
+    monobit_fail_cnt = 0;
+    run_fail_cnt     = 0;
+    poker_fail_cnt   = 0;
+
+    PKA_DEBUG(PKA_DEV, "Run known-answer test circuits (poker fail)\n");
+
+    pka_dev_trng_enable_test(csr_reg_ptr, csr_reg_base,
+        PKA_TRNG_TEST_KNOWN_NOISE);
+
+    // Ignore the return value here as it is expected that poker test should
+    // fail. Check failure counts thereafter to assert only poker test has failed.
+    pka_dev_trng_test_circuits(csr_reg_ptr, csr_reg_base, 0xffffffff,
+        0xffffffff, 11, 0, &monobit_fail_cnt, &run_fail_cnt, &poker_fail_cnt);
+
+    PKA_DEBUG(PKA_DEV, "monobit_fail_cnt : 0x%llx\n", monobit_fail_cnt);
+    PKA_DEBUG(PKA_DEV, "poker_fail_cnt   : 0x%llx\n", poker_fail_cnt);
+    PKA_DEBUG(PKA_DEV, "run_fail_cnt     : 0x%llx\n", run_fail_cnt);
+
+    if (poker_fail_cnt && !run_fail_cnt && !monobit_fail_cnt)
+        ret = 0;
+    else
+        ret = -EIO;
+
+    pka_dev_trng_disable_test(csr_reg_ptr, csr_reg_base);
+
+    return ret;
+}
+
+static int pka_dev_trng_test_unknown_answer(void *csr_reg_ptr,
+                                            uint64_t csr_reg_base)
+{
+    uint64_t datal, datah, csr_reg_off;
+    int ret, test_idx;
+
+    datah = 0;
+    datal = 0;
+    ret   = 0;
+
+    PKA_DEBUG(PKA_DEV, "Run unknown-answer self test\n");
+
+    // First reset, the RAW registers.
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                      TRNG_RAW_L_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                      TRNG_RAW_H_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    // There is a small probability for this test to fail,
+    // So run the test 10 times, if it succeeds once then
+    // assume that the test passed.
+    for (test_idx = 0; test_idx < 10; test_idx++)
+    {
+        pka_dev_trng_enable_test(csr_reg_ptr, csr_reg_base, PKA_TRNG_TEST_NOISE);
+
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                          TRNG_RAW_L_ADDR);
+        datal = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                          TRNG_RAW_H_ADDR);
+        datah = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+        PKA_DEBUG(PKA_DEV, "datal=0x%llx\n", datal);
+        PKA_DEBUG(PKA_DEV, "datah=0x%llx\n", datah);
+
+        if (!datah && !datal)
+        {
+            ret = -EIO;
+        }
+        else
+        {
+            ret = 0;
+            break;
+        }
+
+        pka_dev_trng_disable_test(csr_reg_ptr, csr_reg_base);
+    }
+
+    return ret;
+}
+
+// Test TRNG
+static int pka_dev_test_trng(void *csr_reg_ptr, uint64_t csr_reg_base)
+{
+    int ret;
+
+    ret = 0;
+
+    ret = pka_dev_trng_test_known_answer_basic(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+    ret = pka_dev_trng_test_known_answer_poker_fail(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+    ret = pka_dev_trng_test_unknown_answer(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+exit:
+    return ret;
+}
+
+static void pka_dev_trng_write_ps_ai_str(void *csr_reg_ptr,
+                                         uint64_t csr_reg_base,
+                                         uint32_t input_str[])
+{
+    uint64_t csr_reg_off;
+    int i;
+
+    for (i = 0; i < PKA_TRNG_PS_AI_REG_COUNT; i++)
+    {
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                          TRNG_PS_AI_0_ADDR + (i * 0x8));
+
+        pka_dev_io_write(csr_reg_ptr, csr_reg_off, input_str[i]);
+    }
+}
+
+static void pka_dev_trng_drbg_generate(void *csr_reg_ptr, uint64_t csr_reg_base)
+{
+    uint64_t csr_reg_off;
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_CONTROL_REQ_DATA_VAL);
+}
+
+static int pka_dev_test_trng_drbg(void *csr_reg_ptr, uint64_t csr_reg_base)
+{
+    uint64_t csr_reg_off, csr_reg_val;
+    int i, ret;
+
+    ret = 0;
+
+    // Make sure the engine is idle.
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    // Enable DRBG, TRNG need not be enabled for this test.
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_CONTROL_DRBG_ENABLE_VAL);
+
+    // Set 'test_sp_800_90' bit in the TRNG_TEST register
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_TEST_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_TEST_DRBG_VAL);
+
+    // Wait for 'test_ready' bit to be set.
+    ret = pka_dev_trng_wait_test_ready(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+    // Instantiate
+    pka_dev_trng_write_ps_ai_str(csr_reg_ptr, csr_reg_base, pka_trng_drbg_test_ps_str);
+    ret = pka_dev_trng_wait_test_ready(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+    // Generate
+    pka_dev_trng_write_ps_ai_str(csr_reg_ptr, csr_reg_base, pka_trng_drbg_test_etpy_str1);
+    ret = pka_dev_trng_wait_test_ready(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+    // A standard NIST SP 800-90A DRBG known-answer test discards
+    // the result of the first 'Generate' function and only checks
+    // the result of the second 'Generate' function. Hence 'Generate'
+    // is performed again.
+
+    // Generate
+    pka_dev_trng_write_ps_ai_str(csr_reg_ptr, csr_reg_base, pka_trng_drbg_test_etpy_str2);
+    ret = pka_dev_trng_wait_test_ready(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        goto exit;
+
+    // Check output registers
+    for (i = 0; i < PKA_TRNG_OUTPUT_CNT; i++)
+    {
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                          TRNG_OUTPUT_0_ADDR + (i * 0x8));
+
+        csr_reg_val = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+        if ((uint32_t)csr_reg_val != pka_trng_drbg_test_output[i])
+        {
+            PKA_DEBUG(PKA_DEV,
+                "DRBG known answer test failed for output register:%d, 0x%x\n",
+                i, (uint32_t)csr_reg_val);
+            ret = 1;
+            goto exit;
+        }
+    }
+
+    // Clear 'test_sp_800_90' bit in the TRNG_TEST register.
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_TEST_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+exit:
+    return ret;
+}
+
+// Configure the TRNG.
+static int pka_dev_config_trng_drbg(pka_dev_res_t *aic_csr_ptr,
+                                    pka_dev_res_t *trng_csr_ptr)
+{
+    int ret = 0;
+
+    uint64_t  csr_reg_base, csr_reg_off;
+    void     *csr_reg_ptr;
+
+    if (trng_csr_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            trng_csr_ptr->type != PKA_DEV_RES_TYPE_REG)
+        return -EPERM;
+
+    PKA_DEBUG(PKA_DEV, "Starting up the TRNG\n");
+
+    ret = pka_dev_config_trng_clk(aic_csr_ptr);
+    if (ret)
+        return ret;
+
+    csr_reg_base = trng_csr_ptr->base;
+    csr_reg_ptr  = trng_csr_ptr->ioaddr;
+
+    // Perform NIST known-answer tests on the complete SP 800-90A DRBG
+    // without BC_DF functionality.
+    ret = pka_dev_test_trng_drbg(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        return ret;
+
+    // Starting up the TRNG with a DRBG
+
+    // Make sure the engine is idle.
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    // Disable all FROs initially
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_FROENABLE_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_FRODETUNE_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    // Write all configuration values in the TRNG_CONFIG and TRNG_ALARMCNT,
+    // write zeroes to the TRNG_ALARMMASK and TRNG_ALARMSTOP registers.
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_CONFIG_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_CONFIG_REG_VAL);
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_ALARMCNT_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_ALARMCNT_REG_VAL);
+
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_ALARMMASK_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_ALARMSTOP_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+    // Enable all FROs in the TRNG_FROENABLE register. Note that this can
+    // only be done after clearing the TRNG_ALARMSTOP register.
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_FROENABLE_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_FROENABLE_REG_VAL);
+
+    // Optionally, write 'Personalization string' of upto 384 bits in
+    // TRNG_PS_AI_... registers. The contents of these registers will be
+    // XOR-ed into the output of the SHA-256 'Conditioning Function' to be
+    // used as seed value for the actual DRBG.
+    pka_dev_trng_write_ps_ai_str(csr_reg_ptr, csr_reg_base, pka_trng_drbg_ps_str);
+
+
+    // Run TRNG tests after configuring TRNG.
+    // NOTE: TRNG need not be enabled to carry out these tests.
+    ret = pka_dev_test_trng(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        return ret;
+
+    // Start the actual engine by setting the 'enable_trng' and 'drbg_en' bit
+    // in the TRNG_CONTROL register (also a nice point to set the interrupt mask
+    // bits).
+    csr_reg_off =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_CONTROL_DRBG_REG_VAL);
+
+    // The engine is now ready to handle the first 'Generate' request using
+    // the 'request_data' bit of the TRNG_CONTROL register. The first output
+    // for these requests will take a while, as Noise Source and Conditioning
+    // Function must first generate seed entropy for the DRBG.
+
+
+    // Optionally, when buffer RAM is configured: Set a data available
+    // interrupt threshold using the 'load_thresh' and 'blocks_thresh'
+    // fields of the TRNG_INTACK register. This allows delaying the data
+    // available interrupt until the indicated number of 128-bit words are
+    // available in the buffer RAM.
+
+    // Start the actual 'Generate' operation using the 'request_data' and 'data_blocks'
+    // fields of the TRNG_CONTROL register.
+
+    pka_dev_trng_drbg_generate(csr_reg_ptr, csr_reg_base);
+
+    mdelay(200);
+
+    return ret;
+}
+
+// Triggers hardaware zeorize to initialize PKA internal memories
+static int pka_dev_ram_zeroize(pka_dev_res_t *ext_csr_ptr)
+{
+    uint64_t  csr_reg_base, csr_reg_off, csr_reg_value;
+    uint64_t  timer;
+    void     *csr_reg_ptr;
+
+    if (ext_csr_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            ext_csr_ptr->type != PKA_DEV_RES_TYPE_REG)
+        return -EPERM;
+
+    PKA_DEBUG(PKA_DEV, "Starting memory zeroize\n");
+
+    csr_reg_base = ext_csr_ptr->base;
+    csr_reg_ptr  = ext_csr_ptr->ioaddr;
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                                              PKA_ZEROIZE_ADDR);
+    // When PKA_ZEROIZE register is written (with any value)
+    // sensitive data in the PKA is zeroed out.
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, 1);
+
+    // Now wait until the zeroize completes
+    timer = pka_dev_timer_start(10000000); // 10000 ms
+    csr_reg_value = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+    while (csr_reg_value != 0)
+    {
+        csr_reg_value = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+        if (pka_dev_timer_done(timer))
+        {
+            PKA_DEBUG(PKA_DEV, "Timeout while PKA zeorize\n");
+            return -EBUSY;
+        }
+    }
+
+    return 0;
+}
+
+// Initialize PKA IO block refered to as shim. It configures shim's
+// parameters and prepare resources by mapping corresponding memory.
+// The function also configures shim registers and load firmware to
+// shim internal rams. The pka_dev_shim_t passed as input is also an
+// output. It returns 0 on success, a negative error code on failure.
+static int pka_dev_init_shim(pka_dev_shim_t *shim)
+{
+    const uint32_t *farm_img_ptr;
+    uint32_t        farm_img_size, data[4], i;
+    uint8_t         shim_fw_id;
+
+    int ret = 0;
+
+    if (shim->status != PKA_SHIM_STATUS_CREATED)
+    {
+        PKA_ERROR(PKA_DEV, "PKA device must be created\n");
+        return -EPERM;
+    }
+
+    // First of all, trigger a hardware zeroize to initialize internal
+    // RAM memories
+    ret = pka_dev_ram_zeroize(&shim->resources.ext_csr);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to zeroize PKA\n");
+        return ret;
+    }
+
+    // Configure AIC registers
+    ret = pka_dev_config_aic_interrupts(&shim->resources.aic_csr);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to configure AIC\n");
+        return ret;
+    }
+
+    shim_fw_id = pka_firmware_get_id();
+
+    // Load Farm image into PKA_BUFFER_RAM for non-High Assurance mode
+    // or into PKA_SECURE_RAM for High Assurance mode.
+    farm_img_size = pka_firmware_array[shim_fw_id].farm_img_size;
+    PKA_DEBUG(PKA_DEV, "loading farm image (%d words)\n", farm_img_size);
+
+    farm_img_ptr = pka_firmware_array[shim_fw_id].farm_img;
+    // The IP provider suggests using the zeroize function to initialize
+    // the Buffer RAM. But a bug has been detected when writing ECC bits.
+    // Thus a workaround is used, and has already been shown to work; it
+    // consists of padding the farm image. Then all RAM locations will be
+    // written with correct ECC before the IP reads the image out.
+    ret = pka_dev_load_image(&shim->resources.buffer_ram, farm_img_ptr,
+                                farm_img_size);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to load farm image\n");
+        return ret;
+    }
+
+    // Configure EIP-154 Master controller Sequencer
+    ret = pka_dev_config_master_seq_controller(shim,
+                                        &shim->resources.master_seq_ctrl);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to configure Master controller "
+                                    "Sequencer\n");
+        return ret;
+    }
+
+    // Configure PKA Ring options control word
+    ret = pka_dev_config_ring_options(&shim->resources.buffer_ram,
+                                      shim->rings_num, shim->ring_priority);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to configure ring options\n");
+        return ret;
+    }
+
+    shim->trng_enabled   = PKA_SHIM_TRNG_ENABLED;
+    shim->trng_err_cycle = 0;
+
+    // Configure the TRNG
+    ret = pka_dev_config_trng_drbg(&shim->resources.aic_csr,
+                                   &shim->resources.trng_csr);
+
+    // Pull out data from the content of the TRNG buffer RAM and
+    // start the re-generation of new numbers; read and drop 512
+    // words. The read must be done over the 4 TRNG_OUTPUT_X registers
+    // at a time.
+    i = 0;
+    while (i < 128)
+    {
+        pka_dev_trng_read(shim, data, sizeof(data));
+        i++;
+    }
+
+    if (ret)
+    {
+        // Keep running without TRNG since it does not hurt, but
+        // notify users.
+        PKA_ERROR(PKA_DEV, "failed to configure TRNG\n");
+        shim->trng_enabled = PKA_SHIM_TRNG_DISABLED;
+    }
+
+    mutex_init(&shim->mutex);
+    shim->busy_ring_num  = 0;
+    shim->status         = PKA_SHIM_STATUS_INITIALIZED;
+
+    return ret;
+}
+
+// Release a given shim.
+static int pka_dev_release_shim(pka_dev_shim_t *shim)
+{
+    int ret = 0;
+
+    uint32_t ring_idx;
+
+    if (shim->status != PKA_SHIM_STATUS_INITIALIZED &&
+            shim->status != PKA_SHIM_STATUS_STOPPED)
+    {
+        PKA_ERROR(PKA_DEV, "PKA device must be initialized or stopped\n");
+        return -EPERM;
+    }
+
+    // Release rings which belong to the shim. The operating system might
+    // release ring devices before shim devices. The global configuration
+    // must be checked before proceeding to the release of ring devices.
+    if (pka_gbl_config.dev_rings_cnt)
+    {
+        for (ring_idx = 0; ring_idx < shim->rings_num; ring_idx++)
+        {
+            ret = pka_dev_release_ring(shim->rings[ring_idx]);
+            if (ret)
+            {
+                PKA_ERROR(PKA_DEV, "failed to release ring %d\n", ring_idx);
+                return ret;
+            }
+        }
+    }
+
+    shim->busy_ring_num = 0;
+    shim->status        = PKA_SHIM_STATUS_FINALIZED;
+
+    return ret;
+}
+
+// Return the ring associated with the given identifier.
+pka_dev_ring_t *pka_dev_get_ring(uint32_t ring_id)
+{
+    return pka_gbl_config.dev_rings[ring_id];
+}
+
+// Return the shim associated with the given identifier.
+pka_dev_shim_t *pka_dev_get_shim(uint32_t shim_id)
+{
+    return pka_gbl_config.dev_shims[shim_id];
+}
+
+
+static pka_dev_ring_t *__pka_dev_register_ring(uint32_t ring_id,
+                                               uint32_t shim_id)
+{
+    pka_dev_shim_t *shim;
+    pka_dev_ring_t *ring;
+
+    int ret;
+
+    shim = pka_dev_get_shim(shim_id);
+    if (!shim)
+        return NULL;
+
+    ring = kzalloc(sizeof(pka_dev_ring_t), GFP_KERNEL);
+    if (!ring)
+        return ring;
+
+    ring->status = PKA_DEV_RING_STATUS_UNDEFINED;
+
+    // Initialize ring.
+    ret = pka_dev_init_ring(ring, ring_id, shim);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to initialize ring %d\n", ring_id);
+        pka_dev_release_ring(ring);
+        kfree(ring);
+        return NULL;
+    }
+
+    return ring;
+}
+
+pka_dev_ring_t *pka_dev_register_ring(uint32_t ring_id, uint32_t shim_id)
+{
+    pka_dev_ring_t *ring;
+
+    ring = __pka_dev_register_ring(ring_id, shim_id);
+    if (ring)
+    {
+        pka_gbl_config.dev_rings[ring->ring_id]  = ring;
+        pka_gbl_config.dev_rings_cnt            += 1;
+    }
+
+    return ring;
+}
+
+static int __pka_dev_unregister_ring(pka_dev_ring_t *ring)
+{
+    int ret;
+
+    if (!ring)
+       return -EINVAL;
+
+    // Release ring
+    ret = pka_dev_release_ring(ring);
+    if (ret)
+        return ret;
+
+    kfree(ring);
+
+    return ret;
+}
+
+int pka_dev_unregister_ring(pka_dev_ring_t *ring)
+{
+    pka_gbl_config.dev_rings[ring->ring_id]  = NULL;
+    pka_gbl_config.dev_rings_cnt            -= 1;
+
+    return __pka_dev_unregister_ring(ring);
+}
+
+static pka_dev_shim_t *__pka_dev_register_shim(uint32_t shim_id,
+                                               struct pka_dev_mem_res *mem_res)
+{
+    pka_dev_shim_t *shim;
+
+    uint8_t  split;
+    int      ret = 0;
+
+    PKA_DEBUG(PKA_DEV, "register shim id=%u\n", shim_id);
+
+    shim = kzalloc(sizeof(pka_dev_shim_t), GFP_KERNEL);
+    if (!shim)
+        return shim;
+
+    // Shim state MUST be set to undefined before calling 'pka_dev_create_shim'
+    // function
+    shim->status = PKA_SHIM_STATUS_UNDEFINED;
+
+    // Set the Window RAM user mode
+    split = PKA_SPLIT_WINDOW_RAM_MODE;
+
+    // Create PKA shim
+    ret = pka_dev_create_shim(shim, shim_id, split, mem_res);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to create shim %u\n", shim_id);
+        pka_dev_delete_shim(shim);
+        kfree(shim);
+        return NULL;
+    }
+
+    // Initialize PKA shim
+    ret = pka_dev_init_shim(shim);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to init shim %u\n", shim_id);
+        pka_dev_release_shim(shim);
+        pka_dev_delete_shim(shim);
+        kfree(shim);
+        return NULL;
+    }
+
+    return shim;
+}
+
+pka_dev_shim_t *pka_dev_register_shim(uint32_t shim_id, uint8_t shim_fw_id,
+                                      struct pka_dev_mem_res *mem_res)
+{
+    pka_dev_shim_t *shim;
+
+    pka_firmware_set_id(shim_fw_id);
+
+    shim = __pka_dev_register_shim(shim_id, mem_res);
+    if (shim)
+    {
+        pka_gbl_config.dev_shims[shim->shim_id]  = shim;
+        pka_gbl_config.dev_shims_cnt            += 1;
+    }
+
+    return shim;
+}
+
+static int __pka_dev_unregister_shim(pka_dev_shim_t *shim)
+{
+    int ret = 0;
+
+    if (!shim)
+        return -EINVAL;
+
+    // Release shim
+    ret = pka_dev_release_shim(shim);
+    if (ret)
+        return ret;
+
+    // Delete shim
+    ret = pka_dev_delete_shim(shim);
+    if (ret)
+        return ret;
+
+    kfree(shim);
+
+    return ret;
+}
+
+int pka_dev_unregister_shim(pka_dev_shim_t *shim)
+{
+    pka_gbl_config.dev_shims[shim->shim_id]  = NULL;
+    pka_gbl_config.dev_shims_cnt            -= 1;
+
+    return __pka_dev_unregister_shim(shim);
+}
+
+static bool pka_dev_trng_shutdown_oflo(pka_dev_res_t *trng_csr_ptr,
+                                       uint64_t      *err_cycle)
+{
+    uint64_t  csr_reg_base, csr_reg_off, csr_reg_value;
+    uint64_t  curr_cycle_cnt, fro_stopped_mask, fro_enabled_mask;
+    void     *csr_reg_ptr;
+
+    csr_reg_base = trng_csr_ptr->base;
+    csr_reg_ptr  = trng_csr_ptr->ioaddr;
+
+    csr_reg_off   =
+            pka_dev_get_register_offset(csr_reg_base, TRNG_STATUS_ADDR);
+    csr_reg_value = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+    if (csr_reg_value & PKA_TRNG_STATUS_SHUTDOWN_OFLO)
+    {
+        curr_cycle_cnt = get_cycles();
+        // See if any FROs were shut down. If they were, toggle bits in the
+        // FRO detune register and reenable the FROs.
+        csr_reg_off   = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_ALARMSTOP_ADDR);
+        fro_stopped_mask = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+        if (fro_stopped_mask)
+        {
+            csr_reg_off      = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_FROENABLE_ADDR);
+            fro_enabled_mask = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+            csr_reg_off      = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_FRODETUNE_ADDR);
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, fro_stopped_mask);
+
+            csr_reg_off      = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_FROENABLE_ADDR);
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off,
+                                fro_stopped_mask | fro_enabled_mask);
+        }
+
+        // Reset the error
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_ALARMMASK_ADDR);
+        pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_ALARMSTOP_ADDR);
+        pka_dev_io_write(csr_reg_ptr, csr_reg_off, 0);
+
+        csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_INTACK_ADDR);
+        pka_dev_io_write(csr_reg_ptr, csr_reg_off,
+                            PKA_TRNG_STATUS_SHUTDOWN_OFLO);
+
+        // If we're seeing this error again within about a second,
+        // the hardware is malfunctioning. Disable the trng and return
+        // an error.
+        if (*err_cycle && (curr_cycle_cnt - *err_cycle < 1000000000))
+        {
+            csr_reg_off    = pka_dev_get_register_offset(csr_reg_base,
+                                                    TRNG_CONTROL_ADDR);
+            csr_reg_value  = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+            csr_reg_value &= ~PKA_TRNG_CONTROL_REG_VAL;
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, csr_reg_value);
+            return false;
+        }
+
+        *err_cycle = curr_cycle_cnt;
+    }
+
+    return true;
+}
+
+static int pka_dev_trng_drbg_reseed(void *csr_reg_ptr, uint64_t csr_reg_base)
+{
+    uint64_t csr_reg_off;
+    int ret;
+
+    ret = 0;
+
+    csr_reg_off = pka_dev_get_register_offset(csr_reg_base, TRNG_CONTROL_ADDR);
+    pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_CONTROL_DRBG_RESEED);
+
+    ret = pka_dev_trng_wait_test_ready(csr_reg_ptr, csr_reg_base);
+    if (ret)
+        return ret;
+
+    // Write personalization string
+    pka_dev_trng_write_ps_ai_str(csr_reg_ptr, csr_reg_base, pka_trng_drbg_ps_str);
+
+    return ret;
+}
+
+// Read from DRBG enabled TRNG
+int pka_dev_trng_read(pka_dev_shim_t *shim, uint32_t *data, uint32_t cnt)
+{
+    int ret = 0;
+
+    pka_dev_res_t *trng_csr_ptr;
+    uint64_t       csr_reg_base, csr_reg_off, csr_reg_value;
+    uint64_t       timer;
+    uint32_t       data_idx, word_cnt;
+    uint8_t        output_idx, trng_ready = 0;
+    void          *csr_reg_ptr;
+
+    if (!shim || !data || (cnt % PKA_TRNG_OUTPUT_CNT != 0))
+        return -EINVAL;
+
+    if (!cnt)
+        return ret;
+
+    mutex_lock(&shim->mutex);
+
+    trng_csr_ptr = &shim->resources.trng_csr;
+
+    if (trng_csr_ptr->status != PKA_DEV_RES_STATUS_MAPPED ||
+            trng_csr_ptr->type != PKA_DEV_RES_TYPE_REG)
+    {
+        ret = -EPERM;
+        goto exit;
+    }
+
+    csr_reg_base = trng_csr_ptr->base;
+    csr_reg_ptr  = trng_csr_ptr->ioaddr;
+
+    if (!pka_dev_trng_shutdown_oflo(trng_csr_ptr,
+                                    &shim->trng_err_cycle))
+    {
+        ret = -EWOULDBLOCK;
+        goto exit;
+    }
+
+    // Determine the number of 32-bit words.
+    word_cnt = cnt >> 2;
+
+    for (data_idx = 0; data_idx < word_cnt; data_idx++)
+    {
+        output_idx = data_idx % PKA_TRNG_OUTPUT_CNT;
+
+        // Tell the hardware to advance
+        if (output_idx == 0)
+        {
+            csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                                                        TRNG_INTACK_ADDR);
+            pka_dev_io_write(csr_reg_ptr, csr_reg_off, PKA_TRNG_STATUS_READY);
+            trng_ready = 0;
+
+            // Check if 'data_blocks' field is zero in TRNG_CONTROL register,
+            // if it is then we have to issue a 'Reseed' and Generate' request
+            // for DRBG enabled TRNG.
+            csr_reg_off = pka_dev_get_register_offset(csr_reg_base,
+                                                      TRNG_CONTROL_ADDR);
+            csr_reg_value = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+
+            if (!((uint32_t)csr_reg_value & PKA_TRNG_DRBG_DATA_BLOCK_MASK))
+            {
+                // Issue reseed
+                ret = pka_dev_trng_drbg_reseed(csr_reg_ptr, csr_reg_base);
+                if (ret)
+                {
+                    ret = -EBUSY;
+                    goto exit;
+                }
+
+                // Issue generate request
+                pka_dev_trng_drbg_generate(csr_reg_ptr, csr_reg_base);
+            }
+
+        }
+
+        // Wait until a data word is available in the TRNG_OUTPUT_X
+        // registers (using the interrupt and/or 'ready' status bit in the
+        // TRNG_STATUS register. The only way this would hang if the TRNG
+        // never initialized, and we would not call this function if that
+        // happened.
+        timer = pka_dev_timer_start(1000000); // 1000 ms
+        csr_reg_off =
+                pka_dev_get_register_offset(csr_reg_base, TRNG_STATUS_ADDR);
+        while (trng_ready == 0)
+        {
+            csr_reg_value = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+            trng_ready    = csr_reg_value & PKA_TRNG_STATUS_READY;
+
+            if (pka_dev_timer_done(timer))
+            {
+                PKA_DEBUG(PKA_DEV,
+                    "Shim %u got error obtaining random number\n",
+                                shim->shim_id);
+                ret = -EBUSY;
+                goto exit;
+            }
+        }
+
+        // Read the registers
+        csr_reg_off    =  pka_dev_get_register_offset(csr_reg_base,
+                                    TRNG_OUTPUT_0_ADDR + (output_idx * 0x8));
+        csr_reg_value  = pka_dev_io_read(csr_reg_ptr, csr_reg_off);
+        data[data_idx] = (uint32_t) csr_reg_value;
+    }
+
+exit:
+    mutex_unlock(&shim->mutex);
+    return ret;
+}
+
+bool pka_dev_has_trng(pka_dev_shim_t *shim)
+{
+    if (!shim)
+        return false;
+
+    return (shim->trng_enabled == PKA_SHIM_TRNG_ENABLED);
+}
+
+// Syscall to open ring.
+int __pka_dev_open_ring(uint32_t ring_id)
+{
+    pka_dev_shim_t *shim;
+    pka_dev_ring_t *ring;
+
+    int ret = 0;
+
+    if (pka_gbl_config.dev_rings_cnt == 0)
+        return -EPERM;
+
+    ring = pka_dev_get_ring(ring_id);
+    if (!ring || !ring->shim)
+        return -ENXIO;
+
+    shim = ring->shim;
+
+    mutex_lock(&ring->mutex);
+
+    if (shim->status == PKA_SHIM_STATUS_UNDEFINED ||
+          shim->status == PKA_SHIM_STATUS_CREATED ||
+          shim->status == PKA_SHIM_STATUS_FINALIZED)
+    {
+        ret = -EPERM;
+        goto unlock_return;
+    }
+
+    if (ring->status == PKA_DEV_RING_STATUS_BUSY)
+    {
+        ret = -EBUSY;
+        goto unlock_return;
+    }
+
+    if (ring->status != PKA_DEV_RING_STATUS_INITIALIZED)
+    {
+        ret = -EPERM;
+        goto unlock_return;
+    }
+
+    // Set ring information words.
+    ret = pka_dev_set_ring_info(ring);
+    if (ret)
+    {
+        PKA_ERROR(PKA_DEV, "failed to set ring information\n");
+        ret = -EWOULDBLOCK;
+        goto unlock_return;
+    }
+
+    if (shim->busy_ring_num == 0)
+        shim->status = PKA_SHIM_STATUS_RUNNING;
+
+    ring->status = PKA_DEV_RING_STATUS_BUSY;
+    shim->busy_ring_num += 1;
+
+unlock_return:
+    mutex_unlock(&ring->mutex);
+    return ret;
+}
+
+// Open ring.
+int pka_dev_open_ring(pka_ring_info_t *ring_info)
+{
+    return __pka_dev_open_ring(ring_info->ring_id);
+}
+
+// Syscall to close ring.
+int __pka_dev_close_ring(uint32_t ring_id)
+{
+    pka_dev_shim_t *shim;
+    pka_dev_ring_t *ring;
+
+    int ret = 0;
+
+    if (pka_gbl_config.dev_rings_cnt == 0)
+        return -EPERM;
+
+    ring = pka_dev_get_ring(ring_id);
+    if (!ring || !ring->shim)
+        return -ENXIO;
+
+    shim = ring->shim;
+
+    mutex_lock(&ring->mutex);
+
+    if (shim->status != PKA_SHIM_STATUS_RUNNING &&
+            ring->status != PKA_DEV_RING_STATUS_BUSY)
+    {
+        ret = -EPERM;
+        goto unlock_return;
+    }
+
+    ring->status         = PKA_DEV_RING_STATUS_INITIALIZED;
+    shim->busy_ring_num -= 1;
+
+    if (shim->busy_ring_num == 0)
+        shim->status = PKA_SHIM_STATUS_STOPPED;
+
+unlock_return:
+    mutex_unlock(&ring->mutex);
+    return ret;
+}
+
+// Close ring.
+int pka_dev_close_ring(pka_ring_info_t *ring_info)
+{
+    if (ring_info)
+    {
+        return __pka_dev_close_ring(ring_info->ring_id);
+    }
+
+    return 0;
+}
+
+// Syscall to map ring into memory (kernel-space).
+static int __pka_dev_mmap_ring(uint32_t ring_id)
+{
+    //not implemented
+    return -1;
+}
+
+// Map ring into memory (user-space).
+int pka_dev_mmap_ring(pka_ring_info_t *ring_info)
+{
+    return __pka_dev_mmap_ring(ring_info->ring_id);
+}
+
+// Syscall to unmap ring (kernel-space).
+static int __pka_dev_munmap_ring(uint32_t ring_id)
+{
+    //not implemented
+    return -1;
+}
+
+// Unmap ring (user-space).
+int pka_dev_munmap_ring(pka_ring_info_t *ring_info)
+{
+    if (ring_info)
+    {
+        return __pka_dev_munmap_ring(ring_info->ring_id);
+    }
+
+    return 0;
+}
+
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_dev.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_dev.h
new file mode 100644
index 000000000000..b42ab5dd0a46
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_dev.h
@@ -0,0 +1,310 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_DEV_H__
+#define __PKA_DEV_H__
+
+///
+/// @file
+///
+/// API to handle the PKA EIP-154 I/O block (shim).  It provides functions
+/// and data structures to initialize and configure the PKA shim. It's the
+/// "southband interface" for communication with PKA hardware resources.
+///
+
+#include <linux/mutex.h>
+#include <linux/types.h>
+#include "mlxbf_pka_firmware.h"
+
+#include <linux/vfio.h>
+
+#include "mlxbf_pka_config.h"
+#include "mlxbf_pka_cpu.h"
+#include "mlxbf_pka_debug.h"
+#include "mlxbf_pka_ioctl.h"
+#include "mlxbf_pka_mmio.h"
+#include "mlxbf_pka_ring.h"
+
+#define PKA_SYSFS_RING_DEVICES      "/sys/bus/platform/devices"
+#define PKA_VFIO_DIR                "/dev/vfio"
+#define PKA_VFIO_CONTAINER_PATH     "/dev/vfio/vfio"
+#define PKA_VFIO_GROUP_FMT          "/dev/vfio/%d"
+
+#define PKA_DEVFS_RING_DEVICES      "/dev/pka/%d"
+
+// Defines specific to device-tree and Linux operating system.
+// Careful, all constants MUST be conform with both devicetree
+// (DTS) and ACPI tables (SSDT).
+// *TBD* Better to be detected automatically (or passed as arg
+//       so far).
+#define PKA_DEV_RING_DT_PREFIX_0        "45000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_1        "47000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_2        "4d000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_3        "4f000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_4        "44000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_5        "46000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_6        "4c000000.eip154:ring@%d"
+#define PKA_DEV_RING_DT_PREFIX_7        "4e000000.eip154:ring@%d"
+
+#define PKA_DEV_RING_ACPI_PREFIX        "MLNXBF11:%02x"
+
+/// Device resource structure
+typedef struct
+{
+    void    *ioaddr;         ///< (iore)map-ped version of addr, for
+                             ///  driver internal use.
+
+    uint64_t base;           ///< base address of the device's
+                             ///  resource
+
+    uint64_t size;           ///< size of IO
+
+    uint8_t  type;           ///< type of resource addr points to
+    int8_t   status;         ///< status of the resource
+
+    char    *name;           ///< name of the resource
+} pka_dev_res_t;
+
+/// defines for pka_dev_res->type
+#define PKA_DEV_RES_TYPE_MEM            1   // resource type is memory
+#define PKA_DEV_RES_TYPE_REG            2   // resource type is register
+
+/// defines for pka_dev_res->status
+#define PKA_DEV_RES_STATUS_MAPPED       1   // the resource is (iore)-mapped
+#define PKA_DEV_RES_STATUS_UNMAPPED    -1   // the resource is unmapped
+
+/// PKA Ring resources structure
+typedef struct
+{
+    pka_dev_res_t   info_words;     // ring information words
+    pka_dev_res_t   counters;       // ring counters
+    pka_dev_res_t   window_ram;     // window RAM
+} pka_dev_ring_res_t;
+
+typedef struct pka_dev_shim_s pka_dev_shim_t;
+
+/// PKA Ring structure
+typedef struct
+{
+    uint32_t                ring_id;        ///< ring identifier.
+
+    pka_dev_shim_t         *shim;           ///< pointer to the shim associated
+                                            ///  to the ring.
+
+    uint32_t                resources_num;  ///< number of ring ressources.
+    pka_dev_ring_res_t      resources;      ///< ring resources.
+
+    pka_dev_hw_ring_info_t *ring_info;      ///< ring information.
+    uint32_t                num_cmd_desc;   ///< number of command descriptors.
+
+    int8_t                  status;         ///< status of the ring.
+
+    struct mutex            mutex;          ///< mutex lock for sharing ring device
+} pka_dev_ring_t;
+
+/// defines for pka_dev_ring->status
+#define PKA_DEV_RING_STATUS_UNDEFINED   -1
+#define PKA_DEV_RING_STATUS_INITIALIZED  1
+#define PKA_DEV_RING_STATUS_READY        2
+#define PKA_DEV_RING_STATUS_BUSY         3
+#define PKA_DEV_RING_STATUS_FINALIZED    4
+
+/// PKA Shim resources structure
+typedef struct
+{
+    pka_dev_res_t    buffer_ram;        // buffer RAM
+    pka_dev_res_t    master_prog_ram;   // master controller program RAM
+    pka_dev_res_t    master_seq_ctrl;   // master sequencer controller CSR
+    pka_dev_res_t    aic_csr;           // interrupt controller CSRs
+    pka_dev_res_t    trng_csr;          // TRNG module CSRs
+    pka_dev_res_t    ext_csr;           // MiCA specific CSRs (glue logic)
+} pka_dev_shim_res_t;
+
+#define PKA_DEV_SHIM_RES_CNT         6  // Number of PKA device resources
+
+/// Platform global shim resource information
+typedef struct
+{
+    pka_dev_res_t *res_tbl[PKA_DEV_SHIM_RES_CNT];
+    uint8_t        res_cnt;
+} pka_dev_gbl_shim_res_info_t;
+
+struct pka_dev_mem_res
+{
+    uint64_t eip154_base;         ///< base address for eip154 mmio registers
+    uint64_t eip154_size;         ///< eip154 mmio register region size
+
+    uint64_t wndw_ram_off_mask;   ///< common offset mask for alt window ram and window ram
+    uint64_t wndw_ram_base;       ///< base address for window ram
+    uint64_t wndw_ram_size;       ///< window ram region size
+
+    uint64_t alt_wndw_ram_0_base; ///< base address for alternate window ram 0
+    uint64_t alt_wndw_ram_1_base; ///< base address for alternate window ram 1
+    uint64_t alt_wndw_ram_2_base; ///< base address for alternate window ram 2
+    uint64_t alt_wndw_ram_3_base; ///< base address for alternate window ram 3
+    uint64_t alt_wndw_ram_size;   ///< alternate window ram regions size
+
+    uint64_t csr_base;            ///< base address for csr registers
+    uint64_t csr_size;            ///< csr area size
+};
+
+
+/// PKA Shim structure
+struct pka_dev_shim_s
+{
+    struct pka_dev_mem_res mem_res;
+
+    uint64_t            trng_err_cycle;   ///< TRNG error cycle
+
+    uint32_t            shim_id;          ///< shim identifier
+
+    uint32_t            rings_num;        ///< Number of supported rings (hw
+                                          ///  specific)
+
+    pka_dev_ring_t    **rings;            ///< pointer to rings which belong to
+                                          ///  the shim.
+
+    uint8_t             ring_priority;    ///< specify the priority in which
+                                          ///  rings are handled.
+
+    uint8_t             ring_type;        ///< indicates whether the result
+                                          ///  ring delivers results strictly
+                                          ///  in-order.
+
+    pka_dev_shim_res_t  resources;        ///< shim resources
+
+    uint8_t             window_ram_split; ///< Window RAM mode. if non-zero,
+                                          ///  the splitted window RAM scheme
+                                          ///  is used.
+
+    uint32_t            busy_ring_num;    ///< Number of active rings (rings in
+                                          ///  busy state)
+
+    uint8_t             trng_enabled;     ///< Whether the TRNG engine is
+                                          ///  enabled.
+
+    int8_t              status;           ///< status of the shim
+
+    struct mutex        mutex;            ///< mutex lock for sharing shim
+};
+
+/// defines for pka_dev_shim->status
+#define PKA_SHIM_STATUS_UNDEFINED          -1
+#define PKA_SHIM_STATUS_CREATED             1
+#define PKA_SHIM_STATUS_INITIALIZED         2
+#define PKA_SHIM_STATUS_RUNNING             3
+#define PKA_SHIM_STATUS_STOPPED             4
+#define PKA_SHIM_STATUS_FINALIZED           5
+
+/// defines for pka_dev_shim->window_ram_split
+#define PKA_SHIM_WINDOW_RAM_SPLIT_ENABLED   1   // window RAM is splitted into
+                                                // 4 * 16KB blocks
+
+#define PKA_SHIM_WINDOW_RAM_SPLIT_DISABLED  2   // window RAM is not splitted
+                                                // and occupies 64KB
+
+/// defines for pka_dev_shim->trng_enabled
+#define PKA_SHIM_TRNG_ENABLED               1
+#define PKA_SHIM_TRNG_DISABLED              0
+
+/// Platform global configuration structure
+typedef struct
+{
+    uint32_t         dev_shims_cnt;     ///< number of registered PKA shims.
+    uint32_t         dev_rings_cnt;     ///< number of registered Rings.
+
+    pka_dev_shim_t  *dev_shims[PKA_MAX_NUM_IO_BLOCKS]; ///< table of registered
+                                                       ///  PKA shims.
+
+    pka_dev_ring_t  *dev_rings[PKA_MAX_NUM_RINGS];     ///< table of registered
+                                                       ///  Rings.
+} pka_dev_gbl_config_t;
+
+extern pka_dev_gbl_config_t pka_gbl_config;
+
+/// Ring getter for pka_dev_gbl_config_t structure which holds all system
+/// global configuration. This configuration is shared and common to kernel
+/// device driver associated with PKA hardware.
+pka_dev_ring_t *pka_dev_get_ring(uint32_t ring_id);
+
+/// Shim getter for pka_dev_gbl_config_t structure which holds all system
+/// global configuration. This configuration is shared and common to kernel
+/// device driver associated with PKA hardware.
+pka_dev_shim_t *pka_dev_get_shim(uint32_t shim_id);
+
+/// Register a Ring. This function initializes a Ring and configures its
+/// related resources, and returns a pointer to that ring.
+pka_dev_ring_t *pka_dev_register_ring(uint32_t ring_id, uint32_t shim_id);
+
+/// Unregister a Ring
+int pka_dev_unregister_ring(pka_dev_ring_t *ring);
+
+/// Register PKA IO block. This function initializes a shim and configures its
+/// related resources, and returns a pointer to that ring.
+pka_dev_shim_t *pka_dev_register_shim(uint32_t shim_id, uint8_t shim_fw_id,
+                                      struct pka_dev_mem_res *mem_res);
+
+/// Unregister PKA IO block
+int pka_dev_unregister_shim(pka_dev_shim_t *shim);
+
+/// Reset a Ring.
+int pka_dev_reset_ring(pka_dev_ring_t *ring);
+
+/// Clear ring counters. This function resets the master sequencer controller
+/// to clear the command and result counters.
+int pka_dev_clear_ring_counters(pka_dev_ring_t *ring);
+
+/// Read data from the TRNG. Drivers can fill up to 'cnt' bytes of data into
+/// the buffer 'data'. The buffer 'data' is aligned for any type and 'cnt' is
+/// a multiple of 4.
+int pka_dev_trng_read(pka_dev_shim_t *shim, uint32_t *data, uint32_t cnt);
+
+/// Return true if the TRNG engine is enabled, false if not.
+bool pka_dev_has_trng(pka_dev_shim_t *shim);
+
+/// Open the file descriptor associated with ring. It returns an integer value,
+/// which is used to refer to the file. If un-successful, it returns a negative
+/// error.
+int pka_dev_open_ring(pka_ring_info_t *ring_info);
+
+/// Close the file descriptor associated with ring. The function returns 0 if
+/// successful, negative value to indicate an error.
+int pka_dev_close_ring(pka_ring_info_t *ring_info);
+
+/// Map ring resources.
+int pka_dev_mmap_ring(pka_ring_info_t *ring_info);
+
+/// Unmap ring resources.
+int pka_dev_munmap_ring(pka_ring_info_t *ring_info);
+
+#endif /// __PKA_DEV_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_drv.c b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_drv.c
new file mode 100644
index 000000000000..b8b5a465e00a
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_drv.c
@@ -0,0 +1,1398 @@
+// SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause
+
+#include <linux/acpi.h>
+#include <linux/cdev.h>
+#include <linux/device.h>
+#include <linux/hw_random.h>
+#include <linux/interrupt.h>
+#include <linux/iommu.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of_device.h>
+#include <linux/of_irq.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+#include <linux/uaccess.h>
+#include <linux/vfio.h>
+
+#include "mlxbf_pka_dev.h"
+
+
+#define PKA_DRIVER_VERSION      "v3.0"
+#define PKA_DRIVER_NAME         "pka-mlxbf"
+
+#define PKA_DRIVER_DESCRIPTION  "BlueField PKA driver"
+
+#define PKA_DEVICE_COMPAT       "mlx,mlxbf-pka"
+#define PKA_RING_DEVICE_COMPAT	"mlx,mlxbf-pka-ring"
+
+#define PKA_DEVICE_ACPIHID_BF1      "MLNXBF10"
+#define PKA_RING_DEVICE_ACPIHID_BF1 "MLNXBF11"
+
+#define PKA_DEVICE_ACPIHID_BF2      "MLNXBF20"
+#define PKA_RING_DEVICE_ACPIHID_BF2 "MLNXBF21"
+
+#define PKA_DEVICE_ACCESS_MODE  0666
+
+#define PKA_DEVICE_RES_CNT      7
+enum pka_mem_res_idx {
+	PKA_ACPI_EIP154_IDX = 0,
+	PKA_ACPI_WNDW_RAM_IDX,
+	PKA_ACPI_ALT_WNDW_RAM_0_IDX,
+	PKA_ACPI_ALT_WNDW_RAM_1_IDX,
+	PKA_ACPI_ALT_WNDW_RAM_2_IDX,
+	PKA_ACPI_ALT_WNDW_RAM_3_IDX,
+	PKA_ACPI_CSR_IDX
+};
+
+enum pka_plat_type {
+	PKA_PLAT_TYPE_BF1 = 0, /* Platform type Bluefield-1 */
+	PKA_PLAT_TYPE_BF2      /* Platform type Bluefield-2 */
+};
+
+static DEFINE_MUTEX(pka_drv_lock);
+
+static uint32_t pka_device_cnt;
+static uint32_t pka_ring_device_cnt;
+
+const char pka_compat[]      = PKA_DEVICE_COMPAT;
+const char pka_ring_compat[] = PKA_RING_DEVICE_COMPAT;
+
+const char pka_acpihid_bf1[]      = PKA_DEVICE_ACPIHID_BF1;
+const char pka_ring_acpihid_bf1[] = PKA_RING_DEVICE_ACPIHID_BF1;
+
+const char pka_acpihid_bf2[]      = PKA_DEVICE_ACPIHID_BF2;
+const char pka_ring_acpihid_bf2[] = PKA_RING_DEVICE_ACPIHID_BF2;
+
+struct pka_drv_plat_info {
+	enum pka_plat_type type;
+	uint8_t fw_id;
+};
+
+static struct pka_drv_plat_info pka_drv_plat[] = {
+	[PKA_PLAT_TYPE_BF1] = {
+		.type = PKA_PLAT_TYPE_BF1,
+		.fw_id = PKA_FIRMWARE_IMAGE_0_ID
+	},
+	[PKA_PLAT_TYPE_BF2] = {
+		.type = PKA_PLAT_TYPE_BF2,
+		.fw_id = PKA_FIRMWARE_IMAGE_2_ID
+	}
+};
+
+static const struct acpi_device_id pka_drv_acpi_ids[] = {
+	{ PKA_DEVICE_ACPIHID_BF1, (kernel_ulong_t)&pka_drv_plat[PKA_PLAT_TYPE_BF1] },
+	{ PKA_RING_DEVICE_ACPIHID_BF1, 0 },
+	{ PKA_DEVICE_ACPIHID_BF2, (kernel_ulong_t)&pka_drv_plat[PKA_PLAT_TYPE_BF2] },
+	{ PKA_RING_DEVICE_ACPIHID_BF2, 0 },
+	{},
+};
+
+struct pka_info {
+	struct device *dev;	/* the device this info belongs to */
+	const char    *name;	/* device name */
+	const char    *version;	/* device driver version */
+	const char    *compat;
+	const char    *acpihid;
+	uint8_t        flag;
+	struct module *module;
+	void          *priv;	/* optional private data */
+};
+
+/* defines for pka_info->flags */
+#define PKA_DRIVER_FLAG_RING_DEVICE        1
+#define PKA_DRIVER_FLAG_DEVICE             2
+
+struct pka_platdata {
+	struct platform_device *pdev;
+	struct pka_info  *info;
+	spinlock_t        lock;
+	unsigned long     irq_flags;
+};
+
+/* Bits in pka_platdata.irq_flags */
+enum {
+	PKA_IRQ_DISABLED = 0,
+};
+
+struct pka_ring_region {
+	u64             off;
+	u64             addr;
+	resource_size_t size;
+	u32             flags;
+	u32             type;
+	void __iomem   *ioaddr;
+};
+
+/* defines for pka_ring_region->flags */
+#define PKA_RING_REGION_FLAG_READ      (1 << 0) /* Region supports read */
+#define PKA_RING_REGION_FLAG_WRITE     (1 << 1) /* Region supports write */
+#define PKA_RING_REGION_FLAG_MMAP      (1 << 2) /* Region supports mmap */
+
+/* defines for pka_ring_region->type */
+#define PKA_RING_RES_TYPE_NONE      0
+#define PKA_RING_RES_TYPE_WORDS     1	/* info control/status words */
+#define PKA_RING_RES_TYPE_CNTRS     2	/* count registers */
+#define PKA_RING_RES_TYPE_MEM       4	/* window RAM region */
+
+#define PKA_DRIVER_RING_DEV_MAX     PKA_MAX_NUM_RINGS
+
+struct pka_ring_device {
+	struct pka_info    *info;
+	struct device      *device;
+	struct iommu_group *group;
+	int32_t             group_id;
+	uint32_t            device_id;
+	uint32_t            parent_device_id;
+	struct mutex        mutex;
+	uint32_t            flags;
+	struct module      *parent_module;
+	pka_dev_ring_t     *ring;
+	int                 minor;
+	uint32_t            num_regions;
+	struct pka_ring_region *regions;
+};
+
+#define PKA_DRIVER_DEV_MAX                PKA_MAX_NUM_IO_BLOCKS
+#define PKA_DRIVER_RING_NUM_REGIONS_MAX   PKA_MAX_NUM_RING_RESOURCES
+
+/* defines for region index */
+#define PKA_RING_REGION_WORDS_IDX         0
+#define PKA_RING_REGION_CNTRS_IDX         1
+#define PKA_RING_REGION_MEM_IDX           2
+
+#define PKA_RING_REGION_OFFSET_SHIFT   40
+#define PKA_RING_REGION_OFFSET_MASK    \
+	(((u64)(1) << PKA_RING_REGION_OFFSET_SHIFT) - 1)
+
+#define PKA_RING_OFFSET_TO_INDEX(off)   \
+	(off >> PKA_RING_REGION_OFFSET_SHIFT)
+
+#define PKA_RING_REGION_INDEX_TO_OFFSET(index) \
+	((u64)(index) << PKA_RING_REGION_OFFSET_SHIFT)
+
+struct pka_device {
+	struct pka_info *info;
+	struct device   *device;
+	uint32_t         device_id;
+	uint8_t          fw_id;         /* firmware identifier */
+	struct mutex     mutex;
+	struct resource *resource[PKA_DEVICE_RES_CNT];
+	pka_dev_shim_t  *shim;
+	long             irq;		/* interrupt number */
+	struct hwrng     rng;
+};
+
+/* defines for pka_device->irq */
+#define PKA_IRQ_CUSTOM          -1
+#define PKA_IRQ_NONE             0
+
+/* Hardware interrupt handler */
+static irqreturn_t pka_drv_irq_handler(int irq, void *device)
+{
+	struct pka_device      *pka_dev = (struct pka_device *)device;
+	struct platform_device *pdev = to_platform_device(pka_dev->device);
+	struct pka_platdata    *priv = platform_get_drvdata(pdev);
+
+	PKA_DEBUG(PKA_DRIVER,
+		  "handle irq in device %u\n", pka_dev->device_id);
+
+	/* Just disable the interrupt in the interrupt controller */
+
+	spin_lock(&priv->lock);
+	if (!__test_and_set_bit(PKA_IRQ_DISABLED, &priv->irq_flags))
+		disable_irq_nosync(irq);
+	spin_unlock(&priv->lock);
+
+	return IRQ_HANDLED;
+}
+
+static int pka_drv_register_irq(struct pka_device *pka_dev)
+{
+	if (pka_dev->irq && (pka_dev->irq != PKA_IRQ_CUSTOM)) {
+		/*
+		 * Allow sharing the irq among several devices (child devices
+		 * so far)
+		 */
+		return request_irq(pka_dev->irq,
+				   (irq_handler_t) pka_drv_irq_handler,
+				   IRQF_SHARED, pka_dev->info->name,
+				   pka_dev);
+	}
+
+	return -ENXIO;
+}
+
+static int pka_drv_ring_regions_init(struct pka_ring_device *ring_dev)
+{
+	struct pka_ring_region *region;
+	pka_dev_ring_t *ring;
+	pka_dev_res_t  *res;
+	uint32_t        num_regions;
+
+	ring = ring_dev->ring;
+	if (!ring || !ring->shim)
+		return -ENXIO;
+
+	num_regions           = ring->resources_num;
+	ring_dev->num_regions = num_regions;
+	ring_dev->regions     = kcalloc(num_regions,
+					sizeof(struct pka_ring_region),
+					GFP_KERNEL);
+	if (!ring_dev->regions)
+		return -ENOMEM;
+
+	/* Information words region */
+	res    = &ring->resources.info_words;
+	region = &ring_dev->regions[PKA_RING_REGION_WORDS_IDX];
+	/* map offset to the physical address */
+	region->off    =
+		PKA_RING_REGION_INDEX_TO_OFFSET(PKA_RING_REGION_WORDS_IDX);
+	region->addr   = res->base;
+	region->size   = res->size;
+	region->type   = PKA_RING_RES_TYPE_WORDS;
+	region->flags |= (PKA_RING_REGION_FLAG_MMAP |
+			  PKA_RING_REGION_FLAG_READ |
+			  PKA_RING_REGION_FLAG_WRITE);
+
+	/* Count regiters region */
+	res    = &ring->resources.counters;
+	region = &ring_dev->regions[PKA_RING_REGION_CNTRS_IDX];
+	/* map offset to the physical address */
+	region->off    =
+		PKA_RING_REGION_INDEX_TO_OFFSET(PKA_RING_REGION_CNTRS_IDX);
+	region->addr   = res->base;
+	region->size   = res->size;
+	region->type   = PKA_RING_RES_TYPE_CNTRS;
+	region->flags |= (PKA_RING_REGION_FLAG_MMAP |
+			  PKA_RING_REGION_FLAG_READ |
+			  PKA_RING_REGION_FLAG_WRITE);
+
+	/* Window ram region */
+	res    = &ring->resources.window_ram;
+	region = &ring_dev->regions[PKA_RING_REGION_MEM_IDX];
+	/* map offset to the physical address */
+	region->off    =
+		PKA_RING_REGION_INDEX_TO_OFFSET(PKA_RING_REGION_MEM_IDX);
+	region->addr   = res->base;
+	region->size   = res->size;
+	region->type   = PKA_RING_RES_TYPE_MEM;
+	region->flags |= (PKA_RING_REGION_FLAG_MMAP |
+			  PKA_RING_REGION_FLAG_READ |
+			  PKA_RING_REGION_FLAG_WRITE);
+
+	return 0;
+}
+
+static void pka_drv_ring_regions_cleanup(struct pka_ring_device *ring_dev)
+{
+	/* clear vfio device regions */
+	ring_dev->num_regions = 0;
+	kfree(ring_dev->regions);
+}
+
+static int pka_drv_ring_open(void *device_data)
+{
+	struct pka_ring_device *ring_dev = device_data;
+	struct pka_info        *info     = ring_dev->info;
+	pka_ring_info_t         ring_info;
+
+	int error;
+
+	PKA_DEBUG(PKA_DRIVER,
+		  "open ring device %u (device_data:%p)\n",
+		  ring_dev->device_id, ring_dev);
+
+	if (!try_module_get(info->module))
+		return -ENODEV;
+
+	ring_info.ring_id = ring_dev->device_id;
+	error = pka_dev_open_ring(&ring_info);
+	if (error) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to open ring %u\n", ring_dev->device_id);
+		module_put(info->module);
+		return error;
+	}
+
+	/* Initialize regions */
+	error = pka_drv_ring_regions_init(ring_dev);
+	if (error) {
+		PKA_DEBUG(PKA_DRIVER, "failed to initialize regions\n");
+		pka_dev_close_ring(&ring_info);
+		module_put(info->module);
+		return error;
+	}
+
+	return 0;
+}
+
+static void pka_drv_ring_release(void *device_data)
+{
+	struct pka_ring_device *ring_dev = device_data;
+	struct pka_info        *info = ring_dev->info;
+	pka_ring_info_t         ring_info;
+
+	int error;
+
+	PKA_DEBUG(PKA_DRIVER,
+		  "release ring device %u (device_data:%p)\n",
+		  ring_dev->device_id, ring_dev);
+
+	pka_drv_ring_regions_cleanup(ring_dev);
+
+	ring_info.ring_id = ring_dev->device_id;
+	error = pka_dev_close_ring(&ring_info);
+	if (error)
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to close ring %u\n",
+			  ring_dev->device_id);
+
+	module_put(info->module);
+}
+
+static int pka_drv_ring_mmap_region(struct pka_ring_region region,
+				    struct vm_area_struct *vma)
+{
+	u64 req_len, pgoff, req_start;
+
+	req_len = vma->vm_end - vma->vm_start;
+	pgoff   = vma->vm_pgoff &
+		((1U << (PKA_RING_REGION_OFFSET_SHIFT - PAGE_SHIFT)) - 1);
+	req_start = pgoff << PAGE_SHIFT;
+
+	region.size = roundup(region.size, PAGE_SIZE);
+
+	if (req_start + req_len > region.size)
+		return -EINVAL;
+
+	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+	vma->vm_pgoff     = (region.addr >> PAGE_SHIFT) + pgoff;
+
+	return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
+					req_len, vma->vm_page_prot);
+}
+
+static int pka_drv_ring_mmap(void *device_data, struct vm_area_struct *vma)
+{
+	struct pka_ring_device *ring_dev = device_data;
+	struct pka_ring_region *region;
+	unsigned int            index;
+
+	PKA_DEBUG(PKA_DRIVER, "mmap device %u\n", ring_dev->device_id);
+
+	index = vma->vm_pgoff >> (PKA_RING_REGION_OFFSET_SHIFT - PAGE_SHIFT);
+
+	if (vma->vm_end < vma->vm_start)
+		return -EINVAL;
+	if (!(vma->vm_flags & VM_SHARED))
+		return -EINVAL;
+	if (index >= ring_dev->num_regions)
+		return -EINVAL;
+	if (vma->vm_start & ~PAGE_MASK)
+		return -EINVAL;
+	if (vma->vm_end & ~PAGE_MASK)
+		return -EINVAL;
+
+	region = &ring_dev->regions[index];
+
+	if (!(region->flags & PKA_RING_REGION_FLAG_MMAP))
+		return -EINVAL;
+
+	if (!(region->flags & PKA_RING_REGION_FLAG_READ)
+	    && (vma->vm_flags & VM_READ))
+		return -EINVAL;
+
+	if (!(region->flags & PKA_RING_REGION_FLAG_WRITE)
+	    && (vma->vm_flags & VM_WRITE))
+		return -EINVAL;
+
+	vma->vm_private_data = ring_dev;
+
+	if (region->type & PKA_RING_RES_TYPE_CNTRS ||
+	    region->type & PKA_RING_RES_TYPE_MEM)
+		return pka_drv_ring_mmap_region(ring_dev->regions[index], vma);
+
+	if (region->type & PKA_RING_RES_TYPE_WORDS)
+		/*
+		 * Currently user space is not allowed to access this
+		 * region.
+		 */
+		return -EINVAL;
+
+	return -EINVAL;
+}
+
+static long pka_drv_ring_ioctl(void *device_data,
+			   unsigned int cmd, unsigned long arg)
+{
+	struct pka_ring_device *ring_dev = device_data;
+
+	int error = -ENOTTY;
+
+	if (cmd == PKA_RING_GET_REGION_INFO) {
+		pka_dev_region_info_t info;
+
+		info.mem_index  = PKA_RING_REGION_MEM_IDX;
+		info.mem_offset = ring_dev->regions[info.mem_index].off;
+		info.mem_size   = ring_dev->regions[info.mem_index].size;
+
+		info.reg_index  = PKA_RING_REGION_CNTRS_IDX;
+		info.reg_offset = ring_dev->regions[info.reg_index].off;
+		info.reg_size   = ring_dev->regions[info.reg_index].size;
+
+		return copy_to_user((void __user *)arg, &info, sizeof(info)) ?
+			-EFAULT : 0;
+
+	} else if (cmd == PKA_GET_RING_INFO) {
+		pka_dev_hw_ring_info_t *this_ring_info;
+		pka_dev_hw_ring_info_t  hw_ring_info;
+
+		this_ring_info = ring_dev->ring->ring_info;
+
+		hw_ring_info.cmmd_base      = this_ring_info->cmmd_base;
+		hw_ring_info.rslt_base      = this_ring_info->rslt_base;
+		hw_ring_info.size           = this_ring_info->size;
+		hw_ring_info.host_desc_size = this_ring_info->host_desc_size;
+		hw_ring_info.in_order       = this_ring_info->in_order;
+		hw_ring_info.cmmd_rd_ptr    = this_ring_info->cmmd_rd_ptr;
+		hw_ring_info.rslt_wr_ptr    = this_ring_info->rslt_wr_ptr;
+		hw_ring_info.cmmd_rd_stats  = this_ring_info->cmmd_rd_ptr;
+		hw_ring_info.rslt_wr_stats  = this_ring_info->rslt_wr_stats;
+
+		return copy_to_user((void __user *)arg, &hw_ring_info,
+				    sizeof(hw_ring_info)) ? -EFAULT : 0;
+	} else if (cmd == PKA_CLEAR_RING_COUNTERS) {
+		return pka_dev_clear_ring_counters(ring_dev->ring);
+	} else if (cmd == PKA_GET_RANDOM_BYTES) {
+		pka_dev_trng_info_t *trng_data;
+		pka_dev_shim_t *shim;
+		bool trng_present;
+		uint32_t byte_cnt;
+		uint32_t *data;
+		int ret;
+
+		ret = -ENOENT;
+		shim = ring_dev->ring->shim;
+		trng_data = (pka_dev_trng_info_t *)arg;
+		/*
+		 * We need byte count which is multiple of 4 as
+		 * required by pka_dev_trng_read() interface.
+		 */
+		byte_cnt = round_up(trng_data->count, 4);
+
+		data = kzalloc(byte_cnt, GFP_KERNEL);
+		if (data == NULL) {
+			PKA_DEBUG(PKA_DRIVER, "failed to allocate memory.\n");
+			return -ENOMEM;
+		}
+
+		trng_present = pka_dev_has_trng(shim);
+		if (!trng_present) {
+			kfree(data);
+			return ret;
+		}
+
+		ret = pka_dev_trng_read(shim, data, byte_cnt);
+		if (ret) {
+			PKA_DEBUG(PKA_DRIVER, "TRNG failed %d\n", ret);
+			kfree(data);
+			return ret;
+		}
+
+		ret = copy_to_user((void __user *)(trng_data->data), data, trng_data->count);
+		kfree(data);
+		return ret ? -EFAULT : 0;
+	}
+
+	return error;
+}
+
+#ifdef CONFIG_PKA_VFIO_IOMMU
+static const struct vfio_device_ops pka_ring_vfio_ops = {
+	.name    = PKA_DRIVER_NAME,
+	.open    = pka_drv_ring_open,
+	.release = pka_drv_ring_release,
+	.ioctl   = pka_drv_ring_ioctl,
+	.mmap    = pka_drv_ring_mmap,
+};
+
+static int pka_drv_add_ring_device(struct pka_ring_device *ring_dev)
+{
+	struct device *dev = ring_dev->device;
+	int ret;
+
+	ring_dev->parent_module = THIS_MODULE;
+	ring_dev->flags         = VFIO_DEVICE_FLAGS_PLATFORM;
+
+	ring_dev->group = vfio_iommu_group_get(dev);
+	if (!ring_dev->group) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to get IOMMU group for device %d\n",
+			  ring_dev->device_id);
+		return -EINVAL;
+	}
+
+	/*
+	 * Note that this call aims to add the given child device to a vfio
+	 * group. This function creates a new driver data for the device
+	 * different from the structure passed as a 3rd argument - i.e.
+	 * pka_ring_dev. The struct newly created corresponds to 'vfio_device'
+	 * structure which includes a field called 'device_data' that holds
+	 * the initialized 'pka_ring_dev'. So to retrieve our private data,
+	 * we must call 'dev_get_drvdata()' which returns the 'vfio_device'
+	 * struct and access its 'device_data' field. Here one can use
+	 * 'pka_platdata' structure instead to be consistent with the parent
+	 * devices, and have a common driver data structure which will be used
+	 * to manage devices - 'pka_drv_remove()' for instance. Since the VFIO
+	 * framework alters the driver data and introduce an indirection, it
+	 * is no more relevant to have a common driver data structure. Hence,
+	 * we prefer to set the struct 'pka_vfio_dev' instead to avoid
+	 * indirection when we have to retrieve this structure during the
+	 * open(), mmap(), and ioctl() calls. Since, this structure is used
+	 * as driver data here, it will be immediately reachable for these
+	 * functions (see first argument passed (void *device_data) passed
+	 * to those functions).
+	 */
+	ret = vfio_add_group_dev(dev, &pka_ring_vfio_ops, ring_dev);
+	if (ret) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to add group device %d\n",
+			  ring_dev->device_id);
+		vfio_iommu_group_put(ring_dev->group, dev);
+		return ret;
+	}
+
+	ring_dev->group_id = iommu_group_id(ring_dev->group);
+
+	PKA_DEBUG(PKA_DRIVER,
+		  "ring device %d bus:%p iommu_ops:%p group:%p\n",
+		  ring_dev->device_id,
+		  dev->bus,
+		  dev->bus->iommu_ops,
+		  ring_dev->group);
+
+	return 0;
+}
+
+static struct pka_ring_device *pka_drv_del_ring_device(struct device *dev)
+{
+	struct pka_ring_device *ring_dev;
+
+	ring_dev = vfio_del_group_dev(dev);
+	if (ring_dev)
+		vfio_iommu_group_put(dev->iommu_group, dev);
+
+	return ring_dev;
+}
+
+static int pka_drv_init_class(void)
+{
+	return 0;
+}
+
+static void pka_drv_destroy_class(void)
+{
+}
+#else
+static struct pka {
+	struct class *class;
+	struct idr    ring_idr;
+	struct mutex  ring_lock;
+	struct cdev   ring_cdev;
+	dev_t         ring_devt;
+} pka;
+
+static int pka_drv_open(struct inode *inode, struct file *filep)
+{
+	struct pka_ring_device *ring_dev;
+	int ret;
+
+	ring_dev = idr_find(&pka.ring_idr, iminor(inode));
+	if (!ring_dev) {
+		PKA_ERROR(PKA_DRIVER,
+			  "failed to find idr for device %d\n",
+			  ring_dev->device_id);
+		return -ENODEV;
+	}
+
+	ret = pka_drv_ring_open(ring_dev);
+	if (ret)
+		return ret;
+
+	filep->private_data = ring_dev;
+	return 0;
+}
+
+static int pka_drv_release(struct inode *inode, struct file *filep)
+{
+	struct pka_ring_device *ring_dev = filep->private_data;
+
+	filep->private_data = NULL;
+	pka_drv_ring_release(ring_dev);
+
+	return 0;
+}
+
+static int pka_drv_mmap(struct file *filep, struct vm_area_struct *vma)
+{
+	return pka_drv_ring_mmap(filep->private_data, vma);
+}
+
+static long pka_drv_unlocked_ioctl(struct file *filep,
+				   unsigned int cmd, unsigned long arg)
+{
+	return pka_drv_ring_ioctl(filep->private_data, cmd, arg);
+}
+
+static const struct file_operations pka_ring_fops = {
+	.owner          = THIS_MODULE,
+	.open           = pka_drv_open,
+	.release        = pka_drv_release,
+	.unlocked_ioctl = pka_drv_unlocked_ioctl,
+	.mmap           = pka_drv_mmap,
+};
+
+static int pka_drv_add_ring_device(struct pka_ring_device *ring_dev)
+{
+	struct device *dev = ring_dev->device;
+
+	ring_dev->minor = idr_alloc(&pka.ring_idr,
+				    ring_dev, 0, MINORMASK + 1, GFP_KERNEL);
+	if (ring_dev->minor < 0) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to alloc minor to device %d\n",
+			  ring_dev->device_id);
+		return ring_dev->minor;
+	}
+
+	dev = device_create(pka.class, NULL,
+			    MKDEV(MAJOR(pka.ring_devt), ring_dev->minor),
+			    ring_dev, "%d", ring_dev->device_id);
+	if (IS_ERR(dev)) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to create device %d\n",
+			  ring_dev->device_id);
+		idr_remove(&pka.ring_idr, ring_dev->minor);
+		return PTR_ERR(dev);
+	}
+
+	PKA_DEBUG(PKA_DRIVER,
+		  "ring device %d minor:%d\n",
+		  ring_dev->device_id, ring_dev->minor);
+
+	return 0;
+}
+
+static struct pka_ring_device *pka_drv_del_ring_device(struct device *dev)
+{
+	struct platform_device *pdev     =
+		container_of(dev, struct platform_device, dev);
+	struct pka_platdata        *priv = platform_get_drvdata(pdev);
+	struct pka_info            *info = priv->info;
+	struct pka_ring_device *ring_dev = info->priv;
+
+	if (ring_dev) {
+		device_destroy(pka.class, MKDEV(MAJOR(pka.ring_devt),
+						ring_dev->minor));
+		idr_remove(&pka.ring_idr, ring_dev->minor);
+	}
+
+	return ring_dev;
+}
+
+static char *pka_drv_devnode(struct device *dev, umode_t *mode)
+{
+	if (mode != NULL)
+		*mode = PKA_DEVICE_ACCESS_MODE;
+	return kasprintf(GFP_KERNEL, "pka/%s", dev_name(dev));
+}
+
+static int pka_drv_init_class(void)
+{
+	int ret;
+
+	idr_init(&pka.ring_idr);
+	/* /sys/class/pka/$RING */
+	pka.class = class_create(THIS_MODULE, "pka");
+	if (IS_ERR(pka.class))
+		return PTR_ERR(pka.class);
+
+	/* /dev/pka/$RING */
+	pka.class->devnode = pka_drv_devnode;
+
+	ret = alloc_chrdev_region(&pka.ring_devt, 0, MINORMASK, "pka");
+	if (ret)
+		goto err_alloc_chrdev;
+
+	cdev_init(&pka.ring_cdev, &pka_ring_fops);
+	ret = cdev_add(&pka.ring_cdev, pka.ring_devt, MINORMASK);
+	if (ret)
+		goto err_cdev_add;
+
+	return 0;
+
+err_cdev_add:
+	unregister_chrdev_region(pka.ring_devt, MINORMASK);
+err_alloc_chrdev:
+	class_destroy(pka.class);
+	pka.class = NULL;
+	return ret;
+}
+
+static void pka_drv_destroy_class(void)
+{
+	idr_destroy(&pka.ring_idr);
+	cdev_del(&pka.ring_cdev);
+	unregister_chrdev_region(pka.ring_devt, MINORMASK);
+	class_destroy(pka.class);
+	pka.class = NULL;
+}
+#endif
+
+static void pka_drv_get_mem_res(struct pka_device *pka_dev,
+				struct pka_dev_mem_res *mem_res,
+				uint64_t wndw_ram_off_mask)
+{
+	enum pka_mem_res_idx acpi_mem_idx;
+
+	acpi_mem_idx = PKA_ACPI_EIP154_IDX;
+	mem_res->wndw_ram_off_mask = wndw_ram_off_mask;
+
+	/* PKA EIP154 MMIO base address*/
+	mem_res->eip154_base = pka_dev->resource[acpi_mem_idx]->start;
+	mem_res->eip154_size = pka_dev->resource[acpi_mem_idx]->end -
+			       mem_res->eip154_base + 1;
+	acpi_mem_idx++;
+
+	/* PKA window ram base address*/
+	mem_res->wndw_ram_base = pka_dev->resource[acpi_mem_idx]->start;
+	mem_res->wndw_ram_size = pka_dev->resource[acpi_mem_idx]->end -
+				 mem_res->wndw_ram_base + 1;
+	acpi_mem_idx++;
+
+	/* PKA alternate window ram base address
+	 * Note: Here the size of all the alt window ram is same, depicted by
+	 * 'alt_wndw_ram_size' variable. All alt window ram resources are read
+	 * here even though not all of them are used currently.
+	 */
+	mem_res->alt_wndw_ram_0_base = pka_dev->resource[acpi_mem_idx]->start;
+	mem_res->alt_wndw_ram_size   = pka_dev->resource[acpi_mem_idx]->end -
+				       mem_res->alt_wndw_ram_0_base + 1;
+
+	if (mem_res->alt_wndw_ram_size != PKA_WINDOW_RAM_REGION_SIZE)
+		PKA_ERROR(PKA_DRIVER,
+		"Alternate Window RAM size read from ACPI is incorrect.\n");
+
+	acpi_mem_idx++;
+
+	mem_res->alt_wndw_ram_1_base = pka_dev->resource[acpi_mem_idx]->start;
+	acpi_mem_idx++;
+
+	mem_res->alt_wndw_ram_2_base = pka_dev->resource[acpi_mem_idx]->start;
+	acpi_mem_idx++;
+
+	mem_res->alt_wndw_ram_3_base = pka_dev->resource[acpi_mem_idx]->start;
+	acpi_mem_idx++;
+
+	/* PKA CSR base address*/
+	mem_res->csr_base = pka_dev->resource[acpi_mem_idx]->start;
+	mem_res->csr_size = pka_dev->resource[acpi_mem_idx]->end -
+			    mem_res->csr_base + 1;
+}
+
+/*
+ * Note that this function must be serialized because it calls
+ * 'pka_dev_register_shim' which manipulates common counters for
+ * pka devices.
+ */
+static int pka_drv_register_device(struct pka_device *pka_dev,
+				   uint64_t wndw_ram_off_mask)
+{
+	uint32_t pka_shim_id;
+	uint8_t  pka_shim_fw_id;
+	struct pka_dev_mem_res mem_res;
+
+	/* Register Shim */
+	pka_shim_id    = pka_dev->device_id;
+	pka_shim_fw_id = pka_dev->fw_id;
+
+	pka_drv_get_mem_res(pka_dev, &mem_res, wndw_ram_off_mask);
+
+	pka_dev->shim = pka_dev_register_shim(pka_shim_id, pka_shim_fw_id,
+					      &mem_res);
+	if (!pka_dev->shim) {
+		PKA_DEBUG(PKA_DRIVER,
+		  "failed to register shim id=%u\n", pka_shim_id);
+		return -EFAULT;
+	}
+
+	return 0;
+}
+
+static int pka_drv_unregister_device(struct pka_device *pka_dev)
+{
+	if (!pka_dev)
+		return -EINVAL;
+
+	if (pka_dev->shim) {
+		PKA_DEBUG(PKA_DRIVER,
+				"unregister device shim %u\n",
+				pka_dev->shim->shim_id);
+		return pka_dev_unregister_shim(pka_dev->shim);
+	}
+
+	return 0;
+}
+
+/*
+ * Note that this function must be serialized because it calls
+ * 'pka_dev_register_ring' which manipulates common counters for
+ * vfio devices.
+ */
+static int pka_drv_register_ring_device(struct pka_ring_device *ring_dev)
+{
+	uint32_t ring_id;
+	uint32_t shim_id;
+
+	ring_id = ring_dev->device_id;
+	shim_id = ring_dev->parent_device_id;
+
+	ring_dev->ring = pka_dev_register_ring(ring_id, shim_id);
+	if (!ring_dev->ring) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to register ring device %u\n", ring_id);
+		return -EFAULT;
+	}
+
+	return 0;
+}
+
+static int pka_drv_unregister_ring_device(struct pka_ring_device *ring_dev)
+{
+	uint32_t ring_id;
+
+	if (!ring_dev)
+		return -EINVAL;
+
+	ring_id = ring_dev->ring->ring_id;
+
+	if (ring_dev->ring) {
+		PKA_DEBUG(PKA_DRIVER, "unregister ring device %u\n", ring_id);
+		return pka_dev_unregister_ring(ring_dev->ring);
+	}
+
+	return 0;
+}
+
+static const struct of_device_id pka_ring_match[] = {
+	{ .compatible = PKA_RING_DEVICE_COMPAT },
+	{},
+};
+
+static int pka_drv_rng_read(struct hwrng *rng, void *data, size_t max,
+			    bool wait)
+{
+	int ret;
+
+	struct pka_device *pka_dev = container_of(rng, struct pka_device, rng);
+	uint32_t          *buffer = data;
+
+	ret = pka_dev_trng_read(pka_dev->shim, buffer, max);
+	if (ret) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "%s: failed to read random bytes ret=%d",
+			  rng->name, ret);
+		return 0;
+	}
+
+	return max;
+}
+
+static int pka_drv_probe_device(struct pka_info *info)
+{
+	struct pka_device  *pka_dev;
+	struct device      *dev = info->dev;
+	struct device_node *of_node = dev->of_node;
+	struct platform_device *pdev = to_platform_device(dev);
+	struct hwrng *trng;
+	const struct acpi_device_id *aid;
+	struct pka_drv_plat_info *plat_info;
+	uint64_t wndw_ram_off_mask;
+	int ret;
+	enum pka_mem_res_idx acpi_mem_idx;
+
+	if (!info)
+		return -EINVAL;
+
+	pka_dev = kzalloc(sizeof(*pka_dev), GFP_KERNEL);
+	if (!pka_dev)
+		return -ENOMEM;
+
+	mutex_lock(&pka_drv_lock);
+	pka_device_cnt += 1;
+	if (pka_device_cnt > PKA_DRIVER_DEV_MAX) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "cannot support %u devices\n", pka_device_cnt);
+		kfree(pka_dev);
+		mutex_unlock(&pka_drv_lock);
+		return -EPERM;
+	}
+	pka_dev->device_id = pka_device_cnt - 1;
+	mutex_unlock(&pka_drv_lock);
+
+	pka_dev->info   = info;
+	pka_dev->device = dev;
+	info->flag      = PKA_DRIVER_FLAG_DEVICE;
+	mutex_init(&pka_dev->mutex);
+
+	for (acpi_mem_idx = PKA_ACPI_EIP154_IDX;
+		acpi_mem_idx < PKA_DEVICE_RES_CNT; acpi_mem_idx++) {
+		pka_dev->resource[acpi_mem_idx] =
+			platform_get_resource(pdev, IORESOURCE_MEM, acpi_mem_idx);
+	}
+
+	/* Window ram offset mask is platform dependent */
+	aid = acpi_match_device(pka_drv_acpi_ids, dev);
+	if (!aid)
+		return -ENODEV;
+
+	plat_info = (struct pka_drv_plat_info *)aid->driver_data;
+	if (plat_info->type <= PKA_PLAT_TYPE_BF2) {
+		wndw_ram_off_mask = PKA_WINDOW_RAM_OFFSET_MASK1;
+	} else {
+		PKA_ERROR(PKA_DRIVER, "Invalid platform type: %d\n",
+				(int)plat_info->type);
+		return -EINVAL;
+	}
+
+	/* Set interrupts */
+	ret = platform_get_irq(pdev, 0);
+	pka_dev->irq = ret;
+	if (ret == -ENXIO && of_node) {
+		pka_dev->irq = PKA_IRQ_NONE;
+	} else if (ret < 0) {
+		PKA_ERROR(PKA_DRIVER,
+			"failed to get device %u IRQ\n", pka_dev->device_id);
+		return ret;
+	}
+
+	/* Register IRQ */
+	ret = pka_drv_register_irq(pka_dev);
+	if (ret) {
+		PKA_ERROR(PKA_DRIVER,
+			  "failed to register device %u IRQ\n",
+			  pka_dev->device_id);
+		return ret;
+	}
+
+	/* Firmware version */
+	pka_dev->fw_id = plat_info->fw_id;
+
+	mutex_lock(&pka_drv_lock);
+	ret = pka_drv_register_device(pka_dev, wndw_ram_off_mask);
+	if (ret) {
+		PKA_DEBUG(PKA_DRIVER, "failed to register shim id=%u\n",
+			  pka_dev->device_id);
+		mutex_unlock(&pka_drv_lock);
+		return ret;
+	}
+	mutex_unlock(&pka_drv_lock);
+
+	/* Setup the TRNG, if needed */
+	if (pka_dev_has_trng(pka_dev->shim)) {
+		trng = &pka_dev->rng;
+		trng->name = pdev->name;
+		trng->read = pka_drv_rng_read;
+
+		ret = hwrng_register(&pka_dev->rng);
+		if (ret) {
+			PKA_ERROR(PKA_DRIVER,
+				  "failed to register trng\n");
+			return ret;
+		}
+	}
+
+	info->priv = pka_dev;
+
+#ifdef BUG_SW_1127083_FIXED
+	/*
+	 * Create platform devices (pka-ring) from current node.
+	 * This code is reserverd for DT.
+	 */
+	if (of_node) {
+		ret = of_platform_populate(of_node, pka_ring_match,
+					   NULL, dev);
+		if (ret) {
+			PKA_ERROR(PKA_DRIVER,
+				"failed to create platform devices\n");
+			return ret;
+		}
+	}
+#endif
+
+	return 0;
+}
+
+static int pka_drv_remove_device(struct platform_device *pdev)
+{
+	struct pka_platdata *priv = platform_get_drvdata(pdev);
+	struct pka_info     *info = priv->info;
+	struct pka_device   *pka_dev = (struct pka_device *)info->priv;
+
+	if (!pka_dev) {
+		PKA_ERROR(PKA_DRIVER, "failed to unregister device\n");
+		return -EINVAL;
+	}
+
+	if (pka_dev_has_trng(pka_dev->shim))
+		hwrng_unregister(&pka_dev->rng);
+
+	if (pka_drv_unregister_device(pka_dev))
+		PKA_ERROR(PKA_DRIVER, "failed to unregister device\n");
+
+	return 0;
+}
+
+static int pka_drv_probe_ring_device(struct pka_info *info)
+{
+	struct pka_ring_device *ring_dev;
+	struct device          *dev = info->dev;
+
+	int ret;
+
+	if (!info)
+		return -EINVAL;
+
+	ring_dev = kzalloc(sizeof(*ring_dev), GFP_KERNEL);
+	if (!ring_dev)
+		return -ENOMEM;
+
+	mutex_lock(&pka_drv_lock);
+	pka_ring_device_cnt += 1;
+	if (pka_ring_device_cnt > PKA_DRIVER_RING_DEV_MAX) {
+		PKA_DEBUG(PKA_DRIVER, "cannot support %u ring devices\n",
+			  pka_ring_device_cnt);
+		kfree(ring_dev);
+		mutex_unlock(&pka_drv_lock);
+		return -EPERM;
+	}
+	ring_dev->device_id        = pka_ring_device_cnt - 1;
+	ring_dev->parent_device_id = pka_device_cnt - 1;
+	mutex_unlock(&pka_drv_lock);
+
+	ring_dev->info   = info;
+	ring_dev->device = dev;
+	info->flag       = PKA_DRIVER_FLAG_RING_DEVICE;
+	mutex_init(&ring_dev->mutex);
+
+	ret = pka_drv_add_ring_device(ring_dev);
+	if (ret) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to add ring device %u\n",
+			  ring_dev->device_id);
+		kfree(ring_dev);
+		return ret;
+	}
+
+	mutex_lock(&pka_drv_lock);
+	/* Register ring device */
+	ret = pka_drv_register_ring_device(ring_dev);
+	if (ret) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "failed to register ring device %u\n",
+			  ring_dev->device_id);
+		mutex_unlock(&pka_drv_lock);
+		goto err_register_ring;
+	}
+	mutex_unlock(&pka_drv_lock);
+
+	info->priv = ring_dev;
+
+	return 0;
+
+ err_register_ring:
+	pka_drv_del_ring_device(dev);
+	kfree(ring_dev);
+	return ret;
+}
+
+static int pka_drv_remove_ring_device(struct platform_device *pdev)
+{
+	struct pka_ring_device *ring_dev;
+	struct device          *dev = &pdev->dev;
+	int ret;
+
+	ring_dev = pka_drv_del_ring_device(dev);
+	if (ring_dev) {
+		ret = pka_drv_unregister_ring_device(ring_dev);
+		if (ret) {
+			PKA_ERROR(PKA_DRIVER,
+				  "failed to unregister vfio device\n");
+			return ret;
+		}
+		kfree(ring_dev);
+	}
+
+	return 0;
+}
+
+static int pka_drv_of_probe(struct platform_device *pdev,
+				struct pka_info *info)
+{
+#ifdef BUG_SW_1127083_FIXED
+	struct device *dev = &pdev->dev;
+
+	int error;
+
+	error = device_property_read_string(dev, "compatible", &info->compat);
+	if (error) {
+		PKA_DEBUG(PKA_DRIVER, "cannot retrieve compat for %s\n",
+			  pdev->name);
+		return -EINVAL;
+	}
+
+	if (!strcmp(info->compat, pka_ring_compat)) {
+		PKA_PRINT(PKA_DRIVER, "probe ring device %s\n",
+			  pdev->name);
+		error = pka_drv_probe_ring_device(info);
+		if (error) {
+			PKA_DEBUG(PKA_DRIVER,
+				  "failed to register ring device compat=%s\n",
+				  info->compat);
+			return error;
+		}
+
+	} else if (!strcmp(info->compat, pka_compat)) {
+		PKA_PRINT(PKA_DRIVER, "probe device %s\n", pdev->name);
+		error = pka_drv_probe_device(info);
+		if (error) {
+			PKA_DEBUG(PKA_DRIVER,
+				  "failed to register device compat=%s\n",
+				  info->compat);
+			return error;
+		}
+	}
+
+	return 0;
+#endif
+	return -EPERM;
+}
+
+static int pka_drv_acpi_probe(struct platform_device *pdev,
+			      struct pka_info *info)
+{
+	struct acpi_device *adev;
+	struct device *dev = &pdev->dev;
+
+	int error;
+
+	if (acpi_disabled)
+		return -ENOENT;
+
+	adev = ACPI_COMPANION(dev);
+	if (!adev) {
+		PKA_DEBUG(PKA_DRIVER,
+			  "ACPI companion device not found for %s\n",
+			  pdev->name);
+		return -ENODEV;
+	}
+
+	info->acpihid = acpi_device_hid(adev);
+	if (WARN_ON(!info->acpihid))
+		return -EINVAL;
+
+	if (!strcmp(info->acpihid, pka_ring_acpihid_bf1)
+	|| !strcmp(info->acpihid, pka_ring_acpihid_bf2)) {
+		error = pka_drv_probe_ring_device(info);
+		if (error) {
+			PKA_DEBUG(PKA_DRIVER,
+				  "failed to register ring device %s\n",
+				  pdev->name);
+			return error;
+		}
+		PKA_DEBUG(PKA_DRIVER, "ring device %s probed\n",
+			  pdev->name);
+
+	} else if (!strcmp(info->acpihid, pka_acpihid_bf1)
+		|| !strcmp(info->acpihid, pka_acpihid_bf2)) {
+		error = pka_drv_probe_device(info);
+		if (error) {
+			PKA_DEBUG(PKA_DRIVER,
+				  "failed to register device %s\n",
+				  pdev->name);
+			return error;
+		}
+		PKA_PRINT(PKA_DRIVER, "device %s probed\n", pdev->name);
+	}
+
+	return 0;
+}
+
+static int pka_drv_probe(struct platform_device *pdev)
+{
+	struct pka_platdata *priv;
+	struct pka_info     *info;
+	struct device       *dev = &pdev->dev;
+
+	int ret;
+
+	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	spin_lock_init(&priv->lock);
+	priv->pdev = pdev;
+	/* interrupt is disabled to begin with */
+	priv->irq_flags = 0;
+
+	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	if (!info)
+		return -ENOMEM;
+
+	info->name    = pdev->name;
+	info->version = PKA_DRIVER_VERSION;
+	info->module  = THIS_MODULE;
+	info->dev     = dev;
+
+	priv->info    = info;
+
+	platform_set_drvdata(pdev, priv);
+
+	/*
+	 * There can be two kernel build combinations. One build where
+	 * ACPI is not selected and another one with the ACPI.
+	 *
+	 * In the first case, 'pka_drv_acpi_probe' will return since
+	 * acpi_disabled is 1. DT user will not see any kind of messages
+	 * from ACPI.
+	 *
+	 * In the second case, both DT and ACPI is compiled in but the
+	 * system is booting with any of these combinations.
+	 *
+	 * If the firmware is DT type, then acpi_disabled is 1. The ACPI
+	 * probe routine terminates immediately without any messages.
+	 *
+	 * If the firmware is ACPI type, then acpi_disabled is 0. All other
+	 * checks are valid checks. We cannot claim that this system is DT.
+	 */
+	ret = pka_drv_acpi_probe(pdev, info);
+	if (ret)
+		ret = pka_drv_of_probe(pdev, info);
+
+	if (ret) {
+		PKA_DEBUG(PKA_DRIVER, "unknown device\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int pka_drv_remove(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+
+	/*
+	 * Little hack here:
+	 * The issue here is that the driver data structure which holds our
+	 * initialized private data cannot be used when the 'pdev' arguments
+	 * points to child device -i.e. vfio device. Indeed, during the probe
+	 * function we set an initialized structure called 'priv' as driver
+	 * data for all platform devices including parents devices and child
+	 * devices. This driver data is unique to each device - see call to
+	 * 'platform_set_drvdata()'. However, when we add the child device to
+	 * a vfio group through 'vfio_add_group_dev()' call, this function
+	 * creates a new driver data for the device - i.e.  a 'vfio_device'
+	 * structure which includes a field called 'device_data' to hold the
+	 * aforementionned initialized private data. So, to retrieve our
+	 * private data, we must call 'dev_get_drvdata()' which returns the
+	 * 'vfio_device' struct and access its 'device_data' field. However,
+	 * this cannot be done before determining if the 'pdev' is associated
+	 * with a child device or a parent device.
+	 * In order to deal with that we propose this little hack which uses
+	 * the iommu_group to distinguich between parent and child devices.
+	 * For now, let's say it is a customized solution that works for our
+	 * case. Indeed, in the current design, the private data holds some
+	 * infos that defines the type of the device. The intuitive way to do
+	 * that is as following:
+	 *
+	 * struct pka_platdata *priv = platform_get_drvdata(pdev);
+	 * struct pka_info     *info = priv->info;
+	 *
+	 * if (info->flag == PKA_DRIVER_FLAG_RING_DEVICE)
+	 *      return pka_drv_remove_ring_device(info);
+	 * if (info->flag == PKA_DRIVER_FLAG_DEVICE)
+	 *      return pka_drv_remove_ring_device(info);
+	 *
+	 * Since the returned private data of child devices -i.e vfio devices
+	 * corresponds to 'vfio_device' structure, we cannot use it to
+	 * differentiate between parent and child devices. This alternative
+	 * solution is used instead.
+	 */
+	if (dev->iommu_group) {
+		PKA_PRINT(PKA_DRIVER, "remove ring device %s\n",
+			  pdev->name);
+		return pka_drv_remove_ring_device(pdev);
+	}
+
+	PKA_PRINT(PKA_DRIVER, "remove device %s\n", pdev->name);
+	return pka_drv_remove_device(pdev);
+}
+
+static const struct of_device_id pka_drv_match[] = {
+	{ .compatible = PKA_DEVICE_COMPAT },
+	{ .compatible = PKA_RING_DEVICE_COMPAT },
+	{}
+};
+
+MODULE_DEVICE_TABLE(of, pka_drv_match);
+
+MODULE_DEVICE_TABLE(acpi, pka_drv_acpi_ids);
+
+static struct platform_driver pka_drv = {
+	.driver  = {
+		   .name = PKA_DRIVER_NAME,
+		   .of_match_table   = of_match_ptr(pka_drv_match),
+		   .acpi_match_table = ACPI_PTR(pka_drv_acpi_ids),
+		   },
+	.probe  = pka_drv_probe,
+	.remove = pka_drv_remove,
+};
+
+/* Initialize the module - Register the pka platform driver */
+static int __init pka_drv_register(void)
+{
+	int ret;
+
+	ret = pka_drv_init_class();
+	if (ret) {
+		PKA_ERROR(PKA_DRIVER, "failed to create class\n");
+		return ret;
+	}
+
+	ret = platform_driver_register(&pka_drv);
+	if (ret) {
+		PKA_ERROR(PKA_DRIVER, "failed to register platform driver\n");
+		return ret;
+	}
+
+	PKA_PRINT(PKA_DRIVER, "version: " PKA_DRIVER_VERSION "\n");
+
+	return 0;
+}
+
+/* Cleanup the module - unregister the pka platform driver */
+static void __exit pka_drv_unregister(void)
+{
+	platform_driver_unregister(&pka_drv);
+	pka_drv_destroy_class();
+}
+
+module_init(pka_drv_register);
+module_exit(pka_drv_unregister);
+
+MODULE_DESCRIPTION(PKA_DRIVER_DESCRIPTION);
+MODULE_VERSION(PKA_DRIVER_VERSION);
+MODULE_LICENSE("Dual BSD/GPL");
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_firmware.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_firmware.h
new file mode 100644
index 000000000000..29ea27ce0049
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_firmware.h
@@ -0,0 +1,4823 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __DRIVERS_MICA_PKA_FW_H__
+#define __DRIVERS_MICA_PKA_FW_H__
+
+#include <linux/types.h>
+
+//
+// Program binaries
+//
+
+// Align to PKA_BUFFER_RAM_SIZE. This is greater than the actual buffer
+// length so that the image is zero padded.
+static const uint32_t fw0_farm_img_data_buf[2048] =
+{
+    0x137001C9, 0x692040FA, 0x55502301, 0x328C0200,
+    0x5E7000C9, 0x3D7000C8, 0x3670001D, 0x5370001F,
+    0x746A4010, 0x046B4014, 0x3C621FF8, 0x4B631FF4,
+    0x2A684000, 0x5A694004, 0x4F601FF6, 0x3F611FF2,
+    0x5A6A4008, 0x2A6B400C, 0x19621FFA, 0x6D631FF0,
+    0x0F684034, 0x7070001E, 0x5D34003F, 0x08601FFE,
+    0x0328000B, 0x52C40047, 0x69240027, 0x04880000,
+    0x76800047, 0x3380002E, 0x36800047, 0x7A800039,
+    0xB6800047, 0xDF80003B, 0xD7800027, 0x9B800035,
+    0xDC80003D, 0xB980003F, 0xB5800041, 0xF36A4018,
+    0xDA621FFC, 0x9997017D, 0xA4300002, 0xD9D00061,
+    0xBC30FFFE, 0xFC800056, 0xF36A4018, 0x9A621FFC,
+    0xD59701CC, 0xA4300002, 0x99D00061, 0xFC30FFFE,
+    0x99800062, 0xD097026C, 0xD38C0400, 0x8B614018,
+    0xBC800056, 0xFF97039F, 0xFC800056, 0x9A97039D,
+    0xFC800056, 0x9D9703A3, 0xBC800056, 0xF89703A1,
+    0xBC800056, 0xDC970367, 0xFC800056, 0x9D200003,
+    0xFC800056, 0xB7200023, 0xBC800056, 0xFD7000C8,
+    0xD2200021, 0xBA8C5000, 0x9B80006F, 0xF5707FC8,
+    0x84702084, 0xF670001D, 0xDB200000, 0xB6010000,
+    0xCF220001, 0xB197007F, 0xA0684084, 0xD3340020,
+    0xA7CC0052, 0xFC20000F, 0xF18C0100, 0xA4300002,
+    0x99D00061, 0xED601FFC, 0xD5681FF0, 0x926A4014,
+    0xF6010000, 0xB18C0100, 0x9260400C, 0xF197007F,
+    0x34681FFC, 0x7C30FFFE, 0x616A1FF6, 0x336B1FF8,
+    0x44624000, 0x3B634010, 0x076A1FF2, 0x526B1FF4,
+    0x62624004, 0x1D634014, 0x006A1FFA, 0x7A230000,
+    0x03624008, 0x7A8C5000, 0x5A63401C, 0x086440C9,
+    0x5B800003, 0x3B6B1FE4, 0x118B4000, 0x7F8C0480,
+    0x17BC004B, 0x6D61401C, 0x518B4000, 0x36010000,
+    0x3C30FFFE, 0x66500000, 0x66500000, 0x26500000,
+    0x66500000, 0x24300002, 0x102A0002, 0x65614000,
+    0xAD624010, 0xF4604008, 0xEE218808, 0x93800073,
+    0xE5631FEC, 0x8B6B4000, 0x846A1FF4, 0xF3604000,
+    0xC3614004, 0x95634008, 0xAD624010, 0xCB624014,
+    0xBB218001, 0xD0970073, 0xFA068000, 0x8C6B4008,
+    0xE6691FF2, 0x92634000, 0x83614004, 0xF4604008,
+    0xAD624010, 0xD6218200, 0xD0970073, 0xBC6B1FEC,
+    0x918B4000, 0xE2631FE4, 0xF0681FF2, 0xB56040A0,
+    0xE5691FF4, 0xB3604000, 0xB4604008, 0xCC614010,
+    0x138C0400, 0x6470081C, 0x5270881D, 0x20F000A3,
+    0x7C30FFFE, 0x33490000, 0x34310001, 0x5D200003,
+    0x48D40071, 0x0931FFFF, 0x146540B4, 0x706B1FFE,
+    0x216A1FF6, 0x7E33FFFF, 0x56D000BA, 0x336B1FF8,
+    0x44624000, 0x03624008, 0x3B634010, 0x7F8C0480,
+    0x17BC004B, 0x5E70011F, 0x6470081C, 0x1270881D,
+    0x08F000B8, 0x538000BC, 0x7F8C0480, 0x17BC004B,
+    0x6C6840A0, 0x30694024, 0x2F090000, 0x7FC8017A,
+    0x23024000, 0x6E2E0001, 0x4B624014, 0x2F31FFFB,
+    0x47684028, 0x1370001F, 0x3734001F, 0x57184000,
+    0x592C0001, 0x17020000, 0x24240008, 0x6934FFE0,
+    0x04300005, 0x65691FF4, 0x506040A2, 0x366040A6,
+    0x592C0001, 0x2F090000, 0x10C400DF, 0x7A6940A0,
+    0x0E050000, 0x722DFFFF, 0x6A31FFFE, 0x30510000,
+    0x30510000, 0x61691FFA, 0x4E050000, 0x322DFFFF,
+    0x6A31FFFE, 0x30510000, 0x30510000, 0x592C0001,
+    0x8434FFFE, 0xC4601FEC, 0xF526000C, 0xB0621FEA,
+    0xD126005F, 0xBA200060, 0xBA230000, 0xCB0B2000,
+    0xF22DFFFF, 0x816140AA, 0x8F2D0001, 0xEA072000,
+    0xBF6B1FEA, 0xD4004000, 0xFA30FFFD, 0xAF0AC000,
+    0xFA230000, 0xA6631FEA, 0x8B0B2000, 0xFA20000C,
+    0xBA230000, 0xF4290007, 0xF9C400F9, 0x95250007,
+    0x9B8000FA, 0xED210007, 0xCD084000, 0xB61B4000,
+    0xF9634088, 0x986940AA, 0xBA30FFFD, 0xCF2D0001,
+    0xAA072000, 0xF22A0008, 0xD5621FE8, 0xB5008000,
+    0xEE2E0001, 0xA934FFE0, 0x84300005, 0xD92C0001,
+    0xF46B1FF0, 0x8B691FEC, 0xA1601FEE, 0xCD074000,
+    0x92634000, 0xDD33FFFE, 0xC7530000, 0x87530000,
+    0xC7530000, 0x87530000, 0x85330002, 0xD5634008,
+    0xB9070000, 0xE52B0003, 0xE4280004, 0x8FC00130,
+    0x992C0001, 0xDA604010, 0xFF8C0480, 0x97BC004B,
+    0xDE70011F, 0x9570001C, 0x9270881D, 0xE3F0011F,
+    0x07691FFE, 0x66684024, 0x4931FFFF, 0x1BD0012F,
+    0x40691FF6, 0x02140000, 0x3ED00177, 0x4D084000,
+    0x51694028, 0x2135001F, 0x3930FFFB, 0x57184000,
+    0x3BC80174, 0x592C0001, 0x40601FE2, 0x1370001F,
+    0x75008000, 0x3E3CFFFF, 0x18218000, 0x6C110000,
+    0x1D33FFFE, 0x50340010, 0x57C8013B, 0x0B41C000,
+    0x27270002, 0x47530000, 0x5180013D, 0x07530000,
+    0x4B41C000, 0x38681FEE, 0x3A6940A0, 0x5A604010,
+    0x0B6B4000, 0x7904C000, 0x592C0001, 0x0434FFFE,
+    0x43614004, 0x34604008, 0x2268401C, 0x7F8C0480,
+    0x57BC004B, 0x1E70011F, 0x1570001C, 0x6D70821D,
+    0x07F0014C, 0x7E340008, 0x73C8015E, 0x07691FFE,
+    0x66684024, 0x0931FFFF, 0x30D0015E, 0x40691FF6,
+    0x02140000, 0x7ED00177, 0x4D084000, 0x11694028,
+    0x3930FFFB, 0x6135001F, 0x57184000, 0x3BC80174,
+    0x592C0001, 0x00601FE2, 0x1370001F, 0x6D691FE8,
+    0x9F20000E, 0xF4310001, 0xC931FFFF, 0xB4D00166,
+    0xE42CFFFF, 0x94800162, 0xBC694000, 0xC62207FA,
+    0xCC6B4008, 0xA46140A8, 0xB26340A4, 0xE36240AC,
+    0xB16040AE, 0xD77000B2, 0xFF8C0480, 0x97BC004B,
+    0xF8700484, 0x9CE00171, 0xB8200001, 0xF6800071,
+    0xBF200009, 0xD370001F, 0xF6800071, 0x9E200005,
+    0x9370001F, 0xF6800071, 0xFB200007, 0x9370001F,
+    0xF3C80071, 0x84631FE0, 0xBA230000, 0xE9631FFE,
+    0x3F970099, 0x433C0001, 0x7CC80185, 0x033C0001,
+    0x558001CA, 0x37681FFA, 0x136040A4, 0x5D8C0180,
+    0x57BC004B, 0x1A700184, 0x39E0018A, 0x7D6940A8,
+    0x096840A2, 0x65614000, 0x592C0001, 0x346B1FF0,
+    0x5A604010, 0x15634008, 0x1D8C0180, 0x57BC004B,
+    0x1570001C, 0x5270881D, 0x62691FFC, 0x322DFFFF,
+    0x17C801AE, 0x54004000, 0x4034FFF0, 0x1A20000B,
+    0x68CC01CA, 0x2A6A1FEC, 0x0100C000, 0x4D048000,
+    0x936340A8, 0xF26340A4, 0xFF8C0480, 0x97BC004B,
+    0xDA700184, 0xB4E001A5, 0xB26040A8, 0xCD048000,
+    0xDD8C0180, 0x97BC004B, 0x99700284, 0xF0E001AB,
+    0xB22DFFFF, 0xE8CC01A6, 0xD5681FF0, 0x8B691FEC,
+    0xCE050000, 0xA16A1FF6, 0xB86B1FE2, 0xF26040A8,
+    0x856140A4, 0xE36240AC, 0xF4681FFC, 0x862B0002,
+    0xA42CFFFF, 0xD06340AE, 0xF96040B2, 0x968C5080,
+    0xD7BC004B, 0xB8700484, 0x9CE001BE, 0xFE201FE8,
+    0x85500001, 0xE4300002, 0xD36040A4, 0x9B200000,
+    0xF66040A6, 0x9D8C0180, 0x97BC004B, 0xDA700184,
+    0xD7E001C8, 0xB8200001, 0x9D6B1FE0, 0xD18B4000,
+    0x87631FE6, 0xE6691FF2, 0xC06A1FFA, 0x83614004,
+    0xE5691FF4, 0xB3621FDA, 0xAA614014, 0xD4004000,
+    0x86240002, 0xC434FFFE, 0xE1601FD8, 0xBA054000,
+    0xA26A1FF0, 0xCC614010, 0xC4624000, 0xAF060000,
+    0xEF060000, 0xB1260002, 0x83624008, 0xD6218200,
+    0x10970073, 0x516B1FF2, 0x6F060000, 0x39070000,
+    0x74634004, 0x03624008, 0x10970073, 0x57020000,
+    0x7B694008, 0x15681FF0, 0x3A098000, 0x7A068000,
+    0x3197007F, 0x78681FD8, 0x476A1FF2, 0x00691FF6,
+    0x736B1FF8, 0x2F060000, 0x21270001, 0x6537FFFE,
+    0x2F05C000, 0x746B1FF0, 0x59611FF6, 0x3904C000,
+    0x1E621FF2, 0x6E601FFA, 0x4C601FF0, 0x138C0400,
+    0x5997017D, 0x01030000, 0x223F0001, 0x6DCC026A,
+    0xB18C0100, 0xCF6A1FD8, 0xC3691FF0, 0x94004000,
+    0xFA098000, 0x8D048000, 0xB197007F, 0xF6010000,
+    0xEA684000, 0xBA098000, 0xBA068000, 0xF197007F,
+    0xB36B1FF8, 0xC0691FF6, 0xE1270001, 0xA537FFFE,
+    0xCE09C000, 0x996B1FD8, 0x876A1FF2, 0xD9611FF6,
+    0xAF0AC000, 0xDE621FF2, 0xD38C0400, 0x9997017D,
+    0xBC6B1FDA, 0xCF6A1FD8, 0xC3691FF0, 0x8F631FFA,
+    0xFA098000, 0x9A611FF0, 0x81030000, 0xE23F0001,
+    0x2DCC026A, 0x718C0100, 0x54004000, 0x0D048000,
+    0x5260400C, 0x0D048000, 0x06240002, 0x66691FF2,
+    0x446A1FF4, 0x3C30FFFE, 0x26500000, 0x66500000,
+    0x24300002, 0x7197007F, 0x4B624014, 0x2A6B400C,
+    0x77260001, 0x03691FF0, 0x21280001, 0x6D624010,
+    0x34604008, 0x43614004, 0x52634000, 0x162A0001,
+    0x1B058000, 0x6A31FFFE, 0x70510000, 0x30510000,
+    0x6C078000, 0x1D33FFFE, 0x07530000, 0x47530000,
+    0x3D218002, 0x50970073, 0x71260002, 0x2D624010,
+    0x61691FFA, 0x1A6A4008, 0x03614004, 0x43624008,
+    0x7B218001, 0x10970073, 0x30681FF2, 0x7C694000,
+    0x04624000, 0x55604004, 0x526B1FF4, 0x22614008,
+    0x5807C000, 0x27270002, 0x3B634010, 0x56218200,
+    0x10970073, 0x7B694008, 0x43624008, 0x196B1FD8,
+    0x25614000, 0x79070000, 0x73681FF4, 0x34634004,
+    0x5A604010, 0x3B218001, 0x10970073, 0x62624004,
+    0xA26A1FF0, 0xD8040000, 0xC4624000, 0x83624008,
+    0xFC604014, 0xB6218018, 0x90970073, 0xE562400C,
+    0xD38C0400, 0xB8200001, 0x9E6B1FE6, 0xD18B4000,
+    0xA2631FE4, 0xD5681FF0, 0xD260400C, 0x84691FF8,
+    0xF4611FDE, 0x846A1FF4, 0xB0621FDC, 0xFA0A4000,
+    0x820E4000, 0xC5D40277, 0xE3024000, 0x92260003,
+    0xB336FFFE, 0xC0601FE2, 0xCD048000, 0xA5601FE0,
+    0xCD048000, 0xBA068000, 0xBB621FF0, 0xCD048000,
+    0x25601FD6, 0x4B68400C, 0x76970077, 0x226A1FF0,
+    0x4B68400C, 0x0D048000, 0x36970077, 0x656A1FF8,
+    0x59681FE2, 0x346B1FF0, 0x3904C000, 0x40691FF6,
+    0x3197007F, 0x538C0400, 0x476B4024, 0x22631FD2,
+    0x4D378000, 0x23CC035A, 0x3C681FE0, 0x746B1FF0,
+    0x3904C000, 0x66691FF2, 0x446A1FF4, 0x3197007F,
+    0x19681FE2, 0x7C30FFFE, 0x45500001, 0x3C681FE0,
+    0x66691FF2, 0x3197007F, 0x3D201FD8, 0x66500000,
+    0xA6500000, 0xE6691FF2, 0xEA31FFFE, 0x87494000,
+    0xF4310001, 0x80D4035D, 0x8931FFFF, 0xDB200000,
+    0xC0601FD4, 0x99230001, 0x8F220001, 0xC100C000,
+    0x97148000, 0xDCC802B2, 0xD9681FD4, 0x8D048000,
+    0xC0601FD4, 0x8D074000, 0xBA054000, 0xFA068000,
+    0xA9CC02AB, 0xD9681FE2, 0xF46B1FF0, 0xB904C000,
+    0x8D210000, 0xCC6A1FDE, 0xDF970361, 0xBC30FFFE,
+    0xE5480000, 0x8D388000, 0xA2300001, 0xD7D002C2,
+    0x96250001, 0xF88002BE, 0xF63D0000, 0x94C802F4,
+    0xD38C0400, 0x8B614018, 0x93218040, 0xD0970073,
+    0xD9681FD4, 0x8F691FE2, 0xAA31FFFE, 0xC7494000,
+    0xAA072000, 0xEE210001, 0xE56B4018, 0x9F3FFFFF,
+    0xE1270001, 0x8D11C000, 0xB22DFFFF, 0xC1164000,
+    0x996B1FD8, 0xD38C0400, 0xF0694024, 0x95611FD2,
+    0xBAC802EC, 0xEF1F8000, 0xDEC802E5, 0x96621FD8,
+    0xF0681FF2, 0x862107F6, 0xBC970360, 0xCF220001,
+    0x0B624014, 0x7C681FD6, 0x74604008, 0x3B218001,
+    0x50970073, 0x2A691FD6, 0x19681FE2, 0x446A1FF4,
+    0x77260001, 0x1F970361, 0x31218010, 0x50970073,
+    0x19681FE2, 0x4D210000, 0x446A1FF4, 0x37260001,
+    0x5F970361, 0x13218040, 0x10970073, 0x798002B5,
+    0x3C681FE0, 0x746B1FF0, 0x7904C000, 0x15604004,
+    0x19681FE2, 0x7904C000, 0x73604000, 0x0C6A1FDE,
+    0x7F6B1FDC, 0x1D634014, 0x2F0AC000, 0x570EC000,
+    0x05D40302, 0x7602C000, 0x6D624010, 0x37218400,
+    0x50970073, 0x0C691FD2, 0x2F1C4000, 0x44CC030F,
+    0x6A31FFFE, 0x11484000, 0x033C0001, 0x492D0002,
+    0x07494000, 0x57184000, 0x79C80350, 0x138C0400,
+    0x40684020, 0x22300001, 0x18D0035A, 0x64300002,
+    0x33D0031D, 0x6A684000, 0x5A694004, 0x15604004,
+    0x25614000, 0x43684010, 0x73694014, 0x3C604014,
+    0x4C614010, 0x0B6B4000, 0x15634008, 0x47631FD0,
+    0xB2218020, 0xD0970073, 0xF1D00326, 0xBC681FE0,
+    0xCF691FE2, 0xB3800328, 0x99681FE2, 0xEA691FE0,
+    0xC46A1FF4, 0xB7260001, 0x9F970361, 0xD38C0400,
+    0x916A4024, 0xF2218020, 0xD0970073, 0xBF681FD0,
+    0xCE0A0000, 0xB7260001, 0xAA691FE0, 0xF46B1FF0,
+    0xAF05C000, 0xCD1D0000, 0xE2CC033D, 0x99681FE2,
+    0xAA691FE0, 0xE5601FE0, 0xD6611FE2, 0xBB681FDE,
+    0xC7601FDC, 0x95621FDE, 0x99681FE2, 0xE6691FF2,
+    0xBC970360, 0xF46A4010, 0xCD048000, 0xBC30FFFE,
+    0xD38C0400, 0x844B0000, 0xA6500000, 0xE6500000,
+    0xC13F0000, 0xBCC802B5, 0xB1218010, 0xD0970073,
+    0xA22CFFFC, 0xD38C0400, 0xE6500000, 0xB98002B5,
+    0xCF691FE2, 0xBC681FE0, 0x846A1FF4, 0xF197007F,
+    0x8B624014, 0xF8200001, 0xCD210000, 0xAA6B400C,
+    0xAD631FF0, 0xF6800071, 0xD2200017, 0xAD210007,
+    0xDC800357, 0x9D200003, 0x8321001F, 0xDC800357,
+    0x046A1FF4, 0x6D624010, 0x4B624014, 0x33604000,
+    0x43614004, 0x34604008, 0x118B4000, 0x47631FE6,
+    0x56681FF6, 0x04691FF8, 0x046A1FF4, 0x6E601FCC,
+    0x3B611FCA, 0x7C621FF8, 0x52260003, 0x3336FFFE,
+    0x7C621FCE, 0x346B1FF0, 0x2C078000, 0x6C078000,
+    0x2E631FF6, 0x6C078000, 0x6D631FF0, 0x1097026C,
+    0x033C0001, 0x72C8037C, 0x433C0001, 0x3980039A,
+    0x55681FF0, 0x256A1FCE, 0x2C088000, 0x76970077,
+    0x83691FF0, 0xE56A1FCE, 0xF5034000, 0x94004000,
+    0xEC078000, 0x92634000, 0xAC088000, 0xEC088000,
+    0xD4970084, 0x83691FF0, 0xA56A1FCE, 0xD4004000,
+    0xAC088000, 0xFC30FFFE, 0xC5500001, 0xA7280002,
+    0xE4300002, 0xAC088000, 0xAC088000, 0xCC601FF0,
+    0x94970084, 0xE1691FCC, 0xC36A1FCA, 0x99611FF6,
+    0xBC621FF8, 0xF8200001, 0xD38C0400, 0x9E6B1FE6,
+    0xD18B4000, 0xAC220000, 0xBE8003A4, 0xD8224000,
+    0x3E8003A4, 0x79228000, 0x7E8003A4, 0x0D22C000,
+    0x7F621FFE, 0x07631FE6, 0x3F970099, 0x526B1FF4,
+    0x44270003, 0x2537FFFE, 0x22631FBE, 0x76010000,
+    0x033C0001, 0x718C0100, 0x67CC04E2, 0x3E6A40A2,
+    0x6B6840A8, 0x37260001, 0x1A970658, 0x70681FF2,
+    0x046A1FF4, 0x5A970658, 0x77260001, 0x3336FFFE,
+    0x276240A2, 0x416240A6, 0x7D6940A8, 0x2D6A1FBE,
+    0x70611FBC, 0x13201FC0, 0x13230010, 0x5B058000,
+    0x2A410000, 0x5F2C0002, 0x452FFFFF, 0x2BCC03BF,
+    0x56681FC0, 0x2E32FFFC, 0x36970077, 0x7B970638,
+    0x4F691FD4, 0x30681FF2, 0x0F220001, 0x7197061F,
+    0x306B1FFE, 0x7E33FFFF, 0x74D0052F, 0x3B6B1FBE,
+    0x66691FF2, 0x0B6A1FD6, 0x2F05C000, 0x7797062A,
+    0x00691FC0, 0x4F220001, 0x7E97063D, 0x2D691FDE,
+    0x0A220004, 0x7E97063D, 0x6A6A1FDA, 0x21691FFA,
+    0x7797062A, 0x2E691FD8, 0x3B6B1FBE, 0x70681FF2,
+    0x89220002, 0xF904C000, 0xF904C000, 0xB197061F,
+    0xD2970628, 0xB06B1FFE, 0xA1691FFA, 0xE31BC000,
+    0xCAD403EF, 0xBB6B1FBE, 0xA26A1FC6, 0xEF05C000,
+    0xAF05C000, 0xF797062A, 0xDF8003F2, 0x80691FC0,
+    0xD5681FC6, 0xB0970614, 0x8B691FDA, 0xF0681FC4,
+    0xA26A1FC6, 0xD46040AC, 0xE46140A8, 0xA46240A4,
+    0xBA8C5000, 0xD4700384, 0xFA970605, 0x8D21889C,
+    0xC5614092, 0xBA8C5000, 0xB1700080, 0xCF691FE2,
+    0xB597064B, 0xE9204096, 0xC0502A27, 0xA15030A7,
+    0xE9204096, 0xAA504A52, 0x995024A5, 0xD1970642,
+    0xEF502E27, 0xBF502084, 0xB7970646, 0xC450292F,
+    0x91970642, 0xE76B4080, 0xF2370020, 0xA2CC0444,
+    0xE9503548, 0xA1501CE4, 0xB7970646, 0xF85024A9,
+    0x91970642, 0xE150A148, 0xC55035A4, 0xB7970646,
+    0x94502530, 0xD1970642, 0xC7502929, 0x8C5035B3,
+    0xF7970646, 0xBF502108, 0x91970642, 0xF55025A9,
+    0x2E502CA6, 0x77970646, 0x4A50288A, 0x11970642,
+    0x7150B4EB, 0x0C509525, 0x37970646, 0x7B501086,
+    0x51970642, 0x27502D67, 0x215035AD, 0x77970646,
+    0x2350198F, 0x51970642, 0x676B4080, 0x00631FEE,
+    0x715098C4, 0x1E509DB1, 0x37970646, 0x4A50316C,
+    0x11970642, 0x40509148, 0x4F502CC6, 0x37970646,
+    0x20503590, 0x51970642, 0x7A5099AB, 0x01194000,
+    0x5CC80447, 0x3597064B, 0x2D204098, 0x615030A7,
+    0x37970646, 0x595024A5, 0x51970642, 0x35800408,
+    0x7A8C5000, 0x34200013, 0x398004E3, 0x7A8C5000,
+    0x716A4080, 0x3B681FDE, 0x24360020, 0x4ECC04F2,
+    0x2D6A1FBE, 0x76970077, 0x7B970638, 0x0F220001,
+    0x6D691FDE, 0x3E97063D, 0x0C691FD2, 0x7B6B1FBE,
+    0x37681FFA, 0x4F220001, 0x7904C000, 0x3197061F,
+    0x12970628, 0x7B6B1FBE, 0x66691FF2, 0x086A1FD0,
+    0x6F05C000, 0x2F05C000, 0x3797062A, 0x6E691FD8,
+    0xBB6B1FBE, 0xF0681FF2, 0xCF220001, 0xB904C000,
+    0xF904C000, 0xB197061F, 0x92970628, 0xD8700090,
+    0xFA970605, 0xBA8C5000, 0xA9204096, 0xEA504A52,
+    0x815029E5, 0xE9204096, 0xEA504A52, 0xBC502491,
+    0xD1970642, 0x8150292A, 0xB95020B1, 0xF7970646,
+    0x9D501264, 0xD1970642, 0xC0502D04, 0xBD5040B0,
+    0xB7970646, 0xD25024E5, 0xD1970642, 0x8B50A088,
+    0xDC504130, 0xB7970646, 0xAC502D4B, 0xD1970642,
+    0x2A504A52, 0x45502924, 0x77970646, 0x27502CEB,
+    0x51970642, 0x24502E0B, 0x3D5011AA, 0x77970646,
+    0x7F502108, 0x11970642, 0x2A504A52, 0x45502E6B,
+    0x37970646, 0x555020C8, 0x51970642, 0x3250AD0B,
+    0x66502925, 0x11970642, 0x03501E52, 0x5550166B,
+    0x37970646, 0x4C5019AA, 0x51970642, 0x2A504A52,
+    0x115020C6, 0x77970646, 0x595024A5, 0x11970642,
+    0x6A504A52, 0x01502D0F, 0x37970646, 0x4E502884,
+    0x91970642, 0xCA50296A, 0xD3502188, 0x91970642,
+    0xE650A509, 0xA4502944, 0x91970642, 0xEA504A52,
+    0xD95024C9, 0x91970642, 0xAD50A549, 0xD5502144,
+    0xB7970646, 0xD1502669, 0xD1970642, 0x95681FC6,
+    0xFA8C5000, 0xA76B4080, 0xBC30FFFE, 0xDF370008,
+    0x80CC04B7, 0xF320001B, 0xF98004E3, 0x85500001,
+    0xB06B1FFE, 0xED204098, 0xE31BC000, 0x8DD404C4,
+    0xFF5010E4, 0xAD204098, 0xB35014E5, 0xF7970646,
+    0xAB5018E6, 0xD1970642, 0xF18C0100, 0xB180051F,
+    0xEB5018E6, 0xB46B1FF0, 0x96681FF6, 0xC4691FF8,
+    0xCC631FCA, 0xAE601FCC, 0x9D611FCE, 0xF0681FC4,
+    0xA5691FF4, 0xF46B1FC6, 0xCF2D0001, 0x9D611FF8,
+    0xED631FF0, 0x8F601FF6, 0xBA8C5000, 0xD097026C,
+    0x956B1FCA, 0xC06A1FCC, 0xC4691FCE, 0xAD631FF0,
+    0xB8621FF6, 0xDD611FF8, 0xD38C0400, 0x833C0001,
+    0xE7CC04E2, 0x80691FC0, 0xBA97065F, 0xE5691FC2,
+    0x3A97065F, 0x7180051F, 0x433C0001, 0x3423001F,
+    0x44601FEC, 0x00631FEE, 0x2D6A1FBE, 0x47691FFE,
+    0x55681FF0, 0x01194000, 0x14038000, 0x43D404ED,
+    0x3A068000, 0x4E06C000, 0x76970077, 0x1D681FEC,
+    0x596B1FEE, 0x1480052B, 0x0F6A1FEE, 0x4E6B4090,
+    0x33320005, 0x4D1EC000, 0x6D360001, 0x12C804FB,
+    0x1920000D, 0x5A230007, 0x598004E4, 0x2D6A1FBE,
+    0x55681FF0, 0x07691FFE, 0x14038000, 0x7A068000,
+    0x01194000, 0x47D40503, 0x4E06C000, 0x36970077,
+    0x61691FFA, 0x15681FF0, 0x046A1FF4, 0x55970616,
+    0x6D6A1FBE, 0x166B1FFA, 0x15681FF0, 0x6C078000,
+    0x34634004, 0x4D048000, 0x74604008, 0x26691FF2,
+    0x446A1FF4, 0x25614000, 0x0B624014, 0x72218020,
+    0x266A1FFE, 0x50970073, 0x411A8000, 0x0FD40529,
+    0x3B6B1FBE, 0x55681FF0, 0x5807C000, 0x3904C000,
+    0x7C30FFFE, 0x05500001, 0x31800529, 0x6D6A1FBE,
+    0x80691FC0, 0xD1681FFE, 0xD4038000, 0xA3180000,
+    0xE8D40526, 0xBA068000, 0x8E06C000, 0xD5681FF0,
+    0xD5970616, 0xBA230000, 0xB8200001, 0xD38C0400,
+    0xBC634018, 0xDE6B1FE6, 0xD18B4000, 0xAD691FDE,
+    0xCF220001, 0xBE97063D, 0xA16A1FC0, 0xE1691FFA,
+    0xB797062A, 0xFB6B1FBE, 0xE1691FFA, 0x8F6A1FD8,
+    0xAF05C000, 0xF797062A, 0xC76A1FC4, 0x80691FF6,
+    0xF797062A, 0xBB6B1FBE, 0x80691FF6, 0xEA6A1FDA,
+    0xAF05C000, 0xF797062A, 0xD1681FFE, 0xA3180000,
+    0xD3D0054C, 0xAD691FDE, 0xB3681FC2, 0xF6970617,
+    0xED691FDE, 0x95681FC6, 0xB6970617, 0xDA800558,
+    0xBB6B1FBE, 0xE1691FFA, 0xC46A1FC2, 0xAF05C000,
+    0xEF05C000, 0xB797062A, 0xBB6B1FBE, 0xC0691FF6,
+    0xA26A1FC6, 0xEF05C000, 0xEF05C000, 0xB797062A,
+    0x98700090, 0xFA970605, 0xFA8C5000, 0xB1700080,
+    0xE9204096, 0xAA504A52, 0xB15024E4, 0xE9204096,
+    0x2A504A52, 0x425030A6, 0x51970642, 0x1450B12C,
+    0x515020F0, 0x37970646, 0x085028B1, 0x51970642,
+    0x7E50A90A, 0x3E50AD8C, 0x11970642, 0x5050456B,
+    0x2850BD4A, 0x77970646, 0x676B4080, 0x00631FEE,
+    0x71700080, 0x0E50352B, 0x11970642, 0x596B1FEE,
+    0x316A4080, 0x63330006, 0x6BD4057A, 0x35320006,
+    0x35D005B1, 0x518004F8, 0x6A504A52, 0x0B502D8B,
+    0x77970646, 0x37502531, 0x11970642, 0x7C50252B,
+    0xB950210B, 0xF7970646, 0xED5018E5, 0x91970642,
+    0xEA504A52, 0x99503CCF, 0xB7970646, 0xD1502669,
+    0xD1970642, 0x8F50A52F, 0x835018CB, 0xD1970642,
+    0xAA504A52, 0xD2503E69, 0xF7970646, 0x9250112C,
+    0xD1970642, 0xBF50B5ED, 0x8950326C, 0xD1970642,
+    0xAA504A52, 0xC15035AA, 0xD1970642, 0xB250B50D,
+    0x92502533, 0xD1970642, 0xC3501E52, 0x9650166D,
+    0xD1970642, 0xBB970638, 0xBB6B1FBE, 0xE6691FF2,
+    0x0B6A1FD6, 0x6F05C000, 0x7797062A, 0x3B6B1FBE,
+    0x66691FF2, 0x086A1FD0, 0x2F05C000, 0x6F05C000,
+    0x7797062A, 0x3A970605, 0x3A8C5000, 0x69204096,
+    0x2A504A52, 0x515020C6, 0x69204096, 0x2A504A52,
+    0x5580049A, 0x3B970638, 0x3B6B1FBE, 0x66691FF2,
+    0x0B6A1FD6, 0x6F05C000, 0x7797062A, 0x08691FDC,
+    0x1D681FDA, 0x70970614, 0x4B691FDA, 0x09220002,
+    0x7E97063D, 0x08691FDC, 0x15681FC6, 0x76970617,
+    0x03691FC6, 0x6A220003, 0x7E97063D, 0x3A970605,
+    0x7A8C5000, 0x31700080, 0x29204096, 0x6A504A52,
+    0x7F502084, 0x29204096, 0x2A504A52, 0x6C503611,
+    0x11970642, 0x6A504A52, 0x46502D07, 0x37970646,
+    0x6C5034AD, 0x11970642, 0x2A504A52, 0x595024A5,
+    0x37970646, 0x665029B0, 0x51970642, 0x27503144,
+    0x1A50252F, 0x77970646, 0x4150194A, 0x11970642,
+    0x745010C8, 0x0750318C, 0x37970646, 0x695028D1,
+    0x91970642, 0xD2502569, 0xEC5019AD, 0xB7970646,
+    0xDD501264, 0x91970642, 0x9F50B08C, 0xE8502D29,
+    0xF7970646, 0xAD5019A6, 0x91970642, 0xEA504A52,
+    0xB550166C, 0xF7970646, 0xDE502191, 0x91970642,
+    0xF250AD0B, 0xAD502953, 0x91970642, 0xEA504A52,
+    0xA950326B, 0xF7970646, 0xDE5011AB, 0x91970642,
+    0x9950B585, 0xD2502533, 0xD1970642, 0xAA504A52,
+    0xC75035A9, 0x91970642, 0xB950B54D, 0xC5502E6B,
+    0x11970642, 0x43501E52, 0x5650166D, 0x11970642,
+    0x7880059D, 0x2D6A1FBE, 0x00691FC0, 0x4B624014,
+    0x4B32FFFE, 0x3A098000, 0x25614000, 0x456140A4,
+    0x0F691FD4, 0x696A1FDC, 0x62614008, 0x25691FF4,
+    0x62624004, 0x0F2D0001, 0x0C614010, 0x518B4000,
+    0x046A1FF4, 0x6E2E0001, 0x6D624010, 0x25614000,
+    0x34604008, 0x538C0400, 0x5570001C, 0x1270881D,
+    0x5B058000, 0x0D048000, 0x118B4000, 0x73604000,
+    0xB3681FF4, 0xE2614008, 0xDA604010, 0x938C0400,
+    0xEA624018, 0x97020000, 0xB4218080, 0xD3800073,
+    0xED684008, 0x99800634, 0xA5631FEC, 0xE5614000,
+    0x83624008, 0xF5008000, 0xE9218800, 0x90970073,
+    0xC46A1FF4, 0x9A970658, 0xAD684008, 0xFC6B1FEC,
+    0xB26040A8, 0xFA8C5000, 0xDA700184, 0x918B4000,
+    0x846A1FF4, 0xE9691FBC, 0xED624010, 0x856140A4,
+    0xD18B4000, 0x94004000, 0xAA31FFFE, 0xD38C0400,
+    0xBF424000, 0xD9800634, 0xD68C5080, 0x97BC004B,
+    0xE9204096, 0x918B4000, 0x968C5080, 0xD7BC004B,
+    0xE9204096, 0xAA504A52, 0x918B4000, 0xD6681FF6,
+    0xB22DFFFF, 0xE3024000, 0xF736FFF0, 0xB0320003,
+    0xFC30FFFE, 0xAF060000, 0x874A8000, 0xD4004000,
+    0x9E34000F, 0xCD120000, 0xC1624090, 0x918B4000,
+    0x8D048000, 0xFC30FFFE, 0xE6500000, 0xA6500000,
+    0xE6500000, 0xA6500000, 0x918B4000, 0xE26A1FC6,
+    0x246140A8, 0x646240A4, 0x718C0100, 0x1A700184,
+    0x476A1FF2, 0x22624004, 0x046A1FF4, 0x4B624014,
+    0x65614000, 0x22614008, 0x318C0100, 0x50694080,
+    0x0C350001, 0x47CC066F, 0x518B4000, 0x2E2E0001,
+    0x6D624010, 0x32218020, 0x13800073, 0x0079084F
+};
+
+static const uint32_t fw0_boot_img_data_buf[] =
+{
+    0x3F200503, 0x6E210001, 0x6A710249, 0x38200001,
+    0x5460B41C, 0x1397008C, 0x0D210000, 0x4931FFFF,
+    0x6D390001, 0x242CFFFF, 0x00CC0007, 0x736AB1F8,
+    0x2361B140, 0x6F3A0000, 0x4FCC0013, 0x1F200777,
+    0x5860B438, 0x1F60B45C, 0x14800017, 0x5D200333,
+    0x1860B438, 0x5F60B45C, 0x7E60B43C, 0x0520FFFF,
+    0x3660B420, 0x4D210000, 0x6F68B420, 0x0561B422,
+    0x4934FEFE, 0x22300001, 0x3660B420, 0x4661B424,
+    0xA361B426, 0xE761B428, 0xC261B42A, 0x8161B42C,
+    0xE461B42E, 0xAF61B434, 0x8A61B436, 0xD397008C,
+    0xCE21A0CA, 0xB9228000, 0xBF424000, 0xE12D0100,
+    0xA42CFFFF, 0xE8CC002A, 0xCB710449, 0x83B80032,
+    0xD8224000, 0x98800033, 0xAC220000, 0xC3210045,
+    0x8661B424, 0xFA230000, 0xF663B42C, 0x9397008C,
+    0xA9232000, 0xC662B428, 0xD863B434, 0x9269B1F8,
+    0xCE390000, 0xABCC0040, 0x89210777, 0xF5800041,
+    0x8B210333, 0xF38C0078, 0xD6BC0076, 0x8E61B438,
+    0xE42CFFFF, 0x87CC0039, 0x85710649, 0xD397008C,
+    0xEB21A0C8, 0xAC220000, 0xBF424000, 0xC92D0002,
+    0xBF424000, 0xCC2D00FE, 0xE42CFFFF, 0x89CC004A,
+    0xC468B1F8, 0x8D223000, 0x98380000, 0xC0CC005D,
+    0x96711049, 0xE5B8005A, 0xEF204000, 0xBF222000,
+    0x91230071, 0xD2800078, 0xDB200000, 0x91230071,
+    0xD2800078, 0xB7712049, 0x82B80063, 0xF9214000,
+    0x3A230000, 0x7F222000, 0x79800065, 0x0D210000,
+    0x7A230000, 0x0C20B424, 0x2C500011, 0x45500001,
+    0x6850C400, 0x05500001, 0x0161B42C, 0x5363B42E,
+    0x0E62B434, 0x7C230333, 0x738C0078, 0x16BC0076,
+    0x7963B438, 0x1B200000, 0x3560B140, 0x69710149,
+    0x3C8C0000, 0x73800074, 0x7971FF49, 0x33800074,
+    0x15320001, 0x45367FFF, 0x75C8008B, 0x322A0008,
+    0x4DC00087, 0x26500000, 0x26500000, 0x66500000,
+    0xA6500000, 0xE6500000, 0xE6500000, 0xA6500000,
+    0xE6500000, 0xB5C8008B, 0x9480007B, 0xD3260008,
+    0xE6500000, 0x932EFFFF, 0x8BCC0088, 0xD18B4000,
+    0x8468B1F8, 0xDE34000F, 0xDBC80093, 0xA028000A,
+    0xFAC40093, 0x8124000A, 0x918B4000, 0xF920000A,
+    0x918B4000, 0xE0000000, 0xE0000000, 0xA0000000
+};
+
+static const uint32_t fw0_master_img_data_buf[] =
+{
+    0x3F200503, 0x6E210001, 0x5E605FF4, 0x2D615FF6,
+    0x5B200000, 0x3260B148, 0x0D205FE0, 0x5C215FE8,
+    0x7D230008, 0x2F090000, 0x23C000F3, 0x78200001,
+    0x1460B41C, 0x719700B0, 0x539700BA, 0x0E208000,
+    0x7560B140, 0x20000000, 0x20000000, 0x60000000,
+    0x25685FFE, 0x5269B1F8, 0x626B5FFA, 0x353C4600,
+    0x2CCC0012, 0x793B0000, 0x48D4001D, 0x1B3700FF,
+    0x5763B47A, 0x1D200333, 0x1860B438, 0x5F60B45C,
+    0xBE60B43C, 0xFC230003, 0xF722B400, 0x8520FFFF,
+    0xE9408000, 0x8D210000, 0xB0488000, 0xF1260002,
+    0xFF418000, 0x8934FEFE, 0xA2300001, 0xD02A0002,
+    0xA9408000, 0xFE260020, 0xC52FFFFF, 0x8CCC0023,
+    0xDB200000, 0x9F60B406, 0xB660B416, 0xF560B426,
+    0x9C60B436, 0xD460B446, 0xFD60B456, 0xA16B5FFC,
+    0x80210100, 0xE2222F00, 0xF4370080, 0x9FC8003E,
+    0xCD210000, 0x8D223000, 0x8C20B424, 0xEC500011,
+    0x85500001, 0xE850C400, 0xC5500001, 0xAA410000,
+    0xDF2C0002, 0xA6500000, 0x8E62B434, 0xC8205E90,
+    0xE6220164, 0xAF970F80, 0x9269B1F8, 0xEA220333,
+    0x9B200000, 0xF38C0078, 0xD1BC00EB, 0xAF62B438,
+    0xD060B424, 0xB560B426, 0xB9610102, 0xC835000F,
+    0x9C610100, 0xC568B400, 0xF969B420, 0x99605FCA,
+    0xA9615FCE, 0xFA3400FF, 0xD6380200, 0x9A605FCC,
+    0xF235FF00, 0xAB390002, 0x84615FD0, 0xC1970F0D,
+    0x38200001, 0x57605EA0, 0x502001A0, 0x2B60010C,
+    0x7A203000, 0x0E60010E, 0x38200001, 0x7260B148,
+    0x58695EA0, 0x39228000, 0x14004000, 0x433C0001,
+    0x26CC006F, 0x4262B140, 0x50800075, 0x14004000,
+    0x463C0004, 0x2DCC0075, 0x2C68B140, 0x543C4000,
+    0x3560B140, 0x4835000F, 0x4931FFFF, 0x002D0079,
+    0x26894000, 0x528C1D78, 0x5F800098, 0x378C1D7A,
+    0x5F800098, 0x3E8C1DF8, 0x1F800098, 0x5B8C1DFA,
+    0x9F800098, 0xF48C1D7C, 0xDF800098, 0x918C1D7E,
+    0xDF800098, 0x988C1DFC, 0x9F800098, 0xFD8C1DFE,
+    0xDF800098, 0xB18C1D79, 0x9F800098, 0xD48C1D7B,
+    0x9F800098, 0xDD8C1DF9, 0xDF800098, 0xB88C1DFB,
+    0xDF800098, 0x978C1D7D, 0x9F800098, 0xF28C1D7F,
+    0x9F800098, 0xFB8C1DFD, 0xDF800098, 0x9E8C1DFF,
+    0x95B000E9, 0xC8BC0BF6, 0xFDD80CC3, 0x90A00BF7,
+    0xEBA40C1D, 0xA5A80C38, 0x8CF80EFB, 0xD3E80CE1,
+    0x17E00107, 0x796A5EA0, 0x7F2300A6, 0x2B360002,
+    0x5DC800A6, 0x38AC0E86, 0x38215EA2, 0x63220014,
+    0x44970F9D, 0x3EC80068, 0x30884000, 0x58380000,
+    0x36C80101, 0x78215EA2, 0x63220014, 0x27800FC0,
+    0x5B200000, 0x3360B000, 0x3460B008, 0x4F220001,
+    0x2B2D0008, 0x6D62B010, 0x7B60B01C, 0x08228800,
+    0x0C62B01C, 0x518B4000, 0x4468B1F8, 0x36635E96,
+    0x5E34000F, 0x01030000, 0x012B000A, 0x45C000C1,
+    0x3920000A, 0x41030000, 0x4D210000, 0x0931FFFF,
+    0x6D390001, 0x242CFFFF, 0x01CC00C3, 0x6361B140,
+    0x79228000, 0x36010000, 0x10310008, 0x4D39A0CA,
+    0x3F424000, 0x6C220000, 0x7F424000, 0x06220020,
+    0x7C2DFFBA, 0x3F424000, 0x2C220000, 0x582DFF7C,
+    0x3F424000, 0x6B2D0008, 0x7F424000, 0x0F220001,
+    0x2B2D0008, 0x7F424000, 0x6C220000, 0x0D2D000C,
+    0x7F424000, 0x08228800, 0x3F424000, 0x43220400,
+    0xA462B144, 0xD7020000, 0xE13A0200, 0xA462B144,
+    0xD92C0001, 0x852FFFFF, 0x80CC00C8, 0xEF6B5E96,
+    0xD18B4000, 0x8222008D, 0x988000FC, 0xE4220089,
+    0x988000FC, 0xC6220083, 0xD88000FC, 0x85220085,
+    0xD88000FC, 0xA9220005, 0x988000FC, 0xE0220087,
+    0x988000FC, 0xCC220007, 0xD88000FC, 0xA6220011,
+    0x988000FC, 0xC122008B, 0xD88000FC, 0xAD22000B,
+    0xEA625FF2, 0x99635FF0, 0xB1320008, 0xC562B148,
+    0xB3D00102, 0xD18B4000, 0xF8200001, 0xB19700B0,
+    0xD39700BA, 0xBC8C0000, 0x95800105, 0xF9695F20,
+    0xFE20011B, 0x8E35C000, 0x91C8010E, 0xC9685F24,
+    0x823D4000, 0xC5CC00A1, 0xDF2300A1, 0xB96A5EA0,
+    0xE1210080, 0xB336FFFE, 0xA0625EA0, 0xFB655F21,
+    0x9A8000AB, 0xF9695F20, 0xC9685F24, 0x8E35C000,
+    0x973DC000, 0xF2C8010F, 0xD18B4000, 0xA9970F20,
+    0xFBC801BB, 0x90605F24, 0x80685FFC, 0xCD210000,
+    0x24615F2E, 0x7F340003, 0x5F2C012D, 0x30884000,
+    0x5B200000, 0x3160B122, 0x30800131, 0x4A6BB124,
+    0x5C695F22, 0x1B200000, 0x3B370001, 0x4ECC0137,
+    0x3C65B123, 0x70800131, 0x5C800124, 0x1A800127,
+    0x7B9700FB, 0x2868B122, 0x3D69B124, 0x7734001F,
+    0x34310001, 0x6C110000, 0x62D401B1, 0x216B5FFC,
+    0x0E645F20, 0x4537FF00, 0x67330008, 0x180B0000,
+    0x4EC001AE, 0x3E6A5F24, 0x3F215F26, 0x462E0040,
+    0x29408000, 0x7930FFFB, 0x4E2C4000, 0x0F970FDD,
+    0x7A695F26, 0x1B2C000C, 0x29350003, 0x49CC01AA,
+    0x7F215F26, 0x1122FFFE, 0x21970FF3, 0x5F695F24,
+    0x1C2C0004, 0x524A0000, 0x422D0042, 0x3F424000,
+    0x6E2E0001, 0x0B420000, 0x26971027, 0x64970C53,
+    0x2C685F26, 0x7E695F28, 0x5B60B408, 0x2861B40A,
+    0x09685F24, 0x5221B40E, 0x7D60B40C, 0x30510000,
+    0x52200021, 0x3A60B404, 0x10200040, 0x5360B414,
+    0x91200164, 0xC7210152, 0xFF2300A6, 0xA9800C7A,
+    0xEF685F20, 0xB86A5FE8, 0xBA3400FF, 0xD3605F22,
+    0xEE2E0001, 0xA1625FE8, 0x81030000, 0xF930FFFB,
+    0xA72C4010, 0xD24A0000, 0xDC2C0004, 0xB3490000,
+    0xD63B0400, 0x8F2D0001, 0xBA0A4000, 0xF9C40175,
+    0x8D210000, 0xEA410000, 0xC9685F24, 0xB563B120,
+    0xBE2C0038, 0xE6500000, 0xE6500000, 0xA6500000,
+    0xE6500000, 0x802CFFF6, 0x924A0000, 0xE22CFFCA,
+    0x0A6B5F2E, 0x5B368000, 0x63CC018A, 0x393B0000,
+    0x50C801A6, 0x392F003C, 0x1D40C000, 0x46685F30,
+    0x50605F24, 0x158001A6, 0x32605F2E, 0x793B0000,
+    0x26CC018F, 0x5F605F30, 0x76800191, 0x392F003C,
+    0x5D40C000, 0x39695F20, 0x2B68B124, 0x4F220001,
+    0x3A230000, 0x6C3500FF, 0x6C0B4000, 0x2C12C000,
+    0x17148000, 0x4FCC019F, 0x5A9700F7, 0x11230191,
+    0x71635F24, 0x10200040, 0x198001B4, 0x69970F20,
+    0x9EC801B9, 0xD0605F24, 0xEF685F20, 0xBE6A5F24,
+    0xFA3400FF, 0x9780013E, 0xBA215FDA, 0xE4970F39,
+    0xDE2301B3, 0xB78001C0, 0xAF685F20, 0xFF9700F5,
+    0xBA3400FF, 0xF18001AF, 0xFB9700FB, 0xB7380400,
+    0xD460B120, 0x89685F24, 0x86970F33, 0xDB200000,
+    0xB96A5EA0, 0xED645F21, 0xCC3A0001, 0xA0625EA0,
+    0x988000A6, 0xD523019F, 0xDE8001BC, 0x9F23011B,
+    0xF1635F24, 0xBC2000C0, 0xAD645F21, 0xD88000A6,
+    0xB5695F32, 0xCE208000, 0xD4150000, 0xB7C801C5,
+    0xD18B4000, 0xBA605F32, 0xB62001C8, 0xDA8000AB,
+    0xCC685FD8, 0x9F215FD8, 0x98380000, 0xDAC801ED,
+    0xA0970F5B, 0xF9605F34, 0xF6010000, 0x9F2C0034,
+    0xE5480000, 0x9E6A5FEC, 0x81030000, 0xDE34000F,
+    0xAE2E0001, 0xC7625FEC, 0xEC220000, 0x8A625F3A,
+    0xBA62013E, 0xC6330004, 0xFF37000F, 0x9A2F01DD,
+    0xD18B4000, 0xB48003B5, 0x9B80053F, 0xF08006DD,
+    0x138006EA, 0x53800200, 0x53800200, 0x13800200,
+    0x53800200, 0x13800200, 0x13800200, 0x53800200,
+    0x53800200, 0x13800200, 0x13800200, 0x4B800BC6,
+    0x13800200, 0x79605F34, 0x7A605F32, 0x188000A6,
+    0x682200C1, 0x15800203, 0x2C2200A3, 0x55800203,
+    0x2722008F, 0x55800203, 0x45220085, 0x15800203,
+    0x0B2200C0, 0x55800203, 0x6A2200A0, 0x15800203,
+    0x492200A1, 0x15800203, 0x23220081, 0x55800203,
+    0xA0220087, 0xD5800203, 0xEC220000, 0xA3685F32,
+    0xEF625F38, 0xB3230208, 0x8B341000, 0xE8CC02A0,
+    0xFB97035E, 0xA0685F34, 0xB66A5F38, 0xDA230218,
+    0xBC2C0035, 0xF3460000, 0xF6695F34, 0x9D800273,
+    0xE860013C, 0xB5635F46, 0xBB97035E, 0xF9200215,
+    0x9C605F36, 0xDE970393, 0xC9CC0263, 0x90970236,
+    0x856A010C, 0xFA680110, 0xFE2A01A0, 0xB5C801C8,
+    0xD8380000, 0x8DCC01C8, 0x94620110, 0xE7970C63,
+    0x0D6A0110, 0x4C20B424, 0x6C500011, 0x05500001,
+    0x6850C400, 0x05500001, 0x2D5001A0, 0x66500000,
+    0x4E62B434, 0x0821022C, 0x172301C8, 0x6B940C7D,
+    0x3E6B0112, 0x672201A0, 0x5C62010C, 0x1B200000,
+    0x4D6A0110, 0x06600112, 0x23600110, 0x793B0000,
+    0x0ACC0385, 0x588000A6, 0x79635F38, 0x201A4000,
+    0x0262B140, 0x6F6B5EA0, 0x57020000, 0x1F3B0004,
+    0x76635EA0, 0x0D388000, 0x3A605F32, 0x75008000,
+    0x07300003, 0x75605F4A, 0x75008000, 0x3F30FFF8,
+    0x4F384001, 0x36605F4C, 0x2832FFFF, 0x5D2E0D06,
+    0x5D23024A, 0x078A4000, 0x13605F4E, 0x456A010C,
+    0x102001A0, 0x4D210000, 0x4E0A0000, 0x26970DE4,
+    0x6B970E02, 0x026B5F32, 0x0A685F4E, 0x7F37000F,
+    0x343B0100, 0x576A5F34, 0x7263B144, 0x0B420000,
+    0x1B695F46, 0x5F2C0002, 0x6A410000, 0x136A5F3A,
+    0x5F2C0002, 0x0B420000, 0x31695F3C, 0x606B5F38,
+    0x9F2C0002, 0xEA410000, 0xD18B4000, 0xBA20C000,
+    0xFA605F32, 0xAE970C74, 0xA7220040, 0xCC20B424,
+    0xEC500011, 0xA0500003, 0xA850C400, 0xC5500001,
+    0x87500180, 0xE6500000, 0xCE62B434, 0x9E2000A6,
+    0xC82100A6, 0xBF2300A6, 0x89800C7D, 0xD4635E9C,
+    0xAD6B5FEE, 0xC5615E98, 0xEC2D0036, 0x91484000,
+    0xB82F0001, 0xF4635FEE, 0xC0349FFF, 0x88404000,
+    0xEC348000, 0xB9C80286, 0x912DFFFE, 0xE64A4000,
+    0x2B2D0008, 0x51484000, 0x41625E9A, 0x30510000,
+    0x58380000, 0x32C8029C, 0x10605E9E, 0x4A685E98,
+    0x79215FDC, 0x2A970F4A, 0x21970E86, 0x49685E9E,
+    0x0D6B5E9C, 0x58380000, 0x6BCC0290, 0x118B4000,
+    0x586A5E9A, 0x1F215FD8, 0x1336FF00, 0x70D00297,
+    0x2A970F4A, 0x4D6B5E9C, 0x778001C0, 0x31320008,
+    0x3C2C0035, 0x73460000, 0x5F695E9E, 0x3D800274,
+    0x7C9700F3, 0x3C209000, 0x3A605F32, 0x4480101D,
+    0x8E208000, 0xFA605F32, 0xE480102C, 0xBD635F36,
+    0xEC685F4A, 0xB9695F4C, 0x8B32FFFE, 0xCD048000,
+    0xF0C402AB, 0x8F2D0001, 0xA0615F4C, 0xF5605F4A,
+    0x93320002, 0xE4685F3A, 0xD88002B9, 0xBD635F36,
+    0xD8380000, 0xBCD002B3, 0x99970354, 0xE4685F3A,
+    0x8E390000, 0xDDC802B9, 0xE4300002, 0x88404000,
+    0xBC30FFFE, 0xF6010000, 0xE72D01A0, 0x9F610106,
+    0xCB32FFFE, 0x9CC80352, 0x94038000, 0xC3330001,
+    0xAFD402C2, 0xEB2E0004, 0xD40C8000, 0xBD605F3A,
+    0xD4038000, 0xBF37000F, 0x95C802C9, 0xF736FFF0,
+    0xE42E0010, 0xAF6B5F40, 0xAC625F3E, 0xCD0B8000,
+    0x94C402CE, 0xE0625F40, 0xDC6A5F42, 0x9B200000,
+    0xE93600C0, 0xB5320006, 0x9BC802D6, 0xF12C0040,
+    0x932EFFFF, 0xF88002D2, 0xEC600104, 0x85970CA6,
+    0x9E2000A6, 0xE1970CAF, 0xEC970CB6, 0xA7970C63,
+    0xE3690104, 0xB5680104, 0xAF2D0030, 0xE64A4000,
+    0x092D0002, 0x704B4000, 0x493EFFFF, 0x0D1EC000,
+    0x6CCC0322, 0x1A21B424, 0x18510041, 0x7160B428,
+    0x4A2D0004, 0x30510000, 0x3851C010, 0x53510001,
+    0x28220038, 0x4E62B434, 0x4C2102DB, 0x3F2300A6,
+    0x6B940C7D, 0x3920003C, 0x3C60B348, 0x64970C53,
+    0x27970C63, 0x50680106, 0x7B21B428, 0x356A5F3E,
+    0x2A6B5FD0, 0x4251E000, 0x53510001, 0x1760B42C,
+    0x492D0002, 0x30510000, 0x12200311, 0x5763B420,
+    0x1060B424, 0x4E62B434, 0x6C685F4A, 0x39695F4C,
+    0x5B60B408, 0x2861B40A, 0x226B5FCC, 0x7721B40C,
+    0x4251E000, 0x13510001, 0x2B201061, 0x7D63B400,
+    0x3A60B404, 0x6462B414, 0x5D200003, 0x3E605F50,
+    0x7020031B, 0x21210325, 0x0A970C7D, 0x7F2300A6,
+    0x0B940C7A, 0x67685F50, 0x4434FFFE, 0x3E605F50,
+    0x18380000, 0x71C80320, 0x588000A6, 0x27685F50,
+    0x4234FFFD, 0x3E605F50, 0x18380000, 0x65CC00A6,
+    0xA46B5F36, 0xEE800CBD, 0xEA970C83, 0xB62301F2,
+    0xEE800CBD, 0xBB2302DB, 0xA9800C83, 0xFD635F36,
+    0xD8380000, 0xB3D0032B, 0x99970354, 0xE4685F3A,
+    0x8E390000, 0xFBC80331, 0xE4300002, 0x88404000,
+    0xFC30FFFE, 0xB6010000, 0xA72D01A0, 0xDF610106,
+    0x8B32FFFE, 0xDCC80352, 0xEF6B5F40, 0xAC625F3E,
+    0x8D0B8000, 0xF8C4033B, 0xE0625F40, 0x94038000,
+    0xE6330003, 0x84D4033F, 0xAB2E0004, 0xD40C8000,
+    0xBD605F3A, 0xE4970C53, 0xEC685F4A, 0xB9695F4C,
+    0xDB60B408, 0xA861B40A, 0x90680106, 0xF56A5F3E,
+    0xD221B40E, 0xB0510000, 0xBD60B40C, 0xD2200021,
+    0xBA60B404, 0xE462B414, 0xC5685F36, 0xA6210341,
+    0xFF2300A6, 0xA9800C7A, 0xA46B5F36, 0xF88000FB,
+    0xB5635E90, 0xC16B5F34, 0xE00CC000, 0x844B0000,
+    0x9F2C0002, 0xE5480000, 0xD4635F4A, 0xAC6B5E90,
+    0xF6605F4C, 0x918B4000, 0xB96A5F40, 0xDB200000,
+    0x17605F40, 0x6F3A0000, 0x7ECC0C95, 0x118B4000,
+    0x4520FFFF, 0x2C2D0036, 0x264A4000, 0x772DFFFA,
+    0x45625F42, 0x1D34003F, 0x17148000, 0x6CCC01F2,
+    0x118B4000, 0x664A4000, 0x492D0002, 0x273607FC,
+    0x57C801F4, 0x13320002, 0x2C088000, 0x4EC001F4,
+    0x35008000, 0x62300001, 0x6FD40378, 0x2E2E0001,
+    0x1F30FFFF, 0x518B4000, 0x76635E96, 0x33200102,
+    0x7E97036D, 0x09600130, 0x06625F44, 0x73200102,
+    0xBE97036D, 0xEF6B5E96, 0xEF600134, 0xA3625F46,
+    0xD18B4000, 0xA469010C, 0x9768010E, 0xFD3D01A0,
+    0xE6CC0390, 0x862E01A0, 0x9C62010C, 0xD8380000,
+    0x90C8038F, 0xEC088000, 0xE8C001F0, 0x918B4000,
+    0xD4620110, 0xA7630112, 0x988000A6, 0xD3680100,
+    0xB6635E96, 0xDB6AB140, 0xEE210001, 0xBA230000,
+    0xA1280001, 0xD80B0000, 0xCD11C000, 0x94038000,
+    0xD7174000, 0xBEC803A1, 0xB4310001, 0xE1280001,
+    0x3EC4039B, 0x6F6B5E96, 0x518B4000, 0x36635E96,
+    0x6C220000, 0x05625E94, 0x0D6BB140, 0x45690100,
+    0x78200001, 0x3602C000, 0x35160000, 0x5C6A5E94,
+    0x02CC03AF, 0x6E2E0001, 0x45625E94, 0x1F30FFFF,
+    0x722DFFFF, 0x01CC03A9, 0x2F6B5E96, 0x5C6A5E94,
+    0x118B4000, 0x64625F4E, 0x512C03B8, 0x30884000,
+    0x13800200, 0x7E8003C8, 0x5C800442, 0x3C800445,
+    0x56800465, 0x1D800486, 0x3E8004EB, 0x7B8004EE,
+    0x1B800509, 0x5E80050C, 0x7780052A, 0x13800200,
+    0x53800200, 0x13800200, 0x13800200, 0x53800200,
+    0x54230018, 0x0963013C, 0x1A970364, 0x7797037A,
+    0x276A0130, 0x41030000, 0x4D0B8000, 0x2FC003D1,
+    0x57020000, 0x106B013C, 0x28685F44, 0x5B695F46,
+    0x32370020, 0x4DCC03D7, 0x6E2E0001, 0x09625F3C,
+    0x360E0000, 0x420E4000, 0x4B32FFFE, 0x34970385,
+    0x5797029D, 0x1B200000, 0x2A210120, 0x5F6A5F44,
+    0x97970327, 0xDC200008, 0xCC210124, 0xBA6A5F46,
+    0xD7970327, 0x969702A0, 0xA4685F3A, 0xE4210010,
+    0xE4300002, 0xA7600128, 0xBA610104, 0xFB97035E,
+    0xA6970CCB, 0xD0680130, 0xE0690134, 0x8E6A0120,
+    0xFE6B0124, 0x9A60B010, 0xAA61B014, 0xFE680128,
+    0x8E69012C, 0xEB2E0068, 0xC462B000, 0xBD2F0068,
+    0xB463B004, 0xE06A0138, 0xDC2C0068, 0xB460B008,
+    0xCA2D0068, 0x8461B00C, 0xAA62B018, 0xF168013C,
+    0xBF2300A6, 0xCD388000, 0xFB60B01C, 0xAF940CD0,
+    0xCA685F4E, 0x976A5F34, 0x98380000, 0xF5C8040D,
+    0xF0884000, 0x8E208000, 0xA9408000, 0xDB200000,
+    0xBF800419, 0xE4685F3A, 0xF069B024, 0xA02E0028,
+    0xCE390000, 0x90D00409, 0xA4300002, 0xDC2C0068,
+    0xAF090000, 0xEA31FFFE, 0xC768B028, 0xBF418000,
+    0xB734001F, 0xE82E0002, 0xE9408000, 0xB5008000,
+    0xDF2C0002, 0xA6500000, 0xA6500000, 0xC9970CD8,
+    0x106A5F3C, 0x60685F34, 0x4B32FFFE, 0x33C80202,
+    0x546B0104, 0x32695F3A, 0x09625F3C, 0x60625F40,
+    0x600CC000, 0x272D01A0, 0x3A610104, 0x73490000,
+    0x1F2C0002, 0x65480000, 0x63615F4A, 0x36605F4C,
+    0x64970C53, 0x2C685F4A, 0x39695F4C, 0x7D60B40C,
+    0x0E61B40E, 0x75680104, 0x4D210000, 0x2861B40A,
+    0x1B60B408, 0x506A5F3C, 0x54200081, 0x3A60B404,
+    0x6462B414, 0x21210430, 0x3F2300A6, 0x4B940C7A,
+    0x11230202, 0x7880035E, 0x57230028, 0x0963013C,
+    0x5B8003CA, 0x1A970364, 0x33200102, 0x7E97036D,
+    0x49600130, 0x06625F44, 0x192C0001, 0x7E605F3C,
+    0x2E32FFFC, 0x6B2E0004, 0x74970385, 0x1797029D,
+    0x5B200000, 0x2A210120, 0x1F6A5F44, 0x57970327,
+    0x1F6A5F44, 0x5C200008, 0x4C210124, 0x17970327,
+    0x1F6A5F44, 0x72200010, 0x6D210128, 0x17970327,
+    0x569702A0, 0x24685F3A, 0x23210018, 0x64300002,
+    0x8160012C, 0xFA610104, 0xD823000A, 0x8963013C,
+    0xD28003EB, 0x9A970364, 0xB797037A, 0xE8685F44,
+    0xF60E0000, 0x8B32FFFE, 0xB4970385, 0xD797029D,
+    0x9B200000, 0xEA210120, 0xDF6A5F44, 0x97970327,
+    0xFA6A5F46, 0x9C200008, 0x8C210124, 0xD7970327,
+    0x969702A0, 0xE4685F3A, 0xE76A0130, 0x976B0134,
+    0xA4300002, 0xE7600128, 0xD70EC000, 0x8B32FFFE,
+    0xC9625F3C, 0xAA208009, 0xB9970210, 0xC1970D7E,
+    0x1F680148, 0x61970E49, 0x4D210000, 0x316A5F5C,
+    0x72200010, 0x2F800E66, 0x03208100, 0x6860013C,
+    0x5A970364, 0x3797037A, 0x316B0130, 0x7E695F44,
+    0x180B0000, 0x4EC001F4, 0x4434FFFE, 0x17C801F4,
+    0x420E4000, 0x0B32FFFE, 0x34970385, 0x5797029D,
+    0x1B200000, 0x6A210120, 0x5F6A5F44, 0x17970327,
+    0x3A6A5F46, 0x5C200008, 0x4C210124, 0x17970327,
+    0x569702A0, 0x016A0134, 0x09690124, 0x532EFFFF,
+    0x820D8000, 0xEA31FFFE, 0xE72D01A0, 0xA64A4000,
+    0xC92D0002, 0x87494000, 0xB168013C, 0xE01A4000,
+    0xD3C801FA, 0xB2695F3A, 0x816A0134, 0xF2310002,
+    0xB1610128, 0xF4340100, 0xFAC804BA, 0xB16B0130,
+    0xF5008000, 0x8D0B8000, 0xB82F0001, 0xEE2E0001,
+    0xA2300001, 0xFBD004B7, 0xEE2E0001, 0x820D8000,
+    0x9761012C, 0xD70EC000, 0xCB32FFFE, 0x89625F3C,
+    0xF168013C, 0xB9970210, 0x81970D7E, 0xC669015C,
+    0xB968014C, 0xE2350100, 0xDCC804E4, 0xA1970E49,
+    0xD1520000, 0xAB2E0004, 0xA3690168, 0xDF680148,
+    0xCE390000, 0x91D004CD, 0xAF090000, 0xEA31FFFE,
+    0x918004CE, 0xD8218000, 0xC2685F52, 0x952EFFFC,
+    0xFF418000, 0xAA381000, 0x9B605F52, 0xC797101D,
+    0xA06A0154, 0xD068015C, 0xCD210000, 0x8B32FFFE,
+    0xB4340100, 0xF2200010, 0xFCC804E3, 0x8F970E67,
+    0xDF680148, 0xAF69014C, 0xB16A5F5C, 0xEF090000,
+    0x2A31FFFE, 0x7A0A4000, 0x75200018, 0x2F800E66,
+    0x576A5F58, 0x202E0028, 0x11520000, 0x51520000,
+    0x51520000, 0x11520000, 0x168004C6, 0x40208200,
+    0x2860013C, 0x59800488, 0x70200088, 0x2860013C,
+    0x5A970364, 0x21361F00, 0x31320008, 0x79620138,
+    0x33200102, 0x7E97036D, 0x49600130, 0x366B0138,
+    0x06625F44, 0x793B0000, 0x506B013C, 0x29CC04FD,
+    0x7F800500, 0x13370040, 0x02CC0500, 0x592C0001,
+    0x3E605F3C, 0x760E0000, 0x4B32FFFE, 0x34970385,
+    0x5B200000, 0x2A210120, 0x1F6A5F44, 0x772303E6,
+    0x54800327, 0x17200048, 0x2860013C, 0x568004F0,
+    0x1A970364, 0x73200102, 0x7E97036D, 0x09600130,
+    0x46625F44, 0x0D32FFFD, 0x34970385, 0x5797029D,
+    0x1B200000, 0x6A210120, 0x5F6A5F44, 0x17970327,
+    0x1F6A5F44, 0x5C200008, 0x4C210124, 0x17970327,
+    0x569702A0, 0x36200522, 0x13605F4E, 0x55230400,
+    0x8963013C, 0xD28003EB, 0xD669B020, 0xA02E0028,
+    0xD1520000, 0x91520000, 0x91520000, 0xFF418000,
+    0xD1230202, 0x8A800CD8, 0x9A970364, 0xD52001FF,
+    0xBE97036D, 0xC9600130, 0xFE605F3C, 0x97020000,
+    0xC6625F44, 0x8B32FFFE, 0xB4970385, 0xDB200000,
+    0xAA210120, 0xDF6A5F44, 0xD7970327, 0x9B200000,
+    0xBD605F3A, 0xE7600128, 0xE4210010, 0xBA610104,
+    0xCC230808, 0x8963013C, 0x928003EB, 0xC1030000,
+    0xA637FFF8, 0xEECC0200, 0xF52C0544, 0xB0884000,
+    0xD580054C, 0xBC800593, 0x9A800604, 0xD3800200,
+    0xD780061D, 0xB380064E, 0x93800200, 0xD3800200,
+    0x8320FFFC, 0xF9970365, 0xE1361F00, 0xB2C801F6,
+    0xF1320008, 0xB9620138, 0xBF2A0011, 0xD3C401F6,
+    0xB797037A, 0xE2300001, 0xDCD00558, 0xA82E0002,
+    0xB2347FFF, 0xD7C801F4, 0xD7680138, 0xA3625F46,
+    0xF6010000, 0x92290003, 0xBAC40560, 0xDD200003,
+    0x3C2C0003, 0x63018000, 0x6A072000, 0x393B0000,
+    0x4ECC01F8, 0x3E695F44, 0x242E0010, 0x420E4000,
+    0x442A0800, 0x3A6A5F46, 0x17C401F8, 0x6832FFFF,
+    0x020E4000, 0x4B32FFFE, 0x74970385, 0x1797029D,
+    0x5B200000, 0x2A210120, 0x0A6B5F42, 0x5F6A5F44,
+    0x03330001, 0x76D00578, 0x74230579, 0x14800327,
+    0x319702AF, 0x4A6B5F42, 0x5C200008, 0x0C210124,
+    0x7A6A5F46, 0x05330002, 0x36D00581, 0x51230582,
+    0x94800327, 0xF19702AF, 0xC56B5F3A, 0xBA6A5F46,
+    0xED210128, 0xB5635F46, 0xB2200010, 0xD7970327,
+    0xD69702A0, 0xAC6B5F46, 0xBE680128, 0xC16A0134,
+    0x8160012C, 0xCB32FFFE, 0xDC635F3A, 0x89625F3C,
+    0xE920E000, 0xBE2305FD, 0xBA800210, 0xE520FFF8,
+    0xB9970365, 0xE1361F00, 0xF2C801F6, 0xB1320008,
+    0xB9620138, 0xFF2A0011, 0xD3C401F6, 0x92200082,
+    0xFE97036D, 0x89600130, 0x86625F44, 0xD2200082,
+    0x3E97036D, 0x6F600134, 0x62300001, 0x3AD005A5,
+    0x682E0002, 0x32347FFF, 0x17C801F4, 0x57680138,
+    0x63625F46, 0x36010000, 0x12290003, 0x5FC405AD,
+    0x1D200003, 0x792C0006, 0x63018000, 0x2A072000,
+    0x793B0000, 0x0ECC01F8, 0x3E695F44, 0x76680134,
+    0x242E0010, 0x4931FFFF, 0x420E4000, 0x042A0800,
+    0x17C401F8, 0x57020000, 0x4B32FFFE, 0x360E0000,
+    0x420E4000, 0x082E0005, 0x0B32FFFE, 0x74970385,
+    0x1797029D, 0x5B200000, 0x6A210120, 0x0A6B5F42,
+    0x5F6A5F44, 0x03330001, 0x3CD005CA, 0x6832FFFF,
+    0x7D2305CD, 0x14800327, 0x319702AF, 0x5F6A5F44,
+    0x109702A3, 0x4A6B5F42, 0x5C200008, 0x0C210124,
+    0x7A6A5F46, 0x05330002, 0x34D005D6, 0x6832FFFF,
+    0x322305D9, 0x54800327, 0x719702AF, 0x3A6A5F46,
+    0x109702A3, 0x49690124, 0x7A6A5F46, 0x2A31FFFE,
+    0x672D01A0, 0x11484000, 0x0B32FFFE, 0x420D8000,
+    0xB04B4000, 0xDA340001, 0xF5C801FE, 0xBB370001,
+    0xF5C801FE, 0x816A0134, 0xB2200010, 0xCA6B5F42,
+    0xED210128, 0xA6330003, 0xB6D005ED, 0xD12305EE,
+    0x94800327, 0xF19702AF, 0xE4685F3A, 0x816A0134,
+    0xD3605F4E, 0xB6200028, 0x8B21012C, 0xE832FFFF,
+    0x97970327, 0xD69702A0, 0xCA685F4E, 0x816A0134,
+    0xBD605F3A, 0xFC209000, 0xCD32FFFD, 0x89625F3C,
+    0xF9970210, 0x81970D7E, 0xB968014C, 0xE1970E49,
+    0x0D210000, 0x716A5F5C, 0x75200018, 0x2F800E66,
+    0x5A970364, 0x3797037A, 0x096B5F44, 0x570EC000,
+    0x4B32FFFE, 0x34970385, 0x1797029D, 0x5B200000,
+    0x2A210120, 0x5F6A5F44, 0x57970327, 0x1C200008,
+    0x4C210124, 0x3A6A5F46, 0x17970327, 0x569702A0,
+    0x056B5F3A, 0x416A0134, 0x45330002, 0x2063012C,
+    0x0B32FFFE, 0x49625F3C, 0x5B20F000, 0x3E2305FD,
+    0x7A800210, 0x0620FFF9, 0x39970365, 0x45625F42,
+    0x892D0002, 0xF5200018, 0xFE97036D, 0xAF600134,
+    0xC434FFFE, 0x97C801F4, 0xA82E0002, 0xE3625F46,
+    0xF420013C, 0xB3508000, 0x85500001, 0xF1290002,
+    0x91484000, 0xD4038000, 0xCD32FFFD, 0x970EC000,
+    0xFF340003, 0x90605F48, 0x8B32FFFE, 0xF4970385,
+    0x9797029D, 0xFA6A5F46, 0xE86B5F48, 0xB5008000,
+    0xA832FFFF, 0xFB370001, 0xDBC8063C, 0xB60E0000,
+    0xEA210120, 0x9B200000, 0x97970327, 0xE86B5F48,
+    0xBA6A5F46, 0xFB370001, 0xCCCC0675, 0x96230675,
+    0xE4685F3A, 0x9701C000, 0xB12C01A0, 0xC5500001,
+    0xCB32FFFE, 0x902A0002, 0xAF970F80, 0xC92801A0,
+    0xBD605F3A, 0xE6894000, 0xE520FFF8, 0xB9970365,
+    0xC5625F42, 0xB5200018, 0xBE97036D, 0xC9600130,
+    0x86625F44, 0xF5200018, 0xFE97036D, 0xAF600134,
+    0x8434FFFE, 0xD7C801F4, 0xE82E0002, 0xA3625F46,
+    0xF420013C, 0x81509000, 0x85500001, 0xF1290002,
+    0x11484000, 0x7E695F44, 0x5C340002, 0x10605F48,
+    0x6832FFFF, 0x14038000, 0x170EC000, 0x570EC000,
+    0x420E4000, 0x0B32FFFE, 0x34970385, 0x5797029D,
+    0x1B200000, 0x6A210120, 0x4A6B5F42, 0x1F6A5F44,
+    0x43330001, 0x14D00674, 0x16230675, 0x54800327,
+    0x319702AF, 0x4A6B5F42, 0x7A6A5F46, 0x1C200008,
+    0x05330002, 0x56D00680, 0x63018000, 0x2832FFFF,
+    0x420E4000, 0x0C210124, 0x34230686, 0x54800327,
+    0x8C210124, 0xF19702AF, 0xFA6A5F46, 0x909702A3,
+    0xFA6A5F46, 0x909702A3, 0x8A6B5F42, 0xFA6A5F46,
+    0xED210128, 0xA6330003, 0xBED006AD, 0xE86B5F48,
+    0xB5008000, 0xE832FFFF, 0xFB370001, 0x9FC80691,
+    0xF60E0000, 0xB2200010, 0x97970327, 0xE86B5F48,
+    0xBA6A5F46, 0xFB370001, 0xEDCC06B6, 0xA769013C,
+    0xA0685F34, 0xFA6A5F46, 0xD13D9000, 0x86CC06AB,
+    0xD72C0028, 0x844B0000, 0x9F2C0002, 0xF3490000,
+    0x1F2C0002, 0x761B4000, 0x73490000, 0x1F2C0002,
+    0x761B4000, 0x33490000, 0x36200028, 0x761B4000,
+    0x7EC806AB, 0x372306B6, 0x14800327, 0x772306B6,
+    0x11800644, 0x72200010, 0x719702AF, 0x3A6A5F46,
+    0x509702A3, 0x286B5F48, 0x3A6A5F46, 0x7B370001,
+    0x1CC80697, 0x509702A3, 0x569702A0, 0x3E6A5F48,
+    0x24685F3A, 0x6B360002, 0x5EC806C0, 0x3A6A5F46,
+    0x60690134, 0x2832FFFF, 0x020E4000, 0x4B32FFFE,
+    0x09625F3C, 0x64300002, 0x4160012C, 0x3168013C,
+    0x79970210, 0x36695F58, 0x0A2D0032, 0x51484000,
+    0x5C340002, 0x0CCC06D6, 0x206A0154, 0x5D20A000,
+    0x14038000, 0x43330001, 0x4CD406D0, 0x2E2E0001,
+    0x682E0002, 0x3E33FFFF, 0x170EC000, 0x4B32FFFE,
+    0x28625F5C, 0x4E970D6A, 0x41970D7E, 0x3968014C,
+    0x21970E49, 0x4D210000, 0x716A5F5C, 0x35200018,
+    0x6F800E66, 0x01030000, 0x2637FFF8, 0x6ECC0200,
+    0xB32C06E2, 0xF0884000, 0xF38006ED, 0x978007A7,
+    0xE38009AE, 0xAE800A87, 0x93800200, 0xD78007A7,
+    0xD3800200, 0xAE800A87, 0x98380000, 0xEECC0200,
+    0x8D800BC5, 0xC320FFFC, 0xF9970365, 0x892D0002,
+    0xF5200018, 0xBE97036D, 0x89600130, 0xEF600134,
+    0x8434FFFE, 0xD7C801F4, 0xE82E0002, 0xB1290002,
+    0x91484000, 0xE3625F46, 0xDA340001, 0x90605F48,
+    0xF5008000, 0xBA30FFFD, 0xB60E0000, 0xF60E0000,
+    0x8B32FFFE, 0xF4970385, 0xD797029D, 0x9B200000,
+    0xEA210120, 0x8A6B5F42, 0xBA6A5F46, 0xC3330001,
+    0xF6D0070B, 0xB723070C, 0x94800327, 0xF19702AF,
+    0xA897097D, 0xFA6A5F46, 0xF6200028, 0x8D210000,
+    0xD7970327, 0x969702A0, 0x8D685F46, 0xDB695F46,
+    0xBA30FFFD, 0xF50C4000, 0xE0600120, 0xAA31FFFE,
+    0x90610124, 0xC16A0134, 0xFC30FFFE, 0xB12C01A0,
+    0xE832FFFF, 0x8D210000, 0x844B0000, 0xDF2C0002,
+    0x1419C000, 0x532EFFFF, 0x61CC071E, 0x1235FFFE,
+    0x50C801FC, 0x26970CCB, 0x20690134, 0x4E6A0120,
+    0x7E6B0124, 0x21208400, 0x2B2E0068, 0x7D2F0068,
+    0x0C61B010, 0x4462B000, 0x7463B004, 0x3B60B01C,
+    0x7F2300A6, 0x2F940CD0, 0x1669B020, 0x72310002,
+    0x14D00737, 0x49970CD8, 0x558001FC, 0x09970CD8,
+    0x0D685F46, 0x6C220000, 0x46600124, 0x36010000,
+    0x6A31FFFE, 0x170D0000, 0x31610128, 0x630D4000,
+    0x170D0000, 0x5761012C, 0x49625F3C, 0x38200001,
+    0x4D60013E, 0x3C209000, 0x39970210, 0x5D20A000,
+    0x4E970D6A, 0x14680164, 0x286A0148, 0x58380000,
+    0x20D00E47, 0x6F69014C, 0x630E8000, 0x17610140,
+    0x71620148, 0x3A098000, 0x3661014C, 0x6A31FFFE,
+    0x31610144, 0x40208200, 0x4D970D6C, 0x35680168,
+    0x0E6A014C, 0x58380000, 0x60D00E47, 0x09690148,
+    0x71620148, 0x3A098000, 0x17610140, 0x7A098000,
+    0x8B32FFFE, 0xC20D8000, 0xF661014C, 0x9B20F000,
+    0xCD970D6C, 0x9F680148, 0x8E690140, 0xEC220000,
+    0xD0620144, 0xA060014C, 0x970D0000, 0xD7610140,
+    0x9930FFFC, 0xC6600148, 0xED208001, 0x8D970D6C,
+    0xE86A0148, 0xB968014C, 0xB66B0154, 0xF6620140,
+    0xB6010000, 0xFA30FFFD, 0xE7600144, 0xA2300001,
+    0x8E0A0000, 0xC20D8000, 0xD0610148, 0x810FC000,
+    0xC9630150, 0xA7208010, 0x8D970D6C, 0xD4680164,
+    0x0E690140, 0x58380000, 0x60D00E47, 0x286A0148,
+    0x7968014C, 0x106B0150, 0x10610148, 0x76620140,
+    0x782F0001, 0x09630150, 0x0E0A0000, 0x50620144,
+    0x2D208001, 0x4D970D6C, 0x466A0150, 0x366B0154,
+    0x7968014C, 0x09690148, 0x170EC000, 0x5F620150,
+    0x096A0144, 0x57610140, 0x4E0A0000, 0x31620148,
+    0x200F0000, 0x5D33FFFE, 0x7E635F5C, 0x3C30FFFE,
+    0x67600144, 0x00208200, 0x0D970D6C, 0x41970D7E,
+    0xA3690168, 0xF16A5F5C, 0xCE390000, 0xA0D00E47,
+    0xE8970E5E, 0xB5200018, 0xAF800E66, 0xE020FFFD,
+    0xF9970365, 0x892D0002, 0xB5200018, 0xFE97036D,
+    0x89600130, 0xEF600134, 0xC434FFFE, 0x97C801F4,
+    0xE82E0002, 0xB1290002, 0x91484000, 0xE3625F46,
+    0x9C340002, 0xD0605F48, 0xF5008000, 0xA3018000,
+    0xBC30FFFE, 0xCD32FFFD, 0xF60E0000, 0x820E4000,
+    0xCB32FFFE, 0xB4970385, 0x9797029D, 0xE897097D,
+    0xBA6A5F46, 0xF6200028, 0xCD210000, 0xA832FFFF,
+    0xD7970327, 0x9B200000, 0xBA6A5F46, 0xCD210000,
+    0xE832FFFF, 0x97970327, 0x969702A0, 0xFA6A5F46,
+    0x92970644, 0xDB695F46, 0xCD685F46, 0xAC31FFFD,
+    0xF6610120, 0xB4310001, 0xAF090000, 0xD0610124,
+    0xA6970CCB, 0xE0690134, 0xCE6A0120, 0x8C61B010,
+    0xAB2E0068, 0xC462B000, 0xC362B008, 0xB8208808,
+    0xFB60B01C, 0xBF2300A6, 0xAF940CD0, 0xF069B024,
+    0x0E390000, 0x62D00889, 0x49690124, 0x21208400,
+    0x4A2D0068, 0x0361B004, 0x3B60B01C, 0x7F2300A6,
+    0x6F940CD0, 0x1669B020, 0x32310002, 0x5AD40889,
+    0x1B695F46, 0x4E6A0120, 0x78208808, 0x020E4000,
+    0x57620120, 0x2B2E0068, 0x0462B000, 0x4362B008,
+    0x3B60B01C, 0x7F2300A6, 0x6F940CD0, 0x3069B024,
+    0x0E390000, 0x62D00889, 0x61208400, 0x3B60B01C,
+    0x7F2300A6, 0x2F940CD0, 0x1669B020, 0x72310002,
+    0x9AD40889, 0xC9970CD8, 0xCD685F46, 0xAF690120,
+    0xE7600128, 0xBC30FFFE, 0x970D0000, 0xD761012C,
+    0xDD9703A3, 0xA8615F3C, 0x9B20F000, 0xD02A0002,
+    0xA5C4088B, 0xDF695F48, 0xCA350002, 0xBCCC088B,
+    0xF9970210, 0x83970956, 0xA0970961, 0xE06A0154,
+    0xB968014C, 0xF96B0140, 0xDF620150, 0x89690148,
+    0xA7630148, 0xD80B0000, 0xC6630144, 0x9F30FFFF,
+    0xEF090000, 0x97610140, 0xAD208001, 0xCD970D6C,
+    0x2A970970, 0x7968014C, 0x6F6A0140, 0x09690148,
+    0x766B0154, 0x0E0A0000, 0x1762014C, 0x5F30FFFF,
+    0x570D0000, 0x17610140, 0x22300001, 0x570D0000,
+    0x10610148, 0x5B200000, 0x67600144, 0x09630150,
+    0x7C209000, 0x0E970D6A, 0x1F680148, 0x4E690140,
+    0x0E6A014C, 0x4D084000, 0x6060014C, 0x10610148,
+    0x36620140, 0x76010000, 0x5F30FFFF, 0x170D0000,
+    0x7E610150, 0x3F208800, 0x0D970D6C, 0x7968014C,
+    0x2F6A0140, 0x49690148, 0x766B0154, 0x0E0A0000,
+    0x5762014C, 0x1F30FFFF, 0x2F090000, 0x57610140,
+    0x7C30FFFE, 0x0E0A0000, 0x31620148, 0x49630150,
+    0x3C209000, 0x4E970D6A, 0x7968014C, 0x09690148,
+    0x6F6A0140, 0x06600148, 0x0D084000, 0x54038000,
+    0x360E0000, 0x5762014C, 0x64300002, 0x200F0000,
+    0x20630140, 0x4E208000, 0x4E970D6A, 0x1D20A000,
+    0x4E970D6A, 0x17680154, 0x0E6A014C, 0x76010000,
+    0xB4310001, 0xF5D40863, 0xD92C0001, 0x9F2C0002,
+    0xE060014C, 0xB6620140, 0xB6010000, 0xDF30FFFF,
+    0xF50C4000, 0xA7600144, 0xB6010000, 0xDF30FFFF,
+    0x970D0000, 0xD0610148, 0xC0208200, 0x8D970D6C,
+    0xDF680148, 0x986B014C, 0xA06A0154, 0xC1600140,
+    0xB6010000, 0xFC30FFFE, 0xDC605F5A, 0x8E09C000,
+    0xB1610144, 0xCB32FFFE, 0xE8625F5C, 0xA1208400,
+    0xCD970D6C, 0x81970D7E, 0xA8970E5E, 0xC16B5F58,
+    0x056A0160, 0x7E2F0034, 0x654BC000, 0x0B420000,
+    0x7E370004, 0x34CC0D3E, 0x316A5F5C, 0x75200018,
+    0x6F800E66, 0x09970CD8, 0x168001FA, 0x6860013C,
+    0x3B97035E, 0x61230939, 0x75635F46, 0x0C200891,
+    0x5C605F36, 0x1E970393, 0x09CC0263, 0x50970236,
+    0x2E230897, 0x75635F46, 0x7C800213, 0x1F680148,
+    0x0E6A014C, 0x4E690140, 0x6060014C, 0x10620144,
+    0x760E0000, 0x1F30FFFF, 0x2F090000, 0x57610140,
+    0xB1620148, 0xED208001, 0xCD970D6C, 0xAA970970,
+    0xC9690148, 0xB968014C, 0xAF6A0140, 0xF66B0154,
+    0xD7610140, 0x8E0A0000, 0x8E0A0000, 0xD762014C,
+    0xBC30FFFE, 0xC6600148, 0xDB200000, 0xA7600144,
+    0xC9630150, 0xBC209000, 0x8E970D6A, 0xF968014C,
+    0x89690148, 0xEF6A0140, 0xC6600148, 0x8D084000,
+    0xA4300002, 0xF60E0000, 0xF6620140, 0xA2300001,
+    0xE060014C, 0xB2200010, 0x94695F52, 0xEC220000,
+    0xB5190000, 0xCD615F52, 0xD3695F6C, 0xAF238000,
+    0xDC635F56, 0x91484000, 0x816B5F34, 0xC92D0002,
+    0xFF424000, 0xBA1F0000, 0xA0C80D47, 0xCB235F7A,
+    0x9249C000, 0xFE2F0002, 0xCD1D0000, 0xBFCC08D7,
+    0xD249C000, 0x8E390000, 0x98CC0D47, 0xF2695F56,
+    0x8E390000, 0xFED408DA, 0xCA625F56, 0x982F0006,
+    0xAE2E0001, 0xEA8008CC, 0xC2685F52, 0xA36B5F52,
+    0xDE34000F, 0xBC3700F0, 0xB9CC08E2, 0xCE1C8000,
+    0x3ACC08E4, 0x628008E6, 0x4E1C8000, 0x1FCC08E6,
+    0x6E32FFFC, 0x018008E7, 0x0F31FFFC, 0x60198000,
+    0x6B615F56, 0x236B5F52, 0x31310004, 0x4835000F,
+    0x3F37000F, 0x4E1F4000, 0x6CC808FC, 0x14004000,
+    0x63645F52, 0x2931FFF8, 0x19394001, 0x49615F6A,
+    0x36010000, 0x51310003, 0x6C615F68, 0x1F30FFFF,
+    0x2A2C0D06, 0x6E2308FB, 0x70884000, 0x1C605F6C,
+    0x686A0148, 0x2F69014C, 0x18680140, 0x420D8000,
+    0x2A31FFFE, 0x6B615F60, 0x7E6B0148, 0x0E0A0000,
+    0x750F8000, 0x0163014C, 0x3C30FFFE, 0x58605F62,
+    0x4B32FFFE, 0x09625F66, 0x05970C69, 0x5A200051,
+    0x3160B444, 0x64685F56, 0x456B5F60, 0x1E34000F,
+    0x47300003, 0x36010000, 0x2434FF00, 0x600CC000,
+    0x1060B448, 0x6C3500FF, 0x6361B44A, 0x23685F68,
+    0x206B5F62, 0x506A5F66, 0x76010000, 0x2434FF00,
+    0x600CC000, 0x3660B44C, 0x2C3500FF, 0x4561B44E,
+    0xAF62B454, 0xC8200925, 0xD321090A, 0xBF2300A6,
+    0xEF800C80, 0xAE210001, 0xBA61015E, 0xCE208000,
+    0xC960015C, 0x89970E08, 0xA36B5F52, 0xC5685F6C,
+    0xBF37000F, 0xF43B0100, 0xF263B144, 0x9F21085B,
+    0xDF2C0002, 0xAA410000, 0xA4685F56, 0xC2230D47,
+    0x9E34000F, 0xE3645F52, 0xC7300003, 0xBA605F68,
+    0x82800D7E, 0xC3970956, 0xE0970961, 0xB968014C,
+    0xEF6A0140, 0x89690148, 0xB66B0154, 0xCE0A0000,
+    0x9762014C, 0xEF6A0140, 0xC9630150, 0x97610140,
+    0xFC30FFFE, 0x8E0A0000, 0xB1620148, 0xDB200000,
+    0xE7600144, 0xBC209000, 0x8E970D6A, 0xCE690140,
+    0x9F680148, 0xE86A0148, 0xD7610140, 0x8D084000,
+    0xE060014C, 0x9F30FFFF, 0xB60E0000, 0xF1620148,
+    0x9B200000, 0xC78008BE, 0xDF680148, 0x8E6A014C,
+    0x8E690140, 0xE060014C, 0xD0620144, 0xAF090000,
+    0xF60E0000, 0x97610140, 0xB1620148, 0xED208001,
+    0x0E800D6C, 0x7968014C, 0x49690148, 0x2F6A0140,
+    0x57610140, 0x360E0000, 0x31620148, 0x57020000,
+    0x4B32FFFE, 0x0E0A0000, 0x17680154, 0x50620144,
+    0x010C0000, 0x68600150, 0x40208200, 0x0E800D6C,
+    0x6F6A0140, 0x09690148, 0x3968014C, 0x71620148,
+    0x17610140, 0x7C30FFFE, 0x4E0A0000, 0x17680154,
+    0x10620144, 0x410C0000, 0x68600150, 0x00208200,
+    0x4E800D6C, 0x32635F4E, 0x0A6B5F42, 0x7A6A5F46,
+    0x9C200008, 0xCD210000, 0xC5330002, 0xA9D0098A,
+    0xD4038000, 0x8B32FFFE, 0xBE33FFFF, 0xD70EC000,
+    0xC6230995, 0x94800327, 0xB19702AF, 0xFA6A5F46,
+    0x909702A3, 0xFA6A5F46, 0xD09702A3, 0xBA6A5F46,
+    0xD09702A3, 0xBA6A5F46, 0x909702A3, 0xFA6A5F46,
+    0x909702A3, 0xDF695F48, 0xFA6A5F46, 0x8C350001,
+    0xA5C809A8, 0xF6200028, 0xD9970354, 0xAC685F4A,
+    0xF9695F4C, 0x8B32FFFE, 0x8D048000, 0xE6C409A2,
+    0x0F2D0001, 0x60615F4C, 0x75605F4A, 0x0520FFFF,
+    0x4D210000, 0x3A6A5F46, 0x242309A9, 0x54800327,
+    0x52970644, 0x3A6A5F46, 0x32200010, 0x4D210000,
+    0x2B6B5F4E, 0x54800327, 0x4320FFFC, 0x39970365,
+    0x61361F00, 0x32C801F6, 0x31320008, 0x79620138,
+    0x3F2A0011, 0x53C401F6, 0x7797037A, 0x316B0130,
+    0x36010000, 0x5235FFFE, 0x57C801F4, 0x1808C000,
+    0x56C009BE, 0x2FCC01F4, 0x096B5F44, 0x682E0002,
+    0x23625F46, 0x7E2F0002, 0x50635F44, 0x3E33FFFF,
+    0x4B32FFFE, 0x170EC000, 0x0B32FFFE, 0x74970385,
+    0x57680138, 0x3E695F44, 0x01030000, 0x652B0003,
+    0x26C409CE, 0x5D200003, 0x7C2C0003, 0x2A072000,
+    0x793B0000, 0x0ECC01F8, 0x1B695F46, 0x642E0010,
+    0x35034000, 0x6C31FFFD, 0x4E09C000, 0x020E4000,
+    0x042A0800, 0x57C401F8, 0x5797029D, 0x1B200000,
+    0x6A210120, 0x0A6B5F42, 0x3A6A5F46, 0x43330001,
+    0xACD009E3, 0xED2309E4, 0xD4800327, 0xB19702AF,
+    0xCC970BA4, 0xBA6A5F46, 0xB6200028, 0xCD210000,
+    0xD7970327, 0x969702A0, 0xBE695F44, 0xCD685F46,
+    0x8931FFFF, 0xD70D0000, 0xD0610124, 0x9F30FFFF,
+    0xD70D0000, 0xB6610120, 0xA6970CCB, 0xE0690134,
+    0x8E6A0120, 0xCC61B010, 0xEB2E0068, 0x8462B000,
+    0x8362B008, 0xF8208808, 0xFB60B01C, 0xBF2300A6,
+    0xEF940CD0, 0xB069B024, 0x8E390000, 0xC6D00A0A,
+    0x09690124, 0x61208400, 0x4A2D0068, 0x0361B004,
+    0x7B60B01C, 0x3F2300A6, 0x2F940CD0, 0x5669B020,
+    0x72310002, 0x05D00A0C, 0x09970CD8, 0x558001FC,
+    0x09970CD8, 0x4D685F46, 0x7E695F44, 0x0E6A0120,
+    0x46600124, 0x170D0000, 0x31610128, 0x46690130,
+    0x176B0134, 0x7C30FFFE, 0x760E0000, 0x3662012C,
+    0x28630130, 0x79610134, 0x6C220000, 0x09625F3C,
+    0x6920E000, 0x39970210, 0x14680164, 0x67690150,
+    0x98380000, 0xE0D00E47, 0xF66B0154, 0x896A0144,
+    0xF968014C, 0x98610154, 0xB82F0001, 0xC9630150,
+    0xCE690140, 0x9762014C, 0x81600140, 0xD4004000,
+    0x820D8000, 0xD0610148, 0xE832FFFF, 0xAC088000,
+    0xE7600144, 0x80208200, 0x8D970D6C, 0xF5680168,
+    0xB66B0154, 0xD8380000, 0xE0D00E47, 0x8E6A014C,
+    0x89690148, 0xC9630150, 0xF1620148, 0xBA098000,
+    0xD7610140, 0x820D8000, 0xA832FFFF, 0xC20D8000,
+    0xB661014C, 0xDB20F000, 0xCD970D6C, 0x9F680148,
+    0xEF69014C, 0xAF6A0140, 0xBA230000, 0xC6630144,
+    0xE060014C, 0x970D0000, 0x90610148, 0xF60E0000,
+    0xB6620140, 0xED208001, 0xCD970D6C, 0xA86A0148,
+    0xF968014C, 0x8E690140, 0xB66B0154, 0xF6620140,
+    0xB60E0000, 0xDF30FFFF, 0xF60E0000, 0xB1620148,
+    0xAF090000, 0xF1610144, 0xFE33FFFF, 0x89630150,
+    0xE7208010, 0x8D970D6C, 0x82690164, 0xF968014C,
+    0x0E390000, 0x60D00E47, 0x4E690140, 0x286A0148,
+    0x506B0150, 0x10610148, 0x36620140, 0x782F0001,
+    0x49630150, 0x2F090000, 0x31610144, 0x6D208001,
+    0x0D970D6C, 0x466A0150, 0x766B0154, 0x3968014C,
+    0x49690148, 0x170EC000, 0x1F620150, 0x600F0000,
+    0x1D33FFFE, 0x7E635F5C, 0x5F6B0144, 0x17610140,
+    0x180B0000, 0x67630148, 0x7C30FFFE, 0x180B0000,
+    0x46630144, 0x00208200, 0x0D970D6C, 0x41970D7E,
+    0xA3690168, 0xF16A5F5C, 0xCE390000, 0xA0D00E47,
+    0xE8970E5E, 0xB5200018, 0xAF800E66, 0xE020FFFD,
+    0xF9970365, 0xA1361F00, 0xB2C801F6, 0xF1320008,
+    0xB9620138, 0xFF2A0011, 0xD3C401F6, 0xB797037A,
+    0xF16B0130, 0xB6010000, 0x9235FFFE, 0xD7C801F4,
+    0x9808C000, 0xDBC00A97, 0xEFCC01F4, 0x896B5F44,
+    0xA82E0002, 0xE3625F46, 0xFE2F0002, 0x90635F44,
+    0xC100C000, 0xBE33FFFF, 0xA00F0000, 0xCB32FFFE,
+    0x170EC000, 0x4B32FFFE, 0x74970385, 0x17680138,
+    0x7E695F44, 0x01030000, 0x252B0003, 0x64C40AA9,
+    0x5D200003, 0x3F2C0005, 0x2A072000, 0x793B0000,
+    0x0ECC01F8, 0x5B695F46, 0x642E0010, 0x2A31FFFE,
+    0x420E4000, 0x042A0800, 0x17C401F8, 0x5797029D,
+    0x1B200000, 0x4D210000, 0x5F6A5F44, 0x17970327,
+    0x0C970BA4, 0x7A6A5F46, 0x76200028, 0x0D210000,
+    0x6832FFFF, 0x17970327, 0x169702A0, 0x68685F44,
+    0x1B695F46, 0x57020000, 0x75034000, 0x1F30FFFF,
+    0x4931FFFF, 0x140C8000, 0x06600124, 0x750C4000,
+    0x67600128, 0x200CC000, 0x20600120, 0x66970CCB,
+    0x20690134, 0x496A0128, 0x5F610130, 0x0C61B010,
+    0x6B2E0068, 0x0462B000, 0x0362B008, 0x78208808,
+    0x3B60B01C, 0x7F2300A6, 0x6F940CD0, 0x3069B024,
+    0x0E390000, 0x73D40ADC, 0x49970CD8, 0x168001FA,
+    0x49690124, 0x21208400, 0x0A2D0068, 0x4361B004,
+    0xBB60B01C, 0xFF2300A6, 0xEF940CD0, 0x9669B020,
+    0xF2310002, 0xB0D40ADA, 0x8E6A0120, 0xF8208808,
+    0xEB2E0068, 0x8462B000, 0x8362B008, 0xFB60B01C,
+    0xBF2300A6, 0xEF940CD0, 0xF069B024, 0x8E390000,
+    0xC8D00ADA, 0xA1208400, 0xBB60B01C, 0xFF2300A6,
+    0xAF940CD0, 0xD669B020, 0xF2310002, 0xB0D40ADA,
+    0x89970CD8, 0xCD685F46, 0xEF690120, 0xA7600128,
+    0xD70D0000, 0x9761012C, 0xAC220000, 0xC9625F3C,
+    0x9B20F000, 0xF9970210, 0xDF680148, 0x8E6A014C,
+    0xCE690140, 0xA060014C, 0x90620144, 0xEF090000,
+    0xD7610140, 0xB60E0000, 0xB1620148, 0xED208001,
+    0x8D970D6C, 0xF968014C, 0xC9690148, 0xAF6A0140,
+    0xD7610140, 0xA3018000, 0x970D0000, 0xD0610148,
+    0x9F30FFFF, 0xCE0A0000, 0xD7680154, 0x90620144,
+    0x810C0000, 0xE8600150, 0xC0208200, 0x8D970D6C,
+    0xE06A0154, 0xB968014C, 0xB96B0140, 0xDF620150,
+    0x09690148, 0x67630148, 0x580B0000, 0x06630144,
+    0x5F30FFFF, 0x2F090000, 0x17610140, 0x6D208001,
+    0x4D970D6C, 0x3968014C, 0x2F6A0140, 0x49690148,
+    0x31620148, 0x4E0A0000, 0x57680154, 0x10620144,
+    0x57610140, 0x010C0000, 0x28600150, 0x40208200,
+    0x0D970D6C, 0x7968014C, 0x766B0154, 0x09690148,
+    0x2F6A0140, 0x49630150, 0x57610140, 0x36695F58,
+    0x4E0A0000, 0x1762014C, 0x2F2D0030, 0x664A4000,
+    0x2F2D0006, 0x47494000, 0x673607FC, 0x13320002,
+    0x79620154, 0x14038000, 0x03330001, 0x7ED40B49,
+    0x6E2E0001, 0x282E0002, 0x10620144, 0x6832FFFF,
+    0x31620148, 0x40351F00, 0x50310008, 0x39610158,
+    0x6920E000, 0x0D970D6C, 0x3E680144, 0x4E6A014C,
+    0x0E690140, 0x506B0150, 0x760E0000, 0x1762014C,
+    0x0100C000, 0x43330001, 0x52D40B5C, 0x192C0001,
+    0x5F2C0002, 0x1F30FFFF, 0x170D0000, 0x57610140,
+    0x8D210000, 0xD0610148, 0xE920E000, 0x8D970D6C,
+    0xD06B0150, 0x97680154, 0x8E6A014C, 0xC163014C,
+    0xE8600150, 0x8E600154, 0x81030000, 0xC3330001,
+    0xB4D40B6E, 0xD92C0001, 0xDF2C0002, 0x90620144,
+    0xCE0A0000, 0xB6620140, 0x9F30FFFF, 0xF60E0000,
+    0xB1620148, 0xED208001, 0xCD970D6C, 0x89690148,
+    0x896A0144, 0xD06B0150, 0xD7610140, 0xB1620148,
+    0xC100C000, 0xBE33FFFF, 0x89630150, 0xCE600154,
+    0x01030000, 0x43330001, 0x5BD40B84, 0x192C0001,
+    0x5F2C0002, 0x27600144, 0x00208200, 0x4D970D6C,
+    0x68690144, 0x286A0148, 0x3968014C, 0x766B0154,
+    0x36620140, 0x49630150, 0x4E600154, 0x01030000,
+    0x43330001, 0x12D40B93, 0x192C0001, 0x5F2C0002,
+    0x2060014C, 0x7A0A4000, 0x71620148, 0x3C30FFFE,
+    0x0E0A0000, 0x50620144, 0x40208200, 0x0D970D6C,
+    0x49690148, 0x206A0154, 0x186B014C, 0x57610140,
+    0x9F620150, 0xFE33FFFF, 0xCE09C000, 0xA3800878,
+    0xF2635F4E, 0x8A6B5F42, 0x9C200008, 0xCD210000,
+    0xDF6A5F44, 0x85330002, 0x86D00BB0, 0xEC6B5F46,
+    0xA832FFFF, 0xD70EC000, 0xEF230BC0, 0x94800327,
+    0xF19702AF, 0x9F6A5F44, 0x909702A3, 0xDF6A5F44,
+    0xAC685F4A, 0xF9695F4C, 0xCB32FFFE, 0x8D048000,
+    0xA5C40BBB, 0xCF2D0001, 0xE0615F4C, 0xB5605F4A,
+    0xFA6A5F46, 0x8520FFFF, 0x8D210000, 0xF19702AF,
+    0xBA6A5F46, 0xF2200010, 0xCD210000, 0xAB6B5F4E,
+    0xD4800327, 0x93800200, 0x81030000, 0xC637FFFF,
+    0xEECC0200, 0xAE2C0BCB, 0xB0884000, 0xE9800BCC,
+    0x9A970364, 0xDF20000E, 0xFE97036D, 0xA43C000E,
+    0xEFCC01F4, 0x952001FF, 0xBE97036D, 0xFE605F3C,
+    0xBF340003, 0xEFCC01F4, 0xC92E000E, 0x8B32FFFE,
+    0xB4970385, 0xD797029D, 0xE822000E, 0x9B200000,
+    0xCD210000, 0x97970327, 0xA0685F34, 0xC92101D8,
+    0x1F610106, 0x7D2C0008, 0x73490000, 0x1F2C0002,
+    0x65480000, 0x23615F4A, 0x36605F4C, 0x67685F3C,
+    0x58695F40, 0x3C30FFFE, 0x1B605F3E, 0x6F090000,
+    0x02C40BEE, 0x57605F40, 0x502001A0, 0x2A230BF3,
+    0x6C600104, 0x3D635F36, 0x3D8002D7, 0x72200010,
+    0x2C600104, 0x58800420, 0x529700EB, 0x2A220003,
+    0x2F62B438, 0x56695FCA, 0x42685EDE, 0x2C220000,
+    0x4A61B400, 0x2862B406, 0x18380000, 0x7CC8009C,
+    0x15340080, 0x43C80C05, 0x6F200C16, 0x27230C06,
+    0x5A8000AB, 0x1B605EDE, 0x24685EEC, 0x5E23009C,
+    0x6C220000, 0x0A625EEC, 0x14695EDE, 0x5B6A5EF0,
+    0x18380000, 0x7AC800F3, 0x60198000, 0x176A5F02,
+    0x60198000, 0x396A5EA0, 0x1CD000AB, 0x5E36FDFF,
+    0x20625EA0, 0x5A8000AB, 0x51215EDE, 0x2F220006,
+    0x04970F9D, 0x77215EEC, 0x70510000, 0x30510000,
+    0x70884000, 0x2F220030, 0x2F62B438, 0x70695FCE,
+    0xAC685EF0, 0xEC220000, 0xE061B420, 0x8262B426,
+    0xD8380000, 0x9FC8009D, 0x95340080, 0xEDC80C2B,
+    0xE5200C31, 0xAF230C2C, 0x9A8000AB, 0xF5605EF0,
+    0xA8685EFE, 0xFD23009D, 0xEC220000, 0x86625EFE,
+    0xE1800C0A, 0xBF215EF0, 0xAF220006, 0xC4970F9D,
+    0xBB215EFE, 0xF0510000, 0xF0510000, 0xB0884000,
+    0xAF220300, 0xEF62B438, 0xF0695FCE, 0xA0685F02,
+    0xEC220000, 0x8161B440, 0xA362B446, 0xD8380000,
+    0x99C8009E, 0xD5340080, 0xCEC80C46, 0xAF200C4C,
+    0xCF230C47, 0x9A8000AB, 0xB9605F02, 0xEC685F10,
+    0xFB23009E, 0xAC220000, 0x82625F10, 0xE1800C0A,
+    0xB3215F02, 0xEF220006, 0xC4970F9D, 0xBF215F10,
+    0xF0510000, 0xB0510000, 0xB0884000, 0xC2685EDE,
+    0x91215EDE, 0xD8380000, 0xC0D00C5F, 0xA1205EEC,
+    0xA5518000, 0xE6500000, 0xD8695EA0, 0xA6500000,
+    0xC0390200, 0x81615EA0, 0x918B4000, 0xC100C000,
+    0x2F220006, 0x7F2300A6, 0x67800FC0, 0x2C685EF0,
+    0x7F215EF0, 0x18380000, 0x00D00C5F, 0x6D205EFE,
+    0x66800C58, 0x20685F02, 0x33215F02, 0x58380000,
+    0x00D00C5F, 0x69205F10, 0x66800C58, 0x02685EDE,
+    0x51215EDE, 0x18380000, 0x3FD40C57, 0x588000A6,
+    0x2C685EF0, 0x7F215EF0, 0x58380000, 0x1ED000A6,
+    0x2D205EFE, 0x66800C58, 0x7D605EEC, 0x0E615EEE,
+    0x518B4000, 0x31605EFE, 0x0A615F00, 0x518B4000,
+    0xB5605F10, 0xC6615F12, 0xD18B4000, 0xAC685EF0,
+    0xCD210000, 0x98380000, 0xA5C80C94, 0xEF61B434,
+    0xD16A5FCE, 0xA361B426, 0x8162B420, 0xD5340080,
+    0x85C80C93, 0xD4635E9C, 0xFF215EF0, 0xAF220006,
+    0xC4970F9D, 0x8D6B5E9C, 0x9A8000AB, 0xE3615EF0,
+    0x918B4000, 0xD7620116, 0xC7200C98, 0x9A8000AB,
+    0x86970C6F, 0xCE6A0116, 0xE620B404, 0xAC500011,
+    0xE0500003, 0xA850C400, 0x85500001, 0xC7500180,
+    0x26500000, 0x6462B414, 0x5E2000A6, 0x082100A6,
+    0x7F2300A6, 0x29800C7A, 0x20690102, 0x5B200000,
+    0x45350020, 0x14C801F2, 0x18218000, 0x6F615ED4,
+    0x3D605EDA, 0x7E605EDC, 0x518B4000, 0x36695ED4,
+    0x58380000, 0x3AC800F3, 0x0E390000, 0x49D400EF,
+    0x3D605EDA, 0x518B4000, 0x76695ED4, 0x18380000,
+    0x3AC800F3, 0x4E390000, 0x49D400EF, 0x3E605EDC,
+    0x518B4000, 0x20685ED4, 0x33215ED4, 0x58380000,
+    0x24D400F1, 0x70510000, 0x518B4000, 0x18695ECC,
+    0x63685ED2, 0x0E390000, 0x27D4009B, 0x58380000,
+    0x5CC8009B, 0x3E23009B, 0x1A8000AB, 0x5D215ECC,
+    0x25518000, 0x5B200000, 0x7A605ED2, 0x118B4000,
+    0x58695ECC, 0x3A605ED2, 0x0E390000, 0x58695EA0,
+    0x09D400EF, 0x49390008, 0x41615EA0, 0x118B4000,
+    0x396A5EA0, 0x4E685ECC, 0x5D215ECC, 0x1736FFF7,
+    0x60625EA0, 0x18380000, 0x24D400F1, 0x70510000,
+    0x918B4000, 0xC2685F52, 0xD8218000, 0xB6144000,
+    0xE6CC00A0, 0x8D615F52, 0xBC2300A0, 0xEC200CE9,
+    0xDA8000AB, 0xB4200400, 0x9360B144, 0xC3210200,
+    0x8A68B144, 0xDE34000F, 0xF5190000, 0x8561B144,
+    0xE3645F52, 0xB6010000, 0x90310008, 0xE839A0C8,
+    0xB04B4000, 0xE72D002C, 0xC7494000, 0x97020000,
+    0x83330001, 0xD0377F00, 0xC963010A, 0xB0320003,
+    0xCD625F68, 0x97020000, 0x8832FFF8, 0xF83A4001,
+    0xA8625F6A, 0xD7020000, 0xE832FFFF, 0x9D2E0D06,
+    0xE2230D1A, 0x878A4000, 0xAA205F7A, 0xD18B4000,
+    0xC9205F82, 0x918B4000, 0x8E205F8A, 0xD18B4000,
+    0xA0205F92, 0xD18B4000, 0xE7205F9A, 0x918B4000,
+    0xE3205FA2, 0x918B4000, 0xA4205FAA, 0xD18B4000,
+    0x8A205FB2, 0xD18B4000, 0xCD205FBA, 0x918B4000,
+    0x82205FC2, 0xD18B4000, 0xDC605F6C, 0xB3490000,
+    0xDF2C0002, 0x844B0000, 0x9F2C0002, 0xD24A0000,
+    0x1F2C0002, 0x65480000, 0x6F615F58, 0x1C635F56,
+    0x6B625F5A, 0x1F605F5C, 0x27970E26, 0x716A5F5C,
+    0x536B010C, 0x2F3A0000, 0x0BC80D36, 0x6C213000,
+    0x3A098000, 0x6C0B4000, 0x5861010E, 0x32C00D31,
+    0x7ECC0E45, 0x05685F5A, 0x29230D36, 0x79635F54,
+    0x026B5F68, 0x66800E2B, 0x6769010A, 0x056B5F56,
+    0x10310008, 0x4AC80D67, 0x576A5F58, 0x22390080,
+    0x4B2E0035, 0x07458000, 0x01970D7E, 0x42685F52,
+    0x24230D43, 0x4B341000, 0x59CC102C, 0x1D2000A0,
+    0x40645F53, 0x36695F58, 0x1E970273, 0x4169010E,
+    0x4D223000, 0x3A0A4000, 0x2CC80D63, 0x54680108,
+    0x32620114, 0x58380000, 0x69C80D50, 0x00970C95,
+    0x45970C69, 0x0169010E, 0x2D20B444, 0x6C500011,
+    0x05500001, 0x6850C400, 0x45500001, 0x3135FFFF,
+    0x2A410000, 0x6B6A0114, 0x5F2C0002, 0x26500000,
+    0x6F62B454, 0x0A200D61, 0x1C210D61, 0x7F2300A6,
+    0xAF800C80, 0xFA203000, 0xCE60010E, 0x8D210000,
+    0xDB610108, 0x8D615F52, 0x988000A6, 0xEC220000,
+    0xDB62015E, 0x918B4000, 0xAE210001, 0xFA61015E,
+    0x8960015C, 0xDC635F56, 0xC9970E08, 0xA36B5F52,
+    0xC5685F6C, 0xBF37000F, 0xB43B0100, 0xF263B144,
+    0xB2695F56, 0xDF2C0002, 0xEA410000, 0x93695F5A,
+    0x9F2C0002, 0xEA410000, 0xD0695F5C, 0x9F2C0002,
+    0xEA410000, 0xA5800D47, 0x82685F52, 0xFA69B140,
+    0x3C30FFFE, 0x53D0038F, 0x79635F54, 0x24300002,
+    0x41030000, 0x1E34000F, 0x3E3CFFFF, 0x79228000,
+    0x4D120000, 0x181D8000, 0x2361B140, 0x796A5EA0,
+    0x38CC0D8F, 0x7636FFFB, 0x60625EA0, 0x2A3B2000,
+    0x63685F32, 0x3A635F52, 0x0D344000, 0x6AC80D99,
+    0x05685F36, 0x599700AB, 0x41685F54, 0x3F2300A6,
+    0x1A8000AB, 0x42685F52, 0x7A69B140, 0x2F238000,
+    0x5E34000F, 0x17020000, 0x093EFFFF, 0x4E138000,
+    0x9419C000, 0xE361B140, 0xFF30FFF8, 0x9438A084,
+    0xCC500020, 0xBD680118, 0x97695F54, 0xC218C000,
+    0xE4600118, 0xBA1CC000, 0xB8CC0DE3, 0xF161011E,
+    0xA3685F68, 0xE363011C, 0xC160011A, 0x85970C69,
+    0xF96B011A, 0xAD20B444, 0x8E500041, 0xC5500001,
+    0x87500180, 0xE6500000, 0xF602C000, 0x9336FF00,
+    0x8162B44C, 0xDB3700FF, 0xF263B44E, 0xBF222000,
+    0xEF62B454, 0x9F6B011E, 0x9B200000, 0xE760011E,
+    0xB93B0000, 0xD2CC0DC3, 0xFF2300A6, 0xAC200DC6,
+    0xFA210DC6, 0xAF800C80, 0x9B68011C, 0xFA69B140,
+    0xCA6A0118, 0x8D1D0000, 0xA361B140, 0xEC1E0000,
+    0x93620118, 0xE2C80DDF, 0xDB200000, 0xAE210001,
+    0xD4038000, 0x97174000, 0xBECC0DD6, 0xD92C0001,
+    0x8931FFFF, 0xC0800DD0, 0xD461011C, 0x87300003,
+    0xB5695F32, 0xC160011A, 0xDB354000, 0xAAC80DAF,
+    0xE9200DAF, 0xA46B5F36, 0x9A8000AB, 0xE3685F32,
+    0x13695F36, 0x4D344000, 0x5DC800A6, 0x26894000,
+    0x6F3A0000, 0x10C8038F, 0x3D635F36, 0x4D6B5F4A,
+    0x6C600104, 0x1F610106, 0x2C625F3E, 0x71635F48,
+    0x27970C63, 0x75680104, 0x676A0106, 0x286B5F48,
+    0x7160B428, 0x1E21B42A, 0x30510000, 0x4100C000,
+    0x2434FF00, 0x541A0000, 0x6062B42C, 0x1B3700FF,
+    0x1363B42E, 0x756A5F3E, 0x73200041, 0x1060B424,
+    0x4E62B434, 0x32210DEC, 0x3F2300A6, 0x6B940C7D,
+    0xA46B5F36, 0xD18B4000, 0xFD635F36, 0xBC200120,
+    0xCD210000, 0x86220020, 0x8E6B5F4C, 0xC4800DE8,
+    0xF9635F54, 0xA76B5F6A, 0x9D200140, 0xCD210000,
+    0x86220020, 0xFD605F60, 0xCE615F62, 0x89625F66,
+    0xDB635F5E, 0x85970C69, 0xA4685F60, 0xF66A5F62,
+    0x826B5F5E, 0xD060B448, 0xFF21B44A, 0xB0510000,
+    0x8100C000, 0xE434FF00, 0xD41A0000, 0x8162B44C,
+    0xDB3700FF, 0xB263B44E, 0x906A5F66, 0xF3200041,
+    0x3160B444, 0x6F62B454, 0x46200E43, 0x17210E11,
+    0x7F2300A6, 0x2F800C80, 0x39635F54, 0x5B200000,
+    0x4B210140, 0x2722002C, 0x276B5F6A, 0x7D605F60,
+    0x0E615F62, 0x49625F66, 0x5B635F5E, 0x05970C69,
+    0x546A5F5E, 0x24685F60, 0x17695F62, 0x54038000,
+    0x0537FF00, 0x4218C000, 0x5060B448, 0x0D3600FF,
+    0x0262B44A, 0x6061B44C, 0x5B200000, 0x1360B44E,
+    0x506A5F66, 0x11200011, 0x3160B444, 0x6F62B454,
+    0x10210E2F, 0x7F2300A6, 0x4D940C80, 0x206B5F54,
+    0x518B4000, 0x25210041, 0x2F800D3A, 0x44210021,
+    0x6F800D3A, 0x176A5F58, 0x02690164, 0x602E0028,
+    0x0E390000, 0x4BD00E5A, 0x6F090000, 0x2A31FFFE,
+    0x75680168, 0x3F418000, 0x3734001F, 0x682E0002,
+    0x29408000, 0x75008000, 0x5F2C0002, 0x26500000,
+    0x26500000, 0x518B4000, 0x4E208000, 0x29408000,
+    0x5B200000, 0x29800E53, 0x20685F58, 0x4D210000,
+    0x972C0028, 0xE6500000, 0xE6500000, 0xA6500000,
+    0xEA410000, 0x918B4000, 0xAE230D3E, 0xE73607FC,
+    0xD0C8038F, 0xB9635F54, 0x816B5F58, 0xC9625F66,
+    0xA00CC000, 0xC44B0000, 0xDF2C0002, 0xA5480000,
+    0xF9635F62, 0xB66B010E, 0x9B605F64, 0xF60DC000,
+    0x9B610108, 0xE4970C53, 0xC1685F62, 0x94695F64,
+    0xBD60B40C, 0xCE61B40E, 0xD4680108, 0x906A5F66,
+    0xF421B40A, 0x9B60B408, 0xB0510000, 0xD4200081,
+    0x3A60B404, 0x6462B414, 0x41685F54, 0x10210E75,
+    0x7F2300A6, 0x29800C7A, 0x36695F6E, 0x4E208000,
+    0x54150000, 0x25C80E8B, 0x118B4000, 0x796A5EA0,
+    0x39605F6E, 0x6D200E91, 0x7536FFFD, 0x20625EA0,
+    0x5A8000AB, 0x2A685FDC, 0x36695F6E, 0x58380000,
+    0x0AC80EF4, 0x54605F70, 0x712C0040, 0x33490000,
+    0x17655F6E, 0x5C65B112, 0x6F31FFFB, 0x312D4010,
+    0x664A4000, 0x2F6BB110, 0x092D0002, 0x6F0AC000,
+    0x9BC00EE8, 0xF04B4000, 0xD62DFFF6, 0xB93B0000,
+    0xF7D40EAD, 0x8D685F70, 0xA02D0012, 0xE64A4000,
+    0xD42C0042, 0x844B0000, 0xB82DFFEE, 0xEF1F8000,
+    0x9FCC0EEA, 0xD4004000, 0xFB215F72, 0x8F970FDD,
+    0xFE695F72, 0xB92C0006, 0xA9350003, 0xDACC0EEF,
+    0xBB215F72, 0xF422FFFC, 0xE1970FF3, 0x8D685F70,
+    0xB9215FDC, 0xE0970F5B, 0xE6971027, 0xA4970C53,
+    0xEC6B5F70, 0xA8685F72, 0xBD695F74, 0xD522B40A,
+    0xBA63B408, 0xD1520000, 0xFD60B40C, 0x8E61B40E,
+    0xD4200081, 0xBA60B404, 0x90200040, 0xD360B414,
+    0xD0210EBA, 0xBF2300A6, 0x8B940C7A, 0xE0685F6E,
+    0xBC695FEA, 0xFA3400FF, 0xF930FFFB, 0x852C401A,
+    0xC44B0000, 0x8F2D0001, 0xB82F0001, 0xDD430000,
+    0x802CFFF6, 0xD24A0000, 0xF92C0006, 0x844B0000,
+    0xA5615FEA, 0xF82F0001, 0xEF0AC000, 0xA5C40EDD,
+    0xFA230000, 0x9D430000, 0x976A5F6E, 0xCD685F70,
+    0x0D3600FF, 0x5D3A1000, 0x4A62B130, 0x06970F33,
+    0x4E208000, 0x39605F6E, 0x0C230E91, 0x7C800115,
+    0x66210088, 0x34655F6F, 0x0D685F70, 0x76695F6E,
+    0x3E2C0038, 0x65480000, 0x4E800E93, 0x3F9700F5,
+    0x4D685F70, 0x39215FDC, 0x21230EE3, 0x63800F5B,
+    0x396A5EA0, 0x5E350800, 0x6F615F6E, 0x1DC800A6,
+    0x0A3A0002, 0x60625EA0, 0x588000A6, 0x2B68B148,
+    0x62300001, 0x20D00F04, 0x21300007, 0x62D00F09,
+    0x06300008, 0x7E3CFFFF, 0x4A64B148, 0x3F80009F,
+    0x7A230000, 0x1363B148, 0x3C635FF2, 0x59635FF0,
+    0x6D800EFE, 0x07710048, 0x29710149, 0x5471804B,
+    0x01800F0B, 0x40685FFC, 0x736AB1F8, 0x2434FF00,
+    0x46300008, 0x192C0001, 0x21361F00, 0x71320008,
+    0x0E0A0000, 0x41C000F9, 0x7F225E90, 0x3930FFFB,
+    0x0E2C4000, 0x4E0A0000, 0x63C000F3, 0x37605FD2,
+    0x43625FD4, 0x122A000F, 0x0EC000ED, 0x518B4000,
+    0x88685FD6, 0xFB695FD4, 0xD8380000, 0x8FC80F27,
+    0xF3490000, 0x87615FD6, 0x918B4000, 0xF9290044,
+    0xD1C00F2F, 0xAE685FD2, 0xA2615FD4, 0xF6010000,
+    0x812D0044, 0xE1615FD2, 0xD18B4000, 0x9B1C0000,
+    0xF7605FD2, 0xB4605FD4, 0x918B4000, 0xDE695FD6,
+    0x98380000, 0xFAC800F3, 0xEA410000, 0x91605FD6,
+    0x918B4000, 0xCE390000, 0xD7C800ED, 0xA64A4000,
+    0xD8380000, 0xBAC800F3, 0x88404000, 0xEF3A0000,
+    0xAEC80F47, 0xDB2C003A, 0xCB420000, 0x892E0038,
+    0xC32CFFC6, 0xA9408000, 0x918B4000, 0xD12DFFFE,
+    0xC8404000, 0x918B4000, 0x8E390000, 0xD7C800ED,
+    0xA64A4000, 0xD8380000, 0xFAC800F3, 0x88404000,
+    0xEF3A0000, 0xA0C80F58, 0xBE2C0038, 0xCB420000,
+    0xAC2E003A, 0xC72CFFC8, 0xE9408000, 0x918B4000,
+    0x892D0002, 0xC8404000, 0xD18B4000, 0x8E390000,
+    0xD7C800ED, 0x98380000, 0xBAC800F3, 0xF6635E96,
+    0x1B2C003A, 0x444B0000, 0x472CFFFE, 0x124A0000,
+    0x793B0000, 0x20C80F6E, 0x2F3A0000, 0x4CC80F7B,
+    0x5F2F0038, 0x2A42C000, 0x2C2E003A, 0x662FFFC8,
+    0x08438000, 0x4B800F76, 0x7F424000, 0x2F3A0000,
+    0x6BC80F74, 0x2C2E003A, 0x08438000, 0x4B800F76,
+    0x092D0002, 0x7F424000, 0x66500000, 0x26500000,
+    0x2F6B5E96, 0x662CFFC4, 0x518B4000, 0x092D0002,
+    0x7F424000, 0x1F2F0038, 0x2A42C000, 0x4B800F76,
+    0x95320001, 0xC5367FFF, 0xC6C80F93, 0xB22A0008,
+    0xD7C00F8F, 0xA6500000, 0xA6500000, 0xE6500000,
+    0xE6500000, 0xA6500000, 0xA6500000, 0xE6500000,
+    0xA6500000, 0xC6C80F93, 0xEA800F83, 0x93260008,
+    0xE6500000, 0x932EFFFF, 0xB8CC0F90, 0xD18B4000,
+    0x93635E94, 0xC4970F9D, 0xCA6B5E94, 0x9A8000AB,
+    0x93635E94, 0xC4970F9D, 0xC1030000, 0xAB685E94,
+    0xDA8000AB, 0x91484000, 0xA7615E92, 0xD4605E90,
+    0x06300008, 0x55D40FBE, 0x76635E96, 0x1634007F,
+    0x5F30FFFF, 0x092D0002, 0x170D0000, 0x704B4000,
+    0x62300001, 0x192C0001, 0x1B695E90, 0x6C1E0000,
+    0x3FCC0FAE, 0x5B200000, 0x63024000, 0x1B368000,
+    0x4035007F, 0x0D1D0000, 0x3E695E92, 0x4BC80FBC,
+    0x31320008, 0x541A0000, 0x4F2D0001, 0x07464000,
+    0x0100C000, 0x6F6B5E96, 0x58380000, 0x118B4000,
+    0x7F424000, 0x28800FB8, 0x1B1C0000, 0x518B4000,
+    0x14605E90, 0x51484000, 0x45625E94, 0x06300008,
+    0x71D40FDB, 0x17020000, 0x06300008, 0x5634007F,
+    0x6136007F, 0x2C1E0000, 0x17C800ED, 0x5F30FFFF,
+    0x3A6A5E90, 0x67615E92, 0x492D0002, 0x170D0000,
+    0x7F424000, 0x1C6A5E94, 0x3E695E92, 0x62300001,
+    0x192C0001, 0x6C1E0000, 0x74CC0FD8, 0x1B200000,
+    0x34380080, 0x70444000, 0x518B4000, 0x1B200000,
+    0x46800FCC, 0x36635E96, 0x044B0000, 0x5F2C0002,
+    0xA9434000, 0xD24A0000, 0xC92D0002, 0xBF424000,
+    0xD71B8000, 0x9F2C0002, 0x924A0000, 0xC92D0002,
+    0xFF424000, 0x971B8000, 0x9F2C0002, 0xD24A0000,
+    0x892D0002, 0xFF424000, 0xF51AC000, 0xAF6B5E96,
+    0xDF2C0002, 0x892D0002, 0x918B4000, 0xD4605E90,
+    0xA7615E92, 0xF6635E96, 0xF3490000, 0x940C8000,
+    0xA5480000, 0xCE390000, 0xE1C8101A, 0xA1340FFC,
+    0xCFC81002, 0xAA280041, 0x96C01002, 0xCB240041,
+    0xAA072000, 0xCF801007, 0xCC31FFFA, 0xA3024000,
+    0xF436FFC0, 0xB5034000, 0xBC37003F, 0xFE695E92,
+    0xD1484000, 0x8D048000, 0x88404000, 0xC92D0002,
+    0x91484000, 0xD604C400, 0xC8404000, 0x80C4101A,
+    0xC92D0002, 0x91484000, 0xAC220000, 0xE2048400,
+    0x88404000, 0xC0C4101A, 0xC92D0002, 0x91484000,
+    0xA2048400, 0xC8404000, 0xEF6B5E96, 0x8D685E90,
+    0xD18B4000, 0x8A685F14, 0x99215F14, 0xD8380000,
+    0x05D01023, 0x65518000, 0x518B4000, 0x0100C000,
+    0x49220002, 0x3F2300A6, 0x27800FC0, 0x4A685F14,
+    0x5D215F1A, 0x18380000, 0x05D01023, 0x518B4000,
+    0x0A685F14, 0x59215F14, 0x58380000, 0x24D400F1,
+    0x55340080, 0x0FC81034, 0x09220002, 0x42800F98,
+    0x30510000, 0x4E685F1A, 0x54635E9C, 0x18380000,
+    0x33CC103A, 0x518B4000, 0x5D215F1A, 0x09220002,
+    0x60970F94, 0x0D6B5E9C, 0x29801035, 0x60000000,
+    0x20000000
+};
+
+// Align to PKA_BUFFER_RAM_SIZE.  This is greater than the actual buffer
+// length so that the image is zero padded.
+static const uint32_t fw1_farm_img_data_buf[2048] =
+{
+    0x267001C9, 0x132040FA, 0x26502421, 0x032040D0,
+    0x295046C7, 0x0D500000, 0x258C0200, 0x0F70AAC9,
+    0x3B7000C8, 0x2D70001D, 0x2670001F, 0x296A4010,
+    0x086B4014, 0x39621FF8, 0x16631FF4, 0x15684000,
+    0x34694004, 0x1E601FF6, 0x3F611FF2, 0x346A4008,
+    0x156B400C, 0x32621FFA, 0x1B631FF0, 0x219700BB,
+    0x1E684034, 0x2170001E, 0x3A34003F, 0x281A0000,
+    0x3F621FFE, 0x0628000B, 0x20C4004A, 0x1124002C,
+    0x21884000, 0x2980004A, 0x30800033, 0x22800048,
+    0x3480003E, 0x2980004A, 0x2C800040, 0x2C80002C,
+    0x3980003A, 0x27800042, 0x21800044, 0x2A800046,
+    0x276A4018, 0x34621FFC, 0x339701D9, 0x09300002,
+    0x39D00063, 0x3930FFFE, 0x36800059, 0x276A4018,
+    0x34621FFC, 0x2A97025F, 0x09300002, 0x39D00063,
+    0x3930FFFE, 0x34800064, 0x2E970327, 0x268C0400,
+    0x16614018, 0x36800059, 0x2F970733, 0x36800059,
+    0x2A9706EF, 0x36800059, 0x29970735, 0x36800059,
+    0x319706F1, 0x36800059, 0x3D970422, 0x36800059,
+    0x27970767, 0x36800059, 0x3B7000C8, 0x24200021,
+    0x358C5000, 0x26800073, 0x2B707FC8, 0x08702084,
+    0x2D70001D, 0x36200000, 0x2D010000, 0x1E220001,
+    0x2F970085, 0x01684084, 0x26340020, 0x0ECC0055,
+    0x3920000F, 0x238C0100, 0x09300002, 0x39D00063,
+    0x1B601FFC, 0x2A681FF0, 0x246A4014, 0x2D010000,
+    0x2460400C, 0x2F970085, 0x29681FFC, 0x3930FFFE,
+    0x036A1FF6, 0x276B1FF8, 0x08624000, 0x37634010,
+    0x0D6A1FFE, 0x3F9700C3, 0x0E6A1FF2, 0x246B1FF4,
+    0x05624004, 0x3A634014, 0x006A1FFA, 0x35230000,
+    0x06624008, 0x358C5000, 0x3463401C, 0x106440C9,
+    0x3C800006, 0x376B1FE4, 0x228B4000, 0x3C6B1FE6,
+    0x228B4000, 0x3F8C0480, 0x24BC004E, 0x1B61401C,
+    0x228B4000, 0x2D010000, 0x3930FFFE, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x09300002,
+    0x202A0002, 0x0B614000, 0x1B624010, 0x29604008,
+    0x1D218808, 0x23800079, 0x0B631FEC, 0x166B4000,
+    0x086A1FF4, 0x27604000, 0x06614004, 0x2A634008,
+    0x1B624010, 0x16624014, 0x37218001, 0x25970079,
+    0x35068000, 0x186B4008, 0x0D691FF2, 0x24634000,
+    0x06614004, 0x29604008, 0x1B624010, 0x2A320001,
+    0x262EFFFF, 0x36058000, 0x1531FFFE, 0x214B4000,
+    0x20250002, 0x0E494000, 0x2819C000, 0x07CC00A5,
+    0x16624014, 0x2C218200, 0x25970079, 0x396B1FEC,
+    0x228B4000, 0x37694008, 0x268C0400, 0x0D684024,
+    0x04140000, 0x18D400B0, 0x36200000, 0x228B4000,
+    0x00240001, 0x1A084000, 0x228B4000, 0x13684030,
+    0x37380001, 0x21604030, 0x228B4000, 0x13684030,
+    0x0834FFFE, 0x21604030, 0x228B4000, 0x386A40C4,
+    0x3F694030, 0x1B360001, 0x1732FFF9, 0x18350001,
+    0x1831FFFA, 0x011A4000, 0x228B4000, 0x07018000,
+    0x28310006, 0x18350001, 0x0D614030, 0x2C320007,
+    0x1B360001, 0x0A6240C4, 0x228B4000, 0x29604008,
+    0x06614004, 0x16624014, 0x37218001, 0x268C0400,
+    0x1B61401C, 0x2A694010, 0x27604000, 0x36064000,
+    0x1B624010, 0x228B4000, 0x29604008, 0x06614004,
+    0x16624014, 0x2D218018, 0x268C0400, 0x1B61401C,
+    0x296A4010, 0x27604000, 0x2F260001, 0x1B624010,
+    0x228B4000, 0x29604008, 0x06614004, 0x16624014,
+    0x2C218200, 0x268C0400, 0x1B61401C, 0x246A4014,
+    0x27604000, 0x1B624010, 0x228B4000, 0x1C2100FF,
+    0x288000EE, 0x1A210000, 0x05631FE4, 0x24611FEC,
+    0x21681FF2, 0x2B6040A0, 0x0B691FF4, 0x27604000,
+    0x29604008, 0x18614010, 0x268C0400, 0x0970081C,
+    0x2470881D, 0x01F000F9, 0x3930FFFE, 0x27490000,
+    0x29310001, 0x3A200003, 0x1DD40075, 0x1231FFFF,
+    0x286540B4, 0x216B1FFE, 0x036A1FF6, 0x3D33FFFF,
+    0x3FD00110, 0x276B1FF8, 0x08624000, 0x06624008,
+    0x37634010, 0x3F8C0480, 0x24BC004E, 0x3C70011F,
+    0x0970081C, 0x2470881D, 0x13F0010E, 0x38800112,
+    0x3F8C0480, 0x24BC004E, 0x196840A0, 0x21694024,
+    0x1F090000, 0x30C801D6, 0x07024000, 0x1D2E0001,
+    0x16624014, 0x1F31FFFB, 0x0E684028, 0x2670001F,
+    0x2F34001F, 0x2E184000, 0x322C0001, 0x2E020000,
+    0x09240008, 0x1334FFE0, 0x08300005, 0x0B691FF4,
+    0x206040A2, 0x2D6040A6, 0x322C0001, 0x1F090000,
+    0x25C40135, 0x356940A0, 0x1C050000, 0x252DFFFF,
+    0x1531FFFE, 0x21510000, 0x21510000, 0x03691FFA,
+    0x1C050000, 0x252DFFFF, 0x1531FFFE, 0x21510000,
+    0x21510000, 0x322C0001, 0x16691FEC, 0x0834FFFE,
+    0x2B3D00FF, 0x19CC013D, 0x27681FF4, 0x0B240003,
+    0x0834FFFE, 0x08601FEC, 0x2B26000C, 0x21621FEA,
+    0x2226005F, 0x35200060, 0x35230000, 0x160B2000,
+    0x252DFFFF, 0x026140AA, 0x1E2D0001, 0x15072000,
+    0x3F6B1FEA, 0x28004000, 0x3530FFFD, 0x1F0AC000,
+    0x35230000, 0x0D631FEA, 0x160B2000, 0x3520000C,
+    0x35230000, 0x29290007, 0x26C40155, 0x2A250007,
+    0x23800156, 0x1B210007, 0x1A084000, 0x2D1B4000,
+    0x33634088, 0x306940AA, 0x3530FFFD, 0x1E2D0001,
+    0x15072000, 0x252A0008, 0x2A621FE8, 0x2B008000,
+    0x1D2E0001, 0x1334FFE0, 0x08300005, 0x322C0001,
+    0x296B1FF0, 0x16691FEC, 0x03601FEE, 0x1A074000,
+    0x24634000, 0x3A33FFFE, 0x0E530000, 0x0E530000,
+    0x0E530000, 0x0E530000, 0x0A330002, 0x2A634008,
+    0x33070000, 0x0B2B0003, 0x09280004, 0x02C0018C,
+    0x322C0001, 0x34604010, 0x3F8C0480, 0x24BC004E,
+    0x3C70011F, 0x2A70001C, 0x2470881D, 0x09F0017B,
+    0x0E691FFE, 0x0D684024, 0x1231FFFF, 0x37D0018B,
+    0x00691FF6, 0x04140000, 0x3CD001D3, 0x1A084000,
+    0x22694028, 0x0335001F, 0x3330FFFB, 0x2E184000,
+    0x36C801D0, 0x322C0001, 0x00601FE2, 0x2670001F,
+    0x2B008000, 0x3D3CFFFF, 0x30218000, 0x19110000,
+    0x3A33FFFE, 0x20340010, 0x21C80197, 0x1641C000,
+    0x0F270002, 0x0E530000, 0x23800199, 0x0E530000,
+    0x1641C000, 0x31681FEE, 0x356940A0, 0x34604010,
+    0x166B4000, 0x3304C000, 0x322C0001, 0x0834FFFE,
+    0x06614004, 0x29604008, 0x0568401C, 0x3F8C0480,
+    0x24BC004E, 0x3C70011F, 0x2A70001C, 0x1B70821D,
+    0x19F001A8, 0x3D340008, 0x30C801BA, 0x0E691FFE,
+    0x0D684024, 0x1231FFFF, 0x36D001BA, 0x00691FF6,
+    0x04140000, 0x3CD001D3, 0x1A084000, 0x22694028,
+    0x3330FFFB, 0x0335001F, 0x2E184000, 0x36C801D0,
+    0x322C0001, 0x00601FE2, 0x2670001F, 0x1B691FE8,
+    0x3E20000E, 0x29310001, 0x1231FFFF, 0x28D001C2,
+    0x092CFFFF, 0x378001BE, 0x39694000, 0x0C2207FA,
+    0x186B4008, 0x096140A8, 0x256340A4, 0x076240AC,
+    0x236040AE, 0x2E7000B2, 0x3F8C0480, 0x24BC004E,
+    0x31700484, 0x24E001CD, 0x31200001, 0x20800075,
+    0x3F200009, 0x2670001F, 0x20800075, 0x3C200005,
+    0x2670001F, 0x20800075, 0x37200007, 0x2670001F,
+    0x20800075, 0x08631FE0, 0x35230000, 0x25671FFF,
+    0x227001C4, 0x229700ED, 0x063C0001, 0x3BC801E2,
+    0x063C0001, 0x3180022B, 0x2F681FFA, 0x266040A4,
+    0x3A8C0180, 0x24BC004E, 0x34700184, 0x34E001E7,
+    0x3B6940A8, 0x126840A2, 0x0B614000, 0x322C0001,
+    0x296B1FF0, 0x34604010, 0x2A634008, 0x3A8C0180,
+    0x24BC004E, 0x2A70001C, 0x2470881D, 0x05691FFC,
+    0x2D3D0000, 0x3DC8022D, 0x252DFFFF, 0x28C8020D,
+    0x28004000, 0x0034FFF0, 0x3420000B, 0x0ACC022B,
+    0x156A1FEC, 0x0200C000, 0x1A048000, 0x266340A8,
+    0x256340A4, 0x3F8C0480, 0x24BC004E, 0x34700184,
+    0x24E00204, 0x256040A8, 0x1A048000, 0x3A8C0180,
+    0x24BC004E, 0x32700284, 0x2CE0020A, 0x252DFFFF,
+    0x17CC0205, 0x2A681FF0, 0x16691FEC, 0x1C050000,
+    0x036A1FF6, 0x316B1FE2, 0x256040A8, 0x0A6140A4,
+    0x076240AC, 0x29681FFC, 0x0C2B0002, 0x092CFFFF,
+    0x206340AE, 0x336040B2, 0x2C8C5080, 0x24BC004E,
+    0x31700484, 0x3EE0021D, 0x06691FF0, 0x3D201FE8,
+    0x096140A8, 0x0A500001, 0x09300002, 0x266040A4,
+    0x36200000, 0x2D6040A6, 0x3A8C0180, 0x24BC004E,
+    0x34700184, 0x35E00229, 0x31200001, 0x3A6B1FE0,
+    0x228B4000, 0x06691FF0, 0x156A1FEC, 0x28004000,
+    0x1A048000, 0x03601FEE, 0x268C0400, 0x2F970085,
+    0x2D010000, 0x268C0400, 0x2C970259, 0x1E691FE2,
+    0x252DFFFF, 0x37C8021E, 0x2C611FE2, 0x3297024D,
+    0x1B360001, 0x0DCC0246, 0x28200078, 0x31681FEE,
+    0x06691FF0, 0x2C970259, 0x2A681FF0, 0x2E230237,
+    0x2D010000, 0x2A800259, 0x2A681FF0, 0x1D691FEE,
+    0x2C970259, 0x31681FEE, 0x2E230237, 0x2D010000,
+    0x2A800259, 0x2C681FF6, 0x252DFFFF, 0x07024000,
+    0x2F36FFF0, 0x21320003, 0x3930FFFE, 0x1F060000,
+    0x0E4A8000, 0x28004000, 0x3C34000F, 0x1A120000,
+    0x228B4000, 0x0A6140A4, 0x256040A8, 0x3A8C0180,
+    0x24BC004E, 0x34700184, 0x228B4000, 0x0E631FE6,
+    0x2B9702A1, 0x239702AF, 0x39681FD6, 0x0E6A1FF2,
+    0x00691FF6, 0x276B1FF8, 0x1F060000, 0x03270001,
+    0x0B37FFFE, 0x1F05C000, 0x296B1FF0, 0x32611FF6,
+    0x3304C000, 0x3C621FF2, 0x1D601FFA, 0x18601FF0,
+    0x268C0400, 0x339701D9, 0x02030000, 0x053F0001,
+    0x1FCC029E, 0x238C0100, 0x166A1FD6, 0x06691FF0,
+    0x28004000, 0x35098000, 0x1A048000, 0x2F970085,
+    0x2D010000, 0x15684000, 0x35098000, 0x35068000,
+    0x2F970085, 0x276B1FF8, 0x00691FF6, 0x03270001,
+    0x0B37FFFE, 0x1C09C000, 0x3A6B1FD6, 0x0E6A1FF2,
+    0x32611FF6, 0x1F0AC000, 0x3C621FF2, 0x268C0400,
+    0x339701D9, 0x326B1FD8, 0x166A1FD6, 0x06691FF0,
+    0x1E631FFA, 0x35098000, 0x34611FF0, 0x02030000,
+    0x053F0001, 0x1FCC029E, 0x238C0100, 0x1A210000,
+    0x3C9702E6, 0x22970312, 0x2A681FF0, 0x2460400C,
+    0x268C0400, 0x31200001, 0x2B800077, 0x37200007,
+    0x2480029E, 0x0B631FEC, 0x0D691FF2, 0x006A1FFA,
+    0x06614004, 0x0B691FF4, 0x2C621FD8, 0x15614014,
+    0x2D3D0000, 0x29C8029F, 0x28004000, 0x0C240002,
+    0x0834FFFE, 0x0B601FD6, 0x228B4000, 0x0B631FEC,
+    0x39681FD6, 0x0D691FF2, 0x086A1FF4, 0x28004000,
+    0x2F970085, 0x399700A9, 0x0F280002, 0x1BC0029F,
+    0x0C240002, 0x39604014, 0x2F9700B3, 0x0B691FF4,
+    0x39681FD6, 0x35054000, 0x056A1FF0, 0x18614010,
+    0x08624000, 0x1F060000, 0x1F060000, 0x23260002,
+    0x06624008, 0x0B62400C, 0x2C218200, 0x25970079,
+    0x226B1FF2, 0x086A1FF4, 0x3304C000, 0x2D010000,
+    0x2F970085, 0x399700A9, 0x0F280002, 0x1BC0029F,
+    0x0C240002, 0x39604014, 0x35068000, 0x1B624010,
+    0x39681FD6, 0x396A400C, 0x186B4008, 0x1F060000,
+    0x2A681FF0, 0x29634004, 0x06624008, 0x27604000,
+    0x2C218200, 0x25970079, 0x166A1FD6, 0x3A69400C,
+    0x2A681FF0, 0x35068000, 0x2F970085, 0x229700B7,
+    0x396B1FEC, 0x228B4000, 0x0B631FEC, 0x2A681FF0,
+    0x1A048000, 0x2460400C, 0x1A048000, 0x0C240002,
+    0x19044000, 0x086A1FF4, 0x0D691FF2, 0x3930FFFE,
+    0x0D500000, 0x0D500000, 0x09300002, 0x2F970085,
+    0x399700A9, 0x39604014, 0x1B684008, 0x156B400C,
+    0x2F260001, 0x06691FF0, 0x03280001, 0x1B624010,
+    0x29604008, 0x06614004, 0x24634000, 0x2C2A0001,
+    0x36058000, 0x1531FFFE, 0x21510000, 0x21510000,
+    0x19078000, 0x3A33FFFE, 0x0E530000, 0x0E530000,
+    0x3B218002, 0x25970079, 0x23260002, 0x1B624010,
+    0x246A4014, 0x03691FFA, 0x1B684008, 0x319700CB,
+    0x396B1FEC, 0x228B4000, 0x0B631FEC, 0x2F9700B3,
+    0x166B4000, 0x1668400C, 0x2763400C, 0x0D691FF2,
+    0x246A4014, 0x219700E1, 0x3A6B1FD6, 0x0D691FF2,
+    0x1668400C, 0x1F05C000, 0x086A1FF4, 0x319700CB,
+    0x2A681FF0, 0x086A1FF4, 0x2D010000, 0x269700D6,
+    0x229700B7, 0x396B1FEC, 0x228B4000, 0x05631FE4,
+    0x2A681FF0, 0x2460400C, 0x08691FF8, 0x29611FDE,
+    0x086A1FF4, 0x21621FDC, 0x350A4000, 0x040E4000,
+    0x0CD40332, 0x07024000, 0x24260003, 0x2736FFFE,
+    0x00601FE2, 0x1A048000, 0x0B601FE0, 0x1A048000,
+    0x35068000, 0x37621FF0, 0x1A048000, 0x0B601FD6,
+    0x1668400C, 0x2897007D, 0x056A1FF0, 0x1668400C,
+    0x1A048000, 0x2897007D, 0x0B6A1FF8, 0x32681FE2,
+    0x296B1FF0, 0x3304C000, 0x00691FF6, 0x2F970085,
+    0x268C0400, 0x0E6B4024, 0x05631FD2, 0x1A378000,
+    0x07CC0415, 0x39681FE0, 0x296B1FF0, 0x3304C000,
+    0x0D691FF2, 0x086A1FF4, 0x2F970085, 0x32681FE2,
+    0x3930FFFE, 0x0A500001, 0x39681FE0, 0x0D691FF2,
+    0x2F970085, 0x3B201FD8, 0x0D500000, 0x0D500000,
+    0x0D691FF2, 0x1531FFFE, 0x0E494000, 0x29310001,
+    0x05D40418, 0x1231FFFF, 0x36200000, 0x00601FD4,
+    0x32230001, 0x1E220001, 0x0200C000, 0x2E148000,
+    0x31C8036D, 0x32681FD4, 0x1A048000, 0x00601FD4,
+    0x1A074000, 0x35054000, 0x35068000, 0x02CC0366,
+    0x32681FE2, 0x296B1FF0, 0x3304C000, 0x1A210000,
+    0x186A1FDE, 0x3397041C, 0x3930FFFE, 0x0B480000,
+    0x1A388000, 0x05300001, 0x24D0037D, 0x2C250001,
+    0x25800379, 0x2D3D0000, 0x35C803AF, 0x268C0400,
+    0x16614018, 0x26218040, 0x25970079, 0x32681FD4,
+    0x1E691FE2, 0x1531FFFE, 0x0E494000, 0x15072000,
+    0x1D210001, 0x0B6B4018, 0x3E3FFFFF, 0x03270001,
+    0x1A11C000, 0x252DFFFF, 0x02164000, 0x326B1FD8,
+    0x268C0400, 0x21694024, 0x2A611FD2, 0x3BC803A7,
+    0x1F1F8000, 0x3AC803A0, 0x2C621FD8, 0x21681FF2,
+    0x0C2107F6, 0x3297041B, 0x1E220001, 0x16624014,
+    0x39681FD6, 0x29604008, 0x37218001, 0x25970079,
+    0x15691FD6, 0x32681FE2, 0x086A1FF4, 0x2F260001,
+    0x3397041C, 0x23218010, 0x25970079, 0x32681FE2,
+    0x1A210000, 0x086A1FF4, 0x2F260001, 0x3397041C,
+    0x26218040, 0x25970079, 0x2C800370, 0x39681FE0,
+    0x296B1FF0, 0x3304C000, 0x2A604004, 0x32681FE2,
+    0x3304C000, 0x27604000, 0x186A1FDE, 0x3F6B1FDC,
+    0x3A634014, 0x1F0AC000, 0x2E0EC000, 0x1AD403BD,
+    0x2D02C000, 0x1B624010, 0x2F218400, 0x25970079,
+    0x18691FD2, 0x1F1C4000, 0x0DCC03CA, 0x1531FFFE,
+    0x22484000, 0x063C0001, 0x122D0002, 0x0E494000,
+    0x2E184000, 0x2DC8040B, 0x268C0400, 0x00684020,
+    0x05300001, 0x30D00415, 0x09300002, 0x22D003D8,
+    0x15684000, 0x34694004, 0x2A604004, 0x0B614000,
+    0x06684010, 0x27694014, 0x39604014, 0x18614010,
+    0x166B4000, 0x2A634008, 0x0E631FD0, 0x25218020,
+    0x25970079, 0x2DD003E1, 0x39681FE0, 0x1E691FE2,
+    0x2A8003E3, 0x32681FE2, 0x15691FE0, 0x086A1FF4,
+    0x2F260001, 0x3397041C, 0x268C0400, 0x226A4024,
+    0x25218020, 0x25970079, 0x3F681FD0, 0x1C0A0000,
+    0x2F260001, 0x15691FE0, 0x296B1FF0, 0x1F05C000,
+    0x1A1D0000, 0x00CC03F8, 0x32681FE2, 0x15691FE0,
+    0x0B601FE0, 0x2C611FE2, 0x37681FDE, 0x0E601FDC,
+    0x2A621FDE, 0x32681FE2, 0x0D691FF2, 0x3297041B,
+    0x296A4010, 0x1A048000, 0x3930FFFE, 0x268C0400,
+    0x084B0000, 0x0D500000, 0x0D500000, 0x023F0000,
+    0x26C80370, 0x23218010, 0x25970079, 0x052CFFFC,
+    0x268C0400, 0x0D500000, 0x2C800370, 0x1E691FE2,
+    0x39681FE0, 0x086A1FF4, 0x2F970085, 0x16624014,
+    0x31200001, 0x1A210000, 0x156B400C, 0x1B631FF0,
+    0x20800075, 0x24200017, 0x1B210007, 0x3D800412,
+    0x3A200003, 0x0621001F, 0x3D800412, 0x086A1FF4,
+    0x1B624010, 0x16624014, 0x27604000, 0x06614004,
+    0x29604008, 0x228B4000, 0x0E631FE6, 0x2C681FF6,
+    0x08691FF8, 0x086A1FF4, 0x1D601FCC, 0x37611FCA,
+    0x39621FF8, 0x24260003, 0x2736FFFE, 0x39621FCE,
+    0x296B1FF0, 0x19078000, 0x19078000, 0x1D631FF6,
+    0x19078000, 0x1B631FF0, 0x2E970327, 0x063C0001,
+    0x28C80437, 0x063C0001, 0x2A800455, 0x2A681FF0,
+    0x0B6A1FCE, 0x19088000, 0x2897007D, 0x06691FF0,
+    0x0B6A1FCE, 0x2B034000, 0x28004000, 0x19078000,
+    0x24634000, 0x19088000, 0x19088000, 0x2097008A,
+    0x06691FF0, 0x0B6A1FCE, 0x28004000, 0x19088000,
+    0x3930FFFE, 0x0A500001, 0x0F280002, 0x09300002,
+    0x19088000, 0x19088000, 0x18601FF0, 0x2097008A,
+    0x03691FCC, 0x066A1FCA, 0x32611FF6, 0x39621FF8,
+    0x31200001, 0x268C0400, 0x2B800077, 0x0D601FD0,
+    0x296A4010, 0x15684000, 0x2C621FD8, 0x08601FDA,
+    0x10691FDC, 0x2A681FF0, 0x07024000, 0x36064000,
+    0x36064000, 0x2897007D, 0x1E6A1FD8, 0x3A681FDA,
+    0x1B624010, 0x27604000, 0x3F681FD0, 0x063C0001,
+    0x09CC0471, 0x216B1FFE, 0x071BC000, 0x25D0046F,
+    0x229706BB, 0x0D601FD0, 0x33800476, 0x379706AD,
+    0x33800476, 0x0D3C0003, 0x08CC0476, 0x36970483,
+    0x31200001, 0x0D601FD0, 0x3F681FD0, 0x35230000,
+    0x2D010000, 0x293D000D, 0x0ACC047D, 0x34230007,
+    0x3C800480, 0x2E3D000C, 0x36C80480, 0x2923001F,
+    0x268C0400, 0x39634018, 0x2B800077, 0x08631FD6,
+    0x37681FB2, 0x03691FFA, 0x086A1FF4, 0x2F970085,
+    0x16624014, 0x2F681FFA, 0x226B1FF2, 0x136A1FDC,
+    0x1D691FB4, 0x1A048000, 0x2A604004, 0x05614008,
+    0x24634000, 0x25218020, 0x25970079, 0x3A681FB6,
+    0x3930FFFE, 0x0A500001, 0x3A6B1FD6, 0x228B4000,
+    0x1A048000, 0x3930FFFE, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x228B4000, 0x086A1FF4,
+    0x1D2E0001, 0x1B624010, 0x0B614000, 0x29604008,
+    0x268C0400, 0x2A70001C, 0x2470881D, 0x36058000,
+    0x1A048000, 0x228B4000, 0x27604000, 0x27681FF4,
+    0x05614008, 0x34604010, 0x268C0400, 0x15624018,
+    0x2E020000, 0x29218080, 0x23800079, 0x08631FD6,
+    0x387000C4, 0x249700EB, 0x246B1FF4, 0x08270003,
+    0x0B37FFFE, 0x0D631FDC, 0x2D010000, 0x2A3D0001,
+    0x238C0100, 0x1ACC0457, 0x3D6A40A2, 0x176840A8,
+    0x2F260001, 0x27970498, 0x21681FF2, 0x086A1FF4,
+    0x27970498, 0x2F260001, 0x2736FFFE, 0x0F6240A2,
+    0x026240A6, 0x3A6B1FD6, 0x228B4000, 0x08631FD6,
+    0x3A6B1FD6, 0x228B4000, 0x08631FD6, 0x136A1FDC,
+    0x06691FF0, 0x3D201FB2, 0x2D230012, 0x35098000,
+    0x36058000, 0x15410000, 0x3E2C0002, 0x0A2FFFFF,
+    0x0FCC04D4, 0x37681FB2, 0x2897007D, 0x136A1FDC,
+    0x3A681FB6, 0x1D32FFFC, 0x2897007D, 0x2E97052B,
+    0x16691FB6, 0x21681FF2, 0x1E220001, 0x2A9704AA,
+    0x1E220001, 0x1B691FB2, 0x3F970530, 0x3A6B1FD6,
+    0x228B4000, 0x08631FD6, 0x3F6B1FDC, 0x0D691FF2,
+    0x1D6A1FD4, 0x1F05C000, 0x2E97051D, 0x15691FBA,
+    0x1E220001, 0x3F970530, 0x106A1FD0, 0x03691FFA,
+    0x2E97051D, 0x216B1FFE, 0x03691FFA, 0x071BC000,
+    0x1ED404FF, 0x3F6B1FDC, 0x036A1FC0, 0x1F05C000,
+    0x1F05C000, 0x2E97051D, 0x34800502, 0x15691FBA,
+    0x2C681FC0, 0x2697049F, 0x13691FD0, 0x34681FBE,
+    0x036A1FC0, 0x286040AC, 0x096140A8, 0x096240A4,
+    0x358C5000, 0x28700384, 0x3A6B1FD6, 0x228B4000,
+    0x136A1FDC, 0x15691FBA, 0x16624014, 0x1632FFFE,
+    0x35098000, 0x0B614000, 0x0A6140A4, 0x16691FB6,
+    0x1D6A1FB8, 0x05614008, 0x0B691FF4, 0x05624004,
+    0x1E2D0001, 0x18614010, 0x228B4000, 0x1B684008,
+    0x2B800527, 0x0B631FEC, 0x0B614000, 0x06624008,
+    0x2B008000, 0x13218800, 0x25970079, 0x086A1FF4,
+    0x27970498, 0x1B684008, 0x396B1FEC, 0x256040A8,
+    0x358C5000, 0x34700184, 0x228B4000, 0x086A1FF4,
+    0x1D691FB4, 0x1B624010, 0x0A6140A4, 0x228B4000,
+    0x28004000, 0x1531FFFE, 0x268C0400, 0x3F424000,
+    0x2B800527, 0x2C8C5080, 0x24BC004E, 0x13204096,
+    0x228B4000, 0x2C8C5080, 0x24BC004E, 0x13204096,
+    0x3E500C63, 0x228B4000, 0x2C681FF6, 0x252DFFFF,
+    0x07024000, 0x2F36FFF0, 0x21320003, 0x3930FFFE,
+    0x1F060000, 0x0E4A8000, 0x28004000, 0x3C34000F,
+    0x1A120000, 0x02624090, 0x228B4000, 0x036A1FC0,
+    0x096140A8, 0x096240A4, 0x238C0100, 0x34700184,
+    0x0E6A1FF2, 0x05624004, 0x086A1FF4, 0x16624014,
+    0x0B614000, 0x05614008, 0x238C0100, 0x20694080,
+    0x18350001, 0x03CC055B, 0x228B4000, 0x1D2E0001,
+    0x1B624010, 0x25218020, 0x23800079, 0x08631FD6,
+    0x16502DE7, 0x3F502084, 0x36970539, 0x13502931,
+    0x35970535, 0x0F6B4080, 0x25370020, 0x0FCC071D,
+    0x13503548, 0x03501CE4, 0x36970539, 0x315024A9,
+    0x35970535, 0x0350A148, 0x0A5035A4, 0x36970539,
+    0x3350252E, 0x35970535, 0x0E502929, 0x145035B0,
+    0x36970539, 0x3F502108, 0x35970535, 0x2B5025A9,
+    0x1D502CA6, 0x36970539, 0x1450288A, 0x35970535,
+    0x2350B4EB, 0x18509525, 0x36970539, 0x37501086,
+    0x35970535, 0x0F502D67, 0x035035AD, 0x36970539,
+    0x1C501991, 0x35970535, 0x0F6B4080, 0x00631FEE,
+    0x235098C4, 0x27509DAF, 0x36970539, 0x1450316C,
+    0x35970535, 0x00509148, 0x1E502CC6, 0x36970539,
+    0x1A50358E, 0x35970535, 0x355099AB, 0x3A6B1FD6,
+    0x228B4000, 0x08631FD6, 0x30700090, 0x3A97050C,
+    0x358C5000, 0x23700080, 0x13204096, 0x3E500C63,
+    0x235024E4, 0x13204096, 0x3E500C63, 0x045030A6,
+    0x35970535, 0x2850B12C, 0x395020EE, 0x36970539,
+    0x0B5028AF, 0x35970535, 0x3D50A90A, 0x3D50AD8C,
+    0x35970535, 0x29503D6B, 0x1850C54A, 0x36970539,
+    0x0F6B4080, 0x00631FEE, 0x23700080, 0x1C50352B,
+    0x35970535, 0x326B1FEE, 0x236A4080, 0x07330006,
+    0x14D405B9, 0x2B320006, 0x27D005DE, 0x3220000D,
+    0x21800457, 0x3E500C63, 0x16502D8B, 0x36970539,
+    0x3450252F, 0x35970535, 0x3950252B, 0x3350210B,
+    0x36970539, 0x1B5018E5, 0x35970535, 0x3E500C63,
+    0x205044D1, 0x36970539, 0x3D502409, 0x35970535,
+    0x0550A531, 0x065018CB, 0x35970535, 0x3E500C63,
+    0x32504409, 0x36970539, 0x2450112C, 0x35970535,
+    0x3650B62D, 0x0D50300C, 0x35970535, 0x3E500C63,
+    0x025035AA, 0x35970535, 0x2550B50D, 0x3B502520,
+    0x35970535, 0x1B501C63, 0x3350140D, 0x35970535,
+    0x3A6B1FD6, 0x228B4000, 0x2E97052B, 0x3F6B1FDC,
+    0x0D691FF2, 0x1D6A1FD4, 0x1F05C000, 0x2E97051D,
+    0x1E691FB8, 0x3F681FD0, 0x2697049F, 0x13691FD0,
+    0x12220002, 0x3F970530, 0x1E691FB8, 0x2C681FC0,
+    0x249704A2, 0x00691FC0, 0x15220003, 0x3F970530,
+    0x3A97050C, 0x358C5000, 0x23700080, 0x13204096,
+    0x3E500C63, 0x3F502084, 0x13204096, 0x3E500C63,
+    0x0B5035CF, 0x35970535, 0x3E500C63, 0x0C502D07,
+    0x36970539, 0x195034AD, 0x35970535, 0x3E500C63,
+    0x325024A5, 0x36970539, 0x165029AE, 0x35970535,
+    0x0F503144, 0x2F502531, 0x36970539, 0x0250194A,
+    0x35970535, 0x295010C8, 0x0E50318C, 0x36970539,
+    0x085028CF, 0x35970535, 0x24502569, 0x195019AD,
+    0x36970539, 0x25501004, 0x35970535, 0x3E50B08C,
+    0x11502D29, 0x36970539, 0x1B5019A6, 0x35970535,
+    0x3E500C63, 0x3450140C, 0x36970539, 0x2750218F,
+    0x35970535, 0x2550AD0B, 0x04502940, 0x35970535,
+    0x3E500C63, 0x0C50300B, 0x36970539, 0x3C5011AB,
+    0x35970535, 0x3250B585, 0x3B502520, 0x35970535,
+    0x3E500C63, 0x0E5035A9, 0x35970535, 0x3350B54D,
+    0x15502C0B, 0x35970535, 0x1B501C63, 0x3350140D,
+    0x35970535, 0x3A6B1FD6, 0x228B4000, 0x08631FD6,
+    0x2E97052B, 0x03691FCC, 0x3F6B1FDC, 0x2F681FFA,
+    0x1E220001, 0x3304C000, 0x2A9704AA, 0x2897051B,
+    0x08691FCE, 0x3F6B1FDC, 0x21681FF2, 0x1E220001,
+    0x3304C000, 0x3304C000, 0x2A9704AA, 0x2897051B,
+    0x30700090, 0x3A97050C, 0x358C5000, 0x13204096,
+    0x3E500C63, 0x0B502A25, 0x13204096, 0x3E500C63,
+    0x2250248F, 0x35970535, 0x0250292A, 0x285020AF,
+    0x36970539, 0x25501004, 0x35970535, 0x00502D04,
+    0x295038AE, 0x36970539, 0x245024E5, 0x35970535,
+    0x1650A088, 0x2A50392E, 0x36970539, 0x19502D4B,
+    0x35970535, 0x3E500C63, 0x0A502924, 0x36970539,
+    0x0F502CEB, 0x35970535, 0x00502DCB, 0x3B5011AA,
+    0x36970539, 0x3F502108, 0x35970535, 0x3E500C63,
+    0x15502C0B, 0x36970539, 0x2A5020C8, 0x35970535,
+    0x2550AD0B, 0x0D502925, 0x35970535, 0x1B501C63,
+    0x3550140B, 0x36970539, 0x185019AA, 0x35970535,
+    0x3A6B1FD6, 0x228B4000, 0x08631FD6, 0x21681FF2,
+    0x10691FDC, 0x086A1FF4, 0x19044000, 0x27604000,
+    0x27970498, 0x21681FF2, 0x35054000, 0x19044000,
+    0x27970498, 0x07024000, 0x39694000, 0x29681FCA,
+    0x2F970085, 0x3A97050C, 0x13204096, 0x268C0400,
+    0x3E500C63, 0x225020C6, 0x36970539, 0x325024A5,
+    0x35970535, 0x3E500C63, 0x0E502D0C, 0x36970539,
+    0x1C502884, 0x35970535, 0x3E500C63, 0x335021A8,
+    0x36970539, 0x00502C2B, 0x35970535, 0x1450296A,
+    0x30502028, 0x35970535, 0x0D50A509, 0x09502944,
+    0x35970535, 0x3E500C63, 0x325024C9, 0x35970535,
+    0x1B50A549, 0x2A502144, 0x36970539, 0x3D502409,
+    0x35970535, 0x358C5000, 0x0F6B4080, 0x3E370008,
+    0x0CCC06AB, 0x2720001B, 0x21800457, 0x3A6B1FD6,
+    0x228B4000, 0x08631FD6, 0x2C681FC0, 0x3930FFFE,
+    0x0A500001, 0x1B204098, 0x1A5000E4, 0x1B204098,
+    0x025004E5, 0x36970539, 0x325008E6, 0x35970535,
+    0x238C0100, 0x3A6B1FD6, 0x228B4000, 0x08631FD6,
+    0x2C681FC0, 0x3930FFFE, 0x358C5000, 0x0A500001,
+    0x1B204098, 0x175018E6, 0x296B1FF0, 0x2C681FF6,
+    0x08691FF8, 0x10631FC4, 0x18601FC6, 0x3C611FC8,
+    0x3F6B1FDC, 0x39681FD6, 0x18631FCA, 0x1D601FCC,
+    0x34681FBE, 0x0B691FF4, 0x2F6B1FC0, 0x1E2D0001,
+    0x3A611FF8, 0x1B631FF0, 0x1E601FF6, 0x358C5000,
+    0x2E970327, 0x226B1FC4, 0x056A1FC6, 0x0E691FC8,
+    0x1B631FF0, 0x31621FF6, 0x3A611FF8, 0x2A6B1FCA,
+    0x006A1FCC, 0x0D631FDC, 0x24621FD6, 0x268C0400,
+    0x02030000, 0x053F0001, 0x1CCC06ED, 0x15691FBA,
+    0x2D97054B, 0x13691FBC, 0x2D97054B, 0x136A1FDC,
+    0x15691FBA, 0x2A681FF0, 0x35068000, 0x2F970085,
+    0x31200001, 0x3A6B1FD6, 0x228B4000, 0x19220000,
+    0x3C8006F3, 0x00220080, 0x3C8006F3, 0x09661FFF,
+    0x0E631FE6, 0x309704B3, 0x249704CE, 0x2E9704CB,
+    0x309704E9, 0x2E97052B, 0x18691FD2, 0x14220004,
+    0x3F970530, 0x08691FCE, 0x3F6B1FDC, 0x21681FF2,
+    0x12220002, 0x3304C000, 0x3304C000, 0x2A9704AA,
+    0x2897051B, 0x3A97050C, 0x1A21889C, 0x0A614092,
+    0x358C5000, 0x23700080, 0x1E691FE2, 0x3797053E,
+    0x13204096, 0x095029E7, 0x035030A7, 0x13204096,
+    0x095029E7, 0x325024A5, 0x35970535, 0x3397055F,
+    0x02194000, 0x3CC80720, 0x3797053E, 0x1B204098,
+    0x035030A7, 0x36970539, 0x325024A5, 0x35970535,
+    0x3C800713, 0x358C5000, 0x29200013, 0x21800457,
+    0x358C5000, 0x236A4080, 0x09360020, 0x04CC0729,
+    0x35970633, 0x358C5000, 0x29970676, 0x31200001,
+    0x21800457, 0x1E6A1FEE, 0x1C6B4090, 0x27320005,
+    0x1A1EC000, 0x1B360001, 0x28C80731, 0x3220000D,
+    0x21800457, 0x3D200002, 0x21800457, 0x0F220040,
+    0x24800737, 0x162200C0, 0x24800737, 0x09661FFF,
+    0x0E631FE6, 0x309704B3, 0x249704CE, 0x2E9704CB,
+    0x166A1FBA, 0x03691FFA, 0x2E97051D, 0x3F6B1FDC,
+    0x03691FFA, 0x0B6A1FCE, 0x1F05C000, 0x2E97051D,
+    0x1B6A1FBE, 0x00691FF6, 0x2E97051D, 0x3F6B1FDC,
+    0x00691FF6, 0x106A1FD0, 0x1F05C000, 0x2E97051D,
+    0x22681FFE, 0x07180000, 0x2CD00756, 0x1B691FB2,
+    0x3F681FBC, 0x249704A2, 0x1B691FB2, 0x2C681FC0,
+    0x249704A2, 0x2B800762, 0x3F6B1FDC, 0x03691FFA,
+    0x106A1FBC, 0x1F05C000, 0x1F05C000, 0x2E97051D,
+    0x3F6B1FDC, 0x00691FF6, 0x036A1FC0, 0x1F05C000,
+    0x1F05C000, 0x2E97051D, 0x39970595, 0x358C5000,
+    0x29970676, 0x31200001, 0x21800457, 0x0C220020,
+    0x29800769, 0x09661FFF, 0x0E631FE6, 0x309704B3,
+    0x249704CE, 0x2E9704CB, 0x309704E9, 0x2E97052B,
+    0x18691FD2, 0x12220002, 0x3F970530, 0x32681FD4,
+    0x18691FD2, 0x27604000, 0x06614004, 0x24681FCE,
+    0x29604008, 0x238C0100, 0x25218020, 0x1B61401C,
+    0x27604000, 0x29604008, 0x12220002, 0x268C0400,
+    0x15624018, 0x26218040, 0x1B61401C, 0x3A97050C,
+    0x1A21889C, 0x0A614092, 0x358C5000, 0x23700080,
+    0x1E691FE2, 0x3797053E, 0x13204096, 0x358C5000,
+    0x2A5020A4, 0x13204096, 0x1F50A4A4, 0x35970535,
+    0x145028E6, 0x1A503108, 0x35970535, 0x358C5000,
+    0x2150ACE6, 0x17503529, 0x0F6B4080, 0x13204096,
+    0x25370020, 0x0FCC071D, 0x1B50C1AC, 0x31502549,
+    0x35970535, 0x3E500C63, 0x3C502168, 0x35970535,
+    0x04502D09, 0x3D5011AC, 0x35970535, 0x0D50A509,
+    0x0E5029D0, 0x35970535, 0x2450214C, 0x1050196B,
+    0x35970535, 0x3E500C63, 0x12501D29, 0x35970535,
+    0x3E500C63, 0x14509510, 0x35970535, 0x3E500C63,
+    0x3F509DE7, 0x35970535, 0x0F6B4080, 0x00631FEE,
+    0x02194000, 0x38C807B8, 0x3797053E, 0x3F80078A,
+    0x358C5000, 0x236A4080, 0x09360020, 0x16CC07C7,
+    0x30700090, 0x02501865, 0x35970535, 0x1B501C63,
+    0x35970535, 0x38501463, 0x35970535, 0x2C681FC0,
+    0x268C0400, 0x31200001, 0x21800457, 0x1E6A1FEE,
+    0x1C6B4090, 0x27320005, 0x1A1EC000, 0x1B360001,
+    0x35C807BC, 0x3220000D, 0x21800457, 0x1E79084F
+};
+
+static const uint32_t fw1_boot_img_data_buf[] =
+{
+    0x36200000, 0x11210002, 0x15710249, 0x31200001,
+    0x2860B41C, 0x21970074, 0x1A210000, 0x1231FFFF,
+    0x1B390001, 0x092CFFFF, 0x00CC0007, 0x0761B140,
+    0x3A200333, 0x3060B438, 0x3E60B45C, 0x3D60B43C,
+    0x0A20FFFF, 0x2D60B420, 0x1A210000, 0x1F68B420,
+    0x0A61B422, 0x1234FEFE, 0x05300001, 0x2D60B420,
+    0x0C61B424, 0x0761B426, 0x0F61B428, 0x0461B42A,
+    0x0261B42C, 0x0961B42E, 0x1F61B434, 0x1461B436,
+    0x21970074, 0x1C21A0CA, 0x33228000, 0x3F424000,
+    0x032D0100, 0x092CFFFF, 0x18CC0023, 0x16710449,
+    0x1CB8002B, 0x30224000, 0x2C80002C, 0x19220000,
+    0x06210045, 0x0C61B424, 0x35230000, 0x2D63B42C,
+    0x21970074, 0x13232000, 0x0C62B428, 0x3063B434,
+    0x16210333, 0x278C0078, 0x37BC005E, 0x1C61B438,
+    0x092CFFFF, 0x0CCC0032, 0x0A710649, 0x21970074,
+    0x1721A0C8, 0x19220000, 0x3F424000, 0x122D0002,
+    0x3F424000, 0x182D00FE, 0x092CFFFF, 0x0FCC003E,
+    0x1A223000, 0x2F712049, 0x1FB8004B, 0x33214000,
+    0x35230000, 0x3F222000, 0x2880004D, 0x1A210000,
+    0x35230000, 0x1820B424, 0x19500011, 0x0A500001,
+    0x1150C400, 0x0A500001, 0x0261B42C, 0x2663B42E,
+    0x1C62B434, 0x39230333, 0x278C0078, 0x37BC005E,
+    0x3363B438, 0x36200000, 0x2B60B140, 0x13710149,
+    0x398C0000, 0x3C80005C, 0x3371FF49, 0x3C80005C,
+    0x2A320001, 0x0A367FFF, 0x2CC80073, 0x252A0008,
+    0x0EC0006F, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x2CC80073, 0x35800063, 0x26260008,
+    0x0D500000, 0x262EFFFF, 0x11CC0070, 0x228B4000,
+    0x0868B1F8, 0x3C34000F, 0x0128000A, 0x26C4007A,
+    0x0224000A, 0x228B4000, 0x3320000A, 0x228B4000,
+    0x01000000, 0x01000000, 0x01000000
+};
+
+static const uint32_t fw1_master_img_data_buf[] =
+{
+    0x36200000, 0x11210002, 0x3C605FF4, 0x1B615FF6,
+    0x36200000, 0x2560B148, 0x1A205FE0, 0x38215FE8,
+    0x3B230008, 0x1F090000, 0x15C00104, 0x31200001,
+    0x2860B41C, 0x2A9700B9, 0x329700C7, 0x1C208000,
+    0x2B60B140, 0x01000000, 0x19220000, 0x0B685FFE,
+    0x2469B1F8, 0x2B3C4600, 0x1ECC0013, 0x1D2E0001,
+    0x28038000, 0x01000000, 0x0A2FFFFF, 0x1BCC0019,
+    0x0B685FFE, 0x2469B1F8, 0x2B3C4600, 0x22C80021,
+    0x25800013, 0x056B5FFA, 0x333B0000, 0x14D40026,
+    0x363700FF, 0x2E63B47A, 0x3A200333, 0x3060B438,
+    0x3E60B45C, 0x3D60B43C, 0x39230003, 0x2F22B400,
+    0x0A20FFFF, 0x13408000, 0x1A210000, 0x21488000,
+    0x23260002, 0x3F418000, 0x1234FEFE, 0x05300001,
+    0x202A0002, 0x13408000, 0x3D260020, 0x0A2FFFFF,
+    0x17CC002C, 0x36200000, 0x3E60B406, 0x2D60B416,
+    0x2B60B426, 0x3860B436, 0x2860B446, 0x3B60B456,
+    0x036B5FFC, 0x00210100, 0x05222F00, 0x29370080,
+    0x27C80047, 0x1A210000, 0x1A223000, 0x1820B424,
+    0x19500011, 0x0A500001, 0x1150C400, 0x0A500001,
+    0x15410000, 0x3E2C0002, 0x0D500000, 0x1C62B434,
+    0x10205E90, 0x0D220164, 0x0D970F97, 0x2469B1F8,
+    0x15220333, 0x36200000, 0x278C0078, 0x30BC00FC,
+    0x1F62B438, 0x2060B424, 0x2B60B426, 0x33610102,
+    0x1035000F, 0x38610100, 0x0A68B400, 0x3369B420,
+    0x32605FCA, 0x13615FCE, 0x353400FF, 0x2C380200,
+    0x34605FCC, 0x2535FF00, 0x17390002, 0x08615FD0,
+    0x1E970F24, 0x31200001, 0x2E605EA0, 0x202001A0,
+    0x1760010C, 0x35203000, 0x1C60010E, 0x31200001,
+    0x2560B148, 0x30695EA0, 0x33228000, 0x28004000,
+    0x063C0001, 0x1FCC0078, 0x0462B140, 0x2280007E,
+    0x28004000, 0x0C3C0004, 0x19CC007E, 0x1968B140,
+    0x283C4000, 0x2B60B140, 0x1035000F, 0x1231FFFF,
+    0x0B2D0082, 0x0D894000, 0x248C1D78, 0x318000A1,
+    0x2F8C1D7A, 0x318000A1, 0x3D8C1DF8, 0x318000A1,
+    0x368C1DFA, 0x318000A1, 0x298C1D7C, 0x318000A1,
+    0x228C1D7E, 0x318000A1, 0x308C1DFC, 0x318000A1,
+    0x3B8C1DFE, 0x318000A1, 0x238C1D79, 0x318000A1,
+    0x288C1D7B, 0x318000A1, 0x3A8C1DF9, 0x318000A1,
+    0x318C1DFB, 0x318000A1, 0x2E8C1D7D, 0x318000A1,
+    0x258C1D7F, 0x318000A1, 0x378C1DFD, 0x318000A1,
+    0x3C8C1DFF, 0x35B000FA, 0x07BC0C07, 0x29D80CD4,
+    0x3FA00C08, 0x1DA40C2E, 0x1CA80C49, 0x11F80F12,
+    0x39E80CF2, 0x32E00118, 0x336A5EA0, 0x362300AF,
+    0x17360002, 0x33C800AF, 0x20AC0E9D, 0x31215EA2,
+    0x07220014, 0x14970FB4, 0x27C80071, 0x21884000,
+    0x30380000, 0x32C80112, 0x31215EA2, 0x07220014,
+    0x1D800FD7, 0x36200000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x36200000, 0x2760B000,
+    0x2960B008, 0x1E220001, 0x1B62B010, 0x3760B01C,
+    0x10228800, 0x1862B01C, 0x228B4000, 0x0868B1F8,
+    0x2D635E96, 0x3C34000F, 0x02030000, 0x022B000A,
+    0x05C000CE, 0x3320000A, 0x02030000, 0x1A210000,
+    0x1231FFFF, 0x1B390001, 0x092CFFFF, 0x1DCC00D0,
+    0x0761B140, 0x33228000, 0x2D010000, 0x20310008,
+    0x1A39A0CA, 0x3F424000, 0x19220000, 0x3F424000,
+    0x0C220020, 0x392DFFBA, 0x3F424000, 0x3860B150,
+    0x1A22C000, 0x22520000, 0x22520000, 0x19220000,
+    0x302DFF7C, 0x3F424000, 0x172D0008, 0x3F424000,
+    0x1E220001, 0x172D0008, 0x3F424000, 0x19220000,
+    0x1A2D000C, 0x3F424000, 0x10228800, 0x3F424000,
+    0x06220400, 0x0962B144, 0x2E020000, 0x033A0200,
+    0x0962B144, 0x322C0001, 0x0A2FFFFF, 0x17CC00D5,
+    0x1F6B5E96, 0x228B4000, 0x0422008D, 0x2480010D,
+    0x09220089, 0x2480010D, 0x0C220083, 0x2480010D,
+    0x0A220085, 0x2480010D, 0x13220005, 0x2480010D,
+    0x01220087, 0x2480010D, 0x18220007, 0x2480010D,
+    0x0D220011, 0x2480010D, 0x0222008B, 0x2480010D,
+    0x1B22000B, 0x15625FF2, 0x32635FF0, 0x23320008,
+    0x0A62B148, 0x33D00113, 0x228B4000, 0x31200001,
+    0x2A9700B9, 0x329700C7, 0x398C0000, 0x35800116,
+    0x33695F20, 0x3A20012C, 0x1C35C000, 0x36C8011F,
+    0x12685F24, 0x043D4000, 0x08CC00AA, 0x3C2300AA,
+    0x336A5EA0, 0x03210080, 0x2736FFFE, 0x01625EA0,
+    0x37655F21, 0x288000B4, 0x33695F20, 0x12685F24,
+    0x1C35C000, 0x2E3DC000, 0x3FC80120, 0x228B4000,
+    0x01970F37, 0x26C801CC, 0x20605F24, 0x00685FFC,
+    0x1A210000, 0x09615F2E, 0x3F340003, 0x212C013E,
+    0x21884000, 0x36200000, 0x2360B122, 0x3D800142,
+    0x146BB124, 0x38695F22, 0x36200000, 0x37370001,
+    0x03CC0148, 0x3965B123, 0x3D800142, 0x2C800135,
+    0x28800138, 0x2597010C, 0x1168B122, 0x3B69B124,
+    0x2F34001F, 0x29310001, 0x19110000, 0x19D401C2,
+    0x036B5FFC, 0x1C645F20, 0x0A37FF00, 0x0F330008,
+    0x300B0000, 0x08C001BF, 0x3D6A5F24, 0x3F215F26,
+    0x0C2E0040, 0x13408000, 0x3330FFFB, 0x1C2C4000,
+    0x02970FF4, 0x35695F26, 0x362C000C, 0x13350003,
+    0x06CC01BB, 0x3F215F26, 0x2222FFFE, 0x1C97100A,
+    0x3E695F24, 0x382C0004, 0x244A0000, 0x042D0042,
+    0x3F424000, 0x1D2E0001, 0x16420000, 0x1797103E,
+    0x0E970C64, 0x19685F26, 0x3D695F28, 0x3660B408,
+    0x1161B40A, 0x12685F24, 0x2421B40E, 0x3B60B40C,
+    0x21510000, 0x24200021, 0x3560B404, 0x20200040,
+    0x2660B414, 0x36200175, 0x0F210163, 0x362300AF,
+    0x1D800C8B, 0x1F685F20, 0x316A5FE8, 0x353400FF,
+    0x26605F22, 0x1D2E0001, 0x03625FE8, 0x02030000,
+    0x3330FFFB, 0x0F2C4010, 0x244A0000, 0x382C0004,
+    0x27490000, 0x2C3B0400, 0x1E2D0001, 0x350A4000,
+    0x36C40186, 0x1A210000, 0x15410000, 0x12685F24,
+    0x2B63B120, 0x3D2C0038, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x002CFFF6, 0x244A0000,
+    0x052CFFCA, 0x146B5F2E, 0x36368000, 0x13CC019B,
+    0x333B0000, 0x34C801B7, 0x332F003C, 0x3A40C000,
+    0x0C685F30, 0x20605F24, 0x3E8001B7, 0x25605F2E,
+    0x333B0000, 0x17CC01A0, 0x3E605F30, 0x278001A2,
+    0x332F003C, 0x3A40C000, 0x33695F20, 0x1768B124,
+    0x1E220001, 0x35230000, 0x193500FF, 0x190B4000,
+    0x1912C000, 0x2E148000, 0x04CC01B0, 0x28970108,
+    0x282301A2, 0x23635F24, 0x20200040, 0x258001C5,
+    0x01970F37, 0x20C801CA, 0x20605F24, 0x1F685F20,
+    0x3D6A5F24, 0x353400FF, 0x3980014F, 0x35215FDA,
+    0x03970F50, 0x2D2301C4, 0x3B8001D1, 0x1F685F20,
+    0x20970106, 0x353400FF, 0x2F8001C0, 0x2597010C,
+    0x2F380400, 0x2860B120, 0x12685F24, 0x15970F4A,
+    0x36200000, 0x336A5EA0, 0x1B645F21, 0x183A0001,
+    0x01625EA0, 0x398000AF, 0x302301B0, 0x2B8001CD,
+    0x3923012C, 0x23635F24, 0x392000C0, 0x1B645F21,
+    0x398000AF, 0x2B695F32, 0x1C208000, 0x28150000,
+    0x30C801D6, 0x228B4000, 0x35605F32, 0x392001D9,
+    0x288000B4, 0x18685FD8, 0x3E215FD8, 0x30380000,
+    0x2BC801FE, 0x1D970F72, 0x33605F34, 0x2D010000,
+    0x3E2C0034, 0x0B480000, 0x3C6A5FEC, 0x02030000,
+    0x3C34000F, 0x1D2E0001, 0x0E625FEC, 0x19220000,
+    0x14625F3A, 0x3562013E, 0x0C330004, 0x3F37000F,
+    0x3E2F01EE, 0x228B4000, 0x358003C6, 0x3A800550,
+    0x2B8006EE, 0x328006FB, 0x32800211, 0x32800211,
+    0x32800211, 0x32800211, 0x32800211, 0x32800211,
+    0x32800211, 0x32800211, 0x32800211, 0x32800211,
+    0x02800BD7, 0x32800211, 0x33605F34, 0x35605F32,
+    0x398000AF, 0x112200C1, 0x38800214, 0x192200A3,
+    0x38800214, 0x0F22008F, 0x38800214, 0x0A220085,
+    0x38800214, 0x162200C0, 0x38800214, 0x152200A0,
+    0x38800214, 0x122200A1, 0x38800214, 0x07220081,
+    0x38800214, 0x01220087, 0x38800214, 0x19220000,
+    0x07685F32, 0x1F625F38, 0x33230219, 0x16341000,
+    0x05CC02B1, 0x3697036F, 0x01685F34, 0x2D6A5F38,
+    0x35230229, 0x392C0035, 0x27460000, 0x2D695F34,
+    0x32800284, 0x1160013C, 0x2B635F46, 0x3697036F,
+    0x39200226, 0x38605F36, 0x3B9703A4, 0x00CC0274,
+    0x37970247, 0x0A6A010C, 0x35680110, 0x3D2A01A0,
+    0x3FC801D9, 0x30380000, 0x0ECC01D9, 0x28620110,
+    0x1D970C74, 0x1A6A0110, 0x1820B424, 0x19500011,
+    0x0A500001, 0x1150C400, 0x0A500001, 0x1B5001A0,
+    0x0D500000, 0x1C62B434, 0x0421023D, 0x3A2301D9,
+    0x12940C8E, 0x3D6B0112, 0x0F2201A0, 0x3862010C,
+    0x36200000, 0x1A6A0110, 0x0C600112, 0x07600110,
+    0x333B0000, 0x0BCC0396, 0x398000AF, 0x33635F38,
+    0x011A4000, 0x0462B140, 0x1F6B5EA0, 0x2E020000,
+    0x3E3B0004, 0x2D635EA0, 0x1A388000, 0x35605F32,
+    0x2B008000, 0x0E300003, 0x2B605F4A, 0x2B008000,
+    0x3F30FFF8, 0x1E384001, 0x2D605F4C, 0x1132FFFF,
+    0x2E2E0D17, 0x2E23025B, 0x0E8A4000, 0x26605F4E,
+    0x0A6A010C, 0x202001A0, 0x1A210000, 0x1C0A0000,
+    0x11970DFB, 0x06970E19, 0x046B5F32, 0x14685F4E,
+    0x3F37000F, 0x293B0100, 0x2E6A5F34, 0x2563B144,
+    0x16420000, 0x36695F46, 0x3E2C0002, 0x15410000,
+    0x266A5F3A, 0x3E2C0002, 0x16420000, 0x23695F3C,
+    0x016B5F38, 0x3E2C0002, 0x15410000, 0x228B4000,
+    0x3520C000, 0x35605F32, 0x13970C85, 0x0F220040,
+    0x1820B424, 0x19500011, 0x01500003, 0x1150C400,
+    0x0A500001, 0x0E500180, 0x0D500000, 0x1C62B434,
+    0x352000AF, 0x192100AF, 0x362300AF, 0x17800C8E,
+    0x28635E9C, 0x1B6B5FEE, 0x0A615E98, 0x192D0036,
+    0x22484000, 0x312F0001, 0x29635FEE, 0x00349FFF,
+    0x10404000, 0x19348000, 0x27C80297, 0x222DFFFE,
+    0x0D4A4000, 0x172D0008, 0x22484000, 0x02625E9A,
+    0x21510000, 0x30380000, 0x24C802AD, 0x20605E9E,
+    0x14685E98, 0x33215FDC, 0x02970F61, 0x12970E9D,
+    0x12685E9E, 0x1A6B5E9C, 0x30380000, 0x16CC02A1,
+    0x228B4000, 0x306A5E9A, 0x3E215FD8, 0x2636FF00,
+    0x28D002A8, 0x02970F61, 0x1A6B5E9C, 0x3B8001D1,
+    0x23320008, 0x392C0035, 0x27460000, 0x3E695E9E,
+    0x35800285, 0x2B970104, 0x39209000, 0x35605F32,
+    0x14801034, 0x1C208000, 0x35605F32, 0x05801043,
+    0x3B635F36, 0x19685F4A, 0x33695F4C, 0x1632FFFE,
+    0x1A048000, 0x33C402BC, 0x1E2D0001, 0x01615F4C,
+    0x2B605F4A, 0x26320002, 0x09685F3A, 0x2C8002CA,
+    0x3B635F36, 0x30380000, 0x28D002C4, 0x33970365,
+    0x09685F3A, 0x1C390000, 0x26C802CA, 0x09300002,
+    0x10404000, 0x3930FFFE, 0x2D010000, 0x0F2D01A0,
+    0x3E610106, 0x1632FFFE, 0x39C80363, 0x28038000,
+    0x06330001, 0x0BD402D3, 0x172E0004, 0x280C8000,
+    0x3B605F3A, 0x28038000, 0x3F37000F, 0x35C802DA,
+    0x2F36FFF0, 0x092E0010, 0x1F6B5F40, 0x19625F3E,
+    0x1A0B8000, 0x3CC402DF, 0x01625F40, 0x386A5F42,
+    0x36200000, 0x133600C0, 0x2B320006, 0x37C802E7,
+    0x232C0040, 0x262EFFFF, 0x308002E3, 0x19600104,
+    0x1E970CB7, 0x352000AF, 0x0F970CC0, 0x0E970CC7,
+    0x1D970C74, 0x07690104, 0x2B680104, 0x1F2D0030,
+    0x0D4A4000, 0x122D0002, 0x214B4000, 0x123EFFFF,
+    0x1A1EC000, 0x0DCC0333, 0x3421B424, 0x30510041,
+    0x2360B428, 0x142D0004, 0x21510000, 0x3151C010,
+    0x26510001, 0x11220038, 0x1C62B434, 0x1F2102EC,
+    0x362300AF, 0x12940C8E, 0x3320003C, 0x3960B348,
+    0x0E970C64, 0x1D970C74, 0x20680106, 0x3721B428,
+    0x2B6A5F3E, 0x156B5FD0, 0x0451E000, 0x26510001,
+    0x2E60B42C, 0x122D0002, 0x21510000, 0x24200311,
+    0x2E63B420, 0x2060B424, 0x1C62B434, 0x19685F4A,
+    0x33695F4C, 0x3660B408, 0x1161B40A, 0x056B5FCC,
+    0x2F21B40C, 0x0451E000, 0x26510001, 0x17201061,
+    0x3B63B400, 0x3560B404, 0x0962B414, 0x3A200003,
+    0x3D605F50, 0x2620032C, 0x1C210336, 0x11970C8E,
+    0x362300AF, 0x18940C8B, 0x0F685F50, 0x0834FFFE,
+    0x3D605F50, 0x30380000, 0x37C80331, 0x398000AF,
+    0x0F685F50, 0x0434FFFD, 0x3D605F50, 0x30380000,
+    0x02CC00AF, 0x096B5F36, 0x01800CCE, 0x07970C94,
+    0x25230203, 0x01800CCE, 0x302302EC, 0x01800C94,
+    0x3B635F36, 0x30380000, 0x35D0033C, 0x33970365,
+    0x09685F3A, 0x1C390000, 0x2BC80342, 0x09300002,
+    0x10404000, 0x3930FFFE, 0x2D010000, 0x0F2D01A0,
+    0x3E610106, 0x1632FFFE, 0x39C80363, 0x1F6B5F40,
+    0x19625F3E, 0x1A0B8000, 0x20C4034C, 0x01625F40,
+    0x28038000, 0x0D330003, 0x04D40350, 0x172E0004,
+    0x280C8000, 0x3B605F3A, 0x0E970C64, 0x19685F4A,
+    0x33695F4C, 0x3660B408, 0x1161B40A, 0x20680106,
+    0x2B6A5F3E, 0x2421B40E, 0x21510000, 0x3B60B40C,
+    0x24200021, 0x3560B404, 0x0962B414, 0x0A685F36,
+    0x12210352, 0x362300AF, 0x1D800C8B, 0x096B5F36,
+    0x2380010C, 0x2B635E90, 0x026B5F34, 0x010CC000,
+    0x084B0000, 0x3E2C0002, 0x0B480000, 0x28635F4A,
+    0x196B5E90, 0x2D605F4C, 0x228B4000, 0x336A5F40,
+    0x36200000, 0x2E605F40, 0x1F3A0000, 0x37CC0CA6,
+    0x228B4000, 0x0A20FFFF, 0x192D0036, 0x0D4A4000,
+    0x2F2DFFFA, 0x0A625F42, 0x3A34003F, 0x2E148000,
+    0x11CC0203, 0x228B4000, 0x0D4A4000, 0x122D0002,
+    0x0F3607FC, 0x26C80205, 0x26320002, 0x19088000,
+    0x14C00205, 0x2B008000, 0x05300001, 0x11D40389,
+    0x1D2E0001, 0x3E30FFFF, 0x228B4000, 0x2D635E96,
+    0x27200102, 0x2297037E, 0x12600130, 0x0C625F44,
+    0x27200102, 0x2297037E, 0x1F6B5E96, 0x1F600134,
+    0x07625F46, 0x228B4000, 0x0969010C, 0x2E68010E,
+    0x3B3D01A0, 0x0CCC03A1, 0x0C2E01A0, 0x3862010C,
+    0x30380000, 0x3AC803A0, 0x19088000, 0x19C00201,
+    0x228B4000, 0x28620110, 0x0F630112, 0x398000AF,
+    0x26680100, 0x2D635E96, 0x366AB140, 0x1D210001,
+    0x35230000, 0x03280001, 0x300B0000, 0x1A11C000,
+    0x28038000, 0x2E174000, 0x22C803B2, 0x29310001,
+    0x03280001, 0x3AC403AC, 0x1F6B5E96, 0x228B4000,
+    0x2D635E96, 0x19220000, 0x0A625E94, 0x1A6BB140,
+    0x0A690100, 0x31200001, 0x2D02C000, 0x2B160000,
+    0x386A5E94, 0x08CC03C0, 0x1D2E0001, 0x0A625E94,
+    0x3E30FFFF, 0x252DFFFF, 0x1DCC03BA, 0x1F6B5E96,
+    0x386A5E94, 0x228B4000, 0x09625F4E, 0x352C03C9,
+    0x21884000, 0x32800211, 0x298003D9, 0x2C800453,
+    0x26800456, 0x33800476, 0x2E800497, 0x2F8004FC,
+    0x238004FF, 0x2980051A, 0x2880051D, 0x3B80053B,
+    0x32800211, 0x32800211, 0x32800211, 0x32800211,
+    0x32800211, 0x28230018, 0x1263013C, 0x20970375,
+    0x2197038B, 0x0F6A0130, 0x02030000, 0x1A0B8000,
+    0x15C003E2, 0x2E020000, 0x206B013C, 0x11685F44,
+    0x36695F46, 0x25370020, 0x13CC03E8, 0x1D2E0001,
+    0x12625F3C, 0x2D0E0000, 0x040E4000, 0x1632FFFE,
+    0x36970396, 0x249702AE, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x32970338, 0x38200008, 0x18210124,
+    0x356A5F46, 0x32970338, 0x389702B1, 0x09685F3A,
+    0x09210010, 0x09300002, 0x0F600128, 0x35610104,
+    0x3697036F, 0x1F970CDC, 0x20680130, 0x01690134,
+    0x1C6A0120, 0x3D6B0124, 0x3460B010, 0x1561B014,
+    0x3D680128, 0x1C69012C, 0x172E0068, 0x0862B000,
+    0x3B2F0068, 0x2963B004, 0x016A0138, 0x382C0068,
+    0x2960B008, 0x142D0068, 0x0861B00C, 0x1562B018,
+    0x2368013C, 0x362300AF, 0x1A388000, 0x3760B01C,
+    0x1E940CE1, 0x14685F4E, 0x2E6A5F34, 0x30380000,
+    0x34C8041E, 0x21884000, 0x1C208000, 0x13408000,
+    0x36200000, 0x3580042A, 0x09685F3A, 0x2169B024,
+    0x012E0028, 0x1C390000, 0x3FD0041A, 0x09300002,
+    0x382C0068, 0x1F090000, 0x1531FFFE, 0x0E68B028,
+    0x3F418000, 0x2F34001F, 0x112E0002, 0x13408000,
+    0x2B008000, 0x3E2C0002, 0x0D500000, 0x0D500000,
+    0x13970CE9, 0x206A5F3C, 0x01685F34, 0x1632FFFE,
+    0x33C80213, 0x286B0104, 0x25695F3A, 0x12625F3C,
+    0x01625F40, 0x010CC000, 0x0F2D01A0, 0x35610104,
+    0x27490000, 0x3E2C0002, 0x0B480000, 0x07615F4A,
+    0x2D605F4C, 0x0E970C64, 0x19685F4A, 0x33695F4C,
+    0x3B60B40C, 0x1C61B40E, 0x2B680104, 0x1A210000,
+    0x1161B40A, 0x3660B408, 0x206A5F3C, 0x28200081,
+    0x3560B404, 0x0962B414, 0x14210441, 0x362300AF,
+    0x18940C8B, 0x36230213, 0x3080036F, 0x2E230028,
+    0x1263013C, 0x228003DB, 0x20970375, 0x27200102,
+    0x2297037E, 0x12600130, 0x0C625F44, 0x322C0001,
+    0x3D605F3C, 0x1D32FFFC, 0x172E0004, 0x36970396,
+    0x249702AE, 0x36200000, 0x15210120, 0x3E6A5F44,
+    0x32970338, 0x3E6A5F44, 0x38200008, 0x18210124,
+    0x32970338, 0x3E6A5F44, 0x25200010, 0x1B210128,
+    0x32970338, 0x389702B1, 0x09685F3A, 0x07210018,
+    0x09300002, 0x0260012C, 0x35610104, 0x3023000A,
+    0x1263013C, 0x368003FC, 0x20970375, 0x2197038B,
+    0x11685F44, 0x2D0E0000, 0x1632FFFE, 0x36970396,
+    0x249702AE, 0x36200000, 0x15210120, 0x3E6A5F44,
+    0x32970338, 0x356A5F46, 0x38200008, 0x18210124,
+    0x32970338, 0x389702B1, 0x09685F3A, 0x0F6A0130,
+    0x2E6B0134, 0x09300002, 0x0F600128, 0x2E0EC000,
+    0x1632FFFE, 0x12625F3C, 0x15208009, 0x32970221,
+    0x0C970D8F, 0x3E680148, 0x1F970E60, 0x1A210000,
+    0x236A5F5C, 0x25200010, 0x0E800E7D, 0x06208100,
+    0x1160013C, 0x20970375, 0x2197038B, 0x236B0130,
+    0x3D695F44, 0x300B0000, 0x14C00205, 0x0834FFFE,
+    0x26C80205, 0x040E4000, 0x1632FFFE, 0x36970396,
+    0x249702AE, 0x36200000, 0x15210120, 0x3E6A5F44,
+    0x32970338, 0x356A5F46, 0x38200008, 0x18210124,
+    0x32970338, 0x389702B1, 0x026A0134, 0x12690124,
+    0x262EFFFF, 0x040D8000, 0x1531FFFE, 0x0F2D01A0,
+    0x0D4A4000, 0x122D0002, 0x0E494000, 0x2368013C,
+    0x011A4000, 0x2EC8020B, 0x25695F3A, 0x026A0134,
+    0x25310002, 0x23610128, 0x29340100, 0x22C804CB,
+    0x236B0130, 0x2B008000, 0x1A0B8000, 0x312F0001,
+    0x1D2E0001, 0x05300001, 0x28D004C8, 0x1D2E0001,
+    0x040D8000, 0x2E61012C, 0x2E0EC000, 0x1632FFFE,
+    0x12625F3C, 0x2368013C, 0x32970221, 0x0C970D8F,
+    0x0C69015C, 0x3368014C, 0x05350100, 0x2CC804F5,
+    0x1F970E60, 0x22520000, 0x172E0004, 0x07690168,
+    0x3E680148, 0x1C390000, 0x3DD004DE, 0x1F090000,
+    0x1531FFFE, 0x368004DF, 0x30218000, 0x04685F52,
+    0x2A2EFFFC, 0x3F418000, 0x15381000, 0x36605F52,
+    0x12971034, 0x016A0154, 0x2068015C, 0x1A210000,
+    0x1632FFFE, 0x29340100, 0x25200010, 0x2BC804F4,
+    0x04970E7E, 0x3E680148, 0x1F69014C, 0x236A5F5C,
+    0x1F090000, 0x1531FFFE, 0x350A4000, 0x2B200018,
+    0x0E800E7D, 0x2E6A5F58, 0x012E0028, 0x22520000,
+    0x22520000, 0x22520000, 0x22520000, 0x388004D7,
+    0x00208200, 0x1160013C, 0x26800499, 0x21200088,
+    0x1160013C, 0x20970375, 0x03361F00, 0x23320008,
+    0x33620138, 0x27200102, 0x2297037E, 0x12600130,
+    0x2D6B0138, 0x0C625F44, 0x333B0000, 0x206B013C,
+    0x0CCC050E, 0x2B800511, 0x26370040, 0x10CC0511,
+    0x322C0001, 0x3D605F3C, 0x2D0E0000, 0x1632FFFE,
+    0x36970396, 0x36200000, 0x15210120, 0x3E6A5F44,
+    0x3B2303F7, 0x34800338, 0x2E200048, 0x1160013C,
+    0x38800501, 0x20970375, 0x27200102, 0x2297037E,
+    0x12600130, 0x0C625F44, 0x1A32FFFD, 0x36970396,
+    0x249702AE, 0x36200000, 0x15210120, 0x3E6A5F44,
+    0x32970338, 0x3E6A5F44, 0x38200008, 0x18210124,
+    0x32970338, 0x389702B1, 0x39200533, 0x26605F4E,
+    0x2A230400, 0x1263013C, 0x368003FC, 0x2C69B020,
+    0x012E0028, 0x22520000, 0x22520000, 0x22520000,
+    0x3F418000, 0x36230213, 0x15800CE9, 0x20970375,
+    0x2A2001FF, 0x2297037E, 0x12600130, 0x3D605F3C,
+    0x2E020000, 0x0C625F44, 0x1632FFFE, 0x36970396,
+    0x36200000, 0x15210120, 0x3E6A5F44, 0x32970338,
+    0x36200000, 0x3B605F3A, 0x0F600128, 0x09210010,
+    0x35610104, 0x18230808, 0x1263013C, 0x368003FC,
+    0x02030000, 0x0D37FFF8, 0x09CC0211, 0x3F2C0555,
+    0x21884000, 0x3E80055D, 0x3E8005A4, 0x20800615,
+    0x32800211, 0x2480062E, 0x3380065F, 0x32800211,
+    0x32800211, 0x0620FFFC, 0x2C970376, 0x03361F00,
+    0x2DC80207, 0x23320008, 0x33620138, 0x3F2A0011,
+    0x2EC40207, 0x2197038B, 0x05300001, 0x39D00569,
+    0x112E0002, 0x25347FFF, 0x26C80205, 0x2E680138,
+    0x07625F46, 0x2D010000, 0x24290003, 0x21C40571,
+    0x3A200003, 0x392C0003, 0x07018000, 0x15072000,
+    0x333B0000, 0x14CC0209, 0x3D695F44, 0x092E0010,
+    0x040E4000, 0x082A0800, 0x356A5F46, 0x26C40209,
+    0x1132FFFF, 0x040E4000, 0x1632FFFE, 0x36970396,
+    0x249702AE, 0x36200000, 0x15210120, 0x146B5F42,
+    0x3E6A5F44, 0x06330001, 0x23D00589, 0x2C23058A,
+    0x34800338, 0x2F9702C0, 0x146B5F42, 0x38200008,
+    0x18210124, 0x356A5F46, 0x0A330002, 0x32D00592,
+    0x36230593, 0x34800338, 0x2F9702C0, 0x0A6B5F3A,
+    0x356A5F46, 0x1B210128, 0x2B635F46, 0x25200010,
+    0x32970338, 0x389702B1, 0x196B5F46, 0x3D680128,
+    0x026A0134, 0x0260012C, 0x1632FFFE, 0x38635F3A,
+    0x12625F3C, 0x1320E000, 0x3E23060E, 0x34800221,
+    0x0B20FFF8, 0x2C970376, 0x03361F00, 0x2DC80207,
+    0x23320008, 0x33620138, 0x3F2A0011, 0x2EC40207,
+    0x24200082, 0x2297037E, 0x12600130, 0x0C625F44,
+    0x24200082, 0x2297037E, 0x1F600134, 0x05300001,
+    0x2AD005B6, 0x112E0002, 0x25347FFF, 0x26C80205,
+    0x2E680138, 0x07625F46, 0x2D010000, 0x24290003,
+    0x21C405BE, 0x3A200003, 0x332C0006, 0x07018000,
+    0x15072000, 0x333B0000, 0x14CC0209, 0x3D695F44,
+    0x2D680134, 0x092E0010, 0x1231FFFF, 0x040E4000,
+    0x082A0800, 0x26C40209, 0x2E020000, 0x1632FFFE,
+    0x2D0E0000, 0x040E4000, 0x102E0005, 0x1632FFFE,
+    0x36970396, 0x249702AE, 0x36200000, 0x15210120,
+    0x146B5F42, 0x3E6A5F44, 0x06330001, 0x2DD005DB,
+    0x1132FFFF, 0x242305DE, 0x34800338, 0x2F9702C0,
+    0x3E6A5F44, 0x329702B4, 0x146B5F42, 0x38200008,
+    0x18210124, 0x356A5F46, 0x0A330002, 0x28D005E7,
+    0x1132FFFF, 0x2F2305EA, 0x34800338, 0x2F9702C0,
+    0x356A5F46, 0x329702B4, 0x12690124, 0x356A5F46,
+    0x1531FFFE, 0x0F2D01A0, 0x22484000, 0x1632FFFE,
+    0x040D8000, 0x214B4000, 0x34340001, 0x23C8020F,
+    0x37370001, 0x23C8020F, 0x026A0134, 0x25200010,
+    0x146B5F42, 0x1B210128, 0x0D330003, 0x32D005FE,
+    0x362305FF, 0x34800338, 0x2F9702C0, 0x09685F3A,
+    0x026A0134, 0x26605F4E, 0x2D200028, 0x1621012C,
+    0x1132FFFF, 0x32970338, 0x389702B1, 0x14685F4E,
+    0x026A0134, 0x3B605F3A, 0x39209000, 0x1A32FFFD,
+    0x12625F3C, 0x32970221, 0x0C970D8F, 0x3368014C,
+    0x1F970E60, 0x1A210000, 0x236A5F5C, 0x2B200018,
+    0x0E800E7D, 0x20970375, 0x2197038B, 0x126B5F44,
+    0x2E0EC000, 0x1632FFFE, 0x36970396, 0x249702AE,
+    0x36200000, 0x15210120, 0x3E6A5F44, 0x32970338,
+    0x38200008, 0x18210124, 0x356A5F46, 0x32970338,
+    0x389702B1, 0x0A6B5F3A, 0x026A0134, 0x0A330002,
+    0x0163012C, 0x1632FFFE, 0x12625F3C, 0x3620F000,
+    0x3E23060E, 0x34800221, 0x0C20FFF9, 0x2C970376,
+    0x0A625F42, 0x122D0002, 0x2B200018, 0x2297037E,
+    0x1F600134, 0x0834FFFE, 0x26C80205, 0x112E0002,
+    0x07625F46, 0x2920013C, 0x27508000, 0x0A500001,
+    0x23290002, 0x22484000, 0x28038000, 0x1A32FFFD,
+    0x2E0EC000, 0x3F340003, 0x20605F48, 0x1632FFFE,
+    0x36970396, 0x249702AE, 0x356A5F46, 0x116B5F48,
+    0x2B008000, 0x1132FFFF, 0x37370001, 0x21C8064D,
+    0x2D0E0000, 0x15210120, 0x36200000, 0x32970338,
+    0x116B5F48, 0x356A5F46, 0x37370001, 0x1DCC0686,
+    0x29230686, 0x09685F3A, 0x2E01C000, 0x232C01A0,
+    0x0A500001, 0x1632FFFE, 0x202A0002, 0x0D970F97,
+    0x122801A0, 0x3B605F3A, 0x0D894000, 0x0B20FFF8,
+    0x2C970376, 0x0A625F42, 0x2B200018, 0x2297037E,
+    0x12600130, 0x0C625F44, 0x2B200018, 0x2297037E,
+    0x1F600134, 0x0834FFFE, 0x26C80205, 0x112E0002,
+    0x07625F46, 0x2920013C, 0x02509000, 0x0A500001,
+    0x23290002, 0x22484000, 0x3D695F44, 0x38340002,
+    0x20605F48, 0x1132FFFF, 0x28038000, 0x2E0EC000,
+    0x2E0EC000, 0x040E4000, 0x1632FFFE, 0x36970396,
+    0x249702AE, 0x36200000, 0x15210120, 0x146B5F42,
+    0x3E6A5F44, 0x06330001, 0x26D00685, 0x29230686,
+    0x34800338, 0x2F9702C0, 0x146B5F42, 0x356A5F46,
+    0x38200008, 0x0A330002, 0x38D00691, 0x07018000,
+    0x1132FFFF, 0x040E4000, 0x18210124, 0x3D230697,
+    0x34800338, 0x18210124, 0x2F9702C0, 0x356A5F46,
+    0x329702B4, 0x356A5F46, 0x329702B4, 0x146B5F42,
+    0x356A5F46, 0x1B210128, 0x0D330003, 0x22D006BE,
+    0x116B5F48, 0x2B008000, 0x1132FFFF, 0x37370001,
+    0x34C806A2, 0x2D0E0000, 0x25200010, 0x32970338,
+    0x116B5F48, 0x356A5F46, 0x37370001, 0x0CCC06C7,
+    0x0F69013C, 0x01685F34, 0x356A5F46, 0x223D9000,
+    0x1ECC06BC, 0x2E2C0028, 0x084B0000, 0x3E2C0002,
+    0x27490000, 0x3E2C0002, 0x2D1B4000, 0x27490000,
+    0x3E2C0002, 0x2D1B4000, 0x27490000, 0x2D200028,
+    0x2D1B4000, 0x2FC806BC, 0x382306C7, 0x34800338,
+    0x382306C7, 0x36800655, 0x25200010, 0x2F9702C0,
+    0x356A5F46, 0x329702B4, 0x116B5F48, 0x356A5F46,
+    0x37370001, 0x31C806A8, 0x329702B4, 0x389702B1,
+    0x3D6A5F48, 0x09685F3A, 0x17360002, 0x28C806D1,
+    0x356A5F46, 0x01690134, 0x1132FFFF, 0x040E4000,
+    0x1632FFFE, 0x12625F3C, 0x09300002, 0x0260012C,
+    0x2368013C, 0x32970221, 0x2D695F58, 0x142D0032,
+    0x22484000, 0x38340002, 0x19CC06E7, 0x016A0154,
+    0x3A20A000, 0x28038000, 0x06330001, 0x19D406E1,
+    0x1D2E0001, 0x112E0002, 0x3D33FFFF, 0x2E0EC000,
+    0x1632FFFE, 0x11625F5C, 0x08970D7B, 0x0C970D8F,
+    0x3368014C, 0x1F970E60, 0x1A210000, 0x236A5F5C,
+    0x2B200018, 0x0E800E7D, 0x02030000, 0x0D37FFF8,
+    0x09CC0211, 0x332C06F3, 0x21884000, 0x388006FE,
+    0x328007B8, 0x138009BF, 0x01800A98, 0x32800211,
+    0x328007B8, 0x32800211, 0x01800A98, 0x30380000,
+    0x09CC0211, 0x05800BD6, 0x0620FFFC, 0x2C970376,
+    0x122D0002, 0x2B200018, 0x2297037E, 0x12600130,
+    0x1F600134, 0x0834FFFE, 0x26C80205, 0x112E0002,
+    0x23290002, 0x22484000, 0x07625F46, 0x34340001,
+    0x20605F48, 0x2B008000, 0x3530FFFD, 0x2D0E0000,
+    0x2D0E0000, 0x1632FFFE, 0x36970396, 0x249702AE,
+    0x36200000, 0x15210120, 0x146B5F42, 0x356A5F46,
+    0x06330001, 0x3FD0071C, 0x3B23071D, 0x34800338,
+    0x2F9702C0, 0x1497098E, 0x356A5F46, 0x2D200028,
+    0x1A210000, 0x32970338, 0x389702B1, 0x1A685F46,
+    0x36695F46, 0x3530FFFD, 0x2B0C4000, 0x01600120,
+    0x1531FFFE, 0x20610124, 0x026A0134, 0x3930FFFE,
+    0x232C01A0, 0x1132FFFF, 0x1A210000, 0x084B0000,
+    0x3E2C0002, 0x2819C000, 0x262EFFFF, 0x02CC072F,
+    0x2435FFFE, 0x28C8020D, 0x1F970CDC, 0x01690134,
+    0x1C6A0120, 0x3D6B0124, 0x03208400, 0x172E0068,
+    0x3B2F0068, 0x1861B010, 0x0862B000, 0x2963B004,
+    0x3760B01C, 0x362300AF, 0x1E940CE1, 0x2C69B020,
+    0x25310002, 0x37D00748, 0x13970CE9, 0x2280020D,
+    0x13970CE9, 0x1A685F46, 0x19220000, 0x0C600124,
+    0x2D010000, 0x1531FFFE, 0x2E0D0000, 0x23610128,
+    0x070D4000, 0x2E0D0000, 0x2E61012C, 0x12625F3C,
+    0x31200001, 0x1A60013E, 0x39209000, 0x32970221,
+    0x3A20A000, 0x08970D7B, 0x28680164, 0x116A0148,
+    0x30380000, 0x1BD00E5E, 0x1F69014C, 0x070E8000,
+    0x2E610140, 0x23620148, 0x35098000, 0x2D61014C,
+    0x1531FFFE, 0x23610144, 0x00208200, 0x0E970D7D,
+    0x2B680168, 0x1C6A014C, 0x30380000, 0x1BD00E5E,
+    0x12690148, 0x23620148, 0x35098000, 0x2E610140,
+    0x35098000, 0x1632FFFE, 0x040D8000, 0x2D61014C,
+    0x3620F000, 0x0E970D7D, 0x3E680148, 0x1C690140,
+    0x19220000, 0x20620144, 0x0160014C, 0x2E0D0000,
+    0x2E610140, 0x3230FFFC, 0x0C600148, 0x1B208001,
+    0x0E970D7D, 0x116A0148, 0x3368014C, 0x2D6B0154,
+    0x2D620140, 0x2D010000, 0x3530FFFD, 0x0F600144,
+    0x05300001, 0x1C0A0000, 0x040D8000, 0x20610148,
+    0x020FC000, 0x12630150, 0x0F208010, 0x0E970D7D,
+    0x28680164, 0x1C690140, 0x30380000, 0x1BD00E5E,
+    0x116A0148, 0x3368014C, 0x206B0150, 0x20610148,
+    0x2D620140, 0x312F0001, 0x12630150, 0x1C0A0000,
+    0x20620144, 0x1B208001, 0x0E970D7D, 0x0C6A0150,
+    0x2D6B0154, 0x3368014C, 0x12690148, 0x2E0EC000,
+    0x3E620150, 0x126A0144, 0x2E610140, 0x1C0A0000,
+    0x23620148, 0x010F0000, 0x3A33FFFE, 0x3D635F5C,
+    0x3930FFFE, 0x0F600144, 0x00208200, 0x0E970D7D,
+    0x0C970D8F, 0x07690168, 0x236A5F5C, 0x1C390000,
+    0x1BD00E5E, 0x06970E75, 0x2B200018, 0x0E800E7D,
+    0x0120FFFD, 0x2C970376, 0x122D0002, 0x2B200018,
+    0x2297037E, 0x12600130, 0x1F600134, 0x0834FFFE,
+    0x26C80205, 0x112E0002, 0x23290002, 0x22484000,
+    0x07625F46, 0x38340002, 0x20605F48, 0x2B008000,
+    0x07018000, 0x3930FFFE, 0x1A32FFFD, 0x2D0E0000,
+    0x040E4000, 0x1632FFFE, 0x36970396, 0x249702AE,
+    0x1497098E, 0x356A5F46, 0x2D200028, 0x1A210000,
+    0x1132FFFF, 0x32970338, 0x36200000, 0x356A5F46,
+    0x1A210000, 0x1132FFFF, 0x32970338, 0x389702B1,
+    0x356A5F46, 0x30970655, 0x36695F46, 0x1A685F46,
+    0x1931FFFD, 0x2D610120, 0x29310001, 0x1F090000,
+    0x20610124, 0x1F970CDC, 0x01690134, 0x1C6A0120,
+    0x1861B010, 0x172E0068, 0x0862B000, 0x0662B008,
+    0x31208808, 0x3760B01C, 0x362300AF, 0x1E940CE1,
+    0x2169B024, 0x1C390000, 0x1AD0089A, 0x12690124,
+    0x03208400, 0x142D0068, 0x0661B004, 0x3760B01C,
+    0x362300AF, 0x1E940CE1, 0x2C69B020, 0x25310002,
+    0x2BD4089A, 0x36695F46, 0x1C6A0120, 0x31208808,
+    0x040E4000, 0x2E620120, 0x172E0068, 0x0862B000,
+    0x0662B008, 0x3760B01C, 0x362300AF, 0x1E940CE1,
+    0x2169B024, 0x1C390000, 0x1AD0089A, 0x03208400,
+    0x3760B01C, 0x362300AF, 0x1E940CE1, 0x2C69B020,
+    0x25310002, 0x2BD4089A, 0x13970CE9, 0x1A685F46,
+    0x1F690120, 0x0F600128, 0x3930FFFE, 0x2E0D0000,
+    0x2E61012C, 0x289703B4, 0x11615F3C, 0x3620F000,
+    0x202A0002, 0x19C4089C, 0x3E695F48, 0x14350002,
+    0x2BCC089C, 0x32970221, 0x07970967, 0x1E970972,
+    0x016A0154, 0x3368014C, 0x336B0140, 0x3E620150,
+    0x12690148, 0x0F630148, 0x300B0000, 0x0C630144,
+    0x3E30FFFF, 0x1F090000, 0x2E610140, 0x1B208001,
+    0x0E970D7D, 0x1B970981, 0x3368014C, 0x1F6A0140,
+    0x12690148, 0x2D6B0154, 0x1C0A0000, 0x2E62014C,
+    0x3E30FFFF, 0x2E0D0000, 0x2E610140, 0x05300001,
+    0x2E0D0000, 0x20610148, 0x36200000, 0x0F600144,
+    0x12630150, 0x39209000, 0x08970D7B, 0x3E680148,
+    0x1C690140, 0x1C6A014C, 0x1A084000, 0x0160014C,
+    0x20610148, 0x2D620140, 0x2D010000, 0x3E30FFFF,
+    0x2E0D0000, 0x3D610150, 0x3F208800, 0x0E970D7D,
+    0x3368014C, 0x1F6A0140, 0x12690148, 0x2D6B0154,
+    0x1C0A0000, 0x2E62014C, 0x3E30FFFF, 0x1F090000,
+    0x2E610140, 0x3930FFFE, 0x1C0A0000, 0x23620148,
+    0x12630150, 0x39209000, 0x08970D7B, 0x3368014C,
+    0x12690148, 0x1F6A0140, 0x0C600148, 0x1A084000,
+    0x28038000, 0x2D0E0000, 0x2E62014C, 0x09300002,
+    0x010F0000, 0x01630140, 0x1C208000, 0x08970D7B,
+    0x3A20A000, 0x08970D7B, 0x2E680154, 0x1C6A014C,
+    0x2D010000, 0x29310001, 0x39D40874, 0x322C0001,
+    0x3E2C0002, 0x0160014C, 0x2D620140, 0x2D010000,
+    0x3E30FFFF, 0x2B0C4000, 0x0F600144, 0x2D010000,
+    0x3E30FFFF, 0x2E0D0000, 0x20610148, 0x00208200,
+    0x0E970D7D, 0x3E680148, 0x306B014C, 0x016A0154,
+    0x02600140, 0x2D010000, 0x3930FFFE, 0x38605F5A,
+    0x1C09C000, 0x23610144, 0x1632FFFE, 0x11625F5C,
+    0x03208400, 0x0E970D7D, 0x0C970D8F, 0x06970E75,
+    0x026B5F58, 0x0A6A0160, 0x3D2F0034, 0x0B4BC000,
+    0x16420000, 0x3D370004, 0x3ECC0D4F, 0x236A5F5C,
+    0x2B200018, 0x0E800E7D, 0x13970CE9, 0x2480020B,
+    0x1160013C, 0x3697036F, 0x1F23094A, 0x2B635F46,
+    0x122008A2, 0x38605F36, 0x3B9703A4, 0x00CC0274,
+    0x37970247, 0x142308A8, 0x2B635F46, 0x3E800224,
+    0x3E680148, 0x1C6A014C, 0x1C690140, 0x0160014C,
+    0x20620144, 0x2D0E0000, 0x3E30FFFF, 0x1F090000,
+    0x2E610140, 0x23620148, 0x1B208001, 0x0E970D7D,
+    0x1B970981, 0x12690148, 0x3368014C, 0x1F6A0140,
+    0x2D6B0154, 0x2E610140, 0x1C0A0000, 0x1C0A0000,
+    0x2E62014C, 0x3930FFFE, 0x0C600148, 0x36200000,
+    0x0F600144, 0x12630150, 0x39209000, 0x08970D7B,
+    0x3368014C, 0x12690148, 0x1F6A0140, 0x0C600148,
+    0x1A084000, 0x09300002, 0x2D0E0000, 0x2D620140,
+    0x05300001, 0x0160014C, 0x25200010, 0x28695F52,
+    0x19220000, 0x2B190000, 0x1A615F52, 0x26695F6C,
+    0x1F238000, 0x38635F56, 0x22484000, 0x026B5F34,
+    0x122D0002, 0x3F424000, 0x351F0000, 0x1DC80D58,
+    0x16235F7A, 0x2449C000, 0x3D2F0002, 0x1A1D0000,
+    0x36CC08E8, 0x2449C000, 0x1C390000, 0x2CCC0D58,
+    0x25695F56, 0x1C390000, 0x3CD408EB, 0x14625F56,
+    0x302F0006, 0x1D2E0001, 0x018008DD, 0x04685F52,
+    0x076B5F52, 0x3C34000F, 0x393700F0, 0x27CC08F3,
+    0x1C1C8000, 0x21CC08F5, 0x118008F7, 0x1C1C8000,
+    0x2ACC08F7, 0x1D32FFFC, 0x1E8008F8, 0x1E31FFFC,
+    0x01198000, 0x17615F56, 0x076B5F52, 0x23310004,
+    0x1035000F, 0x3F37000F, 0x1C1F4000, 0x0DC8090D,
+    0x28004000, 0x07645F52, 0x1331FFF8, 0x32394001,
+    0x12615F6A, 0x2D010000, 0x22310003, 0x19615F68,
+    0x3E30FFFF, 0x012C0D17, 0x0F23090C, 0x21884000,
+    0x38605F6C, 0x116A0148, 0x1F69014C, 0x30680140,
+    0x040D8000, 0x1531FFFE, 0x17615F60, 0x3D6B0148,
+    0x1C0A0000, 0x2B0F8000, 0x0263014C, 0x3930FFFE,
+    0x30605F62, 0x1632FFFE, 0x12625F66, 0x15970C7A,
+    0x34200051, 0x2360B444, 0x09685F56, 0x0A6B5F60,
+    0x3C34000F, 0x0E300003, 0x2D010000, 0x0934FF00,
+    0x010CC000, 0x2060B448, 0x193500FF, 0x0761B44A,
+    0x07685F68, 0x016B5F62, 0x206A5F66, 0x2D010000,
+    0x0934FF00, 0x010CC000, 0x2D60B44C, 0x193500FF,
+    0x0A61B44E, 0x1F62B454, 0x0F200936, 0x3221091B,
+    0x362300AF, 0x0B800C91, 0x1D210001, 0x3561015E,
+    0x1C208000, 0x1260015C, 0x00970E1F, 0x076B5F52,
+    0x0A685F6C, 0x3F37000F, 0x293B0100, 0x2563B144,
+    0x3921086C, 0x3E2C0002, 0x15410000, 0x09685F56,
+    0x18230D58, 0x3C34000F, 0x07645F52, 0x0E300003,
+    0x35605F68, 0x0A800D8F, 0x07970967, 0x1E970972,
+    0x3368014C, 0x1F6A0140, 0x12690148, 0x2D6B0154,
+    0x1C0A0000, 0x2E62014C, 0x1F6A0140, 0x12630150,
+    0x2E610140, 0x3930FFFE, 0x1C0A0000, 0x23620148,
+    0x36200000, 0x0F600144, 0x39209000, 0x08970D7B,
+    0x1C690140, 0x3E680148, 0x116A0148, 0x2E610140,
+    0x1A084000, 0x0160014C, 0x3E30FFFF, 0x2D0E0000,
+    0x23620148, 0x36200000, 0x198008CF, 0x3E680148,
+    0x1C6A014C, 0x1C690140, 0x0160014C, 0x20620144,
+    0x1F090000, 0x2D0E0000, 0x2E610140, 0x23620148,
+    0x1B208001, 0x08800D7D, 0x3368014C, 0x12690148,
+    0x1F6A0140, 0x2E610140, 0x2D0E0000, 0x23620148,
+    0x2E020000, 0x1632FFFE, 0x1C0A0000, 0x2E680154,
+    0x20620144, 0x020C0000, 0x11600150, 0x00208200,
+    0x08800D7D, 0x1F6A0140, 0x12690148, 0x3368014C,
+    0x23620148, 0x2E610140, 0x3930FFFE, 0x1C0A0000,
+    0x2E680154, 0x20620144, 0x020C0000, 0x11600150,
+    0x00208200, 0x08800D7D, 0x25635F4E, 0x146B5F42,
+    0x356A5F46, 0x38200008, 0x1A210000, 0x0A330002,
+    0x07D0099B, 0x28038000, 0x1632FFFE, 0x3D33FFFF,
+    0x2E0EC000, 0x062309A6, 0x34800338, 0x2F9702C0,
+    0x356A5F46, 0x329702B4, 0x356A5F46, 0x329702B4,
+    0x356A5F46, 0x329702B4, 0x356A5F46, 0x329702B4,
+    0x356A5F46, 0x329702B4, 0x3E695F48, 0x356A5F46,
+    0x18350001, 0x1FC809B9, 0x2D200028, 0x33970365,
+    0x19685F4A, 0x33695F4C, 0x1632FFFE, 0x1A048000,
+    0x19C409B3, 0x1E2D0001, 0x01615F4C, 0x2B605F4A,
+    0x0A20FFFF, 0x1A210000, 0x356A5F46, 0x162309BA,
+    0x34800338, 0x30970655, 0x356A5F46, 0x25200010,
+    0x1A210000, 0x176B5F4E, 0x34800338, 0x0620FFFC,
+    0x2C970376, 0x03361F00, 0x2DC80207, 0x23320008,
+    0x33620138, 0x3F2A0011, 0x2EC40207, 0x2197038B,
+    0x236B0130, 0x2D010000, 0x2435FFFE, 0x26C80205,
+    0x3008C000, 0x3BC009CF, 0x17CC0205, 0x126B5F44,
+    0x112E0002, 0x07625F46, 0x3D2F0002, 0x20635F44,
+    0x3D33FFFF, 0x1632FFFE, 0x2E0EC000, 0x1632FFFE,
+    0x36970396, 0x2E680138, 0x3D695F44, 0x02030000,
+    0x0B2B0003, 0x19C409DF, 0x3A200003, 0x392C0003,
+    0x15072000, 0x333B0000, 0x14CC0209, 0x36695F46,
+    0x092E0010, 0x2B034000, 0x1931FFFD, 0x1C09C000,
+    0x040E4000, 0x082A0800, 0x26C40209, 0x249702AE,
+    0x36200000, 0x15210120, 0x146B5F42, 0x356A5F46,
+    0x06330001, 0x0BD009F4, 0x0F2309F5, 0x34800338,
+    0x2F9702C0, 0x0C970BB5, 0x356A5F46, 0x2D200028,
+    0x1A210000, 0x32970338, 0x389702B1, 0x3D695F44,
+    0x1A685F46, 0x1231FFFF, 0x2E0D0000, 0x20610124,
+    0x3E30FFFF, 0x2E0D0000, 0x2D610120, 0x1F970CDC,
+    0x01690134, 0x1C6A0120, 0x1861B010, 0x172E0068,
+    0x0862B000, 0x0662B008, 0x31208808, 0x3760B01C,
+    0x362300AF, 0x1E940CE1, 0x2169B024, 0x1C390000,
+    0x18D00A1B, 0x12690124, 0x03208400, 0x142D0068,
+    0x0661B004, 0x3760B01C, 0x362300AF, 0x1E940CE1,
+    0x2C69B020, 0x25310002, 0x1ED00A1D, 0x13970CE9,
+    0x2280020D, 0x13970CE9, 0x1A685F46, 0x3D695F44,
+    0x1C6A0120, 0x0C600124, 0x2E0D0000, 0x23610128,
+    0x0C690130, 0x2E6B0134, 0x3930FFFE, 0x2D0E0000,
+    0x2D62012C, 0x11630130, 0x33610134, 0x19220000,
+    0x12625F3C, 0x1320E000, 0x32970221, 0x28680164,
+    0x0F690150, 0x30380000, 0x1BD00E5E, 0x2D6B0154,
+    0x126A0144, 0x3368014C, 0x30610154, 0x312F0001,
+    0x12630150, 0x1C690140, 0x2E62014C, 0x02600140,
+    0x28004000, 0x040D8000, 0x20610148, 0x1132FFFF,
+    0x19088000, 0x0F600144, 0x00208200, 0x0E970D7D,
+    0x2B680168, 0x2D6B0154, 0x30380000, 0x1BD00E5E,
+    0x1C6A014C, 0x12690148, 0x12630150, 0x23620148,
+    0x35098000, 0x2E610140, 0x040D8000, 0x1132FFFF,
+    0x040D8000, 0x2D61014C, 0x3620F000, 0x0E970D7D,
+    0x3E680148, 0x1F69014C, 0x1F6A0140, 0x35230000,
+    0x0C630144, 0x0160014C, 0x2E0D0000, 0x20610148,
+    0x2D0E0000, 0x2D620140, 0x1B208001, 0x0E970D7D,
+    0x116A0148, 0x3368014C, 0x1C690140, 0x2D6B0154,
+    0x2D620140, 0x2D0E0000, 0x3E30FFFF, 0x2D0E0000,
+    0x23620148, 0x1F090000, 0x23610144, 0x3D33FFFF,
+    0x12630150, 0x0F208010, 0x0E970D7D, 0x04690164,
+    0x3368014C, 0x1C390000, 0x1BD00E5E, 0x1C690140,
+    0x116A0148, 0x206B0150, 0x20610148, 0x2D620140,
+    0x312F0001, 0x12630150, 0x1F090000, 0x23610144,
+    0x1B208001, 0x0E970D7D, 0x0C6A0150, 0x2D6B0154,
+    0x3368014C, 0x12690148, 0x2E0EC000, 0x3E620150,
+    0x010F0000, 0x3A33FFFE, 0x3D635F5C, 0x3E6B0144,
+    0x2E610140, 0x300B0000, 0x0F630148, 0x3930FFFE,
+    0x300B0000, 0x0C630144, 0x00208200, 0x0E970D7D,
+    0x0C970D8F, 0x07690168, 0x236A5F5C, 0x1C390000,
+    0x1BD00E5E, 0x06970E75, 0x2B200018, 0x0E800E7D,
+    0x0120FFFD, 0x2C970376, 0x03361F00, 0x2DC80207,
+    0x23320008, 0x33620138, 0x3F2A0011, 0x2EC40207,
+    0x2197038B, 0x236B0130, 0x2D010000, 0x2435FFFE,
+    0x26C80205, 0x3008C000, 0x3FC00AA8, 0x17CC0205,
+    0x126B5F44, 0x112E0002, 0x07625F46, 0x3D2F0002,
+    0x20635F44, 0x0200C000, 0x3D33FFFF, 0x010F0000,
+    0x1632FFFE, 0x2E0EC000, 0x1632FFFE, 0x36970396,
+    0x2E680138, 0x3D695F44, 0x02030000, 0x0B2B0003,
+    0x16C40ABA, 0x3A200003, 0x3F2C0005, 0x15072000,
+    0x333B0000, 0x14CC0209, 0x36695F46, 0x092E0010,
+    0x1531FFFE, 0x040E4000, 0x082A0800, 0x26C40209,
+    0x249702AE, 0x36200000, 0x1A210000, 0x3E6A5F44,
+    0x32970338, 0x0C970BB5, 0x356A5F46, 0x2D200028,
+    0x1A210000, 0x1132FFFF, 0x32970338, 0x389702B1,
+    0x11685F44, 0x36695F46, 0x2E020000, 0x2B034000,
+    0x3E30FFFF, 0x1231FFFF, 0x280C8000, 0x0C600124,
+    0x2B0C4000, 0x0F600128, 0x010CC000, 0x01600120,
+    0x1F970CDC, 0x01690134, 0x126A0128, 0x3E610130,
+    0x1861B010, 0x172E0068, 0x0862B000, 0x0662B008,
+    0x31208808, 0x3760B01C, 0x362300AF, 0x1E940CE1,
+    0x2169B024, 0x1C390000, 0x26D40AED, 0x13970CE9,
+    0x2480020B, 0x12690124, 0x03208400, 0x142D0068,
+    0x0661B004, 0x3760B01C, 0x362300AF, 0x1E940CE1,
+    0x2C69B020, 0x25310002, 0x20D40AEB, 0x1C6A0120,
+    0x31208808, 0x172E0068, 0x0862B000, 0x0662B008,
+    0x3760B01C, 0x362300AF, 0x1E940CE1, 0x2169B024,
+    0x1C390000, 0x11D00AEB, 0x03208400, 0x3760B01C,
+    0x362300AF, 0x1E940CE1, 0x2C69B020, 0x25310002,
+    0x20D40AEB, 0x13970CE9, 0x1A685F46, 0x1F690120,
+    0x0F600128, 0x2E0D0000, 0x2E61012C, 0x19220000,
+    0x12625F3C, 0x3620F000, 0x32970221, 0x3E680148,
+    0x1C6A014C, 0x1C690140, 0x0160014C, 0x20620144,
+    0x1F090000, 0x2E610140, 0x2D0E0000, 0x23620148,
+    0x1B208001, 0x0E970D7D, 0x3368014C, 0x12690148,
+    0x1F6A0140, 0x2E610140, 0x07018000, 0x2E0D0000,
+    0x20610148, 0x3E30FFFF, 0x1C0A0000, 0x2E680154,
+    0x20620144, 0x020C0000, 0x11600150, 0x00208200,
+    0x0E970D7D, 0x016A0154, 0x3368014C, 0x336B0140,
+    0x3E620150, 0x12690148, 0x0F630148, 0x300B0000,
+    0x0C630144, 0x3E30FFFF, 0x1F090000, 0x2E610140,
+    0x1B208001, 0x0E970D7D, 0x3368014C, 0x1F6A0140,
+    0x12690148, 0x23620148, 0x1C0A0000, 0x2E680154,
+    0x20620144, 0x2E610140, 0x020C0000, 0x11600150,
+    0x00208200, 0x0E970D7D, 0x3368014C, 0x2D6B0154,
+    0x12690148, 0x1F6A0140, 0x12630150, 0x2E610140,
+    0x2D695F58, 0x1C0A0000, 0x2E62014C, 0x1F2D0030,
+    0x0D4A4000, 0x1F2D0006, 0x0E494000, 0x0F3607FC,
+    0x26320002, 0x33620154, 0x28038000, 0x06330001,
+    0x22D40B5A, 0x1D2E0001, 0x112E0002, 0x20620144,
+    0x1132FFFF, 0x23620148, 0x00351F00, 0x20310008,
+    0x33610158, 0x1320E000, 0x0E970D7D, 0x3D680144,
+    0x1C6A014C, 0x1C690140, 0x206B0150, 0x2D0E0000,
+    0x2E62014C, 0x0200C000, 0x06330001, 0x25D40B6D,
+    0x322C0001, 0x3E2C0002, 0x3E30FFFF, 0x2E0D0000,
+    0x2E610140, 0x1A210000, 0x20610148, 0x1320E000,
+    0x0E970D7D, 0x206B0150, 0x2E680154, 0x1C6A014C,
+    0x0263014C, 0x11600150, 0x1C600154, 0x02030000,
+    0x06330001, 0x3DD40B7F, 0x322C0001, 0x3E2C0002,
+    0x20620144, 0x1C0A0000, 0x2D620140, 0x3E30FFFF,
+    0x2D0E0000, 0x23620148, 0x1B208001, 0x0E970D7D,
+    0x12690148, 0x126A0144, 0x206B0150, 0x2E610140,
+    0x23620148, 0x0200C000, 0x3D33FFFF, 0x12630150,
+    0x1C600154, 0x02030000, 0x06330001, 0x22D40B95,
+    0x322C0001, 0x3E2C0002, 0x0F600144, 0x00208200,
+    0x0E970D7D, 0x11690144, 0x116A0148, 0x3368014C,
+    0x2D6B0154, 0x2D620140, 0x12630150, 0x1C600154,
+    0x02030000, 0x06330001, 0x23D40BA4, 0x322C0001,
+    0x3E2C0002, 0x0160014C, 0x350A4000, 0x23620148,
+    0x3930FFFE, 0x1C0A0000, 0x20620144, 0x00208200,
+    0x0E970D7D, 0x12690148, 0x016A0154, 0x306B014C,
+    0x2E610140, 0x3E620150, 0x3D33FFFF, 0x1C09C000,
+    0x09800889, 0x25635F4E, 0x146B5F42, 0x38200008,
+    0x1A210000, 0x3E6A5F44, 0x0A330002, 0x1BD00BC1,
+    0x196B5F46, 0x1132FFFF, 0x2E0EC000, 0x0B230BD1,
+    0x34800338, 0x2F9702C0, 0x3E6A5F44, 0x329702B4,
+    0x3E6A5F44, 0x19685F4A, 0x33695F4C, 0x1632FFFE,
+    0x1A048000, 0x1AC40BCC, 0x1E2D0001, 0x01615F4C,
+    0x2B605F4A, 0x356A5F46, 0x0A20FFFF, 0x1A210000,
+    0x2F9702C0, 0x356A5F46, 0x25200010, 0x1A210000,
+    0x176B5F4E, 0x34800338, 0x32800211, 0x02030000,
+    0x0C37FFFF, 0x09CC0211, 0x0F2C0BDC, 0x21884000,
+    0x07800BDD, 0x20970375, 0x3E20000E, 0x2297037E,
+    0x093C000E, 0x17CC0205, 0x2A2001FF, 0x2297037E,
+    0x3D605F3C, 0x3F340003, 0x17CC0205, 0x122E000E,
+    0x1632FFFE, 0x36970396, 0x249702AE, 0x1122000E,
+    0x36200000, 0x1A210000, 0x32970338, 0x01685F34,
+    0x122101D8, 0x3E610106, 0x3B2C0008, 0x27490000,
+    0x3E2C0002, 0x0B480000, 0x07615F4A, 0x2D605F4C,
+    0x0F685F3C, 0x30695F40, 0x3930FFFE, 0x36605F3E,
+    0x1F090000, 0x10C40BFF, 0x2E605F40, 0x202001A0,
+    0x04230C04, 0x19600104, 0x3B635F36, 0x328002E8,
+    0x25200010, 0x19600104, 0x24800431, 0x369700FC,
+    0x15220003, 0x1F62B438, 0x2C695FCA, 0x04685EDE,
+    0x19220000, 0x1461B400, 0x1162B406, 0x30380000,
+    0x36C800A5, 0x2A340080, 0x19C80C16, 0x1E200C27,
+    0x1B230C17, 0x288000B4, 0x36605EDE, 0x09685EEC,
+    0x332300A5, 0x19220000, 0x14625EEC, 0x28695EDE,
+    0x366A5EF0, 0x30380000, 0x27C80104, 0x01198000,
+    0x2E6A5F02, 0x01198000, 0x336A5EA0, 0x24D000B4,
+    0x3C36FDFF, 0x01625EA0, 0x288000B4, 0x22215EDE,
+    0x1F220006, 0x14970FB4, 0x2F215EEC, 0x21510000,
+    0x21510000, 0x21884000, 0x1F220030, 0x1F62B438,
+    0x21695FCE, 0x19685EF0, 0x19220000, 0x0161B420,
+    0x0462B426, 0x30380000, 0x3AC800A6, 0x2A340080,
+    0x09C80C3C, 0x17200C42, 0x0B230C3D, 0x288000B4,
+    0x2B605EF0, 0x11685EFE, 0x3F2300A6, 0x19220000,
+    0x0C625EFE, 0x17800C1B, 0x3F215EF0, 0x1F220006,
+    0x14970FB4, 0x37215EFE, 0x21510000, 0x21510000,
+    0x21884000, 0x1F220300, 0x1F62B438, 0x21695FCE,
+    0x01685F02, 0x19220000, 0x0261B440, 0x0762B446,
+    0x30380000, 0x3DC800A7, 0x2A340080, 0x08C80C57,
+    0x0B200C5D, 0x02230C58, 0x288000B4, 0x33605F02,
+    0x19685F10, 0x382300A7, 0x19220000, 0x04625F10,
+    0x17800C1B, 0x27215F02, 0x1F220006, 0x14970FB4,
+    0x3F215F10, 0x21510000, 0x21510000, 0x21884000,
+    0x04685EDE, 0x22215EDE, 0x30380000, 0x1AD00C70,
+    0x03205EEC, 0x0B518000, 0x0D500000, 0x30695EA0,
+    0x0D500000, 0x00390200, 0x02615EA0, 0x228B4000,
+    0x0200C000, 0x1F220006, 0x362300AF, 0x1D800FD7,
+    0x19685EF0, 0x3F215EF0, 0x30380000, 0x1AD00C70,
+    0x1B205EFE, 0x0C800C69, 0x01685F02, 0x27215F02,
+    0x30380000, 0x1AD00C70, 0x13205F10, 0x0C800C69,
+    0x04685EDE, 0x22215EDE, 0x30380000, 0x36D40C68,
+    0x398000AF, 0x19685EF0, 0x3F215EF0, 0x30380000,
+    0x35D000AF, 0x1B205EFE, 0x0C800C69, 0x3B605EEC,
+    0x1C615EEE, 0x228B4000, 0x23605EFE, 0x14615F00,
+    0x228B4000, 0x2B605F10, 0x0C615F12, 0x228B4000,
+    0x19685EF0, 0x1A210000, 0x30380000, 0x0AC80CA5,
+    0x1F61B434, 0x226A5FCE, 0x0761B426, 0x0262B420,
+    0x2A340080, 0x0DC80CA4, 0x28635E9C, 0x3F215EF0,
+    0x1F220006, 0x14970FB4, 0x1A6B5E9C, 0x288000B4,
+    0x07615EF0, 0x228B4000, 0x2E620116, 0x0F200CA9,
+    0x288000B4, 0x19970C80, 0x1C6A0116, 0x0D20B404,
+    0x19500011, 0x01500003, 0x1150C400, 0x0A500001,
+    0x0E500180, 0x0D500000, 0x0962B414, 0x352000AF,
+    0x192100AF, 0x362300AF, 0x1D800C8B, 0x01690102,
+    0x36200000, 0x0A350020, 0x20C80203, 0x30218000,
+    0x1F615ED4, 0x3B605EDA, 0x3D605EDC, 0x228B4000,
+    0x2D695ED4, 0x30380000, 0x27C80104, 0x1C390000,
+    0x1DD40100, 0x3B605EDA, 0x228B4000, 0x2D695ED4,
+    0x30380000, 0x27C80104, 0x1C390000, 0x1DD40100,
+    0x3D605EDC, 0x228B4000, 0x01685ED4, 0x27215ED4,
+    0x30380000, 0x16D40102, 0x21510000, 0x228B4000,
+    0x30695ECC, 0x07685ED2, 0x1C390000, 0x06D400A4,
+    0x30380000, 0x31C800A4, 0x342300A4, 0x288000B4,
+    0x3A215ECC, 0x0B518000, 0x36200000, 0x35605ED2,
+    0x228B4000, 0x30695ECC, 0x35605ED2, 0x1C390000,
+    0x30695EA0, 0x1DD40100, 0x12390008, 0x02615EA0,
+    0x228B4000, 0x336A5EA0, 0x1C685ECC, 0x3A215ECC,
+    0x2E36FFF7, 0x01625EA0, 0x30380000, 0x16D40102,
+    0x21510000, 0x228B4000, 0x04685F52, 0x30218000,
+    0x2D144000, 0x04CC00A9, 0x1A615F52, 0x302300A9,
+    0x06200CFA, 0x288000B4, 0x29200400, 0x2660B144,
+    0x06210200, 0x1468B144, 0x3C34000F, 0x2B190000,
+    0x0A61B144, 0x07645F52, 0x2D010000, 0x20310008,
+    0x1139A0C8, 0x214B4000, 0x0F2D002C, 0x0E494000,
+    0x2E020000, 0x06330001, 0x20377F00, 0x1263010A,
+    0x21320003, 0x1A625F68, 0x2E020000, 0x1032FFF8,
+    0x313A4001, 0x11625F6A, 0x2E020000, 0x1132FFFF,
+    0x2E2E0D17, 0x04230D2B, 0x0E8A4000, 0x15205F7A,
+    0x228B4000, 0x12205F82, 0x228B4000, 0x1C205F8A,
+    0x228B4000, 0x01205F92, 0x228B4000, 0x0F205F9A,
+    0x228B4000, 0x07205FA2, 0x228B4000, 0x09205FAA,
+    0x228B4000, 0x14205FB2, 0x228B4000, 0x1A205FBA,
+    0x228B4000, 0x04205FC2, 0x228B4000, 0x38605F6C,
+    0x27490000, 0x3E2C0002, 0x084B0000, 0x3E2C0002,
+    0x244A0000, 0x3E2C0002, 0x0B480000, 0x1F615F58,
+    0x38635F56, 0x17625F5A, 0x3E605F5C, 0x1E970E3D,
+    0x236A5F5C, 0x266B010C, 0x1F3A0000, 0x01C80D47,
+    0x19213000, 0x35098000, 0x190B4000, 0x3061010E,
+    0x39C00D42, 0x27CC0E5C, 0x0A685F5A, 0x04230D47,
+    0x33635F54, 0x046B5F68, 0x07800E42, 0x0F69010A,
+    0x0A6B5F56, 0x20310008, 0x08C80D78, 0x2E6A5F58,
+    0x05390080, 0x162E0035, 0x0E458000, 0x0C970D8F,
+    0x04685F52, 0x1B230D54, 0x16341000, 0x3ECC1043,
+    0x3A2000A0, 0x00645F53, 0x2D695F58, 0x34970284,
+    0x0269010E, 0x1A223000, 0x350A4000, 0x0BC80D74,
+    0x28680108, 0x25620114, 0x30380000, 0x12C80D61,
+    0x0A970CA6, 0x15970C7A, 0x0269010E, 0x1B20B444,
+    0x19500011, 0x0A500001, 0x1150C400, 0x0A500001,
+    0x2335FFFF, 0x15410000, 0x176A0114, 0x3E2C0002,
+    0x0D500000, 0x1F62B454, 0x0B200D72, 0x27210D72,
+    0x362300AF, 0x0B800C91, 0x35203000, 0x1C60010E,
+    0x1A210000, 0x36610108, 0x1A615F52, 0x398000AF,
+    0x19220000, 0x3662015E, 0x228B4000, 0x1D210001,
+    0x3561015E, 0x1260015C, 0x38635F56, 0x00970E1F,
+    0x076B5F52, 0x0A685F6C, 0x3F37000F, 0x293B0100,
+    0x2563B144, 0x25695F56, 0x3E2C0002, 0x15410000,
+    0x26695F5A, 0x3E2C0002, 0x15410000, 0x20695F5C,
+    0x3E2C0002, 0x15410000, 0x17800D58, 0x04685F52,
+    0x3569B140, 0x3930FFFE, 0x3CD003A0, 0x33635F54,
+    0x09300002, 0x02030000, 0x3C34000F, 0x3D3CFFFF,
+    0x33228000, 0x1A120000, 0x301D8000, 0x0761B140,
+    0x336A5EA0, 0x2BCC0DA0, 0x2D36FFFB, 0x01625EA0,
+    0x3D3CFFFF, 0x3A225F7A, 0x3530FFFD, 0x1F060000,
+    0x22520000, 0x22520000, 0x153B2000, 0x07685F32,
+    0x35635F52, 0x1A344000, 0x09C80DB0, 0x0A685F36,
+    0x2E9700B4, 0x02685F54, 0x362300AF, 0x288000B4,
+    0x04685F52, 0x3569B140, 0x1F238000, 0x3C34000F,
+    0x2E020000, 0x123EFFFF, 0x1C138000, 0x2819C000,
+    0x0761B140, 0x3F30FFF8, 0x2838A084, 0x18500020,
+    0x3B680118, 0x2E695F54, 0x0418C000, 0x09600118,
+    0x351CC000, 0x2BCC0DFA, 0x2361011E, 0x07685F68,
+    0x0763011C, 0x0260011A, 0x15970C7A, 0x336B011A,
+    0x1B20B444, 0x1C500041, 0x0A500001, 0x0E500180,
+    0x0D500000, 0x2D02C000, 0x2636FF00, 0x0262B44C,
+    0x363700FF, 0x2563B44E, 0x3F222000, 0x1F62B454,
+    0x3E6B011E, 0x36200000, 0x0F60011E, 0x333B0000,
+    0x3ECC0DDA, 0x362300AF, 0x08200DDD, 0x24210DDD,
+    0x0B800C91, 0x3668011C, 0x3569B140, 0x146A0118,
+    0x1A1D0000, 0x0761B140, 0x191E0000, 0x26620118,
+    0x19C80DF6, 0x36200000, 0x1D210001, 0x28038000,
+    0x2E174000, 0x39CC0DED, 0x322C0001, 0x1231FFFF,
+    0x07800DE7, 0x2861011C, 0x0E300003, 0x2B695F32,
+    0x0260011A, 0x36354000, 0x1FC80DC6, 0x19200DC6,
+    0x096B5F36, 0x288000B4, 0x07685F32, 0x26695F36,
+    0x1A344000, 0x33C800AF, 0x0D894000, 0x1F3A0000,
+    0x3AC803A0, 0x3B635F36, 0x1A6B5F4A, 0x19600104,
+    0x3E610106, 0x19625F3E, 0x23635F48, 0x1D970C74,
+    0x2B680104, 0x0F6A0106, 0x116B5F48, 0x2360B428,
+    0x3C21B42A, 0x21510000, 0x0200C000, 0x0934FF00,
+    0x281A0000, 0x0162B42C, 0x363700FF, 0x2663B42E,
+    0x2B6A5F3E, 0x27200041, 0x2060B424, 0x1C62B434,
+    0x36210E03, 0x362300AF, 0x12940C8E, 0x096B5F36,
+    0x228B4000, 0x3B635F36, 0x39200120, 0x1A210000,
+    0x0C220020, 0x1C6B5F4C, 0x1A800DFF, 0x33635F54,
+    0x0F6B5F6A, 0x3A200140, 0x1A210000, 0x0C220020,
+    0x3B605F60, 0x1C615F62, 0x12625F66, 0x36635F5E,
+    0x15970C7A, 0x09685F60, 0x2D6A5F62, 0x046B5F5E,
+    0x2060B448, 0x3F21B44A, 0x21510000, 0x0200C000,
+    0x0934FF00, 0x281A0000, 0x0262B44C, 0x363700FF,
+    0x2563B44E, 0x206A5F66, 0x27200041, 0x2360B444,
+    0x1F62B454, 0x16200E5A, 0x21210E28, 0x362300AF,
+    0x0B800C91, 0x33635F54, 0x36200000, 0x16210140,
+    0x0F22002C, 0x0F6B5F6A, 0x3B605F60, 0x1C615F62,
+    0x12625F66, 0x36635F5E, 0x15970C7A, 0x286A5F5E,
+    0x09685F60, 0x2E695F62, 0x28038000, 0x0A37FF00,
+    0x0418C000, 0x2060B448, 0x1A3600FF, 0x0462B44A,
+    0x0161B44C, 0x36200000, 0x2660B44E, 0x206A5F66,
+    0x22200011, 0x2360B444, 0x1F62B454, 0x2A210E46,
+    0x362300AF, 0x0E940C91, 0x016B5F54, 0x228B4000,
+    0x0B210041, 0x08800D4B, 0x08210021, 0x08800D4B,
+    0x2E6A5F58, 0x04690164, 0x012E0028, 0x1C390000,
+    0x01D00E71, 0x1F090000, 0x1531FFFE, 0x2B680168,
+    0x3F418000, 0x2F34001F, 0x112E0002, 0x13408000,
+    0x2B008000, 0x3E2C0002, 0x0D500000, 0x0D500000,
+    0x228B4000, 0x1C208000, 0x13408000, 0x36200000,
+    0x1C800E6A, 0x01685F58, 0x1A210000, 0x2E2C0028,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x15410000,
+    0x228B4000, 0x0A230D4F, 0x0F3607FC, 0x3AC803A0,
+    0x33635F54, 0x026B5F58, 0x12625F66, 0x010CC000,
+    0x084B0000, 0x3E2C0002, 0x0B480000, 0x33635F62,
+    0x2D6B010E, 0x36605F64, 0x2D0DC000, 0x36610108,
+    0x0E970C64, 0x02685F62, 0x28695F64, 0x3B60B40C,
+    0x1C61B40E, 0x28680108, 0x206A5F66, 0x2921B40A,
+    0x3660B408, 0x21510000, 0x28200081, 0x3560B404,
+    0x0962B414, 0x02685F54, 0x20210E8C, 0x362300AF,
+    0x1D800C8B, 0x2D695F6E, 0x1C208000, 0x28150000,
+    0x17C80EA2, 0x228B4000, 0x336A5EA0, 0x33605F6E,
+    0x14200EA8, 0x2B36FFFD, 0x01625EA0, 0x288000B4,
+    0x15685FDC, 0x2D695F6E, 0x30380000, 0x08C80F0B,
+    0x28605F70, 0x232C0040, 0x27490000, 0x2E655F6E,
+    0x3865B112, 0x1F31FFFB, 0x232D4010, 0x0D4A4000,
+    0x1F6BB110, 0x122D0002, 0x1F0AC000, 0x24C00EFF,
+    0x214B4000, 0x2C2DFFF6, 0x333B0000, 0x25D40EC4,
+    0x1A685F70, 0x012D0012, 0x0D4A4000, 0x282C0042,
+    0x084B0000, 0x312DFFEE, 0x1F1F8000, 0x3CCC0F01,
+    0x28004000, 0x37215F72, 0x02970FF4, 0x3D695F72,
+    0x332C0006, 0x13350003, 0x3DCC0F06, 0x37215F72,
+    0x2922FFFC, 0x1C97100A, 0x1A685F70, 0x33215FDC,
+    0x1D970F72, 0x1797103E, 0x0E970C64, 0x196B5F70,
+    0x11685F72, 0x3B695F74, 0x2A22B40A, 0x3563B408,
+    0x22520000, 0x3B60B40C, 0x1C61B40E, 0x28200081,
+    0x3560B404, 0x20200040, 0x2660B414, 0x21210ED1,
+    0x362300AF, 0x18940C8B, 0x01685F6E, 0x39695FEA,
+    0x353400FF, 0x3330FFFB, 0x0A2C401A, 0x084B0000,
+    0x1E2D0001, 0x312F0001, 0x3A430000, 0x002CFFF6,
+    0x244A0000, 0x332C0006, 0x084B0000, 0x0B615FEA,
+    0x312F0001, 0x1F0AC000, 0x17C40EF4, 0x35230000,
+    0x3A430000, 0x2E6A5F6E, 0x1A685F70, 0x1A3600FF,
+    0x3A3A1000, 0x1462B130, 0x15970F4A, 0x1C208000,
+    0x33605F6E, 0x17230EA8, 0x33800126, 0x0D210088,
+    0x29655F6F, 0x1A685F70, 0x2D695F6E, 0x3D2C0038,
+    0x0B480000, 0x13800EAA, 0x20970106, 0x1A685F70,
+    0x33215FDC, 0x19230EFA, 0x1B800F72, 0x336A5EA0,
+    0x3C350800, 0x1F615F6E, 0x33C800AF, 0x143A0002,
+    0x01625EA0, 0x398000AF, 0x1768B148, 0x05300001,
+    0x1DD00F1B, 0x03300007, 0x19D00F20, 0x0C300008,
+    0x3D3CFFFF, 0x1464B148, 0x388000A8, 0x35230000,
+    0x2663B148, 0x39635FF2, 0x32635FF0, 0x19800F15,
+    0x0E710048, 0x13710149, 0x2871804B, 0x1E800F22,
+    0x00685FFC, 0x276AB1F8, 0x0934FF00, 0x0C300008,
+    0x322C0001, 0x03361F00, 0x23320008, 0x1C0A0000,
+    0x1DC0010A, 0x3F225E90, 0x3330FFFB, 0x1C2C4000,
+    0x1C0A0000, 0x15C00104, 0x2F605FD2, 0x06625FD4,
+    0x242A000F, 0x03C000FE, 0x228B4000, 0x10685FD6,
+    0x37695FD4, 0x30380000, 0x04C80F3E, 0x27490000,
+    0x0E615FD6, 0x228B4000, 0x33290044, 0x28C00F46,
+    0x1D685FD2, 0x05615FD4, 0x2D010000, 0x022D0044,
+    0x03615FD2, 0x228B4000, 0x361C0000, 0x2F605FD2,
+    0x29605FD4, 0x228B4000, 0x3C695FD6, 0x30380000,
+    0x27C80104, 0x15410000, 0x22605FD6, 0x228B4000,
+    0x1C390000, 0x31C800FE, 0x0D4A4000, 0x30380000,
+    0x27C80104, 0x10404000, 0x1F3A0000, 0x07C80F5E,
+    0x362C003A, 0x16420000, 0x122E0038, 0x062CFFC6,
+    0x13408000, 0x228B4000, 0x222DFFFE, 0x10404000,
+    0x228B4000, 0x1C390000, 0x31C800FE, 0x0D4A4000,
+    0x30380000, 0x27C80104, 0x10404000, 0x1F3A0000,
+    0x06C80F6F, 0x3D2C0038, 0x16420000, 0x192E003A,
+    0x0E2CFFC8, 0x13408000, 0x228B4000, 0x122D0002,
+    0x10404000, 0x228B4000, 0x1C390000, 0x31C800FE,
+    0x30380000, 0x27C80104, 0x2D635E96, 0x362C003A,
+    0x084B0000, 0x0E2CFFFE, 0x244A0000, 0x333B0000,
+    0x19C80F85, 0x1F3A0000, 0x0BC80F92, 0x3E2F0038,
+    0x1542C000, 0x192E003A, 0x0D2FFFC8, 0x10438000,
+    0x1D800F8D, 0x3F424000, 0x1F3A0000, 0x11C80F8B,
+    0x192E003A, 0x10438000, 0x1D800F8D, 0x122D0002,
+    0x3F424000, 0x0D500000, 0x0D500000, 0x1F6B5E96,
+    0x0D2CFFC4, 0x228B4000, 0x122D0002, 0x3F424000,
+    0x3E2F0038, 0x1542C000, 0x1D800F8D, 0x2A320001,
+    0x0A367FFF, 0x03C80FAA, 0x252A0008, 0x32C00FA6,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x03C80FAA, 0x0F800F9A, 0x26260008, 0x0D500000,
+    0x262EFFFF, 0x36CC0FA7, 0x228B4000, 0x26635E94,
+    0x14970FB4, 0x146B5E94, 0x288000B4, 0x26635E94,
+    0x14970FB4, 0x02030000, 0x17685E94, 0x288000B4,
+    0x22484000, 0x0F615E92, 0x28605E90, 0x0C300008,
+    0x2BD40FD5, 0x2D635E96, 0x2C34007F, 0x3E30FFFF,
+    0x122D0002, 0x2E0D0000, 0x214B4000, 0x05300001,
+    0x322C0001, 0x36695E90, 0x191E0000, 0x3ECC0FC5,
+    0x36200000, 0x07024000, 0x36368000, 0x0035007F,
+    0x1A1D0000, 0x3D695E92, 0x1AC80FD3, 0x23320008,
+    0x281A0000, 0x1E2D0001, 0x0E464000, 0x0200C000,
+    0x1F6B5E96, 0x30380000, 0x228B4000, 0x3F424000,
+    0x00800FCF, 0x361C0000, 0x228B4000, 0x28605E90,
+    0x22484000, 0x0A625E94, 0x0C300008, 0x3FD40FF2,
+    0x2E020000, 0x0C300008, 0x2C34007F, 0x0336007F,
+    0x191E0000, 0x31C800FE, 0x3E30FFFF, 0x356A5E90,
+    0x0F615E92, 0x122D0002, 0x2E0D0000, 0x3F424000,
+    0x386A5E94, 0x3D695E92, 0x05300001, 0x322C0001,
+    0x191E0000, 0x2ECC0FEF, 0x36200000, 0x29380080,
+    0x21444000, 0x228B4000, 0x36200000, 0x16800FE3,
+    0x2D635E96, 0x084B0000, 0x3E2C0002, 0x13434000,
+    0x244A0000, 0x122D0002, 0x3F424000, 0x2E1B8000,
+    0x3E2C0002, 0x244A0000, 0x122D0002, 0x3F424000,
+    0x2E1B8000, 0x3E2C0002, 0x244A0000, 0x122D0002,
+    0x3F424000, 0x2B1AC000, 0x1F6B5E96, 0x3E2C0002,
+    0x122D0002, 0x228B4000, 0x28605E90, 0x0F615E92,
+    0x2D635E96, 0x27490000, 0x280C8000, 0x0B480000,
+    0x1C390000, 0x14C81031, 0x03340FFC, 0x0FC81019,
+    0x15280041, 0x3DC01019, 0x16240041, 0x15072000,
+    0x0480101E, 0x1831FFFA, 0x07024000, 0x2936FFC0,
+    0x2B034000, 0x3937003F, 0x3D695E92, 0x22484000,
+    0x1A048000, 0x10404000, 0x122D0002, 0x22484000,
+    0x2C04C400, 0x10404000, 0x17C41031, 0x122D0002,
+    0x22484000, 0x19220000, 0x05048400, 0x10404000,
+    0x17C41031, 0x122D0002, 0x22484000, 0x05048400,
+    0x10404000, 0x1F6B5E96, 0x1A685E90, 0x228B4000,
+    0x14685F14, 0x32215F14, 0x30380000, 0x10D0103A,
+    0x0B518000, 0x228B4000, 0x0200C000, 0x12220002,
+    0x362300AF, 0x1D800FD7, 0x14685F14, 0x3A215F1A,
+    0x30380000, 0x10D0103A, 0x228B4000, 0x14685F14,
+    0x32215F14, 0x30380000, 0x16D40102, 0x2A340080,
+    0x01C8104B, 0x12220002, 0x03800FAF, 0x21510000,
+    0x1C685F1A, 0x28635E9C, 0x30380000, 0x26CC1051,
+    0x228B4000, 0x3A215F1A, 0x12220002, 0x08970FAB,
+    0x1A6B5E9C, 0x0A80104C, 0x3DFFFFFF, 0x01000000,
+    0x01000000, 0x01000000
+};
+
+static const uint32_t fw2_farm_img_data_buf[2048] =
+{
+    0x132040FA, 0x29502501, 0x032040D0, 0x295046C7,
+    0x0D500000, 0x267001C9, 0x258C0200, 0x0F70AAC9,
+    0x176B40C8, 0x3B7000C8, 0x2D70001D, 0x2670001F,
+    0x18631FFC, 0x3370C033, 0x296A4010, 0x086B4014,
+    0x39621FF8, 0x16631FF4, 0x15684000, 0x34694004,
+    0x1E601FF6, 0x3F611FF2, 0x346A4008, 0x156B400C,
+    0x32621FFA, 0x1B631FF0, 0x3A9700C9, 0x1E684034,
+    0x2170001E, 0x3A34003F, 0x281A0000, 0x3F621FFE,
+    0x0628000B, 0x2AC4004F, 0x1D24002F, 0x21884000,
+    0x2380004F, 0x3A800036, 0x2880004D, 0x2B800041,
+    0x2380004F, 0x20800043, 0x2080002F, 0x3880003D,
+    0x26800045, 0x2D800047, 0x25800049, 0x276A4018,
+    0x34621FFC, 0x3E9701EB, 0x09300002, 0x31D0006D,
+    0x3930FFFE, 0x3080005F, 0x276A4018, 0x34621FFC,
+    0x3A970275, 0x09300002, 0x31D0006D, 0x3930FFFE,
+    0x3180006E, 0x2097032F, 0x268C0400, 0x16614018,
+    0x3080005F, 0x2297075B, 0x3080005F, 0x3B970714,
+    0x3080005F, 0x2497075D, 0x3080005F, 0x30970716,
+    0x3080005F, 0x38230004, 0x29671FFC, 0x3397042A,
+    0x3080005F, 0x3397078F, 0x3080005F, 0x3B7000C8,
+    0x24200021, 0x358C5000, 0x2E80007D, 0x2B707FC8,
+    0x08702084, 0x2D70001D, 0x36200000, 0x2D010000,
+    0x1E220001, 0x3997009F, 0x01684084, 0x26340020,
+    0x01CC005A, 0x3920000F, 0x3080005F, 0x238C0100,
+    0x376A4032, 0x1F36C000, 0x3EC80064, 0x2120002B,
+    0x09300002, 0x31D0006D, 0x1B601FFC, 0x2A681FF0,
+    0x246A4014, 0x2D010000, 0x2460400C, 0x3997009F,
+    0x29681FFC, 0x3930FFFE, 0x036A1FF6, 0x276B1FF8,
+    0x08624000, 0x37634010, 0x0D6A1FFE, 0x279700D1,
+    0x0E6A1FF2, 0x246B1FF4, 0x05624004, 0x3A634014,
+    0x006A1FFA, 0x35230000, 0x06624008, 0x358C5000,
+    0x3463401C, 0x106440C9, 0x3C800006, 0x376B1FE4,
+    0x228B4000, 0x3C6B1FE6, 0x228B4000, 0x2C681FF6,
+    0x252DFFFF, 0x07024000, 0x2F36FFF0, 0x21320003,
+    0x3930FFFE, 0x1F060000, 0x0E4A8000, 0x28004000,
+    0x3C34000F, 0x1A120000, 0x228B4000, 0x24681FF8,
+    0x3330FFFB, 0x00601FE2, 0x228B4000, 0x3F8C0480,
+    0x33BC0053, 0x1B61401C, 0x228B4000, 0x2D010000,
+    0x3930FFFE, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x09300002, 0x202A0002, 0x0B614000,
+    0x1B624010, 0x29604008, 0x1D218808, 0x3C800093,
+    0x0B631FEC, 0x0B614000, 0x086A1FF4, 0x2D010000,
+    0x1668400C, 0x1B624010, 0x299700D9, 0x18684004,
+    0x0D691FF2, 0x086A1FF4, 0x396B1FEC, 0x2F8000EF,
+    0x37694008, 0x268C0400, 0x0D684024, 0x04140000,
+    0x19D400B7, 0x36200000, 0x228B4000, 0x00240001,
+    0x1A084000, 0x228B4000, 0x3930FFFE, 0x15410000,
+    0x0C240002, 0x0D500000, 0x09300002, 0x262EFFFF,
+    0x31800097, 0x13684030, 0x37380001, 0x21604030,
+    0x228B4000, 0x13684030, 0x0834FFFE, 0x21604030,
+    0x228B4000, 0x386A40C4, 0x3F694030, 0x1B360001,
+    0x1732FFF9, 0x18350001, 0x1831FFFA, 0x011A4000,
+    0x228B4000, 0x07018000, 0x28310006, 0x18350001,
+    0x0D614030, 0x2C320007, 0x1B360001, 0x0A6240C4,
+    0x228B4000, 0x29604008, 0x06614004, 0x16624014,
+    0x37218001, 0x268C0400, 0x1B61401C, 0x2A694010,
+    0x27604000, 0x36064000, 0x1B624010, 0x228B4000,
+    0x29604008, 0x06614004, 0x16624014, 0x2D218018,
+    0x268C0400, 0x1B61401C, 0x296A4010, 0x27604000,
+    0x2F260001, 0x1B624010, 0x228B4000, 0x29604008,
+    0x06614004, 0x16624014, 0x262EFFFF, 0x36058000,
+    0x1531FFFE, 0x22484000, 0x20250002, 0x0E494000,
+    0x2B190000, 0x0ACC00FB, 0x16624014, 0x1B684008,
+    0x2C218200, 0x268C0400, 0x1B61401C, 0x246A4014,
+    0x27604000, 0x1B624010, 0x228B4000, 0x1C2100FF,
+    0x26800106, 0x1A210000, 0x05631FE4, 0x24611FEC,
+    0x21681FF2, 0x2B6040A0, 0x0B691FF4, 0x27604000,
+    0x29604008, 0x18614010, 0x268C0400, 0x0970081C,
+    0x2470881D, 0x0FF00111, 0x3930FFFE, 0x27490000,
+    0x29310001, 0x3A200003, 0x18D4007F, 0x1231FFFF,
+    0x286540B4, 0x216B1FFE, 0x036A1FF6, 0x3D33FFFF,
+    0x38D00127, 0x276B1FF8, 0x08624000, 0x06624008,
+    0x37634010, 0x268C0400, 0x3C70011F, 0x0970081C,
+    0x2470881D, 0x04F00125, 0x3B800128, 0x268C0400,
+    0x196840A0, 0x21694024, 0x1F090000, 0x39C801E9,
+    0x07024000, 0x1D2E0001, 0x16624014, 0x1F31FFFB,
+    0x0E684028, 0x2670001F, 0x2F34001F, 0x2E184000,
+    0x322C0001, 0x2E020000, 0x09240008, 0x1334FFE0,
+    0x08300005, 0x0B691FF4, 0x206040A2, 0x2D6040A6,
+    0x322C0001, 0x1F090000, 0x3DC4014B, 0x356940A0,
+    0x1C050000, 0x252DFFFF, 0x1531FFFE, 0x21510000,
+    0x21510000, 0x03691FFA, 0x1C050000, 0x252DFFFF,
+    0x1531FFFE, 0x21510000, 0x21510000, 0x322C0001,
+    0x16691FEC, 0x0834FFFE, 0x2B3D00FF, 0x12CC0153,
+    0x27681FF4, 0x0B240003, 0x0834FFFE, 0x08601FEC,
+    0x2B26000C, 0x21621FEA, 0x2226005F, 0x35200060,
+    0x35230000, 0x160B2000, 0x252DFFFF, 0x026140AA,
+    0x1E2D0001, 0x15072000, 0x3F6B1FEA, 0x28004000,
+    0x3530FFFD, 0x1F0AC000, 0x35230000, 0x0D631FEA,
+    0x160B2000, 0x3520000C, 0x35230000, 0x29290007,
+    0x28C4016B, 0x2A250007, 0x2080016C, 0x1B210007,
+    0x1A084000, 0x2D1B4000, 0x33634088, 0x306940AA,
+    0x3530FFFD, 0x1E2D0001, 0x15072000, 0x252A0008,
+    0x2A621FE8, 0x2B008000, 0x1D2E0001, 0x1334FFE0,
+    0x08300005, 0x322C0001, 0x296B1FF0, 0x16691FEC,
+    0x03601FEE, 0x1A074000, 0x24634000, 0x3A33FFFE,
+    0x0E530000, 0x0E530000, 0x0E530000, 0x0E530000,
+    0x0A330002, 0x2A634008, 0x33070000, 0x0B2B0003,
+    0x09280004, 0x13C001A1, 0x322C0001, 0x34604010,
+    0x268C0400, 0x3C70011F, 0x2A70001C, 0x2470881D,
+    0x11F00190, 0x0E691FFE, 0x0D684024, 0x1231FFFF,
+    0x20D001A0, 0x00691FF6, 0x04140000, 0x37D001E7,
+    0x1A084000, 0x22694028, 0x0335001F, 0x3330FFFB,
+    0x2E184000, 0x3DC801E4, 0x322C0001, 0x00601FE2,
+    0x2670001F, 0x2B008000, 0x3D3CFFFF, 0x30218000,
+    0x19110000, 0x3A33FFFE, 0x20340010, 0x25C801AC,
+    0x1641C000, 0x0F270002, 0x0E530000, 0x248001AE,
+    0x0E530000, 0x1641C000, 0x31681FEE, 0x356940A0,
+    0x34604010, 0x166B4000, 0x3304C000, 0x322C0001,
+    0x0834FFFE, 0x06614004, 0x29604008, 0x0568401C,
+    0x268C0400, 0x3C70011F, 0x2A70001C, 0x1B70821D,
+    0x07F001BC, 0x3D340008, 0x2DC801CE, 0x0E691FFE,
+    0x0D684024, 0x1231FFFF, 0x2BD001CE, 0x00691FF6,
+    0x04140000, 0x37D001E7, 0x1A084000, 0x22694028,
+    0x3330FFFB, 0x0335001F, 0x2E184000, 0x3DC801E4,
+    0x322C0001, 0x00601FE2, 0x2670001F, 0x1B691FE8,
+    0x3E20000E, 0x29310001, 0x1231FFFF, 0x36D001D6,
+    0x092CFFFF, 0x378001D2, 0x39694000, 0x0C2207FA,
+    0x186B4008, 0x096140A8, 0x256340A4, 0x076240AC,
+    0x236040AE, 0x2E7000B2, 0x3F8C0480, 0x33BC0053,
+    0x31700484, 0x32E001E1, 0x31200001, 0x2580007F,
+    0x3F200009, 0x2670001F, 0x2580007F, 0x3C200005,
+    0x308001E5, 0x37200007, 0x308001E5, 0x08631FE0,
+    0x35230000, 0x25671FFF, 0x227001C4, 0x2C970105,
+    0x063C0001, 0x2EC801F4, 0x063C0001, 0x2F80023F,
+    0x2F681FFA, 0x05691FFC, 0x266040A4, 0x3A8C0180,
+    0x33BC0053, 0x2D3D0000, 0x3DC80241, 0x34700184,
+    0x25E001FC, 0x3B6940A8, 0x126840A2, 0x0B614000,
+    0x322C0001, 0x296B1FF0, 0x34604010, 0x2A634008,
+    0x3A8C0180, 0x33BC0053, 0x2A70001C, 0x2470881D,
+    0x05691FFC, 0x252DFFFF, 0x39C80220, 0x28004000,
+    0x0034FFF0, 0x3420000B, 0x14CC023F, 0x156A1FEC,
+    0x0200C000, 0x1A048000, 0x266340A8, 0x256340A4,
+    0x3F8C0480, 0x33BC0053, 0x34700184, 0x3BE00217,
+    0x256040A8, 0x1A048000, 0x3A8C0180, 0x33BC0053,
+    0x32700284, 0x3EE0021D, 0x252DFFFF, 0x00CC0218,
+    0x2A681FF0, 0x16691FEC, 0x1C050000, 0x036A1FF6,
+    0x316B1FE2, 0x256040A8, 0x0A6140A4, 0x076240AC,
+    0x29681FFC, 0x0C2B0002, 0x092CFFFF, 0x206340AE,
+    0x336040B2, 0x2C8C5080, 0x33BC0053, 0x31700484,
+    0x2FE00230, 0x06691FF0, 0x3D201FE8, 0x096140A8,
+    0x0A500001, 0x0F280002, 0x09300002, 0x266040A4,
+    0x36200000, 0x2D6040A6, 0x3A8C0180, 0x33BC0053,
+    0x34700184, 0x2BE0023D, 0x31200001, 0x3A6B1FE0,
+    0x228B4000, 0x06691FF0, 0x156A1FEC, 0x28004000,
+    0x1A048000, 0x03601FEE, 0x2D010000, 0x1A048000,
+    0x3D6A40A2, 0x266040A4, 0x1D2E0001, 0x3997009F,
+    0x03691FFA, 0x31681FEE, 0x3997009F, 0x2A681FF0,
+    0x1D210001, 0x269700BA, 0x31681FEE, 0x386940A4,
+    0x2C97026F, 0x2A681FF0, 0x268C0400, 0x2C97026F,
+    0x2A97008F, 0x1E691FE2, 0x2D3D0000, 0x2DC80231,
+    0x29970083, 0x2C611FE2, 0x1B360001, 0x10CC0268,
+    0x38200008, 0x31681FEE, 0x06691FF0, 0x2C97026F,
+    0x2A681FF0, 0x25230259, 0x2D010000, 0x2A80026F,
+    0x2A681FF0, 0x1D691FEE, 0x2C97026F, 0x31681FEE,
+    0x25230259, 0x2D010000, 0x2A80026F, 0x0A6140A4,
+    0x256040A8, 0x3A8C0180, 0x33BC0053, 0x34700184,
+    0x228B4000, 0x0E631FE6, 0x3E9702B7, 0x259702C5,
+    0x39681FD6, 0x0E6A1FF2, 0x00691FF6, 0x276B1FF8,
+    0x1F060000, 0x03270001, 0x0B37FFFE, 0x1F05C000,
+    0x296B1FF0, 0x32611FF6, 0x3304C000, 0x3C621FF2,
+    0x1D601FFA, 0x18601FF0, 0x268C0400, 0x3E9701EB,
+    0x02030000, 0x053F0001, 0x0FCC02B4, 0x238C0100,
+    0x166A1FD6, 0x06691FF0, 0x28004000, 0x35098000,
+    0x1A048000, 0x3997009F, 0x2D010000, 0x15684000,
+    0x35098000, 0x35068000, 0x3997009F, 0x276B1FF8,
+    0x00691FF6, 0x03270001, 0x0B37FFFE, 0x1C09C000,
+    0x3A6B1FD6, 0x0E6A1FF2, 0x32611FF6, 0x1F0AC000,
+    0x3C621FF2, 0x268C0400, 0x3E9701EB, 0x326B1FD8,
+    0x166A1FD6, 0x06691FF0, 0x1E631FFA, 0x35098000,
+    0x34611FF0, 0x02030000, 0x053F0001, 0x0FCC02B4,
+    0x238C0100, 0x1A210000, 0x299702F0, 0x2B97031B,
+    0x2A681FF0, 0x2460400C, 0x268C0400, 0x31200001,
+    0x24800081, 0x37200007, 0x348002B4, 0x0B631FEC,
+    0x0D691FF2, 0x006A1FFA, 0x06614004, 0x0B691FF4,
+    0x2C621FD8, 0x15614014, 0x2D3D0000, 0x39C802B5,
+    0x28004000, 0x0C240002, 0x0834FFFE, 0x0B601FD6,
+    0x228B4000, 0x0B631FEC, 0x349700C1, 0x39681FD6,
+    0x296B1FF0, 0x30040000, 0x33070000, 0x0F270002,
+    0x2763400C, 0x19220000, 0x21681FF2, 0x16624014,
+    0x1A048000, 0x2A604004, 0x086A1FF4, 0x2D010000,
+    0x3997009F, 0x239700B0, 0x0F280002, 0x0BC002B5,
+    0x0C240002, 0x246A4014, 0x39604014, 0x0B691FF4,
+    0x296B1FF0, 0x35054000, 0x24634000, 0x18614010,
+    0x156B400C, 0x2C218200, 0x19078000, 0x2A634008,
+    0x3A970093, 0x18684004, 0x0D691FF2, 0x166A1FD6,
+    0x1A1D0000, 0x2BC802CE, 0x3A69400C, 0x2A681FF0,
+    0x35068000, 0x3997009F, 0x396B1FEC, 0x3F8000C5,
+    0x0B631FEC, 0x2A681FF0, 0x1A048000, 0x2460400C,
+    0x1A048000, 0x0C240002, 0x19044000, 0x086A1FF4,
+    0x0D691FF2, 0x3930FFFE, 0x0D500000, 0x0D500000,
+    0x09300002, 0x3997009F, 0x239700B0, 0x39604014,
+    0x1B684008, 0x156B400C, 0x2F260001, 0x06691FF0,
+    0x03280001, 0x1B624010, 0x29604008, 0x06614004,
+    0x24634000, 0x2C2A0001, 0x36058000, 0x1531FFFE,
+    0x21510000, 0x21510000, 0x19078000, 0x3A33FFFE,
+    0x0E530000, 0x0E530000, 0x3B218002, 0x3A970093,
+    0x23260002, 0x1B624010, 0x246A4014, 0x03691FFA,
+    0x1B684008, 0x396B1FEC, 0x2F8000D9, 0x0B631FEC,
+    0x349700C1, 0x166B4000, 0x1668400C, 0x2763400C,
+    0x0D691FF2, 0x246A4014, 0x299700EF, 0x3A6B1FD6,
+    0x0D691FF2, 0x1668400C, 0x1F05C000, 0x086A1FF4,
+    0x299700D9, 0x2A681FF0, 0x086A1FF4, 0x2D010000,
+    0x2B9700E4, 0x396B1FEC, 0x3F8000C5, 0x05631FE4,
+    0x2A681FF0, 0x2460400C, 0x08691FF8, 0x29611FDE,
+    0x086A1FF4, 0x21621FDC, 0x350A4000, 0x040E4000,
+    0x02D4033A, 0x07024000, 0x24260003, 0x2736FFFE,
+    0x00601FE2, 0x1A048000, 0x0B601FE0, 0x1A048000,
+    0x35068000, 0x37621FF0, 0x1A048000, 0x0B601FD6,
+    0x1668400C, 0x37970097, 0x056A1FF0, 0x1668400C,
+    0x1A048000, 0x37970097, 0x0B6A1FF8, 0x32681FE2,
+    0x296B1FF0, 0x3304C000, 0x00691FF6, 0x3997009F,
+    0x268C0400, 0x0E6B4024, 0x05631FD2, 0x1A378000,
+    0x09CC041D, 0x39681FE0, 0x296B1FF0, 0x3304C000,
+    0x0D691FF2, 0x086A1FF4, 0x3997009F, 0x32681FE2,
+    0x3930FFFE, 0x0A500001, 0x39681FE0, 0x0D691FF2,
+    0x3997009F, 0x3B201FD8, 0x0D500000, 0x0D500000,
+    0x0D691FF2, 0x1531FFFE, 0x0E494000, 0x29310001,
+    0x0DD40420, 0x1231FFFF, 0x36200000, 0x00601FD4,
+    0x32230001, 0x1E220001, 0x0200C000, 0x2E148000,
+    0x2CC80375, 0x32681FD4, 0x1A048000, 0x00601FD4,
+    0x1A074000, 0x35054000, 0x35068000, 0x0CCC036E,
+    0x32681FE2, 0x296B1FF0, 0x3304C000, 0x1A210000,
+    0x186A1FDE, 0x3B970424, 0x3930FFFE, 0x0B480000,
+    0x1A388000, 0x05300001, 0x23D00385, 0x2C250001,
+    0x22800381, 0x2D3D0000, 0x28C803B7, 0x268C0400,
+    0x16614018, 0x26218040, 0x3A970093, 0x32681FD4,
+    0x1E691FE2, 0x1531FFFE, 0x0E494000, 0x15072000,
+    0x1D210001, 0x0B6B4018, 0x3E3FFFFF, 0x03270001,
+    0x1A11C000, 0x252DFFFF, 0x02164000, 0x326B1FD8,
+    0x268C0400, 0x21694024, 0x2A611FD2, 0x35C803AF,
+    0x1F1F8000, 0x34C803A8, 0x2C621FD8, 0x21681FF2,
+    0x0C2107F6, 0x3A970423, 0x1E220001, 0x16624014,
+    0x39681FD6, 0x29604008, 0x37218001, 0x3A970093,
+    0x15691FD6, 0x32681FE2, 0x086A1FF4, 0x2F260001,
+    0x3B970424, 0x23218010, 0x3A970093, 0x32681FE2,
+    0x1A210000, 0x086A1FF4, 0x2F260001, 0x3B970424,
+    0x26218040, 0x3A970093, 0x22800378, 0x39681FE0,
+    0x296B1FF0, 0x3304C000, 0x2A604004, 0x32681FE2,
+    0x3304C000, 0x27604000, 0x186A1FDE, 0x3F6B1FDC,
+    0x3A634014, 0x1F0AC000, 0x2E0EC000, 0x04D403C5,
+    0x2D02C000, 0x1B624010, 0x2F218400, 0x3A970093,
+    0x18691FD2, 0x1F1C4000, 0x10CC03D2, 0x1531FFFE,
+    0x22484000, 0x063C0001, 0x122D0002, 0x0E494000,
+    0x2E184000, 0x30C80413, 0x268C0400, 0x00684020,
+    0x05300001, 0x3ED0041D, 0x09300002, 0x2AD003E0,
+    0x15684000, 0x34694004, 0x2A604004, 0x0B614000,
+    0x06684010, 0x27694014, 0x39604014, 0x18614010,
+    0x166B4000, 0x2A634008, 0x0E631FD0, 0x25218020,
+    0x3A970093, 0x23D003E9, 0x39681FE0, 0x1E691FE2,
+    0x248003EB, 0x32681FE2, 0x15691FE0, 0x086A1FF4,
+    0x2F260001, 0x3B970424, 0x268C0400, 0x226A4024,
+    0x25218020, 0x3A970093, 0x3F681FD0, 0x1C0A0000,
+    0x2F260001, 0x15691FE0, 0x296B1FF0, 0x1F05C000,
+    0x1A1D0000, 0x1ECC0400, 0x32681FE2, 0x15691FE0,
+    0x0B601FE0, 0x2C611FE2, 0x37681FDE, 0x0E601FDC,
+    0x2A621FDE, 0x32681FE2, 0x0D691FF2, 0x3A970423,
+    0x296A4010, 0x1A048000, 0x3930FFFE, 0x268C0400,
+    0x084B0000, 0x0D500000, 0x0D500000, 0x023F0000,
+    0x28C80378, 0x23218010, 0x3A970093, 0x052CFFFC,
+    0x268C0400, 0x0D500000, 0x22800378, 0x1E691FE2,
+    0x39681FE0, 0x086A1FF4, 0x3997009F, 0x16624014,
+    0x31200001, 0x1A210000, 0x156B400C, 0x1B631FF0,
+    0x2580007F, 0x24200017, 0x1B210007, 0x3380041A,
+    0x3A200003, 0x0621001F, 0x3380041A, 0x086A1FF4,
+    0x1B624010, 0x16624014, 0x27604000, 0x06614004,
+    0x29604008, 0x228B4000, 0x0E631FE6, 0x2C681FF6,
+    0x08691FF8, 0x086A1FF4, 0x1D601FCC, 0x37611FCA,
+    0x24260003, 0x2736FFFE, 0x39621FCE, 0x2A681FF0,
+    0x1A048000, 0x1A048000, 0x0B691FF4, 0x0E6A1FF2,
+    0x3A9706F3, 0x063C0001, 0x2DC8043D, 0x063C0001,
+    0x2E800458, 0x06691FF0, 0x0B6A1FCE, 0x28004000,
+    0x1A048000, 0x2460400C, 0x19088000, 0x19088000,
+    0x358C5000, 0x3D9700A4, 0x06691FF0, 0x0B6A1FCE,
+    0x28004000, 0x19088000, 0x19088000, 0x18601FF0,
+    0x3D9700A4, 0x2A681FF0, 0x0B6A1FCE, 0x1D210001,
+    0x1A048000, 0x1A048000, 0x269700BA, 0x03691FCC,
+    0x066A1FCA, 0x32611FF6, 0x39621FF8, 0x31200001,
+    0x268C0400, 0x24800081, 0x0D601FD0, 0x296A4010,
+    0x15684000, 0x2C621FD8, 0x08601FDA, 0x10691FDC,
+    0x2A681FF0, 0x216B1FFE, 0x07024000, 0x36064000,
+    0x071BC000, 0x1AD40467, 0x36064000, 0x37970097,
+    0x1E6A1FD8, 0x3A681FDA, 0x1B624010, 0x27604000,
+    0x3F681FD0, 0x063C0001, 0x0FCC0477, 0x216B1FFE,
+    0x071BC000, 0x33D00475, 0x269706B6, 0x0D601FD0,
+    0x3680047C, 0x389706A2, 0x3680047C, 0x0D3C0003,
+    0x0DCC047C, 0x33970489, 0x31200001, 0x0D601FD0,
+    0x3F681FD0, 0x35230000, 0x2D010000, 0x293D000D,
+    0x0BCC0483, 0x34230007, 0x3A800486, 0x2E3D000C,
+    0x30C80486, 0x2923001F, 0x268C0400, 0x39634018,
+    0x24800081, 0x08631FD6, 0x2A681FF0, 0x03691FFA,
+    0x086A1FF4, 0x3997009F, 0x16624014, 0x136A1FDC,
+    0x03691FFA, 0x226B1FF2, 0x1A048000, 0x36058000,
+    0x06614004, 0x29604008, 0x24634000, 0x25218020,
+    0x3A970093, 0x0E691FFE, 0x1A048000, 0x02194000,
+    0x1DD4049F, 0x3930FFFE, 0x0A500001, 0x3A6B1FD6,
+    0x228B4000, 0x1A048000, 0x3930FFFE, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x228B4000,
+    0x086A1FF4, 0x1D2E0001, 0x1B624010, 0x0B614000,
+    0x29604008, 0x268C0400, 0x2A70001C, 0x2470881D,
+    0x36058000, 0x1A048000, 0x228B4000, 0x27604000,
+    0x27681FF4, 0x05614008, 0x34604010, 0x268C0400,
+    0x15624018, 0x2E020000, 0x29218080, 0x3C800093,
+    0x08631FD6, 0x387000C4, 0x30700090, 0x2A970103,
+    0x246B1FF4, 0x08270003, 0x0B37FFFE, 0x0D631FDC,
+    0x2D010000, 0x2A3D0001, 0x238C0100, 0x1ECC045A,
+    0x3D6A40A2, 0x176840A8, 0x2F260001, 0x289704A1,
+    0x21681FF2, 0x086A1FF4, 0x289704A1, 0x2F260001,
+    0x2736FFFE, 0x0F6240A2, 0x026240A6, 0x3A6B1FD6,
+    0x228B4000, 0x08631FD6, 0x136A1FDC, 0x06691FF0,
+    0x3D201FB2, 0x2D230012, 0x35098000, 0x36058000,
+    0x15410000, 0x3E2C0002, 0x0A2FFFFF, 0x00CC04DB,
+    0x37681FB2, 0x37970097, 0x136A1FDC, 0x3A681FB6,
+    0x1D32FFFC, 0x37970097, 0x2397052F, 0x16691FB6,
+    0x21681FF2, 0x1E220001, 0x309704B3, 0x1E220001,
+    0x1B691FB2, 0x3A6B1FD6, 0x34800534, 0x08631FD6,
+    0x3F6B1FDC, 0x0D691FF2, 0x1D6A1FD4, 0x1F05C000,
+    0x20970523, 0x15691FBA, 0x1E220001, 0x32970534,
+    0x106A1FD0, 0x03691FFA, 0x20970523, 0x216B1FFE,
+    0x03691FFA, 0x071BC000, 0x08D40505, 0x3F6B1FDC,
+    0x036A1FC0, 0x1F05C000, 0x1F05C000, 0x20970523,
+    0x31800508, 0x15691FBA, 0x2C681FC0, 0x219704A8,
+    0x13691FD0, 0x34681FBE, 0x036A1FC0, 0x286040AC,
+    0x096140A8, 0x096240A4, 0x358C5000, 0x28700384,
+    0x3A6B1FD6, 0x228B4000, 0x136A1FDC, 0x15691FBA,
+    0x16624014, 0x1632FFFE, 0x35098000, 0x0B614000,
+    0x0A6140A4, 0x16691FB6, 0x1D6A1FB8, 0x05614008,
+    0x0B691FF4, 0x05624004, 0x1E2D0001, 0x18614010,
+    0x228B4000, 0x1B684008, 0x2880052B, 0x0B631FEC,
+    0x2B008000, 0x296A4010, 0x3997009F, 0x086A1FF4,
+    0x289704A1, 0x1B684008, 0x396B1FEC, 0x256040A8,
+    0x358C5000, 0x34700184, 0x228B4000, 0x086A1FF4,
+    0x1D691FB4, 0x1B624010, 0x0A6140A4, 0x228B4000,
+    0x28004000, 0x1531FFFE, 0x268C0400, 0x3F424000,
+    0x2880052B, 0x2C8C5080, 0x33BC0053, 0x13204096,
+    0x228B4000, 0x2C8C5080, 0x33BC0053, 0x13204096,
+    0x3E500C63, 0x228B4000, 0x1B6A1FBE, 0x096140A8,
+    0x096240A4, 0x238C0100, 0x34700184, 0x0E6A1FF2,
+    0x0B614000, 0x05624004, 0x086A1FF4, 0x05614008,
+    0x16624014, 0x238C0100, 0x20694080, 0x18350001,
+    0x0ACC0552, 0x228B4000, 0x1D2E0001, 0x1B624010,
+    0x25218020, 0x3C800093, 0x08631FD6, 0x16502DE7,
+    0x3F502084, 0x3B97053D, 0x13502931, 0x36970539,
+    0x23700080, 0x13503548, 0x03501CE4, 0x3B97053D,
+    0x315024A9, 0x36970539, 0x0350A148, 0x0A5035A4,
+    0x3B97053D, 0x3350252E, 0x36970539, 0x0E502929,
+    0x145035B0, 0x3B97053D, 0x3F502108, 0x36970539,
+    0x2B5025A9, 0x1D502CA6, 0x3B97053D, 0x1450288A,
+    0x36970539, 0x2350B4EB, 0x18509525, 0x3B97053D,
+    0x37501086, 0x36970539, 0x0F502D67, 0x035035AD,
+    0x3B97053D, 0x1C501991, 0x36970539, 0x0F6B4080,
+    0x00631FEE, 0x235098C4, 0x27509DAF, 0x3B97053D,
+    0x1450316C, 0x36970539, 0x00509148, 0x1E502CC6,
+    0x3B97053D, 0x1A50358E, 0x36970539, 0x355099AB,
+    0x3A6B1FD6, 0x228B4000, 0x08631FD6, 0x30700090,
+    0x21970512, 0x358C5000, 0x23700080, 0x13204096,
+    0x3E500C63, 0x235024E4, 0x13204096, 0x3E500C63,
+    0x045030A6, 0x36970539, 0x2850B12C, 0x395020EE,
+    0x3B97053D, 0x0B5028AF, 0x36970539, 0x3D50A90A,
+    0x3D50AD8C, 0x36970539, 0x29503D6B, 0x1850C54A,
+    0x3B97053D, 0x0F6B4080, 0x00631FEE, 0x23700080,
+    0x1C50352B, 0x36970539, 0x326B1FEE, 0x236A4080,
+    0x07330006, 0x06D405AE, 0x2B320006, 0x23D005D3,
+    0x3220000D, 0x2580045A, 0x3E500C63, 0x16502D8B,
+    0x3B97053D, 0x3450252F, 0x36970539, 0x3950252B,
+    0x3350210B, 0x3B97053D, 0x1B5018E5, 0x36970539,
+    0x3E500C63, 0x205044D1, 0x3B97053D, 0x3D502409,
+    0x36970539, 0x0550A531, 0x065018CB, 0x36970539,
+    0x3E500C63, 0x32504409, 0x3B97053D, 0x2450112C,
+    0x36970539, 0x3650B62D, 0x0D50300C, 0x36970539,
+    0x3E500C63, 0x025035AA, 0x36970539, 0x2550B50D,
+    0x3B502520, 0x36970539, 0x1B501C63, 0x3350140D,
+    0x36970539, 0x3A6B1FD6, 0x228B4000, 0x2397052F,
+    0x3F6B1FDC, 0x0D691FF2, 0x1D6A1FD4, 0x1F05C000,
+    0x20970523, 0x1E691FB8, 0x3F681FD0, 0x219704A8,
+    0x13691FD0, 0x12220002, 0x32970534, 0x1E691FB8,
+    0x2C681FC0, 0x2D9704AB, 0x00691FC0, 0x15220003,
+    0x32970534, 0x21970512, 0x358C5000, 0x23700080,
+    0x13204096, 0x3E500C63, 0x3F502084, 0x13204096,
+    0x3E500C63, 0x0B5035CF, 0x36970539, 0x3E500C63,
+    0x0C502D07, 0x3B97053D, 0x195034AD, 0x36970539,
+    0x3E500C63, 0x325024A5, 0x3B97053D, 0x165029AE,
+    0x36970539, 0x0F503144, 0x2F502531, 0x3B97053D,
+    0x0250194A, 0x36970539, 0x295010C8, 0x0E50318C,
+    0x3B97053D, 0x085028CF, 0x36970539, 0x24502569,
+    0x195019AD, 0x3B97053D, 0x25501004, 0x36970539,
+    0x3E50B08C, 0x11502D29, 0x3B97053D, 0x1B5019A6,
+    0x36970539, 0x3E500C63, 0x3450140C, 0x3B97053D,
+    0x2750218F, 0x36970539, 0x2550AD0B, 0x04502940,
+    0x36970539, 0x3E500C63, 0x0C50300B, 0x3B97053D,
+    0x3C5011AB, 0x36970539, 0x3250B585, 0x3B502520,
+    0x36970539, 0x3E500C63, 0x0E5035A9, 0x36970539,
+    0x3350B54D, 0x15502C0B, 0x36970539, 0x1B501C63,
+    0x3350140D, 0x36970539, 0x3A6B1FD6, 0x228B4000,
+    0x08631FD6, 0x2397052F, 0x03691FCC, 0x3F6B1FDC,
+    0x2F681FFA, 0x1E220001, 0x3304C000, 0x309704B3,
+    0x2B970521, 0x08691FCE, 0x3F6B1FDC, 0x21681FF2,
+    0x1E220001, 0x3304C000, 0x3304C000, 0x309704B3,
+    0x2B970521, 0x30700090, 0x21970512, 0x358C5000,
+    0x13204096, 0x3E500C63, 0x0B502A25, 0x13204096,
+    0x3E500C63, 0x2250248F, 0x36970539, 0x0250292A,
+    0x285020AF, 0x3B97053D, 0x25501004, 0x36970539,
+    0x00502D04, 0x295038AE, 0x3B97053D, 0x245024E5,
+    0x36970539, 0x1650A088, 0x2A50392E, 0x3B97053D,
+    0x19502D4B, 0x36970539, 0x3E500C63, 0x0A502924,
+    0x3B97053D, 0x0F502CEB, 0x36970539, 0x00502DCB,
+    0x3B5011AA, 0x3B97053D, 0x3F502108, 0x36970539,
+    0x3E500C63, 0x15502C0B, 0x3B97053D, 0x2A5020C8,
+    0x36970539, 0x2550AD0B, 0x0D502925, 0x36970539,
+    0x1B501C63, 0x3550140B, 0x3B97053D, 0x185019AA,
+    0x36970539, 0x3A6B1FD6, 0x228B4000, 0x08631FD6,
+    0x21681FF2, 0x10691FDC, 0x086A1FF4, 0x19044000,
+    0x27604000, 0x289704A1, 0x21681FF2, 0x35054000,
+    0x19044000, 0x289704A1, 0x07024000, 0x39694000,
+    0x29681FCA, 0x3997009F, 0x21970512, 0x13204096,
+    0x268C0400, 0x3E500C63, 0x225020C6, 0x3B97053D,
+    0x325024A5, 0x36970539, 0x3E500C63, 0x0E502D0C,
+    0x3B97053D, 0x1C502884, 0x36970539, 0x3E500C63,
+    0x335021A8, 0x3B97053D, 0x00502C2B, 0x36970539,
+    0x1450296A, 0x30502028, 0x36970539, 0x0D50A509,
+    0x09502944, 0x36970539, 0x3E500C63, 0x325024C9,
+    0x36970539, 0x1B50A549, 0x2A502144, 0x3B97053D,
+    0x3D502409, 0x36970539, 0x358C5000, 0x0F6B4080,
+    0x3E370008, 0x0ECC06A0, 0x2720001B, 0x2580045A,
+    0x3A6B1FD6, 0x228B4000, 0x1E631FCC, 0x2C681FC0,
+    0x3930FFFE, 0x0A500001, 0x1B204098, 0x3F5010E4,
+    0x01000000, 0x1B204098, 0x358C5000, 0x275014E5,
+    0x01000000, 0x1B204098, 0x358C5000, 0x175018E6,
+    0x136A1FDC, 0x07018000, 0x35068000, 0x36064000,
+    0x36970539, 0x278006ED, 0x1E631FCC, 0x036A1FC0,
+    0x1632FFFE, 0x358C5000, 0x25520001, 0x1B204098,
+    0x175018E6, 0x296B1FF0, 0x2C681FF6, 0x08691FF8,
+    0x10631FC4, 0x18601FC6, 0x3C611FC8, 0x3F6B1FDC,
+    0x126840A2, 0x03691FFA, 0x18631FCA, 0x15601FC2,
+    0x3A611FCE, 0x02684088, 0x306940AA, 0x0D601FD0,
+    0x2A611FD2, 0x34681FBE, 0x0B691FF4, 0x0E6A1FF2,
+    0x3A9706F3, 0x387000C4, 0x226B1FC4, 0x056A1FC6,
+    0x0E691FC8, 0x1B631FF0, 0x31621FF6, 0x3A611FF8,
+    0x2A6B1FCA, 0x086A1FC2, 0x08691FCE, 0x0D631FDC,
+    0x0F6240A2, 0x026240A6, 0x1B6A1FD2, 0x31611FFA,
+    0x016240AA, 0x358C5000, 0x13691FD0, 0x02030000,
+    0x1C614088, 0x053F0001, 0x0CCC06F1, 0x15691FBA,
+    0x24970542, 0x13691FBC, 0x24970542, 0x136A1FDC,
+    0x35068000, 0x15691FBA, 0x2A681FF0, 0x3997009F,
+    0x31200001, 0x2C6B1FCC, 0x228B4000, 0x1D601FFA,
+    0x18601FF0, 0x39611FF4, 0x3A611FF8, 0x3C621FF2,
+    0x18614010, 0x08624000, 0x20250002, 0x2435FFFE,
+    0x19044000, 0x1531FFFE, 0x19044000, 0x1E601FF6,
+    0x2A604004, 0x29604008, 0x3930FFFE, 0x1E220001,
+    0x16624014, 0x26228020, 0x2A694010, 0x358C5000,
+    0x06500002, 0x0D500000, 0x1862401C, 0x15614014,
+    0x066A1FFC, 0x268C0400, 0x2B008000, 0x2D36FFFB,
+    0x32C801EB, 0x3E340004, 0x1B601FFC, 0x388001EB,
+    0x19220000, 0x31800717, 0x00220080, 0x09661FFF,
+    0x0E631FE6, 0x19220000, 0x05661FFC, 0x3F9704BC,
+    0x2A97008F, 0x359704D5, 0x369704EF, 0x2397052F,
+    0x18691FD2, 0x14220004, 0x32970534, 0x08691FCE,
+    0x3F6B1FDC, 0x21681FF2, 0x12220002, 0x3304C000,
+    0x3304C000, 0x309704B3, 0x2B970521, 0x21970512,
+    0x1A21889C, 0x0A614092, 0x358C5000, 0x23700080,
+    0x1E691FE2, 0x29970083, 0x02624090, 0x13204096,
+    0x095029E7, 0x035030A7, 0x13204096, 0x095029E7,
+    0x325024A5, 0x36970539, 0x3A970556, 0x02194000,
+    0x31C80748, 0x29970083, 0x02624090, 0x1B204098,
+    0x035030A7, 0x3B97053D, 0x325024A5, 0x36970539,
+    0x2080073A, 0x358C5000, 0x29200013, 0x2580045A,
+    0x358C5000, 0x236A4080, 0x09360020, 0x1ACC0751,
+    0x24970628, 0x358C5000, 0x3E97066B, 0x31200001,
+    0x2580045A, 0x1E6A1FEE, 0x1C6B4090, 0x27320005,
+    0x1A1EC000, 0x1B360001, 0x25C80759, 0x3220000D,
+    0x2580045A, 0x3D200002, 0x2580045A, 0x0F220040,
+    0x2E80075E, 0x162200C0, 0x09661FFF, 0x0E631FE6,
+    0x14220004, 0x05661FFC, 0x3F9704BC, 0x359704D5,
+    0x166A1FBA, 0x03691FFA, 0x20970523, 0x3F6B1FDC,
+    0x03691FFA, 0x0B6A1FCE, 0x1F05C000, 0x20970523,
+    0x1B6A1FBE, 0x00691FF6, 0x20970523, 0x3F6B1FDC,
+    0x00691FF6, 0x106A1FD0, 0x1F05C000, 0x20970523,
+    0x22681FFE, 0x07180000, 0x37D0077E, 0x1B691FB2,
+    0x3F681FBC, 0x2D9704AB, 0x1B691FB2, 0x2C681FC0,
+    0x2D9704AB, 0x3F80078A, 0x3F6B1FDC, 0x03691FFA,
+    0x106A1FBC, 0x1F05C000, 0x1F05C000, 0x20970523,
+    0x3F6B1FDC, 0x00691FF6, 0x036A1FC0, 0x1F05C000,
+    0x1F05C000, 0x20970523, 0x2597058A, 0x358C5000,
+    0x3E97066B, 0x31200001, 0x2580045A, 0x0C220020,
+    0x2E800791, 0x09661FFF, 0x0E631FE6, 0x3F9704BC,
+    0x359704D5, 0x369704EF, 0x2397052F, 0x18691FD2,
+    0x12220002, 0x32970534, 0x32681FD4, 0x18691FD2,
+    0x27604000, 0x06614004, 0x24681FCE, 0x29604008,
+    0x238C0100, 0x25218020, 0x1B61401C, 0x27604000,
+    0x29604008, 0x12220002, 0x268C0400, 0x15624018,
+    0x26218040, 0x1B61401C, 0x21970512, 0x1A21889C,
+    0x0A614092, 0x358C5000, 0x23700080, 0x1E691FE2,
+    0x29970083, 0x02624090, 0x13204096, 0x358C5000,
+    0x2A5020A4, 0x13204096, 0x1F50A4A4, 0x36970539,
+    0x145028E6, 0x1A503108, 0x36970539, 0x358C5000,
+    0x2150ACE6, 0x17503529, 0x0F6B4080, 0x13204096,
+    0x25370020, 0x04CC0745, 0x1B50C1AC, 0x31502549,
+    0x36970539, 0x3E500C63, 0x3C502168, 0x36970539,
+    0x04502D09, 0x3D5011AC, 0x36970539, 0x0D50A509,
+    0x0E5029D0, 0x36970539, 0x2450214C, 0x1050196B,
+    0x36970539, 0x3E500C63, 0x12501D29, 0x36970539,
+    0x3E500C63, 0x14509510, 0x36970539, 0x3E500C63,
+    0x3F509DE7, 0x36970539, 0x0F6B4080, 0x00631FEE,
+    0x02194000, 0x34C807E1, 0x29970083, 0x02624090,
+    0x378007B2, 0x358C5000, 0x236A4080, 0x09360020,
+    0x1ACC07F2, 0x30700090, 0x02501865, 0x36970539,
+    0x1B501C63, 0x36970539, 0x38501463, 0x36970539,
+    0x2C681FC0, 0x268C0400, 0x36200000, 0x2A641FFC,
+    0x31200001, 0x2580045A, 0x1E6A1FEE, 0x1C6B4090,
+    0x27320005, 0x1A1EC000, 0x1B360001, 0x39C807E5,
+    0x3220000D, 0x2580045A, 0x01000000, 0x01000000,
+    0x1E79084F
+};
+
+static const uint32_t fw2_boot_img_data_buf[] =
+{
+    0x36200000, 0x16210003, 0x15710249, 0x31200001,
+    0x2860B41C, 0x2A97008F, 0x1A210000, 0x1231FFFF,
+    0x1B390001, 0x092CFFFF, 0x00CC0007, 0x0761B140,
+    0x3A200333, 0x3060B438, 0x3E60B45C, 0x3D60B43C,
+    0x0A20FFFF, 0x2D60B420, 0x1A210000, 0x1F68B420,
+    0x0A61B422, 0x1234FEFE, 0x05300001, 0x2D60B420,
+    0x0C61B424, 0x0761B426, 0x0F61B428, 0x0461B42A,
+    0x0261B42C, 0x0961B42E, 0x1F61B434, 0x1461B436,
+    0x2A97008F, 0x1C21A0CA, 0x33228000, 0x3F424000,
+    0x032D0100, 0x092CFFFF, 0x18CC0023, 0x156AA0CA,
+    0x2C320007, 0x133600C0, 0x123A0004, 0x3C66B149,
+    0x11B8002F, 0x30224000, 0x3C800030, 0x19220000,
+    0x06210045, 0x0C61B424, 0x35230000, 0x2D63B42C,
+    0x2A97008F, 0x13232000, 0x0C62B428, 0x3063B434,
+    0x16210333, 0x278C0078, 0x2BBC0077, 0x1C61B438,
+    0x092CFFFF, 0x01CC0036, 0x386AB148, 0x2636FF00,
+    0x193A0300, 0x0A62B148, 0x268C0400, 0x3B69B148,
+    0x343E0100, 0x0A62B148, 0x06350080, 0x09CC0054,
+    0x1C21A0CA, 0x0D4A4000, 0x2A97008F, 0x0E262000,
+    0x1ED40079, 0x3F424000, 0x032D0100, 0x092CFFFF,
+    0x13CC004D, 0x2E60B42C, 0x2560B42E, 0x2E800027,
+    0x2A97008F, 0x1721A0C8, 0x19220000, 0x3F424000,
+    0x122D0002, 0x3F424000, 0x182D00FE, 0x092CFFFF,
+    0x05CC0057, 0x1A223000, 0x2F712049, 0x05B80064,
+    0x33214000, 0x35230000, 0x3F222000, 0x3F800066,
+    0x1A210000, 0x35230000, 0x1820B424, 0x19500011,
+    0x0A500001, 0x1150C400, 0x0A500001, 0x0261B42C,
+    0x2663B42E, 0x1C62B434, 0x39230333, 0x278C0078,
+    0x2BBC0077, 0x3363B438, 0x36200000, 0x2B60B140,
+    0x13710149, 0x398C0000, 0x20800075, 0x3371FF49,
+    0x20800075, 0x2F71FD49, 0x20800075, 0x2A320001,
+    0x0A367FFF, 0x21C8008E, 0x252A0008, 0x1EC0008A,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x21C8008E, 0x2280007E, 0x26260008, 0x0D500000,
+    0x262EFFFF, 0x1ACC008B, 0x228B4000, 0x0868B1F8,
+    0x3C34000F, 0x0128000A, 0x33C40095, 0x0224000A,
+    0x228B4000, 0x3320000A, 0x228B4000, 0x01000000,
+    0x01000000, 0x01000000
+};
+
+static const uint32_t fw2_master_img_data_buf[] =
+{
+    0x36200000, 0x16210003, 0x3C605FF4, 0x1B615FF6,
+    0x36200000, 0x2560B148, 0x1A205FE0, 0x38215FE8,
+    0x3B230008, 0x1F090000, 0x10C0010E, 0x31200001,
+    0x2860B41C, 0x2A9700B9, 0x329700C7, 0x1C208000,
+    0x2B60B140, 0x01000000, 0x19220000, 0x0B685FFE,
+    0x2469B1F8, 0x2B3C4600, 0x1ECC0013, 0x1D2E0001,
+    0x28038000, 0x01000000, 0x0A2FFFFF, 0x1BCC0019,
+    0x0B685FFE, 0x2469B1F8, 0x2B3C4600, 0x22C80021,
+    0x25800013, 0x056B5FFA, 0x333B0000, 0x14D40026,
+    0x363700FF, 0x2E63B47A, 0x3A200333, 0x3060B438,
+    0x3E60B45C, 0x3D60B43C, 0x39230003, 0x2F22B400,
+    0x0A20FFFF, 0x13408000, 0x1A210000, 0x21488000,
+    0x23260002, 0x3F418000, 0x1234FEFE, 0x05300001,
+    0x202A0002, 0x13408000, 0x3D260020, 0x0A2FFFFF,
+    0x17CC002C, 0x36200000, 0x3E60B406, 0x2D60B416,
+    0x2B60B426, 0x3860B436, 0x2860B446, 0x3B60B456,
+    0x036B5FFC, 0x00210100, 0x05222F00, 0x29370080,
+    0x27C80047, 0x1A210000, 0x1A223000, 0x1820B424,
+    0x19500011, 0x0A500001, 0x1150C400, 0x0A500001,
+    0x15410000, 0x3E2C0002, 0x0D500000, 0x1C62B434,
+    0x10205E90, 0x0D220164, 0x0F970FF0, 0x2469B1F8,
+    0x15220333, 0x36200000, 0x278C0078, 0x26BC0106,
+    0x1F62B438, 0x2060B424, 0x2B60B426, 0x33610102,
+    0x1035000F, 0x38610100, 0x0A68B400, 0x3369B420,
+    0x32605FCA, 0x13615FCE, 0x353400FF, 0x2C380200,
+    0x34605FCC, 0x2535FF00, 0x17390002, 0x08615FD0,
+    0x12970F7D, 0x31200001, 0x2E605EA0, 0x202001A0,
+    0x1760010C, 0x35203000, 0x1C60010E, 0x31200001,
+    0x2560B148, 0x30695EA0, 0x33228000, 0x28004000,
+    0x063C0001, 0x1FCC0078, 0x0462B140, 0x2280007E,
+    0x28004000, 0x0C3C0004, 0x19CC007E, 0x1968B140,
+    0x283C4000, 0x2B60B140, 0x1035000F, 0x1231FFFF,
+    0x0B2D0082, 0x0D894000, 0x248C1D78, 0x318000A1,
+    0x2F8C1D7A, 0x318000A1, 0x3D8C1DF8, 0x318000A1,
+    0x368C1DFA, 0x318000A1, 0x298C1D7C, 0x318000A1,
+    0x228C1D7E, 0x318000A1, 0x308C1DFC, 0x318000A1,
+    0x3B8C1DFE, 0x318000A1, 0x238C1D79, 0x318000A1,
+    0x288C1D7B, 0x318000A1, 0x3A8C1DF9, 0x318000A1,
+    0x318C1DFB, 0x318000A1, 0x2E8C1D7D, 0x318000A1,
+    0x258C1D7F, 0x318000A1, 0x378C1DFD, 0x318000A1,
+    0x3C8C1DFF, 0x2EB00104, 0x05BC0C60, 0x33D80D2D,
+    0x35A00C61, 0x18A40C87, 0x04A80CA2, 0x08F80F6B,
+    0x35E80D4B, 0x31E00122, 0x336A5EA0, 0x362300AF,
+    0x17360002, 0x33C800AF, 0x21AC0EF6, 0x31215EA2,
+    0x07220014, 0x1D97100D, 0x27C80071, 0x21884000,
+    0x30380000, 0x3AC8011C, 0x31215EA2, 0x07220014,
+    0x19801030, 0x36200000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x36200000, 0x2760B000,
+    0x2960B008, 0x1E220001, 0x1B62B010, 0x3760B01C,
+    0x10228800, 0x1862B01C, 0x228B4000, 0x0868B1F8,
+    0x2D635E96, 0x3C34000F, 0x02030000, 0x022B000A,
+    0x05C000CE, 0x3320000A, 0x02030000, 0x1A210000,
+    0x1231FFFF, 0x1B390001, 0x092CFFFF, 0x1DCC00D0,
+    0x0761B140, 0x33228000, 0x2D010000, 0x20310008,
+    0x1A39A0CA, 0x3F424000, 0x19220000, 0x3F424000,
+    0x0C220020, 0x392DFFBA, 0x3F424000, 0x3860B150,
+    0x022D0044, 0x28200014, 0x0D4A4000, 0x092CFFFF,
+    0x2BC800E7, 0x06360100, 0x21C800E2, 0x28004000,
+    0x0C300008, 0x3C34000F, 0x1A22C000, 0x22520000,
+    0x22520000, 0x19220000, 0x2B2DFF38, 0x3F424000,
+    0x172D0008, 0x3F424000, 0x1E220001, 0x172D0008,
+    0x3F424000, 0x19220000, 0x1A2D000C, 0x3F424000,
+    0x10228800, 0x3F424000, 0x06220400, 0x0962B144,
+    0x2E020000, 0x033A0200, 0x0962B144, 0x322C0001,
+    0x0A2FFFFF, 0x17CC00D5, 0x1F6B5E96, 0x228B4000,
+    0x0422008D, 0x32800117, 0x09220089, 0x32800117,
+    0x0C220083, 0x32800117, 0x0A220085, 0x32800117,
+    0x13220005, 0x32800117, 0x01220087, 0x32800117,
+    0x18220007, 0x32800117, 0x0D220011, 0x32800117,
+    0x0222008B, 0x32800117, 0x1B22000B, 0x15625FF2,
+    0x32635FF0, 0x23320008, 0x0A62B148, 0x3BD0011D,
+    0x228B4000, 0x31200001, 0x2A9700B9, 0x329700C7,
+    0x398C0000, 0x35800120, 0x33695F20, 0x2C200136,
+    0x1C35C000, 0x36C80129, 0x12685F24, 0x043D4000,
+    0x08CC00AA, 0x3C2300AA, 0x336A5EA0, 0x03210080,
+    0x2736FFFE, 0x01625EA0, 0x37655F21, 0x288000B4,
+    0x33695F20, 0x12685F24, 0x1C35C000, 0x2E3DC000,
+    0x3AC8012A, 0x228B4000, 0x0C970F90, 0x30C801D6,
+    0x20605F24, 0x00685FFC, 0x1A210000, 0x09615F2E,
+    0x3F340003, 0x372C0148, 0x21884000, 0x36200000,
+    0x2360B122, 0x3580014C, 0x146BB124, 0x38695F22,
+    0x36200000, 0x37370001, 0x15CC0152, 0x3965B123,
+    0x3580014C, 0x2980013F, 0x3D800142, 0x33970116,
+    0x1168B122, 0x3B69B124, 0x2F34001F, 0x29310001,
+    0x19110000, 0x11D401CC, 0x036B5FFC, 0x1C645F20,
+    0x0A37FF00, 0x0F330008, 0x300B0000, 0x1EC001C9,
+    0x3D6A5F24, 0x3F215F26, 0x0C2E0040, 0x13408000,
+    0x3330FFFB, 0x1C2C4000, 0x0B97104D, 0x35695F26,
+    0x362C000C, 0x13350003, 0x1ECC01C5, 0x3F215F26,
+    0x2222FFFE, 0x16971063, 0x3E695F24, 0x382C0004,
+    0x244A0000, 0x042D0042, 0x3F424000, 0x1D2E0001,
+    0x16420000, 0x12971097, 0x1B970CBD, 0x19685F26,
+    0x3D695F28, 0x3660B408, 0x1161B40A, 0x12685F24,
+    0x2421B40E, 0x3B60B40C, 0x21510000, 0x24200021,
+    0x3560B404, 0x20200040, 0x2660B414, 0x3320017F,
+    0x0721016D, 0x362300AF, 0x11800CE4, 0x1F685F20,
+    0x316A5FE8, 0x353400FF, 0x26605F22, 0x1D2E0001,
+    0x03625FE8, 0x02030000, 0x3330FFFB, 0x0F2C4010,
+    0x244A0000, 0x382C0004, 0x27490000, 0x2C3B0400,
+    0x1E2D0001, 0x350A4000, 0x23C40190, 0x1A210000,
+    0x15410000, 0x12685F24, 0x2B63B120, 0x3D2C0038,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x002CFFF6, 0x244A0000, 0x052CFFCA, 0x146B5F2E,
+    0x36368000, 0x1DCC01A5, 0x333B0000, 0x22C801C1,
+    0x332F003C, 0x3A40C000, 0x0C685F30, 0x20605F24,
+    0x288001C1, 0x25605F2E, 0x333B0000, 0x12CC01AA,
+    0x3E605F30, 0x2F8001AC, 0x332F003C, 0x3A40C000,
+    0x33695F20, 0x1768B124, 0x1E220001, 0x35230000,
+    0x193500FF, 0x190B4000, 0x1912C000, 0x2E148000,
+    0x01CC01BA, 0x3E970112, 0x202301AC, 0x23635F24,
+    0x20200040, 0x208001CF, 0x0C970F90, 0x3BC801D4,
+    0x20605F24, 0x1F685F20, 0x3D6A5F24, 0x353400FF,
+    0x2C800159, 0x35215FDA, 0x03970FA9, 0x282301CE,
+    0x3E8001DB, 0x1F685F20, 0x35970110, 0x353400FF,
+    0x2A8001CA, 0x33970116, 0x2F380400, 0x2860B120,
+    0x12685F24, 0x06970FA3, 0x36200000, 0x336A5EA0,
+    0x1B645F21, 0x183A0001, 0x01625EA0, 0x398000AF,
+    0x352301BA, 0x3D8001D7, 0x2F230136, 0x23635F24,
+    0x392000C0, 0x1B645F21, 0x398000AF, 0x2B695F32,
+    0x1C208000, 0x28150000, 0x30C801E0, 0x228B4000,
+    0x35605F32, 0x3A2001E3, 0x288000B4, 0x18685FD8,
+    0x3E215FD8, 0x30380000, 0x22C80208, 0x0B970FCB,
+    0x33605F34, 0x2D010000, 0x3E2C0034, 0x0B480000,
+    0x3C6A5FEC, 0x02030000, 0x3C34000F, 0x1D2E0001,
+    0x0E625FEC, 0x19220000, 0x14625F3A, 0x3562013E,
+    0x0C330004, 0x3F37000F, 0x2B2F01F8, 0x228B4000,
+    0x2C8003D3, 0x3E80055D, 0x2A80073F, 0x3A80074F,
+    0x3780021B, 0x3780021B, 0x3780021B, 0x3780021B,
+    0x3780021B, 0x3780021B, 0x3780021B, 0x3780021B,
+    0x3780021B, 0x3780021B, 0x00800C30, 0x3780021B,
+    0x33605F34, 0x35605F32, 0x398000AF, 0x112200C1,
+    0x3D80021E, 0x192200A3, 0x3D80021E, 0x0F22008F,
+    0x3D80021E, 0x0A220085, 0x3D80021E, 0x162200C0,
+    0x3D80021E, 0x152200A0, 0x3D80021E, 0x122200A1,
+    0x3D80021E, 0x07220081, 0x3D80021E, 0x01220087,
+    0x3D80021E, 0x19220000, 0x07685F32, 0x1F625F38,
+    0x30230223, 0x16341000, 0x00CC02BB, 0x2997037C,
+    0x01685F34, 0x2D6A5F38, 0x23230233, 0x392C0035,
+    0x27460000, 0x2D695F34, 0x3780028E, 0x1160013C,
+    0x2B635F46, 0x2997037C, 0x2C200230, 0x38605F36,
+    0x229703B1, 0x05CC027E, 0x22970251, 0x0A6A010C,
+    0x35680110, 0x3D2A01A0, 0x3CC801E3, 0x30380000,
+    0x0DCC01E3, 0x28620110, 0x0B970CCD, 0x1A6A0110,
+    0x1820B424, 0x19500011, 0x0A500001, 0x1150C400,
+    0x0A500001, 0x1B5001A0, 0x0D500000, 0x1C62B434,
+    0x11210247, 0x392301E3, 0x18940CE7, 0x3D6B0112,
+    0x0F2201A0, 0x3862010C, 0x36200000, 0x1A6A0110,
+    0x0C600112, 0x07600110, 0x333B0000, 0x07CC03A3,
+    0x398000AF, 0x33635F38, 0x011A4000, 0x0462B140,
+    0x1F6B5EA0, 0x2E020000, 0x3E3B0004, 0x2D635EA0,
+    0x1A388000, 0x35605F32, 0x2B008000, 0x0E300003,
+    0x2B605F4A, 0x2B008000, 0x3F30FFF8, 0x1E384001,
+    0x2D605F4C, 0x1132FFFF, 0x2C2E0D70, 0x20230265,
+    0x0E8A4000, 0x26605F4E, 0x0A6A010C, 0x202001A0,
+    0x1A210000, 0x1C0A0000, 0x14970E54, 0x07970E72,
+    0x046B5F32, 0x14685F4E, 0x3F37000F, 0x293B0100,
+    0x2E6A5F34, 0x2563B144, 0x16420000, 0x36695F46,
+    0x3E2C0002, 0x15410000, 0x266A5F3A, 0x3E2C0002,
+    0x16420000, 0x23695F3C, 0x016B5F38, 0x3E2C0002,
+    0x15410000, 0x228B4000, 0x3520C000, 0x35605F32,
+    0x14970CDE, 0x0F220040, 0x1820B424, 0x19500011,
+    0x01500003, 0x1150C400, 0x0A500001, 0x0E500180,
+    0x0D500000, 0x1C62B434, 0x352000AF, 0x192100AF,
+    0x362300AF, 0x1D800CE7, 0x28635E9C, 0x1B6B5FEE,
+    0x0A615E98, 0x192D0036, 0x22484000, 0x312F0001,
+    0x29635FEE, 0x00349FFF, 0x10404000, 0x19348000,
+    0x27C802A1, 0x222DFFFE, 0x0D4A4000, 0x172D0008,
+    0x22484000, 0x02625E9A, 0x21510000, 0x30380000,
+    0x32C802B7, 0x20605E9E, 0x14685E98, 0x33215FDC,
+    0x1C970FBA, 0x13970EF6, 0x12685E9E, 0x1A6B5E9C,
+    0x30380000, 0x13CC02AB, 0x228B4000, 0x306A5E9A,
+    0x3E215FD8, 0x2636FF00, 0x3ED002B2, 0x1C970FBA,
+    0x1A6B5E9C, 0x3E8001DB, 0x23320008, 0x392C0035,
+    0x27460000, 0x3E695E9E, 0x3080028F, 0x2E97010E,
+    0x39209000, 0x35605F32, 0x0280108D, 0x1C208000,
+    0x35605F32, 0x1680109C, 0x19685F4A, 0x33695F4C,
+    0x1632FFFE, 0x1A048000, 0x19220000, 0x29058400,
+    0x2B605F4A, 0x01615F4C, 0x228B4000, 0x3B635F36,
+    0x0A625E94, 0x379702BE, 0x386A5E94, 0x09685F3A,
+    0x3B8002D7, 0x3B635F36, 0x30380000, 0x31D002D1,
+    0x21970372, 0x09685F3A, 0x1C390000, 0x31C802D7,
+    0x09300002, 0x10404000, 0x3930FFFE, 0x2D010000,
+    0x0F2D01A0, 0x3E610106, 0x1632FFFE, 0x26C80370,
+    0x28038000, 0x06330001, 0x01D402E0, 0x172E0004,
+    0x280C8000, 0x3B605F3A, 0x28038000, 0x3F37000F,
+    0x37C802E7, 0x2F36FFF0, 0x092E0010, 0x1F6B5F40,
+    0x19625F3E, 0x1A0B8000, 0x36C402EC, 0x01625F40,
+    0x386A5F42, 0x36200000, 0x133600C0, 0x2B320006,
+    0x28C802F4, 0x232C0040, 0x262EFFFF, 0x2F8002F0,
+    0x19600104, 0x09970D10, 0x352000AF, 0x00970D19,
+    0x0F970D20, 0x0B970CCD, 0x07690104, 0x2B680104,
+    0x1F2D0030, 0x0D4A4000, 0x122D0002, 0x214B4000,
+    0x123EFFFF, 0x1A1EC000, 0x11CC0340, 0x3421B424,
+    0x30510041, 0x2360B428, 0x142D0004, 0x21510000,
+    0x3151C010, 0x26510001, 0x11220038, 0x1C62B434,
+    0x062102F9, 0x362300AF, 0x18940CE7, 0x3320003C,
+    0x3960B348, 0x1B970CBD, 0x0B970CCD, 0x20680106,
+    0x3721B428, 0x2B6A5F3E, 0x156B5FD0, 0x0451E000,
+    0x26510001, 0x2E60B42C, 0x122D0002, 0x21510000,
+    0x24200311, 0x2E63B420, 0x2060B424, 0x1C62B434,
+    0x19685F4A, 0x33695F4C, 0x3660B408, 0x1161B40A,
+    0x056B5FCC, 0x2F21B40C, 0x0451E000, 0x26510001,
+    0x17201061, 0x3B63B400, 0x3560B404, 0x0962B414,
+    0x3A200003, 0x3D605F50, 0x3F200339, 0x06210343,
+    0x1B970CE7, 0x362300AF, 0x14940CE4, 0x0F685F50,
+    0x0834FFFE, 0x3D605F50, 0x30380000, 0x38C8033E,
+    0x398000AF, 0x0F685F50, 0x0434FFFD, 0x3D605F50,
+    0x30380000, 0x02CC00AF, 0x096B5F36, 0x08800D27,
+    0x1E970CED, 0x2D23020D, 0x08800D27, 0x292302F9,
+    0x18800CED, 0x3B635F36, 0x30380000, 0x2FD00349,
+    0x21970372, 0x09685F3A, 0x1C390000, 0x2FC8034F,
+    0x09300002, 0x10404000, 0x3930FFFE, 0x2D010000,
+    0x0F2D01A0, 0x3E610106, 0x1632FFFE, 0x26C80370,
+    0x1F6B5F40, 0x19625F3E, 0x1A0B8000, 0x39C40359,
+    0x01625F40, 0x28038000, 0x0D330003, 0x00D4035D,
+    0x172E0004, 0x280C8000, 0x3B605F3A, 0x1B970CBD,
+    0x19685F4A, 0x33695F4C, 0x3660B408, 0x1161B40A,
+    0x20680106, 0x2B6A5F3E, 0x2421B40E, 0x21510000,
+    0x3B60B40C, 0x24200021, 0x3560B404, 0x0962B414,
+    0x0A685F36, 0x1621035F, 0x362300AF, 0x11800CE4,
+    0x096B5F36, 0x35800116, 0x2B635E90, 0x026B5F34,
+    0x010CC000, 0x084B0000, 0x3E2C0002, 0x0B480000,
+    0x28635F4A, 0x196B5E90, 0x2D605F4C, 0x228B4000,
+    0x336A5F40, 0x36200000, 0x2E605F40, 0x1F3A0000,
+    0x3BCC0CFF, 0x228B4000, 0x0A20FFFF, 0x192D0036,
+    0x0D4A4000, 0x2F2DFFFA, 0x0A625F42, 0x3A34003F,
+    0x2E148000, 0x19CC020D, 0x228B4000, 0x0D4A4000,
+    0x122D0002, 0x0F3607FC, 0x23C8020F, 0x26320002,
+    0x19088000, 0x11C0020F, 0x2B008000, 0x05300001,
+    0x0DD40396, 0x1D2E0001, 0x3E30FFFF, 0x228B4000,
+    0x2D635E96, 0x27200102, 0x2197038B, 0x12600130,
+    0x0C625F44, 0x27200102, 0x2197038B, 0x1F6B5E96,
+    0x1F600134, 0x07625F46, 0x228B4000, 0x0969010C,
+    0x2E68010E, 0x3B3D01A0, 0x03CC03AE, 0x0C2E01A0,
+    0x3862010C, 0x30380000, 0x3EC803AD, 0x19088000,
+    0x1CC0020B, 0x228B4000, 0x28620110, 0x0F630112,
+    0x398000AF, 0x26680100, 0x2D635E96, 0x366AB140,
+    0x1D210001, 0x35230000, 0x03280001, 0x300B0000,
+    0x1A11C000, 0x28038000, 0x2E174000, 0x26C803BF,
+    0x29310001, 0x03280001, 0x23C403B9, 0x1F6B5E96,
+    0x228B4000, 0x2D635E96, 0x19220000, 0x0A625E94,
+    0x1A6BB140, 0x0A690100, 0x31200001, 0x2D02C000,
+    0x2B160000, 0x386A5E94, 0x0CCC03CD, 0x1D2E0001,
+    0x0A625E94, 0x3E30FFFF, 0x252DFFFF, 0x09CC03C7,
+    0x1F6B5E96, 0x386A5E94, 0x228B4000, 0x09625F4E,
+    0x292C03D6, 0x21884000, 0x3780021B, 0x208003E6,
+    0x26800460, 0x2A800463, 0x30800483, 0x248004A4,
+    0x36800509, 0x3C80050C, 0x2B800527, 0x2F80052A,
+    0x27800548, 0x3780021B, 0x3780021B, 0x3780021B,
+    0x3780021B, 0x3780021B, 0x28230018, 0x1263013C,
+    0x28970382, 0x3E970398, 0x0F6A0130, 0x02030000,
+    0x1A0B8000, 0x11C003EF, 0x2E020000, 0x206B013C,
+    0x11685F44, 0x36695F46, 0x25370020, 0x04CC03F5,
+    0x1D2E0001, 0x12625F3C, 0x2D0E0000, 0x040E4000,
+    0x1632FFFE, 0x3A9703A3, 0x319702B8, 0x36200000,
+    0x15210120, 0x3E6A5F44, 0x26970345, 0x38200008,
+    0x18210124, 0x356A5F46, 0x26970345, 0x3D9702BB,
+    0x09685F3A, 0x09210010, 0x09300002, 0x0F600128,
+    0x35610104, 0x2997037C, 0x16970D35, 0x20680130,
+    0x01690134, 0x1C6A0120, 0x3D6B0124, 0x3460B010,
+    0x1561B014, 0x3D680128, 0x1C69012C, 0x172E0068,
+    0x0862B000, 0x3B2F0068, 0x2963B004, 0x016A0138,
+    0x382C0068, 0x2960B008, 0x142D0068, 0x0861B00C,
+    0x1562B018, 0x2368013C, 0x362300AF, 0x1A388000,
+    0x3760B01C, 0x1A940D3A, 0x14685F4E, 0x2E6A5F34,
+    0x30380000, 0x38C8042B, 0x21884000, 0x1C208000,
+    0x13408000, 0x36200000, 0x22800437, 0x09685F3A,
+    0x2169B024, 0x012E0028, 0x1C390000, 0x3DD00427,
+    0x09300002, 0x382C0068, 0x1F090000, 0x1531FFFE,
+    0x0E68B028, 0x3F418000, 0x2F34001F, 0x112E0002,
+    0x13408000, 0x2B008000, 0x3E2C0002, 0x0D500000,
+    0x0D500000, 0x07970D42, 0x206A5F3C, 0x01685F34,
+    0x1632FFFE, 0x3BC8021D, 0x286B0104, 0x25695F3A,
+    0x12625F3C, 0x01625F40, 0x010CC000, 0x0F2D01A0,
+    0x35610104, 0x27490000, 0x3E2C0002, 0x0B480000,
+    0x07615F4A, 0x2D605F4C, 0x1B970CBD, 0x19685F4A,
+    0x33695F4C, 0x3B60B40C, 0x1C61B40E, 0x2B680104,
+    0x1A210000, 0x1161B40A, 0x3660B408, 0x206A5F3C,
+    0x28200081, 0x3560B404, 0x0962B414, 0x1B21044E,
+    0x362300AF, 0x14940CE4, 0x3E23021D, 0x2F80037C,
+    0x2E230028, 0x1263013C, 0x288003E8, 0x28970382,
+    0x27200102, 0x2197038B, 0x12600130, 0x0C625F44,
+    0x322C0001, 0x3D605F3C, 0x1D32FFFC, 0x172E0004,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x26970345, 0x3E6A5F44, 0x38200008,
+    0x18210124, 0x26970345, 0x3E6A5F44, 0x25200010,
+    0x1B210128, 0x26970345, 0x3D9702BB, 0x09685F3A,
+    0x07210018, 0x09300002, 0x0260012C, 0x35610104,
+    0x3023000A, 0x1263013C, 0x2C800409, 0x28970382,
+    0x3E970398, 0x11685F44, 0x2D0E0000, 0x1632FFFE,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x26970345, 0x356A5F46, 0x38200008,
+    0x18210124, 0x26970345, 0x3D9702BB, 0x09685F3A,
+    0x0F6A0130, 0x2E6B0134, 0x09300002, 0x0F600128,
+    0x2E0EC000, 0x1632FFFE, 0x12625F3C, 0x15208009,
+    0x3797022B, 0x0E970DE8, 0x3E680148, 0x0A970EB9,
+    0x1A210000, 0x236A5F5C, 0x25200010, 0x00800ED6,
+    0x06208100, 0x1160013C, 0x28970382, 0x3E970398,
+    0x236B0130, 0x3D695F44, 0x300B0000, 0x11C0020F,
+    0x0834FFFE, 0x23C8020F, 0x040E4000, 0x1632FFFE,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x26970345, 0x356A5F46, 0x38200008,
+    0x18210124, 0x26970345, 0x3D9702BB, 0x026A0134,
+    0x12690124, 0x262EFFFF, 0x040D8000, 0x1531FFFE,
+    0x0F2D01A0, 0x0D4A4000, 0x122D0002, 0x0E494000,
+    0x2368013C, 0x011A4000, 0x35C80215, 0x25695F3A,
+    0x026A0134, 0x25310002, 0x23610128, 0x29340100,
+    0x3DC804D8, 0x236B0130, 0x2B008000, 0x1A0B8000,
+    0x312F0001, 0x1D2E0001, 0x05300001, 0x3FD004D5,
+    0x1D2E0001, 0x040D8000, 0x2E61012C, 0x2E0EC000,
+    0x1632FFFE, 0x12625F3C, 0x2368013C, 0x3797022B,
+    0x0E970DE8, 0x0C69015C, 0x3368014C, 0x05350100,
+    0x3EC80502, 0x0A970EB9, 0x22520000, 0x172E0004,
+    0x07690168, 0x3E680148, 0x1C390000, 0x31D004EB,
+    0x1F090000, 0x1531FFFE, 0x3C8004EC, 0x30218000,
+    0x04685F52, 0x2A2EFFFC, 0x3F418000, 0x15381000,
+    0x36605F52, 0x0497108D, 0x016A0154, 0x2068015C,
+    0x1A210000, 0x1632FFFE, 0x29340100, 0x25200010,
+    0x32C80501, 0x01970ED7, 0x3E680148, 0x1F69014C,
+    0x236A5F5C, 0x1F090000, 0x1531FFFE, 0x350A4000,
+    0x2B200018, 0x00800ED6, 0x2E6A5F58, 0x012E0028,
+    0x22520000, 0x22520000, 0x22520000, 0x22520000,
+    0x328004E4, 0x00208200, 0x1160013C, 0x2F8004A6,
+    0x21200088, 0x1160013C, 0x28970382, 0x03361F00,
+    0x23320008, 0x33620138, 0x27200102, 0x2197038B,
+    0x12600130, 0x2D6B0138, 0x0C625F44, 0x333B0000,
+    0x206B013C, 0x15CC051B, 0x2480051E, 0x26370040,
+    0x1FCC051E, 0x322C0001, 0x3D605F3C, 0x2D0E0000,
+    0x1632FFFE, 0x3A9703A3, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x27230404, 0x20800345, 0x2E200048,
+    0x1160013C, 0x3780050E, 0x28970382, 0x27200102,
+    0x2197038B, 0x12600130, 0x0C625F44, 0x1A32FFFD,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x26970345, 0x3E6A5F44, 0x38200008,
+    0x18210124, 0x26970345, 0x3D9702BB, 0x25200540,
+    0x26605F4E, 0x2A230400, 0x1263013C, 0x2C800409,
+    0x2C69B020, 0x012E0028, 0x22520000, 0x22520000,
+    0x22520000, 0x3F418000, 0x3E23021D, 0x01800D42,
+    0x28970382, 0x2A2001FF, 0x2197038B, 0x12600130,
+    0x3D605F3C, 0x2E020000, 0x0C625F44, 0x1632FFFE,
+    0x3A9703A3, 0x36200000, 0x15210120, 0x3E6A5F44,
+    0x26970345, 0x36200000, 0x3B605F3A, 0x0F600128,
+    0x09210010, 0x35610104, 0x18230808, 0x1263013C,
+    0x2C800409, 0x02030000, 0x0D37FFF8, 0x0CCC021B,
+    0x382C0562, 0x21884000, 0x3980056A, 0x208005B0,
+    0x2580061F, 0x31800638, 0x2680067F, 0x268006B0,
+    0x3780021B, 0x3780021B, 0x0620FFFC, 0x2F970383,
+    0x03361F00, 0x23320008, 0x33620138, 0x3F2A0011,
+    0x3BC40211, 0x3E970398, 0x05300001, 0x29D00575,
+    0x112E0002, 0x25347FFF, 0x23C8020F, 0x2E680138,
+    0x07625F46, 0x322C0001, 0x08280003, 0x22C4057D,
+    0x36200000, 0x0D240005, 0x07018000, 0x15072000,
+    0x333B0000, 0x02CC0213, 0x3D695F44, 0x092E0010,
+    0x040E4000, 0x082A0800, 0x356A5F46, 0x30C40213,
+    0x1132FFFF, 0x040E4000, 0x1632FFFE, 0x3A9703A3,
+    0x319702B8, 0x36200000, 0x15210120, 0x146B5F42,
+    0x3E6A5F44, 0x06330001, 0x33D00595, 0x3C230596,
+    0x20800345, 0x2B9702CD, 0x146B5F42, 0x38200008,
+    0x18210124, 0x356A5F46, 0x0A330002, 0x31D0059E,
+    0x3523059F, 0x20800345, 0x2B9702CD, 0x0A6B5F3A,
+    0x356A5F46, 0x1B210128, 0x2B635F46, 0x25200010,
+    0x26970345, 0x3D9702BB, 0x196B5F46, 0x3D680128,
+    0x026A0134, 0x0260012C, 0x1632FFFE, 0x38635F3A,
+    0x12625F3C, 0x1320E000, 0x2B230618, 0x3180022B,
+    0x0B20FFF8, 0x2F970383, 0x03361F00, 0x23320008,
+    0x33620138, 0x3F2A0011, 0x3BC40211, 0x24200082,
+    0x2197038B, 0x12600130, 0x0C625F44, 0x24200082,
+    0x2197038B, 0x1F600134, 0x05300001, 0x3BD005C1,
+    0x112E0002, 0x25347FFF, 0x23C8020F, 0x2E680138,
+    0x07625F46, 0x3E2C0002, 0x09280004, 0x30C405C9,
+    0x36200000, 0x3C2C0009, 0x07018000, 0x15072000,
+    0x333B0000, 0x02CC0213, 0x3D695F44, 0x2D680134,
+    0x092E0010, 0x1231FFFF, 0x082A0800, 0x30C40213,
+    0x2E020000, 0x1632FFFE, 0x2D0E0000, 0x040E4000,
+    0x102E0005, 0x1632FFFE, 0x3A9703A3, 0x319702B8,
+    0x36200000, 0x15210120, 0x146B5F42, 0x3E6A5F44,
+    0x06330001, 0x23D005E5, 0x1132FFFF, 0x242305E8,
+    0x20800345, 0x2B9702CD, 0x3E6A5F44, 0x2E9702C7,
+    0x146B5F42, 0x38200008, 0x18210124, 0x356A5F46,
+    0x0A330002, 0x3DD005F1, 0x1132FFFF, 0x342305F4,
+    0x20800345, 0x2B9702CD, 0x356A5F46, 0x2E9702C7,
+    0x12690124, 0x356A5F46, 0x1531FFFE, 0x0F2D01A0,
+    0x22484000, 0x1632FFFE, 0x040D8000, 0x214B4000,
+    0x34340001, 0x36C80219, 0x37370001, 0x36C80219,
+    0x026A0134, 0x25200010, 0x146B5F42, 0x1B210128,
+    0x0D330003, 0x3BD00608, 0x3F230609, 0x20800345,
+    0x2B9702CD, 0x09685F3A, 0x026A0134, 0x26605F4E,
+    0x2D200028, 0x1621012C, 0x1132FFFF, 0x26970345,
+    0x3D9702BB, 0x14685F4E, 0x026A0134, 0x3B605F3A,
+    0x39209000, 0x1A32FFFD, 0x12625F3C, 0x3797022B,
+    0x0E970DE8, 0x3368014C, 0x0A970EB9, 0x1A210000,
+    0x236A5F5C, 0x2B200018, 0x00800ED6, 0x28970382,
+    0x3E970398, 0x126B5F44, 0x2E0EC000, 0x1632FFFE,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x3E6A5F44, 0x26970345, 0x38200008, 0x18210124,
+    0x356A5F46, 0x26970345, 0x3D9702BB, 0x0A6B5F3A,
+    0x026A0134, 0x0A330002, 0x0163012C, 0x1632FFFE,
+    0x12625F3C, 0x3620F000, 0x2B230618, 0x3180022B,
+    0x0B20FFF8, 0x2F970383, 0x0A625F42, 0x2B200018,
+    0x2197038B, 0x12600130, 0x0C625F44, 0x2B200018,
+    0x2197038B, 0x1F600134, 0x0834FFFE, 0x23C8020F,
+    0x112E0002, 0x07625F46, 0x3A20A000, 0x1160013C,
+    0x3D695F44, 0x28038000, 0x070E8000, 0x2E0EC000,
+    0x040E4000, 0x1632FFFE, 0x3A9703A3, 0x319702B8,
+    0x36200000, 0x15210120, 0x146B5F42, 0x3E6A5F44,
+    0x06330001, 0x3ED00658, 0x3A230659, 0x20800345,
+    0x2B9702CD, 0x146B5F42, 0x356A5F46, 0x38200008,
+    0x0A330002, 0x3DD00662, 0x1132FFFF, 0x18210124,
+    0x33230666, 0x20800345, 0x18210124, 0x2B9702CD,
+    0x356A5F46, 0x2E9702C7, 0x25200010, 0x1B210128,
+    0x146B5F42, 0x356A5F46, 0x0D330003, 0x3ED0066E,
+    0x3A23066F, 0x20800345, 0x2B9702CD, 0x3D9702BB,
+    0x09685F3A, 0x356A5F46, 0x1632FFFE, 0x12625F3C,
+    0x09300002, 0x0260012C, 0x2368013C, 0x3797022B,
+    0x0E970DE8, 0x3368014C, 0x0A970EB9, 0x1A210000,
+    0x236A5F5C, 0x2B200018, 0x00800ED6, 0x0C20FFF9,
+    0x2F970383, 0x0A625F42, 0x122D0002, 0x2B200018,
+    0x2197038B, 0x1F600134, 0x0834FFFE, 0x23C8020F,
+    0x112E0002, 0x07625F46, 0x2920013C, 0x27508000,
+    0x0A500001, 0x23290002, 0x22484000, 0x28038000,
+    0x1A32FFFD, 0x2E0EC000, 0x3F340003, 0x20605F48,
+    0x1632FFFE, 0x3A9703A3, 0x319702B8, 0x356A5F46,
+    0x116B5F48, 0x2B008000, 0x1132FFFF, 0x37370001,
+    0x31C8069E, 0x2D0E0000, 0x15210120, 0x36200000,
+    0x26970345, 0x116B5F48, 0x356A5F46, 0x37370001,
+    0x1FCC06D7, 0x2B2306D7, 0x09685F3A, 0x2E01C000,
+    0x232C01A0, 0x0A500001, 0x1632FFFE, 0x202A0002,
+    0x0F970FF0, 0x122801A0, 0x3B605F3A, 0x0D894000,
+    0x0B20FFF8, 0x2F970383, 0x0A625F42, 0x2B200018,
+    0x2197038B, 0x12600130, 0x0C625F44, 0x2B200018,
+    0x2197038B, 0x1F600134, 0x0834FFFE, 0x23C8020F,
+    0x112E0002, 0x07625F46, 0x2920013C, 0x02509000,
+    0x0A500001, 0x23290002, 0x22484000, 0x3D695F44,
+    0x38340002, 0x20605F48, 0x1132FFFF, 0x28038000,
+    0x2E0EC000, 0x2E0EC000, 0x040E4000, 0x1632FFFE,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x146B5F42, 0x3E6A5F44, 0x06330001, 0x2FD006D6,
+    0x2B2306D7, 0x20800345, 0x2B9702CD, 0x146B5F42,
+    0x356A5F46, 0x38200008, 0x0A330002, 0x24D006E2,
+    0x07018000, 0x1132FFFF, 0x040E4000, 0x18210124,
+    0x222306E8, 0x20800345, 0x18210124, 0x2B9702CD,
+    0x356A5F46, 0x2E9702C7, 0x356A5F46, 0x2E9702C7,
+    0x146B5F42, 0x356A5F46, 0x1B210128, 0x0D330003,
+    0x20D0070F, 0x116B5F48, 0x2B008000, 0x1132FFFF,
+    0x37370001, 0x36C806F3, 0x2D0E0000, 0x25200010,
+    0x26970345, 0x116B5F48, 0x356A5F46, 0x37370001,
+    0x05CC0718, 0x0F69013C, 0x01685F34, 0x356A5F46,
+    0x223D9000, 0x1CCC070D, 0x2E2C0028, 0x084B0000,
+    0x3E2C0002, 0x27490000, 0x3E2C0002, 0x2D1B4000,
+    0x27490000, 0x3E2C0002, 0x2D1B4000, 0x27490000,
+    0x2D200028, 0x2D1B4000, 0x2DC8070D, 0x31230718,
+    0x20800345, 0x31230718, 0x338006A6, 0x25200010,
+    0x2B9702CD, 0x356A5F46, 0x2E9702C7, 0x116B5F48,
+    0x356A5F46, 0x37370001, 0x33C806F9, 0x2E9702C7,
+    0x3D9702BB, 0x3D6A5F48, 0x09685F3A, 0x17360002,
+    0x37C80722, 0x356A5F46, 0x01690134, 0x1132FFFF,
+    0x040E4000, 0x1632FFFE, 0x12625F3C, 0x09300002,
+    0x0260012C, 0x2368013C, 0x3797022B, 0x2D695F58,
+    0x142D0032, 0x22484000, 0x38340002, 0x10CC0738,
+    0x016A0154, 0x3A20A000, 0x28038000, 0x06330001,
+    0x13D40732, 0x1D2E0001, 0x112E0002, 0x3D33FFFF,
+    0x2E0EC000, 0x1632FFFE, 0x11625F5C, 0x0B970DD4,
+    0x0E970DE8, 0x3368014C, 0x0A970EB9, 0x1A210000,
+    0x236A5F5C, 0x2B200018, 0x00800ED6, 0x02030000,
+    0x052B000B, 0x3EC4021B, 0x372C0744, 0x21884000,
+    0x2B800754, 0x0D800811, 0x18800A18, 0x0B800AF1,
+    0x3780021B, 0x0D800811, 0x3780021B, 0x0B800AF1,
+    0x2D800752, 0x3780021B, 0x2A800753, 0x30380000,
+    0x0CCC021B, 0x1C800C2F, 0x3780021B, 0x3780021B,
+    0x0620FFFC, 0x2F970383, 0x122D0002, 0x2B200018,
+    0x2197038B, 0x12600130, 0x1F600134, 0x0834FFFE,
+    0x23C8020F, 0x112E0002, 0x23290002, 0x22484000,
+    0x07625F46, 0x34340001, 0x20605F48, 0x2B008000,
+    0x3530FFFD, 0x2D0E0000, 0x2D0E0000, 0x1632FFFE,
+    0x3A9703A3, 0x319702B8, 0x36200000, 0x15210120,
+    0x146B5F42, 0x356A5F46, 0x06330001, 0x34D00772,
+    0x30230773, 0x20800345, 0x2B9702CD, 0x1E9709E7,
+    0x356A5F46, 0x2D200028, 0x1A210000, 0x26970345,
+    0x3D9702BB, 0x1A685F46, 0x36695F46, 0x3530FFFD,
+    0x2B0C4000, 0x01600120, 0x1531FFFE, 0x20610124,
+    0x026A0134, 0x3930FFFE, 0x232C01A0, 0x1132FFFF,
+    0x1A210000, 0x084B0000, 0x3E2C0002, 0x2819C000,
+    0x262EFFFF, 0x0BCC0785, 0x2435FFFE, 0x3EC80217,
+    0x16970D35, 0x01690134, 0x1C6A0120, 0x3D6B0124,
+    0x03208400, 0x172E0068, 0x3B2F0068, 0x1861B010,
+    0x0862B000, 0x2963B004, 0x3760B01C, 0x362300AF,
+    0x1A940D3A, 0x2C69B020, 0x25310002, 0x2DD0079E,
+    0x07970D42, 0x34800217, 0x07970D42, 0x1A685F46,
+    0x19220000, 0x0C600124, 0x2D010000, 0x1531FFFE,
+    0x2E0D0000, 0x23610128, 0x070D4000, 0x2E0D0000,
+    0x2E61012C, 0x12625F3C, 0x31200001, 0x1A60013E,
+    0x39209000, 0x3797022B, 0x3A20A000, 0x0B970DD4,
+    0x28680164, 0x126A0144, 0x28038000, 0x1632FFFE,
+    0x2E0EC000, 0x30380000, 0x08D00EB7, 0x1F69014C,
+    0x070E8000, 0x2E610140, 0x23620148, 0x35098000,
+    0x2D61014C, 0x1531FFFE, 0x23610144, 0x00208200,
+    0x00970DD6, 0x2B680168, 0x1C6A014C, 0x30380000,
+    0x08D00EB7, 0x12690148, 0x23620148, 0x35098000,
+    0x2E610140, 0x35098000, 0x1632FFFE, 0x040D8000,
+    0x2D61014C, 0x3620F000, 0x00970DD6, 0x3E680148,
+    0x1C690140, 0x19220000, 0x20620144, 0x0160014C,
+    0x2E0D0000, 0x2E610140, 0x3230FFFC, 0x0C600148,
+    0x1B208001, 0x00970DD6, 0x116A0148, 0x3368014C,
+    0x2D6B0154, 0x2D620140, 0x2D010000, 0x3530FFFD,
+    0x0F600144, 0x05300001, 0x1C0A0000, 0x040D8000,
+    0x20610148, 0x020FC000, 0x12630150, 0x0F208010,
+    0x00970DD6, 0x28680164, 0x1C690140, 0x30380000,
+    0x08D00EB7, 0x116A0148, 0x3368014C, 0x206B0150,
+    0x20610148, 0x2D620140, 0x312F0001, 0x12630150,
+    0x1C0A0000, 0x20620144, 0x1B208001, 0x00970DD6,
+    0x0C6A0150, 0x2D6B0154, 0x3368014C, 0x12690148,
+    0x2E0EC000, 0x3E620150, 0x126A0144, 0x2E610140,
+    0x1C0A0000, 0x23620148, 0x010F0000, 0x3A33FFFE,
+    0x3D635F5C, 0x3930FFFE, 0x0F600144, 0x00208200,
+    0x00970DD6, 0x0E970DE8, 0x07690168, 0x236A5F5C,
+    0x1C390000, 0x08D00EB7, 0x1B970ECE, 0x2B200018,
+    0x00800ED6, 0x0120FFFD, 0x2F970383, 0x122D0002,
+    0x2B200018, 0x2197038B, 0x12600130, 0x1F600134,
+    0x0834FFFE, 0x23C8020F, 0x112E0002, 0x23290002,
+    0x22484000, 0x07625F46, 0x38340002, 0x20605F48,
+    0x2B008000, 0x07018000, 0x3930FFFE, 0x1A32FFFD,
+    0x2D0E0000, 0x040E4000, 0x1632FFFE, 0x3A9703A3,
+    0x319702B8, 0x1E9709E7, 0x356A5F46, 0x2D200028,
+    0x1A210000, 0x1132FFFF, 0x26970345, 0x36200000,
+    0x356A5F46, 0x1A210000, 0x1132FFFF, 0x26970345,
+    0x3D9702BB, 0x356A5F46, 0x359706A6, 0x36695F46,
+    0x1A685F46, 0x1931FFFD, 0x2D610120, 0x29310001,
+    0x1F090000, 0x20610124, 0x16970D35, 0x01690134,
+    0x1C6A0120, 0x1861B010, 0x172E0068, 0x0862B000,
+    0x0662B008, 0x31208808, 0x3760B01C, 0x362300AF,
+    0x1A940D3A, 0x2169B024, 0x1C390000, 0x10D008F3,
+    0x12690124, 0x03208400, 0x142D0068, 0x0661B004,
+    0x3760B01C, 0x362300AF, 0x1A940D3A, 0x2C69B020,
+    0x25310002, 0x21D408F3, 0x36695F46, 0x1C6A0120,
+    0x31208808, 0x040E4000, 0x2E620120, 0x172E0068,
+    0x0862B000, 0x0662B008, 0x3760B01C, 0x362300AF,
+    0x1A940D3A, 0x2169B024, 0x1C390000, 0x10D008F3,
+    0x03208400, 0x3760B01C, 0x362300AF, 0x1A940D3A,
+    0x2C69B020, 0x25310002, 0x21D408F3, 0x07970D42,
+    0x1A685F46, 0x1F690120, 0x0F600128, 0x3930FFFE,
+    0x2E0D0000, 0x2E61012C, 0x329703C1, 0x11615F3C,
+    0x3620F000, 0x202A0002, 0x13C408F5, 0x3E695F48,
+    0x14350002, 0x21CC08F5, 0x3797022B, 0x0A9709C0,
+    0x089709CB, 0x016A0154, 0x3368014C, 0x336B0140,
+    0x3E620150, 0x12690148, 0x0F630148, 0x300B0000,
+    0x0C630144, 0x3E30FFFF, 0x1F090000, 0x2E610140,
+    0x1B208001, 0x00970DD6, 0x1C9709DA, 0x3368014C,
+    0x1F6A0140, 0x12690148, 0x2D6B0154, 0x1C0A0000,
+    0x2E62014C, 0x3E30FFFF, 0x2E0D0000, 0x2E610140,
+    0x05300001, 0x2E0D0000, 0x20610148, 0x36200000,
+    0x0F600144, 0x12630150, 0x39209000, 0x0B970DD4,
+    0x3E680148, 0x1C690140, 0x1C6A014C, 0x1A084000,
+    0x0160014C, 0x20610148, 0x2D620140, 0x2D010000,
+    0x3E30FFFF, 0x2E0D0000, 0x3D610150, 0x3F208800,
+    0x00970DD6, 0x3368014C, 0x1F6A0140, 0x12690148,
+    0x2D6B0154, 0x1C0A0000, 0x2E62014C, 0x3E30FFFF,
+    0x1F090000, 0x2E610140, 0x3930FFFE, 0x1C0A0000,
+    0x23620148, 0x12630150, 0x39209000, 0x0B970DD4,
+    0x3368014C, 0x12690148, 0x1F6A0140, 0x0C600148,
+    0x1A084000, 0x28038000, 0x2D0E0000, 0x2E62014C,
+    0x09300002, 0x010F0000, 0x01630140, 0x1C208000,
+    0x0B970DD4, 0x3A20A000, 0x0B970DD4, 0x2E680154,
+    0x1C6A014C, 0x2D010000, 0x29310001, 0x2FD408CD,
+    0x322C0001, 0x3E2C0002, 0x0160014C, 0x2D620140,
+    0x2D010000, 0x3E30FFFF, 0x2B0C4000, 0x0F600144,
+    0x2D010000, 0x3E30FFFF, 0x2E0D0000, 0x20610148,
+    0x00208200, 0x00970DD6, 0x3E680148, 0x306B014C,
+    0x016A0154, 0x02600140, 0x2D010000, 0x3930FFFE,
+    0x38605F5A, 0x1C09C000, 0x23610144, 0x1632FFFE,
+    0x11625F5C, 0x03208400, 0x00970DD6, 0x0E970DE8,
+    0x1B970ECE, 0x026B5F58, 0x0A6A0160, 0x3D2F0034,
+    0x0B4BC000, 0x16420000, 0x3D370004, 0x25CC0DA8,
+    0x236A5F5C, 0x2B200018, 0x00800ED6, 0x07970D42,
+    0x3F800215, 0x1160013C, 0x2997037C, 0x0C2309A3,
+    0x2B635F46, 0x1E2008FB, 0x38605F36, 0x229703B1,
+    0x05CC027E, 0x22970251, 0x0B230901, 0x2B635F46,
+    0x3B80022E, 0x3E680148, 0x1C6A014C, 0x1C690140,
+    0x0160014C, 0x20620144, 0x2D0E0000, 0x3E30FFFF,
+    0x1F090000, 0x2E610140, 0x23620148, 0x1B208001,
+    0x00970DD6, 0x1C9709DA, 0x12690148, 0x3368014C,
+    0x1F6A0140, 0x2D6B0154, 0x2E610140, 0x1C0A0000,
+    0x1C0A0000, 0x2E62014C, 0x3930FFFE, 0x0C600148,
+    0x36200000, 0x0F600144, 0x12630150, 0x39209000,
+    0x0B970DD4, 0x3368014C, 0x12690148, 0x1F6A0140,
+    0x0C600148, 0x1A084000, 0x09300002, 0x2D0E0000,
+    0x2D620140, 0x05300001, 0x0160014C, 0x25200010,
+    0x28695F52, 0x19220000, 0x2B190000, 0x1A615F52,
+    0x26695F6C, 0x1F238000, 0x38635F56, 0x22484000,
+    0x026B5F34, 0x122D0002, 0x3F424000, 0x351F0000,
+    0x0EC80DB1, 0x16235F7A, 0x2449C000, 0x3D2F0002,
+    0x1A1D0000, 0x29CC0941, 0x2449C000, 0x1C390000,
+    0x3FCC0DB1, 0x25695F56, 0x1C390000, 0x25D40944,
+    0x14625F56, 0x302F0006, 0x1D2E0001, 0x03800936,
+    0x04685F52, 0x076B5F52, 0x3C34000F, 0x393700F0,
+    0x2DCC094C, 0x1C1C8000, 0x26CC094E, 0x06800950,
+    0x1C1C8000, 0x3DCC0950, 0x1D32FFFC, 0x01800951,
+    0x1E31FFFC, 0x01198000, 0x17615F56, 0x076B5F52,
+    0x23310004, 0x1035000F, 0x3F37000F, 0x1C1F4000,
+    0x0CC80966, 0x28004000, 0x07645F52, 0x1331FFF8,
+    0x32394001, 0x12615F6A, 0x2D010000, 0x22310003,
+    0x19615F68, 0x3E30FFFF, 0x032C0D70, 0x05230965,
+    0x21884000, 0x38605F6C, 0x116A0148, 0x1F69014C,
+    0x30680140, 0x040D8000, 0x1531FFFE, 0x17615F60,
+    0x3D6B0148, 0x1C0A0000, 0x2B0F8000, 0x0263014C,
+    0x3930FFFE, 0x30605F62, 0x1632FFFE, 0x12625F66,
+    0x10970CD3, 0x34200051, 0x2360B444, 0x09685F56,
+    0x0A6B5F60, 0x3C34000F, 0x0E300003, 0x2D010000,
+    0x0934FF00, 0x010CC000, 0x2060B448, 0x193500FF,
+    0x0761B44A, 0x07685F68, 0x016B5F62, 0x206A5F66,
+    0x2D010000, 0x0934FF00, 0x010CC000, 0x2D60B44C,
+    0x193500FF, 0x0A61B44E, 0x1F62B454, 0x1920098F,
+    0x3E210974, 0x362300AF, 0x19800CEA, 0x1D210001,
+    0x3561015E, 0x1C208000, 0x1260015C, 0x02970E78,
+    0x076B5F52, 0x0A685F6C, 0x3F37000F, 0x293B0100,
+    0x2563B144, 0x3C2108C5, 0x3E2C0002, 0x15410000,
+    0x09685F56, 0x0B230DB1, 0x3C34000F, 0x07645F52,
+    0x0E300003, 0x35605F68, 0x08800DE8, 0x0A9709C0,
+    0x089709CB, 0x3368014C, 0x1F6A0140, 0x12690148,
+    0x2D6B0154, 0x1C0A0000, 0x2E62014C, 0x1F6A0140,
+    0x12630150, 0x2E610140, 0x3930FFFE, 0x1C0A0000,
+    0x23620148, 0x36200000, 0x0F600144, 0x39209000,
+    0x0B970DD4, 0x1C690140, 0x3E680148, 0x116A0148,
+    0x2E610140, 0x1A084000, 0x0160014C, 0x3E30FFFF,
+    0x2D0E0000, 0x23620148, 0x36200000, 0x18800928,
+    0x3E680148, 0x1C6A014C, 0x1C690140, 0x0160014C,
+    0x20620144, 0x1F090000, 0x2D0E0000, 0x2E610140,
+    0x23620148, 0x1B208001, 0x06800DD6, 0x3368014C,
+    0x12690148, 0x1F6A0140, 0x2E610140, 0x2D0E0000,
+    0x23620148, 0x2E020000, 0x1632FFFE, 0x1C0A0000,
+    0x2E680154, 0x20620144, 0x020C0000, 0x11600150,
+    0x00208200, 0x06800DD6, 0x1F6A0140, 0x12690148,
+    0x3368014C, 0x23620148, 0x2E610140, 0x3930FFFE,
+    0x1C0A0000, 0x2E680154, 0x20620144, 0x020C0000,
+    0x11600150, 0x00208200, 0x06800DD6, 0x25635F4E,
+    0x146B5F42, 0x356A5F46, 0x38200008, 0x1A210000,
+    0x0A330002, 0x0BD009F4, 0x28038000, 0x1632FFFE,
+    0x3D33FFFF, 0x2E0EC000, 0x0A2309FF, 0x20800345,
+    0x2B9702CD, 0x356A5F46, 0x2E9702C7, 0x356A5F46,
+    0x2E9702C7, 0x356A5F46, 0x2E9702C7, 0x356A5F46,
+    0x2E9702C7, 0x356A5F46, 0x2E9702C7, 0x3E695F48,
+    0x356A5F46, 0x18350001, 0x17C80A12, 0x2D200028,
+    0x21970372, 0x19685F4A, 0x33695F4C, 0x1632FFFE,
+    0x1A048000, 0x0FC40A0C, 0x1E2D0001, 0x01615F4C,
+    0x2B605F4A, 0x0A20FFFF, 0x1A210000, 0x356A5F46,
+    0x15230A13, 0x20800345, 0x359706A6, 0x356A5F46,
+    0x25200010, 0x1A210000, 0x176B5F4E, 0x20800345,
+    0x0620FFFC, 0x2F970383, 0x03361F00, 0x38C80211,
+    0x23320008, 0x33620138, 0x3F2A0011, 0x3BC40211,
+    0x3E970398, 0x236B0130, 0x2D010000, 0x2435FFFE,
+    0x23C8020F, 0x3008C000, 0x26C00A28, 0x12CC020F,
+    0x126B5F44, 0x112E0002, 0x07625F46, 0x3D2F0002,
+    0x20635F44, 0x3D33FFFF, 0x1632FFFE, 0x2E0EC000,
+    0x1632FFFE, 0x3A9703A3, 0x2E680138, 0x3D695F44,
+    0x02030000, 0x0B2B0003, 0x04C40A38, 0x3A200003,
+    0x392C0003, 0x15072000, 0x333B0000, 0x02CC0213,
+    0x36695F46, 0x092E0010, 0x2B034000, 0x1931FFFD,
+    0x1C09C000, 0x040E4000, 0x082A0800, 0x30C40213,
+    0x319702B8, 0x36200000, 0x15210120, 0x146B5F42,
+    0x356A5F46, 0x06330001, 0x1BD00A4D, 0x14230A4E,
+    0x20800345, 0x2B9702CD, 0x08970C0E, 0x356A5F46,
+    0x2D200028, 0x1A210000, 0x26970345, 0x3D9702BB,
+    0x3D695F44, 0x1A685F46, 0x1231FFFF, 0x2E0D0000,
+    0x20610124, 0x3E30FFFF, 0x2E0D0000, 0x2D610120,
+    0x16970D35, 0x01690134, 0x1C6A0120, 0x1861B010,
+    0x172E0068, 0x0862B000, 0x0662B008, 0x31208808,
+    0x3760B01C, 0x362300AF, 0x1A940D3A, 0x2169B024,
+    0x1C390000, 0x14D00A74, 0x12690124, 0x03208400,
+    0x142D0068, 0x0661B004, 0x3760B01C, 0x362300AF,
+    0x1A940D3A, 0x2C69B020, 0x25310002, 0x1FD00A76,
+    0x07970D42, 0x34800217, 0x07970D42, 0x1A685F46,
+    0x3D695F44, 0x1C6A0120, 0x0C600124, 0x2E0D0000,
+    0x23610128, 0x0C690130, 0x2E6B0134, 0x3930FFFE,
+    0x2D0E0000, 0x2D62012C, 0x11630130, 0x33610134,
+    0x19220000, 0x12625F3C, 0x1320E000, 0x3797022B,
+    0x28680164, 0x0F690150, 0x30380000, 0x08D00EB7,
+    0x2D6B0154, 0x126A0144, 0x3368014C, 0x30610154,
+    0x312F0001, 0x12630150, 0x1C690140, 0x2E62014C,
+    0x02600140, 0x28004000, 0x040D8000, 0x20610148,
+    0x1132FFFF, 0x19088000, 0x0F600144, 0x00208200,
+    0x00970DD6, 0x2B680168, 0x2D6B0154, 0x30380000,
+    0x08D00EB7, 0x1C6A014C, 0x12690148, 0x12630150,
+    0x23620148, 0x35098000, 0x2E610140, 0x040D8000,
+    0x1132FFFF, 0x040D8000, 0x2D61014C, 0x3620F000,
+    0x00970DD6, 0x3E680148, 0x1F69014C, 0x1F6A0140,
+    0x35230000, 0x0C630144, 0x0160014C, 0x2E0D0000,
+    0x20610148, 0x2D0E0000, 0x2D620140, 0x1B208001,
+    0x00970DD6, 0x116A0148, 0x3368014C, 0x1C690140,
+    0x2D6B0154, 0x2D620140, 0x2D0E0000, 0x3E30FFFF,
+    0x2D0E0000, 0x23620148, 0x1F090000, 0x23610144,
+    0x3D33FFFF, 0x12630150, 0x0F208010, 0x00970DD6,
+    0x04690164, 0x3368014C, 0x1C390000, 0x08D00EB7,
+    0x1C690140, 0x116A0148, 0x206B0150, 0x20610148,
+    0x2D620140, 0x312F0001, 0x12630150, 0x1F090000,
+    0x23610144, 0x1B208001, 0x00970DD6, 0x0C6A0150,
+    0x2D6B0154, 0x3368014C, 0x12690148, 0x2E0EC000,
+    0x3E620150, 0x010F0000, 0x3A33FFFE, 0x3D635F5C,
+    0x3E6B0144, 0x2E610140, 0x300B0000, 0x0F630148,
+    0x3930FFFE, 0x300B0000, 0x0C630144, 0x00208200,
+    0x00970DD6, 0x0E970DE8, 0x07690168, 0x236A5F5C,
+    0x1C390000, 0x08D00EB7, 0x1B970ECE, 0x2B200018,
+    0x00800ED6, 0x0120FFFD, 0x2F970383, 0x03361F00,
+    0x38C80211, 0x23320008, 0x33620138, 0x3F2A0011,
+    0x3BC40211, 0x3E970398, 0x236B0130, 0x2D010000,
+    0x2435FFFE, 0x23C8020F, 0x3008C000, 0x20C00B01,
+    0x12CC020F, 0x126B5F44, 0x112E0002, 0x07625F46,
+    0x3D2F0002, 0x20635F44, 0x0200C000, 0x3D33FFFF,
+    0x010F0000, 0x1632FFFE, 0x2E0EC000, 0x1632FFFE,
+    0x3A9703A3, 0x2E680138, 0x3D695F44, 0x02030000,
+    0x0B2B0003, 0x09C40B13, 0x3A200003, 0x3F2C0005,
+    0x15072000, 0x333B0000, 0x02CC0213, 0x36695F46,
+    0x092E0010, 0x1531FFFE, 0x040E4000, 0x082A0800,
+    0x30C40213, 0x319702B8, 0x36200000, 0x1A210000,
+    0x3E6A5F44, 0x26970345, 0x08970C0E, 0x356A5F46,
+    0x2D200028, 0x1A210000, 0x1132FFFF, 0x26970345,
+    0x3D9702BB, 0x11685F44, 0x36695F46, 0x2E020000,
+    0x2B034000, 0x3E30FFFF, 0x1231FFFF, 0x280C8000,
+    0x0C600124, 0x2B0C4000, 0x0F600128, 0x010CC000,
+    0x01600120, 0x16970D35, 0x01690134, 0x126A0128,
+    0x3E610130, 0x1861B010, 0x172E0068, 0x0862B000,
+    0x0662B008, 0x31208808, 0x3760B01C, 0x362300AF,
+    0x1A940D3A, 0x2169B024, 0x1C390000, 0x32D40B46,
+    0x07970D42, 0x3F800215, 0x12690124, 0x03208400,
+    0x142D0068, 0x0661B004, 0x3760B01C, 0x362300AF,
+    0x1A940D3A, 0x2C69B020, 0x25310002, 0x39D40B44,
+    0x1C6A0120, 0x31208808, 0x172E0068, 0x0862B000,
+    0x0662B008, 0x3760B01C, 0x362300AF, 0x1A940D3A,
+    0x2169B024, 0x1C390000, 0x08D00B44, 0x03208400,
+    0x3760B01C, 0x362300AF, 0x1A940D3A, 0x2C69B020,
+    0x25310002, 0x39D40B44, 0x07970D42, 0x1A685F46,
+    0x1F690120, 0x0F600128, 0x2E0D0000, 0x2E61012C,
+    0x19220000, 0x12625F3C, 0x3620F000, 0x3797022B,
+    0x3E680148, 0x1C6A014C, 0x1C690140, 0x0160014C,
+    0x20620144, 0x1F090000, 0x2E610140, 0x2D0E0000,
+    0x23620148, 0x1B208001, 0x00970DD6, 0x3368014C,
+    0x12690148, 0x1F6A0140, 0x2E610140, 0x07018000,
+    0x2E0D0000, 0x20610148, 0x3E30FFFF, 0x1C0A0000,
+    0x2E680154, 0x20620144, 0x020C0000, 0x11600150,
+    0x00208200, 0x00970DD6, 0x016A0154, 0x3368014C,
+    0x336B0140, 0x3E620150, 0x12690148, 0x0F630148,
+    0x300B0000, 0x0C630144, 0x3E30FFFF, 0x1F090000,
+    0x2E610140, 0x1B208001, 0x00970DD6, 0x3368014C,
+    0x1F6A0140, 0x12690148, 0x23620148, 0x1C0A0000,
+    0x2E680154, 0x20620144, 0x2E610140, 0x020C0000,
+    0x11600150, 0x00208200, 0x00970DD6, 0x3368014C,
+    0x2D6B0154, 0x12690148, 0x1F6A0140, 0x12630150,
+    0x2E610140, 0x2D695F58, 0x1C0A0000, 0x2E62014C,
+    0x1F2D0030, 0x0D4A4000, 0x1F2D0006, 0x0E494000,
+    0x0F3607FC, 0x26320002, 0x33620154, 0x28038000,
+    0x06330001, 0x31D40BB3, 0x1D2E0001, 0x112E0002,
+    0x20620144, 0x1132FFFF, 0x23620148, 0x00351F00,
+    0x20310008, 0x33610158, 0x1320E000, 0x00970DD6,
+    0x3D680144, 0x1C6A014C, 0x1C690140, 0x206B0150,
+    0x2D0E0000, 0x2E62014C, 0x0200C000, 0x06330001,
+    0x2BD40BC6, 0x322C0001, 0x3E2C0002, 0x3E30FFFF,
+    0x2E0D0000, 0x2E610140, 0x1A210000, 0x20610148,
+    0x1320E000, 0x00970DD6, 0x206B0150, 0x2E680154,
+    0x1C6A014C, 0x0263014C, 0x11600150, 0x1C600154,
+    0x02030000, 0x06330001, 0x30D40BD8, 0x322C0001,
+    0x3E2C0002, 0x20620144, 0x1C0A0000, 0x2D620140,
+    0x3E30FFFF, 0x2D0E0000, 0x23620148, 0x1B208001,
+    0x00970DD6, 0x12690148, 0x126A0144, 0x206B0150,
+    0x2E610140, 0x23620148, 0x0200C000, 0x3D33FFFF,
+    0x12630150, 0x1C600154, 0x02030000, 0x06330001,
+    0x30D40BEE, 0x322C0001, 0x3E2C0002, 0x0F600144,
+    0x00208200, 0x00970DD6, 0x11690144, 0x116A0148,
+    0x3368014C, 0x2D6B0154, 0x2D620140, 0x12630150,
+    0x1C600154, 0x02030000, 0x06330001, 0x2FD40BFD,
+    0x322C0001, 0x3E2C0002, 0x0160014C, 0x350A4000,
+    0x23620148, 0x3930FFFE, 0x1C0A0000, 0x20620144,
+    0x00208200, 0x00970DD6, 0x12690148, 0x016A0154,
+    0x306B014C, 0x2E610140, 0x3E620150, 0x3D33FFFF,
+    0x1C09C000, 0x088008E2, 0x25635F4E, 0x146B5F42,
+    0x38200008, 0x1A210000, 0x3E6A5F44, 0x0A330002,
+    0x1CD00C1A, 0x196B5F46, 0x1132FFFF, 0x2E0EC000,
+    0x19230C2A, 0x20800345, 0x2B9702CD, 0x3E6A5F44,
+    0x2E9702C7, 0x3E6A5F44, 0x19685F4A, 0x33695F4C,
+    0x1632FFFE, 0x1A048000, 0x10C40C25, 0x1E2D0001,
+    0x01615F4C, 0x2B605F4A, 0x356A5F46, 0x0A20FFFF,
+    0x1A210000, 0x2B9702CD, 0x356A5F46, 0x25200010,
+    0x1A210000, 0x176B5F4E, 0x20800345, 0x3780021B,
+    0x02030000, 0x0C37FFFF, 0x0CCC021B, 0x052C0C35,
+    0x21884000, 0x06800C36, 0x28970382, 0x3E20000E,
+    0x2197038B, 0x093C000E, 0x12CC020F, 0x2A2001FF,
+    0x2197038B, 0x3D605F3C, 0x3F340003, 0x12CC020F,
+    0x122E000E, 0x1632FFFE, 0x3A9703A3, 0x319702B8,
+    0x1122000E, 0x36200000, 0x1A210000, 0x26970345,
+    0x01685F34, 0x122101D8, 0x3E610106, 0x3B2C0008,
+    0x27490000, 0x3E2C0002, 0x0B480000, 0x07615F4A,
+    0x2D605F4C, 0x0F685F3C, 0x30695F40, 0x3930FFFE,
+    0x36605F3E, 0x1F090000, 0x04C40C58, 0x2E605F40,
+    0x202001A0, 0x08230C5D, 0x19600104, 0x3B635F36,
+    0x258002F5, 0x25200010, 0x19600104, 0x2B80043E,
+    0x20970106, 0x15220003, 0x1F62B438, 0x2C695FCA,
+    0x04685EDE, 0x19220000, 0x1461B400, 0x1162B406,
+    0x30380000, 0x36C800A5, 0x2A340080, 0x00C80C6F,
+    0x13200C80, 0x19230C70, 0x288000B4, 0x36605EDE,
+    0x09685EEC, 0x332300A5, 0x19220000, 0x14625EEC,
+    0x28695EDE, 0x366A5EF0, 0x30380000, 0x22C8010E,
+    0x01198000, 0x2E6A5F02, 0x01198000, 0x336A5EA0,
+    0x24D000B4, 0x3C36FDFF, 0x01625EA0, 0x288000B4,
+    0x22215EDE, 0x1F220006, 0x1D97100D, 0x2F215EEC,
+    0x21510000, 0x21510000, 0x21884000, 0x1F220030,
+    0x1F62B438, 0x21695FCE, 0x19685EF0, 0x19220000,
+    0x0161B420, 0x0462B426, 0x30380000, 0x3AC800A6,
+    0x2A340080, 0x0CC80C95, 0x02200C9B, 0x05230C96,
+    0x288000B4, 0x2B605EF0, 0x11685EFE, 0x3F2300A6,
+    0x19220000, 0x0C625EFE, 0x1B800C74, 0x3F215EF0,
+    0x1F220006, 0x1D97100D, 0x37215EFE, 0x21510000,
+    0x21510000, 0x21884000, 0x1F220300, 0x1F62B438,
+    0x21695FCE, 0x01685F02, 0x19220000, 0x0261B440,
+    0x0762B446, 0x30380000, 0x3DC800A7, 0x2A340080,
+    0x13C80CB0, 0x13200CB6, 0x11230CB1, 0x288000B4,
+    0x33605F02, 0x19685F10, 0x382300A7, 0x19220000,
+    0x04625F10, 0x1B800C74, 0x27215F02, 0x1F220006,
+    0x1D97100D, 0x3F215F10, 0x21510000, 0x21510000,
+    0x21884000, 0x04685EDE, 0x22215EDE, 0x30380000,
+    0x0CD00CC9, 0x03205EEC, 0x0B518000, 0x0D500000,
+    0x30695EA0, 0x0D500000, 0x00390200, 0x02615EA0,
+    0x228B4000, 0x0200C000, 0x1F220006, 0x362300AF,
+    0x19801030, 0x19685EF0, 0x3F215EF0, 0x30380000,
+    0x0CD00CC9, 0x1B205EFE, 0x02800CC2, 0x01685F02,
+    0x27215F02, 0x30380000, 0x0CD00CC9, 0x13205F10,
+    0x02800CC2, 0x04685EDE, 0x22215EDE, 0x30380000,
+    0x33D40CC1, 0x398000AF, 0x19685EF0, 0x3F215EF0,
+    0x30380000, 0x35D000AF, 0x1B205EFE, 0x02800CC2,
+    0x3B605EEC, 0x1C615EEE, 0x228B4000, 0x23605EFE,
+    0x14615F00, 0x228B4000, 0x2B605F10, 0x0C615F12,
+    0x228B4000, 0x19685EF0, 0x1A210000, 0x30380000,
+    0x0DC80CFE, 0x1F61B434, 0x226A5FCE, 0x0761B426,
+    0x0262B420, 0x2A340080, 0x01C80CFD, 0x28635E9C,
+    0x3F215EF0, 0x1F220006, 0x1D97100D, 0x1A6B5E9C,
+    0x288000B4, 0x07615EF0, 0x228B4000, 0x2E620116,
+    0x1B200D02, 0x288000B4, 0x15970CD9, 0x1C6A0116,
+    0x0D20B404, 0x19500011, 0x01500003, 0x1150C400,
+    0x0A500001, 0x0E500180, 0x0D500000, 0x0962B414,
+    0x352000AF, 0x192100AF, 0x362300AF, 0x11800CE4,
+    0x01690102, 0x36200000, 0x0A350020, 0x28C8020D,
+    0x30218000, 0x1F615ED4, 0x3B605EDA, 0x3D605EDC,
+    0x228B4000, 0x2D695ED4, 0x30380000, 0x22C8010E,
+    0x1C390000, 0x18D4010A, 0x3B605EDA, 0x228B4000,
+    0x2D695ED4, 0x30380000, 0x22C8010E, 0x1C390000,
+    0x18D4010A, 0x3D605EDC, 0x228B4000, 0x01685ED4,
+    0x27215ED4, 0x30380000, 0x1ED4010C, 0x21510000,
+    0x228B4000, 0x30695ECC, 0x07685ED2, 0x1C390000,
+    0x06D400A4, 0x30380000, 0x31C800A4, 0x342300A4,
+    0x288000B4, 0x3A215ECC, 0x0B518000, 0x36200000,
+    0x35605ED2, 0x228B4000, 0x30695ECC, 0x35605ED2,
+    0x1C390000, 0x30695EA0, 0x18D4010A, 0x12390008,
+    0x02615EA0, 0x228B4000, 0x336A5EA0, 0x1C685ECC,
+    0x3A215ECC, 0x2E36FFF7, 0x01625EA0, 0x30380000,
+    0x1ED4010C, 0x21510000, 0x228B4000, 0x04685F52,
+    0x30218000, 0x2D144000, 0x04CC00A9, 0x1A615F52,
+    0x302300A9, 0x19200D53, 0x288000B4, 0x29200400,
+    0x2660B144, 0x06210200, 0x1468B144, 0x3C34000F,
+    0x2B190000, 0x0A61B144, 0x07645F52, 0x2D010000,
+    0x20310008, 0x1139A0C8, 0x214B4000, 0x0F2D002C,
+    0x0E494000, 0x2E020000, 0x06330001, 0x20377F00,
+    0x1263010A, 0x21320003, 0x1A625F68, 0x2E020000,
+    0x1032FFF8, 0x313A4001, 0x11625F6A, 0x2E020000,
+    0x1132FFFF, 0x2C2E0D70, 0x07230D84, 0x0E8A4000,
+    0x15205F7A, 0x228B4000, 0x12205F82, 0x228B4000,
+    0x1C205F8A, 0x228B4000, 0x01205F92, 0x228B4000,
+    0x0F205F9A, 0x228B4000, 0x07205FA2, 0x228B4000,
+    0x09205FAA, 0x228B4000, 0x14205FB2, 0x228B4000,
+    0x1A205FBA, 0x228B4000, 0x04205FC2, 0x228B4000,
+    0x38605F6C, 0x27490000, 0x3E2C0002, 0x084B0000,
+    0x3E2C0002, 0x244A0000, 0x3E2C0002, 0x0B480000,
+    0x1F615F58, 0x38635F56, 0x17625F5A, 0x3E605F5C,
+    0x10970E96, 0x236A5F5C, 0x266B010C, 0x1F3A0000,
+    0x1AC80DA0, 0x19213000, 0x35098000, 0x190B4000,
+    0x3061010E, 0x2CC00D9B, 0x34CC0EB5, 0x0A685F5A,
+    0x1F230DA0, 0x33635F54, 0x046B5F68, 0x12800E9B,
+    0x0F69010A, 0x0A6B5F56, 0x20310008, 0x0DC80DD1,
+    0x2E6A5F58, 0x05390080, 0x162E0035, 0x0E458000,
+    0x0E970DE8, 0x04685F52, 0x1B230DAD, 0x16341000,
+    0x2DCC109C, 0x3A2000A0, 0x00645F53, 0x2D695F58,
+    0x3197028E, 0x0269010E, 0x1A223000, 0x350A4000,
+    0x1DC80DCD, 0x28680108, 0x25620114, 0x30380000,
+    0x0CC80DBA, 0x06970CFF, 0x10970CD3, 0x0269010E,
+    0x1B20B444, 0x19500011, 0x0A500001, 0x1150C400,
+    0x0A500001, 0x2335FFFF, 0x15410000, 0x176A0114,
+    0x3E2C0002, 0x0D500000, 0x1F62B454, 0x1D200DCB,
+    0x31210DCB, 0x362300AF, 0x19800CEA, 0x35203000,
+    0x1C60010E, 0x1A210000, 0x36610108, 0x1A615F52,
+    0x398000AF, 0x19220000, 0x3662015E, 0x228B4000,
+    0x1D210001, 0x3561015E, 0x1260015C, 0x38635F56,
+    0x02970E78, 0x076B5F52, 0x0A685F6C, 0x3F37000F,
+    0x293B0100, 0x2563B144, 0x25695F56, 0x3E2C0002,
+    0x15410000, 0x26695F5A, 0x3E2C0002, 0x15410000,
+    0x20695F5C, 0x3E2C0002, 0x15410000, 0x04800DB1,
+    0x04685F52, 0x3569B140, 0x3930FFFE, 0x38D003AD,
+    0x33635F54, 0x09300002, 0x02030000, 0x3C34000F,
+    0x3D3CFFFF, 0x33228000, 0x1A120000, 0x301D8000,
+    0x0761B140, 0x336A5EA0, 0x27CC0DF9, 0x2D36FFFB,
+    0x01625EA0, 0x3D3CFFFF, 0x3A225F7A, 0x3530FFFD,
+    0x1F060000, 0x22520000, 0x22520000, 0x153B2000,
+    0x07685F32, 0x35635F52, 0x1A344000, 0x19C80E09,
+    0x0A685F36, 0x2E9700B4, 0x02685F54, 0x362300AF,
+    0x288000B4, 0x04685F52, 0x3569B140, 0x1F238000,
+    0x3C34000F, 0x2E020000, 0x123EFFFF, 0x1C138000,
+    0x2819C000, 0x0761B140, 0x3F30FFF8, 0x2838A084,
+    0x18500020, 0x3B680118, 0x2E695F54, 0x0418C000,
+    0x09600118, 0x351CC000, 0x28CC0E53, 0x2361011E,
+    0x07685F68, 0x0763011C, 0x0260011A, 0x10970CD3,
+    0x336B011A, 0x1B20B444, 0x1C500041, 0x0A500001,
+    0x0E500180, 0x0D500000, 0x2D02C000, 0x2636FF00,
+    0x0262B44C, 0x363700FF, 0x2563B44E, 0x3F222000,
+    0x1F62B454, 0x3E6B011E, 0x36200000, 0x0F60011E,
+    0x333B0000, 0x2BCC0E33, 0x362300AF, 0x16200E36,
+    0x3A210E36, 0x19800CEA, 0x3668011C, 0x3569B140,
+    0x146A0118, 0x1A1D0000, 0x0761B140, 0x191E0000,
+    0x26620118, 0x09C80E4F, 0x36200000, 0x1D210001,
+    0x28038000, 0x2E174000, 0x31CC0E46, 0x322C0001,
+    0x1231FFFF, 0x0C800E40, 0x2861011C, 0x0E300003,
+    0x2B695F32, 0x0260011A, 0x36354000, 0x0CC80E1F,
+    0x0A200E1F, 0x096B5F36, 0x288000B4, 0x07685F32,
+    0x26695F36, 0x1A344000, 0x33C800AF, 0x0D894000,
+    0x1F3A0000, 0x3EC803AD, 0x3B635F36, 0x1A6B5F4A,
+    0x19600104, 0x3E610106, 0x19625F3E, 0x23635F48,
+    0x0B970CCD, 0x2B680104, 0x0F6A0106, 0x116B5F48,
+    0x2360B428, 0x3C21B42A, 0x21510000, 0x0200C000,
+    0x0934FF00, 0x281A0000, 0x0162B42C, 0x363700FF,
+    0x2663B42E, 0x2B6A5F3E, 0x27200041, 0x2060B424,
+    0x1C62B434, 0x3C210E5C, 0x362300AF, 0x18940CE7,
+    0x096B5F36, 0x228B4000, 0x3B635F36, 0x39200120,
+    0x1A210000, 0x0C220020, 0x1C6B5F4C, 0x11800E58,
+    0x33635F54, 0x0F6B5F6A, 0x3A200140, 0x1A210000,
+    0x0C220020, 0x3B605F60, 0x1C615F62, 0x12625F66,
+    0x36635F5E, 0x10970CD3, 0x09685F60, 0x2D6A5F62,
+    0x046B5F5E, 0x2060B448, 0x3F21B44A, 0x21510000,
+    0x0200C000, 0x0934FF00, 0x281A0000, 0x0262B44C,
+    0x363700FF, 0x2563B44E, 0x206A5F66, 0x27200041,
+    0x2360B444, 0x1F62B454, 0x05200EB3, 0x24210E81,
+    0x362300AF, 0x19800CEA, 0x33635F54, 0x36200000,
+    0x16210140, 0x0F22002C, 0x0F6B5F6A, 0x3B605F60,
+    0x1C615F62, 0x12625F66, 0x36635F5E, 0x10970CD3,
+    0x286A5F5E, 0x09685F60, 0x2E695F62, 0x28038000,
+    0x0A37FF00, 0x0418C000, 0x2060B448, 0x1A3600FF,
+    0x0462B44A, 0x0161B44C, 0x36200000, 0x2660B44E,
+    0x206A5F66, 0x22200011, 0x2360B444, 0x1F62B454,
+    0x3F210E9F, 0x362300AF, 0x1C940CEA, 0x016B5F54,
+    0x228B4000, 0x0B210041, 0x1D800DA4, 0x08210021,
+    0x1D800DA4, 0x2E6A5F58, 0x04690164, 0x012E0028,
+    0x1C390000, 0x1CD00ECA, 0x1F090000, 0x1531FFFE,
+    0x2B680168, 0x3F418000, 0x2F34001F, 0x112E0002,
+    0x13408000, 0x2B008000, 0x3E2C0002, 0x0D500000,
+    0x0D500000, 0x228B4000, 0x1C208000, 0x13408000,
+    0x36200000, 0x19800EC3, 0x01685F58, 0x1A210000,
+    0x2E2C0028, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x15410000, 0x228B4000, 0x11230DA8, 0x0F3607FC,
+    0x3EC803AD, 0x33635F54, 0x026B5F58, 0x12625F66,
+    0x010CC000, 0x084B0000, 0x3E2C0002, 0x0B480000,
+    0x33635F62, 0x2D6B010E, 0x36605F64, 0x2D0DC000,
+    0x36610108, 0x1B970CBD, 0x02685F62, 0x28695F64,
+    0x3B60B40C, 0x1C61B40E, 0x28680108, 0x206A5F66,
+    0x2921B40A, 0x3660B408, 0x21510000, 0x28200081,
+    0x3560B404, 0x0962B414, 0x02685F54, 0x2A210EE5,
+    0x362300AF, 0x11800CE4, 0x2D695F6E, 0x1C208000,
+    0x28150000, 0x1BC80EFB, 0x228B4000, 0x336A5EA0,
+    0x33605F6E, 0x0B200F01, 0x2B36FFFD, 0x01625EA0,
+    0x288000B4, 0x15685FDC, 0x2D695F6E, 0x30380000,
+    0x04C80F64, 0x28605F70, 0x232C0040, 0x27490000,
+    0x2E655F6E, 0x3865B112, 0x1F31FFFB, 0x232D4010,
+    0x0D4A4000, 0x1F6BB110, 0x122D0002, 0x1F0AC000,
+    0x33C00F58, 0x214B4000, 0x2C2DFFF6, 0x333B0000,
+    0x2AD40F1D, 0x1A685F70, 0x012D0012, 0x0D4A4000,
+    0x282C0042, 0x084B0000, 0x312DFFEE, 0x1F1F8000,
+    0x3BCC0F5A, 0x28004000, 0x37215F72, 0x0B97104D,
+    0x3D695F72, 0x332C0006, 0x13350003, 0x31CC0F5F,
+    0x37215F72, 0x2922FFFC, 0x16971063, 0x1A685F70,
+    0x33215FDC, 0x0B970FCB, 0x12971097, 0x1B970CBD,
+    0x196B5F70, 0x11685F72, 0x3B695F74, 0x2A22B40A,
+    0x3563B408, 0x22520000, 0x3B60B40C, 0x1C61B40E,
+    0x28200081, 0x3560B404, 0x20200040, 0x2660B414,
+    0x30210F2A, 0x362300AF, 0x14940CE4, 0x01685F6E,
+    0x39695FEA, 0x353400FF, 0x3330FFFB, 0x0A2C401A,
+    0x084B0000, 0x1E2D0001, 0x312F0001, 0x3A430000,
+    0x002CFFF6, 0x244A0000, 0x332C0006, 0x084B0000,
+    0x0B615FEA, 0x312F0001, 0x1F0AC000, 0x1BC40F4D,
+    0x35230000, 0x3A430000, 0x2E6A5F6E, 0x1A685F70,
+    0x1A3600FF, 0x3A3A1000, 0x1462B130, 0x06970FA3,
+    0x1C208000, 0x33605F6E, 0x08230F01, 0x26800130,
+    0x0D210088, 0x29655F6F, 0x1A685F70, 0x2D695F6E,
+    0x3D2C0038, 0x0B480000, 0x0C800F03, 0x35970110,
+    0x1A685F70, 0x33215FDC, 0x06230F53, 0x0D800FCB,
+    0x336A5EA0, 0x3C350800, 0x1F615F6E, 0x33C800AF,
+    0x143A0002, 0x01625EA0, 0x398000AF, 0x1768B148,
+    0x05300001, 0x11D00F74, 0x03300007, 0x15D00F79,
+    0x0C300008, 0x3D3CFFFF, 0x1464B148, 0x388000A8,
+    0x35230000, 0x2663B148, 0x39635FF2, 0x32635FF0,
+    0x0B800F6E, 0x0E710048, 0x13710149, 0x2871804B,
+    0x12800F7B, 0x00685FFC, 0x276AB1F8, 0x0934FF00,
+    0x0C300008, 0x322C0001, 0x03361F00, 0x23320008,
+    0x1C0A0000, 0x06C00114, 0x3F225E90, 0x3330FFFB,
+    0x1C2C4000, 0x1C0A0000, 0x10C0010E, 0x2F605FD2,
+    0x06625FD4, 0x242A000F, 0x16C00108, 0x228B4000,
+    0x10685FD6, 0x37695FD4, 0x30380000, 0x01C80F97,
+    0x27490000, 0x0E615FD6, 0x228B4000, 0x33290044,
+    0x3DC00F9F, 0x1D685FD2, 0x05615FD4, 0x2D010000,
+    0x022D0044, 0x03615FD2, 0x228B4000, 0x361C0000,
+    0x2F605FD2, 0x29605FD4, 0x228B4000, 0x3C695FD6,
+    0x30380000, 0x22C8010E, 0x15410000, 0x22605FD6,
+    0x228B4000, 0x1C390000, 0x24C80108, 0x0D4A4000,
+    0x30380000, 0x22C8010E, 0x10404000, 0x1F3A0000,
+    0x14C80FB7, 0x362C003A, 0x16420000, 0x122E0038,
+    0x062CFFC6, 0x13408000, 0x228B4000, 0x222DFFFE,
+    0x10404000, 0x228B4000, 0x1C390000, 0x24C80108,
+    0x0D4A4000, 0x30380000, 0x22C8010E, 0x10404000,
+    0x1F3A0000, 0x0BC80FC8, 0x3D2C0038, 0x16420000,
+    0x192E003A, 0x0E2CFFC8, 0x13408000, 0x228B4000,
+    0x122D0002, 0x10404000, 0x228B4000, 0x1C390000,
+    0x24C80108, 0x30380000, 0x22C8010E, 0x2D635E96,
+    0x362C003A, 0x084B0000, 0x0E2CFFFE, 0x244A0000,
+    0x333B0000, 0x1EC80FDE, 0x1F3A0000, 0x12C80FEB,
+    0x3E2F0038, 0x1542C000, 0x192E003A, 0x0D2FFFC8,
+    0x10438000, 0x1C800FE6, 0x3F424000, 0x1F3A0000,
+    0x1DC80FE4, 0x192E003A, 0x10438000, 0x1C800FE6,
+    0x122D0002, 0x3F424000, 0x0D500000, 0x0D500000,
+    0x1F6B5E96, 0x0D2CFFC4, 0x228B4000, 0x122D0002,
+    0x3F424000, 0x3E2F0038, 0x1542C000, 0x1C800FE6,
+    0x2A320001, 0x0A367FFF, 0x19C81003, 0x252A0008,
+    0x3EC00FFF, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x0D500000, 0x0D500000, 0x0D500000,
+    0x0D500000, 0x19C81003, 0x05800FF3, 0x26260008,
+    0x0D500000, 0x262EFFFF, 0x24CC1000, 0x228B4000,
+    0x26635E94, 0x1D97100D, 0x146B5E94, 0x288000B4,
+    0x26635E94, 0x1D97100D, 0x02030000, 0x17685E94,
+    0x288000B4, 0x22484000, 0x0F615E92, 0x28605E90,
+    0x0C300008, 0x3FD4102E, 0x2D635E96, 0x2C34007F,
+    0x3E30FFFF, 0x122D0002, 0x2E0D0000, 0x214B4000,
+    0x05300001, 0x322C0001, 0x36695E90, 0x191E0000,
+    0x3FCC101E, 0x36200000, 0x07024000, 0x36368000,
+    0x0035007F, 0x1A1D0000, 0x3D695E92, 0x03C8102C,
+    0x23320008, 0x281A0000, 0x1E2D0001, 0x0E464000,
+    0x0200C000, 0x1F6B5E96, 0x30380000, 0x228B4000,
+    0x3F424000, 0x04801028, 0x361C0000, 0x228B4000,
+    0x28605E90, 0x22484000, 0x0A625E94, 0x0C300008,
+    0x36D4104B, 0x2E020000, 0x0C300008, 0x2C34007F,
+    0x0336007F, 0x191E0000, 0x24C80108, 0x3E30FFFF,
+    0x356A5E90, 0x0F615E92, 0x122D0002, 0x2E0D0000,
+    0x3F424000, 0x386A5E94, 0x3D695E92, 0x05300001,
+    0x322C0001, 0x191E0000, 0x3CCC1048, 0x36200000,
+    0x29380080, 0x21444000, 0x228B4000, 0x36200000,
+    0x1A80103C, 0x2D635E96, 0x084B0000, 0x3E2C0002,
+    0x13434000, 0x244A0000, 0x122D0002, 0x3F424000,
+    0x2E1B8000, 0x3E2C0002, 0x244A0000, 0x122D0002,
+    0x3F424000, 0x2E1B8000, 0x3E2C0002, 0x244A0000,
+    0x122D0002, 0x3F424000, 0x2B1AC000, 0x1F6B5E96,
+    0x3E2C0002, 0x122D0002, 0x228B4000, 0x28605E90,
+    0x0F615E92, 0x2D635E96, 0x27490000, 0x280C8000,
+    0x0B480000, 0x1C390000, 0x09C8108A, 0x03340FFC,
+    0x0EC81072, 0x15280041, 0x3CC01072, 0x16240041,
+    0x15072000, 0x0E801077, 0x1831FFFA, 0x07024000,
+    0x2936FFC0, 0x2B034000, 0x3937003F, 0x3D695E92,
+    0x22484000, 0x1A048000, 0x10404000, 0x122D0002,
+    0x22484000, 0x2C04C400, 0x10404000, 0x0AC4108A,
+    0x122D0002, 0x22484000, 0x19220000, 0x05048400,
+    0x10404000, 0x0AC4108A, 0x122D0002, 0x22484000,
+    0x05048400, 0x10404000, 0x1F6B5E96, 0x1A685E90,
+    0x228B4000, 0x14685F14, 0x32215F14, 0x30380000,
+    0x15D01093, 0x0B518000, 0x228B4000, 0x0200C000,
+    0x12220002, 0x362300AF, 0x19801030, 0x14685F14,
+    0x3A215F1A, 0x30380000, 0x15D01093, 0x228B4000,
+    0x14685F14, 0x32215F14, 0x30380000, 0x1ED4010C,
+    0x2A340080, 0x14C810A4, 0x12220002, 0x11801008,
+    0x21510000, 0x1C685F1A, 0x28635E9C, 0x30380000,
+    0x2DCC10AA, 0x228B4000, 0x3A215F1A, 0x12220002,
+    0x14971004, 0x1A6B5E9C, 0x198010A5, 0x3DFFFFFF,
+    0x01000000, 0x01000000, 0x01000000
+};
+
+// Encapsulates the PKA firmware images information.
+typedef struct {
+    const uint32_t *farm_img;
+    uint32_t        farm_img_size;
+    const uint32_t *boot_img;
+    uint32_t        boot_img_size;
+    const uint32_t *master_img;
+    uint32_t        master_img_size;
+} pka_firmware_info_t;
+
+static const pka_firmware_info_t pka_firmware_array[] =
+{
+    {
+        fw0_farm_img_data_buf,   2048, // actual length is 1652
+        fw0_boot_img_data_buf,    152,
+        fw0_master_img_data_buf, 4161
+    },
+    {
+        fw1_farm_img_data_buf,   2048, // actual length is 2000
+        fw1_boot_img_data_buf,    127,
+        fw1_master_img_data_buf, 4186
+    },
+    {
+        fw2_farm_img_data_buf,   2048, // actual length is 2045
+        fw2_boot_img_data_buf,    154,
+        fw2_master_img_data_buf, 4275
+    }
+};
+
+#define PKA_FIRMWARE_IMAGE_0_ID     0
+#define PKA_FIRMWARE_IMAGE_1_ID     1
+#define PKA_FIRMWARE_IMAGE_2_ID     2
+
+// Global storage for the actual firmware identifier
+static uint8_t pka_firmware_id;
+
+// Setter of pka_firmware_id
+static inline void pka_firmware_set_id(uint8_t id)
+{
+    pka_firmware_id = id;
+}
+
+// Getter of pka_firmware_id
+static inline uint8_t pka_firmware_get_id(void)
+{
+    return pka_firmware_id;
+}
+
+
+#endif
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_ioctl.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_ioctl.h
new file mode 100644
index 000000000000..917d4e305878
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_ioctl.h
@@ -0,0 +1,127 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_IOCTL_H__
+#define __PKA_IOCTL_H__
+
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define PKA_IOC_TYPE 0xB7
+
+/// PKA_RING_GET_REGION_INFO - _IORW(PKA_IOC_TYPE, 0x0, pka_dev_region_info_t)
+///
+/// Retrieve information about a device region. This is intended to describe
+/// MMIO, I/O port, as well as bus specific regions (ex. PCI config space).
+/// Zero sized regions may be used to describe unimplemented regions.
+/// Return: 0 on success, -errno on failure.
+typedef struct
+{
+    uint32_t reg_index;    ///< Registers region index.
+    uint64_t reg_size;     ///< Registers region size (bytes).
+    uint64_t reg_offset;   ///< Registers region offset from start of device fd.
+
+    uint32_t mem_index;    ///< Memory region index.
+    uint64_t mem_size;     ///< Memory region size (bytes).
+    uint64_t mem_offset;   ///< Memeory region offset from start of device fd.
+} pka_dev_region_info_t;
+#define PKA_RING_GET_REGION_INFO _IOWR(PKA_IOC_TYPE, 0x0, pka_dev_region_info_t)
+
+/// PKA_GET_RING_INFO - _IORW(PKA_IOC_TYPE, 0x1, pka_dev_ring_info_t)
+///
+/// Retrieve information about a ring. This is intended to describe ring
+/// information words located in PKA_BUFFER_RAM. Ring information includes
+/// base addresses, size and statistics.
+/// Return: 0 on success, -errno on failure.
+typedef struct // Bluefield specific ring information
+{
+    /// Base address of the command descriptor ring.
+    uint64_t cmmd_base;
+
+    /// Base address of the result descriptor ring.
+    uint64_t rslt_base;
+
+    /// Size of a command ring in number of descriptors, minus 1.
+    /// Minimum value is 0 (for 1 descriptor); maximum value is
+    /// 65535 (for 64K descriptors).
+    uint16_t size;
+
+    /// This field specifies the size (in 32-bit words) of the
+    /// space that PKI command and result descriptor occupies on
+    /// the Host.
+    uint16_t host_desc_size : 10;
+
+    /// Indicates whether the result ring delivers results strictly
+    /// in-order ('1') or that result descriptors are written to the
+    /// result ring as soon as they become available, so out-of-order
+    /// ('0').
+    uint8_t  in_order       : 1;
+
+    /// Read pointer of the command descriptor ring.
+    uint16_t cmmd_rd_ptr;
+
+    /// Write pointer of the result descriptor ring.
+    uint16_t rslt_wr_ptr;
+
+    /// Read statistics of the command descriptor ring.
+    uint16_t cmmd_rd_stats;
+
+    /// Write statistics of the result descriptor ring.
+    uint16_t rslt_wr_stats;
+
+} pka_dev_hw_ring_info_t;
+#define PKA_GET_RING_INFO   _IOWR(PKA_IOC_TYPE, 0x1, pka_dev_hw_ring_info_t)
+
+/// PKA_CLEAR_RING_COUNTERS - _IO(PKA_IOC_TYPE, 0x2)
+///
+/// Clear counters. This is intended to reset all command and result counters.
+/// Return: 0 on success, -errno on failure.
+#define PKA_CLEAR_RING_COUNTERS  _IO(PKA_IOC_TYPE, 0x2)
+
+/// PKA_GET_RANDOM_BYTES - _IOWR(PKA_IOC_TYPE, 0x3, pka_dev_trng_info_t)
+///
+/// Get random bytes from True Random Number Generator(TRNG).
+/// Return: 0 on success, -errno on failure.
+typedef struct // True Random Number Generator information
+{
+    /// Number of random bytes in the buffer; Length of the buffer.
+    uint32_t count;
+
+    /// Data buffer to hold the random bytes.
+    uint8_t *data;
+
+} pka_dev_trng_info_t;
+#define PKA_GET_RANDOM_BYTES  _IOWR(PKA_IOC_TYPE, 0x3, pka_dev_trng_info_t)
+
+#endif // __PKA_IOCTL_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_mmio.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_mmio.h
new file mode 100644
index 000000000000..1b0ff48bb92f
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_mmio.h
@@ -0,0 +1,49 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_MMIO_H__
+#define __PKA_MMIO_H__
+
+
+/// Macros for standard MMIO functions.
+
+#include <linux/types.h>
+#include <linux/compiler.h>
+#include <linux/io.h>
+
+#define pka_mmio_read64(addr)       readq_relaxed(addr)
+#define pka_mmio_write64(addr, val) writeq_relaxed((val), (addr))
+#define pka_mmio_read(addr)         pka_mmio_read64(addr)
+#define pka_mmio_write(addr, val)   pka_mmio_write64((addr), (val))
+
+#endif // __PKA_MMIO_H__
diff --git a/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_ring.h b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_ring.h
new file mode 100644
index 000000000000..c344ffb7bb93
--- /dev/null
+++ b/drivers/platform/mellanox/mlxbf_pka/mlxbf_pka_ring.h
@@ -0,0 +1,276 @@
+//
+//   BSD LICENSE
+//
+//   Copyright(c) 2016 Mellanox Technologies, Ltd. All rights reserved.
+//   All rights reserved.
+//
+//   Redistribution and use in source and binary forms, with or without
+//   modification, are permitted provided that the following conditions
+//   are met:
+//
+//     * 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.
+//     * Neither the name of Mellanox Technologies nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+//   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+//   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+//   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+//   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+//   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+//   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+//   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef __PKA_RING_H__
+#define __PKA_RING_H__
+
+///
+/// @file
+///
+/// This file forms an interface to the BlueField Public Key Accelerator based
+/// on EIP-154.
+///
+/// Rings are used as a communication mechanism between ARM cores (controller)
+/// and the farm engines controlled by EIP-154 master firmware.
+///
+/// Note that the API defines data stuctures and functions to manage rings
+/// within window RAM, and to enqueue/dequeue descriptors. Rings are considered
+/// as a memory of descriptors (command/result descriptors) using finite size
+/// circular queue and a couple of control status registers (count registers).
+///
+
+
+#include <linux/types.h>
+
+#ifdef PKA_LIB_RING_DEBUG
+// A structure that stores the ring statistics.
+typedef struct
+{
+    uint64_t enq_success_cmd;  ///< Cmd descriptors successfully enqueued.
+    uint64_t enq_fail_cmd;     ///< Cmd descriptors that failed to be enqueued.
+    uint64_t deq_success_rslt; ///< Rslt descriptors successfully dequeued.
+    uint64_t deq_fail_rslt;    ///< Rslt descriptors that failed to be dequeued.
+} pka_ring_debug_stats __pka_cache_aligned;
+#endif
+
+#ifdef PKA_LIB_RING_DEBUG
+#define __RING_STAT_ADD(r, name, n) ({ ##r##->stats.##name += 1; })
+#else
+#define __RING_STAT_ADD(r, name, n) do {} while(0)
+#endif
+
+/// Bluefield PKA command descriptor.
+typedef struct  // 64 bytes long. 64 bytes aligned
+{
+    uint64_t pointer_a;
+    uint64_t pointer_b;
+    uint64_t pointer_c;
+    uint64_t pointer_d;
+    uint64_t tag;
+    uint64_t pointer_e;
+
+#ifdef __AARCH64EB__
+    uint64_t linked         : 1;
+    uint64_t driver_status  : 2;
+    uint64_t odd_powers     : 5;    ///< shiftCnt for shift ops
+    uint64_t kdk            : 2;    ///< Key Decryption Key number
+    uint64_t encrypted_mask : 6;
+    uint64_t rsvd_3         : 8;
+    uint64_t command        : 8;
+    uint64_t rsvd_2         : 5;
+    uint64_t length_b       : 9;
+    uint64_t output_attr    : 1;
+    uint64_t input_attr     : 1;
+    uint64_t rsvd_1         : 5;
+    uint64_t length_a       : 9;
+    uint64_t rsvd_0         : 2;
+#else
+    uint64_t rsvd_0         : 2;
+    uint64_t length_a       : 9;
+    uint64_t rsvd_1         : 5;
+    uint64_t input_attr     : 1;
+    uint64_t output_attr    : 1;
+    uint64_t length_b       : 9;
+    uint64_t rsvd_2         : 5;
+    uint64_t command        : 8;
+    uint64_t rsvd_3         : 8;
+    uint64_t encrypted_mask : 6;
+    uint64_t kdk            : 2;    ///< Key Decryption Key number
+    uint64_t odd_powers     : 5;    ///< shiftCnt for shift ops
+    uint64_t driver_status  : 2;
+    uint64_t linked         : 1;
+#endif
+
+    uint64_t rsvd_4;
+} pka_ring_hw_cmd_desc_t;
+
+#define CMD_DESC_SIZE  sizeof(pka_ring_hw_cmd_desc_t)  // Must be 64
+
+/// Bluefield PKA result descriptor.
+typedef struct  // 64 bytes long. 64 bytes aligned
+{
+    uint64_t pointer_a;
+    uint64_t pointer_b;
+    uint64_t pointer_c;
+    uint64_t pointer_d;
+    uint64_t tag;
+
+#ifdef __AARCH64EB__
+    uint64_t rsvd_5                 : 13;
+    uint64_t cmp_result             : 3;
+    uint64_t modulo_is_0            : 1;
+    uint64_t rsvd_4                 : 2;
+    uint64_t modulo_msw_offset      : 11;
+    uint64_t rsvd_3                 : 2;
+    uint64_t rsvd_2                 : 11;
+    uint64_t main_result_msb_offset : 5;
+    uint64_t result_is_0            : 1;
+    uint64_t rsvd_1                 : 2;
+    uint64_t main_result_msw_offset : 11;
+    uint64_t rsvd_0                 : 2;
+
+    uint64_t linked         : 1;
+    uint64_t driver_status  : 2;    ///< Always written to 0
+    uint64_t odd_powers     : 5;    ///< shiftCnt for shift ops
+    uint64_t kdk            : 2;    ///< Key Decryption Key number
+    uint64_t encrypted_mask : 6;
+    uint64_t result_code    : 8;
+    uint64_t command        : 8;
+    uint64_t rsvd_8         : 5;
+    uint64_t length_b       : 9;
+    uint64_t output_attr    : 1;
+    uint64_t input_attr     : 1;
+    uint64_t rsvd_7         : 5;
+    uint64_t length_a       : 9;
+    uint64_t rsvd_6         : 2;
+#else
+    uint64_t rsvd_0                 : 2;
+    uint64_t main_result_msw_offset : 11;
+    uint64_t rsvd_1                 : 2;
+    uint64_t result_is_0            : 1;
+    uint64_t main_result_msb_offset : 5;
+    uint64_t rsvd_2                 : 11;
+    uint64_t rsvd_3                 : 2;
+    uint64_t modulo_msw_offset      : 11;
+    uint64_t rsvd_4                 : 2;
+    uint64_t modulo_is_0            : 1;
+    uint64_t cmp_result             : 3;
+    uint64_t rsvd_5                 : 13;
+
+    uint64_t rsvd_6         : 2;
+    uint64_t length_a       : 9;
+    uint64_t rsvd_7         : 5;
+    uint64_t input_attr     : 1;
+    uint64_t output_attr    : 1;
+    uint64_t length_b       : 9;
+    uint64_t rsvd_8         : 5;
+    uint64_t command        : 8;
+    uint64_t result_code    : 8;
+    uint64_t encrypted_mask : 6;
+    uint64_t kdk            : 2;    ///< Key Decryption Key number
+    uint64_t odd_powers     : 5;    ///< shiftCnt for shift ops
+    uint64_t driver_status  : 2;    ///< Always written to 0
+    uint64_t linked         : 1;
+#endif
+
+    uint64_t rsvd_9;
+} pka_ring_hw_rslt_desc_t;
+
+#define RESULT_DESC_SIZE  sizeof(pka_ring_hw_rslt_desc_t)  // Must be 64
+
+/// Describes a PKA command/result ring as used by the hardware.  A pair of
+/// command and result rings in PKA window memory, and the data memory used
+/// by the commands.
+typedef struct
+{
+  uint32_t num_descs;      ///< total number of descriptors in the ring.
+
+  uint32_t cmd_ring_base;  ///< base address of the command ring.
+  uint32_t cmd_idx;        ///< index of the command in a ring.
+
+  uint32_t rslt_ring_base; ///< base address of the result ring.
+  uint32_t rslt_idx;       ///< index of the result in a ring.
+
+  uint32_t operands_base;  ///< operands memory base address.
+  uint32_t operands_end;   ///< end address of operands memory.
+
+  uint32_t desc_size;      ///< size of each element in the ring.
+
+  uint64_t cmd_desc_mask;  ///< bitmask of free(0)/in_use(1) cmd descriptors.
+  uint32_t cmd_desc_cnt;   ///< number of command descriptors currently in use.
+  uint32_t rslt_desc_cnt;  ///< number of result descriptors currently ready.
+} pka_ring_desc_t;
+
+/// This structure declares ring parameters which can be used by user interface.
+typedef struct
+{
+    int         fd;             ///< file descriptor.
+    int         group;          ///< iommu group.
+    int         container;      ///< vfio cointainer
+
+    uint32_t    idx;            ///< ring index.
+    uint32_t    ring_id;        ///< hardware ring identifier.
+
+    uint64_t    mem_off;        ///< offset specific to window RAM region.
+    uint64_t    mem_addr;       ///< window RAM region address.
+    uint64_t    mem_size;       ///< window RAM region size.
+
+    uint64_t    reg_off;        ///< offset specific to count registers region.
+    uint64_t    reg_addr;       ///< count registers region address.
+    uint64_t    reg_size;       ///< count registers region size.
+
+    void       *mem_ptr;        ///< pointer to map-ped memory region.
+    void       *reg_ptr;        ///< pointer to map-ped counters region.
+
+    pka_ring_desc_t ring_desc;  ///< ring descriptor.
+
+#ifdef PKA_LIB_RING_DEBUG
+    struct pka_ring_debug_stats stats;
+#endif
+
+    uint8_t     big_endian;     ///< big endian byte order when enabled.
+} pka_ring_info_t;
+
+typedef struct
+{
+    uint32_t  dst_offset;        ///< operands desctination offset.
+    uint32_t  max_dst_offset;    ///< operands end offset.
+
+    pka_ring_info_t *ring;
+} pka_ring_alloc_t;
+
+// This sturcture encapsulates 'user data' information, it also includes
+// additional information useful for command processing and statistics.
+typedef struct
+{
+    uint64_t valid; ///< if set to 'PKA_UDATA_INFO_VALID' then info is valid
+    uint64_t user_data;     ///< opaque user address.
+    uint64_t cmd_num;       ///< command request number.
+    uint8_t  cmd_desc_idx;  ///< index of the cmd descriptor in HW rings
+    uint8_t  ring_num;      ///< command request number.
+    uint8_t  queue_num;     ///< queue number.
+} pka_udata_info_t;
+
+#define PKA_UDATA_INFO_VALID    0xDEADBEEF
+
+// This structure consists of a data base to store user data information.
+// Note that a data base should be associated with a hardware ring.
+typedef struct
+{
+    pka_udata_info_t entries[32]; // user data information entries.
+    uint8_t          index   : 5; // entry index. Wrapping is permitted.
+} pka_udata_db_t;
+
+#endif /// __PKA_RING_H__
+
+
-- 
2.30.1




More information about the kernel-team mailing list