Infineon: Add support for PSOC C3 family
diff --git a/.gitmodules b/.gitmodules
index c8aa372..7aa4a97 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,14 +4,12 @@
[submodule "boot/cypress/libs/cy-mbedtls-acceleration"]
path = boot/cypress/libs/cy-mbedtls-acceleration
url = https://github.com/Infineon/cy-mbedtls-acceleration.git
- branch = c5f703d0354c69611e6c8226a609cead96e1f8a6
[submodule "boot/cypress/libs/mtb-hal-cat1"]
path = boot/cypress/libs/mtb-hal-cat1
url = https://github.com/Infineon/mtb-hal-cat1.git
[submodule "boot/cypress/libs/mtb-pdl-cat1"]
path = boot/cypress/libs/mtb-pdl-cat1
url = https://github.com/Infineon/mtb-pdl-cat1.git
- branch = 4eb815bb8c6f455b0c516ec86b2e16b02bd367d7
[submodule "boot/cypress/libs/cmsis"]
path = boot/cypress/libs/cmsis
url = https://github.com/Infineon/cmsis.git
diff --git a/boot/bootutil/include/bootutil/boot_record.h b/boot/bootutil/include/bootutil/boot_record.h
index e6aaa71..387fdf8 100644
--- a/boot/bootutil/include/bootutil/boot_record.h
+++ b/boot/bootutil/include/bootutil/boot_record.h
@@ -24,6 +24,16 @@
#ifdef __cplusplus
extern "C" {
#endif
+/*
+ * User can redefine sw_module start id by passing SW_MODULE_START_ID value
+ * at compile time. This may be needed if mcuboot is a part of a system with
+ * several boot stages and previous stages are also fill measured boot data.
+ */
+#if defined(SW_MODULE_START_ID)
+#define GET_SW_MODULE_ID(sw_module) ((sw_module) + (SW_MODULE_START_ID))
+#else
+#define GET_SW_MODULE_ID(sw_module) sw_module
+#endif
/**
* @brief Add a data item to the shared data area between bootloader and
@@ -39,7 +49,8 @@
int boot_add_data_to_shared_area(uint8_t major_type,
uint16_t minor_type,
size_t size,
- const uint8_t *data);
+ const uint8_t *data,
+ const struct flash_area *fap);
/**
* Add an image's all boot status information to the shared memory area
diff --git a/boot/bootutil/include/bootutil/crypto/aes_ctr.h b/boot/bootutil/include/bootutil/crypto/aes_ctr.h
index 3758ca8..90727f1 100644
--- a/boot/bootutil/include/bootutil/crypto/aes_ctr.h
+++ b/boot/bootutil/include/bootutil/crypto/aes_ctr.h
@@ -44,40 +44,141 @@
extern "C" {
#endif
-#if defined(MCUBOOT_USE_MBED_TLS)
+#if defined(MCUBOOT_USE_MBED_TLS) && !defined(MCUBOOT_USE_PSA_CRYPTO)
typedef mbedtls_aes_context bootutil_aes_ctr_context;
static inline void bootutil_aes_ctr_init(bootutil_aes_ctr_context *ctx)
{
- (void)mbedtls_aes_init(ctx);
+ (void)mbedtls_aes_init(ctx);
}
static inline void bootutil_aes_ctr_drop(bootutil_aes_ctr_context *ctx)
{
- /* XXX: config defines MBEDTLS_PLATFORM_NO_STD_FUNCTIONS so no need to free */
- /* (void)mbedtls_aes_free(ctx); */
- (void)ctx;
+ /* XXX: config defines MBEDTLS_PLATFORM_NO_STD_FUNCTIONS so no need to free */
+ /* (void)mbedtls_aes_free(ctx); */
+ (void)ctx;
}
static inline int bootutil_aes_ctr_set_key(bootutil_aes_ctr_context *ctx, const uint8_t *k)
{
- return mbedtls_aes_setkey_enc(ctx, k, BOOTUTIL_CRYPTO_AES_CTR_KEY_SIZE * 8);
+ return mbedtls_aes_setkey_enc(ctx, k, BOOTUTIL_CRYPTO_AES_CTR_KEY_SIZE * 8);
}
static inline int bootutil_aes_ctr_encrypt(bootutil_aes_ctr_context *ctx, uint8_t *counter, const uint8_t *m, uint32_t mlen, size_t blk_off, uint8_t *c)
{
- uint8_t stream_block[BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE];
- (void)memset(&stream_block, 0, BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE);
- return mbedtls_aes_crypt_ctr(ctx, mlen, &blk_off, counter, stream_block, m, c);
+ uint8_t stream_block[BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE];
+ (void)memset(&stream_block, 0, BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE);
+ return mbedtls_aes_crypt_ctr(ctx, mlen, &blk_off, counter, stream_block, m, c);
}
static inline int bootutil_aes_ctr_decrypt(bootutil_aes_ctr_context *ctx, uint8_t *counter, const uint8_t *c, uint32_t clen, size_t blk_off, uint8_t *m)
{
- uint8_t stream_block[BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE];
- (void)memset(&stream_block, 0, BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE);
- return mbedtls_aes_crypt_ctr(ctx, clen, &blk_off, counter, stream_block, c, m);
+ uint8_t stream_block[BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE];
+ (void)memset(&stream_block, 0, BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE);
+ return mbedtls_aes_crypt_ctr(ctx, clen, &blk_off, counter, stream_block, c, m);
}
#endif /* MCUBOOT_USE_MBED_TLS */
+#if defined(MCUBOOT_USE_PSA_CRYPTO)
+#include "crypto.h"
+#include "crypto_values.h"
+
+typedef struct
+{
+ psa_key_handle_t key_handle;
+ psa_cipher_operation_t operation;
+} bootutil_aes_ctr_context;
+
+static inline void bootutil_aes_ctr_init(bootutil_aes_ctr_context *ctx)
+{
+ ctx->operation = psa_cipher_operation_init();
+}
+
+static inline void bootutil_aes_ctr_drop(bootutil_aes_ctr_context *ctx)
+{
+ psa_cipher_abort(&ctx->operation);
+}
+
+static inline int bootutil_aes_ctr_set_key(bootutil_aes_ctr_context *ctx, const uint8_t *key)
+{
+ psa_status_t status;
+
+ psa_key_attributes_t key_attributes = PSA_KEY_ATTRIBUTES_INIT;
+ psa_set_key_algorithm(&key_attributes, PSA_ALG_CTR);
+ psa_set_key_type(&key_attributes, PSA_KEY_TYPE_AES);
+ psa_set_key_usage_flags(&key_attributes, PSA_KEY_USAGE_DECRYPT | PSA_KEY_USAGE_ENCRYPT);
+
+ status = psa_import_key(&key_attributes, key, BOOTUTIL_CRYPTO_AES_CTR_KEY_SIZE, &ctx->key_handle);
+
+ if (status != PSA_SUCCESS) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static inline int bootutil_aes_ctr_encrypt(bootutil_aes_ctr_context *ctx, uint8_t *counter, const uint8_t *m, uint32_t mlen, size_t blk_off, uint8_t *c)
+{
+ (void)blk_off;
+
+ psa_status_t status;
+ size_t out_sz;
+ size_t f_sz;
+
+ ctx->operation = psa_cipher_operation_init();
+
+ status = psa_cipher_encrypt_setup(&ctx->operation, ctx->key_handle, PSA_ALG_CTR);
+
+ if (status == PSA_SUCCESS) {
+ status = psa_cipher_set_iv(&ctx->operation, counter, BOOTUTIL_CRYPTO_AES_CTR_KEY_SIZE);
+ }
+
+ if (status == PSA_SUCCESS) {
+ status = psa_cipher_update(&ctx->operation, m, mlen, c, mlen, &out_sz);
+ }
+
+ if (status == PSA_SUCCESS) {
+ status = psa_cipher_finish(&ctx->operation, c + out_sz, sizeof(mlen) - out_sz, &f_sz);
+ }
+
+ if ((status != PSA_SUCCESS) || ((out_sz + f_sz) != mlen)) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static inline int bootutil_aes_ctr_decrypt(bootutil_aes_ctr_context *ctx, uint8_t *counter, const uint8_t *c, uint32_t clen, size_t blk_off, uint8_t *m)
+{
+ (void)blk_off;
+
+ psa_status_t status;
+ size_t out_sz;
+ size_t f_sz;
+
+ ctx->operation = psa_cipher_operation_init();
+
+ status = psa_cipher_decrypt_setup(&ctx->operation, ctx->key_handle, PSA_ALG_CTR);
+
+ if (status == PSA_SUCCESS) {
+ status = psa_cipher_set_iv(&ctx->operation, counter, BOOTUTIL_CRYPTO_AES_CTR_KEY_SIZE);
+ }
+
+ if (status == PSA_SUCCESS) {
+ status = psa_cipher_update(&ctx->operation, c, clen, m, clen, &out_sz);
+ }
+
+ if (status == PSA_SUCCESS) {
+ status = psa_cipher_finish(&ctx->operation, m + out_sz, sizeof(clen) - out_sz, &f_sz);
+ }
+
+ if ((status != PSA_SUCCESS) || ((out_sz + f_sz) != clen)) {
+ return -1;
+ }
+
+ return 0;
+}
+#endif /* MCUBOOT_USE_PSA_CRYPTO */
+
#if defined(MCUBOOT_USE_TINYCRYPT)
typedef struct tc_aes_key_sched_struct bootutil_aes_ctr_context;
static inline void bootutil_aes_ctr_init(bootutil_aes_ctr_context *ctx)
diff --git a/boot/bootutil/include/bootutil/crypto/ecdh_p256.h b/boot/bootutil/include/bootutil/crypto/ecdh_p256.h
index 3811037..e0f6abd 100644
--- a/boot/bootutil/include/bootutil/crypto/ecdh_p256.h
+++ b/boot/bootutil/include/bootutil/crypto/ecdh_p256.h
@@ -67,7 +67,7 @@
}
#endif /* MCUBOOT_USE_TINYCRYPT */
-#if defined(MCUBOOT_USE_MBED_TLS)
+#if defined(MCUBOOT_USE_MBED_TLS) && !defined(MCUBOOT_USE_PSA_CRYPTO)
#define NUM_ECC_BYTES 32
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
@@ -147,6 +147,67 @@
}
#endif /* MCUBOOT_USE_MBED_TLS */
+
+#if defined(MCUBOOT_USE_PSA_CRYPTO)
+
+#include "crypto.h"
+#include "crypto_values.h"
+
+#define NUM_ECC_BYTES 32
+
+typedef void* bootutil_ecdh_p256_context;
+
+static inline void bootutil_ecdh_p256_init(bootutil_ecdh_p256_context *ctx)
+{
+ (void) ctx;
+}
+
+static inline void bootutil_ecdh_p256_drop(bootutil_ecdh_p256_context *ctx)
+{
+ (void) ctx;
+}
+
+static inline int bootutil_ecdh_p256_shared_secret(bootutil_ecdh_p256_context *ctx, const uint8_t *pub_key, const uint8_t *priv_key, uint8_t *shared)
+{
+ (void) ctx;
+
+ psa_status_t status;
+ psa_key_handle_t private_key_handle;
+
+ psa_key_attributes_t private_key_attributes = psa_key_attributes_init();
+
+ psa_set_key_usage_flags(&private_key_attributes, PSA_KEY_USAGE_DERIVE);
+ psa_set_key_algorithm(&private_key_attributes, PSA_ALG_ECDH);
+ psa_set_key_type(&private_key_attributes, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));
+ psa_set_key_bits(&private_key_attributes, 256u);
+
+ status = psa_import_key(&private_key_attributes, priv_key, 32, &private_key_handle);
+
+ if (status == PSA_SUCCESS)
+ {
+ size_t res_len;
+
+ status = psa_raw_key_agreement(PSA_ALG_ECDH,
+ private_key_handle,
+ pub_key,
+ 65,
+ shared,
+ 32,
+ &res_len);
+ }
+
+ psa_destroy_key(private_key_handle);
+
+ if (status != PSA_SUCCESS)
+ {
+ return -1;
+ }
+
+ return 0;
+}
+#endif /* MCUBOOT_USE_PSA_CRYPTO */
+
+
#ifdef __cplusplus
}
#endif
diff --git a/boot/bootutil/include/bootutil/crypto/hmac_sha256.h b/boot/bootutil/include/bootutil/crypto/hmac_sha256.h
index e684018..d5aec15 100644
--- a/boot/bootutil/include/bootutil/crypto/hmac_sha256.h
+++ b/boot/bootutil/include/bootutil/crypto/hmac_sha256.h
@@ -84,7 +84,7 @@
}
#endif /* MCUBOOT_USE_TINYCRYPT */
-#if defined(MCUBOOT_USE_MBED_TLS)
+#if defined(MCUBOOT_USE_MBED_TLS) && !defined(MCUBOOT_USE_PSA_CRYPTO)
/**
* The generic message-digest context.
*/
@@ -127,6 +127,78 @@
}
#endif /* MCUBOOT_USE_MBED_TLS */
+#if defined(MCUBOOT_USE_PSA_CRYPTO)
+/**
+ * The generic message-digest context.
+ */
+typedef struct
+{
+ psa_key_handle_t key_handle;
+ psa_mac_operation_t operation;
+} bootutil_hmac_sha256_context;
+
+static inline void bootutil_hmac_sha256_init(bootutil_hmac_sha256_context *ctx)
+{
+ ctx->operation = psa_mac_operation_init();
+}
+
+static inline void bootutil_hmac_sha256_drop(bootutil_hmac_sha256_context *ctx)
+{
+ psa_mac_abort(&ctx->operation);
+ psa_destroy_key(ctx->key_handle);
+}
+
+static inline int bootutil_hmac_sha256_set_key(bootutil_hmac_sha256_context *ctx, const uint8_t *key, unsigned int key_size)
+{
+ psa_status_t status;
+ psa_key_attributes_t key_attributes = psa_key_attributes_init();
+
+ psa_set_key_usage_flags(&key_attributes, PSA_KEY_USAGE_SIGN_HASH);
+ psa_set_key_algorithm(&key_attributes, PSA_ALG_HMAC(PSA_ALG_SHA_256));
+ psa_set_key_type(&key_attributes, PSA_KEY_TYPE_HMAC);
+ psa_set_key_bits(&key_attributes, 256u);
+
+ status = psa_import_key(&key_attributes, key, key_size, &ctx->key_handle);
+
+ if (status == PSA_SUCCESS) {
+ status = psa_mac_sign_setup(&ctx->operation, ctx->key_handle, PSA_ALG_HMAC(PSA_ALG_SHA_256));
+ }
+
+ if (status != PSA_SUCCESS) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static inline int bootutil_hmac_sha256_update(bootutil_hmac_sha256_context *ctx, const void *data, unsigned int data_length)
+{
+ psa_status_t status;
+
+ status = psa_mac_update(&ctx->operation, data, data_length);
+
+ if (status != PSA_SUCCESS) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static inline int bootutil_hmac_sha256_finish(bootutil_hmac_sha256_context *ctx, uint8_t *tag, unsigned int taglen)
+{
+ size_t output_len;
+ psa_status_t status;
+
+ status = psa_mac_sign_finish(&ctx->operation, tag, taglen, &output_len);
+
+ if (status != PSA_SUCCESS) {
+ return -1;
+ }
+
+ return 0;
+}
+#endif /* MCUBOOT_USE_MBED_TLS */
+
#ifdef __cplusplus
}
#endif
diff --git a/boot/bootutil/include/bootutil/crypto/sha256.h b/boot/bootutil/include/bootutil/crypto/sha256.h
index b45cd63..82de07b 100644
--- a/boot/bootutil/include/bootutil/crypto/sha256.h
+++ b/boot/bootutil/include/bootutil/crypto/sha256.h
@@ -20,6 +20,10 @@
#include "mcuboot_config/mcuboot_config.h"
+#if defined(MCUBOOT_SHA256_CUSTOM_INTERFACE)
+ #include "sha256_port.h"
+#else
+
#if (defined(MCUBOOT_USE_MBED_TLS) + \
defined(MCUBOOT_USE_TINYCRYPT) + \
defined(MCUBOOT_USE_CC310)) != 1
@@ -143,4 +147,6 @@
}
#endif
+#endif /* MCUBOOT_SHA256_CUSTOM_INTERFACE */
+
#endif /* __BOOTUTIL_CRYPTO_SHA256_H_ */
diff --git a/boot/bootutil/include/bootutil/fault_injection_hardening.h b/boot/bootutil/include/bootutil/fault_injection_hardening.h
index 8edf5ba..65b3023 100644
--- a/boot/bootutil/include/bootutil/fault_injection_hardening.h
+++ b/boot/bootutil/include/bootutil/fault_injection_hardening.h
@@ -83,8 +83,8 @@
#define FIH_MISRA_BLOCK_END(MISRA)
#endif /* CY_COVERITY_2012_CHECK */
-FIH_MISRA_DEVIATE_BLOCK_START('MISRA C-2012 Rule 10.1', 10, 'Signed integer bitwise operations');
-FIH_MISRA_DEVIATE_BLOCK_START('MISRA C-2012 Rule 10.4', 10, 'Signed integer bitwise operations');
+FIH_MISRA_DEVIATE_BLOCK_START('MISRA C-2012 Rule 10.1', 10, 'Signed integer bitwise operations')
+FIH_MISRA_DEVIATE_BLOCK_START('MISRA C-2012 Rule 10.4', 10, 'Signed integer bitwise operations')
#ifdef MCUBOOT_FIH_PROFILE_ON
#if defined(MCUBOOT_FIH_PROFILE_LOW)
@@ -107,13 +107,13 @@
#endif /* MCUBOOT_FIH_PROFILE */
/* Where possible, glue the FIH_TRUE from two components. */
-#define FIH_TRUE_1 ((int32_t)0x300AUL)
-#define FIH_TRUE_2 ((int32_t)0x0C50UL)
-#define FIH_TRUE ((int32_t)0x3C5AUL) /* i.e., FIH_TRUE_1 | FIH_TRUE_2 */
+#define FIH_TRUE_1 ((int32_t)0xC00AUL)
+#define FIH_TRUE_2 ((int32_t)0x0350UL)
+#define FIH_TRUE ((int32_t)0xC35AUL) /* i.e., FIH_TRUE_1 | FIH_TRUE_2 */
#define FIH_FALSE ((int32_t)0xA5C3UL)
#define FIH_POSITIVE_VALUE ((int32_t) 0x5555AAAAUL)
-#define FIH_NEGATIVE_VALUE ((int32_t)-0x5555AAABL)
+#define FIH_NEGATIVE_VALUE ((int32_t) 0xAAAA5555UL)
#ifdef FIH_ENABLE_DOUBLE_VARS
/*
@@ -122,15 +122,10 @@
* another xor. The mask value doesn't _really_ matter that much, as long as
* it has reasonably high Hamming weight.
*/
-#define FIH_MASK_VALUE 0xA5C35A3CU
-#ifndef USE_IFX_SE_CRYPTO /* TODO: Remove this after TFM-1749 resolved */
-#define FIH_UINT_MASK_VALUE 0xB779A31CU
-#else
+#define FIH_MASK_VALUE 0xA5C35A3C
#define FIH_UINT_MASK_VALUE 0xA5C35A3CU
-#endif /* USE_IFX_SE_CRYPTO */
-
-#define FIH_INT_VAL_MASK(val) ((int32_t)((val) ^ FIH_MASK_VALUE))
+#define FIH_INT_VAL_MASK(val) ((int32_t)((val) ^ (int32_t)FIH_MASK_VALUE))
#define FIH_UINT_VAL_MASK(val) ((val) ^ FIH_UINT_MASK_VALUE)
/*
@@ -142,14 +137,24 @@
volatile int32_t msk;
} fih_int;
-#define FIH_INT_INIT(x) {(x), FIH_INT_VAL_MASK(x)}
+#define FIH_INT_INIT(x) ((fih_int){(x), FIH_INT_VAL_MASK(x)})
+
+/* FIH_INT_INIT_GLOBAL is created to declare global or static global veriables to
+ avoid the compile time Error[Pe028]: expression must have a constant value
+ on IAR compiler */
+#define FIH_INT_INIT_GLOBAL(x) {(x), FIH_INT_VAL_MASK(x)}
typedef struct {
volatile uint32_t val;
volatile uint32_t msk;
} fih_uint;
-#define FIH_UINT_INIT(x) {(x), FIH_UINT_VAL_MASK(x)}
+#define FIH_UINT_INIT(x) ((fih_uint){(x), FIH_UINT_VAL_MASK(x)})
+
+/* FIH_UINT_INIT_GLOBAL is created to declare global or static global veriables to
+ avoid the compile time Error[Pe028]: expression must have a constant value
+ on IAR compiler */
+#define FIH_UINT_INIT_GLOBAL(x) {(x), FIH_UINT_VAL_MASK(x)}
#else /* FIH_ENABLE_DOUBLE_VARS */
/*
@@ -165,15 +170,22 @@
volatile uint32_t val;
} fih_uint;
-#define FIH_INT_INIT(x) {(x)}
-#define FIH_UINT_INIT(x) {(x)}
+#define FIH_INT_INIT(x) ((fih_int){(x)})
+
+/* FIH_UINT_INIT_GLOBAL and FIH_INT_INIT_GLOBAL are created to declare global
+ or static global veriables to avoid the compile time Error[Pe028]: expression
+ must have a constant value on IAR compiler */
+#define FIH_INT_INIT_GLOBAL(x) {(x)}
+#define FIH_UINT_INIT(x) ((fih_uint){(x)})
+#define FIH_UINT_INIT_GLOBAL(x) {(x)}
#endif /* FIH_ENABLE_DOUBLE_VARS */
-#define FIH_SUCCESS (fih_int_encode(FIH_POSITIVE_VALUE))
-#define FIH_FAILURE (fih_int_encode(FIH_NEGATIVE_VALUE))
-#define FIH_UINT_ZERO (fih_uint_encode(0U))
-#define FIH_INT_ZERO (fih_int_encode((signed)0))
-#define FIH_UINT_MAX (fih_uint_encode(0xFFFFFFFFU))
+#define FIH_SUCCESS (FIH_INT_INIT(FIH_POSITIVE_VALUE))
+#define FIH_FAILURE (FIH_INT_INIT(FIH_NEGATIVE_VALUE))
+#define FIH_UINT_ZERO (FIH_UINT_INIT(0U))
+#define FIH_INT_ZERO (FIH_INT_INIT(0L))
+#define FIH_UINT_MAX (FIH_UINT_INIT(0xFFFFFFFFU))
+
#ifdef FIH_ENABLE_GLOBAL_FAIL
/**
@@ -207,48 +219,14 @@
*/
void fih_delay_init(void);
-/**
- * Get a random uint8_t value from an RNG seeded with an entropy source.
- * NOTE: do not directly call this function!
- *
- * @return random value.
- */
-uint8_t fih_delay_random(void);
+bool fih_delay(void);
-/**
- * Delaying logic, with randomness from a CSPRNG.
- */
-__attribute__((always_inline)) static inline
-void fih_delay(void)
-{
- uint32_t i = 0;
- volatile uint32_t delay = 10u; /* TODO: REMOVE */
- volatile uint32_t counter = 0;
-
-#if 0
- delay = fih_delay_random();
-
- if (delay == FIH_NEGATIVE_VALUE) {
- FIH_PANIC;
- }
-
- delay &= 0xFF;
-#endif
-
- for (i = 0; i < delay; i++) {
- counter++;
- }
-
- if (counter != delay) {
- FIH_PANIC;
- }
-}
#else /* FIH_ENABLE_DELAY */
/* NOOP */
#define fih_delay_init()
/* NOOP */
-#define fih_delay()
+#define fih_delay() (true)
#endif /* FIH_ENABLE_DELAY */
#ifdef FIH_ENABLE_DOUBLE_VARS
@@ -258,13 +236,15 @@
* @param x fih_int value to be validated.
*/
__attribute__((always_inline)) static inline
-void fih_int_validate(fih_int x)
+bool fih_int_validate(fih_int x)
{
int32_t x_msk = x.msk;
if (x.val != FIH_INT_VAL_MASK(x_msk)) {
FIH_PANIC;
}
+
+ return true;
}
/**
@@ -273,13 +253,15 @@
* @param x fih_uint value to be validated.
*/
__attribute__((always_inline)) static inline
-void fih_uint_validate(fih_uint x)
+bool fih_uint_validate(fih_uint x)
{
uint32_t x_msk = x.msk;
if (x.val != FIH_UINT_VAL_MASK(x_msk)) {
FIH_PANIC;
}
+
+ return true;
}
/**
@@ -292,7 +274,7 @@
__attribute__((always_inline)) static inline
int32_t fih_int_decode(fih_int x)
{
- fih_int_validate(x);
+ (void)fih_int_validate(x);
return x.val;
}
@@ -306,7 +288,7 @@
__attribute__((always_inline)) static inline
uint32_t fih_uint_decode(fih_uint x)
{
- fih_uint_validate(x);
+ (void)fih_uint_validate(x);
return x.val;
}
@@ -345,40 +327,17 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x == y, other otherwise.
+ * @return true if x == y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_eq(fih_int x, fih_int y)
-{
- int32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
- if (x.val == y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (x.msk == y_msk) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val != y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_eq(x, y) \
+ ( fih_int_validate(x) && \
+ fih_int_validate(y) && \
+ ((x).val == (y).val) && \
+ fih_delay() && \
+ ((x).msk == (y).msk) && \
+ fih_delay() && \
+ ((x).val == FIH_INT_VAL_MASK((y).msk)) \
+ )
/**
* Standard equality for fih_uint values.
@@ -386,40 +345,17 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x == y, other otherwise.
+ * @return true if x == y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_eq(fih_uint x, fih_uint y)
-{
- uint32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
- if (x.val == y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (x.msk == y_msk) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val != y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_uint_eq(x, y) \
+ ( fih_uint_validate(x) && \
+ fih_uint_validate(y) && \
+ ((x).val == (y).val) && \
+ fih_delay() && \
+ ((x).msk == (y).msk) && \
+ fih_delay() && \
+ ((x).val == FIH_UINT_VAL_MASK((y).msk)) \
+ )
/**
* Standard non-equality for fih_int values.
@@ -427,40 +363,17 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x != y, FIH_FALSE otherwise.
+ * @return true if x != y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_not_eq(fih_int x, fih_int y)
-{
- int32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
- if (x.val != y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (x.msk != y_msk) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val == y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_not_eq(x, y) \
+ ( fih_int_validate(x) && \
+ fih_int_validate(y) && \
+ ((x).val != (y).val) && \
+ fih_delay() && \
+ ((x).msk != (y).msk) && \
+ fih_delay() && \
+ ((x).val != FIH_INT_VAL_MASK((y).msk)) \
+ )
/**
* Standard non-equality for fih_uint values.
@@ -468,40 +381,17 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x != y, FIH_FALSE otherwise.
+ * @return true if x != y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_not_eq(fih_uint x, fih_uint y)
-{
- uint32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
- if (x.val != y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (x.msk != y_msk) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val == y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_uint_not_eq(x, y) \
+ ( fih_uint_validate(x) && \
+ fih_uint_validate(y) && \
+ ((x).val != (y).val) && \
+ fih_delay() && \
+ ((x).msk != (y).msk) && \
+ fih_delay() && \
+ ((x).val != FIH_UINT_VAL_MASK((y).msk)) \
+ )
/**
* Standard greater than comparison for fih_int values.
@@ -509,40 +399,17 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x > y, FIH_FALSE otherwise.
+ * @return true if x > y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_gt(fih_int x, fih_int y)
-{
- int32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
- if (x.val > y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_INT_VAL_MASK(x.msk) > FIH_INT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val <= y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_gt(x, y) \
+ ( fih_int_validate(x) && \
+ fih_int_validate(y) && \
+ ((x).val > (y).val) && \
+ fih_delay() && \
+ (FIH_INT_VAL_MASK((x).msk) > FIH_INT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val > FIH_INT_VAL_MASK((y).msk)) \
+ )
/**
* Standard greater than comparison for fih_uint values.
@@ -550,40 +417,17 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x > y, FIH_FALSE otherwise.
+ * @return true if x > y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_gt(fih_uint x, fih_uint y)
-{
- uint32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
- if (x.val > y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_UINT_VAL_MASK(x.msk) > FIH_UINT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val <= y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_uint_gt(x, y) \
+ ( fih_uint_validate(x) && \
+ fih_uint_validate(y) && \
+ ((x).val > (y).val) && \
+ fih_delay() && \
+ (FIH_UINT_VAL_MASK((x).msk) > FIH_UINT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val > FIH_UINT_VAL_MASK((y).msk)) \
+ )
/**
* Standard greater than or equal comparison for fih_int values.
@@ -591,40 +435,17 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x >= y, FIH_FALSE otherwise.
+ * @return true if x >= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_ge(fih_int x, fih_int y)
-{
- int32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
- if (x.val >= y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_INT_VAL_MASK(x.msk) >= FIH_INT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val < y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_ge(x, y) \
+ ( fih_int_validate(x) && \
+ fih_int_validate(y) && \
+ ((x).val >= (y).val) && \
+ fih_delay() && \
+ (FIH_INT_VAL_MASK((x).msk) >= FIH_INT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val >= FIH_INT_VAL_MASK((y).msk)) \
+ )
/**
* Standard greater than or equal comparison for fih_uint values.
@@ -632,40 +453,17 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x >= y, FIH_FALSE otherwise.
+ * @return true if x >= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_ge(fih_uint x, fih_uint y)
-{
- uint32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
- if (x.val >= y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_UINT_VAL_MASK(x.msk) >= FIH_UINT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val < y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_uint_ge(x, y) \
+ ( fih_uint_validate(x) && \
+ fih_uint_validate(y) && \
+ ((x).val >= (y).val) && \
+ fih_delay() && \
+ (FIH_UINT_VAL_MASK((x).msk) >= FIH_UINT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val >= FIH_UINT_VAL_MASK((y).msk)) \
+ )
/**
* Standard less than comparison for fih_int values.
@@ -673,40 +471,17 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x < y, FIH_FALSE otherwise.
+ * @return true if x < y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_lt(fih_int x, fih_int y)
-{
- int32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
- if (x.val < y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_INT_VAL_MASK(x.msk) < FIH_INT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val >= y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_lt(x, y) \
+ ( fih_int_validate(x) && \
+ fih_int_validate(y) && \
+ ((x).val < (y).val) && \
+ fih_delay() && \
+ (FIH_INT_VAL_MASK((x).msk) < FIH_INT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val < FIH_INT_VAL_MASK((y).msk)) \
+ )
/**
* Standard less than comparison for fih_uint values.
@@ -714,40 +489,17 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x < y, FIH_FALSE otherwise.
+ * @return true if x < y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_lt(fih_uint x, fih_uint y)
-{
- uint32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
- if (x.val < y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_UINT_VAL_MASK(x.msk) < FIH_UINT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val >= y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_uint_lt(x, y) \
+ ( fih_uint_validate(x) && \
+ fih_uint_validate(y) && \
+ ((x).val < (y).val) && \
+ fih_delay() && \
+ (FIH_UINT_VAL_MASK((x).msk) < FIH_UINT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val < FIH_UINT_VAL_MASK((y).msk)) \
+ )
/**
* Standard less than or equal comparison for fih_int values.
@@ -755,40 +507,17 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x <= y, FIH_FALSE otherwise.
+ * @return true if x <= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_le(fih_int x, fih_int y)
-{
- int32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
- if (x.val <= y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_INT_VAL_MASK(x.msk) <= FIH_INT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val > y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_le(x, y) \
+ ( fih_int_validate(x) && \
+ fih_int_validate(y) && \
+ ((x).val <= (y).val) && \
+ fih_delay() && \
+ (FIH_INT_VAL_MASK((x).msk) <= FIH_INT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val <= FIH_INT_VAL_MASK((y).msk)) \
+ )
/**
* Standard less than or equal comparison for fih_uint values.
@@ -796,40 +525,17 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x <= y, FIH_FALSE otherwise.
+ * @return true if x <= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_le(fih_uint x, fih_uint y)
-{
- uint32_t y_val, y_msk;
- volatile int32_t rc = FIH_FALSE;
-
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
- if (x.val <= y_val) {
- rc = FIH_TRUE_1;
- }
-
- fih_delay();
-
- y_msk = y.msk;
- if (FIH_UINT_VAL_MASK(x.msk) <= FIH_UINT_VAL_MASK(y_msk)) {
- rc |= FIH_TRUE_2;
- }
-
- fih_delay();
-
- y_val = y.val;
- if (x.val > y_val) {
- if (rc == FIH_TRUE) {
- FIH_PANIC;
- }
- }
-
- return rc;
-}
+#define fih_uint_le(x, y) \
+ ( fih_uint_validate(x) && \
+ fih_uint_validate(y) && \
+ ((x).val <= (y).val) && \
+ fih_delay() && \
+ (FIH_UINT_VAL_MASK((x).msk) <= FIH_UINT_VAL_MASK((y).msk)) && \
+ fih_delay() && \
+ ((x).val <= FIH_UINT_VAL_MASK((y).msk)) \
+ )
/**
* Standard logical OR for fih_uint values.
@@ -842,22 +548,16 @@
__attribute__((always_inline)) static inline
fih_uint fih_uint_or(fih_uint x, fih_uint y)
{
- uint32_t y_val, y_msk;
+ /* Use local variable to avoid persistent side effect MISRA violation
+ * in operations with volatile variables. */
+ uint32_t y_val = y.val;
+ uint32_t y_msk = y.msk;
volatile fih_uint rc = {0};
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
rc.val = x.val | y_val;
- fih_delay();
-
- y_msk = y.msk;
rc.msk = FIH_UINT_VAL_MASK(FIH_UINT_VAL_MASK(x.msk) | FIH_UINT_VAL_MASK(y_msk));
- fih_uint_validate(rc);
-
return rc;
}
@@ -872,22 +572,16 @@
__attribute__((always_inline)) static inline
fih_int fih_or(fih_int x, fih_int y)
{
- int32_t y_val, y_msk;
+ /* Use local variable to avoid persistent side effect MISRA violation
+ * in operations with volatile variables. */
+ int32_t y_val = y.val;
+ int32_t y_msk = y.msk;
volatile fih_int rc = {0};
- fih_int_validate(x);
- fih_int_validate(y);
-
- y_val = y.val;
rc.val = x.val | y_val;
- fih_delay();
-
- y_msk = y.msk;
rc.msk = FIH_INT_VAL_MASK(FIH_INT_VAL_MASK(x.msk) | FIH_INT_VAL_MASK(y_msk));
- fih_int_validate(rc);
-
return rc;
}
@@ -902,38 +596,32 @@
__attribute__((always_inline)) static inline
fih_uint fih_uint_and(fih_uint x, fih_uint y)
{
- uint32_t y_val, y_msk;
+ /* Use local variable to avoid persistent side effect MISRA violation
+ * in operations with volatile variables. */
+ uint32_t y_val = y.val;
+ uint32_t y_msk = y.msk;
volatile fih_uint rc = {0};
- fih_uint_validate(x);
- fih_uint_validate(y);
-
- y_val = y.val;
rc.val = x.val & y_val;
- fih_delay();
-
- y_msk = y.msk;
rc.msk = FIH_UINT_VAL_MASK(FIH_UINT_VAL_MASK(x.msk) & FIH_UINT_VAL_MASK(y_msk));
- fih_uint_validate(rc);
-
return rc;
}
#else /* FIH_ENABLE_DOUBLE_VARS */
/* NOOP */
-#define fih_int_validate(x)
-#define fih_uint_validate(x)
+#define fih_int_validate(x) (true)
+#define fih_uint_validate(x) (true)
/* NOOP */
#define fih_int_decode(x) ((x).val)
#define fih_uint_decode(x) ((x).val)
/* NOOP */
-#define fih_int_encode(x) ((fih_int)FIH_INT_INIT(x))
-#define fih_uint_encode(x) ((fih_uint)FIH_UINT_INIT(x))
+#define fih_int_encode(x) (FIH_INT_INIT(x))
+#define fih_uint_encode(x) (FIH_UINT_INIT(x))
/**
* Standard equality for fih_int values.
@@ -941,25 +629,13 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x == y, FIH_FALSE otherwise.
+ * @return true if x == y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_eq(fih_int x, fih_int y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val == y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val != y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_eq(x, y) \
+ ( ((x).val == (y).val) && \
+ fih_delay() && \
+ !((x).val != (y).val) \
+ )
/**
* Standard equality for fih_uint values.
@@ -967,25 +643,13 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x == y, FIH_FALSE otherwise.
+ * @return true if x == y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_eq(fih_uint x, fih_uint y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val == y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val != y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_uint_eq(x, y) \
+ ( ((x).val == (y).val) && \
+ fih_delay() && \
+ !((x).val != (y).val) \
+ )
/**
* Standard non-equality for fih_int values.
@@ -993,25 +657,13 @@
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x != y, FIH_FALSE otherwise.
+ * @return true if x != y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_not_eq(fih_int x, fih_int y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val != y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val == y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_not_eq(x, y) \
+ ( ((x).val != (y).val) && \
+ fih_delay() && \
+ !((x).val == (y).val) \
+ )
/**
* Standard non-equality for fih_uint values.
@@ -1019,103 +671,52 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x != y, FIH_FALSE otherwise.
+ * @return true if x != y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_not_eq(fih_uint x, fih_uint y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val != y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val == y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
-
+#define fih_uint_not_eq(x, y) \
+ ( ((x).val != (y).val) && \
+ fih_delay() && \
+ !((x).val == (y).val) \
+ )
/**
* Standard greater than comparison for fih_int values.
*
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x > y, FIH_FALSE otherwise.
+ * @return true if x > y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_gt(fih_int x, fih_int y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val > y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val <= y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
-
+#define fih_gt(x, y) \
+ ( ((x).val > (y).val) && \
+ fih_delay() && \
+ !((x).val <= (y).val) \
+ )
/**
* Standard greater than comparison for fih_uint values.
*
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x > y, FIH_FALSE otherwise.
+ * @return true if x > y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_gt(fih_uint x, fih_uint y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val > y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val <= y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
-
+#define fih_uint_gt(x, y) \
+ ( ((x).val > (y).val) && \
+ fih_delay() && \
+ !((x).val <= (y).val) \
+ )
/**
* Standard greater than or equal comparison for fih_int values.
*
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x >= y, FIH_FALSE otherwise.
+ * @return true if x >= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_ge(fih_int x, fih_int y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val >= y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val < y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_ge(x, y) \
+ ( ((x).val >= (y).val) && \
+ fih_delay() && \
+ !((x).val < (y).val) \
+ )
/**
* Standard greater than or equal comparison for fih_uint values.
@@ -1123,51 +724,26 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x >= y, FIH_FALSE otherwise.
+ * @return true if x >= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_ge(fih_uint x, fih_uint y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val >= y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val < y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
-
+#define fih_uint_ge(x, y) \
+ ( ((x).val >= (y).val) && \
+ fih_delay() && \
+ !((x).val < (y).val) \
+ )
/**
* Standard less than comparison for fih_int values.
*
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x < y, FIH_FALSE otherwise.
+ * @return true if x < y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_lt(fih_int x, fih_int y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val < y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val >= y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_lt(x, y) \
+ ( ((x).val < (y).val) && \
+ fih_delay() && \
+ !((x).val >= (y).val) \
+ )
/**
* Standard less than comparison for fih_uint values.
@@ -1175,51 +751,26 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x < y, FIH_FALSE otherwise.
+ * @return true if x < y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_lt(fih_uint x, fih_uint y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val < y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val >= y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
-
+#define fih_uint_lt(x, y) \
+ ( ((x).val < (y).val) && \
+ fih_delay() && \
+ !((x).val >= (y).val) \
+ )
/**
* Standard less than or equal comparison for fih_int values.
*
* @param x 1st fih_int value to be compared.
* @param y 2nd fih_int value to be compared.
*
- * @return FIH_TRUE if x <= y, FIH_FALSE otherwise.
+ * @return true if x <= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_le(fih_int x, fih_int y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val <= y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val > y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_le(x, y) \
+ ( ((x).val <= (y).val) && \
+ fih_delay() && \
+ !((x).val > (y).val) \
+ )
/**
* Standard less than or equal comparison for fih_uint values.
@@ -1227,25 +778,13 @@
* @param x 1st fih_uint value to be compared.
* @param y 2nd fih_uint value to be compared.
*
- * @return FIH_TRUE if x <= y, FIH_FALSE otherwise.
+ * @return true if x <= y, false otherwise.
*/
-__attribute__((always_inline)) static inline
-int32_t fih_uint_le(fih_uint x, fih_uint y)
-{
- volatile int32_t rc = FIH_FALSE;
-
- if (x.val <= y.val) {
- rc = FIH_TRUE;
- }
-
- fih_delay();
-
- if (x.val > y.val) {
- rc = FIH_FALSE;
- }
-
- return rc;
-}
+#define fih_uint_le(x, y) \
+ ( ((x).val <= (y).val) && \
+ fih_delay() && \
+ !((x).val > (y).val) \
+ )
/**
* Standard logical OR for fih_uint values.
@@ -1255,12 +794,13 @@
*
* @return ORed value
*/
+
__attribute__((always_inline)) static inline
fih_uint fih_uint_or(fih_uint x, fih_uint y)
{
fih_uint rc = {x.val | y.val};
- fih_delay();
+ (void)fih_delay();
if (rc.val != (x.val | y.val)) {
FIH_PANIC;
@@ -1282,7 +822,7 @@
{
fih_int rc = {x.val | y.val};
- fih_delay();
+ (void)fih_delay();
if (rc.val != (x.val | y.val)) {
FIH_PANIC;
@@ -1304,7 +844,7 @@
{
fih_uint rc = {x.val & y.val};
- fih_delay();
+ (void)fih_delay();
if (rc.val != (x.val & y.val)) {
FIH_PANIC;
@@ -1421,7 +961,7 @@
#define FIH_CFI_STEP_ERR_RESET() \
do { \
fih_cfi_ctr = fih_cfi_step_saved_value; \
- fih_int_validate(fih_cfi_ctr); \
+ (void)fih_int_validate(fih_cfi_ctr); \
} while(0)
#else /* FIH_ENABLE_CFI */
@@ -1462,10 +1002,10 @@
FIH_LABEL("FIH_CALL_START_" # f); \
FIH_CFI_PRECALL_BLOCK; \
(ret) = FIH_FAILURE; \
- fih_delay(); \
+ (void)fih_delay(); \
(ret) = (f)(__VA_ARGS__); \
FIH_CFI_POSTCALL_BLOCK; \
- fih_int_validate(ret); \
+ (void)fih_int_validate(ret); \
FIH_LABEL("FIH_CALL_END"); \
} while (false)
@@ -1475,7 +1015,7 @@
#define FIH_VOID(f, ...) \
do { \
FIH_CFI_PRECALL_BLOCK; \
- fih_delay(); \
+ (void)fih_delay(); \
(void)(f)(__VA_ARGS__); \
FIH_CFI_POSTCALL_BLOCK; \
FIH_LABEL("FIH_CALL_END"); \
@@ -1490,10 +1030,10 @@
FIH_LABEL("FIH_CALL_START_" # f); \
FIH_CFI_PRECALL_BLOCK; \
(ret) = FIH_UINT_ZERO; \
- fih_delay(); \
+ (void)fih_delay(); \
(ret) = (f)(__VA_ARGS__); \
FIH_CFI_POSTCALL_BLOCK; \
- fih_uint_validate(ret); \
+ (void)fih_uint_validate(ret); \
FIH_LABEL("FIH_CALL_END"); \
} while (false)
@@ -1515,8 +1055,14 @@
typedef fih_int fih_int;
typedef fih_uint fih_uint;
+
+/* FIH_UINT_INIT_GLOBAL and FIH_INT_INIT_GLOBAL are created to declare global
+ or static global veriables to avoid the compile time Error[Pe028]: expression
+ must have a constant value on IAR compiler */
#define FIH_INT_INIT(x) (x)
+#define FIH_INT_INIT_GLOBAL(x) (x)
#define FIH_UINT_INIT(x) (x)
+#define FIH_UINT_INIT_GLOBAL(x) (x)
#define FIH_SUCCESS (0)
#define FIH_FAILURE (-1)
@@ -1599,7 +1145,7 @@
}
#endif /* __cplusplus */
-FIH_MISRA_BLOCK_END('MISRA C-2012 Rule 10.1');
-FIH_MISRA_BLOCK_END('MISRA C-2012 Rule 10.4');
+FIH_MISRA_BLOCK_END('MISRA C-2012 Rule 10.1')
+FIH_MISRA_BLOCK_END('MISRA C-2012 Rule 10.4')
#endif /* FAULT_INJECTION_HARDENING_H */
diff --git a/boot/bootutil/include/bootutil/image.h b/boot/bootutil/include/bootutil/image.h
index 535e34e..906981d 100644
--- a/boot/bootutil/include/bootutil/image.h
+++ b/boot/bootutil/include/bootutil/image.h
@@ -97,6 +97,8 @@
#define IMAGE_TLV_SEC_CNT (0x50) /* security counter */
#define IMAGE_TLV_PROV_PACK (0x51) /* Reprovisioning packet */
#define IMAGE_TLV_BOOT_RECORD (0x60) /* measured boot record */
+
+#define IMAGE_TLV_BUILT_IN_KEY_ID (0x77) /* ID if Built in keys in device key storage */
/*
* vendor reserved TLVs at xxA0-xxFF,
* where xx denotes the upper byte
diff --git a/boot/bootutil/src/boot_record.c b/boot/bootutil/src/boot_record.c
index 88b7573..82ec800 100644
--- a/boot/bootutil/src/boot_record.c
+++ b/boot/bootutil/src/boot_record.c
@@ -23,11 +23,6 @@
#include "mcuboot_config/mcuboot_config.h"
-#if defined USE_IFX_SE_CRYPTO
-#include "ifx_se_platform.h"
-#define SE_RT_SYSCALL_NOT_SUPPORTED (ifx_se_status_t) FIH_UINT_INIT(0xF7000001u)
-#endif
-
#if defined(MCUBOOT_MEASURED_BOOT) || defined(MCUBOOT_DATA_SHARING)
#include "bootutil/crypto/sha256.h"
#include "bootutil/boot_record.h"
@@ -41,75 +36,8 @@
#define SHARED_MEMORY_OVERFLOW (1)
#define SHARED_MEMORY_OVERWRITE (2)
#define SHARED_MEMORY_GEN_ERROR (3)
-#define SHARED_MEMORY_CORRUPTED (4)
-#if defined USE_IFX_SE_CRYPTO
-/* See in boot_record.h */
-int
-boot_add_data_to_shared_area(uint8_t major_type,
- uint16_t minor_type,
- size_t size,
- const uint8_t *data)
-{
- struct shared_data_tlv_entry tlv_entry = {0};
- uint16_t type = SET_TLV_TYPE(major_type, minor_type);
- uint8_t boot_data_arr[MCUBOOT_SHARED_DATA_SIZE] = {0};
- struct shared_boot_data *boot_data = (struct shared_boot_data *)boot_data_arr;
- uint16_t boot_data_size = 0;
-
- ifx_se_status_t if_se_rc = IFX_SE_INVALID;
-
- if (data == NULL) {
- return SHARED_MEMORY_GEN_ERROR;
- }
-
- /* Fill boot_data structure - tlv header portions */
- boot_data->header.tlv_magic = SHARED_DATA_TLV_INFO_MAGIC;
- boot_data->header.tlv_tot_len = (uint16_t)SHARED_DATA_HEADER_SIZE;
-
- /* Add TLV entry type portion */
- tlv_entry.tlv_type = type;
-
- if (size > (unsigned)UINT16_MAX - SHARED_DATA_ENTRY_HEADER_SIZE) {
- return SHARED_MEMORY_GEN_ERROR;
- }
-
- /* Add TLV entry length portion */
- tlv_entry.tlv_len = (uint16_t)size;
- if (!boot_u16_safe_add(&boot_data_size, boot_data->header.tlv_tot_len,
- (uint16_t)SHARED_DATA_ENTRY_SIZE(size))) {
- return SHARED_MEMORY_GEN_ERROR;
- }
-
- /* Verify overflow of shared area */
- if (boot_data_size > MCUBOOT_SHARED_DATA_SIZE) {
- return SHARED_MEMORY_OVERFLOW;
- }
-
- (void)memcpy((void *)boot_data + SHARED_DATA_HEADER_SIZE, (const void *)&tlv_entry, SHARED_DATA_ENTRY_HEADER_SIZE);
- (void)memcpy((void *)boot_data + SHARED_DATA_HEADER_SIZE + SHARED_DATA_ENTRY_HEADER_SIZE, (const void *)data, size);
-
- boot_data->header.tlv_tot_len = boot_data_size;
-
- if_se_rc = ifx_se_set_shared_data(fih_ptr_encode(boot_data), fih_uint_encode(boot_data_size), IFX_SE_NULL_CTX);
-
- if (fih_uint_eq(if_se_rc, SE_RT_SYSCALL_NOT_SUPPORTED)) {
- /* return as okay, because syscall is not implemented in SE RT nowm but our job is done here */
- return SHARED_MEMORY_OK;
- }
- else if (fih_uint_eq(if_se_rc, IFX_SE_SUCCESS)) {
- /* return error if we get here and rc is supported */
- return SHARED_MEMORY_GEN_ERROR;
- }
- else {
- /* return success otherwise */
- return SHARED_MEMORY_OK;
- }
-
-}
-
-#else /* USE_IFX_SE_CRYPTO */
-
+#ifndef USE_PLATFORM_SHARED_DATA_STORAGE
/**
* @var shared_memory_init_done
*
@@ -123,7 +51,8 @@
boot_add_data_to_shared_area(uint8_t major_type,
uint16_t minor_type,
size_t size,
- const uint8_t *data)
+ const uint8_t *data,
+ const struct flash_area *fap)
{
struct shared_data_tlv_entry tlv_entry = {0};
uint16_t type = SET_TLV_TYPE(major_type, minor_type);
@@ -131,6 +60,8 @@
uint16_t boot_data_size;
uintptr_t tlv_end, offset;
+ (void)fap;
+
if (data == NULL) {
return SHARED_MEMORY_GEN_ERROR;
}
@@ -196,7 +127,9 @@
return SHARED_MEMORY_OK;
}
-#endif /* USE_IFX_SE_CRYPTO */
+
+
+#endif /* USE_PLATFORM_SHARED_DATA_STORAGE */
#endif /* MCUBOOT_MEASURED_BOOT OR MCUBOOT_DATA_SHARING */
#ifdef MCUBOOT_MEASURED_BOOT
@@ -310,7 +243,8 @@
rc = boot_add_data_to_shared_area(TLV_MAJOR_IAS,
ias_minor,
record_len,
- buf);
+ buf,
+ fap);
if (rc != SHARED_MEMORY_OK) {
return rc;
}
@@ -346,6 +280,27 @@
}
}
+/* Since the ram load active slot is chosen by the highest present
+ * version we should compare not only with first slots of all images
+ * but with secondary slots also. So when there is no appropriate
+ * between first slots it searches in secondaries.
+*/
+#if defined(MCUBOOT_RAM_LOAD)
+ if ((uint8_t)MCUBOOT_IMAGE_NUMBER == i) {
+ for (i = 0; i < (uint8_t)MCUBOOT_IMAGE_NUMBER; i++) {
+ if (flash_area_open(FLASH_AREA_IMAGE_SECONDARY(i),
+ &temp_fap) != 0) {
+ return -1;
+ }
+
+ if (fap == temp_fap) {
+ fwu_img_id = i;
+ break;
+ }
+ }
+ }
+#endif
+
if ((uint8_t)MCUBOOT_IMAGE_NUMBER == i) {
return -1;
}
@@ -355,6 +310,7 @@
return boot_add_data_to_shared_area(TLV_MAJOR_FWU,
fwu_minor,
sizeof(hdr->ih_ver),
- (const uint8_t *)&hdr->ih_ver);
+ (const uint8_t *)&hdr->ih_ver,
+ fap);
}
#endif /* MCUBOOT_DATA_SHARING */
diff --git a/boot/bootutil/src/bootutil_priv.h b/boot/bootutil/src/bootutil_priv.h
index 045cacf..04c61f9 100644
--- a/boot/bootutil/src/bootutil_priv.h
+++ b/boot/bootutil/src/bootutil_priv.h
@@ -50,7 +50,12 @@
struct flash_area;
+#ifdef USE_IFX_SE_CRYPTO
+#define BOOT_TMPBUF_SZ 4096
+#else
#define BOOT_TMPBUF_SZ 256
+#endif /* USE_IFX_SE_CRYPTO */
+
/** Number of image slots in flash; currently limited to two. */
#define BOOT_NUM_SLOTS 2
@@ -309,6 +314,9 @@
#ifdef MCUBOOT_ENC_IMAGES
+uint32_t boot_iv_offset(const struct flash_area *fap, uint8_t slot);
+int boot_read_iv(int image_index, uint8_t slot, uint8_t* dst);
+int boot_write_iv(const struct flash_area *fap, uint8_t* iv);
int boot_write_enc_key(const struct flash_area *fap, uint8_t slot,
const struct boot_status *bs);
int boot_read_enc_key(int image_index, uint8_t slot, struct boot_status *bs);
diff --git a/boot/bootutil/src/encrypted.c b/boot/bootutil/src/encrypted.c
index 02f8eef..6d37ecb 100644
--- a/boot/bootutil/src/encrypted.c
+++ b/boot/bootutil/src/encrypted.c
@@ -48,6 +48,10 @@
#include "bootutil_priv.h"
+#ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
+#include "xip_encryption.h"
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+
#if defined(MCUBOOT_ENCRYPT_EC256) || defined(MCUBOOT_ENCRYPT_X25519)
#if defined(_compare)
static inline int bootutil_constant_time_compare(const uint8_t *a, const uint8_t *b, size_t size)
@@ -158,8 +162,10 @@
#endif
#if defined(MCUBOOT_ENCRYPT_EC256)
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
static const uint8_t ec_pubkey_oid[] = MBEDTLS_OID_EC_ALG_UNRESTRICTED;
static const uint8_t ec_secp256r1_oid[] = MBEDTLS_OID_EC_GRP_SECP256R1;
+#endif
#define SHARED_KEY_LEN NUM_ECC_BYTES
#define PRIV_KEY_LEN NUM_ECC_BYTES
@@ -195,6 +201,7 @@
return -5;
}
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
return -6;
@@ -203,6 +210,7 @@
memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
return -7;
}
+#endif
if ((rc = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_OCTET_STRING)) != 0) {
return -8;
@@ -240,8 +248,10 @@
#if defined(MCUBOOT_ENCRYPT_X25519)
#define X25519_OID "\x6e"
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
static const uint8_t ec_pubkey_oid[] = MBEDTLS_OID_ISO_IDENTIFIED_ORG \
MBEDTLS_OID_ORG_GOV X25519_OID;
+#endif
#define SHARED_KEY_LEN 32
#define PRIV_KEY_LEN 32
@@ -272,10 +282,12 @@
return -4;
}
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
return -5;
}
+#endif
if (mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_OCTET_STRING) != 0) {
return -6;
@@ -311,6 +323,7 @@
hkdf(const uint8_t *ikm, uint16_t ikm_len, const uint8_t *info, uint16_t info_len,
const uint8_t *salt, uint16_t salt_len, uint8_t *okm, uint16_t *okm_len)
{
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
bootutil_hmac_sha256_context hmac;
uint8_t prk[BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE];
uint8_t T[BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE];
@@ -399,6 +412,56 @@
error:
bootutil_hmac_sha256_drop(&hmac);
return -1;
+#else
+ psa_status_t status;
+ psa_key_handle_t key_handle;
+ psa_key_derivation_operation_t operation = psa_key_derivation_operation_init();
+
+ {
+ psa_key_attributes_t key_attributes = psa_key_attributes_init();
+ psa_set_key_usage_flags(&key_attributes, PSA_KEY_USAGE_DERIVE);
+ psa_set_key_algorithm(&key_attributes, PSA_ALG_HKDF(PSA_ALG_SHA_256));
+ psa_set_key_type(&key_attributes, PSA_KEY_TYPE_DERIVE);
+ psa_set_key_bits(&key_attributes, 256u);
+
+ status = psa_import_key(&key_attributes, ikm, ikm_len, &key_handle);
+ }
+
+ if (status == PSA_SUCCESS)
+ {
+ status = psa_key_derivation_setup(&operation, PSA_ALG_HKDF(PSA_ALG_SHA_256));
+ }
+
+ if (status == PSA_SUCCESS)
+ {
+ status = psa_key_derivation_input_bytes(&operation, PSA_KEY_DERIVATION_INPUT_SALT, salt, salt_len);
+ }
+
+ if (status == PSA_SUCCESS)
+ {
+ status = psa_key_derivation_input_key(&operation, PSA_KEY_DERIVATION_INPUT_SECRET, key_handle);
+ }
+
+ if (status == PSA_SUCCESS)
+ {
+ status = psa_key_derivation_input_bytes(&operation, PSA_KEY_DERIVATION_INPUT_INFO, info, info_len);
+ }
+
+ if (status == PSA_SUCCESS)
+ {
+ status = psa_key_derivation_output_bytes(&operation, okm, *okm_len);
+ }
+
+ psa_key_derivation_abort(&operation);
+ psa_destroy_key(key_handle);
+
+ if (status != PSA_SUCCESS)
+ {
+ return -1;
+ }
+
+ return 0;
+#endif
}
#endif
@@ -464,6 +527,7 @@
#if defined(MCUBOOT_ENCRYPT_RSA) || \
(defined(MCUBOOT_ENCRYPT_EC256) && defined(MCUBOOT_USE_MBED_TLS))
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
static int fake_rng(void *p_rng, unsigned char *output, size_t len)
{
size_t i;
@@ -475,10 +539,10 @@
return 0;
}
+#endif /* MCUBOOT_USE_PSA_CRYPTO */
#endif
#endif /* defined(MCUBOOT_ENCRYPT_RSA) ||
defined(MCUBOOT_ENCRYPT_EC256) && defined(MCUBOOT_USE_MBED_TLS) */
-
/*
* Decrypt an encryption key TLV.
*
@@ -818,18 +882,18 @@
}
}
- enc = &enc_state[rc];
- assert(enc->valid == 1);
+ enc = &enc_state[rc];
+ assert(enc->valid == 1);
- nonce = enc->aes_iv;
+ nonce = enc->aes_iv;
- off >>= 4;
- nonce[12] = (uint8_t)(off >> 24);
- nonce[13] = (uint8_t)(off >> 16);
- nonce[14] = (uint8_t)(off >> 8);
- nonce[15] = (uint8_t)off;
+ off >>= 4;
+ nonce[12] = (uint8_t)(off >> 24);
+ nonce[13] = (uint8_t)(off >> 16);
+ nonce[14] = (uint8_t)(off >> 8);
+ nonce[15] = (uint8_t)off;
- return bootutil_aes_ctr_encrypt(&enc->aes_ctr, nonce, buf, sz, blk_off, buf);
+ return bootutil_aes_ctr_encrypt(&enc->aes_ctr, nonce, buf, sz, blk_off, buf);
}
/**
@@ -846,3 +910,9 @@
}
#endif /* MCUBOOT_ENC_IMAGES */
+
+/*
+ * Avoid warning from -pedantic. This is included
+ * because ISO C forbids an empty translation unit.
+ */
+typedef int encrypted_iso_c_forbids_empty_translation_units;
\ No newline at end of file
diff --git a/boot/bootutil/src/fault_injection_hardening.c b/boot/bootutil/src/fault_injection_hardening.c
index 4dcbdd9..1b9397d 100644
--- a/boot/bootutil/src/fault_injection_hardening.c
+++ b/boot/bootutil/src/fault_injection_hardening.c
@@ -7,8 +7,14 @@
#include "bootutil/fault_injection_hardening.h"
+#ifdef FIH_ENABLE_DELAY
+#include "boot_rng.h"
+
+#define FIH_DELAY_MSK 0x3FUL
+#endif /* FIH_ENABLE_DELAY */
+
#ifdef FIH_ENABLE_CFI
-fih_uint fih_cfi_ctr = FIH_UINT_INIT(0u);
+fih_uint fih_cfi_ctr = FIH_UINT_INIT_GLOBAL(0u);
fih_uint fih_cfi_get_and_increment(uint8_t cnt)
{
@@ -21,18 +27,16 @@
fih_cfi_ctr = fih_uint_encode(fih_uint_decode(fih_cfi_ctr) + cnt);
- fih_uint_validate(fih_cfi_ctr);
- fih_uint_validate(saved_ctr);
+ (void)fih_uint_validate(fih_cfi_ctr);
+ (void)fih_uint_validate(saved_ctr);
return saved_ctr;
}
void fih_cfi_validate(fih_uint saved)
{
- volatile int32_t rc = FIH_FALSE;
-
- rc = fih_uint_eq(saved, fih_cfi_ctr);
- if (rc != FIH_TRUE) {
+ if (!fih_uint_eq(saved, fih_cfi_ctr))
+ {
FIH_PANIC;
}
}
@@ -45,7 +49,7 @@
fih_cfi_ctr = fih_uint_encode(fih_uint_decode(fih_cfi_ctr) - 1u);
- fih_uint_validate(fih_cfi_ctr);
+ (void)fih_uint_validate(fih_cfi_ctr);
}
#endif /* FIH_ENABLE_CFI */
@@ -74,15 +78,61 @@
#endif /* FIH_ENABLE_GLOBAL_FAIL */
#ifdef FIH_ENABLE_DELAY
+
+/*******************************************************************************
+ * Function Name: fih_delay_init
+ *******************************************************************************
+ * \brief Initialize assets which are required for random delay generation.
+ *
+ ******************************************************************************/
void fih_delay_init(void)
{
- /* Implement here */
+ if(!boot_rng_init())
+ {
+ FIH_PANIC;
+ }
}
-uint8_t fih_delay_random(void)
+
+/*******************************************************************************
+ * Function Name: fih_delay_random
+ *******************************************************************************
+ * \brief Generate 8-bit random delay number masked with FIH_DELAY_MSK.
+ *
+ * \return 8-bit random delay number masked with FIH_DELAY_MSK.
+ *
+ ******************************************************************************/
+static uint8_t fih_delay_random(void)
{
- /* Implement here */
-
- return 0xFF;
+ return (uint8_t)(boot_rng_random_generate() & FIH_DELAY_MSK);
}
+
+
+/*******************************************************************************
+ * Function Name: fih_delay
+ *******************************************************************************
+ * \brief FIH delay execution.
+ *
+ * \return status of execution. The return value is required by calling macros
+ * like fih_uint_eq(). It always returns true or hang in FIH_PANIC.
+ *
+ ******************************************************************************/
+bool fih_delay(void)
+{
+ volatile uint8_t counter = 0U;
+ uint8_t delay = fih_delay_random();
+
+ for (uint8_t i = 0; i < delay; i++)
+ {
+ counter++;
+ }
+
+ if (counter != delay)
+ {
+ FIH_PANIC;
+ }
+
+ return true;
+}
+
#endif /* FIH_ENABLE_DELAY */
diff --git a/boot/bootutil/src/image_ec256.c b/boot/bootutil/src/image_ec256.c
index e5c0cd6..4d67063 100644
--- a/boot/bootutil/src/image_ec256.c
+++ b/boot/bootutil/src/image_ec256.c
@@ -120,7 +120,7 @@
if (mbedtls_asn1_get_alg(cp, end, &alg, ¶m)) {
return -2;
}
- /* id-ecPublicKey (RFC5480) */
+
if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
return -3;
@@ -130,6 +130,7 @@
memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
return -4;
}
+
/* ECPoint (RFC5480) */
if (mbedtls_asn1_get_bitstring_null(cp, end, &len)) {
return -6;
diff --git a/boot/bootutil/src/image_validate.c b/boot/bootutil/src/image_validate.c
index d4cbade..79dc2fd 100644
--- a/boot/bootutil/src/image_validate.c
+++ b/boot/bootutil/src/image_validate.c
@@ -30,6 +30,7 @@
#include <stdint.h>
#include <inttypes.h>
#include <string.h>
+#include <assert.h>
#include <flash_map_backend/flash_map_backend.h>
@@ -123,7 +124,7 @@
size += hdr->ih_protect_tlv_size;
do
- {
+ {
#if defined(MCUBOOT_RAM_LOAD)
#if defined(MCUBOOT_MULTI_MEMORY_LOAD)
if (IS_RAM_BOOTABLE(hdr) && IS_RAM_BOOT_STAGE())
@@ -229,15 +230,15 @@
/* Complex result masks for bootutil_img_validate() */
#define SET_MASK_IMAGE_TLV_SHA256 ((signed)0x0000002E)
-fih_int FIH_MASK_IMAGE_TLV_SHA256 = FIH_INT_INIT(
+fih_int FIH_MASK_IMAGE_TLV_SHA256 = FIH_INT_INIT_GLOBAL(
SET_MASK_IMAGE_TLV_SHA256);
#define SET_MASK_SIG_TLV_EXPECTED ((signed)0x00007400)
-fih_int FIH_MASK_SIG_TLV_EXPECTED = FIH_INT_INIT(
+fih_int FIH_MASK_SIG_TLV_EXPECTED = FIH_INT_INIT_GLOBAL(
SET_MASK_SIG_TLV_EXPECTED);
#define SET_MASK_IMAGE_TLV_SEC_CNT ((signed)0x005C0000)
-fih_int FIH_MASK_IMAGE_TLV_SEC_CNT = FIH_INT_INIT(
+fih_int FIH_MASK_IMAGE_TLV_SEC_CNT = FIH_INT_INIT_GLOBAL(
SET_MASK_IMAGE_TLV_SEC_CNT);
#define CHK_MASK_IMAGE_TLV_SHA256 SET_MASK_IMAGE_TLV_SHA256
@@ -271,7 +272,7 @@
#define CHK_MASK_IMAGE_TLV_SEC_CNT ((signed)0)
#endif /* MCUBOOT_HW_ROLLBACK_PROT */
-fih_int FIH_IMG_VALIDATE_COMPLEX_OK = FIH_INT_INIT( \
+fih_int FIH_IMG_VALIDATE_COMPLEX_OK = FIH_INT_INIT_GLOBAL( \
CHK_MASK_IMAGE_TLV_SHA256 | \
CHK_MASK_SIG_TLV_EXPECTED | \
CHK_MASK_IMAGE_TLV_SEC_CNT);
@@ -340,7 +341,7 @@
* HW) a fault is injected to accept the public key as valid one.
*/
FIH_CALL(boot_fih_memequal, fih_rc, hash, key_hash, key_hash_size);
- if (FIH_TRUE == fih_eq(fih_rc, FIH_SUCCESS)) {
+ if (fih_eq(fih_rc, FIH_SUCCESS)) {
bootutil_keys[0].key = key;
pub_key_len = key_len;
return 0;
@@ -419,8 +420,7 @@
goto out;
}
- if (FIH_TRUE == fih_uint_eq(fih_uint_encode(img_chk_cnt),
- *img_security_cnt)) {
+ if (fih_uint_eq(fih_uint_encode(img_chk_cnt), *img_security_cnt)) {
if (img_sec_cnt == img_chk_cnt) {
fih_rc = FIH_SUCCESS;
@@ -529,11 +529,11 @@
#ifdef MCUBOOT_HW_ROLLBACK_PROT
fih_uint security_cnt = FIH_UINT_MAX;
uint32_t img_security_cnt = 0;
+#ifdef CYW20829
uint8_t reprov_packet[REPROV_PACK_SIZE];
fih_int security_counter_valid = FIH_FAILURE;
- #ifdef CYW20829
fih_uint extracted_img_cnt = FIH_UINT_MAX;
- #endif /* CYW20829 */
+#endif /* CYW20829 */
#endif /* MCUBOOT_HW_ROLLBACK_PROT */
rc = bootutil_img_hash(enc_state, image_index, hdr, fap, tmp_buf,
@@ -579,7 +579,7 @@
FIH_CALL(boot_fih_memequal, fih_rc, hash, buf, sizeof(hash));
- if (fih_eq(fih_rc, FIH_SUCCESS) == FIH_TRUE) {
+ if (fih_eq(fih_rc, FIH_SUCCESS)) {
/* Encode succesful completion pattern to complex_result */
fih_complex_result = fih_or(fih_complex_result,
FIH_MASK_IMAGE_TLV_SHA256);
@@ -646,7 +646,7 @@
buf, len, key_id);
key_id = -1;
- if (FIH_TRUE == fih_eq(FIH_SUCCESS, valid_signature)) {
+ if (fih_eq(FIH_SUCCESS, valid_signature)) {
/* Encode succesful completion pattern to complex_result */
fih_complex_result = fih_or(fih_complex_result,
FIH_MASK_SIG_TLV_EXPECTED);
@@ -677,7 +677,7 @@
FIH_CALL(boot_nv_security_counter_get, fih_rc, image_index,
&security_cnt);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
rc = -1;
goto out;
}
@@ -690,7 +690,7 @@
FIH_CALL(platform_security_counter_check_extract, fih_rc,
(uint32_t)image_index, fih_uint_encode(img_security_cnt), &extracted_img_cnt);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
/* The image's security counter exceeds registered value for this image */
rc = -1;
goto out;
@@ -704,13 +704,13 @@
/* Compare the new image's security counter value against the
* stored security counter value.
*/
- if (FIH_TRUE == fih_uint_ge(fih_uint_encode(img_security_cnt), security_cnt)) {
+ if (fih_uint_ge(fih_uint_encode(img_security_cnt), security_cnt)) {
/* Encode succesful completion pattern to complex_result */
fih_complex_result = fih_or(fih_complex_result,
FIH_MASK_IMAGE_TLV_SEC_CNT);
#ifdef CYW20829
/* The image's security counter has been successfully verified. */
- security_counter_valid = fih_int_encode(HW_ROLLBACK_CNT_VALID);
+ security_counter_valid = FIH_INT_INIT(HW_ROLLBACK_CNT_VALID);
#endif
} else {
/* The image's security counter is not accepted. */
@@ -721,7 +721,7 @@
#ifdef CYW20829
} else if (type == IMAGE_TLV_PROV_PACK) {
- if (FIH_TRUE == fih_eq(security_counter_valid, fih_int_encode(HW_ROLLBACK_CNT_VALID))) {
+ if (fih_eq(security_counter_valid, FIH_INT_INIT(HW_ROLLBACK_CNT_VALID))) {
/*
* Verify the image reprovisioning packet.
* This must always be present.
@@ -752,7 +752,7 @@
#ifdef MCUBOOT_HW_ROLLBACK_PROT
#ifdef CYW20829
- if (fih_eq(security_counter_valid, fih_int_encode(REPROV_PACK_VALID | HW_ROLLBACK_CNT_VALID)) != FIH_TRUE) {
+ if (!fih_eq(security_counter_valid, FIH_INT_INIT(REPROV_PACK_VALID | HW_ROLLBACK_CNT_VALID))) {
BOOT_LOG_DBG("Reprovisioning packet TLV 0x51 is not present image = %d", image_index);
rc = -1;
goto out;
diff --git a/boot/bootutil/src/loader.c b/boot/bootutil/src/loader.c
index 8ede0f1..ba5350e 100644
--- a/boot/bootutil/src/loader.c
+++ b/boot/bootutil/src/loader.c
@@ -49,7 +49,10 @@
#ifdef MCUBOOT_ENC_IMAGES
#include "bootutil/enc_key.h"
-#endif
+#ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
+#include "xip_encryption.h"
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+#endif /* MCUBOOT_ENC_IMAGES */
#if (!defined(MCUBOOT_DIRECT_XIP) && !defined(MCUBOOT_RAM_LOAD)) || defined(MCUBOOT_MULTI_MEMORY_LOAD)
#include <os/os_malloc.h>
@@ -91,7 +94,7 @@
#define BUF_SZ 1024U
#endif
-static fih_int FIH_SWAP_TYPE_NONE = FIH_INT_INIT(0x3A5C742E);
+static fih_int FIH_SWAP_TYPE_NONE = FIH_INT_INIT_GLOBAL(0x3A5C742E);
static int
boot_read_image_headers(struct boot_loader_state *state, bool require_all,
@@ -141,13 +144,16 @@
int rc;
#ifdef MCUBOOT_MEASURED_BOOT
- rc = boot_save_boot_status(BOOT_CURR_IMG(state),
+ rc = boot_save_boot_status(GET_SW_MODULE_ID(BOOT_CURR_IMG(state)),
boot_img_hdr(state, active_slot),
BOOT_IMG_AREA(state, active_slot));
if (rc != 0) {
BOOT_LOG_ERR("Failed to add image data to shared area");
return rc;
}
+ else {
+ BOOT_LOG_INF("Successfully added image data to shared area");
+ }
#endif /* MCUBOOT_MEASURED_BOOT */
#ifdef MCUBOOT_DATA_SHARING
@@ -567,9 +573,13 @@
if (0 == rc && boot_enc_set_key(BOOT_CURR_ENC(state), slot, bs)) {
FIH_RET(fih_rc);
}
+#ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
+ ifx_epb_set_xip_crypto_params((uint32_t *)bs->enckey[slot],
+ (uint32_t *)BOOT_CURR_ENC(state)[slot].aes_iv);
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
}
}
-#endif
+#endif /* MCUBOOT_ENC_IMAGES */
#ifdef USE_IFX_SE_CRYPTO
FIH_UCALL(bootutil_psa_img_validate, fih_complex_result, \
@@ -581,8 +591,7 @@
fih_uint_decode(IFX_FIH_IMG_VALIDATE_COMPLEX_OK), \
fih_uint_decode(fih_complex_result));
- if (FIH_TRUE == fih_uint_eq(fih_complex_result,
- IFX_FIH_IMG_VALIDATE_COMPLEX_OK)) {
+ if (fih_uint_eq(fih_complex_result, IFX_FIH_IMG_VALIDATE_COMPLEX_OK)) {
fih_rc = fih_int_encode_zero_equality(
fih_uint_decode(IFX_FIH_IMG_VALIDATE_COMPLEX_OK) &
~fih_uint_decode(fih_complex_result));
@@ -598,8 +607,7 @@
fih_int_decode(FIH_IMG_VALIDATE_COMPLEX_OK), \
fih_int_decode(fih_complex_result));
- if (FIH_TRUE == fih_eq(fih_complex_result,
- FIH_IMG_VALIDATE_COMPLEX_OK)) {
+ if (fih_eq(fih_complex_result, FIH_IMG_VALIDATE_COMPLEX_OK)) {
fih_rc = fih_int_encode_zero_equality(
fih_int_decode(FIH_IMG_VALIDATE_COMPLEX_OK) &
~fih_int_decode(fih_complex_result));
@@ -619,9 +627,10 @@
struct image_header *loader_hdr,
const struct flash_area *loader_fap)
{
+ fih_int fih_rc = FIH_FAILURE;
+#if !defined USE_IFX_SE_CRYPTO
static void *tmpbuf;
uint8_t loader_hash[32];
- fih_int fih_rc = FIH_FAILURE;
if (!tmpbuf) {
tmpbuf = malloc(BOOT_TMPBUF_SZ);
@@ -632,12 +641,22 @@
FIH_CALL(bootutil_img_validate, fih_rc, NULL, 0, loader_hdr, loader_fap,
tmpbuf, BOOT_TMPBUF_SZ, NULL, 0, loader_hash);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
FIH_RET(fih_rc);
}
FIH_CALL(bootutil_img_validate, fih_rc, NULL, 0, app_hdr, app_fap,
tmpbuf, BOOT_TMPBUF_SZ, loader_hash, 32, NULL);
+#else
+ /* Not implemented for USE_IFX_SE_CRYPTO
+ The code below is just to avoid warnings
+ */
+ (void)app_hdr;
+ (void)app_fap;
+ (void)loader_hdr;
+ (void)loader_fap;
+ goto out;
+#endif
out:
FIH_RET(fih_rc);
@@ -711,9 +730,8 @@
return 0;
}
-#if (BOOT_IMAGE_NUMBER > 1) || \
+#if (BOOT_IMAGE_NUMBER > 1 && defined(MCUBOOT_DEPENDENCY_CHECK)) || \
defined(MCUBOOT_DIRECT_XIP) || \
- defined(MCUBOOT_RAM_LOAD) || \
(defined(MCUBOOT_OVERWRITE_ONLY) && defined(MCUBOOT_DOWNGRADE_PREVENTION))
/**
* Compare image version numbers not including the build number
@@ -820,6 +838,17 @@
hdr = boot_img_hdr(state, slot);
+#ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
+/* In the XIP encryption multi image case if XIP encryption is turned on then
+ * the boot_check_header_erased() can't detect erased header correctly for the second and next images
+ * because erased value is not read as 0xFF.
+ * So, the bootloader has one option only to detect correctness of image header: it is
+ * to check header magic */
+ if (hdr->ih_magic != IMAGE_MAGIC) {
+ FIH_RET(fih_rc);
+ }
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+
if (boot_check_header_erased(state, slot) == 0 ||
(hdr->ih_flags & IMAGE_F_NON_BOOTABLE)) {
@@ -864,13 +893,13 @@
}
}
#endif
- BOOT_HOOK_CALL_FIH(boot_image_check_hook, fih_int_encode(BOOT_HOOK_REGULAR),
+ BOOT_HOOK_CALL_FIH(boot_image_check_hook, FIH_INT_INIT(BOOT_HOOK_REGULAR),
fih_rc, BOOT_CURR_IMG(state), slot);
- if (FIH_TRUE == fih_eq(fih_rc, fih_int_encode(BOOT_HOOK_REGULAR)))
+ if (fih_eq(fih_rc, FIH_INT_INIT(BOOT_HOOK_REGULAR)))
{
FIH_CALL(boot_image_check, fih_rc, state, hdr, fap, bs);
}
- if (!boot_is_header_valid(hdr, fap) || fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!boot_is_header_valid(hdr, fap) || !fih_eq(fih_rc, FIH_SUCCESS)) {
if ((slot != BOOT_PRIMARY_SLOT) || ARE_SLOTS_EQUIVALENT()) {
BOOT_LOG_DBG(" * Image in the secondary slot is invalid. Erase the image");
flash_area_erase(fap, 0, flash_area_get_size(fap));
@@ -900,7 +929,7 @@
rc = flash_area_read(fap, reset_addr, &reset_value, sizeof(reset_value));
if (rc != 0) {
- fih_rc = fih_int_encode(1);
+ fih_rc = FIH_INT_INIT(1);
goto out;
}
@@ -915,7 +944,7 @@
* Erase the image and continue booting from the primary slot.
*/
flash_area_erase(fap, 0, fap->fa_size);
- fih_rc = fih_int_encode(1);
+ fih_rc = FIH_INT_INIT(1);
goto out;
}
}
@@ -963,7 +992,7 @@
rc = -1;
FIH_CALL(bootutil_get_img_security_cnt, fih_rc, hdr, fap, &img_security_cnt);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
goto done;
}
else
@@ -982,7 +1011,7 @@
#ifdef USE_IFX_SE_CRYPTO
fih_uint img_security_check = FIH_UINT_ZERO;
FIH_CALL(boot_nv_security_counter_get, fih_rc, image_index, &img_security_check);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
goto done;
}
else
@@ -1020,8 +1049,8 @@
* Ensure image is valid.
*/
FIH_CALL(boot_validate_slot, fih_rc, state, BOOT_SECONDARY_SLOT, bs);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
- if (FIH_TRUE == fih_eq(fih_rc, FIH_SWAP_TYPE_NONE)) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
+ if (fih_eq(fih_rc, FIH_SWAP_TYPE_NONE)) {
swap_type = BOOT_SWAP_TYPE_NONE;
} else {
swap_type = BOOT_SWAP_TYPE_FAIL;
@@ -1071,7 +1100,8 @@
uint32_t bytes_copied;
int chunk_sz;
int rc;
-#if defined (MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_ENC_IMAGES_XIP)
+#if (defined (MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_ENC_IMAGES_XIP)) || \
+ (defined (MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_ENC_IMAGES_XIP) && defined(MCUBOOT_ENC_IMAGES_XIP_MULTI))
uint32_t off;
uint32_t tlv_off;
size_t blk_off;
@@ -1079,7 +1109,8 @@
uint16_t idx;
uint32_t blk_sz;
uint8_t image_index;
-#endif
+#endif /* (defined (MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_ENC_IMAGES_XIP)) || \
+ (defined (MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_ENC_IMAGES_XIP) && defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)) */
/* NOTE:
* Default value 1024 is not suitable for platforms with larger erase size.
@@ -1111,7 +1142,8 @@
return BOOT_EFLASH;
}
-#if defined(MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_ENC_IMAGES_XIP)
+#if (defined (MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_ENC_IMAGES_XIP)) || \
+ (defined (MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_ENC_IMAGES_XIP) && defined(MCUBOOT_ENC_IMAGES_XIP_MULTI))
image_index = BOOT_CURR_IMG(state);
if ((flash_area_get_id(fap_src) == FLASH_AREA_IMAGE_PRIMARY(image_index) ||
flash_area_get_id(fap_dst) == FLASH_AREA_IMAGE_PRIMARY(image_index)) &&
@@ -1166,18 +1198,41 @@
blk_sz = tlv_off - abs_off;
}
}
+#ifndef MCUBOOT_ENC_IMAGES_XIP_MULTI
rc = boot_encrypt(BOOT_CURR_ENC(state), image_index, fap_src,
(abs_off + idx) - hdr->ih_hdr_size, blk_sz,
blk_off, &buf[idx]);
+#else /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+ rc = boot_encrypt_xip(fap_src, fap_dst,
+ (abs_off + idx), blk_sz, &buf[idx]);
+#endif
if (rc != 0) {
return rc;
}
}
+#ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
+ rc = flash_area_write(fap_dst, off_dst + bytes_copied, buf, chunk_sz);
+ }
+ else {
+ (void)blk_off;
+ rc = boot_encrypt_xip(fap_src, fap_dst,
+ off_dst + bytes_copied,
+ chunk_sz, buf);
+
+ rc = flash_area_write(fap_dst, off_dst + bytes_copied, buf, chunk_sz);
+ SMIF_SET_CRYPTO_MODE(Enable);
}
}
-#endif
-
+#else
+ }
+ }
rc = flash_area_write(fap_dst, off_dst + bytes_copied, buf, chunk_sz);
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+#else
+ rc = flash_area_write(fap_dst, off_dst + bytes_copied, buf, chunk_sz);
+#endif /* (defined (MCUBOOT_ENC_IMAGES) && !defined(MCUBOOT_ENC_IMAGES_XIP)) || \
+ (defined (MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_ENC_IMAGES_XIP) && defined(MCUBOOT_ENC_IMAGES_XIP_MULTI)) */
+
if (rc != 0) {
return BOOT_EFLASH;
}
@@ -1466,6 +1521,10 @@
assert(rc == 0);
}
}
+#if defined(MCUBOOT_SAVE_ENC_IV)
+ rc = boot_read_iv(image_index, 1, state->enc[image_index][1].aes_iv);
+ assert(rc == 0);
+#endif
#endif
}
@@ -1484,6 +1543,7 @@
#endif
#if (BOOT_IMAGE_NUMBER > 1)
+#if defined(MCUBOOT_DEPENDENCY_CHECK)
/**
* Check the image dependency whether it is satisfied and modify
* the swap type if necessary.
@@ -1509,6 +1569,7 @@
rc = boot_version_cmp(dep_version, &dep->image_min_version);
if (rc < 0) {
+#ifndef MCUBOOT_OVERWRITE_ONLY
/* Dependency not satisfied.
* Modify the swap type to decrease the version number of the image
* (which will be located in the primary slot after the boot process),
@@ -1518,14 +1579,20 @@
switch (BOOT_SWAP_TYPE(state)) {
case BOOT_SWAP_TYPE_TEST:
case BOOT_SWAP_TYPE_PERM:
- BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_NONE;
+ /* BOOT_SWAP_TYPE_NONE has been changed to BOOT_SWAP_TYPE_FAIL to avoid
+ * reversion again after device reset */
+ BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_FAIL;
break;
case BOOT_SWAP_TYPE_NONE:
+ BOOT_LOG_DBG("Dependency is unsatisfied. Slot will be reverted.");
BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_REVERT;
break;
default:
break;
}
+#else
+ BOOT_LOG_DBG("Dependency is unsatisfied.");
+#endif
} else {
/* Dependency satisfied. */
rc = 0;
@@ -1646,7 +1713,13 @@
*/
for (int idx = 0; idx < BOOT_IMAGE_NUMBER; idx++) {
BOOT_CURR_IMG(state) = idx;
- BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_NONE;
+ /*When dependency is not satisfied, the boot_verify_slot_dependencies_flash
+ changes swap type to BOOT_SWAP_TYPE_REVERT to have ability of reversion of a
+ dependent image. That's why BOOT_SWAP_TYPE_REVERT must not be changed to
+ BOOT_SWAP_TYPE_NONE */
+ if (BOOT_SWAP_TYPE(state) != BOOT_SWAP_TYPE_REVERT) {
+ BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_NONE;
+ }
}
break;
#endif /* (USE_SHARED_SLOT == 1) */
@@ -1654,6 +1727,7 @@
}
return rc;
}
+#endif /* (MCUBOOT_DEPENDENCY_CHECK) */
#endif /* (BOOT_IMAGE_NUMBER > 1) */
/**
@@ -1690,7 +1764,7 @@
fih_rc = FIH_SUCCESS;
#endif
- if (rc == 0 || fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (rc == 0 || !fih_eq(fih_rc, FIH_SUCCESS)) {
/* Initialize swap status partition for primary slot, because
* in swap mode it is needed to properly complete copying the image
* to the primary slot.
@@ -2045,7 +2119,7 @@
} else {
FIH_CALL(boot_validate_slot, fih_rc,
state, BOOT_SECONDARY_SLOT, bs);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
BOOT_SWAP_TYPE(state) = BOOT_SWAP_TYPE_FAIL;
} else {
BOOT_SWAP_TYPE(state) = bs->swap_type;
@@ -2071,13 +2145,13 @@
#else
fih_rc = FIH_SUCCESS;
#endif
- if (rc == 0 || fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (rc == 0 || !fih_eq(fih_rc, FIH_SUCCESS)) {
rc = (boot_img_hdr(state, BOOT_SECONDARY_SLOT)->ih_magic == IMAGE_MAGIC) ? 1: 0;
FIH_CALL(boot_validate_slot, fih_rc,
state, BOOT_SECONDARY_SLOT, bs);
- if (rc == 1 && FIH_TRUE == fih_eq(fih_rc, FIH_SUCCESS)) {
+ if (rc == 1 && fih_eq(fih_rc, FIH_SUCCESS)) {
/* Set swap type to REVERT to overwrite the primary
* slot with the image contained in secondary slot
* and to trigger the explicit setting of the
@@ -2149,7 +2223,6 @@
fih_int fih_rc = FIH_FAILURE;
int fa_id;
int image_index;
- bool has_upgrade;
/* The array of slot sectors are defined here (as opposed to file scope) so
* that they don't get allocated for non-boot-loader apps. This is
@@ -2165,22 +2238,18 @@
TARGET_STATIC boot_sector_t status_sectors[BOOT_MAX_SWAP_STATUS_SECTORS];
#endif
- has_upgrade = false;
-
-#if (BOOT_IMAGE_NUMBER == 1)
- (void)has_upgrade;
-#endif
-
/* Iterate over all the images. By the end of the loop the swap type has
* to be determined for each image and all aborted swaps have to be
* completed.
*/
IMAGES_ITER(BOOT_CURR_IMG(state)) {
+#if !defined(MCUBOOT_DEPENDENCY_CHECK)
#if BOOT_IMAGE_NUMBER > 1
if (state->img_mask[BOOT_CURR_IMG(state)]) {
continue;
}
#endif
+#endif
#if defined(MCUBOOT_ENC_IMAGES) && (BOOT_IMAGE_NUMBER > 1)
/* The keys used for encryption may no longer be valid (could belong to
* another images). Therefore, mark them as invalid to force their reload
@@ -2220,13 +2289,10 @@
/* Determine swap type and complete swap if it has been aborted. */
boot_prepare_image_for_update(state, &bs);
- if (BOOT_IS_UPGRADE(BOOT_SWAP_TYPE(state))) {
- has_upgrade = true;
- }
}
#if (BOOT_IMAGE_NUMBER > 1)
- if (has_upgrade) {
+#if defined(MCUBOOT_DEPENDENCY_CHECK)
/* Iterate over all the images and verify whether the image dependencies
* are all satisfied and update swap type if necessary.
*/
@@ -2240,8 +2306,8 @@
*/
rc = 0;
}
- }
-#endif
+#endif /* (MCUBOOT_DEPENDENCY_CHECK) */
+#endif /* (BOOT_IMAGE_NUMBER > 1) */
/* Iterate over all the images. At this point there are no aborted swaps
* and the swap types are determined for each image. By the end of the loop
@@ -2347,7 +2413,7 @@
if(IS_RAM_BOOTABLE(boot_img_hdr(state, BOOT_PRIMARY_SLOT)) == false) {
#endif /* defined(MCUBOOT_RAM_LOAD) */
FIH_CALL(boot_validate_slot, fih_rc, state, BOOT_PRIMARY_SLOT, &bs);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
goto out;
}
#if defined(MCUBOOT_RAM_LOAD) /* to fix Rule 14.3 violation */
@@ -2386,9 +2452,11 @@
goto out;
}
- rc = boot_add_shared_data(state, BOOT_PRIMARY_SLOT);
- if (rc != 0) {
- goto out;
+ if(IS_RAM_BOOTABLE(boot_img_hdr(state, BOOT_PRIMARY_SLOT)) == false) {
+ rc = boot_add_shared_data(state, BOOT_PRIMARY_SLOT);
+ if (rc != 0) {
+ goto out;
+ }
}
}
@@ -2413,6 +2481,10 @@
out:
close_all_flash_areas(state);
+#ifdef MCUBOOT_ENC_IMAGES_XIP_MULTI
+ SMIF_SET_CRYPTO_MODE(Enable);
+#endif /* MCUBOOT_ENC_IMAGES_XIP_MULTI */
+
if (rc) {
fih_rc = fih_int_encode(rc);
}
@@ -2471,7 +2543,7 @@
BOOT_IMG_AREA(&boot_data, split_slot),
boot_img_hdr(&boot_data, loader_slot),
BOOT_IMG_AREA(&boot_data, loader_slot));
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
goto done;
}
@@ -2511,11 +2583,13 @@
struct image_header *hdr = NULL;
IMAGES_ITER(BOOT_CURR_IMG(state)) {
+#if !defined(MCUBOOT_DEPENDENCY_CHECK)
#if BOOT_IMAGE_NUMBER > 1
if (state->img_mask[BOOT_CURR_IMG(state)]) {
continue;
}
#endif
+#endif
/* Open all the slots */
for (slot = 0; slot < BOOT_NUM_SLOTS; slot++) {
fa_id = flash_area_id_from_multi_image_slot(
@@ -2555,13 +2629,16 @@
/**
* Finds the slot containing the image with the highest version number for the
- * current image.
+ * current image. Also dependency check feature verifies version of the first
+ * slot of dependent image and assumes to load from the first slot. In order to
+ * avoid conflicts dependency ckeck feature is disabled.
*
* @param state Boot loader status information.
*
* @return NO_ACTIVE_SLOT if no available slot found, number of
* the found slot otherwise.
*/
+#if !defined(MCUBOOT_DEPENDENCY_CHECK) && !defined(MCUBOOT_RAM_LOAD)
static uint32_t
find_slot_with_highest_version(struct boot_loader_state *state)
{
@@ -2589,6 +2666,7 @@
return candidate_slot;
}
+#endif /* !defined(MCUBOOT_DEPENDENCY_CHECK) && !defined(MCUBOOT_RAM_LOAD) */
#ifdef MCUBOOT_HAVE_LOGGING
/**
@@ -2979,7 +3057,7 @@
uint32_t active_slot;
struct image_header *hdr = NULL;
uint32_t img_dst;
- uint32_t img_sz;
+ uint32_t img_sz = 0;
int rc = 0;
active_slot = state->slot_usage[BOOT_CURR_IMG(state)].active_slot;
@@ -3099,6 +3177,7 @@
#endif /* MCUBOOT_RAM_LOAD */
#if (BOOT_IMAGE_NUMBER > 1)
+#if defined(MCUBOOT_DEPENDENCY_CHECK)
/**
* Checks the image dependency whether it is satisfied.
*
@@ -3241,6 +3320,7 @@
return rc;
}
+#endif /* (MCUBOOT_DEPENDENCY_CHECK) */
#endif /* (BOOT_IMAGE_NUMBER > 1) */
/**
@@ -3271,8 +3351,25 @@
/* A slot is already active, go to next image. */
break;
}
+
+ /* Ram load assumes to find the highest version of available slots
+ * and load it. Also dependency check feature verifies version
+ * of first slot of dependent image and assumes to load from the
+ * first slot. So logic is separated into two cases to avoid conflicts,
+ * where the first is when dependency check is disabled,
+ * and the second is when it is enabled.
+ * Notation: to avoid situations when reverted image with higher version is
+ * ram-loaded, the current logic is changed to loading 'BOOT_PRIMARY_SLOT'
+ * on a constant basis.
+ * */
+#if !defined(MCUBOOT_DEPENDENCY_CHECK) && !defined(MCUBOOT_RAM_LOAD)
+ /* Go over all slots and find the highest version. */
active_slot = find_slot_with_highest_version(state);
+#else
+ /* Dependecy check feature assumes to load from the first slot */
+ active_slot = BOOT_PRIMARY_SLOT;
+#endif
if (active_slot == NO_ACTIVE_SLOT) {
BOOT_LOG_INF("No slot to load for image %u",
(unsigned)BOOT_CURR_IMG(state));
@@ -3320,19 +3417,27 @@
boot_remove_image_from_flash(state, active_slot);
state->slot_usage[BOOT_CURR_IMG(state)].slot_available[active_slot] = false;
state->slot_usage[BOOT_CURR_IMG(state)].active_slot = NO_ACTIVE_SLOT;
- continue;
+ /* Since active_slot is set BOOT_PRIMARY_SLOT only, then after its deletion
+ * no sense to check BOOT_SECONDARY_SLOT. So go outside with an error */
+ BOOT_LOG_ERR("BOOT slot of image %u has been removed from flash",
+ (unsigned)BOOT_CURR_IMG(state));
+ FIH_RET(FIH_FAILURE);
}
#endif /* MCUBOOT_RAM_LOAD */
#ifdef MCUBOOT_VALIDATE_PRIMARY_SLOT
FIH_CALL(boot_validate_slot, fih_rc, state, active_slot, NULL);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
/* Image is invalid. */
#ifdef MCUBOOT_RAM_LOAD
boot_remove_image_from_sram(state);
#endif /* MCUBOOT_RAM_LOAD */
state->slot_usage[BOOT_CURR_IMG(state)].slot_available[active_slot] = false;
state->slot_usage[BOOT_CURR_IMG(state)].active_slot = NO_ACTIVE_SLOT;
- continue;
+ /* Since active_slot is set BOOT_PRIMARY_SLOT only, then after its deletion
+ * no sense to check BOOT_SECONDARY_SLOT. So go outside with an error */
+ BOOT_LOG_ERR("BOOT slot of image %u has been removed from SRAM",
+ (unsigned)BOOT_CURR_IMG(state));
+ FIH_RET(FIH_FAILURE);
}
#endif
/* Valid image loaded from a slot, go to next image. */
@@ -3404,23 +3509,24 @@
while (true) {
#endif
FIH_CALL(boot_load_and_validate_images, fih_rc, state);
- if (fih_eq(fih_rc, FIH_SUCCESS) != FIH_TRUE) {
+ if (!fih_eq(fih_rc, FIH_SUCCESS)) {
goto out;
}
#if (BOOT_IMAGE_NUMBER > 1)
+#if defined(MCUBOOT_DEPENDENCY_CHECK)
rc = boot_verify_dependencies_ram(state);
if (rc != 0) {
/* Dependency check failed for an image, it has been removed from
* SRAM in case of MCUBOOT_RAM_LOAD strategy, and set to
- * unavailable. Try to load an image from another slot.
- */
- continue;
+ * unavailable. */
+ goto out;
}
/* Dependency check was successful. */
+#endif /* defined(MCUBOOT_DEPENDENCY_CHECK) */
break;
}
-#endif
+#endif /* (BOOT_IMAGE_NUMBER > 1) */
IMAGES_ITER(BOOT_CURR_IMG(state)) {
#if BOOT_IMAGE_NUMBER > 1
@@ -3449,7 +3555,7 @@
out:
close_all_flash_areas(state);
- if (FIH_TRUE == fih_eq(fih_rc, FIH_SUCCESS)) {
+ if (fih_eq(fih_rc, FIH_SUCCESS)) {
fih_rc = fih_int_encode_zero_equality(rc);
}
diff --git a/boot/bootutil/src/swap_scratch.c b/boot/bootutil/src/swap_scratch.c
index 17d0255..8b55d2a 100644
--- a/boot/bootutil/src/swap_scratch.c
+++ b/boot/bootutil/src/swap_scratch.c
@@ -685,6 +685,11 @@
img_off, 0, copy_sz);
assert(rc == 0);
+#if defined(MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_SAVE_ENC_IV)
+ rc = boot_write_iv(fap_primary_slot, state->enc[image_index][1].aes_iv);
+ assert(rc == 0);
+#endif
+
rc = boot_write_status(state, bs);
bs->state = BOOT_STATUS_STATE_1;
BOOT_STATUS_ASSERT(rc == 0);
@@ -706,6 +711,11 @@
assert(rc == 0);
}
+#if defined(MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_SAVE_ENC_IV)
+ rc = boot_write_iv(fap_primary_slot, state->enc[image_index][1].aes_iv);
+ assert(rc == 0);
+#endif
+
rc = boot_write_status(state, bs);
bs->state = BOOT_STATUS_STATE_2;
BOOT_STATUS_ASSERT(rc == 0);
@@ -767,6 +777,11 @@
erase_scratch = bs->use_scratch;
bs->use_scratch = 0;
+#if defined(MCUBOOT_ENC_IMAGES) && defined(MCUBOOT_SAVE_ENC_IV)
+ rc = boot_write_iv(fap_primary_slot, state->enc[image_index][1].aes_iv);
+ assert(rc == 0);
+#endif
+
rc = boot_write_status(state, bs);
bs->idx++;
bs->state = BOOT_STATUS_STATE_0;
diff --git a/boot/bootutil/src/swap_status_misc.c b/boot/bootutil/src/swap_status_misc.c
index bc44feb..2794a6f 100644
--- a/boot/bootutil/src/swap_status_misc.c
+++ b/boot/bootutil/src/swap_status_misc.c
@@ -140,17 +140,23 @@
*
* @returns 0 on success, -1 on error.
*/
-int
-boot_write_trailer(const struct flash_area *fap, uint32_t off,
- const uint8_t *inbuf, uint8_t inlen)
+int boot_write_trailer(const struct flash_area *fap, uint32_t off,
+ const uint8_t *inbuf, uint8_t inlen)
{
int rc;
- /* copy status part trailer to primary image before set copy_done flag */
- if (boot_copy_done_off(fap) == off &&
- fap->fa_id == FLASH_AREA_IMAGE_PRIMARY(0u) &&
- BOOT_SWAP_STATUS_COPY_DONE_SZ == inlen) {
+ bool is_primary = false;
+ for (uint32_t i = 0u; i < BOOT_IMAGE_NUMBER; i++) {
+ if (fap->fa_id == FLASH_AREA_IMAGE_PRIMARY(i)) {
+ is_primary = true;
+ break;
+ }
+ }
+
+ /* copy status part trailer to primary image before set copy_done flag */
+ if (boot_copy_done_off(fap) == off && is_primary &&
+ BOOT_SWAP_STATUS_COPY_DONE_SZ == inlen) {
BOOT_LOG_DBG("copy status part trailer to primary image slot");
rc = swap_status_to_image_trailer(fap);
if (rc != 0) {
@@ -168,6 +174,43 @@
}
#ifdef MCUBOOT_ENC_IMAGES
+uint32_t boot_iv_offset(const struct flash_area *fap, uint8_t slot)
+{
+ (void)(slot);
+
+ return boot_enc_key_off(fap, 0) - 32;
+}
+
+int
+boot_read_iv(int image_index, uint8_t slot, uint8_t* dst)
+{
+ uint32_t off;
+ const struct flash_area *fap;
+ int rc;
+
+ rc = boot_find_status(image_index, &fap);
+
+ if (0 == rc) {
+ off = boot_iv_offset(fap, slot);
+
+ rc = swap_status_retrieve(fap->fa_id, off, dst, BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE);
+ }
+
+ return rc;
+}
+
+int
+boot_write_iv(const struct flash_area *fap, uint8_t* iv)
+{
+ int rc;
+ uint32_t off = boot_iv_offset(fap, 0);
+
+ rc = swap_status_update(fap->fa_id, off,
+ iv, BOOTUTIL_CRYPTO_AES_CTR_BLOCK_SIZE);
+
+ return rc;
+}
+
int
boot_write_enc_key(const struct flash_area *fap, uint8_t slot,
const struct boot_status *bs)
@@ -249,9 +292,9 @@
int
boot_clear_magic(const struct flash_area *fap)
{
- uint32_t off;
- int rc;
- uint8_t tmp[BOOT_MAGIC_SZ];
+ uint32_t off = 0;
+ int rc = -1;
+ uint8_t tmp[BOOT_MAGIC_SZ] = {0};
off = fap->fa_size - BOOT_MAGIC_SZ;
@@ -324,110 +367,6 @@
return rc;
}
-#if defined (MCUBOOT_SWAP_STATUS_FAST_BOOT)
-static inline int
-boot_read_flag(const struct flash_area *fap, uint8_t *flag, uint32_t off)
-{
- int rc;
-
- do {
- rc = flash_area_read(fap, off, flag, sizeof *flag);
-
- if (rc != 0) {
- break;
- }
-
- if (*flag == flash_area_erased_val(fap)) {
- *flag = BOOT_FLAG_UNSET;
- } else {
- *flag = boot_flag_decode(*flag);
- }
-
- } while (false);
-
- return rc;
-}
-
-static inline uint32_t
-boot_magic_off_trailer(const struct flash_area *fap)
-{
- return flash_area_get_size(fap) - BOOT_MAGIC_SZ;
-}
-
-static inline uint32_t
-boot_image_ok_off_trailer(const struct flash_area *fap)
-{
- return ALIGN_DOWN(boot_magic_off_trailer(fap) - BOOT_MAX_ALIGN, BOOT_MAX_ALIGN);
-}
-
-static inline uint32_t
-boot_copy_done_off_trailer(const struct flash_area *fap)
-{
- return boot_image_ok_off_trailer(fap) - BOOT_MAX_ALIGN;
-}
-
-static inline uint32_t
-boot_swap_info_off_trailer(const struct flash_area *fap)
-{
- return boot_copy_done_off_trailer(fap) - BOOT_MAX_ALIGN;
-}
-
-int
-boot_read_swap_state_trailer(const struct flash_area *fap,
- struct boot_swap_state *state)
-{
- union boot_img_magic_t magic = {0U};
- uint32_t off;
- uint8_t swap_info;
- int rc;
-
- do {
- off = boot_magic_off_trailer(fap);
- rc = flash_area_read(fap, off, &magic, BOOT_MAGIC_SZ);
-
- if (rc != 0) {
- break;
- }
-
- if (bootutil_buffer_is_erased(fap, &magic, BOOT_MAGIC_SZ)) {
- state->magic = BOOT_MAGIC_UNSET;
- } else {
- state->magic = boot_magic_decode(&magic);
- }
-
- off = boot_swap_info_off_trailer(fap);
- rc = flash_area_read(fap, off, &swap_info, sizeof swap_info);
-
- if (rc != 0) {
- break;
- }
-
- /* Extract the swap type and image number */
- state->swap_type = BOOT_GET_SWAP_TYPE(swap_info);
- state->image_num = BOOT_GET_IMAGE_NUM(swap_info);
-
- if (swap_info == flash_area_erased_val(fap) ||
- state->swap_type > BOOT_SWAP_TYPE_REVERT) {
- state->swap_type = BOOT_SWAP_TYPE_NONE;
- state->image_num = 0;
- }
-
- off = boot_copy_done_off_trailer(fap);
- rc = boot_read_flag(fap, &state->copy_done, off);
-
- if (rc != 0) {
- break;
- }
-
- off = boot_image_ok_off_trailer(fap);
- rc = boot_read_flag(fap, &state->image_ok, off);
-
- } while (false);
-
- return rc;
-}
-#endif
-
int
boot_read_swap_state(const struct flash_area *fap,
struct boot_swap_state *state)
@@ -445,36 +384,6 @@
const struct flash_area *fap_stat = NULL;
- for (i = 0u; i < (uint32_t)BOOT_IMAGE_NUMBER; i++) {
- if (fap->fa_id == FLASH_AREA_IMAGE_PRIMARY(i)) {
- is_primary = true;
- break;
- }
- if (fap->fa_id == FLASH_AREA_IMAGE_SECONDARY(i)) {
- is_secondary = true;
- break;
- }
- }
-
-#if defined(MCUBOOT_SWAP_STATUS_FAST_BOOT)
- {
- bool is_scratch = fap->fa_id == FLASH_AREA_IMAGE_SCRATCH;
- boot_read_swap_state_trailer(fap, state);
-
- if (is_primary) {
- if (state->image_ok == BOOT_FLAG_SET && state->copy_done == BOOT_FLAG_SET && state->magic == BOOT_MAGIC_GOOD) {
- return 0;
- }
- }
-
- if (is_secondary || is_scratch) {
- if (state->image_ok == BOOT_FLAG_UNSET && state->copy_done == BOOT_FLAG_UNSET && state->magic == BOOT_MAGIC_UNSET) {
- return 0;
- }
- }
- }
-#endif
-
rc = flash_area_open(FLASH_AREA_IMAGE_SWAP_STATUS, &fap_stat);
if (rc != 0) {
return -1;
@@ -487,6 +396,17 @@
return -1;
}
+ for (i = 0u; i < (uint32_t)BOOT_IMAGE_NUMBER; i++) {
+ if (fap->fa_id == FLASH_AREA_IMAGE_PRIMARY(i)) {
+ is_primary = true;
+ break;
+ }
+ if (fap->fa_id == FLASH_AREA_IMAGE_SECONDARY(i)) {
+ is_secondary = true;
+ break;
+ }
+ }
+
/* fill magic number value if equal to expected */
if (bootutil_buffer_is_erased(fap_stat, &magic, BOOT_MAGIC_SZ)) {
state->magic = BOOT_MAGIC_UNSET;
diff --git a/boot/bootutil/src/swap_status_part.c b/boot/bootutil/src/swap_status_part.c
index 9fb7420..6498787 100644
--- a/boot/bootutil/src/swap_status_part.c
+++ b/boot/bootutil/src/swap_status_part.c
@@ -152,46 +152,49 @@
if (rc != 0) {
return -1;
}
- else {
- /* loop over copies/duplicates */
- for (uint32_t i = 0; i < BOOT_SWAP_STATUS_MULT; i++) {
- /* calculate final duplicate offset */
- fin_offset = rec_offset + i * BOOT_SWAP_STATUS_D_SIZE;
+ /* loop over copies/duplicates */
+ for (uint32_t i = 0; i < BOOT_SWAP_STATUS_MULT; i++) {
+ /* calculate final duplicate offset */
+ fin_offset = rec_offset + i * BOOT_SWAP_STATUS_D_SIZE;
+
+ rc = flash_area_read(fap_stat, fin_offset + BOOT_SWAP_STATUS_PAYLD_SZ, &magic, sizeof(magic));
+ if (rc != 0) {
+ return -1;
+ }
+
+ if (magic == BOOT_SWAP_STATUS_MAGIC) {
rc = flash_area_read(fap_stat, fin_offset, record_buff, sizeof(record_buff));
if (rc != 0) {
return -1;
}
- else {
- /* read magic value to know if area was pre-erased */
- magic = pack_bytes_u32(&record_buff[BOOT_SWAP_STATUS_PAYLD_SZ]);
- if (magic == BOOT_SWAP_STATUS_MAGIC) { /* read CRC */
- crc = pack_bytes_u32(&record_buff[BOOT_SWAP_STATUS_ROW_SZ -
- BOOT_SWAP_STATUS_CRC_SZ]);
- /* check record data integrity first */
- if (crc == calc_record_crc(record_buff, BOOT_SWAP_STATUS_ROW_SZ-BOOT_SWAP_STATUS_CRC_SZ)) {
- /* look for counter */
- counter = pack_bytes_u32(&record_buff[BOOT_SWAP_STATUS_ROW_SZ -
- BOOT_SWAP_STATUS_CNT_SZ -
- BOOT_SWAP_STATUS_CRC_SZ]);
- /* find out counter max */
- if (counter >= max_cnt) {
- max_cnt = counter;
- *max_idx = i;
- data_offset = fin_offset;
- }
- }
- /* if crc != calculated() */
- else {
- crc_fail++;
- }
- }
- else {
- magic_fail++;
+
+ crc = pack_bytes_u32(&record_buff[BOOT_SWAP_STATUS_ROW_SZ -
+ BOOT_SWAP_STATUS_CRC_SZ]);
+ /* check record data integrity first */
+ if (crc == calc_record_crc(record_buff, BOOT_SWAP_STATUS_ROW_SZ - BOOT_SWAP_STATUS_CRC_SZ)) {
+ /* look for counter */
+ counter = pack_bytes_u32(&record_buff[BOOT_SWAP_STATUS_ROW_SZ -
+ BOOT_SWAP_STATUS_CNT_SZ -
+ BOOT_SWAP_STATUS_CRC_SZ]);
+ /* find out counter max */
+ if (counter >= max_cnt) {
+ max_cnt = counter;
+ *max_idx = i;
+ data_offset = fin_offset;
}
}
+ /* if crc != calculated() */
+ else {
+ (void) flash_area_erase(fap_stat, fin_offset, sizeof(record_buff));
+ crc_fail++;
+ }
+
+ } else {
+ magic_fail++;
}
}
+
/* no magic found - status area is pre-erased, start from scratch */
if (magic_fail == BOOT_SWAP_STATUS_MULT) {
/* emulate last index was received, so next will start from beginning */
@@ -228,10 +231,11 @@
{ /* it receives explicitly BOOT_SWAP_STATUS_PAYLD_SZ of data */
int rc = -1;
- uint32_t fin_offset;
+ uint32_t fin_offset, fin_offset_prev;
/* increment counter field */
uint32_t next_counter = copy_counter + 1U;
uint32_t next_crc;
+ uint32_t copy_num_prev;
const struct flash_area *fap_stat = NULL;
@@ -260,12 +264,15 @@
/* we already know what copy number was last and correct */
/* increment duplicate index */
/* calculate final duplicate offset */
+ copy_num_prev = copy_num;
+
if (copy_num == (BOOT_SWAP_STATUS_MULT - 1U)) {
copy_num = 0;
}
else {
copy_num++;
}
+ fin_offset_prev = rec_offset + copy_num_prev*BOOT_SWAP_STATUS_D_SIZE;
fin_offset = rec_offset + copy_num*BOOT_SWAP_STATUS_D_SIZE;
/* erase obsolete status record before write */
@@ -276,6 +283,11 @@
/* write prepared record into flash */
rc = flash_area_write(fap_stat, fin_offset, record_buff, sizeof(record_buff));
+ if (rc != 0) {
+ return -1;
+ }
+
+ rc = flash_area_erase(fap_stat, fin_offset_prev, sizeof(record_buff));
flash_area_close(fap_stat);
diff --git a/boot/cypress/BlinkyApp/BlinkyApp.mk b/boot/cypress/BlinkyApp/BlinkyApp.mk
index 5936e07..735989b 100644
--- a/boot/cypress/BlinkyApp/BlinkyApp.mk
+++ b/boot/cypress/BlinkyApp/BlinkyApp.mk
@@ -46,9 +46,9 @@
# TODO: optimize here and in MCUBootApp.mk
# Output folder
ifeq ($(IMG_ID), 1)
- OUT ?= $(APP_NAME)/out
+ OUT ?= $(APP_NAME)/out
else
- OUT ?= $(APP_NAME)/out.id$(IMG_ID)
+ OUT ?= $(APP_NAME)/out.id$(IMG_ID)
endif
# Output folder to contain build artifacts
@@ -58,14 +58,14 @@
# Set build directory for BOOT and UPGRADE images
ifeq ($(IMG_TYPE), UPGRADE)
- OUT_CFG := $(OUT_CFG)/upgrade
+ OUT_CFG := $(OUT_CFG)/upgrade
else
- OUT_CFG := $(OUT_CFG)/boot
+ OUT_CFG := $(OUT_CFG)/boot
endif
# Set parameters needed for signing
ifeq ($(IMG_TYPE), UPGRADE)
- UPGRADE_SUFFIX :=_upgrade
+ UPGRADE_SUFFIX :=_upgrade
endif
include $(PRJ_DIR)/platforms.mk
@@ -74,25 +74,25 @@
ifeq ($(FAMILY), CYW20829)
$(CUR_APP_PATH)/memorymap.mk:
$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -c $(PRJ_DIR)/policy/policy_secure.json -d $(IMG_ID) -c $(PRJ_DIR)/policy/policy_reprovisioning_secure.json > $(CUR_APP_PATH)/memorymap.mk
-else ifeq ($(FAMILY), XMC7000)
-$(CUR_APP_PATH)/memorymap.mk:
- $(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap -d $(IMG_ID) > $(CUR_APP_PATH)/memorymap.mk
-else
+else ifeq ($(FAMILY), PSOC6)
$(CUR_APP_PATH)/memorymap.mk:
$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -d $(IMG_ID) > $(CUR_APP_PATH)/memorymap.mk
+else
+$(CUR_APP_PATH)/memorymap.mk:
+ $(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap -d $(IMG_ID) > $(CUR_APP_PATH)/memorymap.mk
endif
-DEFINES_APP += -DCY_FLASH_MAP_JSON
+ DEFINES += -DCY_FLASH_MAP_JSON
endif
include $(PRJ_DIR)/common_libs.mk
#Blinky Release XIP mode workaround
ifneq ($(FAMILY), CYW20829)
-ifeq ($(BUILDCFG), Release)
-ifeq ($(USE_EXTERNAL_FLASH), 1)
-CFLAGS_OPTIMIZATION := -Og -g3
-endif
-endif
+ ifeq ($(BUILDCFG), Release)
+ ifeq ($(USE_EXTERNAL_FLASH), 1)
+ CFLAGS_OPTIMIZATION := -Og -g3
+ endif
+ endif
endif
include $(PRJ_DIR)/toolchains.mk
@@ -100,22 +100,22 @@
# use USE_OVERWRITE = 1 for overwrite only mode
# use USE_OVERWRITE = 0 for swap upgrade mode
ifeq ($(USE_OVERWRITE), )
-USE_OVERWRITE ?= $(PLATFORM_DEFAULT_USE_OVERWRITE)
+ USE_OVERWRITE ?= $(PLATFORM_DEFAULT_USE_OVERWRITE)
endif
# possible values are 0 and 0xff
# internal Flash by default
ifeq ($(ERASED_VALUE), )
-ERASED_VALUE ?= $(PLATFORM_DEFAULT_ERASED_VALUE)
+ ERASED_VALUE ?= $(PLATFORM_DEFAULT_ERASED_VALUE)
endif
# Application-specific DEFINES
ifeq ($(IMG_TYPE), BOOT)
- DEFINES_APP := -DBOOT_IMAGE
- ENC_IMG := 0
+ DEFINES += -DBOOT_IMAGE
+ ENC_IMG := 0
else
- DEFINES_APP := -DUPGRADE_IMAGE
- DEFINES_APP += -DSWAP_DISABLED=$(USE_OVERWRITE)
+ DEFINES += -DUPGRADE_IMAGE
+ DEFINES += -DSWAP_DISABLED=$(USE_OVERWRITE)
endif
# Inherit platform default values for application start
@@ -126,231 +126,153 @@
USER_APP_START ?= $(PLATFORM_USER_APP_START)
ifeq ($(USER_APP_RAM_START), )
-USER_APP_RAM_START ?= $(PLATFORM_DEFAULT_RAM_START)
-endif
-ifeq ($(USER_APP_RAM_SIZE), )
-USER_APP_RAM_SIZE ?= $(PLATFORM_DEFAULT_RAM_SIZE)
+ USER_APP_RAM_START ?= $(PLATFORM_DEFAULT_RAM_START)
endif
-DEFINES_APP += -DMCUBOOT_IMAGE_NUMBER=$(MCUBOOT_IMAGE_NUMBER)
-DEFINES_APP += -DUSER_APP_RAM_START=$(USER_APP_RAM_START)
-DEFINES_APP += -DUSER_APP_RAM_SIZE=$(USER_APP_RAM_SIZE)
-DEFINES_APP += -DUSER_APP_START=$(USER_APP_START)
-DEFINES_APP += -DPRIMARY_IMG_START=$(PRIMARY_IMG_START)
-DEFINES_APP += -DUSER_APP_SIZE=$(SLOT_SIZE)
-DEFINES_APP += -DAPP_$(APP_CORE)
-DEFINES_APP += -DBOOT_$(APP_CORE)
-DEFINES_APP += -DAPP_CORE_ID=$(APP_CORE_ID)
-DEFINES_APP += $(PLATFORM_DEFINES_APP)
-DEFINES_APP += -DMEMORY_ALIGN=$(PLATFORM_MEMORY_ALIGN)
-DEFINES_APP += -DPLATFORM_MAX_TRAILER_PAGE_SIZE=$(PLATFORM_MAX_TRAILER_PAGE_SIZE)
+ifeq ($(USER_APP_RAM_SIZE), )
+ USER_APP_RAM_SIZE ?= $(PLATFORM_DEFAULT_RAM_SIZE)
+endif
+
+DEFINES += -DMCUBOOT_IMAGE_NUMBER=$(MCUBOOT_IMAGE_NUMBER)
+DEFINES += -DUSER_APP_RAM_START=$(USER_APP_RAM_START)
+DEFINES += -DUSER_APP_RAM_SIZE=$(USER_APP_RAM_SIZE)
+DEFINES += -DUSER_APP_START=$(USER_APP_START)
+DEFINES += -DPRIMARY_IMG_START=$(PRIMARY_IMG_START)
+DEFINES += -DUSER_APP_SIZE=$(SLOT_SIZE)
+DEFINES += -DAPP_$(APP_CORE)
+DEFINES += -DBOOT_$(APP_CORE)
+
+ifneq ($(APP_CORE_ID),)
+ DEFINES += -DAPP_CORE_ID=$(APP_CORE_ID)
+endif
+
+DEFINES += -DMEMORY_ALIGN=$(PLATFORM_MEMORY_ALIGN)
+DEFINES += -DPLATFORM_MAX_TRAILER_PAGE_SIZE=$(PLATFORM_MAX_TRAILER_PAGE_SIZE)
#Use default led if no command line parameter added
ifeq ($(LED_PORT), )
-DEFINES_APP += -DLED_PORT=$(LED_PORT_DEFAULT)
+ DEFINES += -DLED_PORT=$(LED_PORT_DEFAULT)
else
-DEFINES_APP += -DLED_PORT=GPIO_PRT$(LED_PORT)
+ DEFINES += -DLED_PORT=GPIO_PRT$(LED_PORT)
endif
ifeq ($(LED_PIN), )
-DEFINES_APP += -DLED_PIN=$(LED_PIN_DEFAULT)
+ DEFINES += -DLED_PIN=$(LED_PIN_DEFAULT)
else
-DEFINES_APP += -DLED_PIN=$(LED_PIN)
+ DEFINES += -DLED_PIN=$(LED_PIN)
endif
#Use default UART if no command line parameter added
ifeq ($(UART_TX), )
-DEFINES_APP += -DCY_DEBUG_UART_TX=$(UART_TX_DEFAULT)
+ DEFINES += -DCY_DEBUG_UART_TX=$(UART_TX_DEFAULT)
else
-DEFINES_APP += -DCY_DEBUG_UART_TX=$(UART_TX)
+ DEFINES += -DCY_DEBUG_UART_TX=$(UART_TX)
endif
ifeq ($(UART_RX), )
-DEFINES_APP += -DCY_DEBUG_UART_RX=$(UART_RX_DEFAULT)
+ DEFINES += -DCY_DEBUG_UART_RX=$(UART_RX_DEFAULT)
else
-DEFINES_APP += -DCY_DEBUG_UART_RX=$(UART_RX)
+ DEFINES += -DCY_DEBUG_UART_RX=$(UART_RX)
endif
ifeq ($(USE_EXTERNAL_FLASH), 1)
-ifeq ($(USE_XIP), 1)
-DEFINES_APP += -DUSE_XIP
-LD_SUFFIX = _xip
-endif
-DEFINES_APP += -DCY_BOOT_USE_EXTERNAL_FLASH
+ ifeq ($(USE_XIP), 1)
+ DEFINES += -DUSE_XIP
+ LD_SUFFIX = _xip
+ endif
+ DEFINES += -DCY_BOOT_USE_EXTERNAL_FLASH
endif
# Add version metadata to image
ifneq ($(IMG_VER), )
-IMG_VER_ARG = -v "$(IMG_VER)"
-DEFINES_APP += -DIMG_VER_MSG=\"$(IMG_VER)\"
+ IMG_VER_ARG = -v "$(IMG_VER)"
+ DEFINES += -DIMG_VER_MSG=\"$(IMG_VER)\"
else
-IMG_VER_ARG = -v "$(PLATFORM_DEFAULT_IMG_VER_ARG)"
-DEFINES_APP += -DIMG_VER_MSG=\"$(PLATFORM_DEFAULT_IMG_VER_ARG)\"
-$(info WARNING - setting platform default version number, to set custom value - pass IMG_VER=x.x.x argument to make command)
+ IMG_VER_ARG = -v "$(PLATFORM_DEFAULT_IMG_VER_ARG)"
+ DEFINES += -DIMG_VER_MSG=\"$(PLATFORM_DEFAULT_IMG_VER_ARG)\"
+ $(info WARNING - setting platform default version number, to set custom value - pass IMG_VER=x.x.x argument to make command)
endif
# Add dependencies metadata to image
ifneq ($(IMG_DEPS_ID), )
-ifneq ($(IMG_DEPS_VER), )
-IMG_DEPS_ARG = -d "($(IMG_DEPS_ID), $(IMG_DEPS_VER))"
-endif
+ ifneq ($(IMG_DEPS_VER), )
+ IMG_DEPS_ARG = -d "($(IMG_DEPS_ID), $(IMG_DEPS_VER))"
+ endif
endif
# Collect Test Application sources
-SOURCES_APP_SRC := $(wildcard $(CUR_APP_PATH)/*.c)
-SOURCES_APP_SRC += $(PLATFORM_APP_SOURCES)
+C_FILES += $(wildcard $(CUR_APP_PATH)/*.c)
# Set offset for secondary image
ifeq ($(IMG_TYPE), UPGRADE)
-HEADER_OFFSET := $(SECONDARY_IMG_START)
+ HEADER_OFFSET := $(SECONDARY_IMG_START)
else
-HEADER_OFFSET := $(PRIMARY_IMG_START)
+ HEADER_OFFSET := $(PRIMARY_IMG_START)
endif
# Collect all the sources
-SOURCES_APP += $(SOURCES_APP_SRC)
-SOURCES_APP += $(PLATFORM_SOURCES_FLASH)
+
# Collect includes for BlinkyApp
-INCLUDE_DIRS_APP := $(addprefix -I, $(CURDIR))
-INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH))
-INCLUDE_DIRS_APP += $(addprefix -I, $(PLATFORM_INCLUDE_DIRS_FLASH))
-INCLUDE_DIRS_APP += $(addprefix -I, $(PLATFORM_INCLUDE_DIRS_UTILS))
+INCLUDE_DIRS += $(CURDIR)
+INCLUDE_DIRS += $(CUR_APP_PATH)
# ++++
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)/MCUBootApp/config)
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)/MCUBootApp)
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)/../bootutil/include)
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)/../bootutil/src)
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)/../bootutil/include/bootutil)
+INCLUDE_DIRS += $(PRJ_DIR)/MCUBootApp/config
+INCLUDE_DIRS += $(PRJ_DIR)/MCUBootApp
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/include
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/src
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/include/bootutil
# +++
# Include confirmation flag setting (img_ok) implementation
ifeq ($(IMG_TYPE), UPGRADE)
-ifeq ($(USE_OVERWRITE), 0)
-SOURCES_APP_SRC += $(PRJ_DIR)/platforms/img_confirm/$(FAMILY)/set_img_ok.c
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)/platforms/img_confirm)
-endif
+ ifeq ($(USE_OVERWRITE), 0)
+ C_FILES += $(PRJ_DIR)/platforms/img_confirm/$(FAMILY)/set_img_ok.c
+ INCLUDE_DIRS += $(PRJ_DIR)/platforms/img_confirm
+ endif
endif
# Overwite path to linker script if custom is required, otherwise default from BSP is used
LINKER_SCRIPT := $(CUR_APP_PATH)/linker/$(APP_NAME).ld
-ASM_FILES_APP :=
-ASM_FILES_APP += $(ASM_FILES_STARTUP)
-
# add flag to imgtool if not using swap for upgrade
ifeq ($(USE_OVERWRITE), 1)
-UPGRADE_TYPE := --overwrite-only
-DEFINES_APP += -DMCUBOOT_OVERWRITE_ONLY
+ UPGRADE_TYPE := --overwrite-only
+ DEFINES += -DMCUBOOT_OVERWRITE_ONLY
endif
ifeq ($(BOOT_RECORD_SW_TYPE), )
- ifeq ($(IMG_TYPE), BOOT)
- BOOT_RECORD_IMG_TYPE_STR = B_Blinky$(IMG_ID)
- else
- BOOT_RECORD_IMG_TYPE_STR = U_Blinky$(IMG_ID)
- endif
- BOOT_RECORD := --boot-record $(BOOT_RECORD_IMG_TYPE_STR)
+ ifeq ($(IMG_TYPE), BOOT)
+ BOOT_RECORD_IMG_TYPE_STR = B_Blinky$(IMG_ID)
+ else
+ BOOT_RECORD_IMG_TYPE_STR = U_Blinky$(IMG_ID)
+ endif
+ BOOT_RECORD := --boot-record $(BOOT_RECORD_IMG_TYPE_STR)
else
- BOOT_RECORD := --boot-record $(BOOT_RECORD_SW_TYPE)
+ BOOT_RECORD := --boot-record $(BOOT_RECORD_SW_TYPE)
endif
SIGN_ARGS := $(PLATFORM_SIGN_ARGS) $(IMG_VER_ARG) $(IMG_DEPS_ARG)
# Include full public key to signed image TLV insted of its hash
ifeq ($(USE_HW_KEY), 1)
-SIGN_ARGS += --public-key-format
+ SIGN_ARGS += --public-key-format
endif
# Set parameters needed for signing
ifeq ($(IMG_TYPE), UPGRADE)
- # Set img_ok flag to trigger swap type permanent
- ifeq ($(CONFIRM), 1)
- SIGN_ARGS += --confirm
- endif
- SIGN_ARGS += --pad
+ # Set img_ok flag to trigger swap type permanent
+ ifeq ($(CONFIRM), 1)
+ SIGN_ARGS += --confirm
+ endif
+ SIGN_ARGS += --pad
endif
$(info $(SIGN_ARGS))
# Disble wdt free hal call
ifneq ($(DISABLE_WDT_FREE), 0)
-DEFINES_APP += -DDISABLE_WDT_FREE
-endif
-
-pre_build:
- $(info [PRE_BUILD] - Generating linker script for application $(CUR_APP_PATH)/linker/$(APP_NAME).ld)
- @$(CC) -E -x c $(CFLAGS) $(INCLUDE_DIRS) $(CUR_APP_PATH)/linker/$(APP_NAME)_$(CORE)_template$(LD_SUFFIX).ld | grep -v '^#' >$(CUR_APP_PATH)/linker/$(APP_NAME).ld
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### BlinkyApp.mk ####)
-$(info APP_CORE <-- $(APP_CORE))
-$(info APP_NAME <-- $(APP_NAME))
-$(info ASM_FILES_APP --> $(ASM_FILES_APP))
-$(info ASM_FILES_STARTUP <-- $(ASM_FILES_STARTUP))
-$(info BOOT_RECORD --> $(BOOT_RECORD))
-$(info BOOT_RECORD_IMG_TYPE_STR <-- $(BOOT_RECORD_IMG_TYPE_STR))
-$(info BOOT_RECORD_SW_TYPE <-- $(BOOT_RECORD_SW_TYPE))
-$(info BUILDCFG <-- $(BUILDCFG))
-$(info COMPILER <-> $(COMPILER))
-$(info CONFIRM <-- $(CONFIRM))
-$(info CURDIR <-- $(CURDIR))
-$(info CUR_APP_PATH <-- $(CUR_APP_PATH))
-$(info DEFINES_APP --> $(DEFINES_APP))
-$(info DISABLE_WDT_FREE <-- $(DISABLE_WDT_FREE))
-$(info ENC_IMG --> $(ENC_IMG))
-$(info ERASED_VALUE <-> $(ERASED_VALUE))
-$(info FAMILY <-- $(FAMILY))
-$(info FLASH_MAP <-- $(FLASH_MAP))
-$(info HEADER_OFFSET --> $(HEADER_OFFSET))
-$(info IMG_DEPS_ARG <-- $(IMG_DEPS_ARG))
-$(info IMG_DEPS_ID <-- $(IMG_DEPS_ID))
-$(info IMG_DEPS_VER <-- $(IMG_DEPS_VER))
-$(info IMG_ID <-> $(IMG_ID))
-$(info IMG_TYPE <-> $(IMG_TYPE))
-$(info IMG_VER <-- $(IMG_VER))
-$(info IMG_VER_ARG <-- $(IMG_VER_ARG))
-$(info INCLUDE_DIRS_APP --> $(INCLUDE_DIRS_APP))
-$(info LED_PIN <-- $(LED_PIN))
-$(info LED_PIN_DEFAULT <-- $(LED_PIN_DEFAULT))
-$(info LED_PORT <-- $(LED_PORT))
-$(info LED_PORT_DEFAULT <-- $(LED_PORT_DEFAULT))
-$(info LINKER_SCRIPT --> $(LINKER_SCRIPT))
-$(info OUT <-> $(OUT))
-$(info OUT_CFG <-> $(OUT_CFG))
-$(info OUT_TARGET <-> $(OUT_TARGET))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PLATFORM_DEFAULT_ERASED_VALUE <-- $(PLATFORM_DEFAULT_ERASED_VALUE))
-$(info PLATFORM_DEFAULT_IMG_VER_ARG <-- $(PLATFORM_DEFAULT_IMG_VER_ARG))
-$(info PLATFORM_DEFAULT_RAM_SIZE <-- $(PLATFORM_DEFAULT_RAM_SIZE))
-$(info PLATFORM_DEFAULT_RAM_START <-- $(PLATFORM_DEFAULT_RAM_START))
-$(info PLATFORM_DEFAULT_USE_OVERWRITE <-- $(PLATFORM_DEFAULT_USE_OVERWRITE))
-$(info PLATFORM_DEFINES_APP <-- $(PLATFORM_DEFINES_APP))
-$(info PLATFORM_INCLUDE_DIRS_FLASH <-- $(PLATFORM_INCLUDE_DIRS_FLASH))
-$(info PLATFORM_SIGN_ARGS <-- $(PLATFORM_SIGN_ARGS))
-$(info PLATFORM_SOURCES_FLASH <-- $(PLATFORM_SOURCES_FLASH))
-$(info PLATFORM_USER_APP_START <-- $(PLATFORM_USER_APP_START))
-$(info PRIMARY_IMG_START <-- $(PRIMARY_IMG_START))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info PYTHON_PATH <-- $(PYTHON_PATH))
-$(info SECONDARY_IMG_START <-- $(SECONDARY_IMG_START))
-$(info SIGN_ARGS <-> $(SIGN_ARGS))
-$(info SLOT_SIZE <-- $(SLOT_SIZE))
-$(info SOURCES_APP --> $(SOURCES_APP))
-$(info SOURCES_APP_SRC <-> $(SOURCES_APP_SRC))
-$(info UART_RX <-- $(UART_RX))
-$(info UART_RX_DEFAULT <-- $(UART_RX_DEFAULT))
-$(info UART_TX <-- $(UART_TX))
-$(info UART_TX_DEFAULT <-- $(UART_TX_DEFAULT))
-$(info UPGRADE_SUFFIX --> $(UPGRADE_SUFFIX))
-$(info UPGRADE_TYPE --> $(UPGRADE_TYPE))
-$(info USER_APP_RAM_SIZE <-> $(USER_APP_RAM_SIZE))
-$(info USER_APP_RAM_START <-> $(USER_APP_RAM_START))
-$(info USER_APP_START <-> $(USER_APP_START))
-$(info USE_OVERWRITE <-> $(USE_OVERWRITE))
-$(info USE_XIP <-- $(USE_XIP))
+ DEFINES += -DDISABLE_WDT_FREE
endif
diff --git a/boot/cypress/BlinkyApp/Readme.md b/boot/cypress/BlinkyApp/Readme.md
new file mode 100644
index 0000000..08de778
--- /dev/null
+++ b/boot/cypress/BlinkyApp/Readme.md
@@ -0,0 +1,165 @@
+### Blinking LED test application for MCUboot bootloader
+
+### Description
+
+Implements simple Blinky LED CM4 application to demonstrate MCUboot Application operation in terms of BOOT and UPGRADE process.
+
+It is started by MCUboot Application which is running on CM0p.
+
+Functionality:
+
+* Blinks RED led with 2 different rates, depending on type of image - BOOT or UPGRADE.
+* Prints debug info and version of itself to terminal at 115200 baud.
+* Can be built for BOOT slot or UPGRADE slot of bootloader.
+
+Currently supported platforms
+
+* PSOC_062_2M
+* PSOC_062_1M
+* PSOC_062_512K
+
+### Hardware limitations
+
+Since this application is created to demonstrate MCUboot library features and not as reference examples some considerations are taken.
+
+1. Port/pin `P5_0` and `P5_1` used to configure serial port for debug prints. These pins are the most commonly used for serial port connection among available Cypress PSoC 6 kits. If you try to use custom hardware with this application - change definitions of `CY_DEBUG_UART_TX` and `CY_DEBUG_UART_RX` in `main.c` of BlinkyApp to port/pin pairs corresponding to your design.
+2. Port `GPIO_PRT13` pin `7U` used to define user connection LED. This pin is the most commonly used for USER_LED connection among available Cypress PSoC 6 kits. If you try to use custom hardware with this application - change definitions of `LED_PORT` and `LED_PIN` in `main.c` of BlinkyApp to port/pin pairs corresponding to your design.
+
+### Pre-build action
+
+Pre-build action is implemented for defining start address and size of flash, as well as RAM start address and size for BlinkyApp.
+These values are set by specifying following macros: `-DUSER_APP_SIZE`, `-DUSER_APP_START`, `-DRAM_SIZE`, `-DRAM_START` in makefile.
+
+Pre-build action calls GCC preprocessor which instantiates defines for particular values in `BlinkyApp_template.ld`.
+
+Default values set for currently supported targets:
+* `BlinkyApp.mk` to `-DUSER_APP_START=0x10018000`
+
+**Important**: make sure RAM areas of CM4-based BlinkyApp and CM0p-based MCUBootApp bootloader do not overlap.
+Memory (stack) corruption of CM0p application can cause failure if SystemCall-served operations invoked from CM4.
+
+### Building an application
+
+Root directory for build is **boot/cypress.**
+
+The following command will build regular HEX file of a BlinkyApp for BOOT slot. Substitute `PLATFORM=` to a platform name you use in all following commands.
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT
+
+This have following defaults suggested:
+
+ BUILDCFG=Debug
+ IMG_TYPE=BOOT
+
+To build UPGRADE image use following command:
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x10000
+
+ Note: HEADER_OFFSET=%SLOT_SIZE%
+
+Example command-line for single-image:
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT
+
+**Building Multi-Image**
+
+`BlinkyApp` can be built to use in multi-image bootloader configuration.
+
+To get appropriate artifacts to use with multi image MCUBootApp, makefile flag `HEADER_OFFSET=` can be used.
+
+Example usage:
+
+Considering default config:
+
+* first image BOOT (PRIMARY) slot start `0x10018000`
+* slot size `0x10000`
+* second image BOOT (PRIMARY) slot start `0x10038000`
+
+To get appropriate artifact for second image PRIMARY slot run this command:
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=BOOT HEADER_OFFSET=0x20000
+
+*Note:* only 2 images are supported at the moment.
+
+**How to build upgrade image for external memory:**
+
+To prepare MCUBootApp for work with external memory please refer to `MCUBootApp/ExternalMemory.md`.
+
+For build BlinkyApp upgrade image for external memory use command:
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x7FE8000 ERASED_VALUE=0xff
+
+`HEADER_OFFSET` defines the offset from original boot image address. This one in line above suggests secondary slot will start from `0x18000000`.
+
+`ERASED_VALUE` defines the memory cell contents in erased state. It is `0x00` for PSoC6's internal Flash and `0xff` for S25FL512S.
+
+In case of using muti-image configuration, upgrade image for second application can be built using next command:
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x8028000 ERASED_VALUE=0xff
+
+ Note: for S25FL512S block address should be multiple by 0x40000
+
+**How to build encrypted upgrade image :**
+
+To prepare MCUBootApp for work with encrypted upgrade image please refer to `MCUBootApp/Readme.md`.
+
+To obtain encrypted upgrade image of BlinkyApp extra flag `ENC_IMG=1` should be passed in command line, for example:
+
+ make app APP_NAME=BlinkyApp PLATFORM=PSOC_062_2M IMG_TYPE=UPGRADE HEADER_OFFSET=0x20000 ENC_IMG=1
+
+This also suggests user already placed corresponding `*.pem` key in `\keys` folder. The key variables are defined in root `Makefile` as `SIGN_KEY_FILE` and `ENC_KEY_FILE`
+
+### Post-build
+
+Post build action is executed at compile time for `BlinkyApp`. In case of build for `PSOC_062_2M` platform it calls `imgtool` from `MCUboot` scripts and adds signature to compiled image.
+
+Flags passed to `imgtool` for signature are defined in `SIGN_ARGS` variable in BlinkyApp.mk.
+
+### How to program an application
+
+Use any preferred tool for programming hex files.
+
+Hex file names to use for programming:
+
+`BlinkyApp` always produce build artifacts in 2 separate folders - `boot` and `upgrade`.
+
+`BlinkyApp` built to run with `MCUBootApp` produces files with name BlinkyApp.hex in `boot` directory and `BlinkyApp_upgrade.hex` in `upgrade` folder. These files are ready to be flashed to the board.
+
+`BlinkyApp_unsigned.hex` hex file is also preserved in both cases for possible troubleshooting.
+
+Files to use for programming are:
+
+`BOOT` - boot/BlinkyApp.hex
+`UPGRADE` - upgrade/BlinkyApp_upgrade.hex
+
+**Flags:**
+- `BUILDCFG` - configuration **Release** or **Debug**
+- `MAKEINFO` - 0 (default) - less build info, 1 - verbose output of compilation.
+- `HEADER_OFFSET` - 0 (default) - no offset of output hex file, 0x%VALUE% - offset for output hex file. Value 0x10000 is slot size MCUboot Bootloader in this example.
+- `IMG_TYPE` - `BOOT` (default) - build image for BOOT slot of MCUboot Bootloader, `UPGRADE` - build image for UPGRADE slot of MCUboot Bootloader.
+- `ENC_IMG` - 0 (default) - build regular upgrade image, `1` - build encrypted upgrade image (MCUBootApp should also be built with this flash set 1)
+
+**NOTE**: In case of `UPGRADE` image `HEADER_OFFSET` should be set to MCUboot Bootloader slot size.
+
+### Example terminal output
+
+When user application programmed in BOOT slot:
+
+ ===========================
+ [BlinkyApp] BlinkyApp v1.0 [CM4]
+ ===========================
+ [BlinkyApp] GPIO initialized
+ [BlinkyApp] UART initialized
+ [BlinkyApp] Retarget I/O set to 115200 baudrate
+ [BlinkyApp] Red led blinks with 1 sec period
+
+When user application programmed in UPRADE slot and upgrade procedure was successful:
+
+ ===========================
+ [BlinkyApp] BlinkyApp v2.0 [+]
+ ===========================
+
+ [BlinkyApp] GPIO initialized
+ [BlinkyApp] UART initialized
+ [BlinkyApp] Retarget I/O set to 115200 baudrate
+ [BlinkyApp] Red led blinks with 0.25 sec period
diff --git a/boot/cypress/BlinkyApp/libs.mk b/boot/cypress/BlinkyApp/libs.mk
index bd5caef..54bc8d8 100644
--- a/boot/cypress/BlinkyApp/libs.mk
+++ b/boot/cypress/BlinkyApp/libs.mk
@@ -26,39 +26,8 @@
################################################################################
# PDL library
################################################################################
-PDL_VERSION = 121
-#
CUR_LIBS_PATH = $(PRJ_DIR)/libs
-SOURCES_WATCHDOG := $(wildcard $(CUR_LIBS_PATH)/watchdog/*.c)
+C_FILES += $(wildcard $(CUR_LIBS_PATH)/watchdog/*.c)
-INCLUDE_DIRS_WATCHDOG := $(CUR_LIBS_PATH)/watchdog
-
-# Collected source files for libraries
-SOURCES_LIBS += $(SOURCES_WATCHDOG)
-SOURCES_LIBS += $(SOURCES_FIH)
-
-
-# Collected include directories for libraries
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_WATCHDOG))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_FIH))
-
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### libs.mk ####)
-$(info APP_CORE <-- $(APP_CORE))
-$(info CUR_LIBS_PATH <-- $(CUR_LIBS_PATH))
-$(info INCLUDE_DIRS_HAL_BLINKY <-> $(INCLUDE_DIRS_HAL_BLINKY))
-$(info INCLUDE_DIRS_LIBS --> $(INCLUDE_DIRS_LIBS))
-$(info INCLUDE_DIRS_RETARGET_IO <-> $(INCLUDE_DIRS_RETARGET_IO))
-$(info INCLUDE_DIRS_WATCHDOG <-> $(INCLUDE_DIRS_WATCHDOG))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info SOURCES_HAL_BLINKY <-> $(SOURCES_HAL_BLINKY))
-$(info SOURCES_LIBS --> $(SOURCES_LIBS))
-$(info SOURCES_RETARGET_IO <-> $(SOURCES_RETARGET_IO))
-$(info SOURCES_WATCHDOG <-> $(SOURCES_WATCHDOG))
-$(info THIS_APP_PATH <-- $(THIS_APP_PATH))
-endif
+INCLUDE_DIRS += $(CUR_LIBS_PATH)/watchdog
diff --git a/boot/cypress/BlinkyApp/main.c b/boot/cypress/BlinkyApp/main.c
index 444f858..22abb36 100644
--- a/boot/cypress/BlinkyApp/main.c
+++ b/boot/cypress/BlinkyApp/main.c
@@ -59,7 +59,12 @@
#if !defined(DISABLE_WDT_FREE)
/* Disable watchdog timer to mark successful start up of application. The default BlikyApp flow */
+#if defined(USE_WDT_PDL)
+ Cy_WDT_Unlock();
+ Cy_WDT_Disable();
+#else
cyhal_wdt_free(NULL);
+#endif
printf(WATCHDOG_FREE_MESSAGE);
#endif /* !(DISABLE_WDT_FREE) */
diff --git a/boot/cypress/BlinkyApp/platform.h b/boot/cypress/BlinkyApp/platform.h
index f7e8122..b2a0a50 100644
--- a/boot/cypress/BlinkyApp/platform.h
+++ b/boot/cypress/BlinkyApp/platform.h
@@ -10,6 +10,7 @@
#include "cycfg.h"
#include "cyhal.h"
#include "cyhal_wdt.h"
+#include "cy_wdt.h"
#if defined(CY_BOOT_USE_EXTERNAL_FLASH) || defined(CYW20829)
#include "flash_qspi.h"
@@ -130,7 +131,11 @@
printf("[BlinkyApp] GPIO initialized \r\n");
printf("[BlinkyApp] UART initialized \r\n");
printf("[BlinkyApp] Retarget I/O set to 115200 baudrate \r\n");
+#if defined(USE_WDT_PDL)
+ Cy_WDT_ClearWatchdog();
+#else
cyhal_wdt_kick(NULL);
+#endif
return (detect_core_message);
}
diff --git a/boot/cypress/CC.mk b/boot/cypress/CC.mk
new file mode 100644
index 0000000..75e97a3
--- /dev/null
+++ b/boot/cypress/CC.mk
@@ -0,0 +1,15 @@
+ASM_FILES :=
+
+C_FILES :=
+
+O_FILES :=
+
+INCLUDE_DIRS :=
+
+DEFINES :=
+
+CFLAGS :=
+
+LDFLAGS :=
+
+AS_FLAGS :=
diff --git a/boot/cypress/MCUBootApp/MCUBootApp.mk b/boot/cypress/MCUBootApp/MCUBootApp.mk
index db0d950..d1c93d1 100644
--- a/boot/cypress/MCUBootApp/MCUBootApp.mk
+++ b/boot/cypress/MCUBootApp/MCUBootApp.mk
@@ -45,27 +45,23 @@
MCUBOOT_SWAP_STATUS_FAST_BOOT ?= 0
ifeq ($(BUILDCFG), Release)
-MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_INFO
+ MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_INFO
else
-MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_DEBUG
+ MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_DEBUG
endif
ifneq ($(COMPILER), GCC_ARM)
$(error Only GCC ARM is supported at this moment)
endif
-ifeq ($(MCUBOOT_SWAP_STATUS_FAST_BOOT), 1)
-DEFINES_APP += -DMCUBOOT_SWAP_STATUS_FAST_BOOT
-endif
-
# Check FIH profile param
ifneq ($(filter $(FIH_PROFILE_LEVEL), $(FIH_PROFILE_LEVEL_LIST)),)
-ifneq ($(FIH_PROFILE_LEVEL), OFF)
-DEFINES_APP += -DMCUBOOT_FIH_PROFILE_ON
-DEFINES_APP += -DMCUBOOT_FIH_PROFILE_$(FIH_PROFILE_LEVEL)
-endif
+ ifneq ($(FIH_PROFILE_LEVEL), OFF)
+ DEFINES += -DMCUBOOT_FIH_PROFILE_ON
+ DEFINES += -DMCUBOOT_FIH_PROFILE_$(FIH_PROFILE_LEVEL)
+ endif
else
-$(error Wrong FIH_PROFILE_LEVEL param)
+ $(error Wrong FIH_PROFILE_LEVEL param)
endif
# Output folder
@@ -78,37 +74,43 @@
include $(PRJ_DIR)/platforms.mk
ifneq ($(FLASH_MAP), )
+
ifeq ($(FAMILY), CYW20829)
$(CUR_APP_PATH)/memorymap.mk:
$(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -c $(PRJ_DIR)/policy/policy_secure.json > $(CUR_APP_PATH)/memorymap.mk
-else ifeq ($(FAMILY), XMC7000)
+else ifeq ($(FAMILY), PSOC6)
$(CUR_APP_PATH)/memorymap.mk:
- $(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap > $(CUR_APP_PATH)/memorymap.mk
+ $(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h > $(CUR_APP_PATH)/memorymap.mk
else
$(CUR_APP_PATH)/memorymap.mk:
- $(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h > $(CUR_APP_PATH)/memorymap.mk
+ $(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap > $(CUR_APP_PATH)/memorymap.mk
endif
-DEFINES_APP += -DCY_FLASH_MAP_JSON
+
+ DEFINES += -DCY_FLASH_MAP_JSON
endif
include $(PRJ_DIR)/common_libs.mk
include $(PRJ_DIR)/toolchains.mk
ifeq ($(MAX_IMG_SECTORS), )
-MAX_IMG_SECTORS ?= $(PLATFORM_MAX_IMG_SECTORS)
+ MAX_IMG_SECTORS ?= $(PLATFORM_MAX_IMG_SECTORS)
endif
# Application-specific DEFINES
-DEFINES_APP += -DMBEDTLS_CONFIG_FILE="\"mcuboot_crypto_config.h\""
-DEFINES_APP += -DECC256_KEY_FILE="\"keys/$(SIGN_KEY_FILE).pub\""
-DEFINES_APP += -DBOOT_$(CORE)
-DEFINES_APP += -DAPP_$(APP_CORE)
-DEFINES_APP += -DAPP_CORE_ID=$(APP_CORE_ID)
-DEFINES_APP += -DMCUBOOT_IMAGE_NUMBER=$(MCUBOOT_IMAGE_NUMBER)
-DEFINES_APP += -DUSE_SHARED_SLOT=$(USE_SHARED_SLOT)
-DEFINES_APP += -DMCUBOOT_PLATFORM_CHUNK_SIZE=$(PLATFORM_CHUNK_SIZE)
-DEFINES_APP += -DMEMORY_ALIGN=$(PLATFORM_MEMORY_ALIGN)
-DEFINES_APP += -DPLATFORM_MAX_TRAILER_PAGE_SIZE=$(PLATFORM_MAX_TRAILER_PAGE_SIZE)
+DEFINES += -DMBEDTLS_CONFIG_FILE="\"mcuboot_crypto_config.h\""
+DEFINES += -DECC256_KEY_FILE="\"keys/$(SIGN_KEY_FILE).pub\""
+DEFINES += -DBOOT_$(CORE)
+DEFINES += -DAPP_$(APP_CORE)
+
+ifneq ($(APP_CORE_ID),)
+ DEFINES += -DAPP_CORE_ID=$(APP_CORE_ID)
+endif
+
+DEFINES += -DMCUBOOT_IMAGE_NUMBER=$(MCUBOOT_IMAGE_NUMBER)
+DEFINES += -DUSE_SHARED_SLOT=$(USE_SHARED_SLOT)
+DEFINES += -DMCUBOOT_PLATFORM_CHUNK_SIZE=$(PLATFORM_CHUNK_SIZE)
+DEFINES += -DMEMORY_ALIGN=$(PLATFORM_MEMORY_ALIGN)
+DEFINES += -DPLATFORM_MAX_TRAILER_PAGE_SIZE=$(PLATFORM_MAX_TRAILER_PAGE_SIZE)
# Define MCUboot size and pass it to linker script
LDFLAGS_DEFSYM += -Wl,--defsym,BOOTLOADER_SIZE=$(BOOTLOADER_SIZE)
@@ -116,143 +118,138 @@
APP_DEFAULT_POLICY ?= $(PLATFORM_APP_DEFAULT_POLICY)
ifeq ($(USE_EXTERNAL_FLASH), 1)
-ifeq ($(USE_XIP), 1)
-DEFINES_APP += -DUSE_XIP
-endif
-DEFINES_APP += -DCY_BOOT_USE_EXTERNAL_FLASH
-DEFINES_APP += -DCY_MAX_EXT_FLASH_ERASE_SIZE=$(PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE)
+ ifeq ($(USE_XIP), 1)
+ DEFINES += -DUSE_XIP
+ endif
+
+ DEFINES += -DCY_BOOT_USE_EXTERNAL_FLASH
+ DEFINES += -DCY_MAX_EXT_FLASH_ERASE_SIZE=$(PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE)
endif
ifeq ($(USE_OVERWRITE), 1)
-DEFINES_APP += -DMCUBOOT_OVERWRITE_ONLY
-ifeq ($(USE_SW_DOWNGRADE_PREV), 1)
-DEFINES_APP += -DMCUBOOT_DOWNGRADE_PREVENTION
-endif
+ DEFINES += -DMCUBOOT_OVERWRITE_ONLY
+ ifeq ($(USE_SW_DOWNGRADE_PREV), 1)
+ DEFINES += -DMCUBOOT_DOWNGRADE_PREVENTION
+ endif
else
-ifeq ($(USE_BOOTSTRAP), 1)
-DEFINES_APP += -DMCUBOOT_BOOTSTRAP
+ ifeq ($(USE_BOOTSTRAP), 1)
+ DEFINES += -DMCUBOOT_BOOTSTRAP
+ endif
endif
-endif
-DEFINES_APP += -DMCUBOOT_MAX_IMG_SECTORS=$(MAX_IMG_SECTORS)
-DEFINES_APP += -DMCUBOOT_LOG_LEVEL=$(MCUBOOT_LOG_LEVEL)
+
+DEFINES += -DMCUBOOT_MAX_IMG_SECTORS=$(MAX_IMG_SECTORS)
+DEFINES += -DMCUBOOT_LOG_LEVEL=$(MCUBOOT_LOG_LEVEL)
+
ifeq ($(USE_HW_ROLLBACK_PROT), 1)
-DEFINES_APP += -DMCUBOOT_HW_ROLLBACK_PROT
-# Service RAM app address (size 0x8000)
-DEFINES_APP += -DSERVICE_APP_OFFSET=$(PLATFORM_SERVICE_APP_OFFSET)
-# Service RAM app input parameters address (size 0x400)
-DEFINES_APP += -DSERVICE_APP_INPUT_PARAMS_OFFSET=$(PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET)
-# Service RAM app descriptor addr (size 0x20)
-DEFINES_APP += -DSERVICE_APP_DESC_OFFSET=$(PLATFORM_SERVICE_APP_DESC_OFFSET)
-# Service RAM app size
-DEFINES_APP += -DSERVICE_APP_SIZE=$(PLATFORM_SERVICE_APP_SIZE)
+ DEFINES += -DMCUBOOT_HW_ROLLBACK_PROT
+ # Service RAM app address (size 0x8000)
+ DEFINES += -DSERVICE_APP_OFFSET=$(PLATFORM_SERVICE_APP_OFFSET)
+ # Service RAM app input parameters address (size 0x400)
+ DEFINES += -DSERVICE_APP_INPUT_PARAMS_OFFSET=$(PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET)
+ # Service RAM app descriptor addr (size 0x20)
+ DEFINES += -DSERVICE_APP_DESC_OFFSET=$(PLATFORM_SERVICE_APP_DESC_OFFSET)
+ # Service RAM app size
+ DEFINES += -DSERVICE_APP_SIZE=$(PLATFORM_SERVICE_APP_SIZE)
endif
+
# Hardware acceleration support
ifeq ($(USE_CRYPTO_HW), 1)
-DEFINES_APP += -DMBEDTLS_USER_CONFIG_FILE="\"mcuboot_crypto_acc_config.h\""
-DEFINES_APP += -DCY_CRYPTO_HAL_DISABLE
-DEFINES_APP += -DCY_MBEDTLS_HW_ACCELERATION
+ DEFINES += -DMBEDTLS_USER_CONFIG_FILE="\"mcuboot_crypto_acc_config.h\""
+ DEFINES += -DCY_CRYPTO_HAL_DISABLE
+ DEFINES += -DCY_MBEDTLS_HW_ACCELERATION
-INCLUDE_DIRS_MBEDTLS_MXCRYPTO := $(CY_LIBS_PATH)/cy-mbedtls-acceleration
-INCLUDE_DIRS_MBEDTLS_MXCRYPTO += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/include
+ INCLUDE_DIRS += $(CY_LIBS_PATH)/cy-mbedtls-acceleration
+ INCLUDE_DIRS += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/include
-ifeq ($(FAMILY), CYW20829)
-INCLUDE_DIRS_MBEDTLS_MXCRYPTO += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)
-SOURCES_MBEDTLS_MXCRYPTO := $(wildcard $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)/*.c)
-DEFINES_APP += -Dcy_stc_cryptolite_context_sha256_t=cy_stc_cryptolite_context_sha_t
-else
-INCLUDE_DIRS_MBEDTLS_MXCRYPTO += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)
-SOURCES_MBEDTLS_MXCRYPTO := $(wildcard $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)/*.c)
+ INCLUDE_DIRS += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)
+ C_FILES += $(wildcard $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)/*.c)
+
+ ifeq ($(FAMILY), CYW20829)
+ DEFINES += -Dcy_stc_cryptolite_context_sha256_t=cy_stc_cryptolite_context_sha_t
+ endif
+
endif
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_MBEDTLS_MXCRYPTO))
-SOURCES_LIBS += $(SOURCES_MBEDTLS_MXCRYPTO)
+ifneq ($(MCUBOOT_IMAGE_NUMBER), 1)
+ ifeq ($(MCUBOOT_DEPENDENCY_CHECK), 1)
+ DEFINES += -DMCUBOOT_DEPENDENCY_CHECK
+ endif
endif
# Use key provisioned in device to verify images
ifeq ($(USE_HW_KEY), 1)
-DEFINES_APP=-DMCUBOOT_HW_KEY
-
+ DEFINES += -DMCUBOOT_HW_KEY
endif
# Compile with user redefined values for UART HW, port, pins
ifeq ($(USE_CUSTOM_DEBUG_UART), 1)
-DEFINES_APP += -DUSE_CUSTOM_DEBUG_UART=1
+ DEFINES += -DUSE_CUSTOM_DEBUG_UART=1
endif
# Log timestamp information
ifeq ($(USE_LOG_TIMESTAMP), 1)
-DEFINES_APP += -DUSE_LOG_TIMESTAMP
+ DEFINES += -DUSE_LOG_TIMESTAMP
endif
# Encrypted image support
ifeq ($(ENC_IMG), 1)
-DEFINES_APP += -DENC_IMG=1
-ifeq ($(FAMILY), CYW20829)
-DEFINES_APP += -DMCUBOOT_ENC_IMAGES_XIP
-endif
+ DEFINES += -DENC_IMG=1
+ ifeq ($(FAMILY), CYW20829)
+ DEFINES += -DMCUBOOT_ENC_IMAGES_XIP
+ endif
# Use maximum optimization level for PSOC6 encrypted image with
# external flash so it would fit into 0x18000 size of MCUBootApp
-ifneq ($(FAMILY), CYW20829)
-ifeq ($(BUILDCFG), Debug)
-ifeq ($(USE_EXTERNAL_FLASH), 1)
-CFLAGS_OPTIMIZATION := -Os -g3
-endif
-endif
-endif
+ ifneq ($(FAMILY), CYW20829)
+ ifeq ($(BUILDCFG), Debug)
+ ifeq ($(USE_EXTERNAL_FLASH), 1)
+ CFLAGS_OPTIMIZATION := -Os -g3
+ endif
+ endif
+ endif
endif
ifeq ($(USE_MEASURED_BOOT), 1)
-DEFINES_APP += -DMCUBOOT_MEASURED_BOOT
-DEFINES_APP += -DMAX_BOOT_RECORD_SZ=512
-DEFINES_APP += -DMCUBOOT_SHARED_DATA_BASE=0x08000800
-DEFINES_APP += -DMCUBOOT_SHARED_DATA_SIZE=0x200
+ DEFINES += -DMCUBOOT_MEASURED_BOOT
+ DEFINES += -DMAX_BOOT_RECORD_SZ=512
+ DEFINES += -DMCUBOOT_SHARED_DATA_BASE=0x08000800
+ DEFINES += -DMCUBOOT_SHARED_DATA_SIZE=0x200
endif
ifeq ($(USE_DATA_SHARING), 1)
-DEFINES_APP += -DMCUBOOT_DATA_SHARING
-DEFINES_APP += -DMAX_BOOT_RECORD_SZ=512
-DEFINES_APP += -DMCUBOOT_SHARED_DATA_BASE=0x08000800
-DEFINES_APP += -DMCUBOOT_SHARED_DATA_SIZE=0x200
+ DEFINES += -DMCUBOOT_DATA_SHARING
+ DEFINES += -DMAX_BOOT_RECORD_SZ=512
+ DEFINES += -DMCUBOOT_SHARED_DATA_BASE=0x08000800
+ DEFINES += -DMCUBOOT_SHARED_DATA_SIZE=0x200
endif
ifeq ($(BOOT_RECORD_SW_TYPE), )
-BOOT_RECORD := --boot-record MCUBootApp
+ BOOT_RECORD := --boot-record MCUBootApp
else
-BOOT_RECORD := --boot-record $(BOOT_RECORD_SW_TYPE)
+ BOOT_RECORD := --boot-record $(BOOT_RECORD_SW_TYPE)
endif
# Collect MCUBoot sourses
-SOURCES_MCUBOOT := $(wildcard $(PRJ_DIR)/../bootutil/src/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/../bootutil/src/*.c)
# Collect MCUBoot Application sources
-SOURCES_APP_SRC := main.c keys.c
+C_FILES += $(CUR_APP_PATH)/main.c $(CUR_APP_PATH)/keys.c
+
ifeq ($(USE_EXEC_TIME_CHECK), 1)
-DEFINES_APP += -DUSE_EXEC_TIME_CHECK=1
-SOURCES_APP_SRC += misc/timebase_us.c
+ DEFINES += -DUSE_EXEC_TIME_CHECK=1
+ C_FILES += $(CUR_APP_PATH)/misc/timebase_us.c
endif
-INCLUDE_DIRS_UTILS := $(PLATFORM_INCLUDE_DIRS_UTILS)
-# Collect all the sources
-SOURCES_APP := $(SOURCES_MCUBOOT)
-SOURCES_APP += $(addprefix $(CUR_APP_PATH)/, $(SOURCES_APP_SRC))
-SOURCES_APP += $(PLATFORM_APP_SOURCES)
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/include
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/include/bootutil
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/include/bootutil/crypto
+INCLUDE_DIRS += $(PRJ_DIR)/../bootutil/src
+INCLUDE_DIRS += $(PRJ_DIR)/..
-INCLUDE_DIRS_MCUBOOT := $(addprefix -I, $(PRJ_DIR)/../bootutil/include)
-INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/../bootutil/include/bootutil)
-INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/../bootutil/include/bootutil/crypto)
-INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/../bootutil/src)
-INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/..)
-
-INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR))
-INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH))
-INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH)/config)
-INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH)/os)
-INCLUDE_DIRS_APP += $(addprefix -I, $(INCLUDE_DIRS_FLASH))
-INCLUDE_DIRS_APP += $(addprefix -I, $(INCLUDE_DIRS_UTILS))
-
-ASM_FILES_APP :=
-ASM_FILES_APP += $(ASM_FILES_STARTUP)
+INCLUDE_DIRS += $(PRJ_DIR)
+INCLUDE_DIRS += $(CUR_APP_PATH)
+INCLUDE_DIRS += $(CUR_APP_PATH)/config
+INCLUDE_DIRS += $(CUR_APP_PATH)/os
# Pass variables to linker script and overwrite path to it, if custom is required
ifeq ($(FAMILY), XMC7000)
@@ -272,75 +269,4 @@
else
$(error $(COMPILER) not supported at this moment)
endif
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### MCUBootApp.mk ####)
-$(info APP_CORE <-- $(APP_CORE))
-$(info APP_DEFAULT_POLICY --> $(APP_DEFAULT_POLICY))
-$(info APP_NAME <-> $(APP_NAME))
-$(info ASM_FILES_APP --> $(ASM_FILES_APP))
-$(info ASM_FILES_STARTUP <-- $(ASM_FILES_STARTUP))
-$(info BOOTLOADER_SIZE <-- $(BOOTLOADER_SIZE))
-$(info BOOT_RECORD --> $(BOOT_RECORD))
-$(info BOOT_RECORD_SW_TYPE <-- $(BOOT_RECORD_SW_TYPE))
-$(info BUILDCFG <-- $(BUILDCFG))
-$(info CFLAGS_OPTIMIZATION --> $(CFLAGS_OPTIMIZATION))
-$(info COMPILER <-> $(COMPILER))
-$(info CORE <-- $(CORE))
-$(info CUR_APP_PATH <-- $(CUR_APP_PATH))
-$(info CY_LIBS_PATH <-- $(CY_LIBS_PATH))
-$(info DEFINES_APP --> $(DEFINES_APP))
-$(info ENC_IMG <-> $(ENC_IMG))
-$(info FLASH_MAP <-- $(FLASH_MAP))
-$(info INCLUDE_DIRS_APP --> $(INCLUDE_DIRS_APP))
-$(info INCLUDE_DIRS_FLASH <-> $(INCLUDE_DIRS_FLASH))
-$(info INCLUDE_DIRS_LIBS --> $(INCLUDE_DIRS_LIBS))
-$(info INCLUDE_DIRS_MBEDTLS_MXCRYPTO <-> $(INCLUDE_DIRS_MBEDTLS_MXCRYPTO))
-$(info INCLUDE_DIRS_MCUBOOT --> $(INCLUDE_DIRS_MCUBOOT))
-$(info INCLUDE_DIRS_UTILS <-> $(INCLUDE_DIRS_UTILS))
-$(info LDFLAGS --> $(LDFLAGS))
-$(info LDFLAGS_DEFSYM <-> $(LDFLAGS_DEFSYM))
-$(info LINKER_SCRIPT --> $(LINKER_SCRIPT))
-$(info MAX_IMG_SECTORS <-> $(MAX_IMG_SECTORS))
-$(info MCUBOOT_IMAGE_NUMBER <-> $(MCUBOOT_IMAGE_NUMBER))
-$(info MCUBOOT_LOG_LEVEL <-> $(MCUBOOT_LOG_LEVEL))
-$(info OUT <-> $(OUT))
-$(info OUT_CFG --> $(OUT_CFG))
-$(info OUT_TARGET <-> $(OUT_TARGET))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PLATFORM_APP_DEFAULT_POLICY <-- $(PLATFORM_APP_DEFAULT_POLICY))
-$(info PLATFORM_APP_SOURCES <-- $(PLATFORM_APP_SOURCES))
-$(info PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE <-- $(PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE))
-$(info PLATFORM_INCLUDE_DIRS_FLASH <-- $(PLATFORM_INCLUDE_DIRS_FLASH))
-$(info PLATFORM_INCLUDE_DIRS_UTILS <-- $(PLATFORM_INCLUDE_DIRS_UTILS))
-$(info PLATFORM_MAX_IMG_SECTORS <-- $(PLATFORM_MAX_IMG_SECTORS))
-$(info PLATFORM_SERVICE_APP_DESC_OFFSET <-- $(PLATFORM_SERVICE_APP_DESC_OFFSET))
-$(info PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET <-- $(PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET))
-$(info PLATFORM_SERVICE_APP_OFFSET <-- $(PLATFORM_SERVICE_APP_OFFSET))
-$(info PLATFORM_SERVICE_APP_SIZE <-- $(PLATFORM_SERVICE_APP_SIZE))
-$(info PLATFORM_SOURCES_FLASH <-- $(PLATFORM_SOURCES_FLASH))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info PYTHON_PATH <-- $(PYTHON_PATH))
-$(info SIGN_KEY_FILE <-- $(SIGN_KEY_FILE))
-$(info SOURCES_APP --> $(SOURCES_APP))
-$(info SOURCES_APP_SRC <-> $(SOURCES_APP_SRC))
-$(info SOURCES_FLASH <-> $(SOURCES_FLASH))
-$(info SOURCES_LIBS --> $(SOURCES_LIBS))
-$(info SOURCES_MBEDTLS_MXCRYPTO <-> $(SOURCES_MBEDTLS_MXCRYPTO))
-$(info SOURCES_MCUBOOT <-> $(SOURCES_MCUBOOT))
-$(info USE_BOOTSTRAP <-> $(USE_BOOTSTRAP))
-$(info USE_CRYPTO_HW <-- $(USE_CRYPTO_HW))
-$(info USE_CUSTOM_DEBUG_UART <-- $(USE_CUSTOM_DEBUG_UART))
-$(info USE_DATA_SHARING <-- $(USE_DATA_SHARING))
-$(info USE_EXEC_TIME_CHECK <-- $(USE_EXEC_TIME_CHECK))
-$(info USE_EXTERNAL_FLASH <-- $(USE_EXTERNAL_FLASH))
-$(info USE_HW_ROLLBACK_PROT <-- $(USE_HW_ROLLBACK_PROT))
-$(info USE_LOG_TIMESTAMP <-- $(USE_LOG_TIMESTAMP))
-$(info USE_MEASURED_BOOT <-- $(USE_MEASURED_BOOT))
-$(info USE_OVERWRITE <-- $(USE_OVERWRITE))
-$(info USE_SHARED_SLOT <-> $(USE_SHARED_SLOT))
-$(info USE_SW_DOWNGRADE_PREV <-- $(USE_SW_DOWNGRADE_PREV))
-$(info USE_XIP <-- $(USE_XIP))
-endif
+
diff --git a/boot/cypress/MCUBootApp/README.md b/boot/cypress/MCUBootApp/README.md
new file mode 100644
index 0000000..b58f87e
--- /dev/null
+++ b/boot/cypress/MCUBootApp/README.md
@@ -0,0 +1,221 @@
+### Port of MCUboot library to be used with Cypress targets
+
+**Solution Description**
+
+Given solution demonstrates operation of MCUboot on Cypress' PSoC6 device.
+
+There are two applications implemented:
+* MCUBootApp - PSoC6 MCUboot-based bootloading application;
+* BlinkyApp - simple PSoC6 blinking LED application which is a target of BOOT/UPGRADE;
+
+Cypress boards, that can be used with this evaluation example:
+- CY8CPROTO-062-4343W - PSoC 6 2M on board
+- CY8CKIT-062-WIFI-BT - PSoC 6 1M on board
+- CY8CPROTO-062S3-4343W - PSoC 6 512K on board
+The default flash map implemented is the following:
+
+Single-image mode.
+
+`[0x10000000, 0x10018000]` - MCUBootApp (bootloader) area;
+
+`[0x10018000, 0x10028000]` - primary slot for BlinkyApp;
+
+`[0x10028000, 0x10038000]` - secondary slot for BlinkyApp;
+
+`[0x10038000, 0x10039000]` - scratch area (not used);
+
+Size of slots `0x10000` - 64kb
+
+MCUBootApp checks image integrity with SHA256, image authenticity with EC256 digital signature verification and uses completely SW implementation of cryptographic functions based on Mbed TLS Library.
+
+**Important**: make sure primary, secondary slot and bootloader app sizes are appropriate and correspond to flash area size defined in Applications' linker files.
+
+**Important**: make sure RAM areas of CM0p-based MCUBootApp bootloader and CM4-based BlinkyApp do not overlap.
+Memory (stack) corruption of CM0p application can cause failure if SystemCall-served operations invoked from CM4.
+
+### Hardware cryptography acceleration
+
+Cypress PSOC6 MCU family supports hardware acceleration of cryptography based on Mbed TLS Library via shim layer. Implementation of this layer is supplied as separate submodule `cy-mbedtls-acceleration`. HW acceleration of cryptography shortens boot time more then 4 times, comparing to software implementation (observation results).
+
+To enable hardware acceleration in `MCUBootApp` pass flag `USE_CRYPTO_HW=1` to `make` while build.
+
+Hardware acceleration of cryptography is enabled for PSOC6 devices by default.
+
+### How to modify memory map
+
+__Option 1.__
+
+Navigate to `sysflash.h` and modify the flash area(s) / slots sizes to meet your needs.
+
+__Option 2.__
+
+Navigate to `sysflash.h`, uncomment `memory_EXT_DESC` definition.
+Now define and initialize `struct flash_area *boot_area_descs[]` with flash memory addresses and sizes you need at the beginning of application, so flash APIs from `memory.c` will use it.
+
+__Note:__ for both options make sure you have updated `MCUBOOT_MAX_IMG_SECTORS` appropriately with sector size assumed to be 512.
+
+**How to override the flash map values during build process:**
+
+Navigate to MCUBootApp.mk, find section `DEFINES_APP +=`
+Update this line and or add similar for flash map parameters to override.
+
+The possible list could be:
+
+* MCUBOOT_MAX_IMG_SECTORS
+* memory_EXT_DESC
+* CY_BOOT_SCRATCH_SIZE
+* CY_BOOT_BOOTLOADER_SIZE
+* CY_BOOT_PRIMARY_1_SIZE
+* CY_BOOT_SECONDARY_1_SIZE
+* CY_BOOT_PRIMARY_2_SIZE
+* CY_BOOT_SECONDARY_2_SIZE
+
+As an example in a makefile it should look like following:
+
+`DEFINES_APP +=-Dmemory_EXT_DESC`
+
+`DEFINES_APP +=-DMCUBOOT_MAX_IMG_SECTORS=512`
+
+`DEFINES_APP +=-DCY_BOOT_PRIMARY_1_SIZE=0x15000`
+
+**Multi-Image Operation**
+
+Multi-image operation considers upgrading and verification of more then one image on the device.
+
+To enable multi-image operation define `MCUBOOT_IMAGE_NUMBER` in `MCUBootApp/config/mcuboot_config.h` file should be set to 2 (only dual-image is supported at the moment). This could also be done on build time by passing `MCUBOOT_IMAGE_NUMBER=2` as parameter to `make`.
+
+Default value of `MCUBOOT_IMAGE_NUMBER` is 1, which corresponds to single image configurations.
+
+In multi-image operation (two images are considered for simplicity) MCUboot Bootloader application operates as following:
+
+* Verifies Primary_1 and Primary_2 images;
+* Verifies Secondary_1 and Secondary_2 images;
+* Upgrades Secondary to Primary if valid images found;
+* Boots image from Primary_1 slot only;
+* Boots Primary_1 only if both - Primary_1 and Primary_2 are present and valid;
+
+This ensures two dependent applications can be accepted by device only in case both images are valid.
+
+**Default Flash map for Multi-Image operation:**
+
+`0x10000000 - 0x10018000` - MCUboot Bootloader
+
+`0x10018000 - 0x10028000` - Primary_1 (BOOT) slot of Bootloader
+
+`0x10028000 - 0x10038000` - Secondary_1 (UPGRADE) slot of Bootloader
+
+`0x10038000 - 0x10048000` - Primary_2 (BOOT) slot of Bootloader
+
+`0x10048000 - 0x10058000` - Secondary_2 (UPGRADE) slot of Bootloader
+
+`0x10058000 - 0x10059000` - Scratch of Bootloader
+
+Size of slots `0x10000` - 64kb
+
+__Note:__ It is also possible to place secondary (upgrade) slots in external memory module so resulting image size can be doubled.
+For more details about External Memory usage, please refer to separate guiding document `ExternalMemory.md`.
+
+### Hardware limitations
+
+Since this application is created to demonstrate MCUboot library features and not as reference examples some considerations are taken.
+
+1. `SCB5` used to configure serial port for debug prints. This is the most commonly used Serial Communication Block number among available Cypress PSoC 6 kits. If you try to use custom hardware with this application - change definition of `CYBSP_UART_HW` in `main.c` of MCUBootApp to SCB* that correspond to your design.
+
+2. `CY_SMIF_SLAVE_SELECT_0` is used as definition SMIF driver API. This configuration is used on evaluation kit for this example CY8CPROTO-062-4343W, CY8PROTO-062S3-4343W, CY8CKIT-062-4343W. If you try to use custom hardware with this application - change value of `smif_id` in `main.c` of MCUBootApp to value that corresponds to your design.
+
+
+### Downloading solution's assets
+
+There is a set assets required:
+
+* MCUBooot Library (root repository)
+* PSoC6 HAL Library
+* PSoC6 Peripheral Drivers Library (PDL)
+* Mbed TLS Cryptographic Library
+
+To get submodules - run the following command:
+
+ git submodule update --init --recursive
+
+### Building solution
+
+This folder contains make files infrastructure for building MCUBoot Bootloader. Same approach used in sample BlinkyLedApp application. Example command are provided below for couple different build configurations.
+
+* Build MCUBootApp in `Debug` for single image use case.
+
+ make app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Debug MCUBOOT_IMAGE_NUMBER=1
+
+* Build MCUBootApp in `Release` for multi image use case.
+
+ make app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Release MCUBOOT_IMAGE_NUMBER=2
+
+* To Build MCUBootApp with external memory support - pass `USE_EXTERNAL_FLASH=1` flag to `make` command in examples above. In this case UPGRADE image will be located in external memory. Refer to ExternalMemory.md for additional details.
+
+Root directory for build is **boot/cypress.**
+
+**Encrypted Image Support**
+
+To protect user image from unwanted read - Upgrade Image Encryption can be applied. The ECDH/HKDF with EC256 scheme is used in a given solution as well as Mbed TLS as a crypto provider.
+
+To enable image encryption support use `ENC_IMG=1` build flag (BlinkyApp should also be built with this flash set 1).
+
+User is also responsible for providing corresponding binary key data in `enc_priv_key[]` (file `\MCUBootApp\keys.c`). The public part will be used by imgtool when signing and encrypting upgrade image. Signing image with encryption is described in `\BlinkyApp\Readme.md`.
+
+After MCUBootApp is built with these settings unencrypted and encrypted images will be accepted in secondary (upgrade) slot.
+
+Example command:
+
+ make app APP_NAME=MCUBootApp PLATFORM=PSOC_062_2M BUILDCFG=Debug MCUBOOT_IMAGE_NUMBER=1 ENC_IMG=1
+
+**Programming solution**
+
+There are couple ways of programming hex of MCUBootApp and BlinkyApp. Following instructions assume one of Cypress development kits, for example `CY8CPROTO_062_4343W`.
+
+1. Direct usage of OpenOCD.
+OpenOCD package is supplied with ModuToolbox IDE and can be found in installation folder under `./tools_3.2/openocd`.
+Open terminal application - and execute following command after substitution `PATH_TO_APPLICATION.hex` and `OPENOCD` paths.
+
+Connect a board to your computer. Switch Kitprog3 to DAP-BULK mode by pressing `SW3 MODE` button until `LED2 STATUS` constantly shines.
+
+ export OPENOCD=/Applications/ModusToolbox/tools_3.2/openocd
+
+ ${OPENOCD}/bin/openocd -s ${OPENOCD}/scripts \
+ -f ${OPENOCD}/scripts/interface/kitprog3.cfg \
+ -f ${OPENOCD}/scripts/target/psoc6_2m.cfg \
+ -c "init; reset init; program PATH_TO_APPLICATION.hex" \
+ -c "resume; reset; exit"
+
+2. Using GUI tool `Cypress Programmer` - follow [link](https://www.cypress.com/products/psoc-programming-solutions) to download.
+ Connect board to your computer. Switch Kitprog3 to DAP-BULK mode by pressing `SW3 MODE` button until `LED2 STATUS` constantly shines. Open `Cypress Programmer` and click `Connect`, then choose hex file: `MCUBootApp.hex` or `BlinkyApp.hex` and click `Program`. Check log to ensure programming success. Reset board.
+
+3. Using `DAPLINK`.
+ Connect board to your computer. Switch embedded Kitprog3 to `DAPLINK` mode by pressing `SW3 MODE` button until `LED2 STATUS` blinks fast and mass storage device appeared in OS. Drag and drop `hex` files you wish to program to `DAPLINK` drive in your OS.
+
+
+
+**Currently supported platforms:**
+
+* PSOC_062_2M
+* PSOC_062_1M
+* PSOC_062_512K
+
+**Build environment troubleshooting:**
+
+Regular shell/terminal combination on Linux and MacOS.
+
+On Windows:
+
+* Cygwin
+* Msys2
+
+Also IDE may be used:
+* Eclipse / ModusToolbox ("makefile project from existing source")
+
+*Make* - make sure it is added to system's `PATH` variable and correct path is first in the list;
+
+*Python/Python3* - make sure you have correct path referenced in `PATH`;
+
+*Msys2* - to use systems PATH navigate to msys2 folder, open `msys2_shell.cmd`, uncomment set `MSYS2_PATH_TYPE=inherit`, restart MSYS2 shell.
+
+This will inherit system's PATH so should find `python3.7` installed in regular way as well as imgtool and its dependencies.
+
diff --git a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h
index eed3573..819cd20 100644
--- a/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h
+++ b/boot/cypress/MCUBootApp/config/mcuboot_config/mcuboot_config.h
@@ -88,8 +88,9 @@
* even if no upgrade was performed. This is recommended if the boot
* time penalty is acceptable.
*/
+#ifndef MCUBOOT_SKIP_VALIDATE_PRIMARY_SLOT
#define MCUBOOT_VALIDATE_PRIMARY_SLOT
-
+#endif
/*
* Flash abstraction
*/
diff --git a/boot/cypress/MCUBootApp/libs.mk b/boot/cypress/MCUBootApp/libs.mk
index 096abe1..4be1c07 100644
--- a/boot/cypress/MCUBootApp/libs.mk
+++ b/boot/cypress/MCUBootApp/libs.mk
@@ -26,75 +26,25 @@
################################################################################
# PDL library
################################################################################
-
-PDL_VERSION = 121
-
THIS_APP_PATH = $(PRJ_DIR)/libs
MBEDTLS_PATH = $(PRJ_DIR)/../../ext
-ifneq ($(FAMILY), XMC7000)
-# Add watchdog folder to build
-SOURCES_WATCHDOG := $(wildcard $(THIS_APP_PATH)/watchdog/*.c)
-# Watchdog related includes
-INCLUDE_DIRS_WATCHDOG := $(THIS_APP_PATH)/watchdog
-endif
-
-# PSOC6HAL source files
-SOURCES_HAL_MCUB := $(PLATFORM_SOURCES_HAL_MCUB)
-
# PSOC6HAL include dirs
-INCLUDE_DIRS_HAL_MCUB := $(PLATFORM_INCLUDE_DIRS_HAL_MCUB)
# MbedTLS source files
-SOURCES_MBEDTLS := $(wildcard $(MBEDTLS_PATH)/mbedtls/library/*.c)
-
-# Collected source files for libraries
-SOURCES_LIBS += $(SOURCES_MBEDTLS)
-SOURCES_LIBS += $(SOURCES_WATCHDOG)
-SOURCES_LIBS += $(SOURCES_FIH)
-
-# Collect source files for platform dependent libraries
-SOURCES_LIBS += $(SOURCES_HAL_MCUB)
+C_FILES += $(wildcard $(MBEDTLS_PATH)/mbedtls/library/*.c)
# MbedTLS related include directories
ifeq ($(USE_CRYPTO_HW), 1)
ifeq ($(FAMILY), CYW20829)
-# Override mbedtls/compat-2.x.h for Cryptolite CBUS workaround
-INCLUDE_DIRS_MBEDTLS += $(PRJ_DIR)/platforms/crypto/CYW20829
+ # Override mbedtls/compat-2.x.h for Cryptolite CBUS workaround
+ INCLUDE_DIRS += $(PRJ_DIR)/platforms/crypto/CYW20829
endif
endif
-INCLUDE_DIRS_MBEDTLS += $(MBEDTLS_PATH)/mbedtls/include
-INCLUDE_DIRS_MBEDTLS += $(MBEDTLS_PATH)/mbedtls/include/mbedtls
-INCLUDE_DIRS_MBEDTLS += $(MBEDTLS_PATH)/mbedtls/include/psa
-INCLUDE_DIRS_MBEDTLS += $(MBEDTLS_PATH)/mbedtls/library
-# Collected include directories for libraries
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_WATCHDOG))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_MBEDTLS))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_FIH))
+INCLUDE_DIRS += $(MBEDTLS_PATH)/mbedtls/include
+INCLUDE_DIRS += $(MBEDTLS_PATH)/mbedtls/include/mbedtls
+INCLUDE_DIRS += $(MBEDTLS_PATH)/mbedtls/include/psa
+INCLUDE_DIRS += $(MBEDTLS_PATH)/mbedtls/library
-# Collect platform dependent include dirs
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_HAL_MCUB))
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### libs.mk ####)
-$(info INCLUDE_DIRS_FIH <-> $(INCLUDE_DIRS_FIH))
-$(info INCLUDE_DIRS_HAL_MCUB <-> $(INCLUDE_DIRS_HAL_MCUB))
-$(info INCLUDE_DIRS_LIBS <-> $(INCLUDE_DIRS_LIBS))
-$(info INCLUDE_DIRS_MBEDTLS <-> $(INCLUDE_DIRS_MBEDTLS))
-$(info INCLUDE_DIRS_WATCHDOG <-> $(INCLUDE_DIRS_WATCHDOG))
-$(info MBEDTLS_PATH <-- $(MBEDTLS_PATH))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PLATFORM_INCLUDE_DIRS_HAL_MCUB <-- $(PLATFORM_INCLUDE_DIRS_HAL_MCUB))
-$(info PLATFORM_SOURCES_HAL_MCUB <-- $(PLATFORM_SOURCES_HAL_MCUB))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info SOURCES_FIH <-> $(SOURCES_FIH))
-$(info SOURCES_HAL_MCUB <-> $(SOURCES_HAL_MCUB))
-$(info SOURCES_LIBS <-> $(SOURCES_LIBS))
-$(info SOURCES_MBEDTLS <-> $(SOURCES_MBEDTLS))
-$(info SOURCES_WATCHDOG <-> $(SOURCES_WATCHDOG))
-$(info THIS_APP_PATH <-- $(THIS_APP_PATH))
-$(info USE_CRYPTO_HW <-- $(USE_CRYPTO_HW))
-endif
diff --git a/boot/cypress/MCUBootApp/main.c b/boot/cypress/MCUBootApp/main.c
index 06dd387..3c015c5 100644
--- a/boot/cypress/MCUBootApp/main.c
+++ b/boot/cypress/MCUBootApp/main.c
@@ -24,8 +24,9 @@
#include "cy_pdl.h"
#include "cyhal.h"
#include "cyhal_wdt.h"
+#include "cy_wdt.h"
-#include "cyw_platform_utils.h"
+#include "platform_utils.h"
#if defined CYW20829
#include "cy_service_app.h"
@@ -67,9 +68,6 @@
#define MCUBOOTAPP_RSLT_ERR \
(CY_RSLT_CREATE_EX(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_MCUBOOTAPP, CY_RSLT_MODULE_MCUBOOTAPP_MAIN, 0))
-/* WDT time out for reset mode, in milliseconds. */
-#define WDT_TIME_OUT_MS 4000
-
#ifdef CY_BOOT_USE_EXTERNAL_FLASH
/* Choose SMIF slot number (slave select).
* Acceptable values are:
@@ -82,8 +80,38 @@
#define BOOT_MSG_FINISH "MCUBoot Bootloader finished.\r\n" \
"Deinitializing hardware..."
+/* WDT time out for reset mode, in milliseconds. */
+#define WDT_TIME_OUT_MS 4000
+/* Match count = Desired interrupt interval in seconds x ILO Frequency in Hz */
+#define WDT_MATCH_COUNT (WDT_TIME_OUT_MS*32000)/1000
+
static void hw_deinit(void);
+#if defined(USE_WDT_PDL)
+cy_rslt_t initialize_wdt()
+{
+ /* Step 1- Unlock WDT */
+ Cy_WDT_Unlock();
+
+ /* Step 2- Write the ignore bits - operate with only 14 bits */
+ Cy_WDT_SetIgnoreBits(16);
+
+ /* Step 3- Write match value */
+ Cy_WDT_SetMatch(WDT_MATCH_COUNT);
+
+ /* Step 4- Clear match event interrupt, if any */
+ Cy_WDT_ClearInterrupt();
+
+ /* Step 5- Enable WDT */
+ Cy_WDT_Enable();
+
+ /* Step 6- Lock WDT configuration */
+ Cy_WDT_Lock();
+
+ return CY_RSLT_SUCCESS;
+}
+#endif
+
static inline __attribute__((always_inline))
fih_uint calc_app_addr(uintptr_t flash_base, const struct boot_rsp *rsp)
{
@@ -182,10 +210,17 @@
return false;
}
- if (fih_uint_eq(calc_app_addr(flash_base, rsp), app_addr) != FIH_TRUE) {
+ if (!fih_uint_eq(calc_app_addr(flash_base, rsp), app_addr)) {
return false;
}
+#if defined PSC3
+ BOOT_LOG_INF("Launching app on CM33 core");
+ BOOT_LOG_INF(BOOT_MSG_FINISH);
+ hw_deinit();
+ launch_cm33_app((void*)fih_uint_decode(app_addr));
+#else
+
#if defined CYW20829
#ifdef MCUBOOT_ENC_IMAGES_XIP
@@ -249,6 +284,7 @@
#else
#error "Application should run on either Cortex-M0+ or Cortex-M4"
#endif /* APP_CM4 */
+#endif
#endif /* defined CYW20829 */
} else {
@@ -329,6 +365,12 @@
}
}
+ #ifdef FIH_ENABLE_DELAY
+ /*If random delay is used in FIH APIs then
+ * fih_delay must be initialized */
+ fih_delay_init();
+ #endif /* FIH_ENABLE_DELAY */
+
BOOT_LOG_INF("MCUBoot Bootloader Started");
#ifdef CY_BOOT_USE_EXTERNAL_FLASH
@@ -370,21 +412,24 @@
BOOT_LOG_INF("Exec time: %" PRIu32 " [ms]", exec_time / 1000U);
}
#endif /* USE_EXEC_TIME_CHECK */
- if (FIH_TRUE == fih_eq(fih_rc, FIH_SUCCESS)) {
+ if (fih_eq(fih_rc, FIH_SUCCESS)) {
BOOT_LOG_INF("User Application validated successfully");
/* initialize watchdog timer. it should be updated from user app
* to mark successful start up of this app. if the watchdog is not updated,
* reset will be initiated by watchdog timer and swap revert operation started
* to roll back to operable image.
*/
+#if defined(USE_WDT_PDL)
+ rc = initialize_wdt();
+#else
cyhal_wdt_t wdt_obj;
rc = cyhal_wdt_init(&wdt_obj, WDT_TIME_OUT_MS);
cyhal_wdt_start(&wdt_obj);
+#endif
if (CY_RSLT_SUCCESS == rc) {
-
boot_succeeded = do_boot(&rsp);
if (!boot_succeeded) {
diff --git a/boot/cypress/Makefile b/boot/cypress/Makefile
index a444c04..1e32ec8 100644
--- a/boot/cypress/Makefile
+++ b/boot/cypress/Makefile
@@ -23,27 +23,21 @@
# limitations under the License.
################################################################################
-# minimum Python 3.7 is required
-# Python path definition
-ifeq ($(OS),Windows_NT)
-PYTHON_PATH?=python
-else
-PYTHON_PATH?=python3
-endif
-
################################################################################
# Main settings
################################################################################
-# Defines whether or not show verbose build output
-VERBOSE ?= 0
-# Application name by default
-APP_NAME ?= MCUBootApp
-# Weather or now execute post build script after build - set to 0 for CI
-POST_BUILD_ENABLE ?= 1
+# Set of supported applications
+APPS := MCUBootApp BlinkyApp
-# Default number of GCC compilation threads
-THREADS_NUM ?= 8
+################################################################################
+# Includes
+################################################################################
+
+# Compiler variables
+include ./CC.mk
+# Build settings
+include ./build_config.mk
SIGN_KEY_FILE ?= cypress-test-ec-p256
SECURE_MODE_KEY_NAME ?= cypress-test-rsa2k
@@ -51,22 +45,8 @@
ENC_KEY_FILE ?= enc-ec256-pub
ENC_IMG ?= 0
-# set this variable to a path, where cysecuretools python package is installed
-# use command `python -m pip show cysecuretools` to find out this path
-# or rely on scripts that automates this action, bit not work for virtual envs
-CY_SEC_TOOLS_PATH ?= $(shell $(PYTHON_PATH) $(CURDIR)/scripts/find_cysectools.py)
-
-BUILDCFG ?= Debug
-
-# Set of supported applications
-APPS := MCUBootApp BlinkyApp
-
HEADER_OFFSET ?= 0
-# Defines whether or not make all compile warnings into errors for application
-# source code (but not for library source code)
-WARN_AS_ERR ?= 1
-
ifneq ($(filter $(APP_NAME), $(APPS)),)
include ./$(APP_NAME)/$(APP_NAME).mk
include ./$(APP_NAME)/libs.mk
@@ -74,27 +54,11 @@
$(error Not supported application: '$(APP_NAME)')
endif
-ASM_FILES := $(ASM_FILES_APP)
-ASM_FILES += $(ASM_FILES_LIBS)
-
-C_FILES := $(SOURCES_APP)
-C_FILES += $(SOURCES_PLATFORM)
-C_LIBS := $(SOURCES_LIBS)
-
-INCLUDE_DIRS := $(INCLUDE_DIRS_APP)
-INCLUDE_DIRS += $(INCLUDE_DIRS_MCUBOOT)
-INCLUDE_DIRS += $(INCLUDE_DIRS_LIBS)
-
-#INCLUDE_FILES := $(INCLUDE_FILES_APP)
-
-#INCLUDES := $(addprefix -include , $(INCLUDE_FILES))
-
O_FILES := $(notdir $(C_FILES:.c=.o)) $(addsuffix .o, $(notdir $(basename $(ASM_FILES))))
-O_LIBS := $(notdir $(C_LIBS:.c=.o))
-DEFINES := $(DEFINES_APP) -D$(APP_NAME)
-DEFINES += $(DEFINES_LIBS)
+DEFINES += -D$(APP_NAME)
AS_FLAGS += $(DEFINES)
+INCLUDE_DIRS := $(addprefix -I, $(INCLUDE_DIRS))
ifeq ($(VERBOSE), 1)
$(info ==============================================================================)
@@ -111,7 +75,7 @@
# updating CFLAGS at this point as DEFINES are completed
CFLAGS += $(DEFINES) $(CFLAGS_OPTIMIZATION)
-VPATH = $(dir $(C_FILES) $(ASM_FILES) $(C_LIBS))
+VPATH = $(dir $(C_FILES) $(ASM_FILES))
LDFLAGS += $(LDFLAGS_OPTIMIZATION)
@@ -166,13 +130,13 @@
$(OUT_APP)/$(APP_NAME).bin: $(OUT_APP)/$(APP_NAME).elf
$(GCC_PATH)/bin/arm-none-eabi-objcopy $(OUT_APP)/$(APP_NAME).elf -S -O binary $(OUT_APP)/$(APP_NAME).bin --remove-section .cy_sflash_user_data --remove-section .cy_toc_part2
-$(OUT_APP)/$(APP_NAME).elf: $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(addprefix $(OUT_OBJ_LIBS_DIR)/, $(O_LIBS))
+$(OUT_APP)/$(APP_NAME).elf: $(addprefix $(OUT_OBJ)/, $(O_FILES))
@echo "LD $@"
ifeq ($(VERBOSE), 1)
@echo
@echo $(LD) $(O_FILES) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
endif
- @$(LD) $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(addprefix $(OUT_OBJ_LIBS_DIR)/, $(O_LIBS)) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
+ @$(LD) $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
$(OUT_OBJ)/%.o: %.c
@@ -235,63 +199,3 @@
endif
@echo "Generating secure mode key config"
cysecuretools convert-key -k ./keys/$(SECURE_MODE_KEY_NAME).pub -o ./platforms/utils/$(FAMILY)/cy_si_key.c --fmt secure_boot --endian little
-
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### Makefile ####)
-$(info APPS <-> $(APPS))
-$(info APP_NAME <-> $(APP_NAME))
-$(info AS <-- $(AS))
-$(info ASM_FILES <-> $(ASM_FILES))
-$(info ASM_FILES_APP <-- $(ASM_FILES_APP))
-$(info ASM_FILES_LIBS <-- $(ASM_FILES_LIBS))
-$(info AS_FLAGS <-> $(AS_FLAGS))
-$(info BUILDCFG <-> $(BUILDCFG))
-$(info CC <-- $(CC))
-$(info CC_DEPEND <-- $(CC_DEPEND))
-$(info CFLAGS <-> $(CFLAGS))
-$(info CFLAGS_OPTIMIZATION <-- $(CFLAGS_OPTIMIZATION))
-$(info COMPILER <-- $(COMPILER))
-$(info CPP_CHECK_SCOPE <-- $(CPP_CHECK_SCOPE))
-$(info CURDIR <-- $(CURDIR))
-$(info CY_SEC_TOOLS_PATH --> $(CY_SEC_TOOLS_PATH))
-$(info C_FILES <-> $(C_FILES))
-$(info C_LIBS <-> $(C_LIBS))
-$(info DEFINES <-> $(DEFINES))
-$(info DEFINES_APP <-- $(DEFINES_APP))
-$(info DEFINES_LIBS <-- $(DEFINES_LIBS))
-$(info ENC_IMG --> $(ENC_IMG))
-$(info ENC_KEY_FILE --> $(ENC_KEY_FILE))
-$(info GCC_PATH <-- $(GCC_PATH))
-$(info HEADER_OFFSET <-> $(HEADER_OFFSET))
-$(info INCLUDE_DIRS <-> $(INCLUDE_DIRS))
-$(info INCLUDE_DIRS_APP <-- $(INCLUDE_DIRS_APP))
-$(info INCLUDE_DIRS_LIBS <-- $(INCLUDE_DIRS_LIBS))
-$(info INCLUDE_DIRS_MCUBOOT <-- $(INCLUDE_DIRS_MCUBOOT))
-$(info LD <-- $(LD))
-$(info LDFLAGS <-> $(LDFLAGS))
-$(info LDFLAGS_OPTIMIZATION <-- $(LDFLAGS_OPTIMIZATION))
-$(info LINKER_SCRIPT <-- $(LINKER_SCRIPT))
-$(info MAKE <-- $(MAKE))
-$(info OS <-- $(OS))
-$(info OUT <-- $(OUT))
-$(info OUT_APP <-> $(OUT_APP))
-$(info OUT_CFG <-- $(OUT_CFG))
-$(info OUT_FILE_NAME <-> $(OUT_FILE_NAME))
-$(info OUT_OBJ <-> $(OUT_OBJ))
-$(info OUT_OBJ_LIBS_DIR <-> $(OUT_OBJ_LIBS_DIR))
-$(info OUT_TARGET <-- $(OUT_TARGET))
-$(info O_FILES <-> $(O_FILES))
-$(info O_LIBS <-> $(O_LIBS))
-$(info PLATFORM <-- $(PLATFORM))
-$(info POST_BUILD_ENABLE --> $(POST_BUILD_ENABLE))
-$(info PYTHON_PATH <-> $(PYTHON_PATH))
-$(info SIGN_KEY_FILE <-> $(SIGN_KEY_FILE))
-$(info SOURCES_APP <-- $(SOURCES_APP))
-$(info SOURCES_LIBS <-- $(SOURCES_LIBS))
-$(info SOURCES_PLATFORM <-- $(SOURCES_PLATFORM))
-$(info THREADS_NUM <-> $(THREADS_NUM))
-$(info WARN_AS_ERR <-> $(WARN_AS_ERR))
-endif
diff --git a/boot/cypress/build_config.mk b/boot/cypress/build_config.mk
new file mode 100644
index 0000000..966bd3f
--- /dev/null
+++ b/boot/cypress/build_config.mk
@@ -0,0 +1,28 @@
+# Defines whether or not show verbose build output
+VERBOSE ?= 0
+
+# Application name by default
+APP_NAME ?= MCUBootApp
+
+# Weather or now execute post build script after build - set to 0 for CI
+POST_BUILD_ENABLE ?= 1
+
+# Default number of GCC compilation threads
+THREADS_NUM ?= 8
+
+# Build configuration
+BUILDCFG ?= Debug
+
+# Defines whether or not make all compile warnings into errors for application
+# source code (but not for library source code)
+WARN_AS_ERR ?= 1
+
+# Python path definition
+ifeq ($(OS), Windows_NT)
+ PYTHON_PATH?=python
+else
+ PYTHON_PATH?=python3
+endif
+
+# The cysecuretools path
+CY_SEC_TOOLS_PATH ?= $(shell $(PYTHON_PATH) $(CURDIR)/scripts/find_cysectools.py)
\ No newline at end of file
diff --git a/boot/cypress/common_libs.mk b/boot/cypress/common_libs.mk
index f501550..240ce8c 100644
--- a/boot/cypress/common_libs.mk
+++ b/boot/cypress/common_libs.mk
@@ -31,152 +31,89 @@
CY_LIBS_PATH = $(PRJ_DIR)/libs
# Collect common source files for PDL
-SOURCES_PDL := $(wildcard $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/source/*.c)
-SOURCES_PDL += $(wildcard $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/*.c)
+C_FILES += $(wildcard $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/source/*.c)
+C_FILES += $(wildcard $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/*.c)
COMPONENT_CORE_PATH := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)
# PDL startup related files
SYSTEM_FILE_NAME := $(PLATFORM_SYSTEM_FILE_NAME)
-SOURCES_PDL_SYSTEM := $(COMPONENT_CORE_PATH)/$(SYSTEM_FILE_NAME)
-SOURCES_PDL_STARTUP := $(COMPONENT_CORE_PATH)/$(PLATFORM_SOURCES_PDL_STARTUP)
+C_FILES += $(wildcard $(COMPONENT_CORE_PATH)/$(SYSTEM_FILE_NAME))
+C_FILES += $(wildcard (COMPONENT_CORE_PATH)/$(PLATFORM_SOURCES_PDL_STARTUP))
# Collect source files for Retarget-io
-SOURCES_RETARGET_IO := $(wildcard $(PRJ_DIR)/libs/retarget-io/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/libs/retarget-io/*.c)
# HAL source files
-SOURCES_HAL := $(wildcard $(PRJ_DIR)/libs/mtb-hal-cat1/source/*.c)
-SOURCES_HAL += $(wildcard $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/pin_packages/*.c)
-SOURCES_HAL += $(wildcard $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/triggers/*.c)
+C_FILES += $(wildcard $(CY_LIBS_PATH)/mtb-hal-cat1/source/*.c)
+C_FILES += $(wildcard $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/pin_packages/*.c)
+C_FILES += $(wildcard $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/triggers/*.c)
-# Add platform folder to build
-SOURCES_PLATFORM := $(wildcard $(PRJ_DIR)/platforms/BSP/$(FAMILY)/*.c)
-SOURCES_PLATFORM += $(wildcard $(PRJ_DIR)/platforms/security_counter/*.c)
-SOURCES_PLATFORM += $(wildcard $(PRJ_DIR)/platforms/security_counter/$(FAMILY)/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/platforms/BSP/$(FAMILY)/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/platforms/security_counter/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/platforms/security_counter/$(FAMILY)/*.c)
+
ifneq ($(APP_NAME), BlinkyApp)
-SOURCES_PLATFORM += $(wildcard $(PRJ_DIR)/platforms/memory/*.c)
-SOURCES_PLATFORM += $(wildcard $(PRJ_DIR)/platforms/memory/$(FAMILY)/*.c)
+ C_FILES += $(wildcard $(PRJ_DIR)/platforms/memory/*.c)
+ C_FILES += $(wildcard $(PRJ_DIR)/platforms/memory/$(FAMILY)/*.c)
endif
+
ifeq ($(USE_EXTERNAL_FLASH), 1)
-SOURCES_PLATFORM += $(wildcard $(PRJ_DIR)/platforms/memory/external_memory/*.c)
-SOURCES_PLATFORM += $(wildcard $(PRJ_DIR)/platforms/memory/$(FAMILY)/flash_qspi/*.c)
+ C_FILES += $(wildcard $(PRJ_DIR)/platforms/memory/external_memory/*.c)
+ C_FILES += $(wildcard $(PRJ_DIR)/platforms/memory/$(FAMILY)/flash_qspi/*.c)
endif
-SOURCES_PLATFORM += $(PLATFORM_SOURCES_FLASH)
+
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/boot_rng
+
+C_FILES += $(wildcard $(PRJ_DIR)/platforms/boot_rng/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/platforms/boot_rng/$(FAMILY)/*.c)
+
# PDL related include directories
-INCLUDE_DIRS_PDL := $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/include
-INCLUDE_DIRS_PDL += $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/third_party/ethernet/include
-INCLUDE_DIRS_PDL += $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/ip
-INCLUDE_DIRS_PDL += $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include
-INCLUDE_DIRS_PDL += $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/templates/COMPONENT_MTB
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/include
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/third_party/ethernet/include
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/ip
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-pdl-cat1/devices/COMPONENT_CAT$(PDL_CAT_SUFFIX)/templates/COMPONENT_MTB
# HAL related include directories
-INCLUDE_DIRS_HAL := $(CY_LIBS_PATH)/mtb-hal-cat1/include
-INCLUDE_DIRS_HAL += $(CY_LIBS_PATH)/mtb-hal-cat1/include_pvt
-INCLUDE_DIRS_HAL += $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/
-INCLUDE_DIRS_HAL += $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/pin_packages
-INCLUDE_DIRS_HAL += $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/triggers
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-hal-cat1/include
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-hal-cat1/include_pvt
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/pin_packages
+INCLUDE_DIRS += $(CY_LIBS_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/triggers
-INCLUDE_DIRS_CMSIS += $(CY_LIBS_PATH)/cmsis/Core/Include
+INCLUDE_DIRS += $(CY_LIBS_PATH)/cmsis/Core/Include
# core-libs related include directories
-INCLUDE_DIRS_CORE_LIB := $(CY_LIBS_PATH)/core-lib/include
+INCLUDE_DIRS += $(CY_LIBS_PATH)/core-lib/include
# PDL startup related files
-INCLUDE_DIRS_PDL_STARTUP += $(COMPONENT_CORE_PATH)/HEADER_FILES
+INCLUDE_DIRS += $(COMPONENT_CORE_PATH)/HEADER_FILES
# Retarget-io related include directories
-INCLUDE_DIRS_RETARGET_IO := $(THIS_APP_PATH)/retarget-io
+INCLUDE_DIRS += $(THIS_APP_PATH)/retarget-io
# Include platforms folder
-INCLUDE_DIRS_PLATFORM := $(PRJ_DIR)/platforms/BSP/$(FAMILY)
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/security_counter/$(FAMILY)
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/security_counter
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/memory
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/memory/flash_map_backend
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/memory/$(FAMILY)
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/memory/$(FAMILY)/include
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/BSP/$(FAMILY)
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/security_counter/$(FAMILY)
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/security_counter
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory/flash_map_backend
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory/$(FAMILY)
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory/$(FAMILY)/include
+
ifeq ($(USE_EXTERNAL_FLASH), 1)
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/memory/external_memory
-INCLUDE_DIRS_PLATFORM += $(PRJ_DIR)/platforms/memory/$(FAMILY)/flash_qspi
+ INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory/external_memory
+ INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory/$(FAMILY)/flash_qspi
endif
-INCLUDE_DIRS_PLATFORM += $(PLATFORM_INCLUDE_DIRS_FLASH)
-INCLUDE_DIRS_PLATFORM += $(PLATFORM_INCLUDE_DIRS_PDL_STARTUP)
# Assembler startup file for platform
-ASM_FILES_STARTUP := $(PLATFORM_STARTUP_FILE)
-
-# Collected source files for libraries
-SOURCES_LIBS := $(SOURCES_PDL)
-SOURCES_LIBS += $(SOURCES_HAL)
-SOURCES_LIBS += $(SOURCES_PDL_SYSTEM)
-SOURCES_LIBS += $(SOURCES_PDL_STARTUP)
-SOURCES_LIBS += $(SOURCES_PDL_RUNTIME)
-SOURCES_LIBS += $(SOURCES_RETARGET_IO)
-
-# Collected include directories for libraries
-INCLUDE_DIRS_LIBS := $(addprefix -I,$(INCLUDE_DIRS_PDL))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_HAL))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_CMSIS))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_PDL_STARTUP))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_CORE_LIB))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_HAL))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_PLATFORM))
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_RETARGET_IO))
+ASM_FILES += $(PLATFORM_STARTUP_FILE)
# Syslib files
-ASM_FILES_PDL += $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/source/TOOLCHAIN_GCC_ARM/cy_syslib_ext.S
+ASM_FILES += $(CY_LIBS_PATH)/mtb-pdl-cat1/drivers/source/TOOLCHAIN_GCC_ARM/cy_syslib_ext.S
-ASM_FILES_LIBS := $(ASM_FILES_PDL)
+DEFINES += -DCOMPONENT_CAT1
+DEFINES += -DCOMPONENT_CAT$(PDL_CAT_SUFFIX)
-# Add define for PDL version
-DEFINES_PDL += -DPDL_VERSION=$(PDL_VERSION)
-
-DEFINES_LIBS := $(PLATFORM_DEFINES)
-DEFINES_LIBS += $(PLATFORM_DEFINES_LIBS)
-DEFINES_LIBS += $(DEFINES_PDL)
-DEFINES_LIBS += -DCOMPONENT_CAT1
-DEFINES_LIBS += -DCOMPONENT_CAT$(PDL_CAT_SUFFIX)
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### common_libs.mk ####)
-$(info ASM_FILES_LIBS --> $(ASM_FILES_LIBS))
-$(info ASM_FILES_PDL <-> $(ASM_FILES_PDL))
-$(info ASM_FILES_STARTUP --> $(ASM_FILES_STARTUP))
-$(info COMPONENT_CORE_PATH <-> $(COMPONENT_CORE_PATH))
-$(info CORE <-- $(CORE))
-$(info CY_LIBS_PATH <-- $(CY_LIBS_PATH))
-$(info DEFINES_LIBS --> $(DEFINES_LIBS))
-$(info DEFINES_PDL <-> $(DEFINES_PDL))
-$(info FAMILY <-- $(FAMILY))
-$(info INCLUDE_DIRS_CORE_LIB <-> $(INCLUDE_DIRS_CORE_LIB))
-$(info INCLUDE_DIRS_HAL <-> $(INCLUDE_DIRS_HAL))
-$(info INCLUDE_DIRS_LIBS --> $(INCLUDE_DIRS_LIBS))
-$(info INCLUDE_DIRS_PDL <-> $(INCLUDE_DIRS_PDL))
-$(info INCLUDE_DIRS_PDL_STARTUP <-> $(INCLUDE_DIRS_PDL_STARTUP))
-$(info INCLUDE_DIRS_PLATFORM <-> $(INCLUDE_DIRS_PLATFORM))
-$(info INCLUDE_DIRS_RETARGET_IO <-> $(INCLUDE_DIRS_RETARGET_IO))
-$(info PDL_CAT_SUFFIX <-- $(PDL_CAT_SUFFIX))
-$(info PDL_VERSION <-- $(PDL_VERSION))
-$(info PLATFORM_DEFINES <-- $(PLATFORM_DEFINES))
-$(info PLATFORM_DEFINES_LIBS <-- $(PLATFORM_DEFINES_LIBS))
-$(info PLATFORM_INCLUDE_DIRS_HAL <-- $(PLATFORM_INCLUDE_DIRS_HAL))
-$(info PLATFORM_INCLUDE_DIRS_RETARGET_IO <-- $(PLATFORM_INCLUDE_DIRS_RETARGET_IO))
-$(info PLATFORM_SOURCES_HAL <-- $(PLATFORM_SOURCES_HAL))
-$(info PLATFORM_SOURCES_PDL_STARTUP <-- $(PLATFORM_SOURCES_PDL_STARTUP))
-$(info PLATFORM_SOURCES_RETARGET_IO <-- $(PLATFORM_SOURCES_RETARGET_IO))
-$(info PLATFORM_STARTUP_FILE <-- $(PLATFORM_STARTUP_FILE))
-$(info PLATFORM_SYSTEM_FILE_NAME <-- $(PLATFORM_SYSTEM_FILE_NAME))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info SOURCES_HAL <-> $(SOURCES_HAL))
-$(info SOURCES_LIBS --> $(SOURCES_LIBS))
-$(info SOURCES_PDL <-> $(SOURCES_PDL))
-$(info SOURCES_PDL_RUNTIME <-- $(SOURCES_PDL_RUNTIME))
-$(info SOURCES_PDL_STARTUP <-> $(SOURCES_PDL_STARTUP))
-$(info SOURCES_PDL_SYSTEM <-> $(SOURCES_PDL_SYSTEM))
-$(info SOURCES_PLATFORM --> $(SOURCES_PLATFORM))
-$(info SOURCES_RETARGET_IO <-> $(SOURCES_RETARGET_IO))
-$(info SYSTEM_FILE_NAME <-> $(SYSTEM_FILE_NAME))
-endif
diff --git a/boot/cypress/host.mk b/boot/cypress/host.mk
index a1f6ef8..6b6851e 100644
--- a/boot/cypress/host.mk
+++ b/boot/cypress/host.mk
@@ -46,12 +46,3 @@
endif
PRJ_DIR=$(call get_os_path, $(CURDIR))
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### host.mk ####)
-$(info CURDIR <-- $(CURDIR))
-$(info HOST_OS <-- $(HOST_OS))
-$(info UNAME_S <-> $(UNAME_S))
-endif
diff --git a/boot/cypress/libs/cy-mbedtls-acceleration b/boot/cypress/libs/cy-mbedtls-acceleration
index c5f703d..f4f9de4 160000
--- a/boot/cypress/libs/cy-mbedtls-acceleration
+++ b/boot/cypress/libs/cy-mbedtls-acceleration
@@ -1 +1 @@
-Subproject commit c5f703d0354c69611e6c8226a609cead96e1f8a6
+Subproject commit f4f9de4be6ebd2effc30f2b82eb6b4327555d89e
diff --git a/boot/cypress/libs/mtb-hal-cat1 b/boot/cypress/libs/mtb-hal-cat1
index 2ede4ff..56ee340 160000
--- a/boot/cypress/libs/mtb-hal-cat1
+++ b/boot/cypress/libs/mtb-hal-cat1
@@ -1 +1 @@
-Subproject commit 2ede4ff1cc30638c231b8f4f66fef213514fec37
+Subproject commit 56ee340a43235c35f5eb788e993cb21335cb21ce
diff --git a/boot/cypress/libs/mtb-pdl-cat1 b/boot/cypress/libs/mtb-pdl-cat1
index dc2df2d..baab436 160000
--- a/boot/cypress/libs/mtb-pdl-cat1
+++ b/boot/cypress/libs/mtb-pdl-cat1
@@ -1 +1 @@
-Subproject commit dc2df2d7faa50bf7b8bc70632d3b683d63ed6adc
+Subproject commit baab4365d2afc0df4c852ecc4df885775b15479f
diff --git a/boot/cypress/platforms.mk b/boot/cypress/platforms.mk
index b8466ea..cab13d0 100644
--- a/boot/cypress/platforms.mk
+++ b/boot/cypress/platforms.mk
@@ -27,43 +27,27 @@
# supported platforms list
PSOC_06X := PSOC_061_2M PSOC_061_1M PSOC_061_512K PSOC_062_2M PSOC_062_1M PSOC_062_512K PSOC_063_1M
+CYW_xx829 := CYW20829 CYW89829
XMC7000 := XMC7200 XMC7100
-PLATFORMS := $(PSOC_06X) CYW20829 CYW89829 $(XMC7000)
+PLATFORMS := $(PSOC_06X) $(CYW_xx829) $(XMC7000)
ifneq ($(filter $(PLATFORM), $(PLATFORMS)),)
else
-$(error Not supported platform: '$(PLATFORM)')
+ $(error Not supported platform: '$(PLATFORM)')
endif
ifeq ($(PLATFORM), $(filter $(PLATFORM), $(PSOC_06X)))
-FAMILY := PSOC6
+ FAMILY := PSOC6
else ifeq ($(PLATFORM), CYW20829)
-FAMILY := CYW20829
+ FAMILY := CYW20829
else ifeq ($(PLATFORM), CYW89829)
-FAMILY := CYW20829
+ FAMILY := CYW20829
else ifeq ($(PLATFORM), $(filter $(PLATFORM), $(XMC7000)))
-FAMILY := XMC7000
+ FAMILY := XMC7000
endif
# include family related makefile into build
include platforms/$(FAMILY).mk
-DEFINES += $(PLATFORM)
-DEFINES += $(FAMILY)
-
-# Convert defines to regular -DMY_NAME style
-ifneq ($(DEFINES),)
- PLATFORM_DEFINES := $(addprefix -D, $(subst -,_,$(DEFINES)))
-endif
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### platforms.mk ####)
-$(info DEFINES <-> $(DEFINES))
-$(info FAMILY <-> $(FAMILY))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PLATFORMS <-> $(PLATFORMS))
-$(info PLATFORM_DEFINES --> $(PLATFORM_DEFINES))
-$(info PSOC_06X <-> $(PSOC_06X))
-endif
+DEFINES += -D$(PLATFORM)
+DEFINES += -D$(FAMILY)
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/README.md b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/README.md
deleted file mode 100644
index e39310b..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# XMC7xDUAL Cortex M0+ DeepSleep prebuilt image (XMC7xDUAL_CM0P_SLEEP)
-
-### Overview
-DeepSleep prebuilt application image is executed on the Cortex M0+ core of the XMC dual CM7-core MCU (CM0+, CM7_0 and CM7_1).
-The image is provided as C array ready to be compiled as part of the Cortex M7_0 application.
-The Cortex M0+ application code is placed to internal flash by the Cortex M7_0 linker script.
-
-DeepSleep prebuilt image executes the following steps:
-- starts CM7_0 core at CY_CORTEX_M7_0_APPL_ADDR. (check the address in partition.h in pdl repo)
-- starts CM7_1 core at CY_CORTEX_M7_1_APPL_ADDR. (check the address in partition.h in pdl repo)
-- puts the CM0+ core into Deep Sleep.
-
-Note: After CM7_0 boots up, a delay of 1 second is added before CM7_1 boots up. This is to take care of race condition if both the cores try to configure the same clock.
-
-### Usage
-
-This image is used by default by all Infineon BSPs that target XMC Dual-Core MCU.
-
-To use this image in the custom BSP, adjust the BSP target makefile to
-add the COMPONENT_XMC7xDUAL_CM0P_SLEEP directory to the list of components
-discovered by ModusToolbox build system:
-
-```
-COMPONENTS+=XMC7xDUAL_CM0P_SLEEP
-```
-
-Make sure there is a single XMC7xDUAL_CM0P_* component included in the COMPONENTS list.
-
----
-Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or an affiliate of Cypress Semiconductor Corporation.
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/xmc7100d_cm0p_sleep.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/xmc7100d_cm0p_sleep.c
deleted file mode 100644
index daf59dd..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/xmc7100d_cm0p_sleep.c
+++ /dev/null
@@ -1,565 +0,0 @@
-/***************************************************************************//**
-* \file xmc7100d_cm0p_sleep.c
-*
-* \brief
-* Cortex-M0+ prebuilt application image.
-*
-********************************************************************************
-* \copyright
-* Copyright (c) 2018-2021 Cypress Semiconductor Corporation (an Infineon
-* company) or an affiliate of Cypress Semiconductor Corporation
-* SPDX-License-Identifier: LicenseRef-PBL
-*
-* Licensed under the Permissive Binary License
-*******************************************************************************/
-
-#include <stdint.h>
-#include "cy_device_headers.h"
-
-#if defined(CY_DEVICE_TVIIBH4M)
-
-#if defined(__APPLE__) && defined(__clang__)
-__attribute__ ((__section__("__CY_M0P_IMAGE,__cy_m0p_image"), used))
-#elif defined(__GNUC__) || defined(__ARMCC_VERSION)
-__attribute__ ((__section__(".cy_m0p_image"), used))
-#elif defined(__ICCARM__)
-#pragma location=".cy_m0p_image"
-#else
-#error "An unsupported toolchain"
-#endif
-const uint8_t cy_m0p_image[] = {
- 0x00u, 0x00u, 0x02u, 0x28u, 0x69u, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9fu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x69u, 0x0au, 0x00u, 0x10u, 0x9du, 0x0au, 0x00u, 0x10u,
- 0xd1u, 0x0au, 0x00u, 0x10u, 0x05u, 0x0bu, 0x00u, 0x10u, 0x39u, 0x0bu, 0x00u, 0x10u, 0x6du, 0x0bu, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x10u, 0xb5u, 0x06u, 0x4cu, 0x23u, 0x78u, 0x00u, 0x2bu, 0x07u, 0xd1u, 0x05u, 0x4bu, 0x00u, 0x2bu, 0x02u, 0xd0u,
- 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x23u, 0x23u, 0x70u, 0x10u, 0xbdu, 0x1cu, 0x10u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0xbcu, 0x1fu, 0x00u, 0x10u, 0x04u, 0x4bu, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x03u, 0xd0u,
- 0x03u, 0x49u, 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x20u, 0x10u, 0x00u, 0x28u, 0xbcu, 0x1fu, 0x00u, 0x10u, 0x40u, 0x22u, 0x92u, 0x02u, 0x9au, 0x1au, 0x92u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x17u, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd1u, 0x13u, 0x4bu, 0x9du, 0x46u, 0xffu, 0xf7u,
- 0xf3u, 0xffu, 0x00u, 0x21u, 0x8bu, 0x46u, 0x0fu, 0x46u, 0x13u, 0x48u, 0x14u, 0x4au, 0x12u, 0x1au, 0x01u, 0xf0u,
- 0xf2u, 0xfeu, 0x0eu, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0x0du, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0x00u, 0x20u, 0x00u, 0x21u, 0x04u, 0x00u, 0x0du, 0x00u, 0x0du, 0x48u, 0x00u, 0x28u, 0x02u, 0xd0u,
- 0x0cu, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0xf0u, 0xb1u, 0xfeu, 0x20u, 0x00u, 0x29u, 0x00u, 0x00u, 0xf0u,
- 0x1fu, 0xfbu, 0x01u, 0xf0u, 0x95u, 0xfeu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x99u, 0x07u, 0x00u, 0x10u, 0x00u, 0x00u, 0x02u, 0x28u, 0x1cu, 0x10u, 0x00u, 0x28u, 0x70u, 0x10u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x30u, 0x80u, 0x08u, 0x03u, 0xd0u, 0x01u, 0x30u,
- 0x02u, 0x38u, 0xfcu, 0xd1u, 0xc0u, 0x46u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xefu, 0xf3u, 0x10u, 0x80u, 0x72u, 0xb6u,
- 0x70u, 0x47u, 0x80u, 0xf3u, 0x10u, 0x88u, 0x70u, 0x47u, 0x01u, 0x20u, 0xc0u, 0x04u, 0x13u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x12u, 0x49u, 0x0au, 0x68u, 0x02u, 0x43u, 0x0au, 0x60u, 0x11u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x10u, 0x48u, 0x11u, 0x49u, 0x00u, 0x22u, 0x00u, 0x23u, 0x0cu, 0xc0u, 0x88u, 0x42u,
- 0xfcu, 0xd3u, 0x00u, 0xf0u, 0x6fu, 0xfbu, 0x00u, 0xf0u, 0x03u, 0xfbu, 0xfeu, 0xe7u, 0xfeu, 0xe7u, 0x00u, 0xb5u,
- 0x04u, 0x20u, 0x71u, 0x46u, 0x08u, 0x42u, 0x02u, 0xd0u, 0xefu, 0xf3u, 0x09u, 0x80u, 0x02u, 0xe0u, 0xefu, 0xf3u,
- 0x08u, 0x80u, 0x04u, 0x30u, 0x00u, 0xf0u, 0xfcu, 0xf9u, 0xfeu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x13u, 0x20u, 0x40u,
- 0x80u, 0x13u, 0x20u, 0x40u, 0xa0u, 0x13u, 0x20u, 0x40u, 0x00u, 0xffu, 0x01u, 0x28u, 0x00u, 0x00u, 0x02u, 0x28u,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0xc0u, 0x18u, 0x03u, 0x4bu, 0x80u, 0x00u, 0xc0u, 0x58u, 0x80u, 0x06u, 0x80u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x03u, 0x00u, 0x00u, 0x20u, 0x07u, 0x2bu, 0x08u, 0xd8u,
- 0x92u, 0x22u, 0xd2u, 0x00u, 0x9bu, 0x18u, 0x03u, 0x4au, 0x9bu, 0x00u, 0x9bu, 0x58u, 0x01u, 0x30u, 0x1bu, 0x0au,
- 0x98u, 0x43u, 0x70u, 0x47u, 0x00u, 0x00u, 0x26u, 0x40u, 0x02u, 0x4bu, 0x18u, 0x69u, 0x40u, 0x07u, 0xc0u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x27u, 0x40u, 0x04u, 0x4bu, 0x05u, 0x4au, 0xd0u, 0x58u, 0x03u, 0x23u,
- 0x18u, 0x40u, 0x98u, 0x42u, 0x00u, 0xd1u, 0x02u, 0x20u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x24u, 0x15u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xefu, 0xffu, 0x00u, 0x23u, 0x02u, 0x28u, 0x01u, 0xd1u,
- 0x01u, 0x4bu, 0x1bu, 0x68u, 0x18u, 0x00u, 0x10u, 0xbdu, 0x3cu, 0x10u, 0x00u, 0x28u, 0x09u, 0x4au, 0x83u, 0x00u,
- 0x99u, 0x18u, 0x90u, 0x22u, 0x52u, 0x01u, 0x88u, 0x58u, 0x07u, 0x22u, 0x10u, 0x40u, 0x04u, 0x28u, 0x07u, 0xd1u,
- 0x05u, 0x4au, 0x9bu, 0x18u, 0x58u, 0x68u, 0x1fu, 0x23u, 0x03u, 0x40u, 0x80u, 0x20u, 0x40u, 0x00u, 0x18u, 0x43u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0xfcu, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0xe5u, 0xffu, 0x88u, 0x23u, 0x5bu, 0x00u, 0x98u, 0x42u, 0x19u, 0xd0u, 0x09u, 0xd8u, 0x01u, 0x28u, 0x10u, 0xd0u,
- 0x02u, 0x28u, 0x11u, 0xd0u, 0x43u, 0x42u, 0x58u, 0x41u, 0x0fu, 0x4bu, 0x40u, 0x42u, 0x18u, 0x40u, 0x10u, 0xbdu,
- 0x12u, 0x23u, 0xffu, 0x33u, 0x98u, 0x42u, 0x12u, 0xd0u, 0x03u, 0x33u, 0x98u, 0x42u, 0x07u, 0xd0u, 0x00u, 0x20u,
- 0xf5u, 0xe7u, 0x0au, 0x4bu, 0x18u, 0x68u, 0xf2u, 0xe7u, 0xffu, 0xf7u, 0xbcu, 0xffu, 0xefu, 0xe7u, 0x08u, 0x4au,
- 0x08u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0xf2u, 0xdau, 0x80u, 0x20u, 0x00u, 0x02u, 0xe7u, 0xe7u, 0xffu, 0xf7u,
- 0x9bu, 0xffu, 0x00u, 0x28u, 0xebu, 0xd0u, 0xf7u, 0xe7u, 0x00u, 0x12u, 0x7au, 0x00u, 0x38u, 0x10u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x08u, 0x15u, 0x00u, 0x00u, 0x14u, 0x4au, 0x15u, 0x4bu, 0x10u, 0xb5u, 0xd3u, 0x58u,
- 0x0fu, 0x24u, 0x99u, 0x03u, 0xdbu, 0x01u, 0xdbu, 0x0fu, 0x89u, 0x0bu, 0xc3u, 0x71u, 0x11u, 0x4bu, 0x01u, 0x60u,
- 0xd3u, 0x58u, 0xd9u, 0x04u, 0x1bu, 0x0cu, 0xdbu, 0xb2u, 0x03u, 0x81u, 0x0fu, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u,
- 0x81u, 0x80u, 0x19u, 0x00u, 0x21u, 0x40u, 0x81u, 0x72u, 0x19u, 0x09u, 0x21u, 0x40u, 0xc1u, 0x72u, 0xd9u, 0x02u,
- 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x83u, 0x73u, 0x09u, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u, 0x81u, 0x81u, 0x5au, 0x05u,
- 0xdbu, 0x01u, 0x52u, 0x0fu, 0xdbu, 0x0du, 0x82u, 0x71u, 0x03u, 0x82u, 0x10u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x30u, 0x15u, 0x00u, 0x00u, 0x34u, 0x15u, 0x00u, 0x00u, 0x38u, 0x15u, 0x00u, 0x00u, 0x3cu, 0x15u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0xbbu, 0xfdu,
- 0x14u, 0x4bu, 0x28u, 0x01u, 0xc5u, 0x18u, 0xc8u, 0x23u, 0x1fu, 0x26u, 0x5bu, 0x01u, 0xebu, 0x58u, 0x19u, 0x0au,
- 0x31u, 0x40u, 0x61u, 0x70u, 0x07u, 0x21u, 0x23u, 0x70u, 0x1au, 0x0cu, 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x32u, 0x40u,
- 0x23u, 0x71u, 0x0du, 0x4bu, 0xa2u, 0x70u, 0xebu, 0x58u, 0x1au, 0x02u, 0x12u, 0x0au, 0xa2u, 0x60u, 0x1au, 0x0fu,
- 0xf3u, 0x40u, 0x0au, 0x40u, 0x55u, 0x1eu, 0xaau, 0x41u, 0x63u, 0x73u, 0x08u, 0x4bu, 0x22u, 0x73u, 0xc0u, 0x18u,
- 0x03u, 0x68u, 0x00u, 0x20u, 0xdau, 0xb2u, 0x22u, 0x61u, 0x1au, 0x0cu, 0xf3u, 0x40u, 0x11u, 0x40u, 0x21u, 0x75u,
- 0x63u, 0x75u, 0x70u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u, 0x04u, 0x19u, 0x00u, 0x00u, 0x08u, 0x19u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x83u, 0xfdu,
- 0xb0u, 0x23u, 0x7fu, 0x22u, 0x1fu, 0x20u, 0xdbu, 0x00u, 0xedu, 0x18u, 0x09u, 0x4bu, 0xadu, 0x00u, 0xebu, 0x58u,
- 0x1au, 0x40u, 0x22u, 0x70u, 0x1au, 0x0cu, 0x02u, 0x40u, 0xa2u, 0x70u, 0x1au, 0x01u, 0xc2u, 0x40u, 0x19u, 0x0au,
- 0x9bu, 0x00u, 0x01u, 0x40u, 0x9bu, 0x0fu, 0x00u, 0x20u, 0x61u, 0x70u, 0xe2u, 0x70u, 0x23u, 0x71u, 0x70u, 0xbdu,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x42u, 0x1eu, 0x06u, 0x4bu, 0x01u, 0x2au, 0x05u, 0xd8u, 0x90u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0x01u, 0x18u, 0x58u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0x02u, 0x4au, 0x80u, 0x18u, 0x80u, 0x00u, 0xf8u, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x7du, 0x05u, 0x00u, 0x00u, 0x03u, 0x00u, 0x01u, 0x38u, 0x10u, 0xb5u, 0x01u, 0x28u,
- 0x02u, 0xd8u, 0xffu, 0xf7u, 0x8du, 0xffu, 0x10u, 0xbdu, 0xd8u, 0x1eu, 0xffu, 0xf7u, 0xc1u, 0xffu, 0xfau, 0xe7u,
- 0xf0u, 0xb5u, 0x8bu, 0xb0u, 0x04u, 0x00u, 0xffu, 0xf7u, 0x19u, 0xffu, 0x06u, 0x00u, 0x00u, 0x2cu, 0x3du, 0xd1u,
- 0x14u, 0x22u, 0x21u, 0x00u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0x3eu, 0xfdu, 0x04u, 0xa8u, 0xffu, 0xf7u, 0x44u, 0xffu,
- 0x33u, 0x4au, 0x34u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0x04u, 0xdau, 0x04u, 0xabu, 0x9cu, 0x7bu, 0x02u, 0x3cu,
- 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xa9u, 0xc8u, 0x79u, 0x01u, 0x23u, 0x41u, 0x1eu, 0x88u, 0x41u, 0x00u, 0x27u,
- 0x04u, 0xaau, 0x04u, 0x9du, 0x92u, 0x88u, 0x1cu, 0x40u, 0xc0u, 0x18u, 0x03u, 0x93u, 0x00u, 0x2cu, 0x1au, 0xd0u,
- 0x00u, 0x2au, 0x18u, 0xd0u, 0x00u, 0x23u, 0x19u, 0x00u, 0x00u, 0xf0u, 0x2eu, 0xfcu, 0x02u, 0x90u, 0x01u, 0x91u,
- 0x00u, 0x2fu, 0x30u, 0xd0u, 0x29u, 0x0au, 0x28u, 0x06u, 0x00u, 0x25u, 0x03u, 0x9cu, 0x32u, 0x00u, 0x2bu, 0x00u,
- 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0xf0u, 0x20u, 0xfcu, 0x02u, 0x9au, 0x01u, 0x9bu, 0x00u, 0xf0u, 0xfcu, 0xfbu,
- 0x0eu, 0x02u, 0x00u, 0x0eu, 0x06u, 0x43u, 0x30u, 0x00u, 0x0bu, 0xb0u, 0xf0u, 0xbdu, 0x04u, 0x2cu, 0xfau, 0xd8u,
- 0x18u, 0x22u, 0x00u, 0x21u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0xfeu, 0xfcu, 0x20u, 0x00u, 0x04u, 0xa9u, 0xffu, 0xf7u,
- 0xa3u, 0xffu, 0x20u, 0x00u, 0xffu, 0xf7u, 0x8eu, 0xffu, 0x00u, 0x24u, 0xa0u, 0x42u, 0x04u, 0xd0u, 0x04u, 0xabu,
- 0x1cu, 0x79u, 0x02u, 0x3cu, 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xabu, 0x1du, 0x78u, 0x5au, 0x78u, 0x98u, 0x78u,
- 0x5fu, 0x7bu, 0x06u, 0x9bu, 0xc1u, 0xe7u, 0x32u, 0x00u, 0x3bu, 0x00u, 0x28u, 0x00u, 0x39u, 0x00u, 0x00u, 0xf0u,
- 0xf3u, 0xfbu, 0x02u, 0x9cu, 0x01u, 0x9bu, 0x62u, 0x08u, 0x01u, 0x9cu, 0xdeu, 0x07u, 0x32u, 0x43u, 0x63u, 0x08u,
- 0x80u, 0x18u, 0x59u, 0x41u, 0x23u, 0x00u, 0x02u, 0x9au, 0x00u, 0xf0u, 0xc6u, 0xfbu, 0x06u, 0x00u, 0xcau, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x30u, 0x15u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0x48u, 0xfeu,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0x0bu, 0x4au, 0xf3u, 0x18u, 0x9bu, 0x00u, 0x04u, 0x00u, 0x98u, 0x58u, 0x0fu, 0x23u,
- 0x18u, 0x40u, 0xffu, 0xf7u, 0x75u, 0xffu, 0x05u, 0x00u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x45u, 0xfeu, 0x00u, 0x28u,
- 0x05u, 0xd1u, 0x01u, 0x30u, 0xa0u, 0x40u, 0x40u, 0x08u, 0x40u, 0x19u, 0xe0u, 0x40u, 0x70u, 0xbdu, 0x02u, 0x48u,
- 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x00u, 0x12u, 0x7au, 0x00u, 0x70u, 0xb5u, 0x04u, 0x00u,
- 0x01u, 0x20u, 0x09u, 0x4eu, 0x40u, 0x42u, 0x31u, 0x68u, 0x00u, 0xf0u, 0x0au, 0xfbu, 0x05u, 0x00u, 0x30u, 0x68u,
- 0xacu, 0x42u, 0x03u, 0xd8u, 0x60u, 0x43u, 0xffu, 0xf7u, 0xd7u, 0xfdu, 0x70u, 0xbdu, 0x68u, 0x43u, 0xffu, 0xf7u,
- 0xd3u, 0xfdu, 0x64u, 0x1bu, 0xf3u, 0xe7u, 0xc0u, 0x46u, 0x28u, 0x09u, 0x00u, 0x28u, 0xfeu, 0xe7u, 0x00u, 0x00u,
- 0x02u, 0x68u, 0x0au, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x60u, 0x42u, 0x68u, 0x5au, 0x60u, 0x82u, 0x68u, 0x9au, 0x60u,
- 0xc2u, 0x68u, 0xdau, 0x60u, 0x02u, 0x69u, 0x1au, 0x61u, 0x42u, 0x69u, 0x5au, 0x61u, 0x82u, 0x69u, 0x9au, 0x61u,
- 0xc2u, 0x69u, 0xdau, 0x61u, 0xffu, 0xf7u, 0xeau, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0x08u, 0x00u, 0x28u,
- 0x05u, 0x4bu, 0x02u, 0x22u, 0x19u, 0x69u, 0x00u, 0x28u, 0x02u, 0xd0u, 0x0au, 0x43u, 0x1au, 0x61u, 0x70u, 0x47u,
- 0x91u, 0x43u, 0x19u, 0x61u, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xedu, 0x00u, 0xe0u, 0x7fu, 0xb5u, 0x27u, 0x4bu,
- 0x86u, 0x00u, 0x0du, 0x00u, 0xf4u, 0x58u, 0x04u, 0x29u, 0x01u, 0xd0u, 0x01u, 0x29u, 0x27u, 0xd1u, 0x00u, 0x20u,
- 0x0fu, 0xe0u, 0xa3u, 0x68u, 0x2bu, 0x42u, 0x0bu, 0xd1u, 0xe3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u,
- 0x02u, 0x92u, 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x23u, 0x68u, 0x98u, 0x47u, 0x1cu, 0x4bu, 0x1cu, 0x60u,
- 0x64u, 0x69u, 0x00u, 0x2cu, 0x0bu, 0xd0u, 0x1bu, 0x4bu, 0x98u, 0x42u, 0xeau, 0xd1u, 0x01u, 0x2du, 0xe8u, 0xd1u,
- 0x17u, 0x4bu, 0x18u, 0x48u, 0x1au, 0x68u, 0x18u, 0x4bu, 0x9au, 0x51u, 0x04u, 0xb0u, 0x70u, 0xbdu, 0x01u, 0x2du,
- 0xfbu, 0xd1u, 0x14u, 0x4bu, 0x98u, 0x42u, 0xf3u, 0xd0u, 0x13u, 0x4bu, 0x9cu, 0x51u, 0xf5u, 0xe7u, 0x02u, 0x29u,
- 0x15u, 0xd0u, 0x26u, 0x00u, 0x64u, 0x69u, 0x00u, 0x2cu, 0xfbu, 0xd1u, 0x00u, 0x20u, 0x00u, 0x2eu, 0xecu, 0xd0u,
- 0xb3u, 0x68u, 0x2bu, 0x42u, 0x09u, 0xd1u, 0xf3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u, 0x02u, 0x92u,
- 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x33u, 0x68u, 0x98u, 0x47u, 0x36u, 0x69u, 0xeeu, 0xe7u, 0x04u, 0x4bu,
- 0x1bu, 0x68u, 0x18u, 0x1eu, 0xd9u, 0xd0u, 0x1eu, 0x69u, 0xe7u, 0xe7u, 0xc0u, 0x46u, 0x58u, 0x10u, 0x00u, 0x28u,
- 0x54u, 0x10u, 0x00u, 0x28u, 0xffu, 0x00u, 0x42u, 0x00u, 0x40u, 0x10u, 0x00u, 0x28u, 0x80u, 0x23u, 0x03u, 0x4au,
- 0x5bu, 0x01u, 0xd0u, 0x58u, 0x80u, 0x06u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0xf2u, 0xffu, 0x00u, 0x28u, 0x30u, 0xd0u, 0x19u, 0x4du, 0x6bu, 0x68u,
- 0x00u, 0x2bu, 0x17u, 0xd1u, 0xffu, 0xf7u, 0x41u, 0xfdu, 0x6bu, 0x68u, 0x04u, 0x00u, 0x00u, 0x2bu, 0x1fu, 0xd1u,
- 0x04u, 0x23u, 0x15u, 0x4au, 0x11u, 0x69u, 0x0bu, 0x43u, 0x13u, 0x61u, 0x01u, 0x2eu, 0x1du, 0xd0u, 0x30u, 0xbfu,
- 0x20u, 0x00u, 0x00u, 0x24u, 0xffu, 0xf7u, 0x35u, 0xfdu, 0x6bu, 0x68u, 0x08u, 0x21u, 0xa3u, 0x42u, 0x0bu, 0xd1u,
- 0x20u, 0x00u, 0x70u, 0xbdu, 0x01u, 0x21u, 0x08u, 0x00u, 0xffu, 0xf7u, 0x78u, 0xffu, 0x04u, 0x1eu, 0xe1u, 0xd0u,
- 0x6bu, 0x68u, 0x02u, 0x21u, 0x00u, 0x2bu, 0xf3u, 0xd0u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6fu, 0xffu, 0xefu, 0xe7u,
- 0x04u, 0x21u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6au, 0xffu, 0xdau, 0xe7u, 0x20u, 0xbfu, 0xe0u, 0xe7u, 0x03u, 0x4cu,
- 0xe6u, 0xe7u, 0xc0u, 0x46u, 0x58u, 0x10u, 0x00u, 0x28u, 0x00u, 0xedu, 0x00u, 0xe0u, 0xffu, 0x00u, 0x42u, 0x00u,
- 0x03u, 0x21u, 0x06u, 0x4bu, 0x1au, 0x6cu, 0x8au, 0x43u, 0x11u, 0x00u, 0x01u, 0x22u, 0x0au, 0x43u, 0x1au, 0x64u,
- 0x02u, 0x22u, 0x19u, 0x6cu, 0x0au, 0x43u, 0x1au, 0x64u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0xc0u, 0x26u, 0x40u,
- 0x10u, 0xb5u, 0x62u, 0xb6u, 0x09u, 0x49u, 0x00u, 0x20u, 0x00u, 0xf0u, 0x28u, 0xf9u, 0xfau, 0x20u, 0x80u, 0x00u,
- 0xffu, 0xf7u, 0x04u, 0xffu, 0x01u, 0x20u, 0x06u, 0x49u, 0x00u, 0xf0u, 0x20u, 0xf9u, 0x01u, 0x20u, 0xffu, 0xf7u,
- 0x2fu, 0xffu, 0x00u, 0x20u, 0xffu, 0xf7u, 0x9cu, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x10u,
- 0x00u, 0x00u, 0x28u, 0x10u, 0xfeu, 0xe7u, 0x70u, 0x47u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xfcu, 0xffu, 0x10u, 0xbdu,
- 0x70u, 0xb5u, 0x11u, 0x4bu, 0x11u, 0x48u, 0x83u, 0x42u, 0x11u, 0xd3u, 0x00u, 0x20u, 0x10u, 0x4bu, 0x11u, 0x49u,
- 0x8bu, 0x42u, 0x17u, 0xd3u, 0xffu, 0xf7u, 0x8eu, 0xfcu, 0x1cu, 0x68u, 0x91u, 0x00u, 0x64u, 0x58u, 0x5du, 0x68u,
- 0x01u, 0x32u, 0x6cu, 0x50u, 0x99u, 0x68u, 0x8au, 0x42u, 0xf6u, 0xd3u, 0x0cu, 0x33u, 0xebu, 0xe7u, 0x00u, 0x22u,
- 0xf8u, 0xe7u, 0x1du, 0x68u, 0x94u, 0x00u, 0x60u, 0x51u, 0x01u, 0x32u, 0x5cu, 0x68u, 0xa2u, 0x42u, 0xf8u, 0xd3u,
- 0x08u, 0x33u, 0xe5u, 0xe7u, 0x00u, 0x22u, 0xf8u, 0xe7u, 0xc8u, 0x20u, 0x00u, 0x10u, 0xd4u, 0x20u, 0x00u, 0x10u,
- 0xd4u, 0x20u, 0x00u, 0x10u, 0xdcu, 0x20u, 0x00u, 0x10u, 0xbcu, 0x21u, 0x00u, 0x23u, 0x10u, 0xb5u, 0x05u, 0x4au,
- 0x05u, 0x4cu, 0xffu, 0x31u, 0x98u, 0x00u, 0x01u, 0x33u, 0x14u, 0x50u, 0x8bu, 0x42u, 0xfau, 0xd1u, 0x03u, 0x4bu,
- 0x1au, 0x60u, 0x10u, 0xbdu, 0x30u, 0x09u, 0x00u, 0x28u, 0x95u, 0x07u, 0x00u, 0x10u, 0x10u, 0x09u, 0x00u, 0x28u,
- 0x70u, 0x47u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x86u, 0xfeu, 0x0du, 0x4cu, 0x60u, 0x60u,
- 0xa0u, 0x60u, 0x02u, 0x20u, 0xffu, 0xf7u, 0x80u, 0xfeu, 0x65u, 0x68u, 0x0bu, 0x4bu, 0xe0u, 0x60u, 0x25u, 0x61u,
- 0xe8u, 0x18u, 0x0au, 0x49u, 0x00u, 0xf0u, 0xacu, 0xf9u, 0xfau, 0x21u, 0x09u, 0x4bu, 0x60u, 0x61u, 0x89u, 0x00u,
- 0xe8u, 0x18u, 0x00u, 0xf0u, 0xa5u, 0xf9u, 0xa0u, 0x61u, 0x00u, 0x20u, 0xffu, 0xf7u, 0x6du, 0xfeu, 0xe0u, 0x61u,
- 0x70u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0x09u, 0x00u, 0x28u, 0x3fu, 0x42u, 0x0fu, 0x00u, 0x40u, 0x42u, 0x0fu, 0x00u,
- 0xe7u, 0x03u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x00u, 0x24u, 0x00u, 0x25u, 0x25u, 0x4bu, 0x25u, 0x4au, 0x59u, 0x1eu,
- 0xffu, 0x39u, 0x8au, 0x42u, 0x3fu, 0xd3u, 0x00u, 0x20u, 0x00u, 0x21u, 0x23u, 0x4au, 0x93u, 0x42u, 0x3cu, 0xd9u,
- 0x98u, 0x22u, 0x22u, 0x4bu, 0x52u, 0x01u, 0x99u, 0x58u, 0x21u, 0x48u, 0xffu, 0x25u, 0x01u, 0x40u, 0x99u, 0x50u,
- 0x9cu, 0x21u, 0x49u, 0x01u, 0x5au, 0x58u, 0x1fu, 0x4cu, 0x02u, 0x40u, 0x5au, 0x50u, 0x1eu, 0x4au, 0x20u, 0x00u,
- 0x92u, 0x08u, 0x2au, 0x40u, 0x1du, 0x49u, 0x92u, 0x00u, 0x01u, 0xf0u, 0x04u, 0xfbu, 0x40u, 0x21u, 0x1cu, 0x4bu,
- 0xc0u, 0x22u, 0x9cu, 0x60u, 0x0bu, 0x68u, 0x92u, 0x00u, 0x23u, 0x64u, 0x44u, 0x23u, 0x1bu, 0x68u, 0x63u, 0x64u,
- 0x18u, 0x4bu, 0x98u, 0x58u, 0xa8u, 0x43u, 0x01u, 0x43u, 0x99u, 0x50u, 0x99u, 0x58u, 0x16u, 0x48u, 0x01u, 0x40u,
- 0x99u, 0x50u, 0x01u, 0x22u, 0x1au, 0x60u, 0x92u, 0x18u, 0x1au, 0x60u, 0xffu, 0xf7u, 0x85u, 0xffu, 0xffu, 0xf7u,
- 0x27u, 0xffu, 0x12u, 0x4au, 0x13u, 0x68u, 0x5bu, 0x00u, 0x5bu, 0x08u, 0x13u, 0x60u, 0xffu, 0xf7u, 0x90u, 0xffu,
- 0xffu, 0xf7u, 0x90u, 0xffu, 0x70u, 0xbdu, 0x30u, 0xc2u, 0xbbu, 0xe7u, 0x03u, 0xc3u, 0xbeu, 0xe7u, 0xc0u, 0x46u,
- 0x00u, 0x00u, 0x02u, 0x28u, 0x00u, 0x08u, 0x00u, 0x28u, 0xffu, 0xffu, 0x0bu, 0x28u, 0x00u, 0x00u, 0x20u, 0x40u,
- 0xffu, 0xffu, 0xf7u, 0xffu, 0x00u, 0x08u, 0x00u, 0x28u, 0x80u, 0x00u, 0x00u, 0x10u, 0x00u, 0x00u, 0x00u, 0x10u,
- 0x00u, 0xedu, 0x00u, 0xe0u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0xffu, 0x00u, 0xffu, 0xffu, 0x00u, 0xc0u, 0x26u, 0x40u,
- 0x03u, 0x1eu, 0x06u, 0xd1u, 0x90u, 0x23u, 0x06u, 0x4au, 0x5bu, 0x01u, 0xd0u, 0x58u, 0x03u, 0x23u, 0x18u, 0x40u,
- 0x70u, 0x47u, 0x00u, 0x20u, 0x01u, 0x2bu, 0xfbu, 0xd1u, 0x01u, 0x4au, 0x02u, 0x4bu, 0xf5u, 0xe7u, 0xc0u, 0x46u,
- 0x00u, 0x00u, 0x20u, 0x40u, 0x10u, 0x12u, 0x00u, 0x00u, 0x00u, 0x28u, 0x0du, 0xd1u, 0x90u, 0x20u, 0x0eu, 0x4bu,
- 0x40u, 0x01u, 0x1au, 0x58u, 0x0du, 0x49u, 0x11u, 0x40u, 0x0du, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x22u,
- 0x59u, 0x68u, 0x11u, 0x42u, 0xfcu, 0xd0u, 0x70u, 0x47u, 0x01u, 0x28u, 0xfcu, 0xd1u, 0x09u, 0x48u, 0x06u, 0x4bu,
- 0x06u, 0x49u, 0x1au, 0x58u, 0x11u, 0x40u, 0x06u, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x22u, 0x06u, 0x48u,
- 0x19u, 0x58u, 0x11u, 0x42u, 0xfcu, 0xd0u, 0xeeu, 0xe7u, 0x00u, 0x00u, 0x20u, 0x40u, 0xfcu, 0xffu, 0x00u, 0x00u,
- 0x01u, 0x00u, 0xfau, 0x05u, 0x10u, 0x12u, 0x00u, 0x00u, 0x04u, 0x04u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x04u, 0x00u,
- 0x0du, 0x00u, 0xffu, 0xf7u, 0xcau, 0xfbu, 0x06u, 0x00u, 0x20u, 0x00u, 0xffu, 0xf7u, 0xb9u, 0xffu, 0x03u, 0x28u,
- 0x02u, 0xd1u, 0x20u, 0x00u, 0xffu, 0xf7u, 0xc8u, 0xffu, 0x80u, 0x23u, 0x1bu, 0x49u, 0x1bu, 0x4au, 0x1bu, 0x06u,
- 0x88u, 0x58u, 0x03u, 0x43u, 0x8bu, 0x50u, 0x00u, 0x2cu, 0x16u, 0xd1u, 0x80u, 0x22u, 0x90u, 0x20u, 0x18u, 0x4bu,
- 0x92u, 0x00u, 0x9du, 0x50u, 0x40u, 0x01u, 0x1au, 0x58u, 0x16u, 0x49u, 0x11u, 0x40u, 0x16u, 0x4au, 0x0au, 0x43u,
- 0x10u, 0x21u, 0x1au, 0x50u, 0x5au, 0x68u, 0x0au, 0x42u, 0xfcu, 0xd0u, 0xdau, 0x68u, 0x8au, 0x43u, 0xdau, 0x60u,
- 0x30u, 0x00u, 0xffu, 0xf7u, 0xa6u, 0xfbu, 0x70u, 0xbdu, 0x01u, 0x2cu, 0xf9u, 0xd1u, 0xc0u, 0x22u, 0x0cu, 0x4bu,
- 0x0eu, 0x48u, 0xd2u, 0x00u, 0x9du, 0x50u, 0x1au, 0x58u, 0x0au, 0x49u, 0x11u, 0x40u, 0x0au, 0x4au, 0x0au, 0x43u,
- 0x1au, 0x50u, 0x10u, 0x20u, 0x0au, 0x49u, 0x5au, 0x58u, 0x02u, 0x42u, 0xfcu, 0xd0u, 0x09u, 0x49u, 0x5au, 0x58u,
- 0x82u, 0x43u, 0x5au, 0x50u, 0xe4u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x44u, 0x12u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x20u, 0x40u, 0xfcu, 0xffu, 0x00u, 0x00u, 0x03u, 0x00u, 0xfau, 0x05u, 0x10u, 0x12u, 0x00u, 0x00u,
- 0x04u, 0x04u, 0x00u, 0x00u, 0x0cu, 0x04u, 0x00u, 0x00u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0xc0u, 0x23u, 0x04u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x08u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x08u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x0cu, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u,
- 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x10u, 0x21u, 0x04u, 0x4au,
- 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u,
- 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u,
- 0x20u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x14u, 0x11u, 0x20u, 0x40u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0xc0u, 0x23u, 0x40u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x18u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x80u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x1cu, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0x00u, 0x22u, 0x43u, 0x08u, 0x8bu, 0x42u, 0x74u, 0xd3u, 0x03u, 0x09u, 0x8bu, 0x42u, 0x5fu, 0xd3u, 0x03u, 0x0au,
- 0x8bu, 0x42u, 0x44u, 0xd3u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x28u, 0xd3u, 0x03u, 0x0cu, 0x8bu, 0x42u, 0x0du, 0xd3u,
- 0xffu, 0x22u, 0x09u, 0x02u, 0x12u, 0xbau, 0x03u, 0x0cu, 0x8bu, 0x42u, 0x02u, 0xd3u, 0x12u, 0x12u, 0x09u, 0x02u,
- 0x65u, 0xd0u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x19u, 0xd3u, 0x00u, 0xe0u, 0x09u, 0x0au, 0xc3u, 0x0bu, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0xcbu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x03u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0x03u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xc3u, 0x0au, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0xcbu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x02u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0x03u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xcdu, 0xd2u, 0xc3u, 0x09u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0x8bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x01u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0x03u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xc3u, 0x08u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0x8bu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x00u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0x41u, 0x1au, 0x00u, 0xd2u, 0x01u, 0x46u, 0x52u, 0x41u, 0x10u, 0x46u, 0x70u, 0x47u, 0xffu, 0xe7u,
- 0x01u, 0xb5u, 0x00u, 0x20u, 0x00u, 0xf0u, 0x06u, 0xf8u, 0x02u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x29u, 0xf7u, 0xd0u,
- 0x76u, 0xe7u, 0x70u, 0x47u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x2bu, 0x11u, 0xd1u, 0x00u, 0x2au, 0x0fu, 0xd1u,
- 0x00u, 0x29u, 0x00u, 0xd1u, 0x00u, 0x28u, 0x02u, 0xd0u, 0x00u, 0x21u, 0xc9u, 0x43u, 0x08u, 0x00u, 0x07u, 0xb4u,
- 0x02u, 0x48u, 0x02u, 0xa1u, 0x40u, 0x18u, 0x02u, 0x90u, 0x03u, 0xbdu, 0xc0u, 0x46u, 0xd9u, 0xffu, 0xffu, 0xffu,
- 0x03u, 0xb4u, 0x68u, 0x46u, 0x01u, 0xb5u, 0x02u, 0x98u, 0x00u, 0xf0u, 0x34u, 0xf8u, 0x01u, 0x9bu, 0x9eu, 0x46u,
- 0x02u, 0xb0u, 0x0cu, 0xbcu, 0x70u, 0x47u, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u,
- 0x07u, 0x00u, 0x99u, 0x46u, 0x3bu, 0x0cu, 0x9cu, 0x46u, 0x13u, 0x04u, 0x1bu, 0x0cu, 0x1du, 0x00u, 0x0eu, 0x00u,
- 0x61u, 0x46u, 0x00u, 0x04u, 0x14u, 0x0cu, 0x00u, 0x0cu, 0x45u, 0x43u, 0x4bu, 0x43u, 0x60u, 0x43u, 0x61u, 0x43u,
- 0xc0u, 0x18u, 0x2cu, 0x0cu, 0x20u, 0x18u, 0x8cu, 0x46u, 0x83u, 0x42u, 0x03u, 0xd9u, 0x80u, 0x23u, 0x5bu, 0x02u,
- 0x98u, 0x46u, 0xc4u, 0x44u, 0x49u, 0x46u, 0x79u, 0x43u, 0x72u, 0x43u, 0x03u, 0x0cu, 0x63u, 0x44u, 0x2du, 0x04u,
- 0x2du, 0x0cu, 0xc9u, 0x18u, 0x00u, 0x04u, 0x40u, 0x19u, 0x89u, 0x18u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u,
- 0xf0u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0x57u, 0x46u, 0x4eu, 0x46u, 0x45u, 0x46u, 0xdeu, 0x46u, 0xe0u, 0xb5u,
- 0x04u, 0x00u, 0x0du, 0x00u, 0x92u, 0x46u, 0x99u, 0x46u, 0x83u, 0xb0u, 0x8bu, 0x42u, 0x30u, 0xd8u, 0x2du, 0xd0u,
- 0x49u, 0x46u, 0x50u, 0x46u, 0x01u, 0xf0u, 0x58u, 0xf8u, 0x29u, 0x00u, 0x06u, 0x00u, 0x20u, 0x00u, 0x01u, 0xf0u,
- 0x53u, 0xf8u, 0x33u, 0x1au, 0x98u, 0x46u, 0x20u, 0x3bu, 0x9bu, 0x46u, 0x33u, 0xd4u, 0x5au, 0x46u, 0x53u, 0x46u,
- 0x93u, 0x40u, 0x42u, 0x46u, 0x1fu, 0x00u, 0x53u, 0x46u, 0x93u, 0x40u, 0x1eu, 0x00u, 0xafu, 0x42u, 0x3au, 0xd8u,
- 0xafu, 0x42u, 0x00u, 0xd1u, 0x78u, 0xe0u, 0x5bu, 0x46u, 0xa4u, 0x1bu, 0xbdu, 0x41u, 0x00u, 0x2bu, 0x00u, 0xdau,
- 0x75u, 0xe0u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x01u, 0x23u, 0x5au, 0x46u, 0x93u, 0x40u,
- 0x01u, 0x93u, 0x01u, 0x23u, 0x42u, 0x46u, 0x93u, 0x40u, 0x00u, 0x93u, 0x28u, 0xe0u, 0x82u, 0x42u, 0xcfu, 0xd9u,
- 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x0cu, 0x9bu, 0x00u, 0x2bu, 0x01u, 0xd0u, 0x1cu, 0x60u,
- 0x5du, 0x60u, 0x00u, 0x98u, 0x01u, 0x99u, 0x03u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u,
- 0xa0u, 0x46u, 0xf0u, 0xbdu, 0x42u, 0x46u, 0x20u, 0x23u, 0x9bu, 0x1au, 0x52u, 0x46u, 0xdau, 0x40u, 0x41u, 0x46u,
- 0x13u, 0x00u, 0x4au, 0x46u, 0x8au, 0x40u, 0x17u, 0x00u, 0x42u, 0x46u, 0x1fu, 0x43u, 0x53u, 0x46u, 0x93u, 0x40u,
- 0x1eu, 0x00u, 0xafu, 0x42u, 0xc4u, 0xd9u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x43u, 0x46u,
- 0x00u, 0x2bu, 0xd9u, 0xd0u, 0xfbu, 0x07u, 0x72u, 0x08u, 0x1au, 0x43u, 0x46u, 0x46u, 0x7bu, 0x08u, 0x0eu, 0xe0u,
- 0xabu, 0x42u, 0x01u, 0xd1u, 0xa2u, 0x42u, 0x0cu, 0xd8u, 0xa4u, 0x1au, 0x9du, 0x41u, 0x01u, 0x20u, 0x24u, 0x19u,
- 0x6du, 0x41u, 0x00u, 0x21u, 0x01u, 0x3eu, 0x24u, 0x18u, 0x4du, 0x41u, 0x00u, 0x2eu, 0x06u, 0xd0u, 0xabu, 0x42u,
- 0xeeu, 0xd9u, 0x01u, 0x3eu, 0x24u, 0x19u, 0x6du, 0x41u, 0x00u, 0x2eu, 0xf8u, 0xd1u, 0x00u, 0x98u, 0x01u, 0x99u,
- 0x5bu, 0x46u, 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0x2bu, 0x24u, 0xdbu, 0x2bu, 0x00u, 0x5au, 0x46u, 0x44u, 0x46u,
- 0xd3u, 0x40u, 0x2au, 0x00u, 0xe2u, 0x40u, 0x1cu, 0x00u, 0x5bu, 0x46u, 0x15u, 0x00u, 0x00u, 0x2bu, 0x2au, 0xdbu,
- 0x26u, 0x00u, 0x9eu, 0x40u, 0x33u, 0x00u, 0x26u, 0x00u, 0x47u, 0x46u, 0xbeu, 0x40u, 0x32u, 0x00u, 0x80u, 0x1au,
- 0x99u, 0x41u, 0x00u, 0x90u, 0x01u, 0x91u, 0x9fu, 0xe7u, 0xa3u, 0x42u, 0xbcu, 0xd8u, 0x83u, 0xe7u, 0x42u, 0x46u,
- 0x20u, 0x23u, 0x00u, 0x21u, 0x9bu, 0x1au, 0x00u, 0x22u, 0x00u, 0x91u, 0x01u, 0x92u, 0x01u, 0x22u, 0xdau, 0x40u,
- 0x01u, 0x92u, 0x86u, 0xe7u, 0x42u, 0x46u, 0x20u, 0x23u, 0x9bu, 0x1au, 0x2au, 0x00u, 0x46u, 0x46u, 0x9au, 0x40u,
- 0x23u, 0x00u, 0xf3u, 0x40u, 0x44u, 0x46u, 0x13u, 0x43u, 0x2au, 0x00u, 0xe2u, 0x40u, 0x1cu, 0x00u, 0x5bu, 0x46u,
- 0x15u, 0x00u, 0x00u, 0x2bu, 0xd4u, 0xdau, 0x42u, 0x46u, 0x2fu, 0x00u, 0x20u, 0x23u, 0x26u, 0x00u, 0x97u, 0x40u,
- 0x9bu, 0x1au, 0xdeu, 0x40u, 0x3bu, 0x00u, 0x33u, 0x43u, 0xcdu, 0xe7u, 0xc0u, 0x46u, 0x03u, 0x68u, 0x5au, 0x00u,
- 0x04u, 0xd5u, 0x80u, 0x22u, 0x12u, 0x06u, 0x13u, 0x43u, 0xc0u, 0x18u, 0x70u, 0x47u, 0x5bu, 0x00u, 0x5bu, 0x08u,
- 0xfau, 0xe7u, 0xc0u, 0x46u, 0xf8u, 0xb5u, 0x57u, 0x46u, 0x45u, 0x46u, 0xdeu, 0x46u, 0x4eu, 0x46u, 0x90u, 0x46u,
- 0xe0u, 0xb5u, 0x07u, 0x00u, 0x00u, 0x29u, 0x24u, 0xd0u, 0x4bu, 0x1eu, 0x9au, 0x46u, 0x99u, 0x46u, 0x00u, 0x23u,
- 0x9bu, 0x46u, 0x5bu, 0x46u, 0x4bu, 0x44u, 0xdcu, 0x0fu, 0xe4u, 0x18u, 0x64u, 0x10u, 0xe5u, 0x00u, 0x7eu, 0x19u,
- 0x30u, 0x00u, 0xffu, 0xf7u, 0xdbu, 0xffu, 0xa2u, 0x45u, 0x0cu, 0xd0u, 0x40u, 0x45u, 0x0cu, 0xd8u, 0x28u, 0x00u,
- 0x08u, 0x30u, 0x38u, 0x18u, 0xffu, 0xf7u, 0xd2u, 0xffu, 0x01u, 0x38u, 0x40u, 0x45u, 0x0au, 0xd2u, 0x63u, 0x1cu,
- 0x9bu, 0x46u, 0xe6u, 0xe7u, 0x40u, 0x45u, 0x05u, 0xd9u, 0xa3u, 0x45u, 0x02u, 0xd0u, 0x63u, 0x1eu, 0x99u, 0x46u,
- 0xdfu, 0xe7u, 0x00u, 0x26u, 0x30u, 0x00u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u,
- 0xf8u, 0xbdu, 0xc0u, 0x46u, 0x03u, 0x00u, 0x01u, 0x28u, 0x05u, 0xd0u, 0x02u, 0x28u, 0x07u, 0xd0u, 0x00u, 0x20u,
- 0x00u, 0x2bu, 0x02u, 0xd0u, 0x70u, 0x47u, 0x03u, 0x48u, 0xfcu, 0xe7u, 0x03u, 0x48u, 0xfau, 0xe7u, 0x03u, 0x48u,
- 0xf8u, 0xe7u, 0xc0u, 0x46u, 0x9du, 0x16u, 0x00u, 0x10u, 0x91u, 0x16u, 0x00u, 0x10u, 0xa9u, 0x16u, 0x00u, 0x10u,
- 0x30u, 0xb5u, 0x23u, 0x4bu, 0x05u, 0x00u, 0x83u, 0xb0u, 0x8cu, 0x1eu, 0x00u, 0x2bu, 0x26u, 0xd0u, 0x20u, 0x00u,
- 0x01u, 0xa9u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x1cu, 0xd0u, 0x01u, 0x99u, 0x22u, 0x00u, 0xffu, 0xf7u,
- 0xa1u, 0xffu, 0x04u, 0x1eu, 0x16u, 0xd0u, 0xffu, 0xf7u, 0x91u, 0xffu, 0x63u, 0x68u, 0xa8u, 0x64u, 0x01u, 0x2bu,
- 0x2au, 0xd0u, 0x20u, 0x1du, 0x00u, 0x2bu, 0x23u, 0xdbu, 0xffu, 0xf7u, 0x88u, 0xffu, 0x00u, 0x23u, 0xe8u, 0x64u,
- 0x2bu, 0x65u, 0x03u, 0x68u, 0x00u, 0x2bu, 0x0fu, 0xdbu, 0xffu, 0xf7u, 0x80u, 0xffu, 0x28u, 0x61u, 0x00u, 0x20u,
- 0x03u, 0xb0u, 0x30u, 0xbdu, 0x00u, 0x23u, 0x09u, 0x20u, 0x2bu, 0x61u, 0xf9u, 0xe7u, 0x0du, 0x48u, 0x0eu, 0x49u,
- 0x09u, 0x1au, 0xc9u, 0x10u, 0x01u, 0x91u, 0xd9u, 0xe7u, 0x18u, 0x01u, 0x00u, 0x0fu, 0xffu, 0xf7u, 0xb2u, 0xffu,
- 0x28u, 0x61u, 0x43u, 0x1eu, 0x98u, 0x41u, 0x08u, 0x23u, 0x40u, 0x42u, 0x98u, 0x43u, 0x09u, 0x30u, 0xe7u, 0xe7u,
- 0x01u, 0x23u, 0xe8u, 0x64u, 0x2bu, 0x65u, 0xdcu, 0xe7u, 0x00u, 0x23u, 0x05u, 0x20u, 0x2bu, 0x61u, 0xdfu, 0xe7u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0xf0u, 0x1fu, 0x00u, 0x10u, 0xc8u, 0x20u, 0x00u, 0x10u, 0x03u, 0x68u, 0x10u, 0xb5u,
- 0x04u, 0x00u, 0xdau, 0x07u, 0x05u, 0xd4u, 0x9bu, 0x07u, 0x0au, 0xd5u, 0x48u, 0x30u, 0x00u, 0xf0u, 0x80u, 0xfcu,
- 0x23u, 0x68u, 0x5au, 0x07u, 0x0au, 0xd5u, 0x1au, 0x07u, 0x0fu, 0xd5u, 0xdbu, 0x06u, 0x15u, 0xd5u, 0x10u, 0xbdu,
- 0x48u, 0x30u, 0x00u, 0xf0u, 0x71u, 0xfcu, 0x23u, 0x68u, 0x5au, 0x07u, 0xf4u, 0xd4u, 0x20u, 0x00u, 0xd0u, 0x30u,
- 0x00u, 0xf0u, 0x72u, 0xfcu, 0x23u, 0x68u, 0x1au, 0x07u, 0xefu, 0xd4u, 0x20u, 0x00u, 0x51u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0xf0u, 0x6eu, 0xfcu, 0x23u, 0x68u, 0xdbu, 0x06u, 0xe9u, 0xd4u, 0x20u, 0x00u, 0xd1u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0xf0u, 0x6au, 0xfcu, 0xe3u, 0xe7u, 0xc0u, 0x46u, 0x09u, 0x20u, 0x70u, 0x47u, 0x03u, 0x00u, 0x00u, 0x68u,
- 0x00u, 0x28u, 0x00u, 0xd0u, 0xc0u, 0x18u, 0x70u, 0x47u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0xb5u, 0x04u, 0x00u,
- 0x0du, 0x00u, 0x20u, 0x00u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0x73u, 0xffu, 0x00u, 0x28u, 0x11u, 0xd1u, 0x2bu, 0x6cu,
- 0x2au, 0x00u, 0x63u, 0x61u, 0x21u, 0x00u, 0x01u, 0x20u, 0x23u, 0x69u, 0x98u, 0x47u, 0x08u, 0x28u, 0xf0u, 0xd0u,
- 0x07u, 0x28u, 0x06u, 0xd1u, 0x00u, 0x20u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0xe6u, 0xffu, 0x28u, 0x1du, 0x00u, 0xf0u,
- 0x1du, 0xfcu, 0x00u, 0xf0u, 0xadu, 0xfeu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u,
- 0xc3u, 0x68u, 0x30u, 0x4cu, 0x98u, 0x46u, 0xa5u, 0x44u, 0x83u, 0x69u, 0x04u, 0x00u, 0x16u, 0x00u, 0x04u, 0x31u,
- 0x40u, 0x22u, 0x05u, 0xa8u, 0x99u, 0x46u, 0x00u, 0xf0u, 0xddu, 0xfeu, 0x00u, 0x23u, 0x04u, 0x93u, 0x25u, 0xe0u,
- 0xf0u, 0x22u, 0x14u, 0x9bu, 0x52u, 0x00u, 0x63u, 0x61u, 0x04u, 0xa9u, 0x7cu, 0xa8u, 0x03u, 0x93u, 0x00u, 0xf0u,
- 0xd1u, 0xfeu, 0x21u, 0x00u, 0x28u, 0x00u, 0x23u, 0x69u, 0x7cu, 0xaau, 0x98u, 0x47u, 0x8au, 0x9bu, 0x05u, 0x00u,
- 0x03u, 0x93u, 0x15u, 0x93u, 0x4bu, 0x46u, 0x01u, 0x93u, 0x04u, 0xabu, 0x00u, 0x93u, 0x22u, 0x00u, 0x23u, 0x00u,
- 0x31u, 0x00u, 0x01u, 0x20u, 0xc0u, 0x47u, 0x00u, 0x28u, 0x22u, 0xd1u, 0xf0u, 0x22u, 0x7cu, 0xa9u, 0x52u, 0x00u,
- 0x04u, 0xa8u, 0x00u, 0xf0u, 0xb7u, 0xfeu, 0x00u, 0x26u, 0x08u, 0x2du, 0x22u, 0xd1u, 0x14u, 0x9bu, 0x20u, 0x00u,
- 0x19u, 0x00u, 0x03u, 0x93u, 0xffu, 0xf7u, 0x1cu, 0xffu, 0x09u, 0x36u, 0x07u, 0x00u, 0xf5u, 0xb2u, 0x00u, 0x28u,
- 0xceu, 0xd0u, 0x12u, 0x9bu, 0x10u, 0x21u, 0x03u, 0x93u, 0x15u, 0x93u, 0x4bu, 0x46u, 0x01u, 0x93u, 0x04u, 0xabu,
- 0x00u, 0x93u, 0x22u, 0x00u, 0x23u, 0x00u, 0x01u, 0x20u, 0x29u, 0x43u, 0xc0u, 0x47u, 0x00u, 0x28u, 0x00u, 0xd0u,
- 0x09u, 0x27u, 0x38u, 0x00u, 0xf5u, 0x23u, 0x9bu, 0x00u, 0x9du, 0x44u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u,
- 0xf0u, 0xbdu, 0x07u, 0x2du, 0xf4u, 0xd1u, 0x30u, 0x00u, 0x14u, 0x99u, 0xffu, 0xf7u, 0x7du, 0xffu, 0x05u, 0xa8u,
- 0x00u, 0xf0u, 0xb4u, 0xfbu, 0x2cu, 0xfcu, 0xffu, 0xffu, 0x40u, 0x6cu, 0x70u, 0x47u, 0x70u, 0xb5u, 0xcbu, 0x6bu,
- 0xfau, 0xb0u, 0x0bu, 0x64u, 0x05u, 0x00u, 0x0eu, 0x00u, 0x40u, 0x22u, 0x04u, 0x31u, 0x03u, 0xa8u, 0x00u, 0xf0u,
- 0x79u, 0xfeu, 0x01u, 0x23u, 0x5bu, 0x42u, 0x02u, 0x93u, 0x06u, 0xe0u, 0x29u, 0x00u, 0x2bu, 0x69u, 0x02u, 0xaau,
- 0x98u, 0x47u, 0x04u, 0x00u, 0x08u, 0x28u, 0x0au, 0xd1u, 0x12u, 0x9bu, 0x28u, 0x00u, 0x19u, 0x00u, 0x01u, 0x93u,
- 0xffu, 0xf7u, 0xd6u, 0xfeu, 0x00u, 0x28u, 0xf0u, 0xd0u, 0x09u, 0x20u, 0x7au, 0xb0u, 0x70u, 0xbdu, 0x02u, 0xa8u,
- 0xffu, 0xf7u, 0x1cu, 0xffu, 0x06u, 0x2cu, 0xf7u, 0xd1u, 0x31u, 0x00u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x4eu, 0xffu,
- 0x10u, 0xb5u, 0x82u, 0x61u, 0xdau, 0x6bu, 0xc1u, 0x60u, 0x1au, 0x64u, 0x19u, 0x00u, 0x00u, 0x22u, 0xffu, 0xf7u,
- 0x63u, 0xffu, 0x10u, 0xbdu, 0x43u, 0x69u, 0x70u, 0xb5u, 0x0bu, 0x64u, 0xc3u, 0x68u, 0x04u, 0x00u, 0x0du, 0x00u,
- 0x00u, 0x2bu, 0x13u, 0xd1u, 0x0au, 0x00u, 0x23u, 0x69u, 0x01u, 0x00u, 0x02u, 0x20u, 0x98u, 0x47u, 0x07u, 0x28u,
- 0x05u, 0xd0u, 0x08u, 0x28u, 0x0fu, 0xd1u, 0x29u, 0x00u, 0x20u, 0x00u, 0xffu, 0xf7u, 0x2fu, 0xffu, 0x00u, 0x20u,
- 0x29u, 0x6cu, 0xffu, 0xf7u, 0x29u, 0xffu, 0x28u, 0x1du, 0x00u, 0xf0u, 0x60u, 0xfbu, 0x01u, 0x22u, 0xffu, 0xf7u,
- 0x43u, 0xffu, 0x00u, 0xf0u, 0xedu, 0xfdu, 0x00u, 0xf0u, 0xebu, 0xfdu, 0xc0u, 0x46u, 0xc3u, 0x68u, 0x10u, 0xb5u,
- 0x00u, 0x2bu, 0x05u, 0xd0u, 0xcbu, 0x6bu, 0x00u, 0x22u, 0x0bu, 0x64u, 0xffu, 0xf7u, 0x35u, 0xffu, 0x10u, 0xbdu,
- 0xffu, 0xf7u, 0x9cu, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x83u, 0x68u, 0x01u, 0x00u,
- 0x10u, 0xb5u, 0x00u, 0x2bu, 0x01u, 0xd0u, 0x01u, 0x20u, 0x98u, 0x47u, 0x10u, 0xbdu, 0x01u, 0x29u, 0x15u, 0xd0u,
- 0x0au, 0xd8u, 0x00u, 0x2bu, 0x10u, 0xd1u, 0x0fu, 0x2au, 0x0eu, 0xd8u, 0x92u, 0x00u, 0x82u, 0x18u, 0x52u, 0x68u,
- 0x00u, 0x9bu, 0x00u, 0x20u, 0x1au, 0x60u, 0x06u, 0xe0u, 0x01u, 0x20u, 0x03u, 0x39u, 0xc9u, 0xb2u, 0x88u, 0x42u,
- 0x80u, 0x41u, 0x40u, 0x42u, 0x01u, 0x30u, 0x70u, 0x47u, 0x02u, 0x20u, 0xfcu, 0xe7u, 0x01u, 0x20u, 0xfau, 0xe7u,
- 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x0au, 0x00u, 0x00u, 0x93u, 0x00u, 0x21u, 0x00u, 0x23u, 0xffu, 0xf7u,
- 0xddu, 0xffu, 0x03u, 0x98u, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x01u, 0x29u, 0x15u, 0xd0u, 0x0au, 0xd8u, 0x00u, 0x2bu,
- 0x10u, 0xd1u, 0x0fu, 0x2au, 0x0eu, 0xd8u, 0x00u, 0x9bu, 0x92u, 0x00u, 0x1bu, 0x68u, 0x82u, 0x18u, 0x53u, 0x60u,
- 0x00u, 0x20u, 0x06u, 0xe0u, 0x01u, 0x20u, 0x03u, 0x39u, 0xc9u, 0xb2u, 0x88u, 0x42u, 0x80u, 0x41u, 0x40u, 0x42u,
- 0x01u, 0x30u, 0x70u, 0x47u, 0x02u, 0x20u, 0xfcu, 0xe7u, 0x01u, 0x20u, 0xfau, 0xe7u, 0x00u, 0xb5u, 0x85u, 0xb0u,
- 0x03u, 0xabu, 0x03u, 0x92u, 0x00u, 0x93u, 0x0au, 0x00u, 0x00u, 0x23u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xdcu, 0xffu,
- 0x05u, 0xb0u, 0x00u, 0xbdu, 0x70u, 0xb5u, 0x1au, 0x4cu, 0xd3u, 0x6bu, 0xa5u, 0x44u, 0x13u, 0x64u, 0x05u, 0x00u,
- 0x0cu, 0x00u, 0x19u, 0xa8u, 0x11u, 0x1du, 0x40u, 0x22u, 0x00u, 0xf0u, 0xbcu, 0xfdu, 0x01u, 0x23u, 0x5bu, 0x42u,
- 0x18u, 0x93u, 0x14u, 0xe0u, 0x0cu, 0x21u, 0x18u, 0xa8u, 0x02u, 0xaau, 0xffu, 0xf7u, 0xdfu, 0xffu, 0x21u, 0x00u,
- 0x18u, 0xa8u, 0xa8u, 0x47u, 0x00u, 0x28u, 0x12u, 0xd1u, 0x06u, 0x9bu, 0x18u, 0xaau, 0x02u, 0xa9u, 0x08u, 0x30u,
- 0x01u, 0x93u, 0x98u, 0x47u, 0x06u, 0x00u, 0x05u, 0x28u, 0x0au, 0xd0u, 0x09u, 0x28u, 0x07u, 0xd0u, 0x28u, 0x9bu,
- 0x02u, 0xa8u, 0x19u, 0x00u, 0x01u, 0x93u, 0xffu, 0xf7u, 0x0bu, 0xfeu, 0x00u, 0x28u, 0xe2u, 0xd0u, 0x09u, 0x26u,
- 0x18u, 0xa8u, 0xffu, 0xf7u, 0x53u, 0xfeu, 0x30u, 0x00u, 0x90u, 0x23u, 0x9bu, 0x00u, 0x9du, 0x44u, 0x70u, 0xbdu,
- 0xc0u, 0xfdu, 0xffu, 0xffu, 0xf0u, 0xb5u, 0x57u, 0x46u, 0x92u, 0x46u, 0x03u, 0x22u, 0x45u, 0x46u, 0x4eu, 0x46u,
- 0xdeu, 0x46u, 0x99u, 0x46u, 0x13u, 0x00u, 0xe0u, 0xb5u, 0x88u, 0x46u, 0xcdu, 0x6cu, 0x49u, 0x46u, 0x89u, 0xb0u,
- 0x03u, 0x40u, 0x00u, 0x93u, 0x08u, 0xcdu, 0x06u, 0x95u, 0x00u, 0x29u, 0x00u, 0xd1u, 0x80u, 0xe0u, 0x1au, 0x0cu,
- 0x1bu, 0x04u, 0x05u, 0x93u, 0x02u, 0x23u, 0x04u, 0xa9u, 0x0bu, 0x73u, 0xfdu, 0x33u, 0x13u, 0x40u, 0x9bu, 0x00u,
- 0x4au, 0x73u, 0xedu, 0x18u, 0x00u, 0x9bu, 0x02u, 0x2bu, 0x01u, 0xd1u, 0x43u, 0x46u, 0x9du, 0x6bu, 0x43u, 0x46u,
- 0x1bu, 0x6du, 0xdbu, 0x07u, 0x0fu, 0xd5u, 0x50u, 0x46u, 0x05u, 0xa9u, 0x00u, 0xf0u, 0x5bu, 0xfbu, 0x00u, 0x28u,
- 0x01u, 0xd1u, 0x08u, 0x20u, 0x00u, 0xe0u, 0x09u, 0x20u, 0x09u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u,
- 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0x2fu, 0x68u, 0x00u, 0x2fu, 0xecu, 0xd0u, 0x08u, 0x23u, 0x03u, 0x40u,
- 0x02u, 0x93u, 0x00u, 0x23u, 0x01u, 0x93u, 0x01u, 0x33u, 0x54u, 0x46u, 0x9bu, 0x46u, 0x46u, 0x46u, 0xbau, 0x46u,
- 0x4bu, 0x46u, 0x02u, 0x2bu, 0x49u, 0xd0u, 0x2bu, 0x88u, 0x6fu, 0x88u, 0x9au, 0x46u, 0x04u, 0x35u, 0x5au, 0x46u,
- 0x3bu, 0x00u, 0x93u, 0x43u, 0xb2u, 0x6cu, 0x0fu, 0x21u, 0x90u, 0x46u, 0x20u, 0x00u, 0x98u, 0x44u, 0xffu, 0xf7u,
- 0x3fu, 0xffu, 0x00u, 0x23u, 0x80u, 0x45u, 0x06u, 0xd8u, 0x53u, 0x46u, 0x5au, 0x46u, 0x93u, 0x43u, 0x43u, 0x44u,
- 0x98u, 0x42u, 0x9bu, 0x41u, 0x5bu, 0x42u, 0x02u, 0x22u, 0x7fu, 0x00u, 0x17u, 0x40u, 0x59u, 0x46u, 0x52u, 0x46u,
- 0x0au, 0x40u, 0x17u, 0x43u, 0x01u, 0x2fu, 0x30u, 0xd0u, 0x02u, 0x2fu, 0x4cu, 0xd0u, 0x00u, 0x2fu, 0xc2u, 0xd1u,
- 0x00u, 0x9au, 0x00u, 0x2au, 0x02u, 0xd0u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x9bu, 0xe0u, 0x04u, 0x35u, 0x2bu, 0x68u,
- 0x9au, 0x46u, 0x00u, 0x2bu, 0xccu, 0xd1u, 0x20u, 0x00u, 0x05u, 0xa9u, 0xa2u, 0x46u, 0x00u, 0xf0u, 0x0au, 0xfbu,
- 0x00u, 0x28u, 0xb0u, 0xd1u, 0x01u, 0x9bu, 0x00u, 0x2bu, 0xabu, 0xd0u, 0x0fu, 0x21u, 0x50u, 0x46u, 0xffu, 0xf7u,
- 0x0fu, 0xffu, 0x0eu, 0x21u, 0x02u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x30u, 0xffu, 0x50u, 0x46u, 0x0fu, 0x21u,
- 0x72u, 0x4au, 0xffu, 0xf7u, 0x2bu, 0xffu, 0x07u, 0x20u, 0x9eu, 0xe7u, 0x6fu, 0x68u, 0x08u, 0x35u, 0xb6u, 0xe7u,
- 0x1bu, 0x02u, 0x05u, 0x93u, 0x04u, 0xabu, 0x9au, 0x81u, 0x84u, 0xe7u, 0x00u, 0x9au, 0x00u, 0x2au, 0x49u, 0xd1u,
- 0x00u, 0x2bu, 0x16u, 0xd0u, 0x2bu, 0x68u, 0xdfu, 0x0fu, 0x6bu, 0x68u, 0x9au, 0x1cu, 0x00u, 0xd1u, 0x8au, 0xe7u,
- 0x32u, 0x00u, 0x58u, 0x32u, 0x04u, 0x92u, 0x01u, 0x33u, 0x00u, 0xd1u, 0xb6u, 0xe0u, 0x28u, 0x1du, 0xffu, 0xf7u,
- 0xcdu, 0xfdu, 0x3au, 0x00u, 0x01u, 0x00u, 0x04u, 0xabu, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u,
- 0x6cu, 0xd1u, 0x08u, 0x35u, 0xbbu, 0xe7u, 0x2au, 0x68u, 0x00u, 0x99u, 0x57u, 0x00u, 0x7fu, 0x08u, 0x00u, 0x29u,
- 0x0du, 0xd1u, 0x00u, 0x2bu, 0x04u, 0xd0u, 0x02u, 0x9bu, 0x00u, 0x2bu, 0x72u, 0xd0u, 0x00u, 0x2fu, 0x3cu, 0xd0u,
- 0x00u, 0x2au, 0x00u, 0xdau, 0x04u, 0x35u, 0x01u, 0x37u, 0xbfu, 0x00u, 0xedu, 0x19u, 0xa7u, 0xe7u, 0x33u, 0x6au,
- 0x0du, 0x21u, 0x20u, 0x00u, 0x98u, 0x46u, 0xffu, 0xf7u, 0xc3u, 0xfeu, 0x80u, 0x45u, 0x01u, 0xd0u, 0x2au, 0x68u,
- 0xeeu, 0xe7u, 0xb3u, 0x6au, 0x9du, 0x42u, 0xfau, 0xd1u, 0x00u, 0x23u, 0xf3u, 0x62u, 0x04u, 0x33u, 0x33u, 0x63u,
- 0x2bu, 0x1du, 0xb7u, 0x62u, 0x73u, 0x63u, 0x2bu, 0x68u, 0x00u, 0x2bu, 0x00u, 0xdau, 0x87u, 0xe0u, 0x01u, 0x23u,
- 0x01u, 0x93u, 0xe0u, 0xe7u, 0x0du, 0x21u, 0x20u, 0x00u, 0x37u, 0x6au, 0xffu, 0xf7u, 0xa9u, 0xfeu, 0x87u, 0x42u,
- 0xc7u, 0xd1u, 0xb3u, 0x6au, 0x9du, 0x42u, 0xc4u, 0xd1u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x28u, 0x00u, 0xffu, 0xf7u,
- 0xadu, 0xfcu, 0x0fu, 0x21u, 0x02u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0xc0u, 0xfeu, 0x50u, 0x46u, 0x42u, 0x46u,
- 0x00u, 0x21u, 0xffu, 0xf7u, 0xbbu, 0xfeu, 0x07u, 0x20u, 0x2eu, 0xe7u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x0du, 0x21u,
- 0x50u, 0x46u, 0xffu, 0xf7u, 0x8du, 0xfeu, 0x43u, 0x46u, 0x04u, 0x9au, 0x18u, 0x62u, 0x5au, 0x62u, 0x06u, 0x20u,
- 0x9du, 0x62u, 0x21u, 0xe7u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x91u, 0xfcu, 0x04u, 0x35u, 0xa2u, 0x46u, 0xb5u, 0x63u,
- 0x04u, 0x00u, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x13u, 0xe7u, 0x50u, 0x46u,
- 0x22u, 0x00u, 0x0fu, 0x21u, 0xffu, 0xf7u, 0x9au, 0xfeu, 0x07u, 0x20u, 0x0du, 0xe7u, 0xa2u, 0x46u, 0x0du, 0x21u,
- 0x04u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x6cu, 0xfeu, 0xb0u, 0x46u, 0x33u, 0x00u, 0x30u, 0x62u, 0x02u, 0x2cu,
- 0x39u, 0xd1u, 0x04u, 0x9au, 0x2cu, 0x33u, 0xf2u, 0x62u, 0x73u, 0x62u, 0x43u, 0x46u, 0x06u, 0x20u, 0x9du, 0x62u,
- 0xfau, 0xe6u, 0x2bu, 0x1du, 0x9au, 0x46u, 0x00u, 0x23u, 0x98u, 0x46u, 0x58u, 0x33u, 0x9cu, 0x46u, 0x21u, 0x00u,
- 0x4au, 0x46u, 0xb4u, 0x44u, 0x54u, 0x46u, 0xa9u, 0x46u, 0x8au, 0x46u, 0x3du, 0x00u, 0x03u, 0x92u, 0x47u, 0x46u,
- 0xe0u, 0x46u, 0x0eu, 0xe0u, 0x43u, 0x46u, 0x20u, 0x00u, 0x04u, 0x93u, 0xffu, 0xf7u, 0x2fu, 0xfdu, 0x00u, 0x22u,
- 0x01u, 0x00u, 0x04u, 0xabu, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x37u, 0x04u, 0x34u, 0x00u, 0x28u,
- 0x04u, 0xd1u, 0xafu, 0x42u, 0xeeu, 0xd1u, 0x4du, 0x46u, 0xb0u, 0x46u, 0xa8u, 0xe7u, 0x2fu, 0x00u, 0x4du, 0x46u,
- 0x03u, 0x9bu, 0x54u, 0x46u, 0x99u, 0x46u, 0x2au, 0x68u, 0x62u, 0xe7u, 0x0du, 0x21u, 0x20u, 0x00u, 0xffu, 0xf7u,
- 0x2fu, 0xfeu, 0xb0u, 0x46u, 0x30u, 0x62u, 0x43u, 0x46u, 0x04u, 0x9au, 0x5au, 0x62u, 0xc5u, 0xe7u, 0x78u, 0x1cu,
- 0x80u, 0x00u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x28u, 0x18u, 0x81u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x10u, 0xb5u, 0x00u, 0x23u, 0xffu, 0xf7u, 0x86u, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0x01u, 0x23u,
- 0xffu, 0xf7u, 0x80u, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0x02u, 0x23u, 0xffu, 0xf7u, 0x7au, 0xfeu,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u, 0x05u, 0x00u, 0x14u, 0x00u,
- 0x1eu, 0x00u, 0xc3u, 0xb0u, 0x03u, 0x29u, 0x44u, 0xd0u, 0x20u, 0xd8u, 0x00u, 0x29u, 0x49u, 0xd0u, 0x01u, 0x29u,
- 0x41u, 0xd1u, 0x13u, 0x0cu, 0x14u, 0x04u, 0x98u, 0x46u, 0x23u, 0x0cu, 0x99u, 0x46u, 0x01u, 0x2eu, 0x00u, 0xd1u,
- 0x7au, 0xe0u, 0x05u, 0x2eu, 0x37u, 0xd1u, 0x44u, 0x46u, 0x4cu, 0x44u, 0x20u, 0x2cu, 0x33u, 0xd8u, 0x43u, 0x46u,
- 0x0fu, 0x2bu, 0x00u, 0xd8u, 0xb5u, 0xe0u, 0x4cu, 0x46u, 0x00u, 0x2cu, 0x00u, 0xd0u, 0xc2u, 0xe0u, 0x4au, 0x46u,
- 0xa9u, 0x6bu, 0x20u, 0xafu, 0x00u, 0x2au, 0x22u, 0xd0u, 0x00u, 0x24u, 0x7fu, 0xe0u, 0x04u, 0x29u, 0x22u, 0xd1u,
- 0x00u, 0x2bu, 0x20u, 0xd1u, 0x10u, 0x2au, 0x1eu, 0xd8u, 0x10u, 0x22u, 0x03u, 0x68u, 0x1au, 0x42u, 0x00u, 0xd0u,
- 0xc7u, 0xe0u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x21u, 0xf9u, 0x01u, 0x26u, 0x39u, 0x00u, 0x00u, 0x23u,
- 0xaau, 0x6bu, 0x30u, 0x00u, 0x98u, 0x40u, 0x04u, 0x42u, 0x01u, 0xd0u, 0x01u, 0xcau, 0x08u, 0x60u, 0x01u, 0x33u,
- 0x04u, 0x31u, 0x04u, 0x2bu, 0xf5u, 0xd1u, 0x38u, 0x00u, 0xaau, 0x63u, 0x00u, 0xf0u, 0x0du, 0xf9u, 0x00u, 0x20u,
- 0x02u, 0xe0u, 0x03u, 0x2bu, 0x1cu, 0xd0u, 0x02u, 0x20u, 0x43u, 0xb0u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u,
- 0xf0u, 0xbdu, 0x00u, 0x2bu, 0xf7u, 0xd1u, 0x00u, 0x23u, 0x01u, 0x27u, 0x16u, 0x04u, 0x82u, 0x6bu, 0x36u, 0x0cu,
- 0x01u, 0x1du, 0x38u, 0x00u, 0x98u, 0x40u, 0x06u, 0x42u, 0x01u, 0xd0u, 0x01u, 0xcau, 0x08u, 0x60u, 0x01u, 0x33u,
- 0x04u, 0x31u, 0x10u, 0x2bu, 0xf5u, 0xd1u, 0x00u, 0x20u, 0xa3u, 0x04u, 0xe5u, 0xd4u, 0xaau, 0x63u, 0xe3u, 0xe7u,
- 0x14u, 0x04u, 0x16u, 0x0cu, 0x24u, 0x0cu, 0x33u, 0x19u, 0x10u, 0x2bu, 0xdcu, 0xd8u, 0x08u, 0x22u, 0x03u, 0x68u,
- 0x1au, 0x42u, 0x00u, 0xd0u, 0x8cu, 0xe0u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0xdbu, 0xf8u, 0xf6u, 0x00u,
- 0xabu, 0x6bu, 0x00u, 0x2cu, 0x0au, 0xd0u, 0xf6u, 0x1au, 0xe4u, 0x00u, 0x32u, 0x1fu, 0x1cu, 0x19u, 0xbau, 0x18u,
- 0x19u, 0x00u, 0x09u, 0x68u, 0x04u, 0x33u, 0x99u, 0x50u, 0xa3u, 0x42u, 0xf9u, 0xd1u, 0x38u, 0x00u, 0xabu, 0x63u,
- 0x00u, 0xf0u, 0xc6u, 0xf8u, 0x00u, 0x20u, 0xbfu, 0xe7u, 0x43u, 0x46u, 0x4bu, 0x44u, 0x10u, 0x2bu, 0xbau, 0xd8u,
- 0x43u, 0x46u, 0x0fu, 0x2bu, 0xb7u, 0xd8u, 0x2bu, 0x68u, 0x1eu, 0x42u, 0x06u, 0xd0u, 0x03u, 0x22u, 0x28u, 0x00u,
- 0x93u, 0x43u, 0x2bu, 0x60u, 0x48u, 0x30u, 0x00u, 0xf0u, 0xa9u, 0xf8u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u,
- 0xa5u, 0xf8u, 0x4au, 0x46u, 0x00u, 0x24u, 0xa9u, 0x6bu, 0x00u, 0x2au, 0x61u, 0xd0u, 0x43u, 0x46u, 0xdbu, 0x00u,
- 0xffu, 0x18u, 0x00u, 0x23u, 0xd2u, 0x00u, 0xc8u, 0x58u, 0xf8u, 0x50u, 0x04u, 0x33u, 0x9au, 0x42u, 0xfau, 0xd1u,
- 0x89u, 0x18u, 0x00u, 0x2cu, 0x0fu, 0xd0u, 0x6fu, 0x46u, 0x40u, 0x46u, 0x10u, 0x28u, 0x00u, 0xd2u, 0x10u, 0x20u,
- 0x00u, 0x23u, 0x10u, 0x38u, 0xc0u, 0x00u, 0x38u, 0x18u, 0xe2u, 0x00u, 0xcfu, 0x58u, 0xc7u, 0x50u, 0x04u, 0x33u,
- 0x93u, 0x42u, 0xfau, 0xd1u, 0xc9u, 0x18u, 0x01u, 0x2eu, 0x41u, 0xd0u, 0x43u, 0x46u, 0xa9u, 0x63u, 0x0fu, 0x2bu,
- 0x45u, 0xd9u, 0x00u, 0x2cu, 0x00u, 0xd1u, 0x7au, 0xe7u, 0x68u, 0x46u, 0x00u, 0xf0u, 0x7du, 0xf8u, 0x00u, 0x20u,
- 0x7au, 0xe7u, 0x10u, 0x2cu, 0x46u, 0xd9u, 0x10u, 0x3cu, 0x01u, 0x22u, 0x2bu, 0x68u, 0x1au, 0x42u, 0x07u, 0xd0u,
- 0x93u, 0x43u, 0x02u, 0x22u, 0x28u, 0x00u, 0x13u, 0x43u, 0x2bu, 0x60u, 0x48u, 0x30u, 0x00u, 0xf0u, 0x6au, 0xf8u,
- 0x00u, 0x2cu, 0x39u, 0xd0u, 0x04u, 0x22u, 0x2bu, 0x68u, 0x1au, 0x42u, 0x2cu, 0xd1u, 0x43u, 0x46u, 0x0fu, 0x2bu,
- 0x03u, 0xd8u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x5du, 0xf8u, 0x6fu, 0x46u, 0x38u, 0x00u, 0x00u, 0xf0u,
- 0x5du, 0xf8u, 0x10u, 0x22u, 0x43u, 0x46u, 0xa9u, 0x6bu, 0xd2u, 0x1au, 0x00u, 0x2au, 0xbcu, 0xddu, 0x20u, 0xafu,
- 0xacu, 0xe7u, 0x93u, 0x43u, 0x03u, 0x60u, 0xd1u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x57u, 0xf8u, 0x30u, 0xe7u,
- 0x93u, 0x43u, 0x03u, 0x60u, 0x51u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x4cu, 0xf8u, 0x6bu, 0xe7u, 0x20u, 0xafu,
- 0x04u, 0x31u, 0x38u, 0x00u, 0xa9u, 0x63u, 0x00u, 0xf0u, 0x37u, 0xf8u, 0x00u, 0x20u, 0x3cu, 0xe7u, 0x20u, 0xa8u,
- 0x00u, 0xf0u, 0x36u, 0xf8u, 0xb5u, 0xe7u, 0x28u, 0x00u, 0x93u, 0x43u, 0x2bu, 0x60u, 0xd0u, 0x30u, 0x00u, 0xf0u,
- 0x35u, 0xf8u, 0xcbu, 0xe7u, 0x00u, 0x24u, 0xb7u, 0xe7u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x00u, 0xd9u, 0xfeu, 0xe6u,
- 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x26u, 0xf8u, 0x4au, 0x46u, 0xa9u, 0x6bu, 0x00u, 0x2au, 0x00u, 0xd0u,
- 0xfau, 0xe6u, 0x38u, 0x00u, 0x00u, 0xf0u, 0x1cu, 0xf8u, 0x00u, 0x20u, 0x1du, 0xe7u, 0x01u, 0x00u, 0x34u, 0x31u,
- 0x38u, 0xc9u, 0x04u, 0x3bu, 0x9cu, 0x46u, 0x1du, 0x60u, 0xa6u, 0x46u, 0x01u, 0x00u, 0x20u, 0x31u, 0x3cu, 0xc9u,
- 0x90u, 0x46u, 0x99u, 0x46u, 0xa2u, 0x46u, 0xabu, 0x46u, 0x01u, 0x00u, 0x08u, 0x31u, 0xfcu, 0xc9u, 0x41u, 0x68u,
- 0x00u, 0x68u, 0xe5u, 0x46u, 0x00u, 0xbdu, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u,
- 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u,
- 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x11u, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u,
- 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u,
- 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u,
- 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x2du, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u,
- 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u,
- 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u,
- 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x39u, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u,
- 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u,
- 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u,
- 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xabu, 0xffu, 0xf7u, 0xf3u, 0xfbu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u,
- 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u,
- 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u,
- 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xaau, 0xffu, 0xf7u, 0x6du, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u,
- 0x02u, 0x7au, 0x03u, 0x00u, 0x00u, 0x2au, 0x0bu, 0xd1u, 0x42u, 0x7au, 0x00u, 0x2au, 0x0fu, 0xd0u, 0x01u, 0x3au,
- 0x42u, 0x72u, 0x42u, 0x68u, 0x11u, 0x1du, 0x41u, 0x60u, 0x03u, 0x21u, 0x12u, 0x68u, 0x01u, 0x72u, 0x02u, 0xe0u,
- 0x01u, 0x3au, 0x02u, 0x72u, 0x02u, 0x68u, 0x10u, 0x0eu, 0x12u, 0x02u, 0x1au, 0x60u, 0x70u, 0x47u, 0xb0u, 0x20u,
- 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x00u, 0x93u, 0x0cu, 0x22u, 0x00u, 0x23u,
- 0x00u, 0x21u, 0xffu, 0xf7u, 0xfbu, 0xfbu, 0x03u, 0x98u, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0xf1u, 0xffu, 0x10u, 0xbdu, 0xf0u, 0xb5u, 0x4eu, 0x46u, 0x45u, 0x46u, 0x57u, 0x46u, 0xdeu, 0x46u, 0x00u, 0x23u,
- 0xe0u, 0xb5u, 0x87u, 0xb0u, 0x03u, 0x93u, 0x0fu, 0x33u, 0x98u, 0x46u, 0x08u, 0x3bu, 0x99u, 0x46u, 0x80u, 0x23u,
- 0x1bu, 0x03u, 0x05u, 0x00u, 0x0eu, 0x00u, 0x9au, 0x46u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xc1u, 0xffu, 0x04u, 0x00u,
- 0xb0u, 0x28u, 0x00u, 0xd1u, 0xc1u, 0xe0u, 0x03u, 0x06u, 0x29u, 0xd5u, 0x03u, 0x00u, 0x42u, 0x46u, 0x93u, 0x43u,
- 0xdbu, 0xb2u, 0x80u, 0x2bu, 0x53u, 0xd0u, 0x90u, 0x2bu, 0x3du, 0xd0u, 0xa0u, 0x2bu, 0x6bu, 0xd0u, 0xb0u, 0x2bu,
- 0x00u, 0xd1u, 0x7eu, 0xe0u, 0xc0u, 0x2bu, 0x00u, 0xd1u, 0x95u, 0xe0u, 0x03u, 0x00u, 0x4au, 0x46u, 0x93u, 0x43u,
- 0xdbu, 0xb2u, 0xd0u, 0x2bu, 0x0au, 0xd1u, 0x53u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x05u, 0x23u,
- 0x01u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xc6u, 0xfdu, 0x00u, 0x28u, 0xd5u, 0xd0u, 0x09u, 0x24u, 0x20u, 0x00u,
- 0x07u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0xffu, 0x23u,
- 0x82u, 0x00u, 0x13u, 0x40u, 0x1fu, 0x1du, 0x05u, 0xabu, 0x9bu, 0x46u, 0x00u, 0x93u, 0x0du, 0x22u, 0x00u, 0x23u,
- 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xa2u, 0xfbu, 0x63u, 0x06u, 0x39u, 0xd4u, 0x05u, 0x9bu, 0x9cu, 0x46u,
- 0x67u, 0x44u, 0x5bu, 0x46u, 0x05u, 0x97u, 0x00u, 0x93u, 0x00u, 0x23u, 0x0du, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0xbau, 0xfbu, 0xb0u, 0xe7u, 0x83u, 0x3bu, 0x03u, 0x40u, 0x0du, 0x2bu, 0xd6u, 0xd0u, 0x05u, 0xafu,
- 0x02u, 0x40u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x97u, 0xffu, 0xf7u, 0x87u, 0xfbu, 0x00u, 0x23u,
- 0x0du, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x97u, 0xffu, 0xf7u, 0xa6u, 0xfbu, 0x9cu, 0xe7u, 0x04u, 0x02u,
- 0x30u, 0x00u, 0xffu, 0xf7u, 0x5du, 0xffu, 0x80u, 0x27u, 0x20u, 0x43u, 0x3fu, 0x02u, 0xb8u, 0x42u, 0xbdu, 0xd0u,
- 0x04u, 0x01u, 0x00u, 0x05u, 0x02u, 0x0cu, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x7au, 0xfdu,
- 0x00u, 0x28u, 0xb3u, 0xd1u, 0x3cu, 0x42u, 0x00u, 0xd1u, 0x86u, 0xe7u, 0x01u, 0x23u, 0x03u, 0x93u, 0x83u, 0xe7u,
- 0x05u, 0x9bu, 0xdfu, 0x1bu, 0xc5u, 0xe7u, 0xffu, 0x23u, 0x4au, 0x46u, 0x1bu, 0x01u, 0x19u, 0x00u, 0x82u, 0x43u,
- 0x11u, 0x41u, 0x0au, 0x00u, 0x1au, 0x40u, 0x03u, 0x07u, 0x02u, 0xd5u, 0x80u, 0x23u, 0xdbu, 0x01u, 0x1au, 0x43u,
- 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x5du, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x6bu, 0xe7u,
- 0x94u, 0xe7u, 0xb1u, 0x28u, 0x45u, 0xd0u, 0xb2u, 0x28u, 0x00u, 0xd1u, 0x9fu, 0xe0u, 0xb3u, 0x28u, 0x55u, 0xd0u,
- 0xfcu, 0x23u, 0x03u, 0x40u, 0xb4u, 0x2bu, 0x00u, 0xd1u, 0x88u, 0xe7u, 0x4au, 0x46u, 0x53u, 0x46u, 0x02u, 0x40u,
- 0x01u, 0x32u, 0x1au, 0x43u, 0x01u, 0x21u, 0x01u, 0x23u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x43u, 0xfdu, 0x00u, 0x28u,
- 0x00u, 0xd1u, 0x51u, 0xe7u, 0x7au, 0xe7u, 0xc6u, 0x28u, 0x4bu, 0xd0u, 0xc7u, 0x28u, 0x5du, 0xd0u, 0x03u, 0x00u,
- 0x4au, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0xc0u, 0x2bu, 0x6cu, 0xd0u, 0xc8u, 0x28u, 0x71u, 0xd0u, 0xc9u, 0x28u,
- 0x00u, 0xd0u, 0x6bu, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x03u, 0xffu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u,
- 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x58u, 0xe7u, 0x03u, 0x9bu, 0x00u, 0x24u, 0x00u, 0x2bu,
- 0x00u, 0xd0u, 0x5cu, 0xe7u, 0x05u, 0xaeu, 0x0eu, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x96u, 0xffu, 0xf7u,
- 0x0du, 0xfbu, 0x00u, 0x23u, 0x0fu, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x96u, 0xffu, 0xf7u, 0x2cu, 0xfbu,
- 0x4du, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xe4u, 0xfeu, 0x02u, 0x1eu, 0x00u, 0xd1u, 0x46u, 0xe7u, 0x03u, 0x00u,
- 0x41u, 0x46u, 0x8bu, 0x43u, 0xdbu, 0xb2u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x3fu, 0xe7u, 0x00u, 0x21u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0x00u, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x0eu, 0xe7u, 0x37u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u,
- 0xcfu, 0xfeu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u,
- 0xa7u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xc4u, 0xfeu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u,
- 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x03u, 0x23u, 0x03u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u,
- 0xe1u, 0xfcu, 0x00u, 0x28u, 0x00u, 0xd1u, 0xefu, 0xe6u, 0x18u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xb0u, 0xfeu,
- 0x02u, 0x1eu, 0x00u, 0xd1u, 0x12u, 0xe7u, 0x03u, 0x00u, 0x41u, 0x46u, 0x8bu, 0x43u, 0xdbu, 0xb2u, 0x00u, 0x2bu,
- 0x00u, 0xd0u, 0x0bu, 0xe7u, 0x04u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xccu, 0xfcu, 0x00u, 0x28u, 0x00u, 0xd1u,
- 0xdau, 0xe6u, 0x03u, 0xe7u, 0x43u, 0x46u, 0xa0u, 0x22u, 0x1cu, 0x40u, 0x01u, 0x34u, 0x12u, 0x03u, 0x22u, 0x43u,
- 0xdau, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x94u, 0xfeu, 0x43u, 0x46u, 0x02u, 0x00u, 0x9au, 0x43u, 0xd2u, 0xb2u,
- 0x10u, 0x32u, 0x18u, 0x40u, 0x12u, 0x03u, 0x01u, 0x30u, 0x02u, 0x43u, 0xe8u, 0xe6u, 0x05u, 0xabu, 0x00u, 0x93u,
- 0x9bu, 0x46u, 0x0du, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x9fu, 0xfau, 0x30u, 0x00u,
- 0xffu, 0xf7u, 0x7eu, 0xfeu, 0x03u, 0x06u, 0x1au, 0xd5u, 0x7fu, 0x27u, 0xb0u, 0x3cu, 0x05u, 0x9bu, 0x38u, 0x40u,
- 0xa0u, 0x40u, 0x9cu, 0x46u, 0x60u, 0x44u, 0x05u, 0x90u, 0x30u, 0x00u, 0x07u, 0x34u, 0xffu, 0xf7u, 0x70u, 0xfeu,
- 0x03u, 0x06u, 0xf3u, 0xd4u, 0x81u, 0x21u, 0x7fu, 0x23u, 0x89u, 0x00u, 0x8cu, 0x46u, 0x03u, 0x40u, 0xa3u, 0x40u,
- 0x05u, 0x9au, 0x62u, 0x44u, 0x9bu, 0x18u, 0x05u, 0x93u, 0x5bu, 0x46u, 0x00u, 0x93u, 0xe4u, 0xe6u, 0x02u, 0x24u,
- 0xf0u, 0xe7u, 0xc0u, 0x46u, 0x03u, 0x00u, 0x00u, 0xb5u, 0xdau, 0x6cu, 0x85u, 0xb0u, 0x53u, 0x68u, 0x08u, 0x00u,
- 0x08u, 0x32u, 0x19u, 0x02u, 0x01u, 0x91u, 0x02u, 0x92u, 0x69u, 0x46u, 0x03u, 0x22u, 0x1bu, 0x0eu, 0x0au, 0x73u,
- 0x4bu, 0x73u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x76u, 0xfeu, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0x6du, 0xfeu, 0x80u, 0x6cu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0x67u, 0xfeu, 0xc2u, 0x6cu,
- 0xd0u, 0x79u, 0x02u, 0x30u, 0x80u, 0x00u, 0x10u, 0x18u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x1cu, 0x21u, 0x01u, 0x23u,
- 0x1bu, 0x04u, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x0cu, 0x10u, 0x39u, 0x1bu, 0x0au, 0x98u, 0x42u, 0x01u, 0xd3u,
- 0x00u, 0x0au, 0x08u, 0x39u, 0x1bu, 0x09u, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x09u, 0x04u, 0x39u, 0x02u, 0xa2u,
- 0x10u, 0x5cu, 0x40u, 0x18u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x04u, 0x03u, 0x02u, 0x02u, 0x01u, 0x01u, 0x01u, 0x01u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x29u, 0x03u, 0xd1u, 0xffu, 0xf7u,
- 0xddu, 0xffu, 0x20u, 0x30u, 0x02u, 0xe0u, 0x08u, 0x00u, 0xffu, 0xf7u, 0xd8u, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x06u, 0x20u, 0x10u, 0xb5u, 0x00u, 0xf0u, 0x7au, 0xf8u, 0x01u, 0x20u, 0x00u, 0xf0u, 0xa7u, 0xf8u, 0x00u, 0x00u,
- 0x08u, 0x4bu, 0x10u, 0xb5u, 0x04u, 0x00u, 0x00u, 0x2bu, 0x02u, 0xd0u, 0x00u, 0x21u, 0x00u, 0xe0u, 0x00u, 0xbfu,
- 0x05u, 0x4bu, 0x18u, 0x68u, 0x83u, 0x6au, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0x20u, 0x00u, 0x00u, 0xf0u,
- 0x95u, 0xf8u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u, 0xb8u, 0x1fu, 0x00u, 0x10u, 0x70u, 0xb5u, 0x00u, 0x26u,
- 0x0cu, 0x4du, 0x0du, 0x4cu, 0x64u, 0x1bu, 0xa4u, 0x10u, 0xa6u, 0x42u, 0x09u, 0xd1u, 0x00u, 0x26u, 0x00u, 0xf0u,
- 0x87u, 0xf8u, 0x0au, 0x4du, 0x0au, 0x4cu, 0x64u, 0x1bu, 0xa4u, 0x10u, 0xa6u, 0x42u, 0x05u, 0xd1u, 0x70u, 0xbdu,
- 0xb3u, 0x00u, 0xebu, 0x58u, 0x98u, 0x47u, 0x01u, 0x36u, 0xeeu, 0xe7u, 0xb3u, 0x00u, 0xebu, 0x58u, 0x98u, 0x47u,
- 0x01u, 0x36u, 0xf2u, 0xe7u, 0xe4u, 0x08u, 0x00u, 0x28u, 0xe4u, 0x08u, 0x00u, 0x28u, 0xe4u, 0x08u, 0x00u, 0x28u,
- 0xe8u, 0x08u, 0x00u, 0x28u, 0x00u, 0x23u, 0x10u, 0xb5u, 0x9au, 0x42u, 0x00u, 0xd1u, 0x10u, 0xbdu, 0xccu, 0x5cu,
- 0xc4u, 0x54u, 0x01u, 0x33u, 0xf8u, 0xe7u, 0x03u, 0x00u, 0x82u, 0x18u, 0x93u, 0x42u, 0x00u, 0xd1u, 0x70u, 0x47u,
- 0x19u, 0x70u, 0x01u, 0x33u, 0xf9u, 0xe7u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x1fu, 0x29u, 0x04u, 0xd9u,
- 0x16u, 0x23u, 0x03u, 0x60u, 0x01u, 0x20u, 0x40u, 0x42u, 0x70u, 0xbdu, 0x43u, 0x6cu, 0x00u, 0x2bu, 0x04u, 0xd0u,
- 0x8au, 0x00u, 0x9bu, 0x18u, 0x1au, 0x68u, 0x00u, 0x2au, 0x08u, 0xd1u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x32u, 0xf8u,
- 0x2au, 0x00u, 0x01u, 0x00u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x1bu, 0xf8u, 0xedu, 0xe7u, 0x00u, 0x20u, 0x01u, 0x2au,
- 0xeau, 0xd0u, 0x51u, 0x1cu, 0x03u, 0xd1u, 0x16u, 0x23u, 0x01u, 0x30u, 0x23u, 0x60u, 0xe4u, 0xe7u, 0x00u, 0x24u,
- 0x28u, 0x00u, 0x1cu, 0x60u, 0x90u, 0x47u, 0x20u, 0x00u, 0xdeu, 0xe7u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x03u, 0x4bu,
- 0x01u, 0x00u, 0x18u, 0x68u, 0xffu, 0xf7u, 0xcfu, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x80u, 0x08u, 0x00u, 0x28u,
- 0x00u, 0x23u, 0x70u, 0xb5u, 0x06u, 0x4du, 0x04u, 0x00u, 0x08u, 0x00u, 0x11u, 0x00u, 0x2bu, 0x60u, 0x00u, 0xf0u,
- 0x15u, 0xf8u, 0x43u, 0x1cu, 0x03u, 0xd1u, 0x2bu, 0x68u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x23u, 0x60u, 0x70u, 0xbdu,
- 0x6cu, 0x10u, 0x00u, 0x28u, 0x10u, 0xb5u, 0x00u, 0xf0u, 0x01u, 0xf8u, 0x10u, 0xbdu, 0x58u, 0x22u, 0x01u, 0x20u,
- 0x01u, 0x4bu, 0x40u, 0x42u, 0x1au, 0x60u, 0x70u, 0x47u, 0x6cu, 0x10u, 0x00u, 0x28u, 0x58u, 0x22u, 0x01u, 0x20u,
- 0x01u, 0x4bu, 0x40u, 0x42u, 0x1au, 0x60u, 0x70u, 0x47u, 0x6cu, 0x10u, 0x00u, 0x28u, 0xfeu, 0xe7u, 0xc0u, 0x46u,
- 0xf8u, 0xb5u, 0xc0u, 0x46u, 0xf8u, 0xbcu, 0x08u, 0xbcu, 0x9eu, 0x46u, 0x70u, 0x47u, 0xf8u, 0xb5u, 0xc0u, 0x46u,
- 0xf8u, 0xbcu, 0x08u, 0xbcu, 0x9eu, 0x46u, 0x70u, 0x47u, 0x84u, 0x08u, 0x00u, 0x28u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x74u, 0xb2u, 0x01u, 0x81u, 0xb0u, 0xabu, 0x30u, 0x80u, 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x08u, 0x01u, 0x81u,
- 0xb0u, 0xb0u, 0xabu, 0xf0u, 0x00u, 0x00u, 0x00u, 0x00u, 0x3fu, 0x02u, 0x01u, 0x81u, 0xb0u, 0xabu, 0x30u, 0x80u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x06u, 0x01u, 0x81u, 0xb0u, 0xb0u, 0xabu, 0xf0u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0xd8u, 0xe0u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x70u, 0xe1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xb0u, 0x80u,
- 0xd0u, 0xe1u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x98u, 0xefu, 0xffu, 0x7fu, 0xb0u, 0xa9u, 0x02u, 0x80u,
- 0x2cu, 0xf0u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x80u, 0xf0u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0x8cu, 0xf0u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xaau, 0x80u, 0xc0u, 0xf0u, 0xffu, 0x7fu, 0x94u, 0xffu, 0xffu, 0x7fu,
- 0x88u, 0xf1u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x84u, 0xf1u, 0xffu, 0x7fu, 0xaau, 0x3fu, 0x39u, 0x80u,
- 0xd0u, 0xf1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0xdcu, 0xf1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xaau, 0x80u,
- 0x1cu, 0xf2u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x30u, 0xf2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0x2cu, 0xf2u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x34u, 0xf2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0xc4u, 0xf2u, 0xffu, 0x7fu, 0xaau, 0x0fu, 0xb2u, 0x80u, 0x2cu, 0xf3u, 0xffu, 0x7fu, 0x50u, 0xffu, 0xffu, 0x7fu,
- 0x10u, 0xf6u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x2cu, 0xf6u, 0xffu, 0x7fu, 0x4cu, 0xffu, 0xffu, 0x7fu,
- 0x8cu, 0xf8u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xfcu, 0xf9u, 0xffu, 0x7fu, 0x00u, 0x84u, 0x04u, 0x80u,
- 0x0cu, 0xfau, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x0cu, 0xfau, 0xffu, 0x7fu, 0x38u, 0xffu, 0xffu, 0x7fu,
- 0xf4u, 0xfcu, 0xffu, 0x7fu, 0x00u, 0x84u, 0x04u, 0x80u, 0x14u, 0xfdu, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0x2cu, 0xfdu, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xdcu, 0x20u, 0x00u, 0x10u, 0x80u, 0x08u, 0x00u, 0x28u,
- 0x6cu, 0x00u, 0x00u, 0x00u, 0x1cu, 0x10u, 0x00u, 0x28u, 0x54u, 0x00u, 0x00u, 0x00u, 0x84u, 0x08u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0xa9u, 0x00u, 0x00u, 0x10u, 0x81u, 0x00u, 0x00u, 0x10u,
-};
-#endif /* defined(CY_DEVICE_TVIIBH4M) */
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/xmc7200d_cm0p_sleep.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/xmc7200d_cm0p_sleep.c
deleted file mode 100644
index 2d27402..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7xDUAL_CM0P_SLEEP/xmc7200d_cm0p_sleep.c
+++ /dev/null
@@ -1,566 +0,0 @@
-/***************************************************************************//**
-* \file xmc7200d_cm0p_sleep.c
-*
-* \brief
-* Cortex-M0+ prebuilt application image.
-*
-********************************************************************************
-* \copyright
-* Copyright (c) 2018-2021 Cypress Semiconductor Corporation (an Infineon
-* company) or an affiliate of Cypress Semiconductor Corporation
-* SPDX-License-Identifier: LicenseRef-PBL
-*
-* Licensed under the Permissive Binary License
-*******************************************************************************/
-
-#include <stdint.h>
-#include "cy_device_headers.h"
-
-#if defined(CY_DEVICE_TVIIBH8M)
-
-#if defined(__APPLE__) && defined(__clang__)
-__attribute__ ((__section__("__CY_M0P_IMAGE,__cy_m0p_image"), used))
-#elif defined(__GNUC__) || defined(__ARMCC_VERSION)
-__attribute__ ((__section__(".cy_m0p_image"), used))
-#elif defined(__ICCARM__)
-#pragma location=".cy_m0p_image"
-#else
-#error "An unsupported toolchain"
-#endif
-const uint8_t cy_m0p_image[] = {
- 0x00u, 0x00u, 0x02u, 0x28u, 0x69u, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9fu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x71u, 0x0au, 0x00u, 0x10u, 0xa5u, 0x0au, 0x00u, 0x10u,
- 0xd9u, 0x0au, 0x00u, 0x10u, 0x0du, 0x0bu, 0x00u, 0x10u, 0x41u, 0x0bu, 0x00u, 0x10u, 0x75u, 0x0bu, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x10u, 0xb5u, 0x06u, 0x4cu, 0x23u, 0x78u, 0x00u, 0x2bu, 0x07u, 0xd1u, 0x05u, 0x4bu, 0x00u, 0x2bu, 0x02u, 0xd0u,
- 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x23u, 0x23u, 0x70u, 0x10u, 0xbdu, 0x0cu, 0x12u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0xc4u, 0x1fu, 0x00u, 0x10u, 0x04u, 0x4bu, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x03u, 0xd0u,
- 0x03u, 0x49u, 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x10u, 0x12u, 0x00u, 0x28u, 0xc4u, 0x1fu, 0x00u, 0x10u, 0x40u, 0x22u, 0x92u, 0x02u, 0x9au, 0x1au, 0x92u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x17u, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd1u, 0x13u, 0x4bu, 0x9du, 0x46u, 0xffu, 0xf7u,
- 0xf3u, 0xffu, 0x00u, 0x21u, 0x8bu, 0x46u, 0x0fu, 0x46u, 0x13u, 0x48u, 0x14u, 0x4au, 0x12u, 0x1au, 0x01u, 0xf0u,
- 0xf6u, 0xfeu, 0x0eu, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0x0du, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0x00u, 0x20u, 0x00u, 0x21u, 0x04u, 0x00u, 0x0du, 0x00u, 0x0du, 0x48u, 0x00u, 0x28u, 0x02u, 0xd0u,
- 0x0cu, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0xf0u, 0xb5u, 0xfeu, 0x20u, 0x00u, 0x29u, 0x00u, 0x00u, 0xf0u,
- 0x1fu, 0xfbu, 0x01u, 0xf0u, 0x99u, 0xfeu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x99u, 0x07u, 0x00u, 0x10u, 0x00u, 0x00u, 0x02u, 0x28u, 0x0cu, 0x12u, 0x00u, 0x28u, 0x60u, 0x12u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x30u, 0x80u, 0x08u, 0x03u, 0xd0u, 0x01u, 0x30u,
- 0x02u, 0x38u, 0xfcu, 0xd1u, 0xc0u, 0x46u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xefu, 0xf3u, 0x10u, 0x80u, 0x72u, 0xb6u,
- 0x70u, 0x47u, 0x80u, 0xf3u, 0x10u, 0x88u, 0x70u, 0x47u, 0x01u, 0x20u, 0xc0u, 0x04u, 0x13u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x12u, 0x49u, 0x0au, 0x68u, 0x02u, 0x43u, 0x0au, 0x60u, 0x11u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x10u, 0x48u, 0x11u, 0x49u, 0x00u, 0x22u, 0x00u, 0x23u, 0x0cu, 0xc0u, 0x88u, 0x42u,
- 0xfcu, 0xd3u, 0x00u, 0xf0u, 0x71u, 0xfbu, 0x00u, 0xf0u, 0x03u, 0xfbu, 0xfeu, 0xe7u, 0xfeu, 0xe7u, 0x00u, 0xb5u,
- 0x04u, 0x20u, 0x71u, 0x46u, 0x08u, 0x42u, 0x02u, 0xd0u, 0xefu, 0xf3u, 0x09u, 0x80u, 0x02u, 0xe0u, 0xefu, 0xf3u,
- 0x08u, 0x80u, 0x04u, 0x30u, 0x00u, 0xf0u, 0xfcu, 0xf9u, 0xfeu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x13u, 0x20u, 0x40u,
- 0x80u, 0x13u, 0x20u, 0x40u, 0xa0u, 0x13u, 0x20u, 0x40u, 0x00u, 0xffu, 0x01u, 0x28u, 0x00u, 0x00u, 0x02u, 0x28u,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0xc0u, 0x18u, 0x03u, 0x4bu, 0x80u, 0x00u, 0xc0u, 0x58u, 0x80u, 0x06u, 0x80u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x03u, 0x00u, 0x00u, 0x20u, 0x07u, 0x2bu, 0x08u, 0xd8u,
- 0x92u, 0x22u, 0xd2u, 0x00u, 0x9bu, 0x18u, 0x03u, 0x4au, 0x9bu, 0x00u, 0x9bu, 0x58u, 0x01u, 0x30u, 0x1bu, 0x0au,
- 0x98u, 0x43u, 0x70u, 0x47u, 0x00u, 0x00u, 0x26u, 0x40u, 0x02u, 0x4bu, 0x18u, 0x69u, 0x40u, 0x07u, 0xc0u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x27u, 0x40u, 0x04u, 0x4bu, 0x05u, 0x4au, 0xd0u, 0x58u, 0x03u, 0x23u,
- 0x18u, 0x40u, 0x98u, 0x42u, 0x00u, 0xd1u, 0x02u, 0x20u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x24u, 0x15u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xefu, 0xffu, 0x00u, 0x23u, 0x02u, 0x28u, 0x01u, 0xd1u,
- 0x01u, 0x4bu, 0x1bu, 0x68u, 0x18u, 0x00u, 0x10u, 0xbdu, 0x2cu, 0x12u, 0x00u, 0x28u, 0x09u, 0x4au, 0x83u, 0x00u,
- 0x99u, 0x18u, 0x90u, 0x22u, 0x52u, 0x01u, 0x88u, 0x58u, 0x07u, 0x22u, 0x10u, 0x40u, 0x04u, 0x28u, 0x07u, 0xd1u,
- 0x05u, 0x4au, 0x9bu, 0x18u, 0x58u, 0x68u, 0x1fu, 0x23u, 0x03u, 0x40u, 0x80u, 0x20u, 0x40u, 0x00u, 0x18u, 0x43u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0xfcu, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0xe5u, 0xffu, 0x88u, 0x23u, 0x5bu, 0x00u, 0x98u, 0x42u, 0x19u, 0xd0u, 0x09u, 0xd8u, 0x01u, 0x28u, 0x10u, 0xd0u,
- 0x02u, 0x28u, 0x11u, 0xd0u, 0x43u, 0x42u, 0x58u, 0x41u, 0x0fu, 0x4bu, 0x40u, 0x42u, 0x18u, 0x40u, 0x10u, 0xbdu,
- 0x12u, 0x23u, 0xffu, 0x33u, 0x98u, 0x42u, 0x12u, 0xd0u, 0x03u, 0x33u, 0x98u, 0x42u, 0x07u, 0xd0u, 0x00u, 0x20u,
- 0xf5u, 0xe7u, 0x0au, 0x4bu, 0x18u, 0x68u, 0xf2u, 0xe7u, 0xffu, 0xf7u, 0xbcu, 0xffu, 0xefu, 0xe7u, 0x08u, 0x4au,
- 0x08u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0xf2u, 0xdau, 0x80u, 0x20u, 0x00u, 0x02u, 0xe7u, 0xe7u, 0xffu, 0xf7u,
- 0x9bu, 0xffu, 0x00u, 0x28u, 0xebu, 0xd0u, 0xf7u, 0xe7u, 0x00u, 0x12u, 0x7au, 0x00u, 0x28u, 0x12u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x08u, 0x15u, 0x00u, 0x00u, 0x14u, 0x4au, 0x15u, 0x4bu, 0x10u, 0xb5u, 0xd3u, 0x58u,
- 0x0fu, 0x24u, 0x99u, 0x03u, 0xdbu, 0x01u, 0xdbu, 0x0fu, 0x89u, 0x0bu, 0xc3u, 0x71u, 0x11u, 0x4bu, 0x01u, 0x60u,
- 0xd3u, 0x58u, 0xd9u, 0x04u, 0x1bu, 0x0cu, 0xdbu, 0xb2u, 0x03u, 0x81u, 0x0fu, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u,
- 0x81u, 0x80u, 0x19u, 0x00u, 0x21u, 0x40u, 0x81u, 0x72u, 0x19u, 0x09u, 0x21u, 0x40u, 0xc1u, 0x72u, 0xd9u, 0x02u,
- 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x83u, 0x73u, 0x09u, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u, 0x81u, 0x81u, 0x5au, 0x05u,
- 0xdbu, 0x01u, 0x52u, 0x0fu, 0xdbu, 0x0du, 0x82u, 0x71u, 0x03u, 0x82u, 0x10u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x30u, 0x15u, 0x00u, 0x00u, 0x34u, 0x15u, 0x00u, 0x00u, 0x38u, 0x15u, 0x00u, 0x00u, 0x3cu, 0x15u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0xbfu, 0xfdu,
- 0x14u, 0x4bu, 0x28u, 0x01u, 0xc5u, 0x18u, 0xc8u, 0x23u, 0x1fu, 0x26u, 0x5bu, 0x01u, 0xebu, 0x58u, 0x19u, 0x0au,
- 0x31u, 0x40u, 0x61u, 0x70u, 0x07u, 0x21u, 0x23u, 0x70u, 0x1au, 0x0cu, 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x32u, 0x40u,
- 0x23u, 0x71u, 0x0du, 0x4bu, 0xa2u, 0x70u, 0xebu, 0x58u, 0x1au, 0x02u, 0x12u, 0x0au, 0xa2u, 0x60u, 0x1au, 0x0fu,
- 0xf3u, 0x40u, 0x0au, 0x40u, 0x55u, 0x1eu, 0xaau, 0x41u, 0x63u, 0x73u, 0x08u, 0x4bu, 0x22u, 0x73u, 0xc0u, 0x18u,
- 0x03u, 0x68u, 0x00u, 0x20u, 0xdau, 0xb2u, 0x22u, 0x61u, 0x1au, 0x0cu, 0xf3u, 0x40u, 0x11u, 0x40u, 0x21u, 0x75u,
- 0x63u, 0x75u, 0x70u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u, 0x04u, 0x19u, 0x00u, 0x00u, 0x08u, 0x19u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x87u, 0xfdu,
- 0xb0u, 0x23u, 0x7fu, 0x22u, 0x1fu, 0x20u, 0xdbu, 0x00u, 0xedu, 0x18u, 0x09u, 0x4bu, 0xadu, 0x00u, 0xebu, 0x58u,
- 0x1au, 0x40u, 0x22u, 0x70u, 0x1au, 0x0cu, 0x02u, 0x40u, 0xa2u, 0x70u, 0x1au, 0x01u, 0xc2u, 0x40u, 0x19u, 0x0au,
- 0x9bu, 0x00u, 0x01u, 0x40u, 0x9bu, 0x0fu, 0x00u, 0x20u, 0x61u, 0x70u, 0xe2u, 0x70u, 0x23u, 0x71u, 0x70u, 0xbdu,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x42u, 0x1eu, 0x06u, 0x4bu, 0x01u, 0x2au, 0x05u, 0xd8u, 0x90u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0x01u, 0x18u, 0x58u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0x02u, 0x4au, 0x80u, 0x18u, 0x80u, 0x00u, 0xf8u, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x7du, 0x05u, 0x00u, 0x00u, 0x03u, 0x00u, 0x01u, 0x38u, 0x10u, 0xb5u, 0x01u, 0x28u,
- 0x02u, 0xd8u, 0xffu, 0xf7u, 0x8du, 0xffu, 0x10u, 0xbdu, 0xd8u, 0x1eu, 0xffu, 0xf7u, 0xc1u, 0xffu, 0xfau, 0xe7u,
- 0xf0u, 0xb5u, 0x8bu, 0xb0u, 0x04u, 0x00u, 0xffu, 0xf7u, 0x19u, 0xffu, 0x06u, 0x00u, 0x00u, 0x2cu, 0x3du, 0xd1u,
- 0x14u, 0x22u, 0x21u, 0x00u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0x42u, 0xfdu, 0x04u, 0xa8u, 0xffu, 0xf7u, 0x44u, 0xffu,
- 0x33u, 0x4au, 0x34u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0x04u, 0xdau, 0x04u, 0xabu, 0x9cu, 0x7bu, 0x02u, 0x3cu,
- 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xa9u, 0xc8u, 0x79u, 0x01u, 0x23u, 0x41u, 0x1eu, 0x88u, 0x41u, 0x00u, 0x27u,
- 0x04u, 0xaau, 0x04u, 0x9du, 0x92u, 0x88u, 0x1cu, 0x40u, 0xc0u, 0x18u, 0x03u, 0x93u, 0x00u, 0x2cu, 0x1au, 0xd0u,
- 0x00u, 0x2au, 0x18u, 0xd0u, 0x00u, 0x23u, 0x19u, 0x00u, 0x00u, 0xf0u, 0x32u, 0xfcu, 0x02u, 0x90u, 0x01u, 0x91u,
- 0x00u, 0x2fu, 0x30u, 0xd0u, 0x29u, 0x0au, 0x28u, 0x06u, 0x00u, 0x25u, 0x03u, 0x9cu, 0x32u, 0x00u, 0x2bu, 0x00u,
- 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0xf0u, 0x24u, 0xfcu, 0x02u, 0x9au, 0x01u, 0x9bu, 0x00u, 0xf0u, 0x00u, 0xfcu,
- 0x0eu, 0x02u, 0x00u, 0x0eu, 0x06u, 0x43u, 0x30u, 0x00u, 0x0bu, 0xb0u, 0xf0u, 0xbdu, 0x04u, 0x2cu, 0xfau, 0xd8u,
- 0x18u, 0x22u, 0x00u, 0x21u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0x02u, 0xfdu, 0x20u, 0x00u, 0x04u, 0xa9u, 0xffu, 0xf7u,
- 0xa3u, 0xffu, 0x20u, 0x00u, 0xffu, 0xf7u, 0x8eu, 0xffu, 0x00u, 0x24u, 0xa0u, 0x42u, 0x04u, 0xd0u, 0x04u, 0xabu,
- 0x1cu, 0x79u, 0x02u, 0x3cu, 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xabu, 0x1du, 0x78u, 0x5au, 0x78u, 0x98u, 0x78u,
- 0x5fu, 0x7bu, 0x06u, 0x9bu, 0xc1u, 0xe7u, 0x32u, 0x00u, 0x3bu, 0x00u, 0x28u, 0x00u, 0x39u, 0x00u, 0x00u, 0xf0u,
- 0xf7u, 0xfbu, 0x02u, 0x9cu, 0x01u, 0x9bu, 0x62u, 0x08u, 0x01u, 0x9cu, 0xdeu, 0x07u, 0x32u, 0x43u, 0x63u, 0x08u,
- 0x80u, 0x18u, 0x59u, 0x41u, 0x23u, 0x00u, 0x02u, 0x9au, 0x00u, 0xf0u, 0xcau, 0xfbu, 0x06u, 0x00u, 0xcau, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x30u, 0x15u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0x48u, 0xfeu,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0x0bu, 0x4au, 0xf3u, 0x18u, 0x9bu, 0x00u, 0x04u, 0x00u, 0x98u, 0x58u, 0x0fu, 0x23u,
- 0x18u, 0x40u, 0xffu, 0xf7u, 0x75u, 0xffu, 0x05u, 0x00u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x45u, 0xfeu, 0x00u, 0x28u,
- 0x05u, 0xd1u, 0x01u, 0x30u, 0xa0u, 0x40u, 0x40u, 0x08u, 0x40u, 0x19u, 0xe0u, 0x40u, 0x70u, 0xbdu, 0x02u, 0x48u,
- 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x00u, 0x12u, 0x7au, 0x00u, 0x70u, 0xb5u, 0x04u, 0x00u,
- 0x01u, 0x20u, 0x09u, 0x4eu, 0x40u, 0x42u, 0x31u, 0x68u, 0x00u, 0xf0u, 0x0eu, 0xfbu, 0x05u, 0x00u, 0x30u, 0x68u,
- 0xacu, 0x42u, 0x03u, 0xd8u, 0x60u, 0x43u, 0xffu, 0xf7u, 0xd7u, 0xfdu, 0x70u, 0xbdu, 0x68u, 0x43u, 0xffu, 0xf7u,
- 0xd3u, 0xfdu, 0x64u, 0x1bu, 0xf3u, 0xe7u, 0xc0u, 0x46u, 0x28u, 0x09u, 0x00u, 0x28u, 0xfeu, 0xe7u, 0x00u, 0x00u,
- 0x02u, 0x68u, 0x0au, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x60u, 0x42u, 0x68u, 0x5au, 0x60u, 0x82u, 0x68u, 0x9au, 0x60u,
- 0xc2u, 0x68u, 0xdau, 0x60u, 0x02u, 0x69u, 0x1au, 0x61u, 0x42u, 0x69u, 0x5au, 0x61u, 0x82u, 0x69u, 0x9au, 0x61u,
- 0xc2u, 0x69u, 0xdau, 0x61u, 0xffu, 0xf7u, 0xeau, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0x08u, 0x00u, 0x28u,
- 0x05u, 0x4bu, 0x02u, 0x22u, 0x19u, 0x69u, 0x00u, 0x28u, 0x02u, 0xd0u, 0x0au, 0x43u, 0x1au, 0x61u, 0x70u, 0x47u,
- 0x91u, 0x43u, 0x19u, 0x61u, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xedu, 0x00u, 0xe0u, 0x7fu, 0xb5u, 0x27u, 0x4bu,
- 0x86u, 0x00u, 0x0du, 0x00u, 0xf4u, 0x58u, 0x04u, 0x29u, 0x01u, 0xd0u, 0x01u, 0x29u, 0x27u, 0xd1u, 0x00u, 0x20u,
- 0x0fu, 0xe0u, 0xa3u, 0x68u, 0x2bu, 0x42u, 0x0bu, 0xd1u, 0xe3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u,
- 0x02u, 0x92u, 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x23u, 0x68u, 0x98u, 0x47u, 0x1cu, 0x4bu, 0x1cu, 0x60u,
- 0x64u, 0x69u, 0x00u, 0x2cu, 0x0bu, 0xd0u, 0x1bu, 0x4bu, 0x98u, 0x42u, 0xeau, 0xd1u, 0x01u, 0x2du, 0xe8u, 0xd1u,
- 0x17u, 0x4bu, 0x18u, 0x48u, 0x1au, 0x68u, 0x18u, 0x4bu, 0x9au, 0x51u, 0x04u, 0xb0u, 0x70u, 0xbdu, 0x01u, 0x2du,
- 0xfbu, 0xd1u, 0x14u, 0x4bu, 0x98u, 0x42u, 0xf3u, 0xd0u, 0x13u, 0x4bu, 0x9cu, 0x51u, 0xf5u, 0xe7u, 0x02u, 0x29u,
- 0x15u, 0xd0u, 0x26u, 0x00u, 0x64u, 0x69u, 0x00u, 0x2cu, 0xfbu, 0xd1u, 0x00u, 0x20u, 0x00u, 0x2eu, 0xecu, 0xd0u,
- 0xb3u, 0x68u, 0x2bu, 0x42u, 0x09u, 0xd1u, 0xf3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u, 0x02u, 0x92u,
- 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x33u, 0x68u, 0x98u, 0x47u, 0x36u, 0x69u, 0xeeu, 0xe7u, 0x04u, 0x4bu,
- 0x1bu, 0x68u, 0x18u, 0x1eu, 0xd9u, 0xd0u, 0x1eu, 0x69u, 0xe7u, 0xe7u, 0xc0u, 0x46u, 0x48u, 0x12u, 0x00u, 0x28u,
- 0x44u, 0x12u, 0x00u, 0x28u, 0xffu, 0x00u, 0x42u, 0x00u, 0x30u, 0x12u, 0x00u, 0x28u, 0x80u, 0x23u, 0x03u, 0x4au,
- 0x5bu, 0x01u, 0xd0u, 0x58u, 0x80u, 0x06u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0xf2u, 0xffu, 0x00u, 0x28u, 0x30u, 0xd0u, 0x19u, 0x4du, 0x6bu, 0x68u,
- 0x00u, 0x2bu, 0x17u, 0xd1u, 0xffu, 0xf7u, 0x41u, 0xfdu, 0x6bu, 0x68u, 0x04u, 0x00u, 0x00u, 0x2bu, 0x1fu, 0xd1u,
- 0x04u, 0x23u, 0x15u, 0x4au, 0x11u, 0x69u, 0x0bu, 0x43u, 0x13u, 0x61u, 0x01u, 0x2eu, 0x1du, 0xd0u, 0x30u, 0xbfu,
- 0x20u, 0x00u, 0x00u, 0x24u, 0xffu, 0xf7u, 0x35u, 0xfdu, 0x6bu, 0x68u, 0x08u, 0x21u, 0xa3u, 0x42u, 0x0bu, 0xd1u,
- 0x20u, 0x00u, 0x70u, 0xbdu, 0x01u, 0x21u, 0x08u, 0x00u, 0xffu, 0xf7u, 0x78u, 0xffu, 0x04u, 0x1eu, 0xe1u, 0xd0u,
- 0x6bu, 0x68u, 0x02u, 0x21u, 0x00u, 0x2bu, 0xf3u, 0xd0u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6fu, 0xffu, 0xefu, 0xe7u,
- 0x04u, 0x21u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6au, 0xffu, 0xdau, 0xe7u, 0x20u, 0xbfu, 0xe0u, 0xe7u, 0x03u, 0x4cu,
- 0xe6u, 0xe7u, 0xc0u, 0x46u, 0x48u, 0x12u, 0x00u, 0x28u, 0x00u, 0xedu, 0x00u, 0xe0u, 0xffu, 0x00u, 0x42u, 0x00u,
- 0x03u, 0x21u, 0x06u, 0x4bu, 0x1au, 0x6cu, 0x8au, 0x43u, 0x11u, 0x00u, 0x01u, 0x22u, 0x0au, 0x43u, 0x1au, 0x64u,
- 0x02u, 0x22u, 0x19u, 0x6cu, 0x0au, 0x43u, 0x1au, 0x64u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0xc0u, 0x26u, 0x40u,
- 0x10u, 0xb5u, 0x62u, 0xb6u, 0x09u, 0x49u, 0x00u, 0x20u, 0x00u, 0xf0u, 0x2cu, 0xf9u, 0xfau, 0x20u, 0x80u, 0x00u,
- 0xffu, 0xf7u, 0x04u, 0xffu, 0x01u, 0x20u, 0x06u, 0x49u, 0x00u, 0xf0u, 0x24u, 0xf9u, 0x01u, 0x20u, 0xffu, 0xf7u,
- 0x2fu, 0xffu, 0x00u, 0x20u, 0xffu, 0xf7u, 0x9cu, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x10u,
- 0x00u, 0x00u, 0x28u, 0x10u, 0xfeu, 0xe7u, 0x70u, 0x47u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xfcu, 0xffu, 0x10u, 0xbdu,
- 0x70u, 0xb5u, 0x11u, 0x4bu, 0x11u, 0x48u, 0x83u, 0x42u, 0x11u, 0xd3u, 0x00u, 0x20u, 0x10u, 0x4bu, 0x11u, 0x49u,
- 0x8bu, 0x42u, 0x17u, 0xd3u, 0xffu, 0xf7u, 0x8eu, 0xfcu, 0x1cu, 0x68u, 0x91u, 0x00u, 0x64u, 0x58u, 0x5du, 0x68u,
- 0x01u, 0x32u, 0x6cu, 0x50u, 0x99u, 0x68u, 0x8au, 0x42u, 0xf6u, 0xd3u, 0x0cu, 0x33u, 0xebu, 0xe7u, 0x00u, 0x22u,
- 0xf8u, 0xe7u, 0x1du, 0x68u, 0x94u, 0x00u, 0x60u, 0x51u, 0x01u, 0x32u, 0x5cu, 0x68u, 0xa2u, 0x42u, 0xf8u, 0xd3u,
- 0x08u, 0x33u, 0xe5u, 0xe7u, 0x00u, 0x22u, 0xf8u, 0xe7u, 0xd0u, 0x20u, 0x00u, 0x10u, 0xdcu, 0x20u, 0x00u, 0x10u,
- 0xdcu, 0x20u, 0x00u, 0x10u, 0xe4u, 0x20u, 0x00u, 0x10u, 0x00u, 0x23u, 0x10u, 0xb5u, 0x05u, 0x4au, 0x06u, 0x4cu,
- 0x06u, 0x49u, 0x98u, 0x00u, 0x01u, 0x33u, 0x14u, 0x50u, 0x8bu, 0x42u, 0xfau, 0xd1u, 0x04u, 0x4bu, 0x1au, 0x60u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x30u, 0x09u, 0x00u, 0x28u, 0x95u, 0x07u, 0x00u, 0x10u, 0x37u, 0x02u, 0x00u, 0x00u,
- 0x10u, 0x09u, 0x00u, 0x28u, 0x70u, 0x47u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x84u, 0xfeu,
- 0x0du, 0x4cu, 0x60u, 0x60u, 0xa0u, 0x60u, 0x02u, 0x20u, 0xffu, 0xf7u, 0x7eu, 0xfeu, 0x65u, 0x68u, 0x0bu, 0x4bu,
- 0xe0u, 0x60u, 0x25u, 0x61u, 0xe8u, 0x18u, 0x0au, 0x49u, 0x00u, 0xf0u, 0xaeu, 0xf9u, 0xfau, 0x21u, 0x09u, 0x4bu,
- 0x60u, 0x61u, 0x89u, 0x00u, 0xe8u, 0x18u, 0x00u, 0xf0u, 0xa7u, 0xf9u, 0xa0u, 0x61u, 0x00u, 0x20u, 0xffu, 0xf7u,
- 0x6bu, 0xfeu, 0xe0u, 0x61u, 0x70u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0x09u, 0x00u, 0x28u, 0x3fu, 0x42u, 0x0fu, 0x00u,
- 0x40u, 0x42u, 0x0fu, 0x00u, 0xe7u, 0x03u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x00u, 0x24u, 0x00u, 0x25u, 0x26u, 0x4bu,
- 0x26u, 0x4au, 0x59u, 0x1eu, 0xffu, 0x39u, 0x8au, 0x42u, 0x42u, 0xd3u, 0x00u, 0x20u, 0x00u, 0x21u, 0x24u, 0x4au,
- 0x93u, 0x42u, 0x3fu, 0xd9u, 0x98u, 0x20u, 0xffu, 0x25u, 0x22u, 0x4bu, 0x40u, 0x01u, 0x1au, 0x58u, 0x22u, 0x49u,
- 0x22u, 0x4cu, 0x0au, 0x40u, 0x1au, 0x50u, 0x80u, 0x30u, 0x1au, 0x58u, 0x0au, 0x40u, 0x1au, 0x50u, 0x20u, 0x30u,
- 0x1au, 0x58u, 0x0au, 0x40u, 0x1au, 0x50u, 0x1eu, 0x4au, 0x20u, 0x00u, 0x92u, 0x08u, 0x2au, 0x40u, 0x1du, 0x49u,
- 0x92u, 0x00u, 0x01u, 0xf0u, 0x03u, 0xfbu, 0x40u, 0x21u, 0x1bu, 0x4bu, 0xc0u, 0x22u, 0x9cu, 0x60u, 0x0bu, 0x68u,
- 0x92u, 0x00u, 0x23u, 0x64u, 0x44u, 0x23u, 0x1bu, 0x68u, 0x63u, 0x64u, 0x18u, 0x4bu, 0x98u, 0x58u, 0xa8u, 0x43u,
- 0x01u, 0x43u, 0x99u, 0x50u, 0x99u, 0x58u, 0x16u, 0x48u, 0x01u, 0x40u, 0x99u, 0x50u, 0x01u, 0x22u, 0x1au, 0x60u,
- 0x92u, 0x18u, 0x1au, 0x60u, 0xffu, 0xf7u, 0x80u, 0xffu, 0xffu, 0xf7u, 0x22u, 0xffu, 0x11u, 0x4au, 0x13u, 0x68u,
- 0x5bu, 0x00u, 0x5bu, 0x08u, 0x13u, 0x60u, 0xffu, 0xf7u, 0x8du, 0xffu, 0xffu, 0xf7u, 0x8du, 0xffu, 0x70u, 0xbdu,
- 0x30u, 0xc2u, 0xb8u, 0xe7u, 0x03u, 0xc3u, 0xbbu, 0xe7u, 0x00u, 0x00u, 0x02u, 0x28u, 0x00u, 0x08u, 0x00u, 0x28u,
- 0xffu, 0xffu, 0x0fu, 0x28u, 0x00u, 0x00u, 0x20u, 0x40u, 0xffu, 0xffu, 0xf7u, 0xffu, 0x00u, 0x08u, 0x00u, 0x28u,
- 0x80u, 0x00u, 0x00u, 0x10u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0xedu, 0x00u, 0xe0u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0xffu, 0x00u, 0xffu, 0xffu, 0x00u, 0xc0u, 0x26u, 0x40u, 0x03u, 0x1eu, 0x06u, 0xd1u, 0x90u, 0x23u, 0x06u, 0x4au,
- 0x5bu, 0x01u, 0xd0u, 0x58u, 0x03u, 0x23u, 0x18u, 0x40u, 0x70u, 0x47u, 0x00u, 0x20u, 0x01u, 0x2bu, 0xfbu, 0xd1u,
- 0x01u, 0x4au, 0x02u, 0x4bu, 0xf5u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x20u, 0x40u, 0x10u, 0x12u, 0x00u, 0x00u,
- 0x00u, 0x28u, 0x0du, 0xd1u, 0x90u, 0x20u, 0x0eu, 0x4bu, 0x40u, 0x01u, 0x1au, 0x58u, 0x0du, 0x49u, 0x11u, 0x40u,
- 0x0du, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x22u, 0x59u, 0x68u, 0x11u, 0x42u, 0xfcu, 0xd0u, 0x70u, 0x47u,
- 0x01u, 0x28u, 0xfcu, 0xd1u, 0x09u, 0x48u, 0x06u, 0x4bu, 0x06u, 0x49u, 0x1au, 0x58u, 0x11u, 0x40u, 0x06u, 0x4au,
- 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x22u, 0x06u, 0x48u, 0x19u, 0x58u, 0x11u, 0x42u, 0xfcu, 0xd0u, 0xeeu, 0xe7u,
- 0x00u, 0x00u, 0x20u, 0x40u, 0xfcu, 0xffu, 0x00u, 0x00u, 0x01u, 0x00u, 0xfau, 0x05u, 0x10u, 0x12u, 0x00u, 0x00u,
- 0x04u, 0x04u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0xffu, 0xf7u, 0xc6u, 0xfbu, 0x06u, 0x00u,
- 0x20u, 0x00u, 0xffu, 0xf7u, 0xb9u, 0xffu, 0x03u, 0x28u, 0x02u, 0xd1u, 0x20u, 0x00u, 0xffu, 0xf7u, 0xc8u, 0xffu,
- 0x80u, 0x23u, 0x1bu, 0x49u, 0x1bu, 0x4au, 0x1bu, 0x06u, 0x88u, 0x58u, 0x03u, 0x43u, 0x8bu, 0x50u, 0x00u, 0x2cu,
- 0x16u, 0xd1u, 0x80u, 0x22u, 0x90u, 0x20u, 0x18u, 0x4bu, 0x92u, 0x00u, 0x9du, 0x50u, 0x40u, 0x01u, 0x1au, 0x58u,
- 0x16u, 0x49u, 0x11u, 0x40u, 0x16u, 0x4au, 0x0au, 0x43u, 0x10u, 0x21u, 0x1au, 0x50u, 0x5au, 0x68u, 0x0au, 0x42u,
- 0xfcu, 0xd0u, 0xdau, 0x68u, 0x8au, 0x43u, 0xdau, 0x60u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xa2u, 0xfbu, 0x70u, 0xbdu,
- 0x01u, 0x2cu, 0xf9u, 0xd1u, 0xc0u, 0x22u, 0x0cu, 0x4bu, 0x0eu, 0x48u, 0xd2u, 0x00u, 0x9du, 0x50u, 0x1au, 0x58u,
- 0x0au, 0x49u, 0x11u, 0x40u, 0x0au, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x20u, 0x0au, 0x49u, 0x5au, 0x58u,
- 0x02u, 0x42u, 0xfcu, 0xd0u, 0x09u, 0x49u, 0x5au, 0x58u, 0x82u, 0x43u, 0x5au, 0x50u, 0xe4u, 0xe7u, 0xc0u, 0x46u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x44u, 0x12u, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x40u, 0xfcu, 0xffu, 0x00u, 0x00u,
- 0x03u, 0x00u, 0xfau, 0x05u, 0x10u, 0x12u, 0x00u, 0x00u, 0x04u, 0x04u, 0x00u, 0x00u, 0x0cu, 0x04u, 0x00u, 0x00u,
- 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u,
- 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x04u, 0x21u, 0x04u, 0x4au,
- 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x08u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u,
- 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u,
- 0x08u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x0cu, 0x11u, 0x20u, 0x40u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0xc0u, 0x23u, 0x10u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x10u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x20u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x14u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u,
- 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x40u, 0x21u, 0x04u, 0x4au,
- 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x18u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u,
- 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u,
- 0x80u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x1cu, 0x11u, 0x20u, 0x40u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x00u, 0x22u, 0x43u, 0x08u, 0x8bu, 0x42u, 0x74u, 0xd3u,
- 0x03u, 0x09u, 0x8bu, 0x42u, 0x5fu, 0xd3u, 0x03u, 0x0au, 0x8bu, 0x42u, 0x44u, 0xd3u, 0x03u, 0x0bu, 0x8bu, 0x42u,
- 0x28u, 0xd3u, 0x03u, 0x0cu, 0x8bu, 0x42u, 0x0du, 0xd3u, 0xffu, 0x22u, 0x09u, 0x02u, 0x12u, 0xbau, 0x03u, 0x0cu,
- 0x8bu, 0x42u, 0x02u, 0xd3u, 0x12u, 0x12u, 0x09u, 0x02u, 0x65u, 0xd0u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x19u, 0xd3u,
- 0x00u, 0xe0u, 0x09u, 0x0au, 0xc3u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0x83u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x0bu, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0x4bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x03u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0xc3u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0x83u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x0au, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0x4bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x02u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0xcdu, 0xd2u, 0xc3u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x01u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0x83u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x09u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0x0bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xc3u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x00u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0x83u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x08u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x41u, 0x1au, 0x00u, 0xd2u, 0x01u, 0x46u,
- 0x52u, 0x41u, 0x10u, 0x46u, 0x70u, 0x47u, 0xffu, 0xe7u, 0x01u, 0xb5u, 0x00u, 0x20u, 0x00u, 0xf0u, 0x06u, 0xf8u,
- 0x02u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x29u, 0xf7u, 0xd0u, 0x76u, 0xe7u, 0x70u, 0x47u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x00u, 0x2bu, 0x11u, 0xd1u, 0x00u, 0x2au, 0x0fu, 0xd1u, 0x00u, 0x29u, 0x00u, 0xd1u, 0x00u, 0x28u, 0x02u, 0xd0u,
- 0x00u, 0x21u, 0xc9u, 0x43u, 0x08u, 0x00u, 0x07u, 0xb4u, 0x02u, 0x48u, 0x02u, 0xa1u, 0x40u, 0x18u, 0x02u, 0x90u,
- 0x03u, 0xbdu, 0xc0u, 0x46u, 0xd9u, 0xffu, 0xffu, 0xffu, 0x03u, 0xb4u, 0x68u, 0x46u, 0x01u, 0xb5u, 0x02u, 0x98u,
- 0x00u, 0xf0u, 0x34u, 0xf8u, 0x01u, 0x9bu, 0x9eu, 0x46u, 0x02u, 0xb0u, 0x0cu, 0xbcu, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u, 0x07u, 0x00u, 0x99u, 0x46u, 0x3bu, 0x0cu, 0x9cu, 0x46u,
- 0x13u, 0x04u, 0x1bu, 0x0cu, 0x1du, 0x00u, 0x0eu, 0x00u, 0x61u, 0x46u, 0x00u, 0x04u, 0x14u, 0x0cu, 0x00u, 0x0cu,
- 0x45u, 0x43u, 0x4bu, 0x43u, 0x60u, 0x43u, 0x61u, 0x43u, 0xc0u, 0x18u, 0x2cu, 0x0cu, 0x20u, 0x18u, 0x8cu, 0x46u,
- 0x83u, 0x42u, 0x03u, 0xd9u, 0x80u, 0x23u, 0x5bu, 0x02u, 0x98u, 0x46u, 0xc4u, 0x44u, 0x49u, 0x46u, 0x79u, 0x43u,
- 0x72u, 0x43u, 0x03u, 0x0cu, 0x63u, 0x44u, 0x2du, 0x04u, 0x2du, 0x0cu, 0xc9u, 0x18u, 0x00u, 0x04u, 0x40u, 0x19u,
- 0x89u, 0x18u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0x57u, 0x46u,
- 0x4eu, 0x46u, 0x45u, 0x46u, 0xdeu, 0x46u, 0xe0u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x92u, 0x46u, 0x99u, 0x46u,
- 0x83u, 0xb0u, 0x8bu, 0x42u, 0x30u, 0xd8u, 0x2du, 0xd0u, 0x49u, 0x46u, 0x50u, 0x46u, 0x01u, 0xf0u, 0x58u, 0xf8u,
- 0x29u, 0x00u, 0x06u, 0x00u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x53u, 0xf8u, 0x33u, 0x1au, 0x98u, 0x46u, 0x20u, 0x3bu,
- 0x9bu, 0x46u, 0x33u, 0xd4u, 0x5au, 0x46u, 0x53u, 0x46u, 0x93u, 0x40u, 0x42u, 0x46u, 0x1fu, 0x00u, 0x53u, 0x46u,
- 0x93u, 0x40u, 0x1eu, 0x00u, 0xafu, 0x42u, 0x3au, 0xd8u, 0xafu, 0x42u, 0x00u, 0xd1u, 0x78u, 0xe0u, 0x5bu, 0x46u,
- 0xa4u, 0x1bu, 0xbdu, 0x41u, 0x00u, 0x2bu, 0x00u, 0xdau, 0x75u, 0xe0u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u,
- 0x01u, 0x93u, 0x01u, 0x23u, 0x5au, 0x46u, 0x93u, 0x40u, 0x01u, 0x93u, 0x01u, 0x23u, 0x42u, 0x46u, 0x93u, 0x40u,
- 0x00u, 0x93u, 0x28u, 0xe0u, 0x82u, 0x42u, 0xcfu, 0xd9u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u,
- 0x0cu, 0x9bu, 0x00u, 0x2bu, 0x01u, 0xd0u, 0x1cu, 0x60u, 0x5du, 0x60u, 0x00u, 0x98u, 0x01u, 0x99u, 0x03u, 0xb0u,
- 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0x42u, 0x46u, 0x20u, 0x23u,
- 0x9bu, 0x1au, 0x52u, 0x46u, 0xdau, 0x40u, 0x41u, 0x46u, 0x13u, 0x00u, 0x4au, 0x46u, 0x8au, 0x40u, 0x17u, 0x00u,
- 0x42u, 0x46u, 0x1fu, 0x43u, 0x53u, 0x46u, 0x93u, 0x40u, 0x1eu, 0x00u, 0xafu, 0x42u, 0xc4u, 0xd9u, 0x00u, 0x22u,
- 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x43u, 0x46u, 0x00u, 0x2bu, 0xd9u, 0xd0u, 0xfbu, 0x07u, 0x72u, 0x08u,
- 0x1au, 0x43u, 0x46u, 0x46u, 0x7bu, 0x08u, 0x0eu, 0xe0u, 0xabu, 0x42u, 0x01u, 0xd1u, 0xa2u, 0x42u, 0x0cu, 0xd8u,
- 0xa4u, 0x1au, 0x9du, 0x41u, 0x01u, 0x20u, 0x24u, 0x19u, 0x6du, 0x41u, 0x00u, 0x21u, 0x01u, 0x3eu, 0x24u, 0x18u,
- 0x4du, 0x41u, 0x00u, 0x2eu, 0x06u, 0xd0u, 0xabu, 0x42u, 0xeeu, 0xd9u, 0x01u, 0x3eu, 0x24u, 0x19u, 0x6du, 0x41u,
- 0x00u, 0x2eu, 0xf8u, 0xd1u, 0x00u, 0x98u, 0x01u, 0x99u, 0x5bu, 0x46u, 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0x2bu,
- 0x24u, 0xdbu, 0x2bu, 0x00u, 0x5au, 0x46u, 0x44u, 0x46u, 0xd3u, 0x40u, 0x2au, 0x00u, 0xe2u, 0x40u, 0x1cu, 0x00u,
- 0x5bu, 0x46u, 0x15u, 0x00u, 0x00u, 0x2bu, 0x2au, 0xdbu, 0x26u, 0x00u, 0x9eu, 0x40u, 0x33u, 0x00u, 0x26u, 0x00u,
- 0x47u, 0x46u, 0xbeu, 0x40u, 0x32u, 0x00u, 0x80u, 0x1au, 0x99u, 0x41u, 0x00u, 0x90u, 0x01u, 0x91u, 0x9fu, 0xe7u,
- 0xa3u, 0x42u, 0xbcu, 0xd8u, 0x83u, 0xe7u, 0x42u, 0x46u, 0x20u, 0x23u, 0x00u, 0x21u, 0x9bu, 0x1au, 0x00u, 0x22u,
- 0x00u, 0x91u, 0x01u, 0x92u, 0x01u, 0x22u, 0xdau, 0x40u, 0x01u, 0x92u, 0x86u, 0xe7u, 0x42u, 0x46u, 0x20u, 0x23u,
- 0x9bu, 0x1au, 0x2au, 0x00u, 0x46u, 0x46u, 0x9au, 0x40u, 0x23u, 0x00u, 0xf3u, 0x40u, 0x44u, 0x46u, 0x13u, 0x43u,
- 0x2au, 0x00u, 0xe2u, 0x40u, 0x1cu, 0x00u, 0x5bu, 0x46u, 0x15u, 0x00u, 0x00u, 0x2bu, 0xd4u, 0xdau, 0x42u, 0x46u,
- 0x2fu, 0x00u, 0x20u, 0x23u, 0x26u, 0x00u, 0x97u, 0x40u, 0x9bu, 0x1au, 0xdeu, 0x40u, 0x3bu, 0x00u, 0x33u, 0x43u,
- 0xcdu, 0xe7u, 0xc0u, 0x46u, 0x03u, 0x68u, 0x5au, 0x00u, 0x04u, 0xd5u, 0x80u, 0x22u, 0x12u, 0x06u, 0x13u, 0x43u,
- 0xc0u, 0x18u, 0x70u, 0x47u, 0x5bu, 0x00u, 0x5bu, 0x08u, 0xfau, 0xe7u, 0xc0u, 0x46u, 0xf8u, 0xb5u, 0x57u, 0x46u,
- 0x45u, 0x46u, 0xdeu, 0x46u, 0x4eu, 0x46u, 0x90u, 0x46u, 0xe0u, 0xb5u, 0x07u, 0x00u, 0x00u, 0x29u, 0x24u, 0xd0u,
- 0x4bu, 0x1eu, 0x9au, 0x46u, 0x99u, 0x46u, 0x00u, 0x23u, 0x9bu, 0x46u, 0x5bu, 0x46u, 0x4bu, 0x44u, 0xdcu, 0x0fu,
- 0xe4u, 0x18u, 0x64u, 0x10u, 0xe5u, 0x00u, 0x7eu, 0x19u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xdbu, 0xffu, 0xa2u, 0x45u,
- 0x0cu, 0xd0u, 0x40u, 0x45u, 0x0cu, 0xd8u, 0x28u, 0x00u, 0x08u, 0x30u, 0x38u, 0x18u, 0xffu, 0xf7u, 0xd2u, 0xffu,
- 0x01u, 0x38u, 0x40u, 0x45u, 0x0au, 0xd2u, 0x63u, 0x1cu, 0x9bu, 0x46u, 0xe6u, 0xe7u, 0x40u, 0x45u, 0x05u, 0xd9u,
- 0xa3u, 0x45u, 0x02u, 0xd0u, 0x63u, 0x1eu, 0x99u, 0x46u, 0xdfu, 0xe7u, 0x00u, 0x26u, 0x30u, 0x00u, 0xf0u, 0xbcu,
- 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf8u, 0xbdu, 0xc0u, 0x46u, 0x03u, 0x00u, 0x01u, 0x28u,
- 0x05u, 0xd0u, 0x02u, 0x28u, 0x07u, 0xd0u, 0x00u, 0x20u, 0x00u, 0x2bu, 0x02u, 0xd0u, 0x70u, 0x47u, 0x03u, 0x48u,
- 0xfcu, 0xe7u, 0x03u, 0x48u, 0xfau, 0xe7u, 0x03u, 0x48u, 0xf8u, 0xe7u, 0xc0u, 0x46u, 0xa5u, 0x16u, 0x00u, 0x10u,
- 0x99u, 0x16u, 0x00u, 0x10u, 0xb1u, 0x16u, 0x00u, 0x10u, 0x30u, 0xb5u, 0x23u, 0x4bu, 0x05u, 0x00u, 0x83u, 0xb0u,
- 0x8cu, 0x1eu, 0x00u, 0x2bu, 0x26u, 0xd0u, 0x20u, 0x00u, 0x01u, 0xa9u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u,
- 0x1cu, 0xd0u, 0x01u, 0x99u, 0x22u, 0x00u, 0xffu, 0xf7u, 0xa1u, 0xffu, 0x04u, 0x1eu, 0x16u, 0xd0u, 0xffu, 0xf7u,
- 0x91u, 0xffu, 0x63u, 0x68u, 0xa8u, 0x64u, 0x01u, 0x2bu, 0x2au, 0xd0u, 0x20u, 0x1du, 0x00u, 0x2bu, 0x23u, 0xdbu,
- 0xffu, 0xf7u, 0x88u, 0xffu, 0x00u, 0x23u, 0xe8u, 0x64u, 0x2bu, 0x65u, 0x03u, 0x68u, 0x00u, 0x2bu, 0x0fu, 0xdbu,
- 0xffu, 0xf7u, 0x80u, 0xffu, 0x28u, 0x61u, 0x00u, 0x20u, 0x03u, 0xb0u, 0x30u, 0xbdu, 0x00u, 0x23u, 0x09u, 0x20u,
- 0x2bu, 0x61u, 0xf9u, 0xe7u, 0x0du, 0x48u, 0x0eu, 0x49u, 0x09u, 0x1au, 0xc9u, 0x10u, 0x01u, 0x91u, 0xd9u, 0xe7u,
- 0x18u, 0x01u, 0x00u, 0x0fu, 0xffu, 0xf7u, 0xb2u, 0xffu, 0x28u, 0x61u, 0x43u, 0x1eu, 0x98u, 0x41u, 0x08u, 0x23u,
- 0x40u, 0x42u, 0x98u, 0x43u, 0x09u, 0x30u, 0xe7u, 0xe7u, 0x01u, 0x23u, 0xe8u, 0x64u, 0x2bu, 0x65u, 0xdcu, 0xe7u,
- 0x00u, 0x23u, 0x05u, 0x20u, 0x2bu, 0x61u, 0xdfu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x00u, 0xf8u, 0x1fu, 0x00u, 0x10u,
- 0xd0u, 0x20u, 0x00u, 0x10u, 0x03u, 0x68u, 0x10u, 0xb5u, 0x04u, 0x00u, 0xdau, 0x07u, 0x05u, 0xd4u, 0x9bu, 0x07u,
- 0x0au, 0xd5u, 0x48u, 0x30u, 0x00u, 0xf0u, 0x80u, 0xfcu, 0x23u, 0x68u, 0x5au, 0x07u, 0x0au, 0xd5u, 0x1au, 0x07u,
- 0x0fu, 0xd5u, 0xdbu, 0x06u, 0x15u, 0xd5u, 0x10u, 0xbdu, 0x48u, 0x30u, 0x00u, 0xf0u, 0x71u, 0xfcu, 0x23u, 0x68u,
- 0x5au, 0x07u, 0xf4u, 0xd4u, 0x20u, 0x00u, 0xd0u, 0x30u, 0x00u, 0xf0u, 0x72u, 0xfcu, 0x23u, 0x68u, 0x1au, 0x07u,
- 0xefu, 0xd4u, 0x20u, 0x00u, 0x51u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x6eu, 0xfcu, 0x23u, 0x68u, 0xdbu, 0x06u,
- 0xe9u, 0xd4u, 0x20u, 0x00u, 0xd1u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x6au, 0xfcu, 0xe3u, 0xe7u, 0xc0u, 0x46u,
- 0x09u, 0x20u, 0x70u, 0x47u, 0x03u, 0x00u, 0x00u, 0x68u, 0x00u, 0x28u, 0x00u, 0xd0u, 0xc0u, 0x18u, 0x70u, 0x47u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x20u, 0x00u, 0x29u, 0x6cu, 0xffu, 0xf7u,
- 0x73u, 0xffu, 0x00u, 0x28u, 0x11u, 0xd1u, 0x2bu, 0x6cu, 0x2au, 0x00u, 0x63u, 0x61u, 0x21u, 0x00u, 0x01u, 0x20u,
- 0x23u, 0x69u, 0x98u, 0x47u, 0x08u, 0x28u, 0xf0u, 0xd0u, 0x07u, 0x28u, 0x06u, 0xd1u, 0x00u, 0x20u, 0x29u, 0x6cu,
- 0xffu, 0xf7u, 0xe6u, 0xffu, 0x28u, 0x1du, 0x00u, 0xf0u, 0x1du, 0xfcu, 0x00u, 0xf0u, 0xadu, 0xfeu, 0xc0u, 0x46u,
- 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u, 0xc3u, 0x68u, 0x30u, 0x4cu, 0x98u, 0x46u, 0xa5u, 0x44u,
- 0x83u, 0x69u, 0x04u, 0x00u, 0x16u, 0x00u, 0x04u, 0x31u, 0x40u, 0x22u, 0x05u, 0xa8u, 0x99u, 0x46u, 0x00u, 0xf0u,
- 0xddu, 0xfeu, 0x00u, 0x23u, 0x04u, 0x93u, 0x25u, 0xe0u, 0xf0u, 0x22u, 0x14u, 0x9bu, 0x52u, 0x00u, 0x63u, 0x61u,
- 0x04u, 0xa9u, 0x7cu, 0xa8u, 0x03u, 0x93u, 0x00u, 0xf0u, 0xd1u, 0xfeu, 0x21u, 0x00u, 0x28u, 0x00u, 0x23u, 0x69u,
- 0x7cu, 0xaau, 0x98u, 0x47u, 0x8au, 0x9bu, 0x05u, 0x00u, 0x03u, 0x93u, 0x15u, 0x93u, 0x4bu, 0x46u, 0x01u, 0x93u,
- 0x04u, 0xabu, 0x00u, 0x93u, 0x22u, 0x00u, 0x23u, 0x00u, 0x31u, 0x00u, 0x01u, 0x20u, 0xc0u, 0x47u, 0x00u, 0x28u,
- 0x22u, 0xd1u, 0xf0u, 0x22u, 0x7cu, 0xa9u, 0x52u, 0x00u, 0x04u, 0xa8u, 0x00u, 0xf0u, 0xb7u, 0xfeu, 0x00u, 0x26u,
- 0x08u, 0x2du, 0x22u, 0xd1u, 0x14u, 0x9bu, 0x20u, 0x00u, 0x19u, 0x00u, 0x03u, 0x93u, 0xffu, 0xf7u, 0x1cu, 0xffu,
- 0x09u, 0x36u, 0x07u, 0x00u, 0xf5u, 0xb2u, 0x00u, 0x28u, 0xceu, 0xd0u, 0x12u, 0x9bu, 0x10u, 0x21u, 0x03u, 0x93u,
- 0x15u, 0x93u, 0x4bu, 0x46u, 0x01u, 0x93u, 0x04u, 0xabu, 0x00u, 0x93u, 0x22u, 0x00u, 0x23u, 0x00u, 0x01u, 0x20u,
- 0x29u, 0x43u, 0xc0u, 0x47u, 0x00u, 0x28u, 0x00u, 0xd0u, 0x09u, 0x27u, 0x38u, 0x00u, 0xf5u, 0x23u, 0x9bu, 0x00u,
- 0x9du, 0x44u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0x07u, 0x2du, 0xf4u, 0xd1u, 0x30u, 0x00u,
- 0x14u, 0x99u, 0xffu, 0xf7u, 0x7du, 0xffu, 0x05u, 0xa8u, 0x00u, 0xf0u, 0xb4u, 0xfbu, 0x2cu, 0xfcu, 0xffu, 0xffu,
- 0x40u, 0x6cu, 0x70u, 0x47u, 0x70u, 0xb5u, 0xcbu, 0x6bu, 0xfau, 0xb0u, 0x0bu, 0x64u, 0x05u, 0x00u, 0x0eu, 0x00u,
- 0x40u, 0x22u, 0x04u, 0x31u, 0x03u, 0xa8u, 0x00u, 0xf0u, 0x79u, 0xfeu, 0x01u, 0x23u, 0x5bu, 0x42u, 0x02u, 0x93u,
- 0x06u, 0xe0u, 0x29u, 0x00u, 0x2bu, 0x69u, 0x02u, 0xaau, 0x98u, 0x47u, 0x04u, 0x00u, 0x08u, 0x28u, 0x0au, 0xd1u,
- 0x12u, 0x9bu, 0x28u, 0x00u, 0x19u, 0x00u, 0x01u, 0x93u, 0xffu, 0xf7u, 0xd6u, 0xfeu, 0x00u, 0x28u, 0xf0u, 0xd0u,
- 0x09u, 0x20u, 0x7au, 0xb0u, 0x70u, 0xbdu, 0x02u, 0xa8u, 0xffu, 0xf7u, 0x1cu, 0xffu, 0x06u, 0x2cu, 0xf7u, 0xd1u,
- 0x31u, 0x00u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x4eu, 0xffu, 0x10u, 0xb5u, 0x82u, 0x61u, 0xdau, 0x6bu, 0xc1u, 0x60u,
- 0x1au, 0x64u, 0x19u, 0x00u, 0x00u, 0x22u, 0xffu, 0xf7u, 0x63u, 0xffu, 0x10u, 0xbdu, 0x43u, 0x69u, 0x70u, 0xb5u,
- 0x0bu, 0x64u, 0xc3u, 0x68u, 0x04u, 0x00u, 0x0du, 0x00u, 0x00u, 0x2bu, 0x13u, 0xd1u, 0x0au, 0x00u, 0x23u, 0x69u,
- 0x01u, 0x00u, 0x02u, 0x20u, 0x98u, 0x47u, 0x07u, 0x28u, 0x05u, 0xd0u, 0x08u, 0x28u, 0x0fu, 0xd1u, 0x29u, 0x00u,
- 0x20u, 0x00u, 0xffu, 0xf7u, 0x2fu, 0xffu, 0x00u, 0x20u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0x29u, 0xffu, 0x28u, 0x1du,
- 0x00u, 0xf0u, 0x60u, 0xfbu, 0x01u, 0x22u, 0xffu, 0xf7u, 0x43u, 0xffu, 0x00u, 0xf0u, 0xedu, 0xfdu, 0x00u, 0xf0u,
- 0xebu, 0xfdu, 0xc0u, 0x46u, 0xc3u, 0x68u, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x05u, 0xd0u, 0xcbu, 0x6bu, 0x00u, 0x22u,
- 0x0bu, 0x64u, 0xffu, 0xf7u, 0x35u, 0xffu, 0x10u, 0xbdu, 0xffu, 0xf7u, 0x9cu, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x83u, 0x68u, 0x01u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x01u, 0xd0u, 0x01u, 0x20u,
- 0x98u, 0x47u, 0x10u, 0xbdu, 0x01u, 0x29u, 0x15u, 0xd0u, 0x0au, 0xd8u, 0x00u, 0x2bu, 0x10u, 0xd1u, 0x0fu, 0x2au,
- 0x0eu, 0xd8u, 0x92u, 0x00u, 0x82u, 0x18u, 0x52u, 0x68u, 0x00u, 0x9bu, 0x00u, 0x20u, 0x1au, 0x60u, 0x06u, 0xe0u,
- 0x01u, 0x20u, 0x03u, 0x39u, 0xc9u, 0xb2u, 0x88u, 0x42u, 0x80u, 0x41u, 0x40u, 0x42u, 0x01u, 0x30u, 0x70u, 0x47u,
- 0x02u, 0x20u, 0xfcu, 0xe7u, 0x01u, 0x20u, 0xfau, 0xe7u, 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x0au, 0x00u,
- 0x00u, 0x93u, 0x00u, 0x21u, 0x00u, 0x23u, 0xffu, 0xf7u, 0xddu, 0xffu, 0x03u, 0x98u, 0x05u, 0xb0u, 0x00u, 0xbdu,
- 0x01u, 0x29u, 0x15u, 0xd0u, 0x0au, 0xd8u, 0x00u, 0x2bu, 0x10u, 0xd1u, 0x0fu, 0x2au, 0x0eu, 0xd8u, 0x00u, 0x9bu,
- 0x92u, 0x00u, 0x1bu, 0x68u, 0x82u, 0x18u, 0x53u, 0x60u, 0x00u, 0x20u, 0x06u, 0xe0u, 0x01u, 0x20u, 0x03u, 0x39u,
- 0xc9u, 0xb2u, 0x88u, 0x42u, 0x80u, 0x41u, 0x40u, 0x42u, 0x01u, 0x30u, 0x70u, 0x47u, 0x02u, 0x20u, 0xfcu, 0xe7u,
- 0x01u, 0x20u, 0xfau, 0xe7u, 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x03u, 0x92u, 0x00u, 0x93u, 0x0au, 0x00u,
- 0x00u, 0x23u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xdcu, 0xffu, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x70u, 0xb5u, 0x1au, 0x4cu,
- 0xd3u, 0x6bu, 0xa5u, 0x44u, 0x13u, 0x64u, 0x05u, 0x00u, 0x0cu, 0x00u, 0x19u, 0xa8u, 0x11u, 0x1du, 0x40u, 0x22u,
- 0x00u, 0xf0u, 0xbcu, 0xfdu, 0x01u, 0x23u, 0x5bu, 0x42u, 0x18u, 0x93u, 0x14u, 0xe0u, 0x0cu, 0x21u, 0x18u, 0xa8u,
- 0x02u, 0xaau, 0xffu, 0xf7u, 0xdfu, 0xffu, 0x21u, 0x00u, 0x18u, 0xa8u, 0xa8u, 0x47u, 0x00u, 0x28u, 0x12u, 0xd1u,
- 0x06u, 0x9bu, 0x18u, 0xaau, 0x02u, 0xa9u, 0x08u, 0x30u, 0x01u, 0x93u, 0x98u, 0x47u, 0x06u, 0x00u, 0x05u, 0x28u,
- 0x0au, 0xd0u, 0x09u, 0x28u, 0x07u, 0xd0u, 0x28u, 0x9bu, 0x02u, 0xa8u, 0x19u, 0x00u, 0x01u, 0x93u, 0xffu, 0xf7u,
- 0x0bu, 0xfeu, 0x00u, 0x28u, 0xe2u, 0xd0u, 0x09u, 0x26u, 0x18u, 0xa8u, 0xffu, 0xf7u, 0x53u, 0xfeu, 0x30u, 0x00u,
- 0x90u, 0x23u, 0x9bu, 0x00u, 0x9du, 0x44u, 0x70u, 0xbdu, 0xc0u, 0xfdu, 0xffu, 0xffu, 0xf0u, 0xb5u, 0x57u, 0x46u,
- 0x92u, 0x46u, 0x03u, 0x22u, 0x45u, 0x46u, 0x4eu, 0x46u, 0xdeu, 0x46u, 0x99u, 0x46u, 0x13u, 0x00u, 0xe0u, 0xb5u,
- 0x88u, 0x46u, 0xcdu, 0x6cu, 0x49u, 0x46u, 0x89u, 0xb0u, 0x03u, 0x40u, 0x00u, 0x93u, 0x08u, 0xcdu, 0x06u, 0x95u,
- 0x00u, 0x29u, 0x00u, 0xd1u, 0x80u, 0xe0u, 0x1au, 0x0cu, 0x1bu, 0x04u, 0x05u, 0x93u, 0x02u, 0x23u, 0x04u, 0xa9u,
- 0x0bu, 0x73u, 0xfdu, 0x33u, 0x13u, 0x40u, 0x9bu, 0x00u, 0x4au, 0x73u, 0xedu, 0x18u, 0x00u, 0x9bu, 0x02u, 0x2bu,
- 0x01u, 0xd1u, 0x43u, 0x46u, 0x9du, 0x6bu, 0x43u, 0x46u, 0x1bu, 0x6du, 0xdbu, 0x07u, 0x0fu, 0xd5u, 0x50u, 0x46u,
- 0x05u, 0xa9u, 0x00u, 0xf0u, 0x5bu, 0xfbu, 0x00u, 0x28u, 0x01u, 0xd1u, 0x08u, 0x20u, 0x00u, 0xe0u, 0x09u, 0x20u,
- 0x09u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0x2fu, 0x68u,
- 0x00u, 0x2fu, 0xecu, 0xd0u, 0x08u, 0x23u, 0x03u, 0x40u, 0x02u, 0x93u, 0x00u, 0x23u, 0x01u, 0x93u, 0x01u, 0x33u,
- 0x54u, 0x46u, 0x9bu, 0x46u, 0x46u, 0x46u, 0xbau, 0x46u, 0x4bu, 0x46u, 0x02u, 0x2bu, 0x49u, 0xd0u, 0x2bu, 0x88u,
- 0x6fu, 0x88u, 0x9au, 0x46u, 0x04u, 0x35u, 0x5au, 0x46u, 0x3bu, 0x00u, 0x93u, 0x43u, 0xb2u, 0x6cu, 0x0fu, 0x21u,
- 0x90u, 0x46u, 0x20u, 0x00u, 0x98u, 0x44u, 0xffu, 0xf7u, 0x3fu, 0xffu, 0x00u, 0x23u, 0x80u, 0x45u, 0x06u, 0xd8u,
- 0x53u, 0x46u, 0x5au, 0x46u, 0x93u, 0x43u, 0x43u, 0x44u, 0x98u, 0x42u, 0x9bu, 0x41u, 0x5bu, 0x42u, 0x02u, 0x22u,
- 0x7fu, 0x00u, 0x17u, 0x40u, 0x59u, 0x46u, 0x52u, 0x46u, 0x0au, 0x40u, 0x17u, 0x43u, 0x01u, 0x2fu, 0x30u, 0xd0u,
- 0x02u, 0x2fu, 0x4cu, 0xd0u, 0x00u, 0x2fu, 0xc2u, 0xd1u, 0x00u, 0x9au, 0x00u, 0x2au, 0x02u, 0xd0u, 0x00u, 0x2bu,
- 0x00u, 0xd0u, 0x9bu, 0xe0u, 0x04u, 0x35u, 0x2bu, 0x68u, 0x9au, 0x46u, 0x00u, 0x2bu, 0xccu, 0xd1u, 0x20u, 0x00u,
- 0x05u, 0xa9u, 0xa2u, 0x46u, 0x00u, 0xf0u, 0x0au, 0xfbu, 0x00u, 0x28u, 0xb0u, 0xd1u, 0x01u, 0x9bu, 0x00u, 0x2bu,
- 0xabu, 0xd0u, 0x0fu, 0x21u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x0fu, 0xffu, 0x0eu, 0x21u, 0x02u, 0x00u, 0x50u, 0x46u,
- 0xffu, 0xf7u, 0x30u, 0xffu, 0x50u, 0x46u, 0x0fu, 0x21u, 0x72u, 0x4au, 0xffu, 0xf7u, 0x2bu, 0xffu, 0x07u, 0x20u,
- 0x9eu, 0xe7u, 0x6fu, 0x68u, 0x08u, 0x35u, 0xb6u, 0xe7u, 0x1bu, 0x02u, 0x05u, 0x93u, 0x04u, 0xabu, 0x9au, 0x81u,
- 0x84u, 0xe7u, 0x00u, 0x9au, 0x00u, 0x2au, 0x49u, 0xd1u, 0x00u, 0x2bu, 0x16u, 0xd0u, 0x2bu, 0x68u, 0xdfu, 0x0fu,
- 0x6bu, 0x68u, 0x9au, 0x1cu, 0x00u, 0xd1u, 0x8au, 0xe7u, 0x32u, 0x00u, 0x58u, 0x32u, 0x04u, 0x92u, 0x01u, 0x33u,
- 0x00u, 0xd1u, 0xb6u, 0xe0u, 0x28u, 0x1du, 0xffu, 0xf7u, 0xcdu, 0xfdu, 0x3au, 0x00u, 0x01u, 0x00u, 0x04u, 0xabu,
- 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x6cu, 0xd1u, 0x08u, 0x35u, 0xbbu, 0xe7u, 0x2au, 0x68u,
- 0x00u, 0x99u, 0x57u, 0x00u, 0x7fu, 0x08u, 0x00u, 0x29u, 0x0du, 0xd1u, 0x00u, 0x2bu, 0x04u, 0xd0u, 0x02u, 0x9bu,
- 0x00u, 0x2bu, 0x72u, 0xd0u, 0x00u, 0x2fu, 0x3cu, 0xd0u, 0x00u, 0x2au, 0x00u, 0xdau, 0x04u, 0x35u, 0x01u, 0x37u,
- 0xbfu, 0x00u, 0xedu, 0x19u, 0xa7u, 0xe7u, 0x33u, 0x6au, 0x0du, 0x21u, 0x20u, 0x00u, 0x98u, 0x46u, 0xffu, 0xf7u,
- 0xc3u, 0xfeu, 0x80u, 0x45u, 0x01u, 0xd0u, 0x2au, 0x68u, 0xeeu, 0xe7u, 0xb3u, 0x6au, 0x9du, 0x42u, 0xfau, 0xd1u,
- 0x00u, 0x23u, 0xf3u, 0x62u, 0x04u, 0x33u, 0x33u, 0x63u, 0x2bu, 0x1du, 0xb7u, 0x62u, 0x73u, 0x63u, 0x2bu, 0x68u,
- 0x00u, 0x2bu, 0x00u, 0xdau, 0x87u, 0xe0u, 0x01u, 0x23u, 0x01u, 0x93u, 0xe0u, 0xe7u, 0x0du, 0x21u, 0x20u, 0x00u,
- 0x37u, 0x6au, 0xffu, 0xf7u, 0xa9u, 0xfeu, 0x87u, 0x42u, 0xc7u, 0xd1u, 0xb3u, 0x6au, 0x9du, 0x42u, 0xc4u, 0xd1u,
- 0xb0u, 0x46u, 0xa2u, 0x46u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xadu, 0xfcu, 0x0fu, 0x21u, 0x02u, 0x00u, 0x50u, 0x46u,
- 0xffu, 0xf7u, 0xc0u, 0xfeu, 0x50u, 0x46u, 0x42u, 0x46u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xbbu, 0xfeu, 0x07u, 0x20u,
- 0x2eu, 0xe7u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x0du, 0x21u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x8du, 0xfeu, 0x43u, 0x46u,
- 0x04u, 0x9au, 0x18u, 0x62u, 0x5au, 0x62u, 0x06u, 0x20u, 0x9du, 0x62u, 0x21u, 0xe7u, 0x28u, 0x00u, 0xffu, 0xf7u,
- 0x91u, 0xfcu, 0x04u, 0x35u, 0xa2u, 0x46u, 0xb5u, 0x63u, 0x04u, 0x00u, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu,
- 0x00u, 0x28u, 0x00u, 0xd1u, 0x13u, 0xe7u, 0x50u, 0x46u, 0x22u, 0x00u, 0x0fu, 0x21u, 0xffu, 0xf7u, 0x9au, 0xfeu,
- 0x07u, 0x20u, 0x0du, 0xe7u, 0xa2u, 0x46u, 0x0du, 0x21u, 0x04u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x6cu, 0xfeu,
- 0xb0u, 0x46u, 0x33u, 0x00u, 0x30u, 0x62u, 0x02u, 0x2cu, 0x39u, 0xd1u, 0x04u, 0x9au, 0x2cu, 0x33u, 0xf2u, 0x62u,
- 0x73u, 0x62u, 0x43u, 0x46u, 0x06u, 0x20u, 0x9du, 0x62u, 0xfau, 0xe6u, 0x2bu, 0x1du, 0x9au, 0x46u, 0x00u, 0x23u,
- 0x98u, 0x46u, 0x58u, 0x33u, 0x9cu, 0x46u, 0x21u, 0x00u, 0x4au, 0x46u, 0xb4u, 0x44u, 0x54u, 0x46u, 0xa9u, 0x46u,
- 0x8au, 0x46u, 0x3du, 0x00u, 0x03u, 0x92u, 0x47u, 0x46u, 0xe0u, 0x46u, 0x0eu, 0xe0u, 0x43u, 0x46u, 0x20u, 0x00u,
- 0x04u, 0x93u, 0xffu, 0xf7u, 0x2fu, 0xfdu, 0x00u, 0x22u, 0x01u, 0x00u, 0x04u, 0xabu, 0x30u, 0x00u, 0x00u, 0xe0u,
- 0x00u, 0xbfu, 0x01u, 0x37u, 0x04u, 0x34u, 0x00u, 0x28u, 0x04u, 0xd1u, 0xafu, 0x42u, 0xeeu, 0xd1u, 0x4du, 0x46u,
- 0xb0u, 0x46u, 0xa8u, 0xe7u, 0x2fu, 0x00u, 0x4du, 0x46u, 0x03u, 0x9bu, 0x54u, 0x46u, 0x99u, 0x46u, 0x2au, 0x68u,
- 0x62u, 0xe7u, 0x0du, 0x21u, 0x20u, 0x00u, 0xffu, 0xf7u, 0x2fu, 0xfeu, 0xb0u, 0x46u, 0x30u, 0x62u, 0x43u, 0x46u,
- 0x04u, 0x9au, 0x5au, 0x62u, 0xc5u, 0xe7u, 0x78u, 0x1cu, 0x80u, 0x00u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x28u, 0x18u,
- 0x81u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x23u, 0xffu, 0xf7u, 0x86u, 0xfeu,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0x01u, 0x23u, 0xffu, 0xf7u, 0x80u, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x10u, 0xb5u, 0x02u, 0x23u, 0xffu, 0xf7u, 0x7au, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u,
- 0x47u, 0x46u, 0x80u, 0xb5u, 0x05u, 0x00u, 0x14u, 0x00u, 0x1eu, 0x00u, 0xc3u, 0xb0u, 0x03u, 0x29u, 0x44u, 0xd0u,
- 0x20u, 0xd8u, 0x00u, 0x29u, 0x49u, 0xd0u, 0x01u, 0x29u, 0x41u, 0xd1u, 0x13u, 0x0cu, 0x14u, 0x04u, 0x98u, 0x46u,
- 0x23u, 0x0cu, 0x99u, 0x46u, 0x01u, 0x2eu, 0x00u, 0xd1u, 0x7au, 0xe0u, 0x05u, 0x2eu, 0x37u, 0xd1u, 0x44u, 0x46u,
- 0x4cu, 0x44u, 0x20u, 0x2cu, 0x33u, 0xd8u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x00u, 0xd8u, 0xb5u, 0xe0u, 0x4cu, 0x46u,
- 0x00u, 0x2cu, 0x00u, 0xd0u, 0xc2u, 0xe0u, 0x4au, 0x46u, 0xa9u, 0x6bu, 0x20u, 0xafu, 0x00u, 0x2au, 0x22u, 0xd0u,
- 0x00u, 0x24u, 0x7fu, 0xe0u, 0x04u, 0x29u, 0x22u, 0xd1u, 0x00u, 0x2bu, 0x20u, 0xd1u, 0x10u, 0x2au, 0x1eu, 0xd8u,
- 0x10u, 0x22u, 0x03u, 0x68u, 0x1au, 0x42u, 0x00u, 0xd0u, 0xc7u, 0xe0u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u,
- 0x21u, 0xf9u, 0x01u, 0x26u, 0x39u, 0x00u, 0x00u, 0x23u, 0xaau, 0x6bu, 0x30u, 0x00u, 0x98u, 0x40u, 0x04u, 0x42u,
- 0x01u, 0xd0u, 0x01u, 0xcau, 0x08u, 0x60u, 0x01u, 0x33u, 0x04u, 0x31u, 0x04u, 0x2bu, 0xf5u, 0xd1u, 0x38u, 0x00u,
- 0xaau, 0x63u, 0x00u, 0xf0u, 0x0du, 0xf9u, 0x00u, 0x20u, 0x02u, 0xe0u, 0x03u, 0x2bu, 0x1cu, 0xd0u, 0x02u, 0x20u,
- 0x43u, 0xb0u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0x00u, 0x2bu, 0xf7u, 0xd1u, 0x00u, 0x23u,
- 0x01u, 0x27u, 0x16u, 0x04u, 0x82u, 0x6bu, 0x36u, 0x0cu, 0x01u, 0x1du, 0x38u, 0x00u, 0x98u, 0x40u, 0x06u, 0x42u,
- 0x01u, 0xd0u, 0x01u, 0xcau, 0x08u, 0x60u, 0x01u, 0x33u, 0x04u, 0x31u, 0x10u, 0x2bu, 0xf5u, 0xd1u, 0x00u, 0x20u,
- 0xa3u, 0x04u, 0xe5u, 0xd4u, 0xaau, 0x63u, 0xe3u, 0xe7u, 0x14u, 0x04u, 0x16u, 0x0cu, 0x24u, 0x0cu, 0x33u, 0x19u,
- 0x10u, 0x2bu, 0xdcu, 0xd8u, 0x08u, 0x22u, 0x03u, 0x68u, 0x1au, 0x42u, 0x00u, 0xd0u, 0x8cu, 0xe0u, 0x20u, 0xafu,
- 0x38u, 0x00u, 0x00u, 0xf0u, 0xdbu, 0xf8u, 0xf6u, 0x00u, 0xabu, 0x6bu, 0x00u, 0x2cu, 0x0au, 0xd0u, 0xf6u, 0x1au,
- 0xe4u, 0x00u, 0x32u, 0x1fu, 0x1cu, 0x19u, 0xbau, 0x18u, 0x19u, 0x00u, 0x09u, 0x68u, 0x04u, 0x33u, 0x99u, 0x50u,
- 0xa3u, 0x42u, 0xf9u, 0xd1u, 0x38u, 0x00u, 0xabu, 0x63u, 0x00u, 0xf0u, 0xc6u, 0xf8u, 0x00u, 0x20u, 0xbfu, 0xe7u,
- 0x43u, 0x46u, 0x4bu, 0x44u, 0x10u, 0x2bu, 0xbau, 0xd8u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0xb7u, 0xd8u, 0x2bu, 0x68u,
- 0x1eu, 0x42u, 0x06u, 0xd0u, 0x03u, 0x22u, 0x28u, 0x00u, 0x93u, 0x43u, 0x2bu, 0x60u, 0x48u, 0x30u, 0x00u, 0xf0u,
- 0xa9u, 0xf8u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0xa5u, 0xf8u, 0x4au, 0x46u, 0x00u, 0x24u, 0xa9u, 0x6bu,
- 0x00u, 0x2au, 0x61u, 0xd0u, 0x43u, 0x46u, 0xdbu, 0x00u, 0xffu, 0x18u, 0x00u, 0x23u, 0xd2u, 0x00u, 0xc8u, 0x58u,
- 0xf8u, 0x50u, 0x04u, 0x33u, 0x9au, 0x42u, 0xfau, 0xd1u, 0x89u, 0x18u, 0x00u, 0x2cu, 0x0fu, 0xd0u, 0x6fu, 0x46u,
- 0x40u, 0x46u, 0x10u, 0x28u, 0x00u, 0xd2u, 0x10u, 0x20u, 0x00u, 0x23u, 0x10u, 0x38u, 0xc0u, 0x00u, 0x38u, 0x18u,
- 0xe2u, 0x00u, 0xcfu, 0x58u, 0xc7u, 0x50u, 0x04u, 0x33u, 0x93u, 0x42u, 0xfau, 0xd1u, 0xc9u, 0x18u, 0x01u, 0x2eu,
- 0x41u, 0xd0u, 0x43u, 0x46u, 0xa9u, 0x63u, 0x0fu, 0x2bu, 0x45u, 0xd9u, 0x00u, 0x2cu, 0x00u, 0xd1u, 0x7au, 0xe7u,
- 0x68u, 0x46u, 0x00u, 0xf0u, 0x7du, 0xf8u, 0x00u, 0x20u, 0x7au, 0xe7u, 0x10u, 0x2cu, 0x46u, 0xd9u, 0x10u, 0x3cu,
- 0x01u, 0x22u, 0x2bu, 0x68u, 0x1au, 0x42u, 0x07u, 0xd0u, 0x93u, 0x43u, 0x02u, 0x22u, 0x28u, 0x00u, 0x13u, 0x43u,
- 0x2bu, 0x60u, 0x48u, 0x30u, 0x00u, 0xf0u, 0x6au, 0xf8u, 0x00u, 0x2cu, 0x39u, 0xd0u, 0x04u, 0x22u, 0x2bu, 0x68u,
- 0x1au, 0x42u, 0x2cu, 0xd1u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x03u, 0xd8u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u,
- 0x5du, 0xf8u, 0x6fu, 0x46u, 0x38u, 0x00u, 0x00u, 0xf0u, 0x5du, 0xf8u, 0x10u, 0x22u, 0x43u, 0x46u, 0xa9u, 0x6bu,
- 0xd2u, 0x1au, 0x00u, 0x2au, 0xbcu, 0xddu, 0x20u, 0xafu, 0xacu, 0xe7u, 0x93u, 0x43u, 0x03u, 0x60u, 0xd1u, 0x30u,
- 0xffu, 0x30u, 0x00u, 0xf0u, 0x57u, 0xf8u, 0x30u, 0xe7u, 0x93u, 0x43u, 0x03u, 0x60u, 0x51u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0xf0u, 0x4cu, 0xf8u, 0x6bu, 0xe7u, 0x20u, 0xafu, 0x04u, 0x31u, 0x38u, 0x00u, 0xa9u, 0x63u, 0x00u, 0xf0u,
- 0x37u, 0xf8u, 0x00u, 0x20u, 0x3cu, 0xe7u, 0x20u, 0xa8u, 0x00u, 0xf0u, 0x36u, 0xf8u, 0xb5u, 0xe7u, 0x28u, 0x00u,
- 0x93u, 0x43u, 0x2bu, 0x60u, 0xd0u, 0x30u, 0x00u, 0xf0u, 0x35u, 0xf8u, 0xcbu, 0xe7u, 0x00u, 0x24u, 0xb7u, 0xe7u,
- 0x43u, 0x46u, 0x0fu, 0x2bu, 0x00u, 0xd9u, 0xfeu, 0xe6u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x26u, 0xf8u,
- 0x4au, 0x46u, 0xa9u, 0x6bu, 0x00u, 0x2au, 0x00u, 0xd0u, 0xfau, 0xe6u, 0x38u, 0x00u, 0x00u, 0xf0u, 0x1cu, 0xf8u,
- 0x00u, 0x20u, 0x1du, 0xe7u, 0x01u, 0x00u, 0x34u, 0x31u, 0x38u, 0xc9u, 0x04u, 0x3bu, 0x9cu, 0x46u, 0x1du, 0x60u,
- 0xa6u, 0x46u, 0x01u, 0x00u, 0x20u, 0x31u, 0x3cu, 0xc9u, 0x90u, 0x46u, 0x99u, 0x46u, 0xa2u, 0x46u, 0xabu, 0x46u,
- 0x01u, 0x00u, 0x08u, 0x31u, 0xfcu, 0xc9u, 0x41u, 0x68u, 0x00u, 0x68u, 0xe5u, 0x46u, 0x00u, 0xbdu, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u,
- 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u,
- 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u,
- 0x11u, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u,
- 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u,
- 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u,
- 0x2du, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u,
- 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u,
- 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u,
- 0x39u, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u,
- 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u,
- 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xabu, 0xffu, 0xf7u,
- 0xf3u, 0xfbu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u,
- 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u,
- 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xaau, 0xffu, 0xf7u,
- 0x6du, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x02u, 0x7au, 0x03u, 0x00u, 0x00u, 0x2au, 0x0bu, 0xd1u,
- 0x42u, 0x7au, 0x00u, 0x2au, 0x0fu, 0xd0u, 0x01u, 0x3au, 0x42u, 0x72u, 0x42u, 0x68u, 0x11u, 0x1du, 0x41u, 0x60u,
- 0x03u, 0x21u, 0x12u, 0x68u, 0x01u, 0x72u, 0x02u, 0xe0u, 0x01u, 0x3au, 0x02u, 0x72u, 0x02u, 0x68u, 0x10u, 0x0eu,
- 0x12u, 0x02u, 0x1au, 0x60u, 0x70u, 0x47u, 0xb0u, 0x20u, 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xb5u, 0x85u, 0xb0u,
- 0x03u, 0xabu, 0x00u, 0x93u, 0x0cu, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xfbu, 0xfbu, 0x03u, 0x98u,
- 0x05u, 0xb0u, 0x00u, 0xbdu, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xf1u, 0xffu, 0x10u, 0xbdu, 0xf0u, 0xb5u, 0x4eu, 0x46u,
- 0x45u, 0x46u, 0x57u, 0x46u, 0xdeu, 0x46u, 0x00u, 0x23u, 0xe0u, 0xb5u, 0x87u, 0xb0u, 0x03u, 0x93u, 0x0fu, 0x33u,
- 0x98u, 0x46u, 0x08u, 0x3bu, 0x99u, 0x46u, 0x80u, 0x23u, 0x1bu, 0x03u, 0x05u, 0x00u, 0x0eu, 0x00u, 0x9au, 0x46u,
- 0x30u, 0x00u, 0xffu, 0xf7u, 0xc1u, 0xffu, 0x04u, 0x00u, 0xb0u, 0x28u, 0x00u, 0xd1u, 0xc1u, 0xe0u, 0x03u, 0x06u,
- 0x29u, 0xd5u, 0x03u, 0x00u, 0x42u, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0x80u, 0x2bu, 0x53u, 0xd0u, 0x90u, 0x2bu,
- 0x3du, 0xd0u, 0xa0u, 0x2bu, 0x6bu, 0xd0u, 0xb0u, 0x2bu, 0x00u, 0xd1u, 0x7eu, 0xe0u, 0xc0u, 0x2bu, 0x00u, 0xd1u,
- 0x95u, 0xe0u, 0x03u, 0x00u, 0x4au, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0xd0u, 0x2bu, 0x0au, 0xd1u, 0x53u, 0x46u,
- 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x05u, 0x23u, 0x01u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xc6u, 0xfdu,
- 0x00u, 0x28u, 0xd5u, 0xd0u, 0x09u, 0x24u, 0x20u, 0x00u, 0x07u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u,
- 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0xffu, 0x23u, 0x82u, 0x00u, 0x13u, 0x40u, 0x1fu, 0x1du, 0x05u, 0xabu,
- 0x9bu, 0x46u, 0x00u, 0x93u, 0x0du, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xa2u, 0xfbu,
- 0x63u, 0x06u, 0x39u, 0xd4u, 0x05u, 0x9bu, 0x9cu, 0x46u, 0x67u, 0x44u, 0x5bu, 0x46u, 0x05u, 0x97u, 0x00u, 0x93u,
- 0x00u, 0x23u, 0x0du, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xbau, 0xfbu, 0xb0u, 0xe7u, 0x83u, 0x3bu,
- 0x03u, 0x40u, 0x0du, 0x2bu, 0xd6u, 0xd0u, 0x05u, 0xafu, 0x02u, 0x40u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u,
- 0x00u, 0x97u, 0xffu, 0xf7u, 0x87u, 0xfbu, 0x00u, 0x23u, 0x0du, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x97u,
- 0xffu, 0xf7u, 0xa6u, 0xfbu, 0x9cu, 0xe7u, 0x04u, 0x02u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x5du, 0xffu, 0x80u, 0x27u,
- 0x20u, 0x43u, 0x3fu, 0x02u, 0xb8u, 0x42u, 0xbdu, 0xd0u, 0x04u, 0x01u, 0x00u, 0x05u, 0x02u, 0x0cu, 0x00u, 0x23u,
- 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x7au, 0xfdu, 0x00u, 0x28u, 0xb3u, 0xd1u, 0x3cu, 0x42u, 0x00u, 0xd1u,
- 0x86u, 0xe7u, 0x01u, 0x23u, 0x03u, 0x93u, 0x83u, 0xe7u, 0x05u, 0x9bu, 0xdfu, 0x1bu, 0xc5u, 0xe7u, 0xffu, 0x23u,
- 0x4au, 0x46u, 0x1bu, 0x01u, 0x19u, 0x00u, 0x82u, 0x43u, 0x11u, 0x41u, 0x0au, 0x00u, 0x1au, 0x40u, 0x03u, 0x07u,
- 0x02u, 0xd5u, 0x80u, 0x23u, 0xdbu, 0x01u, 0x1au, 0x43u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u,
- 0x5du, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x6bu, 0xe7u, 0x94u, 0xe7u, 0xb1u, 0x28u, 0x45u, 0xd0u, 0xb2u, 0x28u,
- 0x00u, 0xd1u, 0x9fu, 0xe0u, 0xb3u, 0x28u, 0x55u, 0xd0u, 0xfcu, 0x23u, 0x03u, 0x40u, 0xb4u, 0x2bu, 0x00u, 0xd1u,
- 0x88u, 0xe7u, 0x4au, 0x46u, 0x53u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x01u, 0x21u, 0x01u, 0x23u,
- 0x28u, 0x00u, 0xffu, 0xf7u, 0x43u, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x51u, 0xe7u, 0x7au, 0xe7u, 0xc6u, 0x28u,
- 0x4bu, 0xd0u, 0xc7u, 0x28u, 0x5du, 0xd0u, 0x03u, 0x00u, 0x4au, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0xc0u, 0x2bu,
- 0x6cu, 0xd0u, 0xc8u, 0x28u, 0x71u, 0xd0u, 0xc9u, 0x28u, 0x00u, 0xd0u, 0x6bu, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u,
- 0x03u, 0xffu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u,
- 0x58u, 0xe7u, 0x03u, 0x9bu, 0x00u, 0x24u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x5cu, 0xe7u, 0x05u, 0xaeu, 0x0eu, 0x22u,
- 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x96u, 0xffu, 0xf7u, 0x0du, 0xfbu, 0x00u, 0x23u, 0x0fu, 0x22u, 0x00u, 0x21u,
- 0x28u, 0x00u, 0x00u, 0x96u, 0xffu, 0xf7u, 0x2cu, 0xfbu, 0x4du, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xe4u, 0xfeu,
- 0x02u, 0x1eu, 0x00u, 0xd1u, 0x46u, 0xe7u, 0x03u, 0x00u, 0x41u, 0x46u, 0x8bu, 0x43u, 0xdbu, 0xb2u, 0x00u, 0x2bu,
- 0x00u, 0xd0u, 0x3fu, 0xe7u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x00u, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u,
- 0x0eu, 0xe7u, 0x37u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xcfu, 0xfeu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u,
- 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0xa7u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xc4u, 0xfeu,
- 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u,
- 0x03u, 0x23u, 0x03u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xe1u, 0xfcu, 0x00u, 0x28u, 0x00u, 0xd1u, 0xefu, 0xe6u,
- 0x18u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xb0u, 0xfeu, 0x02u, 0x1eu, 0x00u, 0xd1u, 0x12u, 0xe7u, 0x03u, 0x00u,
- 0x41u, 0x46u, 0x8bu, 0x43u, 0xdbu, 0xb2u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x0bu, 0xe7u, 0x04u, 0x21u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0xccu, 0xfcu, 0x00u, 0x28u, 0x00u, 0xd1u, 0xdau, 0xe6u, 0x03u, 0xe7u, 0x43u, 0x46u, 0xa0u, 0x22u,
- 0x1cu, 0x40u, 0x01u, 0x34u, 0x12u, 0x03u, 0x22u, 0x43u, 0xdau, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x94u, 0xfeu,
- 0x43u, 0x46u, 0x02u, 0x00u, 0x9au, 0x43u, 0xd2u, 0xb2u, 0x10u, 0x32u, 0x18u, 0x40u, 0x12u, 0x03u, 0x01u, 0x30u,
- 0x02u, 0x43u, 0xe8u, 0xe6u, 0x05u, 0xabu, 0x00u, 0x93u, 0x9bu, 0x46u, 0x0du, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u,
- 0x28u, 0x00u, 0xffu, 0xf7u, 0x9fu, 0xfau, 0x30u, 0x00u, 0xffu, 0xf7u, 0x7eu, 0xfeu, 0x03u, 0x06u, 0x1au, 0xd5u,
- 0x7fu, 0x27u, 0xb0u, 0x3cu, 0x05u, 0x9bu, 0x38u, 0x40u, 0xa0u, 0x40u, 0x9cu, 0x46u, 0x60u, 0x44u, 0x05u, 0x90u,
- 0x30u, 0x00u, 0x07u, 0x34u, 0xffu, 0xf7u, 0x70u, 0xfeu, 0x03u, 0x06u, 0xf3u, 0xd4u, 0x81u, 0x21u, 0x7fu, 0x23u,
- 0x89u, 0x00u, 0x8cu, 0x46u, 0x03u, 0x40u, 0xa3u, 0x40u, 0x05u, 0x9au, 0x62u, 0x44u, 0x9bu, 0x18u, 0x05u, 0x93u,
- 0x5bu, 0x46u, 0x00u, 0x93u, 0xe4u, 0xe6u, 0x02u, 0x24u, 0xf0u, 0xe7u, 0xc0u, 0x46u, 0x03u, 0x00u, 0x00u, 0xb5u,
- 0xdau, 0x6cu, 0x85u, 0xb0u, 0x53u, 0x68u, 0x08u, 0x00u, 0x08u, 0x32u, 0x19u, 0x02u, 0x01u, 0x91u, 0x02u, 0x92u,
- 0x69u, 0x46u, 0x03u, 0x22u, 0x1bu, 0x0eu, 0x0au, 0x73u, 0x4bu, 0x73u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x76u, 0xfeu,
- 0x05u, 0xb0u, 0x00u, 0xbdu, 0x10u, 0xb5u, 0xffu, 0xf7u, 0x6du, 0xfeu, 0x80u, 0x6cu, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x10u, 0xb5u, 0xffu, 0xf7u, 0x67u, 0xfeu, 0xc2u, 0x6cu, 0xd0u, 0x79u, 0x02u, 0x30u, 0x80u, 0x00u, 0x10u, 0x18u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x1cu, 0x21u, 0x01u, 0x23u, 0x1bu, 0x04u, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x0cu,
- 0x10u, 0x39u, 0x1bu, 0x0au, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x0au, 0x08u, 0x39u, 0x1bu, 0x09u, 0x98u, 0x42u,
- 0x01u, 0xd3u, 0x00u, 0x09u, 0x04u, 0x39u, 0x02u, 0xa2u, 0x10u, 0x5cu, 0x40u, 0x18u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x04u, 0x03u, 0x02u, 0x02u, 0x01u, 0x01u, 0x01u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x10u, 0xb5u, 0x00u, 0x29u, 0x03u, 0xd1u, 0xffu, 0xf7u, 0xddu, 0xffu, 0x20u, 0x30u, 0x02u, 0xe0u, 0x08u, 0x00u,
- 0xffu, 0xf7u, 0xd8u, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x06u, 0x20u, 0x10u, 0xb5u, 0x00u, 0xf0u, 0x7au, 0xf8u,
- 0x01u, 0x20u, 0x00u, 0xf0u, 0xa7u, 0xf8u, 0x00u, 0x00u, 0x08u, 0x4bu, 0x10u, 0xb5u, 0x04u, 0x00u, 0x00u, 0x2bu,
- 0x02u, 0xd0u, 0x00u, 0x21u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x05u, 0x4bu, 0x18u, 0x68u, 0x83u, 0x6au, 0x00u, 0x2bu,
- 0x00u, 0xd0u, 0x98u, 0x47u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x95u, 0xf8u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0xc0u, 0x1fu, 0x00u, 0x10u, 0x70u, 0xb5u, 0x00u, 0x26u, 0x0cu, 0x4du, 0x0du, 0x4cu, 0x64u, 0x1bu, 0xa4u, 0x10u,
- 0xa6u, 0x42u, 0x09u, 0xd1u, 0x00u, 0x26u, 0x00u, 0xf0u, 0x87u, 0xf8u, 0x0au, 0x4du, 0x0au, 0x4cu, 0x64u, 0x1bu,
- 0xa4u, 0x10u, 0xa6u, 0x42u, 0x05u, 0xd1u, 0x70u, 0xbdu, 0xb3u, 0x00u, 0xebu, 0x58u, 0x98u, 0x47u, 0x01u, 0x36u,
- 0xeeu, 0xe7u, 0xb3u, 0x00u, 0xebu, 0x58u, 0x98u, 0x47u, 0x01u, 0x36u, 0xf2u, 0xe7u, 0xe4u, 0x08u, 0x00u, 0x28u,
- 0xe4u, 0x08u, 0x00u, 0x28u, 0xe4u, 0x08u, 0x00u, 0x28u, 0xe8u, 0x08u, 0x00u, 0x28u, 0x00u, 0x23u, 0x10u, 0xb5u,
- 0x9au, 0x42u, 0x00u, 0xd1u, 0x10u, 0xbdu, 0xccu, 0x5cu, 0xc4u, 0x54u, 0x01u, 0x33u, 0xf8u, 0xe7u, 0x03u, 0x00u,
- 0x82u, 0x18u, 0x93u, 0x42u, 0x00u, 0xd1u, 0x70u, 0x47u, 0x19u, 0x70u, 0x01u, 0x33u, 0xf9u, 0xe7u, 0x70u, 0xb5u,
- 0x04u, 0x00u, 0x0du, 0x00u, 0x1fu, 0x29u, 0x04u, 0xd9u, 0x16u, 0x23u, 0x03u, 0x60u, 0x01u, 0x20u, 0x40u, 0x42u,
- 0x70u, 0xbdu, 0x43u, 0x6cu, 0x00u, 0x2bu, 0x04u, 0xd0u, 0x8au, 0x00u, 0x9bu, 0x18u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x08u, 0xd1u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x32u, 0xf8u, 0x2au, 0x00u, 0x01u, 0x00u, 0x20u, 0x00u, 0x00u, 0xf0u,
- 0x1bu, 0xf8u, 0xedu, 0xe7u, 0x00u, 0x20u, 0x01u, 0x2au, 0xeau, 0xd0u, 0x51u, 0x1cu, 0x03u, 0xd1u, 0x16u, 0x23u,
- 0x01u, 0x30u, 0x23u, 0x60u, 0xe4u, 0xe7u, 0x00u, 0x24u, 0x28u, 0x00u, 0x1cu, 0x60u, 0x90u, 0x47u, 0x20u, 0x00u,
- 0xdeu, 0xe7u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x03u, 0x4bu, 0x01u, 0x00u, 0x18u, 0x68u, 0xffu, 0xf7u, 0xcfu, 0xffu,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x80u, 0x08u, 0x00u, 0x28u, 0x00u, 0x23u, 0x70u, 0xb5u, 0x06u, 0x4du, 0x04u, 0x00u,
- 0x08u, 0x00u, 0x11u, 0x00u, 0x2bu, 0x60u, 0x00u, 0xf0u, 0x15u, 0xf8u, 0x43u, 0x1cu, 0x03u, 0xd1u, 0x2bu, 0x68u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x23u, 0x60u, 0x70u, 0xbdu, 0x5cu, 0x12u, 0x00u, 0x28u, 0x10u, 0xb5u, 0x00u, 0xf0u,
- 0x01u, 0xf8u, 0x10u, 0xbdu, 0x58u, 0x22u, 0x01u, 0x20u, 0x01u, 0x4bu, 0x40u, 0x42u, 0x1au, 0x60u, 0x70u, 0x47u,
- 0x5cu, 0x12u, 0x00u, 0x28u, 0x58u, 0x22u, 0x01u, 0x20u, 0x01u, 0x4bu, 0x40u, 0x42u, 0x1au, 0x60u, 0x70u, 0x47u,
- 0x5cu, 0x12u, 0x00u, 0x28u, 0xfeu, 0xe7u, 0xc0u, 0x46u, 0xf8u, 0xb5u, 0xc0u, 0x46u, 0xf8u, 0xbcu, 0x08u, 0xbcu,
- 0x9eu, 0x46u, 0x70u, 0x47u, 0xf8u, 0xb5u, 0xc0u, 0x46u, 0xf8u, 0xbcu, 0x08u, 0xbcu, 0x9eu, 0x46u, 0x70u, 0x47u,
- 0x84u, 0x08u, 0x00u, 0x28u, 0x00u, 0x00u, 0x00u, 0x00u, 0x74u, 0xb2u, 0x01u, 0x81u, 0xb0u, 0xabu, 0x30u, 0x80u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x08u, 0x01u, 0x81u, 0xb0u, 0xb0u, 0xabu, 0xf0u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x3fu, 0x02u, 0x01u, 0x81u, 0xb0u, 0xabu, 0x30u, 0x80u, 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x06u, 0x01u, 0x81u,
- 0xb0u, 0xb0u, 0xabu, 0xf0u, 0x00u, 0x00u, 0x00u, 0x00u, 0xd0u, 0xe0u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0x68u, 0xe1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xb0u, 0x80u, 0xc8u, 0xe1u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0x98u, 0xefu, 0xffu, 0x7fu, 0xb0u, 0xa9u, 0x02u, 0x80u, 0x2cu, 0xf0u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0x80u, 0xf0u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x8cu, 0xf0u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xaau, 0x80u,
- 0xc0u, 0xf0u, 0xffu, 0x7fu, 0x94u, 0xffu, 0xffu, 0x7fu, 0x88u, 0xf1u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0x84u, 0xf1u, 0xffu, 0x7fu, 0xaau, 0x3fu, 0x39u, 0x80u, 0xd0u, 0xf1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0xdcu, 0xf1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xaau, 0x80u, 0x1cu, 0xf2u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0x30u, 0xf2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x2cu, 0xf2u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0x34u, 0xf2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xc4u, 0xf2u, 0xffu, 0x7fu, 0xaau, 0x0fu, 0xb2u, 0x80u,
- 0x2cu, 0xf3u, 0xffu, 0x7fu, 0x50u, 0xffu, 0xffu, 0x7fu, 0x10u, 0xf6u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0x2cu, 0xf6u, 0xffu, 0x7fu, 0x4cu, 0xffu, 0xffu, 0x7fu, 0x8cu, 0xf8u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0xfcu, 0xf9u, 0xffu, 0x7fu, 0x00u, 0x84u, 0x04u, 0x80u, 0x0cu, 0xfau, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u,
- 0x0cu, 0xfau, 0xffu, 0x7fu, 0x38u, 0xffu, 0xffu, 0x7fu, 0xf4u, 0xfcu, 0xffu, 0x7fu, 0x00u, 0x84u, 0x04u, 0x80u,
- 0x14u, 0xfdu, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x2cu, 0xfdu, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u,
- 0xe4u, 0x20u, 0x00u, 0x10u, 0x80u, 0x08u, 0x00u, 0x28u, 0x6cu, 0x00u, 0x00u, 0x00u, 0x0cu, 0x12u, 0x00u, 0x28u,
- 0x54u, 0x00u, 0x00u, 0x00u, 0x84u, 0x08u, 0x00u, 0x28u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0xa9u, 0x00u, 0x00u, 0x10u, 0x81u, 0x00u, 0x00u, 0x10u,
-
-};
-#endif /* defined(CY_DEVICE_TVIIBH8M) */
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/README.md b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/README.md
deleted file mode 100644
index ec1a18b..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# XMC7x Cortex M0+ DeepSleep prebuilt image (XMC7x_CM0P_SLEEP)
-
-### Overview
-DeepSleep prebuilt application image is executed on the Cortex M0+ core of the XMC dual-core MCU.
-The image is provided as C array ready to be compiled as part of the Cortex M7_0 application.
-The Cortex M0+ application code is placed to internal flash by the Cortex M7_0 linker script.
-
-DeepSleep prebuilt image executes the following steps:
-- starts CM7_0 core at CY_CORTEX_M7_0_APPL_ADDR. (check the address in partition.h in pdl repo)
-- puts the CM0+ core into Deep Sleep.
-
-### Usage
-
-This image is used by default by all Infineon BSPs that target XMC Dual-Core MCU.
-
-To use this image in the custom BSP, adjust the BSP target makefile to
-add the COMPONENT_XMC7x_CM0P_SLEEP directory to the list of components
-discovered by ModusToolbox build system:
-
-```
-COMPONENTS+=XMC7x_CM0P_SLEEP
-```
-
-Make sure there is a single XMC7x_CM0P_* component included in the COMPONENTS list.
-
----
-Copyright (c) (2020-2022), Cypress Semiconductor Corporation (an Infineon company) or an affiliate of Cypress Semiconductor Corporation.
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7100_cm0p_sleep.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7100_cm0p_sleep.c
deleted file mode 100644
index c71ed4b..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7100_cm0p_sleep.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/***************************************************************************//**
-* \file xmc7100_cm0p_sleep.c
-*
-* \brief
-* Cortex-M0+ prebuilt application image.
-*
-********************************************************************************
-* \copyright
-* Copyright (c) 2018-2021 Cypress Semiconductor Corporation (an Infineon
-* company) or an affiliate of Cypress Semiconductor Corporation
-* SPDX-License-Identifier: LicenseRef-PBL
-*
-* Licensed under the Permissive Binary License
-*******************************************************************************/
-
-#include <stdint.h>
-#include "cy_device_headers.h"
-
-#if defined(CY_DEVICE_TVIIBH4M)
-
-#if defined(__APPLE__) && defined(__clang__)
-__attribute__ ((__section__("__CY_M0P_IMAGE,__cy_m0p_image"), used))
-#elif defined(__GNUC__) || defined(__ARMCC_VERSION)
-__attribute__ ((__section__(".cy_m0p_image"), used))
-#elif defined(__ICCARM__)
-#pragma location=".cy_m0p_image"
-#else
-#error "An unsupported toolchain"
-#endif
-const uint8_t cy_m0p_image[] = {
- 0x00u, 0x00u, 0x02u, 0x28u, 0x69u, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9fu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x25u, 0x0au, 0x00u, 0x10u, 0x59u, 0x0au, 0x00u, 0x10u,
- 0x8du, 0x0au, 0x00u, 0x10u, 0xc1u, 0x0au, 0x00u, 0x10u, 0xf5u, 0x0au, 0x00u, 0x10u, 0x29u, 0x0bu, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x10u, 0xb5u, 0x06u, 0x4cu, 0x23u, 0x78u, 0x00u, 0x2bu, 0x07u, 0xd1u, 0x05u, 0x4bu, 0x00u, 0x2bu, 0x02u, 0xd0u,
- 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x23u, 0x23u, 0x70u, 0x10u, 0xbdu, 0x1cu, 0x10u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x78u, 0x1fu, 0x00u, 0x10u, 0x04u, 0x4bu, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x03u, 0xd0u,
- 0x03u, 0x49u, 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x20u, 0x10u, 0x00u, 0x28u, 0x78u, 0x1fu, 0x00u, 0x10u, 0x40u, 0x22u, 0x92u, 0x02u, 0x9au, 0x1au, 0x92u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x17u, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd1u, 0x13u, 0x4bu, 0x9du, 0x46u, 0xffu, 0xf7u,
- 0xf3u, 0xffu, 0x00u, 0x21u, 0x8bu, 0x46u, 0x0fu, 0x46u, 0x13u, 0x48u, 0x14u, 0x4au, 0x12u, 0x1au, 0x01u, 0xf0u,
- 0xd0u, 0xfeu, 0x0eu, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0x0du, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0x00u, 0x20u, 0x00u, 0x21u, 0x04u, 0x00u, 0x0du, 0x00u, 0x0du, 0x48u, 0x00u, 0x28u, 0x02u, 0xd0u,
- 0x0cu, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0xf0u, 0x8fu, 0xfeu, 0x20u, 0x00u, 0x29u, 0x00u, 0x00u, 0xf0u,
- 0x07u, 0xfbu, 0x01u, 0xf0u, 0x73u, 0xfeu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x55u, 0x07u, 0x00u, 0x10u, 0x00u, 0x00u, 0x02u, 0x28u, 0x1cu, 0x10u, 0x00u, 0x28u, 0x70u, 0x10u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x30u, 0x80u, 0x08u, 0x03u, 0xd0u, 0x01u, 0x30u,
- 0x02u, 0x38u, 0xfcu, 0xd1u, 0xc0u, 0x46u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xefu, 0xf3u, 0x10u, 0x80u, 0x72u, 0xb6u,
- 0x70u, 0x47u, 0x80u, 0xf3u, 0x10u, 0x88u, 0x70u, 0x47u, 0x01u, 0x20u, 0xc0u, 0x04u, 0x13u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x12u, 0x49u, 0x0au, 0x68u, 0x02u, 0x43u, 0x0au, 0x60u, 0x11u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x10u, 0x48u, 0x11u, 0x49u, 0x00u, 0x22u, 0x00u, 0x23u, 0x0cu, 0xc0u, 0x88u, 0x42u,
- 0xfcu, 0xd3u, 0x00u, 0xf0u, 0x4du, 0xfbu, 0x00u, 0xf0u, 0xe1u, 0xfau, 0xfeu, 0xe7u, 0xfeu, 0xe7u, 0x00u, 0xb5u,
- 0x04u, 0x20u, 0x71u, 0x46u, 0x08u, 0x42u, 0x02u, 0xd0u, 0xefu, 0xf3u, 0x09u, 0x80u, 0x02u, 0xe0u, 0xefu, 0xf3u,
- 0x08u, 0x80u, 0x04u, 0x30u, 0x00u, 0xf0u, 0xe4u, 0xf9u, 0xfeu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x13u, 0x20u, 0x40u,
- 0x80u, 0x13u, 0x20u, 0x40u, 0xa0u, 0x13u, 0x20u, 0x40u, 0x00u, 0xffu, 0x01u, 0x28u, 0x00u, 0x00u, 0x02u, 0x28u,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0xc0u, 0x18u, 0x03u, 0x4bu, 0x80u, 0x00u, 0xc0u, 0x58u, 0x80u, 0x06u, 0x80u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x03u, 0x00u, 0x00u, 0x20u, 0x07u, 0x2bu, 0x08u, 0xd8u,
- 0x92u, 0x22u, 0xd2u, 0x00u, 0x9bu, 0x18u, 0x03u, 0x4au, 0x9bu, 0x00u, 0x9bu, 0x58u, 0x01u, 0x30u, 0x1bu, 0x0au,
- 0x98u, 0x43u, 0x70u, 0x47u, 0x00u, 0x00u, 0x26u, 0x40u, 0x02u, 0x4bu, 0x18u, 0x69u, 0x40u, 0x07u, 0xc0u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x27u, 0x40u, 0x04u, 0x4bu, 0x05u, 0x4au, 0xd0u, 0x58u, 0x03u, 0x23u,
- 0x18u, 0x40u, 0x98u, 0x42u, 0x00u, 0xd1u, 0x02u, 0x20u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x24u, 0x15u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xefu, 0xffu, 0x00u, 0x23u, 0x02u, 0x28u, 0x01u, 0xd1u,
- 0x01u, 0x4bu, 0x1bu, 0x68u, 0x18u, 0x00u, 0x10u, 0xbdu, 0x3cu, 0x10u, 0x00u, 0x28u, 0x09u, 0x4au, 0x83u, 0x00u,
- 0x99u, 0x18u, 0x90u, 0x22u, 0x52u, 0x01u, 0x88u, 0x58u, 0x07u, 0x22u, 0x10u, 0x40u, 0x04u, 0x28u, 0x07u, 0xd1u,
- 0x05u, 0x4au, 0x9bu, 0x18u, 0x58u, 0x68u, 0x1fu, 0x23u, 0x03u, 0x40u, 0x80u, 0x20u, 0x40u, 0x00u, 0x18u, 0x43u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0xfcu, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0xe5u, 0xffu, 0x88u, 0x23u, 0x5bu, 0x00u, 0x98u, 0x42u, 0x19u, 0xd0u, 0x09u, 0xd8u, 0x01u, 0x28u, 0x10u, 0xd0u,
- 0x02u, 0x28u, 0x11u, 0xd0u, 0x43u, 0x42u, 0x58u, 0x41u, 0x0fu, 0x4bu, 0x40u, 0x42u, 0x18u, 0x40u, 0x10u, 0xbdu,
- 0x12u, 0x23u, 0xffu, 0x33u, 0x98u, 0x42u, 0x12u, 0xd0u, 0x03u, 0x33u, 0x98u, 0x42u, 0x07u, 0xd0u, 0x00u, 0x20u,
- 0xf5u, 0xe7u, 0x0au, 0x4bu, 0x18u, 0x68u, 0xf2u, 0xe7u, 0xffu, 0xf7u, 0xbcu, 0xffu, 0xefu, 0xe7u, 0x08u, 0x4au,
- 0x08u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0xf2u, 0xdau, 0x80u, 0x20u, 0x00u, 0x02u, 0xe7u, 0xe7u, 0xffu, 0xf7u,
- 0x9bu, 0xffu, 0x00u, 0x28u, 0xebu, 0xd0u, 0xf7u, 0xe7u, 0x00u, 0x12u, 0x7au, 0x00u, 0x38u, 0x10u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x08u, 0x15u, 0x00u, 0x00u, 0x14u, 0x4au, 0x15u, 0x4bu, 0x10u, 0xb5u, 0xd3u, 0x58u,
- 0x0fu, 0x24u, 0x99u, 0x03u, 0xdbu, 0x01u, 0xdbu, 0x0fu, 0x89u, 0x0bu, 0xc3u, 0x71u, 0x11u, 0x4bu, 0x01u, 0x60u,
- 0xd3u, 0x58u, 0xd9u, 0x04u, 0x1bu, 0x0cu, 0xdbu, 0xb2u, 0x03u, 0x81u, 0x0fu, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u,
- 0x81u, 0x80u, 0x19u, 0x00u, 0x21u, 0x40u, 0x81u, 0x72u, 0x19u, 0x09u, 0x21u, 0x40u, 0xc1u, 0x72u, 0xd9u, 0x02u,
- 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x83u, 0x73u, 0x09u, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u, 0x81u, 0x81u, 0x5au, 0x05u,
- 0xdbu, 0x01u, 0x52u, 0x0fu, 0xdbu, 0x0du, 0x82u, 0x71u, 0x03u, 0x82u, 0x10u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x30u, 0x15u, 0x00u, 0x00u, 0x34u, 0x15u, 0x00u, 0x00u, 0x38u, 0x15u, 0x00u, 0x00u, 0x3cu, 0x15u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x99u, 0xfdu,
- 0x14u, 0x4bu, 0x28u, 0x01u, 0xc5u, 0x18u, 0xc8u, 0x23u, 0x1fu, 0x26u, 0x5bu, 0x01u, 0xebu, 0x58u, 0x19u, 0x0au,
- 0x31u, 0x40u, 0x61u, 0x70u, 0x07u, 0x21u, 0x23u, 0x70u, 0x1au, 0x0cu, 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x32u, 0x40u,
- 0x23u, 0x71u, 0x0du, 0x4bu, 0xa2u, 0x70u, 0xebu, 0x58u, 0x1au, 0x02u, 0x12u, 0x0au, 0xa2u, 0x60u, 0x1au, 0x0fu,
- 0xf3u, 0x40u, 0x0au, 0x40u, 0x55u, 0x1eu, 0xaau, 0x41u, 0x63u, 0x73u, 0x08u, 0x4bu, 0x22u, 0x73u, 0xc0u, 0x18u,
- 0x03u, 0x68u, 0x00u, 0x20u, 0xdau, 0xb2u, 0x22u, 0x61u, 0x1au, 0x0cu, 0xf3u, 0x40u, 0x11u, 0x40u, 0x21u, 0x75u,
- 0x63u, 0x75u, 0x70u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u, 0x04u, 0x19u, 0x00u, 0x00u, 0x08u, 0x19u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x61u, 0xfdu,
- 0xb0u, 0x23u, 0x7fu, 0x22u, 0x1fu, 0x20u, 0xdbu, 0x00u, 0xedu, 0x18u, 0x09u, 0x4bu, 0xadu, 0x00u, 0xebu, 0x58u,
- 0x1au, 0x40u, 0x22u, 0x70u, 0x1au, 0x0cu, 0x02u, 0x40u, 0xa2u, 0x70u, 0x1au, 0x01u, 0xc2u, 0x40u, 0x19u, 0x0au,
- 0x9bu, 0x00u, 0x01u, 0x40u, 0x9bu, 0x0fu, 0x00u, 0x20u, 0x61u, 0x70u, 0xe2u, 0x70u, 0x23u, 0x71u, 0x70u, 0xbdu,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x42u, 0x1eu, 0x06u, 0x4bu, 0x01u, 0x2au, 0x05u, 0xd8u, 0x90u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0x01u, 0x18u, 0x58u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0x02u, 0x4au, 0x80u, 0x18u, 0x80u, 0x00u, 0xf8u, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x7du, 0x05u, 0x00u, 0x00u, 0x03u, 0x00u, 0x01u, 0x38u, 0x10u, 0xb5u, 0x01u, 0x28u,
- 0x02u, 0xd8u, 0xffu, 0xf7u, 0x8du, 0xffu, 0x10u, 0xbdu, 0xd8u, 0x1eu, 0xffu, 0xf7u, 0xc1u, 0xffu, 0xfau, 0xe7u,
- 0xf0u, 0xb5u, 0x8bu, 0xb0u, 0x04u, 0x00u, 0xffu, 0xf7u, 0x19u, 0xffu, 0x06u, 0x00u, 0x00u, 0x2cu, 0x3du, 0xd1u,
- 0x14u, 0x22u, 0x21u, 0x00u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0x1cu, 0xfdu, 0x04u, 0xa8u, 0xffu, 0xf7u, 0x44u, 0xffu,
- 0x33u, 0x4au, 0x34u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0x04u, 0xdau, 0x04u, 0xabu, 0x9cu, 0x7bu, 0x02u, 0x3cu,
- 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xa9u, 0xc8u, 0x79u, 0x01u, 0x23u, 0x41u, 0x1eu, 0x88u, 0x41u, 0x00u, 0x27u,
- 0x04u, 0xaau, 0x04u, 0x9du, 0x92u, 0x88u, 0x1cu, 0x40u, 0xc0u, 0x18u, 0x03u, 0x93u, 0x00u, 0x2cu, 0x1au, 0xd0u,
- 0x00u, 0x2au, 0x18u, 0xd0u, 0x00u, 0x23u, 0x19u, 0x00u, 0x00u, 0xf0u, 0x0cu, 0xfcu, 0x02u, 0x90u, 0x01u, 0x91u,
- 0x00u, 0x2fu, 0x30u, 0xd0u, 0x29u, 0x0au, 0x28u, 0x06u, 0x00u, 0x25u, 0x03u, 0x9cu, 0x32u, 0x00u, 0x2bu, 0x00u,
- 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0xf0u, 0xfeu, 0xfbu, 0x02u, 0x9au, 0x01u, 0x9bu, 0x00u, 0xf0u, 0xdau, 0xfbu,
- 0x0eu, 0x02u, 0x00u, 0x0eu, 0x06u, 0x43u, 0x30u, 0x00u, 0x0bu, 0xb0u, 0xf0u, 0xbdu, 0x04u, 0x2cu, 0xfau, 0xd8u,
- 0x18u, 0x22u, 0x00u, 0x21u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0xdcu, 0xfcu, 0x20u, 0x00u, 0x04u, 0xa9u, 0xffu, 0xf7u,
- 0xa3u, 0xffu, 0x20u, 0x00u, 0xffu, 0xf7u, 0x8eu, 0xffu, 0x00u, 0x24u, 0xa0u, 0x42u, 0x04u, 0xd0u, 0x04u, 0xabu,
- 0x1cu, 0x79u, 0x02u, 0x3cu, 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xabu, 0x1du, 0x78u, 0x5au, 0x78u, 0x98u, 0x78u,
- 0x5fu, 0x7bu, 0x06u, 0x9bu, 0xc1u, 0xe7u, 0x32u, 0x00u, 0x3bu, 0x00u, 0x28u, 0x00u, 0x39u, 0x00u, 0x00u, 0xf0u,
- 0xd1u, 0xfbu, 0x02u, 0x9cu, 0x01u, 0x9bu, 0x62u, 0x08u, 0x01u, 0x9cu, 0xdeu, 0x07u, 0x32u, 0x43u, 0x63u, 0x08u,
- 0x80u, 0x18u, 0x59u, 0x41u, 0x23u, 0x00u, 0x02u, 0x9au, 0x00u, 0xf0u, 0xa4u, 0xfbu, 0x06u, 0x00u, 0xcau, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x30u, 0x15u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0x48u, 0xfeu,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0x0bu, 0x4au, 0xf3u, 0x18u, 0x9bu, 0x00u, 0x04u, 0x00u, 0x98u, 0x58u, 0x0fu, 0x23u,
- 0x18u, 0x40u, 0xffu, 0xf7u, 0x75u, 0xffu, 0x05u, 0x00u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x45u, 0xfeu, 0x00u, 0x28u,
- 0x05u, 0xd1u, 0x01u, 0x30u, 0xa0u, 0x40u, 0x40u, 0x08u, 0x40u, 0x19u, 0xe0u, 0x40u, 0x70u, 0xbdu, 0x02u, 0x48u,
- 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x00u, 0x12u, 0x7au, 0x00u, 0xfeu, 0xe7u, 0x00u, 0x00u,
- 0x02u, 0x68u, 0x0au, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x60u, 0x42u, 0x68u, 0x5au, 0x60u, 0x82u, 0x68u, 0x9au, 0x60u,
- 0xc2u, 0x68u, 0xdau, 0x60u, 0x02u, 0x69u, 0x1au, 0x61u, 0x42u, 0x69u, 0x5au, 0x61u, 0x82u, 0x69u, 0x9au, 0x61u,
- 0xc2u, 0x69u, 0xdau, 0x61u, 0xffu, 0xf7u, 0xeau, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0x08u, 0x00u, 0x28u,
- 0x05u, 0x4bu, 0x02u, 0x22u, 0x19u, 0x69u, 0x00u, 0x28u, 0x02u, 0xd0u, 0x0au, 0x43u, 0x1au, 0x61u, 0x70u, 0x47u,
- 0x91u, 0x43u, 0x19u, 0x61u, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xedu, 0x00u, 0xe0u, 0x7fu, 0xb5u, 0x27u, 0x4bu,
- 0x86u, 0x00u, 0x0du, 0x00u, 0xf4u, 0x58u, 0x04u, 0x29u, 0x01u, 0xd0u, 0x01u, 0x29u, 0x27u, 0xd1u, 0x00u, 0x20u,
- 0x0fu, 0xe0u, 0xa3u, 0x68u, 0x2bu, 0x42u, 0x0bu, 0xd1u, 0xe3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u,
- 0x02u, 0x92u, 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x23u, 0x68u, 0x98u, 0x47u, 0x1cu, 0x4bu, 0x1cu, 0x60u,
- 0x64u, 0x69u, 0x00u, 0x2cu, 0x0bu, 0xd0u, 0x1bu, 0x4bu, 0x98u, 0x42u, 0xeau, 0xd1u, 0x01u, 0x2du, 0xe8u, 0xd1u,
- 0x17u, 0x4bu, 0x18u, 0x48u, 0x1au, 0x68u, 0x18u, 0x4bu, 0x9au, 0x51u, 0x04u, 0xb0u, 0x70u, 0xbdu, 0x01u, 0x2du,
- 0xfbu, 0xd1u, 0x14u, 0x4bu, 0x98u, 0x42u, 0xf3u, 0xd0u, 0x13u, 0x4bu, 0x9cu, 0x51u, 0xf5u, 0xe7u, 0x02u, 0x29u,
- 0x15u, 0xd0u, 0x26u, 0x00u, 0x64u, 0x69u, 0x00u, 0x2cu, 0xfbu, 0xd1u, 0x00u, 0x20u, 0x00u, 0x2eu, 0xecu, 0xd0u,
- 0xb3u, 0x68u, 0x2bu, 0x42u, 0x09u, 0xd1u, 0xf3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u, 0x02u, 0x92u,
- 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x33u, 0x68u, 0x98u, 0x47u, 0x36u, 0x69u, 0xeeu, 0xe7u, 0x04u, 0x4bu,
- 0x1bu, 0x68u, 0x18u, 0x1eu, 0xd9u, 0xd0u, 0x1eu, 0x69u, 0xe7u, 0xe7u, 0xc0u, 0x46u, 0x58u, 0x10u, 0x00u, 0x28u,
- 0x54u, 0x10u, 0x00u, 0x28u, 0xffu, 0x00u, 0x42u, 0x00u, 0x40u, 0x10u, 0x00u, 0x28u, 0x80u, 0x23u, 0x03u, 0x4au,
- 0x5bu, 0x01u, 0xd0u, 0x58u, 0x80u, 0x06u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0xf2u, 0xffu, 0x00u, 0x28u, 0x30u, 0xd0u, 0x19u, 0x4du, 0x6bu, 0x68u,
- 0x00u, 0x2bu, 0x17u, 0xd1u, 0xffu, 0xf7u, 0x59u, 0xfdu, 0x6bu, 0x68u, 0x04u, 0x00u, 0x00u, 0x2bu, 0x1fu, 0xd1u,
- 0x04u, 0x23u, 0x15u, 0x4au, 0x11u, 0x69u, 0x0bu, 0x43u, 0x13u, 0x61u, 0x01u, 0x2eu, 0x1du, 0xd0u, 0x30u, 0xbfu,
- 0x20u, 0x00u, 0x00u, 0x24u, 0xffu, 0xf7u, 0x4du, 0xfdu, 0x6bu, 0x68u, 0x08u, 0x21u, 0xa3u, 0x42u, 0x0bu, 0xd1u,
- 0x20u, 0x00u, 0x70u, 0xbdu, 0x01u, 0x21u, 0x08u, 0x00u, 0xffu, 0xf7u, 0x78u, 0xffu, 0x04u, 0x1eu, 0xe1u, 0xd0u,
- 0x6bu, 0x68u, 0x02u, 0x21u, 0x00u, 0x2bu, 0xf3u, 0xd0u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6fu, 0xffu, 0xefu, 0xe7u,
- 0x04u, 0x21u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6au, 0xffu, 0xdau, 0xe7u, 0x20u, 0xbfu, 0xe0u, 0xe7u, 0x03u, 0x4cu,
- 0xe6u, 0xe7u, 0xc0u, 0x46u, 0x58u, 0x10u, 0x00u, 0x28u, 0x00u, 0xedu, 0x00u, 0xe0u, 0xffu, 0x00u, 0x42u, 0x00u,
- 0x03u, 0x21u, 0x06u, 0x4bu, 0x1au, 0x6cu, 0x8au, 0x43u, 0x11u, 0x00u, 0x01u, 0x22u, 0x0au, 0x43u, 0x1au, 0x64u,
- 0x02u, 0x22u, 0x19u, 0x6cu, 0x0au, 0x43u, 0x1au, 0x64u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0xc0u, 0x26u, 0x40u,
- 0x10u, 0xb5u, 0x62u, 0xb6u, 0x00u, 0x20u, 0x05u, 0x49u, 0x00u, 0xf0u, 0x1eu, 0xf9u, 0x01u, 0x20u, 0xffu, 0xf7u,
- 0x37u, 0xffu, 0x00u, 0x20u, 0xffu, 0xf7u, 0xa4u, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x10u,
- 0xfeu, 0xe7u, 0x70u, 0x47u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xfcu, 0xffu, 0x10u, 0xbdu, 0x70u, 0xb5u, 0x11u, 0x4bu,
- 0x11u, 0x48u, 0x83u, 0x42u, 0x11u, 0xd3u, 0x00u, 0x20u, 0x10u, 0x4bu, 0x11u, 0x49u, 0x8bu, 0x42u, 0x17u, 0xd3u,
- 0xffu, 0xf7u, 0xb0u, 0xfcu, 0x1cu, 0x68u, 0x91u, 0x00u, 0x64u, 0x58u, 0x5du, 0x68u, 0x01u, 0x32u, 0x6cu, 0x50u,
- 0x99u, 0x68u, 0x8au, 0x42u, 0xf6u, 0xd3u, 0x0cu, 0x33u, 0xebu, 0xe7u, 0x00u, 0x22u, 0xf8u, 0xe7u, 0x1du, 0x68u,
- 0x94u, 0x00u, 0x60u, 0x51u, 0x01u, 0x32u, 0x5cu, 0x68u, 0xa2u, 0x42u, 0xf8u, 0xd3u, 0x08u, 0x33u, 0xe5u, 0xe7u,
- 0x00u, 0x22u, 0xf8u, 0xe7u, 0x84u, 0x20u, 0x00u, 0x10u, 0x90u, 0x20u, 0x00u, 0x10u, 0x90u, 0x20u, 0x00u, 0x10u,
- 0x98u, 0x20u, 0x00u, 0x10u, 0xbcu, 0x21u, 0x00u, 0x23u, 0x10u, 0xb5u, 0x05u, 0x4au, 0x05u, 0x4cu, 0xffu, 0x31u,
- 0x98u, 0x00u, 0x01u, 0x33u, 0x14u, 0x50u, 0x8bu, 0x42u, 0xfau, 0xd1u, 0x03u, 0x4bu, 0x1au, 0x60u, 0x10u, 0xbdu,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x51u, 0x07u, 0x00u, 0x10u, 0x10u, 0x09u, 0x00u, 0x28u, 0x70u, 0x47u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x01u, 0x20u, 0xffu, 0xf7u, 0xa8u, 0xfeu, 0x0du, 0x4cu, 0x60u, 0x60u, 0xa0u, 0x60u, 0x02u, 0x20u,
- 0xffu, 0xf7u, 0xa2u, 0xfeu, 0x65u, 0x68u, 0x0bu, 0x4bu, 0xe0u, 0x60u, 0x25u, 0x61u, 0xe8u, 0x18u, 0x0au, 0x49u,
- 0x00u, 0xf0u, 0xacu, 0xf9u, 0xfau, 0x21u, 0x09u, 0x4bu, 0x60u, 0x61u, 0x89u, 0x00u, 0xe8u, 0x18u, 0x00u, 0xf0u,
- 0xa5u, 0xf9u, 0xa0u, 0x61u, 0x00u, 0x20u, 0xffu, 0xf7u, 0x8fu, 0xfeu, 0xe0u, 0x61u, 0x70u, 0xbdu, 0xc0u, 0x46u,
- 0x10u, 0x09u, 0x00u, 0x28u, 0x3fu, 0x42u, 0x0fu, 0x00u, 0x40u, 0x42u, 0x0fu, 0x00u, 0xe7u, 0x03u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x00u, 0x24u, 0x00u, 0x25u, 0x25u, 0x4bu, 0x25u, 0x4au, 0x59u, 0x1eu, 0xffu, 0x39u, 0x8au, 0x42u,
- 0x3fu, 0xd3u, 0x00u, 0x20u, 0x00u, 0x21u, 0x23u, 0x4au, 0x93u, 0x42u, 0x3cu, 0xd9u, 0x98u, 0x22u, 0x22u, 0x4bu,
- 0x52u, 0x01u, 0x99u, 0x58u, 0x21u, 0x48u, 0xffu, 0x25u, 0x01u, 0x40u, 0x99u, 0x50u, 0x9cu, 0x21u, 0x49u, 0x01u,
- 0x5au, 0x58u, 0x1fu, 0x4cu, 0x02u, 0x40u, 0x5au, 0x50u, 0x1eu, 0x4au, 0x20u, 0x00u, 0x92u, 0x08u, 0x2au, 0x40u,
- 0x1du, 0x49u, 0x92u, 0x00u, 0x01u, 0xf0u, 0x04u, 0xfbu, 0x40u, 0x21u, 0x1cu, 0x4bu, 0xc0u, 0x22u, 0x9cu, 0x60u,
- 0x0bu, 0x68u, 0x92u, 0x00u, 0x23u, 0x64u, 0x44u, 0x23u, 0x1bu, 0x68u, 0x63u, 0x64u, 0x18u, 0x4bu, 0x98u, 0x58u,
- 0xa8u, 0x43u, 0x01u, 0x43u, 0x99u, 0x50u, 0x99u, 0x58u, 0x16u, 0x48u, 0x01u, 0x40u, 0x99u, 0x50u, 0x01u, 0x22u,
- 0x1au, 0x60u, 0x92u, 0x18u, 0x1au, 0x60u, 0xffu, 0xf7u, 0x85u, 0xffu, 0xffu, 0xf7u, 0x31u, 0xffu, 0x12u, 0x4au,
- 0x13u, 0x68u, 0x5bu, 0x00u, 0x5bu, 0x08u, 0x13u, 0x60u, 0xffu, 0xf7u, 0x90u, 0xffu, 0xffu, 0xf7u, 0x90u, 0xffu,
- 0x70u, 0xbdu, 0x30u, 0xc2u, 0xbbu, 0xe7u, 0x03u, 0xc3u, 0xbeu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x02u, 0x28u,
- 0x00u, 0x08u, 0x00u, 0x28u, 0xffu, 0xffu, 0x0bu, 0x28u, 0x00u, 0x00u, 0x20u, 0x40u, 0xffu, 0xffu, 0xf7u, 0xffu,
- 0x00u, 0x08u, 0x00u, 0x28u, 0x80u, 0x00u, 0x00u, 0x10u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0xedu, 0x00u, 0xe0u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0xffu, 0x00u, 0xffu, 0xffu, 0x00u, 0xc0u, 0x26u, 0x40u, 0x03u, 0x1eu, 0x06u, 0xd1u,
- 0x90u, 0x23u, 0x06u, 0x4au, 0x5bu, 0x01u, 0xd0u, 0x58u, 0x03u, 0x23u, 0x18u, 0x40u, 0x70u, 0x47u, 0x00u, 0x20u,
- 0x01u, 0x2bu, 0xfbu, 0xd1u, 0x01u, 0x4au, 0x02u, 0x4bu, 0xf5u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x20u, 0x40u,
- 0x10u, 0x12u, 0x00u, 0x00u, 0x00u, 0x28u, 0x0du, 0xd1u, 0x90u, 0x20u, 0x0eu, 0x4bu, 0x40u, 0x01u, 0x1au, 0x58u,
- 0x0du, 0x49u, 0x11u, 0x40u, 0x0du, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x22u, 0x59u, 0x68u, 0x11u, 0x42u,
- 0xfcu, 0xd0u, 0x70u, 0x47u, 0x01u, 0x28u, 0xfcu, 0xd1u, 0x09u, 0x48u, 0x06u, 0x4bu, 0x06u, 0x49u, 0x1au, 0x58u,
- 0x11u, 0x40u, 0x06u, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x22u, 0x06u, 0x48u, 0x19u, 0x58u, 0x11u, 0x42u,
- 0xfcu, 0xd0u, 0xeeu, 0xe7u, 0x00u, 0x00u, 0x20u, 0x40u, 0xfcu, 0xffu, 0x00u, 0x00u, 0x01u, 0x00u, 0xfau, 0x05u,
- 0x10u, 0x12u, 0x00u, 0x00u, 0x04u, 0x04u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0xffu, 0xf7u,
- 0xecu, 0xfbu, 0x06u, 0x00u, 0x20u, 0x00u, 0xffu, 0xf7u, 0xb9u, 0xffu, 0x03u, 0x28u, 0x02u, 0xd1u, 0x20u, 0x00u,
- 0xffu, 0xf7u, 0xc8u, 0xffu, 0x80u, 0x23u, 0x1bu, 0x49u, 0x1bu, 0x4au, 0x1bu, 0x06u, 0x88u, 0x58u, 0x03u, 0x43u,
- 0x8bu, 0x50u, 0x00u, 0x2cu, 0x16u, 0xd1u, 0x80u, 0x22u, 0x90u, 0x20u, 0x18u, 0x4bu, 0x92u, 0x00u, 0x9du, 0x50u,
- 0x40u, 0x01u, 0x1au, 0x58u, 0x16u, 0x49u, 0x11u, 0x40u, 0x16u, 0x4au, 0x0au, 0x43u, 0x10u, 0x21u, 0x1au, 0x50u,
- 0x5au, 0x68u, 0x0au, 0x42u, 0xfcu, 0xd0u, 0xdau, 0x68u, 0x8au, 0x43u, 0xdau, 0x60u, 0x30u, 0x00u, 0xffu, 0xf7u,
- 0xc8u, 0xfbu, 0x70u, 0xbdu, 0x01u, 0x2cu, 0xf9u, 0xd1u, 0xc0u, 0x22u, 0x0cu, 0x4bu, 0x0eu, 0x48u, 0xd2u, 0x00u,
- 0x9du, 0x50u, 0x1au, 0x58u, 0x0au, 0x49u, 0x11u, 0x40u, 0x0au, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x20u,
- 0x0au, 0x49u, 0x5au, 0x58u, 0x02u, 0x42u, 0xfcu, 0xd0u, 0x09u, 0x49u, 0x5au, 0x58u, 0x82u, 0x43u, 0x5au, 0x50u,
- 0xe4u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x44u, 0x12u, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x40u,
- 0xfcu, 0xffu, 0x00u, 0x00u, 0x03u, 0x00u, 0xfau, 0x05u, 0x10u, 0x12u, 0x00u, 0x00u, 0x04u, 0x04u, 0x00u, 0x00u,
- 0x0cu, 0x04u, 0x00u, 0x00u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u,
- 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u,
- 0x04u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x08u, 0x11u, 0x20u, 0x40u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0xc0u, 0x23u, 0x08u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x0cu, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x10u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u,
- 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x20u, 0x21u, 0x04u, 0x4au,
- 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x14u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u,
- 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u,
- 0x40u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x18u, 0x11u, 0x20u, 0x40u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0xc0u, 0x23u, 0x80u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x1cu, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x00u, 0x22u, 0x43u, 0x08u,
- 0x8bu, 0x42u, 0x74u, 0xd3u, 0x03u, 0x09u, 0x8bu, 0x42u, 0x5fu, 0xd3u, 0x03u, 0x0au, 0x8bu, 0x42u, 0x44u, 0xd3u,
- 0x03u, 0x0bu, 0x8bu, 0x42u, 0x28u, 0xd3u, 0x03u, 0x0cu, 0x8bu, 0x42u, 0x0du, 0xd3u, 0xffu, 0x22u, 0x09u, 0x02u,
- 0x12u, 0xbau, 0x03u, 0x0cu, 0x8bu, 0x42u, 0x02u, 0xd3u, 0x12u, 0x12u, 0x09u, 0x02u, 0x65u, 0xd0u, 0x03u, 0x0bu,
- 0x8bu, 0x42u, 0x19u, 0xd3u, 0x00u, 0xe0u, 0x09u, 0x0au, 0xc3u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x03u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0x43u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x0bu, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0x0bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xc3u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x02u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0x43u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x0au, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0x0bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xcdu, 0xd2u, 0xc3u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0xcbu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x01u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0x43u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x09u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0xc3u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0xcbu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x00u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0x43u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x41u, 0x1au,
- 0x00u, 0xd2u, 0x01u, 0x46u, 0x52u, 0x41u, 0x10u, 0x46u, 0x70u, 0x47u, 0xffu, 0xe7u, 0x01u, 0xb5u, 0x00u, 0x20u,
- 0x00u, 0xf0u, 0x06u, 0xf8u, 0x02u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x29u, 0xf7u, 0xd0u, 0x76u, 0xe7u, 0x70u, 0x47u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x2bu, 0x11u, 0xd1u, 0x00u, 0x2au, 0x0fu, 0xd1u, 0x00u, 0x29u, 0x00u, 0xd1u,
- 0x00u, 0x28u, 0x02u, 0xd0u, 0x00u, 0x21u, 0xc9u, 0x43u, 0x08u, 0x00u, 0x07u, 0xb4u, 0x02u, 0x48u, 0x02u, 0xa1u,
- 0x40u, 0x18u, 0x02u, 0x90u, 0x03u, 0xbdu, 0xc0u, 0x46u, 0xd9u, 0xffu, 0xffu, 0xffu, 0x03u, 0xb4u, 0x68u, 0x46u,
- 0x01u, 0xb5u, 0x02u, 0x98u, 0x00u, 0xf0u, 0x34u, 0xf8u, 0x01u, 0x9bu, 0x9eu, 0x46u, 0x02u, 0xb0u, 0x0cu, 0xbcu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u, 0x07u, 0x00u, 0x99u, 0x46u,
- 0x3bu, 0x0cu, 0x9cu, 0x46u, 0x13u, 0x04u, 0x1bu, 0x0cu, 0x1du, 0x00u, 0x0eu, 0x00u, 0x61u, 0x46u, 0x00u, 0x04u,
- 0x14u, 0x0cu, 0x00u, 0x0cu, 0x45u, 0x43u, 0x4bu, 0x43u, 0x60u, 0x43u, 0x61u, 0x43u, 0xc0u, 0x18u, 0x2cu, 0x0cu,
- 0x20u, 0x18u, 0x8cu, 0x46u, 0x83u, 0x42u, 0x03u, 0xd9u, 0x80u, 0x23u, 0x5bu, 0x02u, 0x98u, 0x46u, 0xc4u, 0x44u,
- 0x49u, 0x46u, 0x79u, 0x43u, 0x72u, 0x43u, 0x03u, 0x0cu, 0x63u, 0x44u, 0x2du, 0x04u, 0x2du, 0x0cu, 0xc9u, 0x18u,
- 0x00u, 0x04u, 0x40u, 0x19u, 0x89u, 0x18u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0xc0u, 0x46u,
- 0xf0u, 0xb5u, 0x57u, 0x46u, 0x4eu, 0x46u, 0x45u, 0x46u, 0xdeu, 0x46u, 0xe0u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u,
- 0x92u, 0x46u, 0x99u, 0x46u, 0x83u, 0xb0u, 0x8bu, 0x42u, 0x30u, 0xd8u, 0x2du, 0xd0u, 0x49u, 0x46u, 0x50u, 0x46u,
- 0x01u, 0xf0u, 0x58u, 0xf8u, 0x29u, 0x00u, 0x06u, 0x00u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x53u, 0xf8u, 0x33u, 0x1au,
- 0x98u, 0x46u, 0x20u, 0x3bu, 0x9bu, 0x46u, 0x33u, 0xd4u, 0x5au, 0x46u, 0x53u, 0x46u, 0x93u, 0x40u, 0x42u, 0x46u,
- 0x1fu, 0x00u, 0x53u, 0x46u, 0x93u, 0x40u, 0x1eu, 0x00u, 0xafu, 0x42u, 0x3au, 0xd8u, 0xafu, 0x42u, 0x00u, 0xd1u,
- 0x78u, 0xe0u, 0x5bu, 0x46u, 0xa4u, 0x1bu, 0xbdu, 0x41u, 0x00u, 0x2bu, 0x00u, 0xdau, 0x75u, 0xe0u, 0x00u, 0x22u,
- 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x01u, 0x23u, 0x5au, 0x46u, 0x93u, 0x40u, 0x01u, 0x93u, 0x01u, 0x23u,
- 0x42u, 0x46u, 0x93u, 0x40u, 0x00u, 0x93u, 0x28u, 0xe0u, 0x82u, 0x42u, 0xcfu, 0xd9u, 0x00u, 0x22u, 0x00u, 0x23u,
- 0x00u, 0x92u, 0x01u, 0x93u, 0x0cu, 0x9bu, 0x00u, 0x2bu, 0x01u, 0xd0u, 0x1cu, 0x60u, 0x5du, 0x60u, 0x00u, 0x98u,
- 0x01u, 0x99u, 0x03u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu,
- 0x42u, 0x46u, 0x20u, 0x23u, 0x9bu, 0x1au, 0x52u, 0x46u, 0xdau, 0x40u, 0x41u, 0x46u, 0x13u, 0x00u, 0x4au, 0x46u,
- 0x8au, 0x40u, 0x17u, 0x00u, 0x42u, 0x46u, 0x1fu, 0x43u, 0x53u, 0x46u, 0x93u, 0x40u, 0x1eu, 0x00u, 0xafu, 0x42u,
- 0xc4u, 0xd9u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x43u, 0x46u, 0x00u, 0x2bu, 0xd9u, 0xd0u,
- 0xfbu, 0x07u, 0x72u, 0x08u, 0x1au, 0x43u, 0x46u, 0x46u, 0x7bu, 0x08u, 0x0eu, 0xe0u, 0xabu, 0x42u, 0x01u, 0xd1u,
- 0xa2u, 0x42u, 0x0cu, 0xd8u, 0xa4u, 0x1au, 0x9du, 0x41u, 0x01u, 0x20u, 0x24u, 0x19u, 0x6du, 0x41u, 0x00u, 0x21u,
- 0x01u, 0x3eu, 0x24u, 0x18u, 0x4du, 0x41u, 0x00u, 0x2eu, 0x06u, 0xd0u, 0xabu, 0x42u, 0xeeu, 0xd9u, 0x01u, 0x3eu,
- 0x24u, 0x19u, 0x6du, 0x41u, 0x00u, 0x2eu, 0xf8u, 0xd1u, 0x00u, 0x98u, 0x01u, 0x99u, 0x5bu, 0x46u, 0x00u, 0x19u,
- 0x69u, 0x41u, 0x00u, 0x2bu, 0x24u, 0xdbu, 0x2bu, 0x00u, 0x5au, 0x46u, 0x44u, 0x46u, 0xd3u, 0x40u, 0x2au, 0x00u,
- 0xe2u, 0x40u, 0x1cu, 0x00u, 0x5bu, 0x46u, 0x15u, 0x00u, 0x00u, 0x2bu, 0x2au, 0xdbu, 0x26u, 0x00u, 0x9eu, 0x40u,
- 0x33u, 0x00u, 0x26u, 0x00u, 0x47u, 0x46u, 0xbeu, 0x40u, 0x32u, 0x00u, 0x80u, 0x1au, 0x99u, 0x41u, 0x00u, 0x90u,
- 0x01u, 0x91u, 0x9fu, 0xe7u, 0xa3u, 0x42u, 0xbcu, 0xd8u, 0x83u, 0xe7u, 0x42u, 0x46u, 0x20u, 0x23u, 0x00u, 0x21u,
- 0x9bu, 0x1au, 0x00u, 0x22u, 0x00u, 0x91u, 0x01u, 0x92u, 0x01u, 0x22u, 0xdau, 0x40u, 0x01u, 0x92u, 0x86u, 0xe7u,
- 0x42u, 0x46u, 0x20u, 0x23u, 0x9bu, 0x1au, 0x2au, 0x00u, 0x46u, 0x46u, 0x9au, 0x40u, 0x23u, 0x00u, 0xf3u, 0x40u,
- 0x44u, 0x46u, 0x13u, 0x43u, 0x2au, 0x00u, 0xe2u, 0x40u, 0x1cu, 0x00u, 0x5bu, 0x46u, 0x15u, 0x00u, 0x00u, 0x2bu,
- 0xd4u, 0xdau, 0x42u, 0x46u, 0x2fu, 0x00u, 0x20u, 0x23u, 0x26u, 0x00u, 0x97u, 0x40u, 0x9bu, 0x1au, 0xdeu, 0x40u,
- 0x3bu, 0x00u, 0x33u, 0x43u, 0xcdu, 0xe7u, 0xc0u, 0x46u, 0x03u, 0x68u, 0x5au, 0x00u, 0x04u, 0xd5u, 0x80u, 0x22u,
- 0x12u, 0x06u, 0x13u, 0x43u, 0xc0u, 0x18u, 0x70u, 0x47u, 0x5bu, 0x00u, 0x5bu, 0x08u, 0xfau, 0xe7u, 0xc0u, 0x46u,
- 0xf8u, 0xb5u, 0x57u, 0x46u, 0x45u, 0x46u, 0xdeu, 0x46u, 0x4eu, 0x46u, 0x90u, 0x46u, 0xe0u, 0xb5u, 0x07u, 0x00u,
- 0x00u, 0x29u, 0x24u, 0xd0u, 0x4bu, 0x1eu, 0x9au, 0x46u, 0x99u, 0x46u, 0x00u, 0x23u, 0x9bu, 0x46u, 0x5bu, 0x46u,
- 0x4bu, 0x44u, 0xdcu, 0x0fu, 0xe4u, 0x18u, 0x64u, 0x10u, 0xe5u, 0x00u, 0x7eu, 0x19u, 0x30u, 0x00u, 0xffu, 0xf7u,
- 0xdbu, 0xffu, 0xa2u, 0x45u, 0x0cu, 0xd0u, 0x40u, 0x45u, 0x0cu, 0xd8u, 0x28u, 0x00u, 0x08u, 0x30u, 0x38u, 0x18u,
- 0xffu, 0xf7u, 0xd2u, 0xffu, 0x01u, 0x38u, 0x40u, 0x45u, 0x0au, 0xd2u, 0x63u, 0x1cu, 0x9bu, 0x46u, 0xe6u, 0xe7u,
- 0x40u, 0x45u, 0x05u, 0xd9u, 0xa3u, 0x45u, 0x02u, 0xd0u, 0x63u, 0x1eu, 0x99u, 0x46u, 0xdfu, 0xe7u, 0x00u, 0x26u,
- 0x30u, 0x00u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf8u, 0xbdu, 0xc0u, 0x46u,
- 0x03u, 0x00u, 0x01u, 0x28u, 0x05u, 0xd0u, 0x02u, 0x28u, 0x07u, 0xd0u, 0x00u, 0x20u, 0x00u, 0x2bu, 0x02u, 0xd0u,
- 0x70u, 0x47u, 0x03u, 0x48u, 0xfcu, 0xe7u, 0x03u, 0x48u, 0xfau, 0xe7u, 0x03u, 0x48u, 0xf8u, 0xe7u, 0xc0u, 0x46u,
- 0x59u, 0x16u, 0x00u, 0x10u, 0x4du, 0x16u, 0x00u, 0x10u, 0x65u, 0x16u, 0x00u, 0x10u, 0x30u, 0xb5u, 0x23u, 0x4bu,
- 0x05u, 0x00u, 0x83u, 0xb0u, 0x8cu, 0x1eu, 0x00u, 0x2bu, 0x26u, 0xd0u, 0x20u, 0x00u, 0x01u, 0xa9u, 0x00u, 0xe0u,
- 0x00u, 0xbfu, 0x00u, 0x28u, 0x1cu, 0xd0u, 0x01u, 0x99u, 0x22u, 0x00u, 0xffu, 0xf7u, 0xa1u, 0xffu, 0x04u, 0x1eu,
- 0x16u, 0xd0u, 0xffu, 0xf7u, 0x91u, 0xffu, 0x63u, 0x68u, 0xa8u, 0x64u, 0x01u, 0x2bu, 0x2au, 0xd0u, 0x20u, 0x1du,
- 0x00u, 0x2bu, 0x23u, 0xdbu, 0xffu, 0xf7u, 0x88u, 0xffu, 0x00u, 0x23u, 0xe8u, 0x64u, 0x2bu, 0x65u, 0x03u, 0x68u,
- 0x00u, 0x2bu, 0x0fu, 0xdbu, 0xffu, 0xf7u, 0x80u, 0xffu, 0x28u, 0x61u, 0x00u, 0x20u, 0x03u, 0xb0u, 0x30u, 0xbdu,
- 0x00u, 0x23u, 0x09u, 0x20u, 0x2bu, 0x61u, 0xf9u, 0xe7u, 0x0du, 0x48u, 0x0eu, 0x49u, 0x09u, 0x1au, 0xc9u, 0x10u,
- 0x01u, 0x91u, 0xd9u, 0xe7u, 0x18u, 0x01u, 0x00u, 0x0fu, 0xffu, 0xf7u, 0xb2u, 0xffu, 0x28u, 0x61u, 0x43u, 0x1eu,
- 0x98u, 0x41u, 0x08u, 0x23u, 0x40u, 0x42u, 0x98u, 0x43u, 0x09u, 0x30u, 0xe7u, 0xe7u, 0x01u, 0x23u, 0xe8u, 0x64u,
- 0x2bu, 0x65u, 0xdcu, 0xe7u, 0x00u, 0x23u, 0x05u, 0x20u, 0x2bu, 0x61u, 0xdfu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0xacu, 0x1fu, 0x00u, 0x10u, 0x84u, 0x20u, 0x00u, 0x10u, 0x03u, 0x68u, 0x10u, 0xb5u, 0x04u, 0x00u, 0xdau, 0x07u,
- 0x05u, 0xd4u, 0x9bu, 0x07u, 0x0au, 0xd5u, 0x48u, 0x30u, 0x00u, 0xf0u, 0x80u, 0xfcu, 0x23u, 0x68u, 0x5au, 0x07u,
- 0x0au, 0xd5u, 0x1au, 0x07u, 0x0fu, 0xd5u, 0xdbu, 0x06u, 0x15u, 0xd5u, 0x10u, 0xbdu, 0x48u, 0x30u, 0x00u, 0xf0u,
- 0x71u, 0xfcu, 0x23u, 0x68u, 0x5au, 0x07u, 0xf4u, 0xd4u, 0x20u, 0x00u, 0xd0u, 0x30u, 0x00u, 0xf0u, 0x72u, 0xfcu,
- 0x23u, 0x68u, 0x1au, 0x07u, 0xefu, 0xd4u, 0x20u, 0x00u, 0x51u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x6eu, 0xfcu,
- 0x23u, 0x68u, 0xdbu, 0x06u, 0xe9u, 0xd4u, 0x20u, 0x00u, 0xd1u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x6au, 0xfcu,
- 0xe3u, 0xe7u, 0xc0u, 0x46u, 0x09u, 0x20u, 0x70u, 0x47u, 0x03u, 0x00u, 0x00u, 0x68u, 0x00u, 0x28u, 0x00u, 0xd0u,
- 0xc0u, 0x18u, 0x70u, 0x47u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x20u, 0x00u,
- 0x29u, 0x6cu, 0xffu, 0xf7u, 0x73u, 0xffu, 0x00u, 0x28u, 0x11u, 0xd1u, 0x2bu, 0x6cu, 0x2au, 0x00u, 0x63u, 0x61u,
- 0x21u, 0x00u, 0x01u, 0x20u, 0x23u, 0x69u, 0x98u, 0x47u, 0x08u, 0x28u, 0xf0u, 0xd0u, 0x07u, 0x28u, 0x06u, 0xd1u,
- 0x00u, 0x20u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0xe6u, 0xffu, 0x28u, 0x1du, 0x00u, 0xf0u, 0x1du, 0xfcu, 0x00u, 0xf0u,
- 0xadu, 0xfeu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u, 0xc3u, 0x68u, 0x30u, 0x4cu,
- 0x98u, 0x46u, 0xa5u, 0x44u, 0x83u, 0x69u, 0x04u, 0x00u, 0x16u, 0x00u, 0x04u, 0x31u, 0x40u, 0x22u, 0x05u, 0xa8u,
- 0x99u, 0x46u, 0x00u, 0xf0u, 0xddu, 0xfeu, 0x00u, 0x23u, 0x04u, 0x93u, 0x25u, 0xe0u, 0xf0u, 0x22u, 0x14u, 0x9bu,
- 0x52u, 0x00u, 0x63u, 0x61u, 0x04u, 0xa9u, 0x7cu, 0xa8u, 0x03u, 0x93u, 0x00u, 0xf0u, 0xd1u, 0xfeu, 0x21u, 0x00u,
- 0x28u, 0x00u, 0x23u, 0x69u, 0x7cu, 0xaau, 0x98u, 0x47u, 0x8au, 0x9bu, 0x05u, 0x00u, 0x03u, 0x93u, 0x15u, 0x93u,
- 0x4bu, 0x46u, 0x01u, 0x93u, 0x04u, 0xabu, 0x00u, 0x93u, 0x22u, 0x00u, 0x23u, 0x00u, 0x31u, 0x00u, 0x01u, 0x20u,
- 0xc0u, 0x47u, 0x00u, 0x28u, 0x22u, 0xd1u, 0xf0u, 0x22u, 0x7cu, 0xa9u, 0x52u, 0x00u, 0x04u, 0xa8u, 0x00u, 0xf0u,
- 0xb7u, 0xfeu, 0x00u, 0x26u, 0x08u, 0x2du, 0x22u, 0xd1u, 0x14u, 0x9bu, 0x20u, 0x00u, 0x19u, 0x00u, 0x03u, 0x93u,
- 0xffu, 0xf7u, 0x1cu, 0xffu, 0x09u, 0x36u, 0x07u, 0x00u, 0xf5u, 0xb2u, 0x00u, 0x28u, 0xceu, 0xd0u, 0x12u, 0x9bu,
- 0x10u, 0x21u, 0x03u, 0x93u, 0x15u, 0x93u, 0x4bu, 0x46u, 0x01u, 0x93u, 0x04u, 0xabu, 0x00u, 0x93u, 0x22u, 0x00u,
- 0x23u, 0x00u, 0x01u, 0x20u, 0x29u, 0x43u, 0xc0u, 0x47u, 0x00u, 0x28u, 0x00u, 0xd0u, 0x09u, 0x27u, 0x38u, 0x00u,
- 0xf5u, 0x23u, 0x9bu, 0x00u, 0x9du, 0x44u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0x07u, 0x2du,
- 0xf4u, 0xd1u, 0x30u, 0x00u, 0x14u, 0x99u, 0xffu, 0xf7u, 0x7du, 0xffu, 0x05u, 0xa8u, 0x00u, 0xf0u, 0xb4u, 0xfbu,
- 0x2cu, 0xfcu, 0xffu, 0xffu, 0x40u, 0x6cu, 0x70u, 0x47u, 0x70u, 0xb5u, 0xcbu, 0x6bu, 0xfau, 0xb0u, 0x0bu, 0x64u,
- 0x05u, 0x00u, 0x0eu, 0x00u, 0x40u, 0x22u, 0x04u, 0x31u, 0x03u, 0xa8u, 0x00u, 0xf0u, 0x79u, 0xfeu, 0x01u, 0x23u,
- 0x5bu, 0x42u, 0x02u, 0x93u, 0x06u, 0xe0u, 0x29u, 0x00u, 0x2bu, 0x69u, 0x02u, 0xaau, 0x98u, 0x47u, 0x04u, 0x00u,
- 0x08u, 0x28u, 0x0au, 0xd1u, 0x12u, 0x9bu, 0x28u, 0x00u, 0x19u, 0x00u, 0x01u, 0x93u, 0xffu, 0xf7u, 0xd6u, 0xfeu,
- 0x00u, 0x28u, 0xf0u, 0xd0u, 0x09u, 0x20u, 0x7au, 0xb0u, 0x70u, 0xbdu, 0x02u, 0xa8u, 0xffu, 0xf7u, 0x1cu, 0xffu,
- 0x06u, 0x2cu, 0xf7u, 0xd1u, 0x31u, 0x00u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x4eu, 0xffu, 0x10u, 0xb5u, 0x82u, 0x61u,
- 0xdau, 0x6bu, 0xc1u, 0x60u, 0x1au, 0x64u, 0x19u, 0x00u, 0x00u, 0x22u, 0xffu, 0xf7u, 0x63u, 0xffu, 0x10u, 0xbdu,
- 0x43u, 0x69u, 0x70u, 0xb5u, 0x0bu, 0x64u, 0xc3u, 0x68u, 0x04u, 0x00u, 0x0du, 0x00u, 0x00u, 0x2bu, 0x13u, 0xd1u,
- 0x0au, 0x00u, 0x23u, 0x69u, 0x01u, 0x00u, 0x02u, 0x20u, 0x98u, 0x47u, 0x07u, 0x28u, 0x05u, 0xd0u, 0x08u, 0x28u,
- 0x0fu, 0xd1u, 0x29u, 0x00u, 0x20u, 0x00u, 0xffu, 0xf7u, 0x2fu, 0xffu, 0x00u, 0x20u, 0x29u, 0x6cu, 0xffu, 0xf7u,
- 0x29u, 0xffu, 0x28u, 0x1du, 0x00u, 0xf0u, 0x60u, 0xfbu, 0x01u, 0x22u, 0xffu, 0xf7u, 0x43u, 0xffu, 0x00u, 0xf0u,
- 0xedu, 0xfdu, 0x00u, 0xf0u, 0xebu, 0xfdu, 0xc0u, 0x46u, 0xc3u, 0x68u, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x05u, 0xd0u,
- 0xcbu, 0x6bu, 0x00u, 0x22u, 0x0bu, 0x64u, 0xffu, 0xf7u, 0x35u, 0xffu, 0x10u, 0xbdu, 0xffu, 0xf7u, 0x9cu, 0xffu,
- 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x83u, 0x68u, 0x01u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x2bu,
- 0x01u, 0xd0u, 0x01u, 0x20u, 0x98u, 0x47u, 0x10u, 0xbdu, 0x01u, 0x29u, 0x15u, 0xd0u, 0x0au, 0xd8u, 0x00u, 0x2bu,
- 0x10u, 0xd1u, 0x0fu, 0x2au, 0x0eu, 0xd8u, 0x92u, 0x00u, 0x82u, 0x18u, 0x52u, 0x68u, 0x00u, 0x9bu, 0x00u, 0x20u,
- 0x1au, 0x60u, 0x06u, 0xe0u, 0x01u, 0x20u, 0x03u, 0x39u, 0xc9u, 0xb2u, 0x88u, 0x42u, 0x80u, 0x41u, 0x40u, 0x42u,
- 0x01u, 0x30u, 0x70u, 0x47u, 0x02u, 0x20u, 0xfcu, 0xe7u, 0x01u, 0x20u, 0xfau, 0xe7u, 0x00u, 0xb5u, 0x85u, 0xb0u,
- 0x03u, 0xabu, 0x0au, 0x00u, 0x00u, 0x93u, 0x00u, 0x21u, 0x00u, 0x23u, 0xffu, 0xf7u, 0xddu, 0xffu, 0x03u, 0x98u,
- 0x05u, 0xb0u, 0x00u, 0xbdu, 0x01u, 0x29u, 0x15u, 0xd0u, 0x0au, 0xd8u, 0x00u, 0x2bu, 0x10u, 0xd1u, 0x0fu, 0x2au,
- 0x0eu, 0xd8u, 0x00u, 0x9bu, 0x92u, 0x00u, 0x1bu, 0x68u, 0x82u, 0x18u, 0x53u, 0x60u, 0x00u, 0x20u, 0x06u, 0xe0u,
- 0x01u, 0x20u, 0x03u, 0x39u, 0xc9u, 0xb2u, 0x88u, 0x42u, 0x80u, 0x41u, 0x40u, 0x42u, 0x01u, 0x30u, 0x70u, 0x47u,
- 0x02u, 0x20u, 0xfcu, 0xe7u, 0x01u, 0x20u, 0xfau, 0xe7u, 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x03u, 0x92u,
- 0x00u, 0x93u, 0x0au, 0x00u, 0x00u, 0x23u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xdcu, 0xffu, 0x05u, 0xb0u, 0x00u, 0xbdu,
- 0x70u, 0xb5u, 0x1au, 0x4cu, 0xd3u, 0x6bu, 0xa5u, 0x44u, 0x13u, 0x64u, 0x05u, 0x00u, 0x0cu, 0x00u, 0x19u, 0xa8u,
- 0x11u, 0x1du, 0x40u, 0x22u, 0x00u, 0xf0u, 0xbcu, 0xfdu, 0x01u, 0x23u, 0x5bu, 0x42u, 0x18u, 0x93u, 0x14u, 0xe0u,
- 0x0cu, 0x21u, 0x18u, 0xa8u, 0x02u, 0xaau, 0xffu, 0xf7u, 0xdfu, 0xffu, 0x21u, 0x00u, 0x18u, 0xa8u, 0xa8u, 0x47u,
- 0x00u, 0x28u, 0x12u, 0xd1u, 0x06u, 0x9bu, 0x18u, 0xaau, 0x02u, 0xa9u, 0x08u, 0x30u, 0x01u, 0x93u, 0x98u, 0x47u,
- 0x06u, 0x00u, 0x05u, 0x28u, 0x0au, 0xd0u, 0x09u, 0x28u, 0x07u, 0xd0u, 0x28u, 0x9bu, 0x02u, 0xa8u, 0x19u, 0x00u,
- 0x01u, 0x93u, 0xffu, 0xf7u, 0x0bu, 0xfeu, 0x00u, 0x28u, 0xe2u, 0xd0u, 0x09u, 0x26u, 0x18u, 0xa8u, 0xffu, 0xf7u,
- 0x53u, 0xfeu, 0x30u, 0x00u, 0x90u, 0x23u, 0x9bu, 0x00u, 0x9du, 0x44u, 0x70u, 0xbdu, 0xc0u, 0xfdu, 0xffu, 0xffu,
- 0xf0u, 0xb5u, 0x57u, 0x46u, 0x92u, 0x46u, 0x03u, 0x22u, 0x45u, 0x46u, 0x4eu, 0x46u, 0xdeu, 0x46u, 0x99u, 0x46u,
- 0x13u, 0x00u, 0xe0u, 0xb5u, 0x88u, 0x46u, 0xcdu, 0x6cu, 0x49u, 0x46u, 0x89u, 0xb0u, 0x03u, 0x40u, 0x00u, 0x93u,
- 0x08u, 0xcdu, 0x06u, 0x95u, 0x00u, 0x29u, 0x00u, 0xd1u, 0x80u, 0xe0u, 0x1au, 0x0cu, 0x1bu, 0x04u, 0x05u, 0x93u,
- 0x02u, 0x23u, 0x04u, 0xa9u, 0x0bu, 0x73u, 0xfdu, 0x33u, 0x13u, 0x40u, 0x9bu, 0x00u, 0x4au, 0x73u, 0xedu, 0x18u,
- 0x00u, 0x9bu, 0x02u, 0x2bu, 0x01u, 0xd1u, 0x43u, 0x46u, 0x9du, 0x6bu, 0x43u, 0x46u, 0x1bu, 0x6du, 0xdbu, 0x07u,
- 0x0fu, 0xd5u, 0x50u, 0x46u, 0x05u, 0xa9u, 0x00u, 0xf0u, 0x5bu, 0xfbu, 0x00u, 0x28u, 0x01u, 0xd1u, 0x08u, 0x20u,
- 0x00u, 0xe0u, 0x09u, 0x20u, 0x09u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u,
- 0xf0u, 0xbdu, 0x2fu, 0x68u, 0x00u, 0x2fu, 0xecu, 0xd0u, 0x08u, 0x23u, 0x03u, 0x40u, 0x02u, 0x93u, 0x00u, 0x23u,
- 0x01u, 0x93u, 0x01u, 0x33u, 0x54u, 0x46u, 0x9bu, 0x46u, 0x46u, 0x46u, 0xbau, 0x46u, 0x4bu, 0x46u, 0x02u, 0x2bu,
- 0x49u, 0xd0u, 0x2bu, 0x88u, 0x6fu, 0x88u, 0x9au, 0x46u, 0x04u, 0x35u, 0x5au, 0x46u, 0x3bu, 0x00u, 0x93u, 0x43u,
- 0xb2u, 0x6cu, 0x0fu, 0x21u, 0x90u, 0x46u, 0x20u, 0x00u, 0x98u, 0x44u, 0xffu, 0xf7u, 0x3fu, 0xffu, 0x00u, 0x23u,
- 0x80u, 0x45u, 0x06u, 0xd8u, 0x53u, 0x46u, 0x5au, 0x46u, 0x93u, 0x43u, 0x43u, 0x44u, 0x98u, 0x42u, 0x9bu, 0x41u,
- 0x5bu, 0x42u, 0x02u, 0x22u, 0x7fu, 0x00u, 0x17u, 0x40u, 0x59u, 0x46u, 0x52u, 0x46u, 0x0au, 0x40u, 0x17u, 0x43u,
- 0x01u, 0x2fu, 0x30u, 0xd0u, 0x02u, 0x2fu, 0x4cu, 0xd0u, 0x00u, 0x2fu, 0xc2u, 0xd1u, 0x00u, 0x9au, 0x00u, 0x2au,
- 0x02u, 0xd0u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x9bu, 0xe0u, 0x04u, 0x35u, 0x2bu, 0x68u, 0x9au, 0x46u, 0x00u, 0x2bu,
- 0xccu, 0xd1u, 0x20u, 0x00u, 0x05u, 0xa9u, 0xa2u, 0x46u, 0x00u, 0xf0u, 0x0au, 0xfbu, 0x00u, 0x28u, 0xb0u, 0xd1u,
- 0x01u, 0x9bu, 0x00u, 0x2bu, 0xabu, 0xd0u, 0x0fu, 0x21u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x0fu, 0xffu, 0x0eu, 0x21u,
- 0x02u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x30u, 0xffu, 0x50u, 0x46u, 0x0fu, 0x21u, 0x72u, 0x4au, 0xffu, 0xf7u,
- 0x2bu, 0xffu, 0x07u, 0x20u, 0x9eu, 0xe7u, 0x6fu, 0x68u, 0x08u, 0x35u, 0xb6u, 0xe7u, 0x1bu, 0x02u, 0x05u, 0x93u,
- 0x04u, 0xabu, 0x9au, 0x81u, 0x84u, 0xe7u, 0x00u, 0x9au, 0x00u, 0x2au, 0x49u, 0xd1u, 0x00u, 0x2bu, 0x16u, 0xd0u,
- 0x2bu, 0x68u, 0xdfu, 0x0fu, 0x6bu, 0x68u, 0x9au, 0x1cu, 0x00u, 0xd1u, 0x8au, 0xe7u, 0x32u, 0x00u, 0x58u, 0x32u,
- 0x04u, 0x92u, 0x01u, 0x33u, 0x00u, 0xd1u, 0xb6u, 0xe0u, 0x28u, 0x1du, 0xffu, 0xf7u, 0xcdu, 0xfdu, 0x3au, 0x00u,
- 0x01u, 0x00u, 0x04u, 0xabu, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x6cu, 0xd1u, 0x08u, 0x35u,
- 0xbbu, 0xe7u, 0x2au, 0x68u, 0x00u, 0x99u, 0x57u, 0x00u, 0x7fu, 0x08u, 0x00u, 0x29u, 0x0du, 0xd1u, 0x00u, 0x2bu,
- 0x04u, 0xd0u, 0x02u, 0x9bu, 0x00u, 0x2bu, 0x72u, 0xd0u, 0x00u, 0x2fu, 0x3cu, 0xd0u, 0x00u, 0x2au, 0x00u, 0xdau,
- 0x04u, 0x35u, 0x01u, 0x37u, 0xbfu, 0x00u, 0xedu, 0x19u, 0xa7u, 0xe7u, 0x33u, 0x6au, 0x0du, 0x21u, 0x20u, 0x00u,
- 0x98u, 0x46u, 0xffu, 0xf7u, 0xc3u, 0xfeu, 0x80u, 0x45u, 0x01u, 0xd0u, 0x2au, 0x68u, 0xeeu, 0xe7u, 0xb3u, 0x6au,
- 0x9du, 0x42u, 0xfau, 0xd1u, 0x00u, 0x23u, 0xf3u, 0x62u, 0x04u, 0x33u, 0x33u, 0x63u, 0x2bu, 0x1du, 0xb7u, 0x62u,
- 0x73u, 0x63u, 0x2bu, 0x68u, 0x00u, 0x2bu, 0x00u, 0xdau, 0x87u, 0xe0u, 0x01u, 0x23u, 0x01u, 0x93u, 0xe0u, 0xe7u,
- 0x0du, 0x21u, 0x20u, 0x00u, 0x37u, 0x6au, 0xffu, 0xf7u, 0xa9u, 0xfeu, 0x87u, 0x42u, 0xc7u, 0xd1u, 0xb3u, 0x6au,
- 0x9du, 0x42u, 0xc4u, 0xd1u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xadu, 0xfcu, 0x0fu, 0x21u,
- 0x02u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0xc0u, 0xfeu, 0x50u, 0x46u, 0x42u, 0x46u, 0x00u, 0x21u, 0xffu, 0xf7u,
- 0xbbu, 0xfeu, 0x07u, 0x20u, 0x2eu, 0xe7u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x0du, 0x21u, 0x50u, 0x46u, 0xffu, 0xf7u,
- 0x8du, 0xfeu, 0x43u, 0x46u, 0x04u, 0x9au, 0x18u, 0x62u, 0x5au, 0x62u, 0x06u, 0x20u, 0x9du, 0x62u, 0x21u, 0xe7u,
- 0x28u, 0x00u, 0xffu, 0xf7u, 0x91u, 0xfcu, 0x04u, 0x35u, 0xa2u, 0x46u, 0xb5u, 0x63u, 0x04u, 0x00u, 0x30u, 0x00u,
- 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x13u, 0xe7u, 0x50u, 0x46u, 0x22u, 0x00u, 0x0fu, 0x21u,
- 0xffu, 0xf7u, 0x9au, 0xfeu, 0x07u, 0x20u, 0x0du, 0xe7u, 0xa2u, 0x46u, 0x0du, 0x21u, 0x04u, 0x00u, 0x50u, 0x46u,
- 0xffu, 0xf7u, 0x6cu, 0xfeu, 0xb0u, 0x46u, 0x33u, 0x00u, 0x30u, 0x62u, 0x02u, 0x2cu, 0x39u, 0xd1u, 0x04u, 0x9au,
- 0x2cu, 0x33u, 0xf2u, 0x62u, 0x73u, 0x62u, 0x43u, 0x46u, 0x06u, 0x20u, 0x9du, 0x62u, 0xfau, 0xe6u, 0x2bu, 0x1du,
- 0x9au, 0x46u, 0x00u, 0x23u, 0x98u, 0x46u, 0x58u, 0x33u, 0x9cu, 0x46u, 0x21u, 0x00u, 0x4au, 0x46u, 0xb4u, 0x44u,
- 0x54u, 0x46u, 0xa9u, 0x46u, 0x8au, 0x46u, 0x3du, 0x00u, 0x03u, 0x92u, 0x47u, 0x46u, 0xe0u, 0x46u, 0x0eu, 0xe0u,
- 0x43u, 0x46u, 0x20u, 0x00u, 0x04u, 0x93u, 0xffu, 0xf7u, 0x2fu, 0xfdu, 0x00u, 0x22u, 0x01u, 0x00u, 0x04u, 0xabu,
- 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x37u, 0x04u, 0x34u, 0x00u, 0x28u, 0x04u, 0xd1u, 0xafu, 0x42u,
- 0xeeu, 0xd1u, 0x4du, 0x46u, 0xb0u, 0x46u, 0xa8u, 0xe7u, 0x2fu, 0x00u, 0x4du, 0x46u, 0x03u, 0x9bu, 0x54u, 0x46u,
- 0x99u, 0x46u, 0x2au, 0x68u, 0x62u, 0xe7u, 0x0du, 0x21u, 0x20u, 0x00u, 0xffu, 0xf7u, 0x2fu, 0xfeu, 0xb0u, 0x46u,
- 0x30u, 0x62u, 0x43u, 0x46u, 0x04u, 0x9au, 0x5au, 0x62u, 0xc5u, 0xe7u, 0x78u, 0x1cu, 0x80u, 0x00u, 0xb0u, 0x46u,
- 0xa2u, 0x46u, 0x28u, 0x18u, 0x81u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x23u,
- 0xffu, 0xf7u, 0x86u, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0x01u, 0x23u, 0xffu, 0xf7u, 0x80u, 0xfeu,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0x02u, 0x23u, 0xffu, 0xf7u, 0x7au, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u, 0x05u, 0x00u, 0x14u, 0x00u, 0x1eu, 0x00u, 0xc3u, 0xb0u,
- 0x03u, 0x29u, 0x44u, 0xd0u, 0x20u, 0xd8u, 0x00u, 0x29u, 0x49u, 0xd0u, 0x01u, 0x29u, 0x41u, 0xd1u, 0x13u, 0x0cu,
- 0x14u, 0x04u, 0x98u, 0x46u, 0x23u, 0x0cu, 0x99u, 0x46u, 0x01u, 0x2eu, 0x00u, 0xd1u, 0x7au, 0xe0u, 0x05u, 0x2eu,
- 0x37u, 0xd1u, 0x44u, 0x46u, 0x4cu, 0x44u, 0x20u, 0x2cu, 0x33u, 0xd8u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x00u, 0xd8u,
- 0xb5u, 0xe0u, 0x4cu, 0x46u, 0x00u, 0x2cu, 0x00u, 0xd0u, 0xc2u, 0xe0u, 0x4au, 0x46u, 0xa9u, 0x6bu, 0x20u, 0xafu,
- 0x00u, 0x2au, 0x22u, 0xd0u, 0x00u, 0x24u, 0x7fu, 0xe0u, 0x04u, 0x29u, 0x22u, 0xd1u, 0x00u, 0x2bu, 0x20u, 0xd1u,
- 0x10u, 0x2au, 0x1eu, 0xd8u, 0x10u, 0x22u, 0x03u, 0x68u, 0x1au, 0x42u, 0x00u, 0xd0u, 0xc7u, 0xe0u, 0x20u, 0xafu,
- 0x38u, 0x00u, 0x00u, 0xf0u, 0x21u, 0xf9u, 0x01u, 0x26u, 0x39u, 0x00u, 0x00u, 0x23u, 0xaau, 0x6bu, 0x30u, 0x00u,
- 0x98u, 0x40u, 0x04u, 0x42u, 0x01u, 0xd0u, 0x01u, 0xcau, 0x08u, 0x60u, 0x01u, 0x33u, 0x04u, 0x31u, 0x04u, 0x2bu,
- 0xf5u, 0xd1u, 0x38u, 0x00u, 0xaau, 0x63u, 0x00u, 0xf0u, 0x0du, 0xf9u, 0x00u, 0x20u, 0x02u, 0xe0u, 0x03u, 0x2bu,
- 0x1cu, 0xd0u, 0x02u, 0x20u, 0x43u, 0xb0u, 0xc0u, 0xbcu, 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0x00u, 0x2bu,
- 0xf7u, 0xd1u, 0x00u, 0x23u, 0x01u, 0x27u, 0x16u, 0x04u, 0x82u, 0x6bu, 0x36u, 0x0cu, 0x01u, 0x1du, 0x38u, 0x00u,
- 0x98u, 0x40u, 0x06u, 0x42u, 0x01u, 0xd0u, 0x01u, 0xcau, 0x08u, 0x60u, 0x01u, 0x33u, 0x04u, 0x31u, 0x10u, 0x2bu,
- 0xf5u, 0xd1u, 0x00u, 0x20u, 0xa3u, 0x04u, 0xe5u, 0xd4u, 0xaau, 0x63u, 0xe3u, 0xe7u, 0x14u, 0x04u, 0x16u, 0x0cu,
- 0x24u, 0x0cu, 0x33u, 0x19u, 0x10u, 0x2bu, 0xdcu, 0xd8u, 0x08u, 0x22u, 0x03u, 0x68u, 0x1au, 0x42u, 0x00u, 0xd0u,
- 0x8cu, 0xe0u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0xdbu, 0xf8u, 0xf6u, 0x00u, 0xabu, 0x6bu, 0x00u, 0x2cu,
- 0x0au, 0xd0u, 0xf6u, 0x1au, 0xe4u, 0x00u, 0x32u, 0x1fu, 0x1cu, 0x19u, 0xbau, 0x18u, 0x19u, 0x00u, 0x09u, 0x68u,
- 0x04u, 0x33u, 0x99u, 0x50u, 0xa3u, 0x42u, 0xf9u, 0xd1u, 0x38u, 0x00u, 0xabu, 0x63u, 0x00u, 0xf0u, 0xc6u, 0xf8u,
- 0x00u, 0x20u, 0xbfu, 0xe7u, 0x43u, 0x46u, 0x4bu, 0x44u, 0x10u, 0x2bu, 0xbau, 0xd8u, 0x43u, 0x46u, 0x0fu, 0x2bu,
- 0xb7u, 0xd8u, 0x2bu, 0x68u, 0x1eu, 0x42u, 0x06u, 0xd0u, 0x03u, 0x22u, 0x28u, 0x00u, 0x93u, 0x43u, 0x2bu, 0x60u,
- 0x48u, 0x30u, 0x00u, 0xf0u, 0xa9u, 0xf8u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0xa5u, 0xf8u, 0x4au, 0x46u,
- 0x00u, 0x24u, 0xa9u, 0x6bu, 0x00u, 0x2au, 0x61u, 0xd0u, 0x43u, 0x46u, 0xdbu, 0x00u, 0xffu, 0x18u, 0x00u, 0x23u,
- 0xd2u, 0x00u, 0xc8u, 0x58u, 0xf8u, 0x50u, 0x04u, 0x33u, 0x9au, 0x42u, 0xfau, 0xd1u, 0x89u, 0x18u, 0x00u, 0x2cu,
- 0x0fu, 0xd0u, 0x6fu, 0x46u, 0x40u, 0x46u, 0x10u, 0x28u, 0x00u, 0xd2u, 0x10u, 0x20u, 0x00u, 0x23u, 0x10u, 0x38u,
- 0xc0u, 0x00u, 0x38u, 0x18u, 0xe2u, 0x00u, 0xcfu, 0x58u, 0xc7u, 0x50u, 0x04u, 0x33u, 0x93u, 0x42u, 0xfau, 0xd1u,
- 0xc9u, 0x18u, 0x01u, 0x2eu, 0x41u, 0xd0u, 0x43u, 0x46u, 0xa9u, 0x63u, 0x0fu, 0x2bu, 0x45u, 0xd9u, 0x00u, 0x2cu,
- 0x00u, 0xd1u, 0x7au, 0xe7u, 0x68u, 0x46u, 0x00u, 0xf0u, 0x7du, 0xf8u, 0x00u, 0x20u, 0x7au, 0xe7u, 0x10u, 0x2cu,
- 0x46u, 0xd9u, 0x10u, 0x3cu, 0x01u, 0x22u, 0x2bu, 0x68u, 0x1au, 0x42u, 0x07u, 0xd0u, 0x93u, 0x43u, 0x02u, 0x22u,
- 0x28u, 0x00u, 0x13u, 0x43u, 0x2bu, 0x60u, 0x48u, 0x30u, 0x00u, 0xf0u, 0x6au, 0xf8u, 0x00u, 0x2cu, 0x39u, 0xd0u,
- 0x04u, 0x22u, 0x2bu, 0x68u, 0x1au, 0x42u, 0x2cu, 0xd1u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x03u, 0xd8u, 0x20u, 0xafu,
- 0x38u, 0x00u, 0x00u, 0xf0u, 0x5du, 0xf8u, 0x6fu, 0x46u, 0x38u, 0x00u, 0x00u, 0xf0u, 0x5du, 0xf8u, 0x10u, 0x22u,
- 0x43u, 0x46u, 0xa9u, 0x6bu, 0xd2u, 0x1au, 0x00u, 0x2au, 0xbcu, 0xddu, 0x20u, 0xafu, 0xacu, 0xe7u, 0x93u, 0x43u,
- 0x03u, 0x60u, 0xd1u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x57u, 0xf8u, 0x30u, 0xe7u, 0x93u, 0x43u, 0x03u, 0x60u,
- 0x51u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x4cu, 0xf8u, 0x6bu, 0xe7u, 0x20u, 0xafu, 0x04u, 0x31u, 0x38u, 0x00u,
- 0xa9u, 0x63u, 0x00u, 0xf0u, 0x37u, 0xf8u, 0x00u, 0x20u, 0x3cu, 0xe7u, 0x20u, 0xa8u, 0x00u, 0xf0u, 0x36u, 0xf8u,
- 0xb5u, 0xe7u, 0x28u, 0x00u, 0x93u, 0x43u, 0x2bu, 0x60u, 0xd0u, 0x30u, 0x00u, 0xf0u, 0x35u, 0xf8u, 0xcbu, 0xe7u,
- 0x00u, 0x24u, 0xb7u, 0xe7u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x00u, 0xd9u, 0xfeu, 0xe6u, 0x20u, 0xafu, 0x38u, 0x00u,
- 0x00u, 0xf0u, 0x26u, 0xf8u, 0x4au, 0x46u, 0xa9u, 0x6bu, 0x00u, 0x2au, 0x00u, 0xd0u, 0xfau, 0xe6u, 0x38u, 0x00u,
- 0x00u, 0xf0u, 0x1cu, 0xf8u, 0x00u, 0x20u, 0x1du, 0xe7u, 0x01u, 0x00u, 0x34u, 0x31u, 0x38u, 0xc9u, 0x04u, 0x3bu,
- 0x9cu, 0x46u, 0x1du, 0x60u, 0xa6u, 0x46u, 0x01u, 0x00u, 0x20u, 0x31u, 0x3cu, 0xc9u, 0x90u, 0x46u, 0x99u, 0x46u,
- 0xa2u, 0x46u, 0xabu, 0x46u, 0x01u, 0x00u, 0x08u, 0x31u, 0xfcu, 0xc9u, 0x41u, 0x68u, 0x00u, 0x68u, 0xe5u, 0x46u,
- 0x00u, 0xbdu, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x01u, 0xb4u, 0x01u, 0xa8u,
- 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u,
- 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u,
- 0x01u, 0xa9u, 0xffu, 0xf7u, 0x11u, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u,
- 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u,
- 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u,
- 0x01u, 0xa9u, 0xffu, 0xf7u, 0x2du, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u,
- 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u,
- 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u,
- 0x01u, 0xa9u, 0xffu, 0xf7u, 0x39u, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u,
- 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u,
- 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u,
- 0x01u, 0xabu, 0xffu, 0xf7u, 0xf3u, 0xfbu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u,
- 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u, 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u,
- 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u, 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u,
- 0x01u, 0xaau, 0xffu, 0xf7u, 0x6du, 0xfcu, 0x10u, 0x9bu, 0x12u, 0xb0u, 0x18u, 0x47u, 0x02u, 0x7au, 0x03u, 0x00u,
- 0x00u, 0x2au, 0x0bu, 0xd1u, 0x42u, 0x7au, 0x00u, 0x2au, 0x0fu, 0xd0u, 0x01u, 0x3au, 0x42u, 0x72u, 0x42u, 0x68u,
- 0x11u, 0x1du, 0x41u, 0x60u, 0x03u, 0x21u, 0x12u, 0x68u, 0x01u, 0x72u, 0x02u, 0xe0u, 0x01u, 0x3au, 0x02u, 0x72u,
- 0x02u, 0x68u, 0x10u, 0x0eu, 0x12u, 0x02u, 0x1au, 0x60u, 0x70u, 0x47u, 0xb0u, 0x20u, 0xfcu, 0xe7u, 0xc0u, 0x46u,
- 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x00u, 0x93u, 0x0cu, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0xffu, 0xf7u,
- 0xfbu, 0xfbu, 0x03u, 0x98u, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xf1u, 0xffu, 0x10u, 0xbdu,
- 0xf0u, 0xb5u, 0x4eu, 0x46u, 0x45u, 0x46u, 0x57u, 0x46u, 0xdeu, 0x46u, 0x00u, 0x23u, 0xe0u, 0xb5u, 0x87u, 0xb0u,
- 0x03u, 0x93u, 0x0fu, 0x33u, 0x98u, 0x46u, 0x08u, 0x3bu, 0x99u, 0x46u, 0x80u, 0x23u, 0x1bu, 0x03u, 0x05u, 0x00u,
- 0x0eu, 0x00u, 0x9au, 0x46u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xc1u, 0xffu, 0x04u, 0x00u, 0xb0u, 0x28u, 0x00u, 0xd1u,
- 0xc1u, 0xe0u, 0x03u, 0x06u, 0x29u, 0xd5u, 0x03u, 0x00u, 0x42u, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0x80u, 0x2bu,
- 0x53u, 0xd0u, 0x90u, 0x2bu, 0x3du, 0xd0u, 0xa0u, 0x2bu, 0x6bu, 0xd0u, 0xb0u, 0x2bu, 0x00u, 0xd1u, 0x7eu, 0xe0u,
- 0xc0u, 0x2bu, 0x00u, 0xd1u, 0x95u, 0xe0u, 0x03u, 0x00u, 0x4au, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0xd0u, 0x2bu,
- 0x0au, 0xd1u, 0x53u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x05u, 0x23u, 0x01u, 0x21u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0xc6u, 0xfdu, 0x00u, 0x28u, 0xd5u, 0xd0u, 0x09u, 0x24u, 0x20u, 0x00u, 0x07u, 0xb0u, 0xf0u, 0xbcu,
- 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0xffu, 0x23u, 0x82u, 0x00u, 0x13u, 0x40u,
- 0x1fu, 0x1du, 0x05u, 0xabu, 0x9bu, 0x46u, 0x00u, 0x93u, 0x0du, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0xa2u, 0xfbu, 0x63u, 0x06u, 0x39u, 0xd4u, 0x05u, 0x9bu, 0x9cu, 0x46u, 0x67u, 0x44u, 0x5bu, 0x46u,
- 0x05u, 0x97u, 0x00u, 0x93u, 0x00u, 0x23u, 0x0du, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xbau, 0xfbu,
- 0xb0u, 0xe7u, 0x83u, 0x3bu, 0x03u, 0x40u, 0x0du, 0x2bu, 0xd6u, 0xd0u, 0x05u, 0xafu, 0x02u, 0x40u, 0x00u, 0x23u,
- 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x97u, 0xffu, 0xf7u, 0x87u, 0xfbu, 0x00u, 0x23u, 0x0du, 0x22u, 0x00u, 0x21u,
- 0x28u, 0x00u, 0x00u, 0x97u, 0xffu, 0xf7u, 0xa6u, 0xfbu, 0x9cu, 0xe7u, 0x04u, 0x02u, 0x30u, 0x00u, 0xffu, 0xf7u,
- 0x5du, 0xffu, 0x80u, 0x27u, 0x20u, 0x43u, 0x3fu, 0x02u, 0xb8u, 0x42u, 0xbdu, 0xd0u, 0x04u, 0x01u, 0x00u, 0x05u,
- 0x02u, 0x0cu, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x7au, 0xfdu, 0x00u, 0x28u, 0xb3u, 0xd1u,
- 0x3cu, 0x42u, 0x00u, 0xd1u, 0x86u, 0xe7u, 0x01u, 0x23u, 0x03u, 0x93u, 0x83u, 0xe7u, 0x05u, 0x9bu, 0xdfu, 0x1bu,
- 0xc5u, 0xe7u, 0xffu, 0x23u, 0x4au, 0x46u, 0x1bu, 0x01u, 0x19u, 0x00u, 0x82u, 0x43u, 0x11u, 0x41u, 0x0au, 0x00u,
- 0x1au, 0x40u, 0x03u, 0x07u, 0x02u, 0xd5u, 0x80u, 0x23u, 0xdbu, 0x01u, 0x1au, 0x43u, 0x00u, 0x23u, 0x00u, 0x21u,
- 0x28u, 0x00u, 0xffu, 0xf7u, 0x5du, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x6bu, 0xe7u, 0x94u, 0xe7u, 0xb1u, 0x28u,
- 0x45u, 0xd0u, 0xb2u, 0x28u, 0x00u, 0xd1u, 0x9fu, 0xe0u, 0xb3u, 0x28u, 0x55u, 0xd0u, 0xfcu, 0x23u, 0x03u, 0x40u,
- 0xb4u, 0x2bu, 0x00u, 0xd1u, 0x88u, 0xe7u, 0x4au, 0x46u, 0x53u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u,
- 0x01u, 0x21u, 0x01u, 0x23u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x43u, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x51u, 0xe7u,
- 0x7au, 0xe7u, 0xc6u, 0x28u, 0x4bu, 0xd0u, 0xc7u, 0x28u, 0x5du, 0xd0u, 0x03u, 0x00u, 0x4au, 0x46u, 0x93u, 0x43u,
- 0xdbu, 0xb2u, 0xc0u, 0x2bu, 0x6cu, 0xd0u, 0xc8u, 0x28u, 0x71u, 0xd0u, 0xc9u, 0x28u, 0x00u, 0xd0u, 0x6bu, 0xe7u,
- 0x30u, 0x00u, 0xffu, 0xf7u, 0x03u, 0xffu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u,
- 0x02u, 0x40u, 0x01u, 0x32u, 0x58u, 0xe7u, 0x03u, 0x9bu, 0x00u, 0x24u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x5cu, 0xe7u,
- 0x05u, 0xaeu, 0x0eu, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x96u, 0xffu, 0xf7u, 0x0du, 0xfbu, 0x00u, 0x23u,
- 0x0fu, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x96u, 0xffu, 0xf7u, 0x2cu, 0xfbu, 0x4du, 0xe7u, 0x30u, 0x00u,
- 0xffu, 0xf7u, 0xe4u, 0xfeu, 0x02u, 0x1eu, 0x00u, 0xd1u, 0x46u, 0xe7u, 0x03u, 0x00u, 0x41u, 0x46u, 0x8bu, 0x43u,
- 0xdbu, 0xb2u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x3fu, 0xe7u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x00u, 0xfdu,
- 0x00u, 0x28u, 0x00u, 0xd1u, 0x0eu, 0xe7u, 0x37u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xcfu, 0xfeu, 0xf0u, 0x23u,
- 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0xa7u, 0xe7u, 0x30u, 0x00u,
- 0xffu, 0xf7u, 0xc4u, 0xfeu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u,
- 0x01u, 0x32u, 0x1au, 0x43u, 0x03u, 0x23u, 0x03u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xe1u, 0xfcu, 0x00u, 0x28u,
- 0x00u, 0xd1u, 0xefu, 0xe6u, 0x18u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xb0u, 0xfeu, 0x02u, 0x1eu, 0x00u, 0xd1u,
- 0x12u, 0xe7u, 0x03u, 0x00u, 0x41u, 0x46u, 0x8bu, 0x43u, 0xdbu, 0xb2u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x0bu, 0xe7u,
- 0x04u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xccu, 0xfcu, 0x00u, 0x28u, 0x00u, 0xd1u, 0xdau, 0xe6u, 0x03u, 0xe7u,
- 0x43u, 0x46u, 0xa0u, 0x22u, 0x1cu, 0x40u, 0x01u, 0x34u, 0x12u, 0x03u, 0x22u, 0x43u, 0xdau, 0xe7u, 0x30u, 0x00u,
- 0xffu, 0xf7u, 0x94u, 0xfeu, 0x43u, 0x46u, 0x02u, 0x00u, 0x9au, 0x43u, 0xd2u, 0xb2u, 0x10u, 0x32u, 0x18u, 0x40u,
- 0x12u, 0x03u, 0x01u, 0x30u, 0x02u, 0x43u, 0xe8u, 0xe6u, 0x05u, 0xabu, 0x00u, 0x93u, 0x9bu, 0x46u, 0x0du, 0x22u,
- 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x9fu, 0xfau, 0x30u, 0x00u, 0xffu, 0xf7u, 0x7eu, 0xfeu,
- 0x03u, 0x06u, 0x1au, 0xd5u, 0x7fu, 0x27u, 0xb0u, 0x3cu, 0x05u, 0x9bu, 0x38u, 0x40u, 0xa0u, 0x40u, 0x9cu, 0x46u,
- 0x60u, 0x44u, 0x05u, 0x90u, 0x30u, 0x00u, 0x07u, 0x34u, 0xffu, 0xf7u, 0x70u, 0xfeu, 0x03u, 0x06u, 0xf3u, 0xd4u,
- 0x81u, 0x21u, 0x7fu, 0x23u, 0x89u, 0x00u, 0x8cu, 0x46u, 0x03u, 0x40u, 0xa3u, 0x40u, 0x05u, 0x9au, 0x62u, 0x44u,
- 0x9bu, 0x18u, 0x05u, 0x93u, 0x5bu, 0x46u, 0x00u, 0x93u, 0xe4u, 0xe6u, 0x02u, 0x24u, 0xf0u, 0xe7u, 0xc0u, 0x46u,
- 0x03u, 0x00u, 0x00u, 0xb5u, 0xdau, 0x6cu, 0x85u, 0xb0u, 0x53u, 0x68u, 0x08u, 0x00u, 0x08u, 0x32u, 0x19u, 0x02u,
- 0x01u, 0x91u, 0x02u, 0x92u, 0x69u, 0x46u, 0x03u, 0x22u, 0x1bu, 0x0eu, 0x0au, 0x73u, 0x4bu, 0x73u, 0x01u, 0xa9u,
- 0xffu, 0xf7u, 0x76u, 0xfeu, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x10u, 0xb5u, 0xffu, 0xf7u, 0x6du, 0xfeu, 0x80u, 0x6cu,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0x67u, 0xfeu, 0xc2u, 0x6cu, 0xd0u, 0x79u, 0x02u, 0x30u,
- 0x80u, 0x00u, 0x10u, 0x18u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x1cu, 0x21u, 0x01u, 0x23u, 0x1bu, 0x04u, 0x98u, 0x42u,
- 0x01u, 0xd3u, 0x00u, 0x0cu, 0x10u, 0x39u, 0x1bu, 0x0au, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x0au, 0x08u, 0x39u,
- 0x1bu, 0x09u, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x09u, 0x04u, 0x39u, 0x02u, 0xa2u, 0x10u, 0x5cu, 0x40u, 0x18u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x04u, 0x03u, 0x02u, 0x02u, 0x01u, 0x01u, 0x01u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x29u, 0x03u, 0xd1u, 0xffu, 0xf7u, 0xddu, 0xffu, 0x20u, 0x30u,
- 0x02u, 0xe0u, 0x08u, 0x00u, 0xffu, 0xf7u, 0xd8u, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x06u, 0x20u, 0x10u, 0xb5u,
- 0x00u, 0xf0u, 0x7au, 0xf8u, 0x01u, 0x20u, 0x00u, 0xf0u, 0xa7u, 0xf8u, 0x00u, 0x00u, 0x08u, 0x4bu, 0x10u, 0xb5u,
- 0x04u, 0x00u, 0x00u, 0x2bu, 0x02u, 0xd0u, 0x00u, 0x21u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x05u, 0x4bu, 0x18u, 0x68u,
- 0x83u, 0x6au, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x95u, 0xf8u, 0xc0u, 0x46u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x74u, 0x1fu, 0x00u, 0x10u, 0x70u, 0xb5u, 0x00u, 0x26u, 0x0cu, 0x4du, 0x0du, 0x4cu,
- 0x64u, 0x1bu, 0xa4u, 0x10u, 0xa6u, 0x42u, 0x09u, 0xd1u, 0x00u, 0x26u, 0x00u, 0xf0u, 0x87u, 0xf8u, 0x0au, 0x4du,
- 0x0au, 0x4cu, 0x64u, 0x1bu, 0xa4u, 0x10u, 0xa6u, 0x42u, 0x05u, 0xd1u, 0x70u, 0xbdu, 0xb3u, 0x00u, 0xebu, 0x58u,
- 0x98u, 0x47u, 0x01u, 0x36u, 0xeeu, 0xe7u, 0xb3u, 0x00u, 0xebu, 0x58u, 0x98u, 0x47u, 0x01u, 0x36u, 0xf2u, 0xe7u,
- 0xe4u, 0x08u, 0x00u, 0x28u, 0xe4u, 0x08u, 0x00u, 0x28u, 0xe4u, 0x08u, 0x00u, 0x28u, 0xe8u, 0x08u, 0x00u, 0x28u,
- 0x00u, 0x23u, 0x10u, 0xb5u, 0x9au, 0x42u, 0x00u, 0xd1u, 0x10u, 0xbdu, 0xccu, 0x5cu, 0xc4u, 0x54u, 0x01u, 0x33u,
- 0xf8u, 0xe7u, 0x03u, 0x00u, 0x82u, 0x18u, 0x93u, 0x42u, 0x00u, 0xd1u, 0x70u, 0x47u, 0x19u, 0x70u, 0x01u, 0x33u,
- 0xf9u, 0xe7u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x1fu, 0x29u, 0x04u, 0xd9u, 0x16u, 0x23u, 0x03u, 0x60u,
- 0x01u, 0x20u, 0x40u, 0x42u, 0x70u, 0xbdu, 0x43u, 0x6cu, 0x00u, 0x2bu, 0x04u, 0xd0u, 0x8au, 0x00u, 0x9bu, 0x18u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x08u, 0xd1u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x32u, 0xf8u, 0x2au, 0x00u, 0x01u, 0x00u,
- 0x20u, 0x00u, 0x00u, 0xf0u, 0x1bu, 0xf8u, 0xedu, 0xe7u, 0x00u, 0x20u, 0x01u, 0x2au, 0xeau, 0xd0u, 0x51u, 0x1cu,
- 0x03u, 0xd1u, 0x16u, 0x23u, 0x01u, 0x30u, 0x23u, 0x60u, 0xe4u, 0xe7u, 0x00u, 0x24u, 0x28u, 0x00u, 0x1cu, 0x60u,
- 0x90u, 0x47u, 0x20u, 0x00u, 0xdeu, 0xe7u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x03u, 0x4bu, 0x01u, 0x00u, 0x18u, 0x68u,
- 0xffu, 0xf7u, 0xcfu, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x80u, 0x08u, 0x00u, 0x28u, 0x00u, 0x23u, 0x70u, 0xb5u,
- 0x06u, 0x4du, 0x04u, 0x00u, 0x08u, 0x00u, 0x11u, 0x00u, 0x2bu, 0x60u, 0x00u, 0xf0u, 0x15u, 0xf8u, 0x43u, 0x1cu,
- 0x03u, 0xd1u, 0x2bu, 0x68u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x23u, 0x60u, 0x70u, 0xbdu, 0x6cu, 0x10u, 0x00u, 0x28u,
- 0x10u, 0xb5u, 0x00u, 0xf0u, 0x01u, 0xf8u, 0x10u, 0xbdu, 0x58u, 0x22u, 0x01u, 0x20u, 0x01u, 0x4bu, 0x40u, 0x42u,
- 0x1au, 0x60u, 0x70u, 0x47u, 0x6cu, 0x10u, 0x00u, 0x28u, 0x58u, 0x22u, 0x01u, 0x20u, 0x01u, 0x4bu, 0x40u, 0x42u,
- 0x1au, 0x60u, 0x70u, 0x47u, 0x6cu, 0x10u, 0x00u, 0x28u, 0xfeu, 0xe7u, 0xc0u, 0x46u, 0xf8u, 0xb5u, 0xc0u, 0x46u,
- 0xf8u, 0xbcu, 0x08u, 0xbcu, 0x9eu, 0x46u, 0x70u, 0x47u, 0xf8u, 0xb5u, 0xc0u, 0x46u, 0xf8u, 0xbcu, 0x08u, 0xbcu,
- 0x9eu, 0x46u, 0x70u, 0x47u, 0x84u, 0x08u, 0x00u, 0x28u, 0x00u, 0x00u, 0x00u, 0x00u, 0x74u, 0xb2u, 0x01u, 0x81u,
- 0xb0u, 0xabu, 0x30u, 0x80u, 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x08u, 0x01u, 0x81u, 0xb0u, 0xb0u, 0xabu, 0xf0u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x3fu, 0x02u, 0x01u, 0x81u, 0xb0u, 0xabu, 0x30u, 0x80u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x80u, 0x06u, 0x01u, 0x81u, 0xb0u, 0xb0u, 0xabu, 0xf0u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1cu, 0xe1u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0xb4u, 0xe1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xb0u, 0x80u, 0x14u, 0xe2u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0x98u, 0xefu, 0xffu, 0x7fu, 0xb0u, 0xa9u, 0x02u, 0x80u, 0x2cu, 0xf0u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x80u, 0xf0u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x8cu, 0xf0u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xaau, 0x80u, 0xc0u, 0xf0u, 0xffu, 0x7fu, 0x94u, 0xffu, 0xffu, 0x7fu, 0x88u, 0xf1u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0x84u, 0xf1u, 0xffu, 0x7fu, 0xaau, 0x3fu, 0x39u, 0x80u, 0xd0u, 0xf1u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0xdcu, 0xf1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xaau, 0x80u, 0x1cu, 0xf2u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x30u, 0xf2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x2cu, 0xf2u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x34u, 0xf2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xc4u, 0xf2u, 0xffu, 0x7fu,
- 0xaau, 0x0fu, 0xb2u, 0x80u, 0x2cu, 0xf3u, 0xffu, 0x7fu, 0x50u, 0xffu, 0xffu, 0x7fu, 0x10u, 0xf6u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x2cu, 0xf6u, 0xffu, 0x7fu, 0x4cu, 0xffu, 0xffu, 0x7fu, 0x8cu, 0xf8u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0xfcu, 0xf9u, 0xffu, 0x7fu, 0x00u, 0x84u, 0x04u, 0x80u, 0x0cu, 0xfau, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x0cu, 0xfau, 0xffu, 0x7fu, 0x38u, 0xffu, 0xffu, 0x7fu, 0xf4u, 0xfcu, 0xffu, 0x7fu,
- 0x00u, 0x84u, 0x04u, 0x80u, 0x14u, 0xfdu, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x2cu, 0xfdu, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0x98u, 0x20u, 0x00u, 0x10u, 0x80u, 0x08u, 0x00u, 0x28u, 0x6cu, 0x00u, 0x00u, 0x00u,
- 0x1cu, 0x10u, 0x00u, 0x28u, 0x54u, 0x00u, 0x00u, 0x00u, 0x84u, 0x08u, 0x00u, 0x28u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0xa9u, 0x00u, 0x00u, 0x10u,
- 0x81u, 0x00u, 0x00u, 0x10u,
-};
-#endif /* defined(CY_DEVICE_TVIIBH4M) */
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7200_cm0p_sleep.c b/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7200_cm0p_sleep.c
deleted file mode 100644
index 82f3e6c..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7200_cm0p_sleep.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/***************************************************************************//**
-* \file xmc7200_cm0p_sleep.c
-*
-* \brief
-* Cortex-M0+ prebuilt application image.
-*
-********************************************************************************
-* \copyright
-* Copyright (c) 2018-2021 Cypress Semiconductor Corporation (an Infineon
-* company) or an affiliate of Cypress Semiconductor Corporation
-* SPDX-License-Identifier: LicenseRef-PBL
-*
-* Licensed under the Permissive Binary License
-*******************************************************************************/
-
-#include <stdint.h>
-#include "cy_device_headers.h"
-
-#if defined(CY_DEVICE_TVIIBH8M)
-
-#if defined(__APPLE__) && defined(__clang__)
-__attribute__ ((__section__("__CY_M0P_IMAGE,__cy_m0p_image"), used))
-#elif defined(__GNUC__) || defined(__ARMCC_VERSION)
-__attribute__ ((__section__(".cy_m0p_image"), used))
-#elif defined(__ICCARM__)
-#pragma location=".cy_m0p_image"
-#else
-#error "An unsupported toolchain"
-#endif
-const uint8_t cy_m0p_image[] = {
- 0x00u, 0x00u, 0x02u, 0x28u, 0x69u, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9fu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x2du, 0x0au, 0x00u, 0x10u, 0x61u, 0x0au, 0x00u, 0x10u,
- 0x95u, 0x0au, 0x00u, 0x10u, 0xc9u, 0x0au, 0x00u, 0x10u, 0xfdu, 0x0au, 0x00u, 0x10u, 0x31u, 0x0bu, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u, 0x9bu, 0x01u, 0x00u, 0x10u,
- 0x10u, 0xb5u, 0x06u, 0x4cu, 0x23u, 0x78u, 0x00u, 0x2bu, 0x07u, 0xd1u, 0x05u, 0x4bu, 0x00u, 0x2bu, 0x02u, 0xd0u,
- 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x23u, 0x23u, 0x70u, 0x10u, 0xbdu, 0x0cu, 0x12u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x1fu, 0x00u, 0x10u, 0x04u, 0x4bu, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x03u, 0xd0u,
- 0x03u, 0x49u, 0x04u, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x10u, 0x12u, 0x00u, 0x28u, 0x80u, 0x1fu, 0x00u, 0x10u, 0x40u, 0x22u, 0x92u, 0x02u, 0x9au, 0x1au, 0x92u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x17u, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd1u, 0x13u, 0x4bu, 0x9du, 0x46u, 0xffu, 0xf7u,
- 0xf3u, 0xffu, 0x00u, 0x21u, 0x8bu, 0x46u, 0x0fu, 0x46u, 0x13u, 0x48u, 0x14u, 0x4au, 0x12u, 0x1au, 0x01u, 0xf0u,
- 0xd4u, 0xfeu, 0x0eu, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0x0du, 0x4bu, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0x00u, 0x20u, 0x00u, 0x21u, 0x04u, 0x00u, 0x0du, 0x00u, 0x0du, 0x48u, 0x00u, 0x28u, 0x02u, 0xd0u,
- 0x0cu, 0x48u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0xf0u, 0x93u, 0xfeu, 0x20u, 0x00u, 0x29u, 0x00u, 0x00u, 0xf0u,
- 0x07u, 0xfbu, 0x01u, 0xf0u, 0x77u, 0xfeu, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x55u, 0x07u, 0x00u, 0x10u, 0x00u, 0x00u, 0x02u, 0x28u, 0x0cu, 0x12u, 0x00u, 0x28u, 0x60u, 0x12u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x30u, 0x80u, 0x08u, 0x03u, 0xd0u, 0x01u, 0x30u,
- 0x02u, 0x38u, 0xfcu, 0xd1u, 0xc0u, 0x46u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xefu, 0xf3u, 0x10u, 0x80u, 0x72u, 0xb6u,
- 0x70u, 0x47u, 0x80u, 0xf3u, 0x10u, 0x88u, 0x70u, 0x47u, 0x01u, 0x20u, 0xc0u, 0x04u, 0x13u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x12u, 0x49u, 0x0au, 0x68u, 0x02u, 0x43u, 0x0au, 0x60u, 0x11u, 0x49u, 0x0au, 0x68u,
- 0x02u, 0x43u, 0x0au, 0x60u, 0x10u, 0x48u, 0x11u, 0x49u, 0x00u, 0x22u, 0x00u, 0x23u, 0x0cu, 0xc0u, 0x88u, 0x42u,
- 0xfcu, 0xd3u, 0x00u, 0xf0u, 0x4fu, 0xfbu, 0x00u, 0xf0u, 0xe1u, 0xfau, 0xfeu, 0xe7u, 0xfeu, 0xe7u, 0x00u, 0xb5u,
- 0x04u, 0x20u, 0x71u, 0x46u, 0x08u, 0x42u, 0x02u, 0xd0u, 0xefu, 0xf3u, 0x09u, 0x80u, 0x02u, 0xe0u, 0xefu, 0xf3u,
- 0x08u, 0x80u, 0x04u, 0x30u, 0x00u, 0xf0u, 0xe4u, 0xf9u, 0xfeu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x13u, 0x20u, 0x40u,
- 0x80u, 0x13u, 0x20u, 0x40u, 0xa0u, 0x13u, 0x20u, 0x40u, 0x00u, 0xffu, 0x01u, 0x28u, 0x00u, 0x00u, 0x02u, 0x28u,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0xc0u, 0x18u, 0x03u, 0x4bu, 0x80u, 0x00u, 0xc0u, 0x58u, 0x80u, 0x06u, 0x80u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x03u, 0x00u, 0x00u, 0x20u, 0x07u, 0x2bu, 0x08u, 0xd8u,
- 0x92u, 0x22u, 0xd2u, 0x00u, 0x9bu, 0x18u, 0x03u, 0x4au, 0x9bu, 0x00u, 0x9bu, 0x58u, 0x01u, 0x30u, 0x1bu, 0x0au,
- 0x98u, 0x43u, 0x70u, 0x47u, 0x00u, 0x00u, 0x26u, 0x40u, 0x02u, 0x4bu, 0x18u, 0x69u, 0x40u, 0x07u, 0xc0u, 0x0fu,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x27u, 0x40u, 0x04u, 0x4bu, 0x05u, 0x4au, 0xd0u, 0x58u, 0x03u, 0x23u,
- 0x18u, 0x40u, 0x98u, 0x42u, 0x00u, 0xd1u, 0x02u, 0x20u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x24u, 0x15u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xefu, 0xffu, 0x00u, 0x23u, 0x02u, 0x28u, 0x01u, 0xd1u,
- 0x01u, 0x4bu, 0x1bu, 0x68u, 0x18u, 0x00u, 0x10u, 0xbdu, 0x2cu, 0x12u, 0x00u, 0x28u, 0x09u, 0x4au, 0x83u, 0x00u,
- 0x99u, 0x18u, 0x90u, 0x22u, 0x52u, 0x01u, 0x88u, 0x58u, 0x07u, 0x22u, 0x10u, 0x40u, 0x04u, 0x28u, 0x07u, 0xd1u,
- 0x05u, 0x4au, 0x9bu, 0x18u, 0x58u, 0x68u, 0x1fu, 0x23u, 0x03u, 0x40u, 0x80u, 0x20u, 0x40u, 0x00u, 0x18u, 0x43u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0xfcu, 0x00u, 0x26u, 0x40u, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0xe5u, 0xffu, 0x88u, 0x23u, 0x5bu, 0x00u, 0x98u, 0x42u, 0x19u, 0xd0u, 0x09u, 0xd8u, 0x01u, 0x28u, 0x10u, 0xd0u,
- 0x02u, 0x28u, 0x11u, 0xd0u, 0x43u, 0x42u, 0x58u, 0x41u, 0x0fu, 0x4bu, 0x40u, 0x42u, 0x18u, 0x40u, 0x10u, 0xbdu,
- 0x12u, 0x23u, 0xffu, 0x33u, 0x98u, 0x42u, 0x12u, 0xd0u, 0x03u, 0x33u, 0x98u, 0x42u, 0x07u, 0xd0u, 0x00u, 0x20u,
- 0xf5u, 0xe7u, 0x0au, 0x4bu, 0x18u, 0x68u, 0xf2u, 0xe7u, 0xffu, 0xf7u, 0xbcu, 0xffu, 0xefu, 0xe7u, 0x08u, 0x4au,
- 0x08u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0xf2u, 0xdau, 0x80u, 0x20u, 0x00u, 0x02u, 0xe7u, 0xe7u, 0xffu, 0xf7u,
- 0x9bu, 0xffu, 0x00u, 0x28u, 0xebu, 0xd0u, 0xf7u, 0xe7u, 0x00u, 0x12u, 0x7au, 0x00u, 0x28u, 0x12u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x08u, 0x15u, 0x00u, 0x00u, 0x14u, 0x4au, 0x15u, 0x4bu, 0x10u, 0xb5u, 0xd3u, 0x58u,
- 0x0fu, 0x24u, 0x99u, 0x03u, 0xdbu, 0x01u, 0xdbu, 0x0fu, 0x89u, 0x0bu, 0xc3u, 0x71u, 0x11u, 0x4bu, 0x01u, 0x60u,
- 0xd3u, 0x58u, 0xd9u, 0x04u, 0x1bu, 0x0cu, 0xdbu, 0xb2u, 0x03u, 0x81u, 0x0fu, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u,
- 0x81u, 0x80u, 0x19u, 0x00u, 0x21u, 0x40u, 0x81u, 0x72u, 0x19u, 0x09u, 0x21u, 0x40u, 0xc1u, 0x72u, 0xd9u, 0x02u,
- 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x83u, 0x73u, 0x09u, 0x4bu, 0xc9u, 0x0cu, 0xd3u, 0x58u, 0x81u, 0x81u, 0x5au, 0x05u,
- 0xdbu, 0x01u, 0x52u, 0x0fu, 0xdbu, 0x0du, 0x82u, 0x71u, 0x03u, 0x82u, 0x10u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x30u, 0x15u, 0x00u, 0x00u, 0x34u, 0x15u, 0x00u, 0x00u, 0x38u, 0x15u, 0x00u, 0x00u, 0x3cu, 0x15u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x9du, 0xfdu,
- 0x14u, 0x4bu, 0x28u, 0x01u, 0xc5u, 0x18u, 0xc8u, 0x23u, 0x1fu, 0x26u, 0x5bu, 0x01u, 0xebu, 0x58u, 0x19u, 0x0au,
- 0x31u, 0x40u, 0x61u, 0x70u, 0x07u, 0x21u, 0x23u, 0x70u, 0x1au, 0x0cu, 0x9bu, 0x00u, 0x9bu, 0x0fu, 0x32u, 0x40u,
- 0x23u, 0x71u, 0x0du, 0x4bu, 0xa2u, 0x70u, 0xebu, 0x58u, 0x1au, 0x02u, 0x12u, 0x0au, 0xa2u, 0x60u, 0x1au, 0x0fu,
- 0xf3u, 0x40u, 0x0au, 0x40u, 0x55u, 0x1eu, 0xaau, 0x41u, 0x63u, 0x73u, 0x08u, 0x4bu, 0x22u, 0x73u, 0xc0u, 0x18u,
- 0x03u, 0x68u, 0x00u, 0x20u, 0xdau, 0xb2u, 0x22u, 0x61u, 0x1au, 0x0cu, 0xf3u, 0x40u, 0x11u, 0x40u, 0x21u, 0x75u,
- 0x63u, 0x75u, 0x70u, 0xbdu, 0x00u, 0x00u, 0x26u, 0x40u, 0x04u, 0x19u, 0x00u, 0x00u, 0x08u, 0x19u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x0cu, 0x00u, 0x05u, 0x00u, 0x18u, 0x22u, 0x00u, 0x21u, 0x20u, 0x00u, 0x01u, 0xf0u, 0x65u, 0xfdu,
- 0xb0u, 0x23u, 0x7fu, 0x22u, 0x1fu, 0x20u, 0xdbu, 0x00u, 0xedu, 0x18u, 0x09u, 0x4bu, 0xadu, 0x00u, 0xebu, 0x58u,
- 0x1au, 0x40u, 0x22u, 0x70u, 0x1au, 0x0cu, 0x02u, 0x40u, 0xa2u, 0x70u, 0x1au, 0x01u, 0xc2u, 0x40u, 0x19u, 0x0au,
- 0x9bu, 0x00u, 0x01u, 0x40u, 0x9bu, 0x0fu, 0x00u, 0x20u, 0x61u, 0x70u, 0xe2u, 0x70u, 0x23u, 0x71u, 0x70u, 0xbdu,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x42u, 0x1eu, 0x06u, 0x4bu, 0x01u, 0x2au, 0x05u, 0xd8u, 0x90u, 0x30u, 0xffu, 0x30u,
- 0x00u, 0x01u, 0x18u, 0x58u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0x02u, 0x4au, 0x80u, 0x18u, 0x80u, 0x00u, 0xf8u, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x7du, 0x05u, 0x00u, 0x00u, 0x03u, 0x00u, 0x01u, 0x38u, 0x10u, 0xb5u, 0x01u, 0x28u,
- 0x02u, 0xd8u, 0xffu, 0xf7u, 0x8du, 0xffu, 0x10u, 0xbdu, 0xd8u, 0x1eu, 0xffu, 0xf7u, 0xc1u, 0xffu, 0xfau, 0xe7u,
- 0xf0u, 0xb5u, 0x8bu, 0xb0u, 0x04u, 0x00u, 0xffu, 0xf7u, 0x19u, 0xffu, 0x06u, 0x00u, 0x00u, 0x2cu, 0x3du, 0xd1u,
- 0x14u, 0x22u, 0x21u, 0x00u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0x20u, 0xfdu, 0x04u, 0xa8u, 0xffu, 0xf7u, 0x44u, 0xffu,
- 0x33u, 0x4au, 0x34u, 0x4bu, 0xd3u, 0x58u, 0x00u, 0x2bu, 0x04u, 0xdau, 0x04u, 0xabu, 0x9cu, 0x7bu, 0x02u, 0x3cu,
- 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xa9u, 0xc8u, 0x79u, 0x01u, 0x23u, 0x41u, 0x1eu, 0x88u, 0x41u, 0x00u, 0x27u,
- 0x04u, 0xaau, 0x04u, 0x9du, 0x92u, 0x88u, 0x1cu, 0x40u, 0xc0u, 0x18u, 0x03u, 0x93u, 0x00u, 0x2cu, 0x1au, 0xd0u,
- 0x00u, 0x2au, 0x18u, 0xd0u, 0x00u, 0x23u, 0x19u, 0x00u, 0x00u, 0xf0u, 0x10u, 0xfcu, 0x02u, 0x90u, 0x01u, 0x91u,
- 0x00u, 0x2fu, 0x30u, 0xd0u, 0x29u, 0x0au, 0x28u, 0x06u, 0x00u, 0x25u, 0x03u, 0x9cu, 0x32u, 0x00u, 0x2bu, 0x00u,
- 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0xf0u, 0x02u, 0xfcu, 0x02u, 0x9au, 0x01u, 0x9bu, 0x00u, 0xf0u, 0xdeu, 0xfbu,
- 0x0eu, 0x02u, 0x00u, 0x0eu, 0x06u, 0x43u, 0x30u, 0x00u, 0x0bu, 0xb0u, 0xf0u, 0xbdu, 0x04u, 0x2cu, 0xfau, 0xd8u,
- 0x18u, 0x22u, 0x00u, 0x21u, 0x04u, 0xa8u, 0x01u, 0xf0u, 0xe0u, 0xfcu, 0x20u, 0x00u, 0x04u, 0xa9u, 0xffu, 0xf7u,
- 0xa3u, 0xffu, 0x20u, 0x00u, 0xffu, 0xf7u, 0x8eu, 0xffu, 0x00u, 0x24u, 0xa0u, 0x42u, 0x04u, 0xd0u, 0x04u, 0xabu,
- 0x1cu, 0x79u, 0x02u, 0x3cu, 0x63u, 0x1eu, 0x9cu, 0x41u, 0x04u, 0xabu, 0x1du, 0x78u, 0x5au, 0x78u, 0x98u, 0x78u,
- 0x5fu, 0x7bu, 0x06u, 0x9bu, 0xc1u, 0xe7u, 0x32u, 0x00u, 0x3bu, 0x00u, 0x28u, 0x00u, 0x39u, 0x00u, 0x00u, 0xf0u,
- 0xd5u, 0xfbu, 0x02u, 0x9cu, 0x01u, 0x9bu, 0x62u, 0x08u, 0x01u, 0x9cu, 0xdeu, 0x07u, 0x32u, 0x43u, 0x63u, 0x08u,
- 0x80u, 0x18u, 0x59u, 0x41u, 0x23u, 0x00u, 0x02u, 0x9au, 0x00u, 0xf0u, 0xa8u, 0xfbu, 0x06u, 0x00u, 0xcau, 0xe7u,
- 0x00u, 0x00u, 0x26u, 0x40u, 0x30u, 0x15u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0x48u, 0xfeu,
- 0x92u, 0x23u, 0xdbu, 0x00u, 0x0bu, 0x4au, 0xf3u, 0x18u, 0x9bu, 0x00u, 0x04u, 0x00u, 0x98u, 0x58u, 0x0fu, 0x23u,
- 0x18u, 0x40u, 0xffu, 0xf7u, 0x75u, 0xffu, 0x05u, 0x00u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x45u, 0xfeu, 0x00u, 0x28u,
- 0x05u, 0xd1u, 0x01u, 0x30u, 0xa0u, 0x40u, 0x40u, 0x08u, 0x40u, 0x19u, 0xe0u, 0x40u, 0x70u, 0xbdu, 0x02u, 0x48u,
- 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u, 0x00u, 0x12u, 0x7au, 0x00u, 0xfeu, 0xe7u, 0x00u, 0x00u,
- 0x02u, 0x68u, 0x0au, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x60u, 0x42u, 0x68u, 0x5au, 0x60u, 0x82u, 0x68u, 0x9au, 0x60u,
- 0xc2u, 0x68u, 0xdau, 0x60u, 0x02u, 0x69u, 0x1au, 0x61u, 0x42u, 0x69u, 0x5au, 0x61u, 0x82u, 0x69u, 0x9au, 0x61u,
- 0xc2u, 0x69u, 0xdau, 0x61u, 0xffu, 0xf7u, 0xeau, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0x08u, 0x00u, 0x28u,
- 0x05u, 0x4bu, 0x02u, 0x22u, 0x19u, 0x69u, 0x00u, 0x28u, 0x02u, 0xd0u, 0x0au, 0x43u, 0x1au, 0x61u, 0x70u, 0x47u,
- 0x91u, 0x43u, 0x19u, 0x61u, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xedu, 0x00u, 0xe0u, 0x7fu, 0xb5u, 0x27u, 0x4bu,
- 0x86u, 0x00u, 0x0du, 0x00u, 0xf4u, 0x58u, 0x04u, 0x29u, 0x01u, 0xd0u, 0x01u, 0x29u, 0x27u, 0xd1u, 0x00u, 0x20u,
- 0x0fu, 0xe0u, 0xa3u, 0x68u, 0x2bu, 0x42u, 0x0bu, 0xd1u, 0xe3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u,
- 0x02u, 0x92u, 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x23u, 0x68u, 0x98u, 0x47u, 0x1cu, 0x4bu, 0x1cu, 0x60u,
- 0x64u, 0x69u, 0x00u, 0x2cu, 0x0bu, 0xd0u, 0x1bu, 0x4bu, 0x98u, 0x42u, 0xeau, 0xd1u, 0x01u, 0x2du, 0xe8u, 0xd1u,
- 0x17u, 0x4bu, 0x18u, 0x48u, 0x1au, 0x68u, 0x18u, 0x4bu, 0x9au, 0x51u, 0x04u, 0xb0u, 0x70u, 0xbdu, 0x01u, 0x2du,
- 0xfbu, 0xd1u, 0x14u, 0x4bu, 0x98u, 0x42u, 0xf3u, 0xd0u, 0x13u, 0x4bu, 0x9cu, 0x51u, 0xf5u, 0xe7u, 0x02u, 0x29u,
- 0x15u, 0xd0u, 0x26u, 0x00u, 0x64u, 0x69u, 0x00u, 0x2cu, 0xfbu, 0xd1u, 0x00u, 0x20u, 0x00u, 0x2eu, 0xecu, 0xd0u,
- 0xb3u, 0x68u, 0x2bu, 0x42u, 0x09u, 0xd1u, 0xf3u, 0x68u, 0x29u, 0x00u, 0x1au, 0x68u, 0x5bu, 0x68u, 0x02u, 0x92u,
- 0x01u, 0x93u, 0x03u, 0x93u, 0x02u, 0xa8u, 0x33u, 0x68u, 0x98u, 0x47u, 0x36u, 0x69u, 0xeeu, 0xe7u, 0x04u, 0x4bu,
- 0x1bu, 0x68u, 0x18u, 0x1eu, 0xd9u, 0xd0u, 0x1eu, 0x69u, 0xe7u, 0xe7u, 0xc0u, 0x46u, 0x48u, 0x12u, 0x00u, 0x28u,
- 0x44u, 0x12u, 0x00u, 0x28u, 0xffu, 0x00u, 0x42u, 0x00u, 0x30u, 0x12u, 0x00u, 0x28u, 0x80u, 0x23u, 0x03u, 0x4au,
- 0x5bu, 0x01u, 0xd0u, 0x58u, 0x80u, 0x06u, 0xc0u, 0x0fu, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x70u, 0xb5u, 0x06u, 0x00u, 0xffu, 0xf7u, 0xf2u, 0xffu, 0x00u, 0x28u, 0x30u, 0xd0u, 0x19u, 0x4du, 0x6bu, 0x68u,
- 0x00u, 0x2bu, 0x17u, 0xd1u, 0xffu, 0xf7u, 0x59u, 0xfdu, 0x6bu, 0x68u, 0x04u, 0x00u, 0x00u, 0x2bu, 0x1fu, 0xd1u,
- 0x04u, 0x23u, 0x15u, 0x4au, 0x11u, 0x69u, 0x0bu, 0x43u, 0x13u, 0x61u, 0x01u, 0x2eu, 0x1du, 0xd0u, 0x30u, 0xbfu,
- 0x20u, 0x00u, 0x00u, 0x24u, 0xffu, 0xf7u, 0x4du, 0xfdu, 0x6bu, 0x68u, 0x08u, 0x21u, 0xa3u, 0x42u, 0x0bu, 0xd1u,
- 0x20u, 0x00u, 0x70u, 0xbdu, 0x01u, 0x21u, 0x08u, 0x00u, 0xffu, 0xf7u, 0x78u, 0xffu, 0x04u, 0x1eu, 0xe1u, 0xd0u,
- 0x6bu, 0x68u, 0x02u, 0x21u, 0x00u, 0x2bu, 0xf3u, 0xd0u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6fu, 0xffu, 0xefu, 0xe7u,
- 0x04u, 0x21u, 0x01u, 0x20u, 0xffu, 0xf7u, 0x6au, 0xffu, 0xdau, 0xe7u, 0x20u, 0xbfu, 0xe0u, 0xe7u, 0x03u, 0x4cu,
- 0xe6u, 0xe7u, 0xc0u, 0x46u, 0x48u, 0x12u, 0x00u, 0x28u, 0x00u, 0xedu, 0x00u, 0xe0u, 0xffu, 0x00u, 0x42u, 0x00u,
- 0x03u, 0x21u, 0x06u, 0x4bu, 0x1au, 0x6cu, 0x8au, 0x43u, 0x11u, 0x00u, 0x01u, 0x22u, 0x0au, 0x43u, 0x1au, 0x64u,
- 0x02u, 0x22u, 0x19u, 0x6cu, 0x0au, 0x43u, 0x1au, 0x64u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0xc0u, 0x26u, 0x40u,
- 0x10u, 0xb5u, 0x62u, 0xb6u, 0x00u, 0x20u, 0x05u, 0x49u, 0x00u, 0xf0u, 0x22u, 0xf9u, 0x01u, 0x20u, 0xffu, 0xf7u,
- 0x37u, 0xffu, 0x00u, 0x20u, 0xffu, 0xf7u, 0xa4u, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x08u, 0x10u,
- 0xfeu, 0xe7u, 0x70u, 0x47u, 0x10u, 0xb5u, 0xffu, 0xf7u, 0xfcu, 0xffu, 0x10u, 0xbdu, 0x70u, 0xb5u, 0x11u, 0x4bu,
- 0x11u, 0x48u, 0x83u, 0x42u, 0x11u, 0xd3u, 0x00u, 0x20u, 0x10u, 0x4bu, 0x11u, 0x49u, 0x8bu, 0x42u, 0x17u, 0xd3u,
- 0xffu, 0xf7u, 0xb0u, 0xfcu, 0x1cu, 0x68u, 0x91u, 0x00u, 0x64u, 0x58u, 0x5du, 0x68u, 0x01u, 0x32u, 0x6cu, 0x50u,
- 0x99u, 0x68u, 0x8au, 0x42u, 0xf6u, 0xd3u, 0x0cu, 0x33u, 0xebu, 0xe7u, 0x00u, 0x22u, 0xf8u, 0xe7u, 0x1du, 0x68u,
- 0x94u, 0x00u, 0x60u, 0x51u, 0x01u, 0x32u, 0x5cu, 0x68u, 0xa2u, 0x42u, 0xf8u, 0xd3u, 0x08u, 0x33u, 0xe5u, 0xe7u,
- 0x00u, 0x22u, 0xf8u, 0xe7u, 0x8cu, 0x20u, 0x00u, 0x10u, 0x98u, 0x20u, 0x00u, 0x10u, 0x98u, 0x20u, 0x00u, 0x10u,
- 0xa0u, 0x20u, 0x00u, 0x10u, 0x00u, 0x23u, 0x10u, 0xb5u, 0x05u, 0x4au, 0x06u, 0x4cu, 0x06u, 0x49u, 0x98u, 0x00u,
- 0x01u, 0x33u, 0x14u, 0x50u, 0x8bu, 0x42u, 0xfau, 0xd1u, 0x04u, 0x4bu, 0x1au, 0x60u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x51u, 0x07u, 0x00u, 0x10u, 0x37u, 0x02u, 0x00u, 0x00u, 0x10u, 0x09u, 0x00u, 0x28u,
- 0x70u, 0x47u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x01u, 0x20u, 0xffu, 0xf7u, 0xa6u, 0xfeu, 0x0du, 0x4cu, 0x60u, 0x60u,
- 0xa0u, 0x60u, 0x02u, 0x20u, 0xffu, 0xf7u, 0xa0u, 0xfeu, 0x65u, 0x68u, 0x0bu, 0x4bu, 0xe0u, 0x60u, 0x25u, 0x61u,
- 0xe8u, 0x18u, 0x0au, 0x49u, 0x00u, 0xf0u, 0xaeu, 0xf9u, 0xfau, 0x21u, 0x09u, 0x4bu, 0x60u, 0x61u, 0x89u, 0x00u,
- 0xe8u, 0x18u, 0x00u, 0xf0u, 0xa7u, 0xf9u, 0xa0u, 0x61u, 0x00u, 0x20u, 0xffu, 0xf7u, 0x8du, 0xfeu, 0xe0u, 0x61u,
- 0x70u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0x09u, 0x00u, 0x28u, 0x3fu, 0x42u, 0x0fu, 0x00u, 0x40u, 0x42u, 0x0fu, 0x00u,
- 0xe7u, 0x03u, 0x00u, 0x00u, 0x70u, 0xb5u, 0x00u, 0x24u, 0x00u, 0x25u, 0x26u, 0x4bu, 0x26u, 0x4au, 0x59u, 0x1eu,
- 0xffu, 0x39u, 0x8au, 0x42u, 0x42u, 0xd3u, 0x00u, 0x20u, 0x00u, 0x21u, 0x24u, 0x4au, 0x93u, 0x42u, 0x3fu, 0xd9u,
- 0x98u, 0x20u, 0xffu, 0x25u, 0x22u, 0x4bu, 0x40u, 0x01u, 0x1au, 0x58u, 0x22u, 0x49u, 0x22u, 0x4cu, 0x0au, 0x40u,
- 0x1au, 0x50u, 0x80u, 0x30u, 0x1au, 0x58u, 0x0au, 0x40u, 0x1au, 0x50u, 0x20u, 0x30u, 0x1au, 0x58u, 0x0au, 0x40u,
- 0x1au, 0x50u, 0x1eu, 0x4au, 0x20u, 0x00u, 0x92u, 0x08u, 0x2au, 0x40u, 0x1du, 0x49u, 0x92u, 0x00u, 0x01u, 0xf0u,
- 0x03u, 0xfbu, 0x40u, 0x21u, 0x1bu, 0x4bu, 0xc0u, 0x22u, 0x9cu, 0x60u, 0x0bu, 0x68u, 0x92u, 0x00u, 0x23u, 0x64u,
- 0x44u, 0x23u, 0x1bu, 0x68u, 0x63u, 0x64u, 0x18u, 0x4bu, 0x98u, 0x58u, 0xa8u, 0x43u, 0x01u, 0x43u, 0x99u, 0x50u,
- 0x99u, 0x58u, 0x16u, 0x48u, 0x01u, 0x40u, 0x99u, 0x50u, 0x01u, 0x22u, 0x1au, 0x60u, 0x92u, 0x18u, 0x1au, 0x60u,
- 0xffu, 0xf7u, 0x80u, 0xffu, 0xffu, 0xf7u, 0x2cu, 0xffu, 0x11u, 0x4au, 0x13u, 0x68u, 0x5bu, 0x00u, 0x5bu, 0x08u,
- 0x13u, 0x60u, 0xffu, 0xf7u, 0x8du, 0xffu, 0xffu, 0xf7u, 0x8du, 0xffu, 0x70u, 0xbdu, 0x30u, 0xc2u, 0xb8u, 0xe7u,
- 0x03u, 0xc3u, 0xbbu, 0xe7u, 0x00u, 0x00u, 0x02u, 0x28u, 0x00u, 0x08u, 0x00u, 0x28u, 0xffu, 0xffu, 0x0fu, 0x28u,
- 0x00u, 0x00u, 0x20u, 0x40u, 0xffu, 0xffu, 0xf7u, 0xffu, 0x00u, 0x08u, 0x00u, 0x28u, 0x80u, 0x00u, 0x00u, 0x10u,
- 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0xedu, 0x00u, 0xe0u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0xffu, 0x00u, 0xffu, 0xffu,
- 0x00u, 0xc0u, 0x26u, 0x40u, 0x03u, 0x1eu, 0x06u, 0xd1u, 0x90u, 0x23u, 0x06u, 0x4au, 0x5bu, 0x01u, 0xd0u, 0x58u,
- 0x03u, 0x23u, 0x18u, 0x40u, 0x70u, 0x47u, 0x00u, 0x20u, 0x01u, 0x2bu, 0xfbu, 0xd1u, 0x01u, 0x4au, 0x02u, 0x4bu,
- 0xf5u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x20u, 0x40u, 0x10u, 0x12u, 0x00u, 0x00u, 0x00u, 0x28u, 0x0du, 0xd1u,
- 0x90u, 0x20u, 0x0eu, 0x4bu, 0x40u, 0x01u, 0x1au, 0x58u, 0x0du, 0x49u, 0x11u, 0x40u, 0x0du, 0x4au, 0x0au, 0x43u,
- 0x1au, 0x50u, 0x10u, 0x22u, 0x59u, 0x68u, 0x11u, 0x42u, 0xfcu, 0xd0u, 0x70u, 0x47u, 0x01u, 0x28u, 0xfcu, 0xd1u,
- 0x09u, 0x48u, 0x06u, 0x4bu, 0x06u, 0x49u, 0x1au, 0x58u, 0x11u, 0x40u, 0x06u, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u,
- 0x10u, 0x22u, 0x06u, 0x48u, 0x19u, 0x58u, 0x11u, 0x42u, 0xfcu, 0xd0u, 0xeeu, 0xe7u, 0x00u, 0x00u, 0x20u, 0x40u,
- 0xfcu, 0xffu, 0x00u, 0x00u, 0x01u, 0x00u, 0xfau, 0x05u, 0x10u, 0x12u, 0x00u, 0x00u, 0x04u, 0x04u, 0x00u, 0x00u,
- 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0xffu, 0xf7u, 0xe8u, 0xfbu, 0x06u, 0x00u, 0x20u, 0x00u, 0xffu, 0xf7u,
- 0xb9u, 0xffu, 0x03u, 0x28u, 0x02u, 0xd1u, 0x20u, 0x00u, 0xffu, 0xf7u, 0xc8u, 0xffu, 0x80u, 0x23u, 0x1bu, 0x49u,
- 0x1bu, 0x4au, 0x1bu, 0x06u, 0x88u, 0x58u, 0x03u, 0x43u, 0x8bu, 0x50u, 0x00u, 0x2cu, 0x16u, 0xd1u, 0x80u, 0x22u,
- 0x90u, 0x20u, 0x18u, 0x4bu, 0x92u, 0x00u, 0x9du, 0x50u, 0x40u, 0x01u, 0x1au, 0x58u, 0x16u, 0x49u, 0x11u, 0x40u,
- 0x16u, 0x4au, 0x0au, 0x43u, 0x10u, 0x21u, 0x1au, 0x50u, 0x5au, 0x68u, 0x0au, 0x42u, 0xfcu, 0xd0u, 0xdau, 0x68u,
- 0x8au, 0x43u, 0xdau, 0x60u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xc4u, 0xfbu, 0x70u, 0xbdu, 0x01u, 0x2cu, 0xf9u, 0xd1u,
- 0xc0u, 0x22u, 0x0cu, 0x4bu, 0x0eu, 0x48u, 0xd2u, 0x00u, 0x9du, 0x50u, 0x1au, 0x58u, 0x0au, 0x49u, 0x11u, 0x40u,
- 0x0au, 0x4au, 0x0au, 0x43u, 0x1au, 0x50u, 0x10u, 0x20u, 0x0au, 0x49u, 0x5au, 0x58u, 0x02u, 0x42u, 0xfcu, 0xd0u,
- 0x09u, 0x49u, 0x5au, 0x58u, 0x82u, 0x43u, 0x5au, 0x50u, 0xe4u, 0xe7u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x26u, 0x40u,
- 0x44u, 0x12u, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x40u, 0xfcu, 0xffu, 0x00u, 0x00u, 0x03u, 0x00u, 0xfau, 0x05u,
- 0x10u, 0x12u, 0x00u, 0x00u, 0x04u, 0x04u, 0x00u, 0x00u, 0x0cu, 0x04u, 0x00u, 0x00u, 0x09u, 0x4bu, 0x10u, 0xb5u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x04u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x08u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u,
- 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x08u, 0x21u, 0x04u, 0x4au,
- 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x0cu, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u,
- 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u,
- 0x10u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0x11u, 0x20u, 0x40u,
- 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au,
- 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x98u, 0x47u, 0xc0u, 0x23u, 0x20u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x14u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u, 0x09u, 0x4bu, 0x10u, 0xb5u,
- 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u, 0x1bu, 0x0du, 0x9bu, 0x58u,
- 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x40u, 0x21u, 0x04u, 0x4au, 0x5bu, 0x00u, 0xd1u, 0x50u,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x18u, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u, 0x00u, 0xe1u, 0x00u, 0xe0u,
- 0x09u, 0x4bu, 0x10u, 0xb5u, 0x1au, 0x68u, 0x00u, 0x2au, 0x07u, 0xdau, 0x1bu, 0x68u, 0x07u, 0x4au, 0x9bu, 0x05u,
- 0x1bu, 0x0du, 0x9bu, 0x58u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u, 0xc0u, 0x23u, 0x80u, 0x21u, 0x04u, 0x4au,
- 0x5bu, 0x00u, 0xd1u, 0x50u, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x1cu, 0x11u, 0x20u, 0x40u, 0x30u, 0x09u, 0x00u, 0x28u,
- 0x00u, 0xe1u, 0x00u, 0xe0u, 0x00u, 0x22u, 0x43u, 0x08u, 0x8bu, 0x42u, 0x74u, 0xd3u, 0x03u, 0x09u, 0x8bu, 0x42u,
- 0x5fu, 0xd3u, 0x03u, 0x0au, 0x8bu, 0x42u, 0x44u, 0xd3u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x28u, 0xd3u, 0x03u, 0x0cu,
- 0x8bu, 0x42u, 0x0du, 0xd3u, 0xffu, 0x22u, 0x09u, 0x02u, 0x12u, 0xbau, 0x03u, 0x0cu, 0x8bu, 0x42u, 0x02u, 0xd3u,
- 0x12u, 0x12u, 0x09u, 0x02u, 0x65u, 0xd0u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x19u, 0xd3u, 0x00u, 0xe0u, 0x09u, 0x0au,
- 0xc3u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x0bu, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0x8bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x03u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x0bu, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x03u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0xc3u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x0au, 0x8bu, 0x42u,
- 0x01u, 0xd3u, 0x8bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x4bu, 0x02u,
- 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x0au, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x02u, 0xc0u, 0x1au, 0x52u, 0x41u,
- 0xcdu, 0xd2u, 0xc3u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x09u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0x4bu, 0x01u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x03u, 0x09u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0x0bu, 0x01u, 0xc0u, 0x1au,
- 0x52u, 0x41u, 0xc3u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u, 0xcbu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x83u, 0x08u,
- 0x8bu, 0x42u, 0x01u, 0xd3u, 0x8bu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x43u, 0x08u, 0x8bu, 0x42u, 0x01u, 0xd3u,
- 0x4bu, 0x00u, 0xc0u, 0x1au, 0x52u, 0x41u, 0x41u, 0x1au, 0x00u, 0xd2u, 0x01u, 0x46u, 0x52u, 0x41u, 0x10u, 0x46u,
- 0x70u, 0x47u, 0xffu, 0xe7u, 0x01u, 0xb5u, 0x00u, 0x20u, 0x00u, 0xf0u, 0x06u, 0xf8u, 0x02u, 0xbdu, 0xc0u, 0x46u,
- 0x00u, 0x29u, 0xf7u, 0xd0u, 0x76u, 0xe7u, 0x70u, 0x47u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x00u, 0x2bu, 0x11u, 0xd1u,
- 0x00u, 0x2au, 0x0fu, 0xd1u, 0x00u, 0x29u, 0x00u, 0xd1u, 0x00u, 0x28u, 0x02u, 0xd0u, 0x00u, 0x21u, 0xc9u, 0x43u,
- 0x08u, 0x00u, 0x07u, 0xb4u, 0x02u, 0x48u, 0x02u, 0xa1u, 0x40u, 0x18u, 0x02u, 0x90u, 0x03u, 0xbdu, 0xc0u, 0x46u,
- 0xd9u, 0xffu, 0xffu, 0xffu, 0x03u, 0xb4u, 0x68u, 0x46u, 0x01u, 0xb5u, 0x02u, 0x98u, 0x00u, 0xf0u, 0x34u, 0xf8u,
- 0x01u, 0x9bu, 0x9eu, 0x46u, 0x02u, 0xb0u, 0x0cu, 0xbcu, 0x70u, 0x47u, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u,
- 0x47u, 0x46u, 0x80u, 0xb5u, 0x07u, 0x00u, 0x99u, 0x46u, 0x3bu, 0x0cu, 0x9cu, 0x46u, 0x13u, 0x04u, 0x1bu, 0x0cu,
- 0x1du, 0x00u, 0x0eu, 0x00u, 0x61u, 0x46u, 0x00u, 0x04u, 0x14u, 0x0cu, 0x00u, 0x0cu, 0x45u, 0x43u, 0x4bu, 0x43u,
- 0x60u, 0x43u, 0x61u, 0x43u, 0xc0u, 0x18u, 0x2cu, 0x0cu, 0x20u, 0x18u, 0x8cu, 0x46u, 0x83u, 0x42u, 0x03u, 0xd9u,
- 0x80u, 0x23u, 0x5bu, 0x02u, 0x98u, 0x46u, 0xc4u, 0x44u, 0x49u, 0x46u, 0x79u, 0x43u, 0x72u, 0x43u, 0x03u, 0x0cu,
- 0x63u, 0x44u, 0x2du, 0x04u, 0x2du, 0x0cu, 0xc9u, 0x18u, 0x00u, 0x04u, 0x40u, 0x19u, 0x89u, 0x18u, 0xc0u, 0xbcu,
- 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0x57u, 0x46u, 0x4eu, 0x46u, 0x45u, 0x46u,
- 0xdeu, 0x46u, 0xe0u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x92u, 0x46u, 0x99u, 0x46u, 0x83u, 0xb0u, 0x8bu, 0x42u,
- 0x30u, 0xd8u, 0x2du, 0xd0u, 0x49u, 0x46u, 0x50u, 0x46u, 0x01u, 0xf0u, 0x58u, 0xf8u, 0x29u, 0x00u, 0x06u, 0x00u,
- 0x20u, 0x00u, 0x01u, 0xf0u, 0x53u, 0xf8u, 0x33u, 0x1au, 0x98u, 0x46u, 0x20u, 0x3bu, 0x9bu, 0x46u, 0x33u, 0xd4u,
- 0x5au, 0x46u, 0x53u, 0x46u, 0x93u, 0x40u, 0x42u, 0x46u, 0x1fu, 0x00u, 0x53u, 0x46u, 0x93u, 0x40u, 0x1eu, 0x00u,
- 0xafu, 0x42u, 0x3au, 0xd8u, 0xafu, 0x42u, 0x00u, 0xd1u, 0x78u, 0xe0u, 0x5bu, 0x46u, 0xa4u, 0x1bu, 0xbdu, 0x41u,
- 0x00u, 0x2bu, 0x00u, 0xdau, 0x75u, 0xe0u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x01u, 0x23u,
- 0x5au, 0x46u, 0x93u, 0x40u, 0x01u, 0x93u, 0x01u, 0x23u, 0x42u, 0x46u, 0x93u, 0x40u, 0x00u, 0x93u, 0x28u, 0xe0u,
- 0x82u, 0x42u, 0xcfu, 0xd9u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u, 0x01u, 0x93u, 0x0cu, 0x9bu, 0x00u, 0x2bu,
- 0x01u, 0xd0u, 0x1cu, 0x60u, 0x5du, 0x60u, 0x00u, 0x98u, 0x01u, 0x99u, 0x03u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u,
- 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0x42u, 0x46u, 0x20u, 0x23u, 0x9bu, 0x1au, 0x52u, 0x46u,
- 0xdau, 0x40u, 0x41u, 0x46u, 0x13u, 0x00u, 0x4au, 0x46u, 0x8au, 0x40u, 0x17u, 0x00u, 0x42u, 0x46u, 0x1fu, 0x43u,
- 0x53u, 0x46u, 0x93u, 0x40u, 0x1eu, 0x00u, 0xafu, 0x42u, 0xc4u, 0xd9u, 0x00u, 0x22u, 0x00u, 0x23u, 0x00u, 0x92u,
- 0x01u, 0x93u, 0x43u, 0x46u, 0x00u, 0x2bu, 0xd9u, 0xd0u, 0xfbu, 0x07u, 0x72u, 0x08u, 0x1au, 0x43u, 0x46u, 0x46u,
- 0x7bu, 0x08u, 0x0eu, 0xe0u, 0xabu, 0x42u, 0x01u, 0xd1u, 0xa2u, 0x42u, 0x0cu, 0xd8u, 0xa4u, 0x1au, 0x9du, 0x41u,
- 0x01u, 0x20u, 0x24u, 0x19u, 0x6du, 0x41u, 0x00u, 0x21u, 0x01u, 0x3eu, 0x24u, 0x18u, 0x4du, 0x41u, 0x00u, 0x2eu,
- 0x06u, 0xd0u, 0xabu, 0x42u, 0xeeu, 0xd9u, 0x01u, 0x3eu, 0x24u, 0x19u, 0x6du, 0x41u, 0x00u, 0x2eu, 0xf8u, 0xd1u,
- 0x00u, 0x98u, 0x01u, 0x99u, 0x5bu, 0x46u, 0x00u, 0x19u, 0x69u, 0x41u, 0x00u, 0x2bu, 0x24u, 0xdbu, 0x2bu, 0x00u,
- 0x5au, 0x46u, 0x44u, 0x46u, 0xd3u, 0x40u, 0x2au, 0x00u, 0xe2u, 0x40u, 0x1cu, 0x00u, 0x5bu, 0x46u, 0x15u, 0x00u,
- 0x00u, 0x2bu, 0x2au, 0xdbu, 0x26u, 0x00u, 0x9eu, 0x40u, 0x33u, 0x00u, 0x26u, 0x00u, 0x47u, 0x46u, 0xbeu, 0x40u,
- 0x32u, 0x00u, 0x80u, 0x1au, 0x99u, 0x41u, 0x00u, 0x90u, 0x01u, 0x91u, 0x9fu, 0xe7u, 0xa3u, 0x42u, 0xbcu, 0xd8u,
- 0x83u, 0xe7u, 0x42u, 0x46u, 0x20u, 0x23u, 0x00u, 0x21u, 0x9bu, 0x1au, 0x00u, 0x22u, 0x00u, 0x91u, 0x01u, 0x92u,
- 0x01u, 0x22u, 0xdau, 0x40u, 0x01u, 0x92u, 0x86u, 0xe7u, 0x42u, 0x46u, 0x20u, 0x23u, 0x9bu, 0x1au, 0x2au, 0x00u,
- 0x46u, 0x46u, 0x9au, 0x40u, 0x23u, 0x00u, 0xf3u, 0x40u, 0x44u, 0x46u, 0x13u, 0x43u, 0x2au, 0x00u, 0xe2u, 0x40u,
- 0x1cu, 0x00u, 0x5bu, 0x46u, 0x15u, 0x00u, 0x00u, 0x2bu, 0xd4u, 0xdau, 0x42u, 0x46u, 0x2fu, 0x00u, 0x20u, 0x23u,
- 0x26u, 0x00u, 0x97u, 0x40u, 0x9bu, 0x1au, 0xdeu, 0x40u, 0x3bu, 0x00u, 0x33u, 0x43u, 0xcdu, 0xe7u, 0xc0u, 0x46u,
- 0x03u, 0x68u, 0x5au, 0x00u, 0x04u, 0xd5u, 0x80u, 0x22u, 0x12u, 0x06u, 0x13u, 0x43u, 0xc0u, 0x18u, 0x70u, 0x47u,
- 0x5bu, 0x00u, 0x5bu, 0x08u, 0xfau, 0xe7u, 0xc0u, 0x46u, 0xf8u, 0xb5u, 0x57u, 0x46u, 0x45u, 0x46u, 0xdeu, 0x46u,
- 0x4eu, 0x46u, 0x90u, 0x46u, 0xe0u, 0xb5u, 0x07u, 0x00u, 0x00u, 0x29u, 0x24u, 0xd0u, 0x4bu, 0x1eu, 0x9au, 0x46u,
- 0x99u, 0x46u, 0x00u, 0x23u, 0x9bu, 0x46u, 0x5bu, 0x46u, 0x4bu, 0x44u, 0xdcu, 0x0fu, 0xe4u, 0x18u, 0x64u, 0x10u,
- 0xe5u, 0x00u, 0x7eu, 0x19u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xdbu, 0xffu, 0xa2u, 0x45u, 0x0cu, 0xd0u, 0x40u, 0x45u,
- 0x0cu, 0xd8u, 0x28u, 0x00u, 0x08u, 0x30u, 0x38u, 0x18u, 0xffu, 0xf7u, 0xd2u, 0xffu, 0x01u, 0x38u, 0x40u, 0x45u,
- 0x0au, 0xd2u, 0x63u, 0x1cu, 0x9bu, 0x46u, 0xe6u, 0xe7u, 0x40u, 0x45u, 0x05u, 0xd9u, 0xa3u, 0x45u, 0x02u, 0xd0u,
- 0x63u, 0x1eu, 0x99u, 0x46u, 0xdfu, 0xe7u, 0x00u, 0x26u, 0x30u, 0x00u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u,
- 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf8u, 0xbdu, 0xc0u, 0x46u, 0x03u, 0x00u, 0x01u, 0x28u, 0x05u, 0xd0u, 0x02u, 0x28u,
- 0x07u, 0xd0u, 0x00u, 0x20u, 0x00u, 0x2bu, 0x02u, 0xd0u, 0x70u, 0x47u, 0x03u, 0x48u, 0xfcu, 0xe7u, 0x03u, 0x48u,
- 0xfau, 0xe7u, 0x03u, 0x48u, 0xf8u, 0xe7u, 0xc0u, 0x46u, 0x61u, 0x16u, 0x00u, 0x10u, 0x55u, 0x16u, 0x00u, 0x10u,
- 0x6du, 0x16u, 0x00u, 0x10u, 0x30u, 0xb5u, 0x23u, 0x4bu, 0x05u, 0x00u, 0x83u, 0xb0u, 0x8cu, 0x1eu, 0x00u, 0x2bu,
- 0x26u, 0xd0u, 0x20u, 0x00u, 0x01u, 0xa9u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x1cu, 0xd0u, 0x01u, 0x99u,
- 0x22u, 0x00u, 0xffu, 0xf7u, 0xa1u, 0xffu, 0x04u, 0x1eu, 0x16u, 0xd0u, 0xffu, 0xf7u, 0x91u, 0xffu, 0x63u, 0x68u,
- 0xa8u, 0x64u, 0x01u, 0x2bu, 0x2au, 0xd0u, 0x20u, 0x1du, 0x00u, 0x2bu, 0x23u, 0xdbu, 0xffu, 0xf7u, 0x88u, 0xffu,
- 0x00u, 0x23u, 0xe8u, 0x64u, 0x2bu, 0x65u, 0x03u, 0x68u, 0x00u, 0x2bu, 0x0fu, 0xdbu, 0xffu, 0xf7u, 0x80u, 0xffu,
- 0x28u, 0x61u, 0x00u, 0x20u, 0x03u, 0xb0u, 0x30u, 0xbdu, 0x00u, 0x23u, 0x09u, 0x20u, 0x2bu, 0x61u, 0xf9u, 0xe7u,
- 0x0du, 0x48u, 0x0eu, 0x49u, 0x09u, 0x1au, 0xc9u, 0x10u, 0x01u, 0x91u, 0xd9u, 0xe7u, 0x18u, 0x01u, 0x00u, 0x0fu,
- 0xffu, 0xf7u, 0xb2u, 0xffu, 0x28u, 0x61u, 0x43u, 0x1eu, 0x98u, 0x41u, 0x08u, 0x23u, 0x40u, 0x42u, 0x98u, 0x43u,
- 0x09u, 0x30u, 0xe7u, 0xe7u, 0x01u, 0x23u, 0xe8u, 0x64u, 0x2bu, 0x65u, 0xdcu, 0xe7u, 0x00u, 0x23u, 0x05u, 0x20u,
- 0x2bu, 0x61u, 0xdfu, 0xe7u, 0x00u, 0x00u, 0x00u, 0x00u, 0xb4u, 0x1fu, 0x00u, 0x10u, 0x8cu, 0x20u, 0x00u, 0x10u,
- 0x03u, 0x68u, 0x10u, 0xb5u, 0x04u, 0x00u, 0xdau, 0x07u, 0x05u, 0xd4u, 0x9bu, 0x07u, 0x0au, 0xd5u, 0x48u, 0x30u,
- 0x00u, 0xf0u, 0x80u, 0xfcu, 0x23u, 0x68u, 0x5au, 0x07u, 0x0au, 0xd5u, 0x1au, 0x07u, 0x0fu, 0xd5u, 0xdbu, 0x06u,
- 0x15u, 0xd5u, 0x10u, 0xbdu, 0x48u, 0x30u, 0x00u, 0xf0u, 0x71u, 0xfcu, 0x23u, 0x68u, 0x5au, 0x07u, 0xf4u, 0xd4u,
- 0x20u, 0x00u, 0xd0u, 0x30u, 0x00u, 0xf0u, 0x72u, 0xfcu, 0x23u, 0x68u, 0x1au, 0x07u, 0xefu, 0xd4u, 0x20u, 0x00u,
- 0x51u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x6eu, 0xfcu, 0x23u, 0x68u, 0xdbu, 0x06u, 0xe9u, 0xd4u, 0x20u, 0x00u,
- 0xd1u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x6au, 0xfcu, 0xe3u, 0xe7u, 0xc0u, 0x46u, 0x09u, 0x20u, 0x70u, 0x47u,
- 0x03u, 0x00u, 0x00u, 0x68u, 0x00u, 0x28u, 0x00u, 0xd0u, 0xc0u, 0x18u, 0x70u, 0x47u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u, 0x20u, 0x00u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0x73u, 0xffu, 0x00u, 0x28u,
- 0x11u, 0xd1u, 0x2bu, 0x6cu, 0x2au, 0x00u, 0x63u, 0x61u, 0x21u, 0x00u, 0x01u, 0x20u, 0x23u, 0x69u, 0x98u, 0x47u,
- 0x08u, 0x28u, 0xf0u, 0xd0u, 0x07u, 0x28u, 0x06u, 0xd1u, 0x00u, 0x20u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0xe6u, 0xffu,
- 0x28u, 0x1du, 0x00u, 0xf0u, 0x1du, 0xfcu, 0x00u, 0xf0u, 0xadu, 0xfeu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u,
- 0x47u, 0x46u, 0x80u, 0xb5u, 0xc3u, 0x68u, 0x30u, 0x4cu, 0x98u, 0x46u, 0xa5u, 0x44u, 0x83u, 0x69u, 0x04u, 0x00u,
- 0x16u, 0x00u, 0x04u, 0x31u, 0x40u, 0x22u, 0x05u, 0xa8u, 0x99u, 0x46u, 0x00u, 0xf0u, 0xddu, 0xfeu, 0x00u, 0x23u,
- 0x04u, 0x93u, 0x25u, 0xe0u, 0xf0u, 0x22u, 0x14u, 0x9bu, 0x52u, 0x00u, 0x63u, 0x61u, 0x04u, 0xa9u, 0x7cu, 0xa8u,
- 0x03u, 0x93u, 0x00u, 0xf0u, 0xd1u, 0xfeu, 0x21u, 0x00u, 0x28u, 0x00u, 0x23u, 0x69u, 0x7cu, 0xaau, 0x98u, 0x47u,
- 0x8au, 0x9bu, 0x05u, 0x00u, 0x03u, 0x93u, 0x15u, 0x93u, 0x4bu, 0x46u, 0x01u, 0x93u, 0x04u, 0xabu, 0x00u, 0x93u,
- 0x22u, 0x00u, 0x23u, 0x00u, 0x31u, 0x00u, 0x01u, 0x20u, 0xc0u, 0x47u, 0x00u, 0x28u, 0x22u, 0xd1u, 0xf0u, 0x22u,
- 0x7cu, 0xa9u, 0x52u, 0x00u, 0x04u, 0xa8u, 0x00u, 0xf0u, 0xb7u, 0xfeu, 0x00u, 0x26u, 0x08u, 0x2du, 0x22u, 0xd1u,
- 0x14u, 0x9bu, 0x20u, 0x00u, 0x19u, 0x00u, 0x03u, 0x93u, 0xffu, 0xf7u, 0x1cu, 0xffu, 0x09u, 0x36u, 0x07u, 0x00u,
- 0xf5u, 0xb2u, 0x00u, 0x28u, 0xceu, 0xd0u, 0x12u, 0x9bu, 0x10u, 0x21u, 0x03u, 0x93u, 0x15u, 0x93u, 0x4bu, 0x46u,
- 0x01u, 0x93u, 0x04u, 0xabu, 0x00u, 0x93u, 0x22u, 0x00u, 0x23u, 0x00u, 0x01u, 0x20u, 0x29u, 0x43u, 0xc0u, 0x47u,
- 0x00u, 0x28u, 0x00u, 0xd0u, 0x09u, 0x27u, 0x38u, 0x00u, 0xf5u, 0x23u, 0x9bu, 0x00u, 0x9du, 0x44u, 0xc0u, 0xbcu,
- 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0x07u, 0x2du, 0xf4u, 0xd1u, 0x30u, 0x00u, 0x14u, 0x99u, 0xffu, 0xf7u,
- 0x7du, 0xffu, 0x05u, 0xa8u, 0x00u, 0xf0u, 0xb4u, 0xfbu, 0x2cu, 0xfcu, 0xffu, 0xffu, 0x40u, 0x6cu, 0x70u, 0x47u,
- 0x70u, 0xb5u, 0xcbu, 0x6bu, 0xfau, 0xb0u, 0x0bu, 0x64u, 0x05u, 0x00u, 0x0eu, 0x00u, 0x40u, 0x22u, 0x04u, 0x31u,
- 0x03u, 0xa8u, 0x00u, 0xf0u, 0x79u, 0xfeu, 0x01u, 0x23u, 0x5bu, 0x42u, 0x02u, 0x93u, 0x06u, 0xe0u, 0x29u, 0x00u,
- 0x2bu, 0x69u, 0x02u, 0xaau, 0x98u, 0x47u, 0x04u, 0x00u, 0x08u, 0x28u, 0x0au, 0xd1u, 0x12u, 0x9bu, 0x28u, 0x00u,
- 0x19u, 0x00u, 0x01u, 0x93u, 0xffu, 0xf7u, 0xd6u, 0xfeu, 0x00u, 0x28u, 0xf0u, 0xd0u, 0x09u, 0x20u, 0x7au, 0xb0u,
- 0x70u, 0xbdu, 0x02u, 0xa8u, 0xffu, 0xf7u, 0x1cu, 0xffu, 0x06u, 0x2cu, 0xf7u, 0xd1u, 0x31u, 0x00u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0x4eu, 0xffu, 0x10u, 0xb5u, 0x82u, 0x61u, 0xdau, 0x6bu, 0xc1u, 0x60u, 0x1au, 0x64u, 0x19u, 0x00u,
- 0x00u, 0x22u, 0xffu, 0xf7u, 0x63u, 0xffu, 0x10u, 0xbdu, 0x43u, 0x69u, 0x70u, 0xb5u, 0x0bu, 0x64u, 0xc3u, 0x68u,
- 0x04u, 0x00u, 0x0du, 0x00u, 0x00u, 0x2bu, 0x13u, 0xd1u, 0x0au, 0x00u, 0x23u, 0x69u, 0x01u, 0x00u, 0x02u, 0x20u,
- 0x98u, 0x47u, 0x07u, 0x28u, 0x05u, 0xd0u, 0x08u, 0x28u, 0x0fu, 0xd1u, 0x29u, 0x00u, 0x20u, 0x00u, 0xffu, 0xf7u,
- 0x2fu, 0xffu, 0x00u, 0x20u, 0x29u, 0x6cu, 0xffu, 0xf7u, 0x29u, 0xffu, 0x28u, 0x1du, 0x00u, 0xf0u, 0x60u, 0xfbu,
- 0x01u, 0x22u, 0xffu, 0xf7u, 0x43u, 0xffu, 0x00u, 0xf0u, 0xedu, 0xfdu, 0x00u, 0xf0u, 0xebu, 0xfdu, 0xc0u, 0x46u,
- 0xc3u, 0x68u, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x05u, 0xd0u, 0xcbu, 0x6bu, 0x00u, 0x22u, 0x0bu, 0x64u, 0xffu, 0xf7u,
- 0x35u, 0xffu, 0x10u, 0xbdu, 0xffu, 0xf7u, 0x9cu, 0xffu, 0xfbu, 0xe7u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x83u, 0x68u, 0x01u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x2bu, 0x01u, 0xd0u, 0x01u, 0x20u, 0x98u, 0x47u, 0x10u, 0xbdu,
- 0x01u, 0x29u, 0x15u, 0xd0u, 0x0au, 0xd8u, 0x00u, 0x2bu, 0x10u, 0xd1u, 0x0fu, 0x2au, 0x0eu, 0xd8u, 0x92u, 0x00u,
- 0x82u, 0x18u, 0x52u, 0x68u, 0x00u, 0x9bu, 0x00u, 0x20u, 0x1au, 0x60u, 0x06u, 0xe0u, 0x01u, 0x20u, 0x03u, 0x39u,
- 0xc9u, 0xb2u, 0x88u, 0x42u, 0x80u, 0x41u, 0x40u, 0x42u, 0x01u, 0x30u, 0x70u, 0x47u, 0x02u, 0x20u, 0xfcu, 0xe7u,
- 0x01u, 0x20u, 0xfau, 0xe7u, 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x0au, 0x00u, 0x00u, 0x93u, 0x00u, 0x21u,
- 0x00u, 0x23u, 0xffu, 0xf7u, 0xddu, 0xffu, 0x03u, 0x98u, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x01u, 0x29u, 0x15u, 0xd0u,
- 0x0au, 0xd8u, 0x00u, 0x2bu, 0x10u, 0xd1u, 0x0fu, 0x2au, 0x0eu, 0xd8u, 0x00u, 0x9bu, 0x92u, 0x00u, 0x1bu, 0x68u,
- 0x82u, 0x18u, 0x53u, 0x60u, 0x00u, 0x20u, 0x06u, 0xe0u, 0x01u, 0x20u, 0x03u, 0x39u, 0xc9u, 0xb2u, 0x88u, 0x42u,
- 0x80u, 0x41u, 0x40u, 0x42u, 0x01u, 0x30u, 0x70u, 0x47u, 0x02u, 0x20u, 0xfcu, 0xe7u, 0x01u, 0x20u, 0xfau, 0xe7u,
- 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x03u, 0x92u, 0x00u, 0x93u, 0x0au, 0x00u, 0x00u, 0x23u, 0x00u, 0x21u,
- 0xffu, 0xf7u, 0xdcu, 0xffu, 0x05u, 0xb0u, 0x00u, 0xbdu, 0x70u, 0xb5u, 0x1au, 0x4cu, 0xd3u, 0x6bu, 0xa5u, 0x44u,
- 0x13u, 0x64u, 0x05u, 0x00u, 0x0cu, 0x00u, 0x19u, 0xa8u, 0x11u, 0x1du, 0x40u, 0x22u, 0x00u, 0xf0u, 0xbcu, 0xfdu,
- 0x01u, 0x23u, 0x5bu, 0x42u, 0x18u, 0x93u, 0x14u, 0xe0u, 0x0cu, 0x21u, 0x18u, 0xa8u, 0x02u, 0xaau, 0xffu, 0xf7u,
- 0xdfu, 0xffu, 0x21u, 0x00u, 0x18u, 0xa8u, 0xa8u, 0x47u, 0x00u, 0x28u, 0x12u, 0xd1u, 0x06u, 0x9bu, 0x18u, 0xaau,
- 0x02u, 0xa9u, 0x08u, 0x30u, 0x01u, 0x93u, 0x98u, 0x47u, 0x06u, 0x00u, 0x05u, 0x28u, 0x0au, 0xd0u, 0x09u, 0x28u,
- 0x07u, 0xd0u, 0x28u, 0x9bu, 0x02u, 0xa8u, 0x19u, 0x00u, 0x01u, 0x93u, 0xffu, 0xf7u, 0x0bu, 0xfeu, 0x00u, 0x28u,
- 0xe2u, 0xd0u, 0x09u, 0x26u, 0x18u, 0xa8u, 0xffu, 0xf7u, 0x53u, 0xfeu, 0x30u, 0x00u, 0x90u, 0x23u, 0x9bu, 0x00u,
- 0x9du, 0x44u, 0x70u, 0xbdu, 0xc0u, 0xfdu, 0xffu, 0xffu, 0xf0u, 0xb5u, 0x57u, 0x46u, 0x92u, 0x46u, 0x03u, 0x22u,
- 0x45u, 0x46u, 0x4eu, 0x46u, 0xdeu, 0x46u, 0x99u, 0x46u, 0x13u, 0x00u, 0xe0u, 0xb5u, 0x88u, 0x46u, 0xcdu, 0x6cu,
- 0x49u, 0x46u, 0x89u, 0xb0u, 0x03u, 0x40u, 0x00u, 0x93u, 0x08u, 0xcdu, 0x06u, 0x95u, 0x00u, 0x29u, 0x00u, 0xd1u,
- 0x80u, 0xe0u, 0x1au, 0x0cu, 0x1bu, 0x04u, 0x05u, 0x93u, 0x02u, 0x23u, 0x04u, 0xa9u, 0x0bu, 0x73u, 0xfdu, 0x33u,
- 0x13u, 0x40u, 0x9bu, 0x00u, 0x4au, 0x73u, 0xedu, 0x18u, 0x00u, 0x9bu, 0x02u, 0x2bu, 0x01u, 0xd1u, 0x43u, 0x46u,
- 0x9du, 0x6bu, 0x43u, 0x46u, 0x1bu, 0x6du, 0xdbu, 0x07u, 0x0fu, 0xd5u, 0x50u, 0x46u, 0x05u, 0xa9u, 0x00u, 0xf0u,
- 0x5bu, 0xfbu, 0x00u, 0x28u, 0x01u, 0xd1u, 0x08u, 0x20u, 0x00u, 0xe0u, 0x09u, 0x20u, 0x09u, 0xb0u, 0xf0u, 0xbcu,
- 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u, 0xf0u, 0xbdu, 0x2fu, 0x68u, 0x00u, 0x2fu, 0xecu, 0xd0u,
- 0x08u, 0x23u, 0x03u, 0x40u, 0x02u, 0x93u, 0x00u, 0x23u, 0x01u, 0x93u, 0x01u, 0x33u, 0x54u, 0x46u, 0x9bu, 0x46u,
- 0x46u, 0x46u, 0xbau, 0x46u, 0x4bu, 0x46u, 0x02u, 0x2bu, 0x49u, 0xd0u, 0x2bu, 0x88u, 0x6fu, 0x88u, 0x9au, 0x46u,
- 0x04u, 0x35u, 0x5au, 0x46u, 0x3bu, 0x00u, 0x93u, 0x43u, 0xb2u, 0x6cu, 0x0fu, 0x21u, 0x90u, 0x46u, 0x20u, 0x00u,
- 0x98u, 0x44u, 0xffu, 0xf7u, 0x3fu, 0xffu, 0x00u, 0x23u, 0x80u, 0x45u, 0x06u, 0xd8u, 0x53u, 0x46u, 0x5au, 0x46u,
- 0x93u, 0x43u, 0x43u, 0x44u, 0x98u, 0x42u, 0x9bu, 0x41u, 0x5bu, 0x42u, 0x02u, 0x22u, 0x7fu, 0x00u, 0x17u, 0x40u,
- 0x59u, 0x46u, 0x52u, 0x46u, 0x0au, 0x40u, 0x17u, 0x43u, 0x01u, 0x2fu, 0x30u, 0xd0u, 0x02u, 0x2fu, 0x4cu, 0xd0u,
- 0x00u, 0x2fu, 0xc2u, 0xd1u, 0x00u, 0x9au, 0x00u, 0x2au, 0x02u, 0xd0u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x9bu, 0xe0u,
- 0x04u, 0x35u, 0x2bu, 0x68u, 0x9au, 0x46u, 0x00u, 0x2bu, 0xccu, 0xd1u, 0x20u, 0x00u, 0x05u, 0xa9u, 0xa2u, 0x46u,
- 0x00u, 0xf0u, 0x0au, 0xfbu, 0x00u, 0x28u, 0xb0u, 0xd1u, 0x01u, 0x9bu, 0x00u, 0x2bu, 0xabu, 0xd0u, 0x0fu, 0x21u,
- 0x50u, 0x46u, 0xffu, 0xf7u, 0x0fu, 0xffu, 0x0eu, 0x21u, 0x02u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x30u, 0xffu,
- 0x50u, 0x46u, 0x0fu, 0x21u, 0x72u, 0x4au, 0xffu, 0xf7u, 0x2bu, 0xffu, 0x07u, 0x20u, 0x9eu, 0xe7u, 0x6fu, 0x68u,
- 0x08u, 0x35u, 0xb6u, 0xe7u, 0x1bu, 0x02u, 0x05u, 0x93u, 0x04u, 0xabu, 0x9au, 0x81u, 0x84u, 0xe7u, 0x00u, 0x9au,
- 0x00u, 0x2au, 0x49u, 0xd1u, 0x00u, 0x2bu, 0x16u, 0xd0u, 0x2bu, 0x68u, 0xdfu, 0x0fu, 0x6bu, 0x68u, 0x9au, 0x1cu,
- 0x00u, 0xd1u, 0x8au, 0xe7u, 0x32u, 0x00u, 0x58u, 0x32u, 0x04u, 0x92u, 0x01u, 0x33u, 0x00u, 0xd1u, 0xb6u, 0xe0u,
- 0x28u, 0x1du, 0xffu, 0xf7u, 0xcdu, 0xfdu, 0x3au, 0x00u, 0x01u, 0x00u, 0x04u, 0xabu, 0x30u, 0x00u, 0x00u, 0xe0u,
- 0x00u, 0xbfu, 0x00u, 0x28u, 0x6cu, 0xd1u, 0x08u, 0x35u, 0xbbu, 0xe7u, 0x2au, 0x68u, 0x00u, 0x99u, 0x57u, 0x00u,
- 0x7fu, 0x08u, 0x00u, 0x29u, 0x0du, 0xd1u, 0x00u, 0x2bu, 0x04u, 0xd0u, 0x02u, 0x9bu, 0x00u, 0x2bu, 0x72u, 0xd0u,
- 0x00u, 0x2fu, 0x3cu, 0xd0u, 0x00u, 0x2au, 0x00u, 0xdau, 0x04u, 0x35u, 0x01u, 0x37u, 0xbfu, 0x00u, 0xedu, 0x19u,
- 0xa7u, 0xe7u, 0x33u, 0x6au, 0x0du, 0x21u, 0x20u, 0x00u, 0x98u, 0x46u, 0xffu, 0xf7u, 0xc3u, 0xfeu, 0x80u, 0x45u,
- 0x01u, 0xd0u, 0x2au, 0x68u, 0xeeu, 0xe7u, 0xb3u, 0x6au, 0x9du, 0x42u, 0xfau, 0xd1u, 0x00u, 0x23u, 0xf3u, 0x62u,
- 0x04u, 0x33u, 0x33u, 0x63u, 0x2bu, 0x1du, 0xb7u, 0x62u, 0x73u, 0x63u, 0x2bu, 0x68u, 0x00u, 0x2bu, 0x00u, 0xdau,
- 0x87u, 0xe0u, 0x01u, 0x23u, 0x01u, 0x93u, 0xe0u, 0xe7u, 0x0du, 0x21u, 0x20u, 0x00u, 0x37u, 0x6au, 0xffu, 0xf7u,
- 0xa9u, 0xfeu, 0x87u, 0x42u, 0xc7u, 0xd1u, 0xb3u, 0x6au, 0x9du, 0x42u, 0xc4u, 0xd1u, 0xb0u, 0x46u, 0xa2u, 0x46u,
- 0x28u, 0x00u, 0xffu, 0xf7u, 0xadu, 0xfcu, 0x0fu, 0x21u, 0x02u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0xc0u, 0xfeu,
- 0x50u, 0x46u, 0x42u, 0x46u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xbbu, 0xfeu, 0x07u, 0x20u, 0x2eu, 0xe7u, 0xb0u, 0x46u,
- 0xa2u, 0x46u, 0x0du, 0x21u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x8du, 0xfeu, 0x43u, 0x46u, 0x04u, 0x9au, 0x18u, 0x62u,
- 0x5au, 0x62u, 0x06u, 0x20u, 0x9du, 0x62u, 0x21u, 0xe7u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x91u, 0xfcu, 0x04u, 0x35u,
- 0xa2u, 0x46u, 0xb5u, 0x63u, 0x04u, 0x00u, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x00u, 0x28u, 0x00u, 0xd1u,
- 0x13u, 0xe7u, 0x50u, 0x46u, 0x22u, 0x00u, 0x0fu, 0x21u, 0xffu, 0xf7u, 0x9au, 0xfeu, 0x07u, 0x20u, 0x0du, 0xe7u,
- 0xa2u, 0x46u, 0x0du, 0x21u, 0x04u, 0x00u, 0x50u, 0x46u, 0xffu, 0xf7u, 0x6cu, 0xfeu, 0xb0u, 0x46u, 0x33u, 0x00u,
- 0x30u, 0x62u, 0x02u, 0x2cu, 0x39u, 0xd1u, 0x04u, 0x9au, 0x2cu, 0x33u, 0xf2u, 0x62u, 0x73u, 0x62u, 0x43u, 0x46u,
- 0x06u, 0x20u, 0x9du, 0x62u, 0xfau, 0xe6u, 0x2bu, 0x1du, 0x9au, 0x46u, 0x00u, 0x23u, 0x98u, 0x46u, 0x58u, 0x33u,
- 0x9cu, 0x46u, 0x21u, 0x00u, 0x4au, 0x46u, 0xb4u, 0x44u, 0x54u, 0x46u, 0xa9u, 0x46u, 0x8au, 0x46u, 0x3du, 0x00u,
- 0x03u, 0x92u, 0x47u, 0x46u, 0xe0u, 0x46u, 0x0eu, 0xe0u, 0x43u, 0x46u, 0x20u, 0x00u, 0x04u, 0x93u, 0xffu, 0xf7u,
- 0x2fu, 0xfdu, 0x00u, 0x22u, 0x01u, 0x00u, 0x04u, 0xabu, 0x30u, 0x00u, 0x00u, 0xe0u, 0x00u, 0xbfu, 0x01u, 0x37u,
- 0x04u, 0x34u, 0x00u, 0x28u, 0x04u, 0xd1u, 0xafu, 0x42u, 0xeeu, 0xd1u, 0x4du, 0x46u, 0xb0u, 0x46u, 0xa8u, 0xe7u,
- 0x2fu, 0x00u, 0x4du, 0x46u, 0x03u, 0x9bu, 0x54u, 0x46u, 0x99u, 0x46u, 0x2au, 0x68u, 0x62u, 0xe7u, 0x0du, 0x21u,
- 0x20u, 0x00u, 0xffu, 0xf7u, 0x2fu, 0xfeu, 0xb0u, 0x46u, 0x30u, 0x62u, 0x43u, 0x46u, 0x04u, 0x9au, 0x5au, 0x62u,
- 0xc5u, 0xe7u, 0x78u, 0x1cu, 0x80u, 0x00u, 0xb0u, 0x46u, 0xa2u, 0x46u, 0x28u, 0x18u, 0x81u, 0xe7u, 0xc0u, 0x46u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x23u, 0xffu, 0xf7u, 0x86u, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x10u, 0xb5u, 0x01u, 0x23u, 0xffu, 0xf7u, 0x80u, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0x02u, 0x23u,
- 0xffu, 0xf7u, 0x7au, 0xfeu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0xf0u, 0xb5u, 0xceu, 0x46u, 0x47u, 0x46u, 0x80u, 0xb5u,
- 0x05u, 0x00u, 0x14u, 0x00u, 0x1eu, 0x00u, 0xc3u, 0xb0u, 0x03u, 0x29u, 0x44u, 0xd0u, 0x20u, 0xd8u, 0x00u, 0x29u,
- 0x49u, 0xd0u, 0x01u, 0x29u, 0x41u, 0xd1u, 0x13u, 0x0cu, 0x14u, 0x04u, 0x98u, 0x46u, 0x23u, 0x0cu, 0x99u, 0x46u,
- 0x01u, 0x2eu, 0x00u, 0xd1u, 0x7au, 0xe0u, 0x05u, 0x2eu, 0x37u, 0xd1u, 0x44u, 0x46u, 0x4cu, 0x44u, 0x20u, 0x2cu,
- 0x33u, 0xd8u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0x00u, 0xd8u, 0xb5u, 0xe0u, 0x4cu, 0x46u, 0x00u, 0x2cu, 0x00u, 0xd0u,
- 0xc2u, 0xe0u, 0x4au, 0x46u, 0xa9u, 0x6bu, 0x20u, 0xafu, 0x00u, 0x2au, 0x22u, 0xd0u, 0x00u, 0x24u, 0x7fu, 0xe0u,
- 0x04u, 0x29u, 0x22u, 0xd1u, 0x00u, 0x2bu, 0x20u, 0xd1u, 0x10u, 0x2au, 0x1eu, 0xd8u, 0x10u, 0x22u, 0x03u, 0x68u,
- 0x1au, 0x42u, 0x00u, 0xd0u, 0xc7u, 0xe0u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x21u, 0xf9u, 0x01u, 0x26u,
- 0x39u, 0x00u, 0x00u, 0x23u, 0xaau, 0x6bu, 0x30u, 0x00u, 0x98u, 0x40u, 0x04u, 0x42u, 0x01u, 0xd0u, 0x01u, 0xcau,
- 0x08u, 0x60u, 0x01u, 0x33u, 0x04u, 0x31u, 0x04u, 0x2bu, 0xf5u, 0xd1u, 0x38u, 0x00u, 0xaau, 0x63u, 0x00u, 0xf0u,
- 0x0du, 0xf9u, 0x00u, 0x20u, 0x02u, 0xe0u, 0x03u, 0x2bu, 0x1cu, 0xd0u, 0x02u, 0x20u, 0x43u, 0xb0u, 0xc0u, 0xbcu,
- 0xb9u, 0x46u, 0xb0u, 0x46u, 0xf0u, 0xbdu, 0x00u, 0x2bu, 0xf7u, 0xd1u, 0x00u, 0x23u, 0x01u, 0x27u, 0x16u, 0x04u,
- 0x82u, 0x6bu, 0x36u, 0x0cu, 0x01u, 0x1du, 0x38u, 0x00u, 0x98u, 0x40u, 0x06u, 0x42u, 0x01u, 0xd0u, 0x01u, 0xcau,
- 0x08u, 0x60u, 0x01u, 0x33u, 0x04u, 0x31u, 0x10u, 0x2bu, 0xf5u, 0xd1u, 0x00u, 0x20u, 0xa3u, 0x04u, 0xe5u, 0xd4u,
- 0xaau, 0x63u, 0xe3u, 0xe7u, 0x14u, 0x04u, 0x16u, 0x0cu, 0x24u, 0x0cu, 0x33u, 0x19u, 0x10u, 0x2bu, 0xdcu, 0xd8u,
- 0x08u, 0x22u, 0x03u, 0x68u, 0x1au, 0x42u, 0x00u, 0xd0u, 0x8cu, 0xe0u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u,
- 0xdbu, 0xf8u, 0xf6u, 0x00u, 0xabu, 0x6bu, 0x00u, 0x2cu, 0x0au, 0xd0u, 0xf6u, 0x1au, 0xe4u, 0x00u, 0x32u, 0x1fu,
- 0x1cu, 0x19u, 0xbau, 0x18u, 0x19u, 0x00u, 0x09u, 0x68u, 0x04u, 0x33u, 0x99u, 0x50u, 0xa3u, 0x42u, 0xf9u, 0xd1u,
- 0x38u, 0x00u, 0xabu, 0x63u, 0x00u, 0xf0u, 0xc6u, 0xf8u, 0x00u, 0x20u, 0xbfu, 0xe7u, 0x43u, 0x46u, 0x4bu, 0x44u,
- 0x10u, 0x2bu, 0xbau, 0xd8u, 0x43u, 0x46u, 0x0fu, 0x2bu, 0xb7u, 0xd8u, 0x2bu, 0x68u, 0x1eu, 0x42u, 0x06u, 0xd0u,
- 0x03u, 0x22u, 0x28u, 0x00u, 0x93u, 0x43u, 0x2bu, 0x60u, 0x48u, 0x30u, 0x00u, 0xf0u, 0xa9u, 0xf8u, 0x20u, 0xafu,
- 0x38u, 0x00u, 0x00u, 0xf0u, 0xa5u, 0xf8u, 0x4au, 0x46u, 0x00u, 0x24u, 0xa9u, 0x6bu, 0x00u, 0x2au, 0x61u, 0xd0u,
- 0x43u, 0x46u, 0xdbu, 0x00u, 0xffu, 0x18u, 0x00u, 0x23u, 0xd2u, 0x00u, 0xc8u, 0x58u, 0xf8u, 0x50u, 0x04u, 0x33u,
- 0x9au, 0x42u, 0xfau, 0xd1u, 0x89u, 0x18u, 0x00u, 0x2cu, 0x0fu, 0xd0u, 0x6fu, 0x46u, 0x40u, 0x46u, 0x10u, 0x28u,
- 0x00u, 0xd2u, 0x10u, 0x20u, 0x00u, 0x23u, 0x10u, 0x38u, 0xc0u, 0x00u, 0x38u, 0x18u, 0xe2u, 0x00u, 0xcfu, 0x58u,
- 0xc7u, 0x50u, 0x04u, 0x33u, 0x93u, 0x42u, 0xfau, 0xd1u, 0xc9u, 0x18u, 0x01u, 0x2eu, 0x41u, 0xd0u, 0x43u, 0x46u,
- 0xa9u, 0x63u, 0x0fu, 0x2bu, 0x45u, 0xd9u, 0x00u, 0x2cu, 0x00u, 0xd1u, 0x7au, 0xe7u, 0x68u, 0x46u, 0x00u, 0xf0u,
- 0x7du, 0xf8u, 0x00u, 0x20u, 0x7au, 0xe7u, 0x10u, 0x2cu, 0x46u, 0xd9u, 0x10u, 0x3cu, 0x01u, 0x22u, 0x2bu, 0x68u,
- 0x1au, 0x42u, 0x07u, 0xd0u, 0x93u, 0x43u, 0x02u, 0x22u, 0x28u, 0x00u, 0x13u, 0x43u, 0x2bu, 0x60u, 0x48u, 0x30u,
- 0x00u, 0xf0u, 0x6au, 0xf8u, 0x00u, 0x2cu, 0x39u, 0xd0u, 0x04u, 0x22u, 0x2bu, 0x68u, 0x1au, 0x42u, 0x2cu, 0xd1u,
- 0x43u, 0x46u, 0x0fu, 0x2bu, 0x03u, 0xd8u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x5du, 0xf8u, 0x6fu, 0x46u,
- 0x38u, 0x00u, 0x00u, 0xf0u, 0x5du, 0xf8u, 0x10u, 0x22u, 0x43u, 0x46u, 0xa9u, 0x6bu, 0xd2u, 0x1au, 0x00u, 0x2au,
- 0xbcu, 0xddu, 0x20u, 0xafu, 0xacu, 0xe7u, 0x93u, 0x43u, 0x03u, 0x60u, 0xd1u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u,
- 0x57u, 0xf8u, 0x30u, 0xe7u, 0x93u, 0x43u, 0x03u, 0x60u, 0x51u, 0x30u, 0xffu, 0x30u, 0x00u, 0xf0u, 0x4cu, 0xf8u,
- 0x6bu, 0xe7u, 0x20u, 0xafu, 0x04u, 0x31u, 0x38u, 0x00u, 0xa9u, 0x63u, 0x00u, 0xf0u, 0x37u, 0xf8u, 0x00u, 0x20u,
- 0x3cu, 0xe7u, 0x20u, 0xa8u, 0x00u, 0xf0u, 0x36u, 0xf8u, 0xb5u, 0xe7u, 0x28u, 0x00u, 0x93u, 0x43u, 0x2bu, 0x60u,
- 0xd0u, 0x30u, 0x00u, 0xf0u, 0x35u, 0xf8u, 0xcbu, 0xe7u, 0x00u, 0x24u, 0xb7u, 0xe7u, 0x43u, 0x46u, 0x0fu, 0x2bu,
- 0x00u, 0xd9u, 0xfeu, 0xe6u, 0x20u, 0xafu, 0x38u, 0x00u, 0x00u, 0xf0u, 0x26u, 0xf8u, 0x4au, 0x46u, 0xa9u, 0x6bu,
- 0x00u, 0x2au, 0x00u, 0xd0u, 0xfau, 0xe6u, 0x38u, 0x00u, 0x00u, 0xf0u, 0x1cu, 0xf8u, 0x00u, 0x20u, 0x1du, 0xe7u,
- 0x01u, 0x00u, 0x34u, 0x31u, 0x38u, 0xc9u, 0x04u, 0x3bu, 0x9cu, 0x46u, 0x1du, 0x60u, 0xa6u, 0x46u, 0x01u, 0x00u,
- 0x20u, 0x31u, 0x3cu, 0xc9u, 0x90u, 0x46u, 0x99u, 0x46u, 0xa2u, 0x46u, 0xabu, 0x46u, 0x01u, 0x00u, 0x08u, 0x31u,
- 0xfcu, 0xc9u, 0x41u, 0x68u, 0x00u, 0x68u, 0xe5u, 0x46u, 0x00u, 0xbdu, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x70u, 0x47u, 0xc0u, 0x46u,
- 0x70u, 0x47u, 0xc0u, 0x46u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u,
- 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u,
- 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x11u, 0xfcu, 0x10u, 0x9bu,
- 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u,
- 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u,
- 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x2du, 0xfcu, 0x10u, 0x9bu,
- 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u,
- 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u,
- 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x39u, 0xfcu, 0x10u, 0x9bu,
- 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u,
- 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u,
- 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xabu, 0xffu, 0xf7u, 0xf3u, 0xfbu, 0x10u, 0x9bu,
- 0x12u, 0xb0u, 0x18u, 0x47u, 0x01u, 0xb4u, 0x01u, 0xa8u, 0x01u, 0xb5u, 0x85u, 0xb0u, 0xffu, 0xb4u, 0x08u, 0xa8u,
- 0x41u, 0x46u, 0x4au, 0x46u, 0x53u, 0x46u, 0x5cu, 0x46u, 0x65u, 0x46u, 0x3eu, 0xc0u, 0x01u, 0xa8u, 0x3eu, 0xc8u,
- 0x0fu, 0x98u, 0x00u, 0x90u, 0x00u, 0x23u, 0x0cu, 0xb4u, 0x01u, 0xaau, 0xffu, 0xf7u, 0x6du, 0xfcu, 0x10u, 0x9bu,
- 0x12u, 0xb0u, 0x18u, 0x47u, 0x02u, 0x7au, 0x03u, 0x00u, 0x00u, 0x2au, 0x0bu, 0xd1u, 0x42u, 0x7au, 0x00u, 0x2au,
- 0x0fu, 0xd0u, 0x01u, 0x3au, 0x42u, 0x72u, 0x42u, 0x68u, 0x11u, 0x1du, 0x41u, 0x60u, 0x03u, 0x21u, 0x12u, 0x68u,
- 0x01u, 0x72u, 0x02u, 0xe0u, 0x01u, 0x3au, 0x02u, 0x72u, 0x02u, 0x68u, 0x10u, 0x0eu, 0x12u, 0x02u, 0x1au, 0x60u,
- 0x70u, 0x47u, 0xb0u, 0x20u, 0xfcu, 0xe7u, 0xc0u, 0x46u, 0x00u, 0xb5u, 0x85u, 0xb0u, 0x03u, 0xabu, 0x00u, 0x93u,
- 0x0cu, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0xffu, 0xf7u, 0xfbu, 0xfbu, 0x03u, 0x98u, 0x05u, 0xb0u, 0x00u, 0xbdu,
- 0x10u, 0xb5u, 0xffu, 0xf7u, 0xf1u, 0xffu, 0x10u, 0xbdu, 0xf0u, 0xb5u, 0x4eu, 0x46u, 0x45u, 0x46u, 0x57u, 0x46u,
- 0xdeu, 0x46u, 0x00u, 0x23u, 0xe0u, 0xb5u, 0x87u, 0xb0u, 0x03u, 0x93u, 0x0fu, 0x33u, 0x98u, 0x46u, 0x08u, 0x3bu,
- 0x99u, 0x46u, 0x80u, 0x23u, 0x1bu, 0x03u, 0x05u, 0x00u, 0x0eu, 0x00u, 0x9au, 0x46u, 0x30u, 0x00u, 0xffu, 0xf7u,
- 0xc1u, 0xffu, 0x04u, 0x00u, 0xb0u, 0x28u, 0x00u, 0xd1u, 0xc1u, 0xe0u, 0x03u, 0x06u, 0x29u, 0xd5u, 0x03u, 0x00u,
- 0x42u, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0x80u, 0x2bu, 0x53u, 0xd0u, 0x90u, 0x2bu, 0x3du, 0xd0u, 0xa0u, 0x2bu,
- 0x6bu, 0xd0u, 0xb0u, 0x2bu, 0x00u, 0xd1u, 0x7eu, 0xe0u, 0xc0u, 0x2bu, 0x00u, 0xd1u, 0x95u, 0xe0u, 0x03u, 0x00u,
- 0x4au, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0xd0u, 0x2bu, 0x0au, 0xd1u, 0x53u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u,
- 0x1au, 0x43u, 0x05u, 0x23u, 0x01u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xc6u, 0xfdu, 0x00u, 0x28u, 0xd5u, 0xd0u,
- 0x09u, 0x24u, 0x20u, 0x00u, 0x07u, 0xb0u, 0xf0u, 0xbcu, 0xbbu, 0x46u, 0xb2u, 0x46u, 0xa9u, 0x46u, 0xa0u, 0x46u,
- 0xf0u, 0xbdu, 0xffu, 0x23u, 0x82u, 0x00u, 0x13u, 0x40u, 0x1fu, 0x1du, 0x05u, 0xabu, 0x9bu, 0x46u, 0x00u, 0x93u,
- 0x0du, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xa2u, 0xfbu, 0x63u, 0x06u, 0x39u, 0xd4u,
- 0x05u, 0x9bu, 0x9cu, 0x46u, 0x67u, 0x44u, 0x5bu, 0x46u, 0x05u, 0x97u, 0x00u, 0x93u, 0x00u, 0x23u, 0x0du, 0x22u,
- 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xbau, 0xfbu, 0xb0u, 0xe7u, 0x83u, 0x3bu, 0x03u, 0x40u, 0x0du, 0x2bu,
- 0xd6u, 0xd0u, 0x05u, 0xafu, 0x02u, 0x40u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x97u, 0xffu, 0xf7u,
- 0x87u, 0xfbu, 0x00u, 0x23u, 0x0du, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x97u, 0xffu, 0xf7u, 0xa6u, 0xfbu,
- 0x9cu, 0xe7u, 0x04u, 0x02u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x5du, 0xffu, 0x80u, 0x27u, 0x20u, 0x43u, 0x3fu, 0x02u,
- 0xb8u, 0x42u, 0xbdu, 0xd0u, 0x04u, 0x01u, 0x00u, 0x05u, 0x02u, 0x0cu, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u,
- 0xffu, 0xf7u, 0x7au, 0xfdu, 0x00u, 0x28u, 0xb3u, 0xd1u, 0x3cu, 0x42u, 0x00u, 0xd1u, 0x86u, 0xe7u, 0x01u, 0x23u,
- 0x03u, 0x93u, 0x83u, 0xe7u, 0x05u, 0x9bu, 0xdfu, 0x1bu, 0xc5u, 0xe7u, 0xffu, 0x23u, 0x4au, 0x46u, 0x1bu, 0x01u,
- 0x19u, 0x00u, 0x82u, 0x43u, 0x11u, 0x41u, 0x0au, 0x00u, 0x1au, 0x40u, 0x03u, 0x07u, 0x02u, 0xd5u, 0x80u, 0x23u,
- 0xdbu, 0x01u, 0x1au, 0x43u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x5du, 0xfdu, 0x00u, 0x28u,
- 0x00u, 0xd1u, 0x6bu, 0xe7u, 0x94u, 0xe7u, 0xb1u, 0x28u, 0x45u, 0xd0u, 0xb2u, 0x28u, 0x00u, 0xd1u, 0x9fu, 0xe0u,
- 0xb3u, 0x28u, 0x55u, 0xd0u, 0xfcu, 0x23u, 0x03u, 0x40u, 0xb4u, 0x2bu, 0x00u, 0xd1u, 0x88u, 0xe7u, 0x4au, 0x46u,
- 0x53u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x01u, 0x21u, 0x01u, 0x23u, 0x28u, 0x00u, 0xffu, 0xf7u,
- 0x43u, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x51u, 0xe7u, 0x7au, 0xe7u, 0xc6u, 0x28u, 0x4bu, 0xd0u, 0xc7u, 0x28u,
- 0x5du, 0xd0u, 0x03u, 0x00u, 0x4au, 0x46u, 0x93u, 0x43u, 0xdbu, 0xb2u, 0xc0u, 0x2bu, 0x6cu, 0xd0u, 0xc8u, 0x28u,
- 0x71u, 0xd0u, 0xc9u, 0x28u, 0x00u, 0xd0u, 0x6bu, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x03u, 0xffu, 0xf0u, 0x23u,
- 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x58u, 0xe7u, 0x03u, 0x9bu,
- 0x00u, 0x24u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x5cu, 0xe7u, 0x05u, 0xaeu, 0x0eu, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u,
- 0x00u, 0x96u, 0xffu, 0xf7u, 0x0du, 0xfbu, 0x00u, 0x23u, 0x0fu, 0x22u, 0x00u, 0x21u, 0x28u, 0x00u, 0x00u, 0x96u,
- 0xffu, 0xf7u, 0x2cu, 0xfbu, 0x4du, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xe4u, 0xfeu, 0x02u, 0x1eu, 0x00u, 0xd1u,
- 0x46u, 0xe7u, 0x03u, 0x00u, 0x41u, 0x46u, 0x8bu, 0x43u, 0xdbu, 0xb2u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x3fu, 0xe7u,
- 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0x00u, 0xfdu, 0x00u, 0x28u, 0x00u, 0xd1u, 0x0eu, 0xe7u, 0x37u, 0xe7u,
- 0x30u, 0x00u, 0xffu, 0xf7u, 0xcfu, 0xfeu, 0xf0u, 0x23u, 0x02u, 0x03u, 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u,
- 0x02u, 0x40u, 0x01u, 0x32u, 0xa7u, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0xc4u, 0xfeu, 0xf0u, 0x23u, 0x02u, 0x03u,
- 0x1bu, 0x03u, 0x13u, 0x40u, 0x42u, 0x46u, 0x02u, 0x40u, 0x01u, 0x32u, 0x1au, 0x43u, 0x03u, 0x23u, 0x03u, 0x21u,
- 0x28u, 0x00u, 0xffu, 0xf7u, 0xe1u, 0xfcu, 0x00u, 0x28u, 0x00u, 0xd1u, 0xefu, 0xe6u, 0x18u, 0xe7u, 0x30u, 0x00u,
- 0xffu, 0xf7u, 0xb0u, 0xfeu, 0x02u, 0x1eu, 0x00u, 0xd1u, 0x12u, 0xe7u, 0x03u, 0x00u, 0x41u, 0x46u, 0x8bu, 0x43u,
- 0xdbu, 0xb2u, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x0bu, 0xe7u, 0x04u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u, 0xccu, 0xfcu,
- 0x00u, 0x28u, 0x00u, 0xd1u, 0xdau, 0xe6u, 0x03u, 0xe7u, 0x43u, 0x46u, 0xa0u, 0x22u, 0x1cu, 0x40u, 0x01u, 0x34u,
- 0x12u, 0x03u, 0x22u, 0x43u, 0xdau, 0xe7u, 0x30u, 0x00u, 0xffu, 0xf7u, 0x94u, 0xfeu, 0x43u, 0x46u, 0x02u, 0x00u,
- 0x9au, 0x43u, 0xd2u, 0xb2u, 0x10u, 0x32u, 0x18u, 0x40u, 0x12u, 0x03u, 0x01u, 0x30u, 0x02u, 0x43u, 0xe8u, 0xe6u,
- 0x05u, 0xabu, 0x00u, 0x93u, 0x9bu, 0x46u, 0x0du, 0x22u, 0x00u, 0x23u, 0x00u, 0x21u, 0x28u, 0x00u, 0xffu, 0xf7u,
- 0x9fu, 0xfau, 0x30u, 0x00u, 0xffu, 0xf7u, 0x7eu, 0xfeu, 0x03u, 0x06u, 0x1au, 0xd5u, 0x7fu, 0x27u, 0xb0u, 0x3cu,
- 0x05u, 0x9bu, 0x38u, 0x40u, 0xa0u, 0x40u, 0x9cu, 0x46u, 0x60u, 0x44u, 0x05u, 0x90u, 0x30u, 0x00u, 0x07u, 0x34u,
- 0xffu, 0xf7u, 0x70u, 0xfeu, 0x03u, 0x06u, 0xf3u, 0xd4u, 0x81u, 0x21u, 0x7fu, 0x23u, 0x89u, 0x00u, 0x8cu, 0x46u,
- 0x03u, 0x40u, 0xa3u, 0x40u, 0x05u, 0x9au, 0x62u, 0x44u, 0x9bu, 0x18u, 0x05u, 0x93u, 0x5bu, 0x46u, 0x00u, 0x93u,
- 0xe4u, 0xe6u, 0x02u, 0x24u, 0xf0u, 0xe7u, 0xc0u, 0x46u, 0x03u, 0x00u, 0x00u, 0xb5u, 0xdau, 0x6cu, 0x85u, 0xb0u,
- 0x53u, 0x68u, 0x08u, 0x00u, 0x08u, 0x32u, 0x19u, 0x02u, 0x01u, 0x91u, 0x02u, 0x92u, 0x69u, 0x46u, 0x03u, 0x22u,
- 0x1bu, 0x0eu, 0x0au, 0x73u, 0x4bu, 0x73u, 0x01u, 0xa9u, 0xffu, 0xf7u, 0x76u, 0xfeu, 0x05u, 0xb0u, 0x00u, 0xbdu,
- 0x10u, 0xb5u, 0xffu, 0xf7u, 0x6du, 0xfeu, 0x80u, 0x6cu, 0x10u, 0xbdu, 0xc0u, 0x46u, 0x10u, 0xb5u, 0xffu, 0xf7u,
- 0x67u, 0xfeu, 0xc2u, 0x6cu, 0xd0u, 0x79u, 0x02u, 0x30u, 0x80u, 0x00u, 0x10u, 0x18u, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x1cu, 0x21u, 0x01u, 0x23u, 0x1bu, 0x04u, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x0cu, 0x10u, 0x39u, 0x1bu, 0x0au,
- 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x0au, 0x08u, 0x39u, 0x1bu, 0x09u, 0x98u, 0x42u, 0x01u, 0xd3u, 0x00u, 0x09u,
- 0x04u, 0x39u, 0x02u, 0xa2u, 0x10u, 0x5cu, 0x40u, 0x18u, 0x70u, 0x47u, 0xc0u, 0x46u, 0x04u, 0x03u, 0x02u, 0x02u,
- 0x01u, 0x01u, 0x01u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0xb5u, 0x00u, 0x29u,
- 0x03u, 0xd1u, 0xffu, 0xf7u, 0xddu, 0xffu, 0x20u, 0x30u, 0x02u, 0xe0u, 0x08u, 0x00u, 0xffu, 0xf7u, 0xd8u, 0xffu,
- 0x10u, 0xbdu, 0xc0u, 0x46u, 0x06u, 0x20u, 0x10u, 0xb5u, 0x00u, 0xf0u, 0x7au, 0xf8u, 0x01u, 0x20u, 0x00u, 0xf0u,
- 0xa7u, 0xf8u, 0x00u, 0x00u, 0x08u, 0x4bu, 0x10u, 0xb5u, 0x04u, 0x00u, 0x00u, 0x2bu, 0x02u, 0xd0u, 0x00u, 0x21u,
- 0x00u, 0xe0u, 0x00u, 0xbfu, 0x05u, 0x4bu, 0x18u, 0x68u, 0x83u, 0x6au, 0x00u, 0x2bu, 0x00u, 0xd0u, 0x98u, 0x47u,
- 0x20u, 0x00u, 0x00u, 0xf0u, 0x95u, 0xf8u, 0xc0u, 0x46u, 0x00u, 0x00u, 0x00u, 0x00u, 0x7cu, 0x1fu, 0x00u, 0x10u,
- 0x70u, 0xb5u, 0x00u, 0x26u, 0x0cu, 0x4du, 0x0du, 0x4cu, 0x64u, 0x1bu, 0xa4u, 0x10u, 0xa6u, 0x42u, 0x09u, 0xd1u,
- 0x00u, 0x26u, 0x00u, 0xf0u, 0x87u, 0xf8u, 0x0au, 0x4du, 0x0au, 0x4cu, 0x64u, 0x1bu, 0xa4u, 0x10u, 0xa6u, 0x42u,
- 0x05u, 0xd1u, 0x70u, 0xbdu, 0xb3u, 0x00u, 0xebu, 0x58u, 0x98u, 0x47u, 0x01u, 0x36u, 0xeeu, 0xe7u, 0xb3u, 0x00u,
- 0xebu, 0x58u, 0x98u, 0x47u, 0x01u, 0x36u, 0xf2u, 0xe7u, 0xe4u, 0x08u, 0x00u, 0x28u, 0xe4u, 0x08u, 0x00u, 0x28u,
- 0xe4u, 0x08u, 0x00u, 0x28u, 0xe8u, 0x08u, 0x00u, 0x28u, 0x00u, 0x23u, 0x10u, 0xb5u, 0x9au, 0x42u, 0x00u, 0xd1u,
- 0x10u, 0xbdu, 0xccu, 0x5cu, 0xc4u, 0x54u, 0x01u, 0x33u, 0xf8u, 0xe7u, 0x03u, 0x00u, 0x82u, 0x18u, 0x93u, 0x42u,
- 0x00u, 0xd1u, 0x70u, 0x47u, 0x19u, 0x70u, 0x01u, 0x33u, 0xf9u, 0xe7u, 0x70u, 0xb5u, 0x04u, 0x00u, 0x0du, 0x00u,
- 0x1fu, 0x29u, 0x04u, 0xd9u, 0x16u, 0x23u, 0x03u, 0x60u, 0x01u, 0x20u, 0x40u, 0x42u, 0x70u, 0xbdu, 0x43u, 0x6cu,
- 0x00u, 0x2bu, 0x04u, 0xd0u, 0x8au, 0x00u, 0x9bu, 0x18u, 0x1au, 0x68u, 0x00u, 0x2au, 0x08u, 0xd1u, 0x20u, 0x00u,
- 0x00u, 0xf0u, 0x32u, 0xf8u, 0x2au, 0x00u, 0x01u, 0x00u, 0x20u, 0x00u, 0x00u, 0xf0u, 0x1bu, 0xf8u, 0xedu, 0xe7u,
- 0x00u, 0x20u, 0x01u, 0x2au, 0xeau, 0xd0u, 0x51u, 0x1cu, 0x03u, 0xd1u, 0x16u, 0x23u, 0x01u, 0x30u, 0x23u, 0x60u,
- 0xe4u, 0xe7u, 0x00u, 0x24u, 0x28u, 0x00u, 0x1cu, 0x60u, 0x90u, 0x47u, 0x20u, 0x00u, 0xdeu, 0xe7u, 0x00u, 0x00u,
- 0x10u, 0xb5u, 0x03u, 0x4bu, 0x01u, 0x00u, 0x18u, 0x68u, 0xffu, 0xf7u, 0xcfu, 0xffu, 0x10u, 0xbdu, 0xc0u, 0x46u,
- 0x80u, 0x08u, 0x00u, 0x28u, 0x00u, 0x23u, 0x70u, 0xb5u, 0x06u, 0x4du, 0x04u, 0x00u, 0x08u, 0x00u, 0x11u, 0x00u,
- 0x2bu, 0x60u, 0x00u, 0xf0u, 0x15u, 0xf8u, 0x43u, 0x1cu, 0x03u, 0xd1u, 0x2bu, 0x68u, 0x00u, 0x2bu, 0x00u, 0xd0u,
- 0x23u, 0x60u, 0x70u, 0xbdu, 0x5cu, 0x12u, 0x00u, 0x28u, 0x10u, 0xb5u, 0x00u, 0xf0u, 0x01u, 0xf8u, 0x10u, 0xbdu,
- 0x58u, 0x22u, 0x01u, 0x20u, 0x01u, 0x4bu, 0x40u, 0x42u, 0x1au, 0x60u, 0x70u, 0x47u, 0x5cu, 0x12u, 0x00u, 0x28u,
- 0x58u, 0x22u, 0x01u, 0x20u, 0x01u, 0x4bu, 0x40u, 0x42u, 0x1au, 0x60u, 0x70u, 0x47u, 0x5cu, 0x12u, 0x00u, 0x28u,
- 0xfeu, 0xe7u, 0xc0u, 0x46u, 0xf8u, 0xb5u, 0xc0u, 0x46u, 0xf8u, 0xbcu, 0x08u, 0xbcu, 0x9eu, 0x46u, 0x70u, 0x47u,
- 0xf8u, 0xb5u, 0xc0u, 0x46u, 0xf8u, 0xbcu, 0x08u, 0xbcu, 0x9eu, 0x46u, 0x70u, 0x47u, 0x84u, 0x08u, 0x00u, 0x28u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x74u, 0xb2u, 0x01u, 0x81u, 0xb0u, 0xabu, 0x30u, 0x80u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x80u, 0x08u, 0x01u, 0x81u, 0xb0u, 0xb0u, 0xabu, 0xf0u, 0x00u, 0x00u, 0x00u, 0x00u, 0x3fu, 0x02u, 0x01u, 0x81u,
- 0xb0u, 0xabu, 0x30u, 0x80u, 0x00u, 0x00u, 0x00u, 0x00u, 0x80u, 0x06u, 0x01u, 0x81u, 0xb0u, 0xb0u, 0xabu, 0xf0u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0xe1u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xacu, 0xe1u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xb0u, 0x80u, 0x0cu, 0xe2u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x98u, 0xefu, 0xffu, 0x7fu,
- 0xb0u, 0xa9u, 0x02u, 0x80u, 0x2cu, 0xf0u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x80u, 0xf0u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0x8cu, 0xf0u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xaau, 0x80u, 0xc0u, 0xf0u, 0xffu, 0x7fu,
- 0x94u, 0xffu, 0xffu, 0x7fu, 0x88u, 0xf1u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0x84u, 0xf1u, 0xffu, 0x7fu,
- 0xaau, 0x3fu, 0x39u, 0x80u, 0xd0u, 0xf1u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0xdcu, 0xf1u, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xaau, 0x80u, 0x1cu, 0xf2u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x30u, 0xf2u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0x2cu, 0xf2u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x34u, 0xf2u, 0xffu, 0x7fu,
- 0x01u, 0x00u, 0x00u, 0x00u, 0xc4u, 0xf2u, 0xffu, 0x7fu, 0xaau, 0x0fu, 0xb2u, 0x80u, 0x2cu, 0xf3u, 0xffu, 0x7fu,
- 0x50u, 0xffu, 0xffu, 0x7fu, 0x10u, 0xf6u, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x2cu, 0xf6u, 0xffu, 0x7fu,
- 0x4cu, 0xffu, 0xffu, 0x7fu, 0x8cu, 0xf8u, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xfcu, 0xf9u, 0xffu, 0x7fu,
- 0x00u, 0x84u, 0x04u, 0x80u, 0x0cu, 0xfau, 0xffu, 0x7fu, 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x0cu, 0xfau, 0xffu, 0x7fu,
- 0x38u, 0xffu, 0xffu, 0x7fu, 0xf4u, 0xfcu, 0xffu, 0x7fu, 0x00u, 0x84u, 0x04u, 0x80u, 0x14u, 0xfdu, 0xffu, 0x7fu,
- 0xb0u, 0xb0u, 0xa8u, 0x80u, 0x2cu, 0xfdu, 0xffu, 0x7fu, 0x01u, 0x00u, 0x00u, 0x00u, 0xa0u, 0x20u, 0x00u, 0x10u,
- 0x80u, 0x08u, 0x00u, 0x28u, 0x6cu, 0x00u, 0x00u, 0x00u, 0x0cu, 0x12u, 0x00u, 0x28u, 0x54u, 0x00u, 0x00u, 0x00u,
- 0x84u, 0x08u, 0x00u, 0x28u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
- 0x00u, 0x00u, 0x00u, 0x00u, 0xa9u, 0x00u, 0x00u, 0x10u, 0x81u, 0x00u, 0x00u, 0x10u,
-};
-#endif /* defined(CY_DEVICE_TVIIBH8M) */
diff --git a/boot/cypress/platforms/BSP/XMC7000/system/mtb_cat1cm0p.h b/boot/cypress/platforms/BSP/XMC7000/system/mtb_cat1cm0p.h
deleted file mode 100644
index 9ebe939..0000000
--- a/boot/cypress/platforms/BSP/XMC7000/system/mtb_cat1cm0p.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/***************************************************************************//**
-* \file mtb_cat1cm0p.h
-* \version 1.0
-*
-* \brief
-* Provides a macro for BSP to indicate whether a prebuilt CM0P image is in use.
-*
-********************************************************************************
-* \copyright
-* Copyright (c) (2022), Cypress Semiconductor Corporation (an Infineon company) or
-* an affiliate of Cypress Semiconductor Corporation.
-* SPDX-License-Identifier: Apache-2.0
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*******************************************************************************/
-
-#if defined(COMPONENT_CAT1A)
-#if defined(COMPONENT_CM0P_BLESS) || defined(COMPONENT_CM0P_CRYPTO) || defined(COMPONENT_CM0P_SECURE) || defined(COMPONENT_CM0P_SLEEP)
- #define CY_USING_PREBUILT_CM0P_IMAGE
-#endif /* defined(COMPONENT_CM0P_BLESS) || defined(COMPONENT_CM0P_CRYPTO) || defined(COMPONENT_CM0P_SECURE) || defined(COMPONENT_CM0P_SLEEP) */
-#elif defined(COMPONENT_CAT1C)
-#if defined(COMPONENT_XMC7x_CM0P_SLEEP) || defined(COMPONENT_XMC7xDUAL_CM0P_SLEEP)
- #define CY_USING_PREBUILT_CM0P_IMAGE
-#endif /* defined(COMPONENT_XMC7x_CM0P_SLEEP) || defined(COMPONENT_XMC7xDUAL_CM0P_SLEEP) */
-#endif /* COMPONENT_CAT1A, COMPONENT_CAT1C */
\ No newline at end of file
diff --git a/boot/cypress/platforms/CYW20829.mk b/boot/cypress/platforms/CYW20829.mk
index dcea14f..02ce47e 100644
--- a/boot/cypress/platforms/CYW20829.mk
+++ b/boot/cypress/platforms/CYW20829.mk
@@ -39,7 +39,12 @@
ifeq ($(PLATFORM), CYW20829)
DEVICE ?= CYW20829B0LKML
else ifeq ($(PLATFORM), CYW89829)
-DEVICE ?= CYW89829B0KML
+DEVICE ?= CYW89829B0232
+endif
+
+# If PSVP build is required
+ifeq ($(CYW20829_PSVP), 1)
+SERVICE_APP_PLATFORM_SUFFIX := _psvp
endif
#Led pin default config
@@ -53,12 +58,12 @@
PLATFORM_SUFFIX ?= cyw20829
# Add device name to defines
-DEFINES += $(DEVICE)
+DEFINES += -D$(DEVICE)
USE_SWAP_STATUS ?= 1
ifeq ($(USE_SWAP_STATUS), 1)
-DEFINES += USE_SWAP_STATUS=1
+DEFINES += -DUSE_SWAP_STATUS=1
endif
# Default upgrade method
@@ -73,7 +78,7 @@
FLASH_XIP_START := 0x08000000
ifeq ($(SMIF_ENC), 1)
- DEFINES += MCUBOOT_ENC_IMAGES_SMIF=1
+ DEFINES += -DMCUBOOT_ENC_IMAGES_SMIF=1
endif
###############################################################################
@@ -86,22 +91,22 @@
ifeq ($(APP_NAME), MCUBootApp)
SMIF_ENC ?= 0
-DEFINES += COMPONENT_CUSTOM_DESIGN_MODUS
+
+ifeq ($(CYW20829_PSVP), )
+DEFINES += -DCOMPONENT_CUSTOM_DESIGN_MODUS
+endif
# Platform dependend utils files
-PLATFORM_APP_SOURCES := $(PRJ_DIR)/platforms/utils/$(FAMILY)/cyw_platform_utils.c
-PLATFORM_INCLUDE_DIRS_UTILS := $(PRJ_DIR)/platforms/utils/$(FAMILY)
+C_FILES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/platform_utils.c
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/utils/$(FAMILY)
# mbedTLS hardware acceleration settings
ifeq ($(USE_CRYPTO_HW), 1)
# cy-mbedtls-acceleration related include directories
-INCLUDE_DIRS_MBEDTLS_CRYPTOLITE := $(PRJ_DIR)/platforms/crypto/$(FAMILY)/mbedtls_Cryptolite
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/crypto/$(FAMILY)/mbedtls_Cryptolite
# Collect source files for MbedTLS acceleration
-SOURCES_MBEDTLS_CRYPTOLITE := $(wildcard $(PRJ_DIR)/platforms/crypto/$(FAMILY)/mbedtls_Cryptolite/*.c)
+C_FILES += $(wildcard $(PRJ_DIR)/platforms/crypto/$(FAMILY)/mbedtls_Cryptolite/*.c)
#
-INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_MBEDTLS_CRYPTOLITE))
-# Collected source files for libraries
-SOURCES_LIBS += $(SOURCES_MBEDTLS_CRYPTOLITE)
endif
###############################################################################
@@ -115,6 +120,7 @@
APPTYPE ?= flash
SIGN_TYPE ?= bootrom_next_app
SMIF_CRYPTO_CONFIG ?= NONE
+MCUBOOT_DEPENDENCY_CHECK ?= 1
ifeq ($(LCS), NORMAL_NO_SECURE)
APP_DEFAULT_POLICY ?= $(PRJ_DIR)/policy/policy_no_secure.json
@@ -210,7 +216,7 @@
PLATFORM_DEFAULT_RAM_START ?= 0x2000C000
PLATFORM_DEFAULT_RAM_SIZE ?= 0x10000
-PLATFORM_DEFINES_APP += -DUSER_APP_START_OFF=0x20000
+DEFINES += -DUSER_APP_START_OFF=0x20000
PLATFORM_DEFAULT_IMG_VER_ARG ?= 1.0.0
@@ -223,6 +229,10 @@
PLATFORM_SIGN_ARGS += --app-addr=$(PLATFORM_USER_APP_START)
endif
+pre_build:
+ $(info [PRE_BUILD] - Generating linker script for application $(CUR_APP_PATH)/linker/$(APP_NAME).ld)
+ @$(CC) -E -x c $(CFLAGS) $(INCLUDE_DIRS) $(CUR_APP_PATH)/linker/$(APP_NAME)_$(CORE)_template$(LD_SUFFIX).ld | grep -v '^#' >$(CUR_APP_PATH)/linker/$(APP_NAME).ld
+
post_build: $(OUT_CFG)/$(APP_NAME).bin
ifeq ($(POST_BUILD_ENABLE), 1)
$(info [POST BUILD] - Executing post build script for $(APP_NAME))
@@ -249,104 +259,22 @@
###############################################################################
# Common libraries
###############################################################################
-PLATFORM_SYSTEM_FILE_NAME := ns_system_$(PLATFORM_SUFFIX).c
-PLATFORM_SOURCES_PDL_STARTUP := ns_start_$(PLATFORM_SUFFIX).c
+C_FILES += ns_system_$(PLATFORM_SUFFIX).c
+C_FILES += ns_start_$(PLATFORM_SUFFIX).c
-PLATFORM_SOURCES_HAL := $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/pin_packages/cyhal_cyw20829_56_qfn.c
-PLATFORM_SOURCES_HAL += $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/source/triggers/cyhal_triggers_cyw20829.c
-PLATFORM_SOURCES_HAL += $(wildcard $(PRJ_DIR)/libs/mtb-hal-cat1/source/*.c)
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
-PLATFORM_INCLUDE_DIRS_PDL_STARTUP := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
+INCLUDE_DIRS += $(PRJ_DIR)/libs/retarget-io
-PLATFORM_INCLUDE_RETARGET_IO := $(PRJ_DIR)/libs/retarget-io
+INCLUDE_DIRS += $(PRJ_DIR)/libs/mtb-hal-cat1/include
+INCLUDE_DIRS += $(PRJ_DIR)/libs/mtb-hal-cat1/include_pvt
+INCLUDE_DIRS += $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/
+INCLUDE_DIRS += $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/pin_packages
-PLATFORM_INCLUDE_DIRS_HAL := $(PRJ_DIR)/libs/mtb-hal-cat1/include
-PLATFORM_INCLUDE_DIRS_HAL += $(PRJ_DIR)/libs/mtb-hal-cat1/include_pvt
-PLATFORM_INCLUDE_DIRS_HAL += $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/
-PLATFORM_INCLUDE_DIRS_HAL += $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/pin_packages
-#PLATFORM_INCLUDE_DIRS_HAL += $(PRJ_DIR)/libs/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/triggers
+DEFINES += -DCY_USING_HAL
+DEFINES += -DCOMPONENT_CM33
+DEFINES += -DCOMPONENT_PSOC6HAL
+DEFINES += -DCOMPONENT_PSVP_CYW20829
+DEFINES += -DCOMPONENT_SOFTFP
+DEFINES += -DFLASH_BOOT
-PLATFORM_DEFINES_LIBS := -DCY_USING_HAL
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_CM33
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_PSOC6HAL
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_SOFTFP
-PLATFORM_DEFINES_LIBS += -DFLASH_BOOT
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### CYW20829.mk ####)
-$(info APPTYPE <-> $(APPTYPE))
-$(info APP_DEFAULT_POLICY <-> $(APP_DEFAULT_POLICY))
-$(info APP_NAME <-- $(APP_NAME))
-$(info BOOTLOADER_SIZE <-- $(BOOTLOADER_SIZE))
-$(info CFLAGS_PLATFORM --> $(CFLAGS_PLATFORM))
-$(info CORE <-> $(CORE))
-$(info CORE_SUFFIX --> $(CORE_SUFFIX))
-$(info DEFINES --> $(DEFINES))
-$(info DEVICE <-> $(DEVICE))
-$(info ENC_IMG <-- $(ENC_IMG))
-$(info ENC_KEY_FILE <-- $(ENC_KEY_FILE))
-$(info FAMILY <-- $(FAMILY))
-$(info FLASH_START <-> $(FLASH_START))
-$(info FLASH_XIP_START <-> $(FLASH_XIP_START))
-$(info GCC_PATH <-- $(GCC_PATH))
-$(info HEADER_FILES <-- $(HEADER_FILES))
-$(info HEADER_OFFSET <-- $(HEADER_OFFSET))
-$(info INCLUDE_DIRS_LIBS --> $(INCLUDE_DIRS_LIBS))
-$(info INCLUDE_DIRS_MBEDTLS_CRYPTOLITE <-> $(INCLUDE_DIRS_MBEDTLS_CRYPTOLITE))
-$(info LCS <-> $(LCS))
-$(info LED_PIN_DEFAULT --> $(LED_PIN_DEFAULT))
-$(info LED_PORT_DEFAULT --> $(LED_PORT_DEFAULT))
-$(info OUT_CFG <-- $(OUT_CFG))
-$(info PDL_CAT_SUFFIX <-> $(PDL_CAT_SUFFIX))
-$(info PLATFORM_APP_SOURCES --> $(PLATFORM_APP_SOURCES))
-$(info PLATFORM_CHUNK_SIZE --> $(PLATFORM_CHUNK_SIZE))
-$(info PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE --> $(PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE))
-$(info PLATFORM_DEFAULT_ERASED_VALUE --> $(PLATFORM_DEFAULT_ERASED_VALUE))
-$(info PLATFORM_DEFAULT_IMG_VER_ARG --> $(PLATFORM_DEFAULT_IMG_VER_ARG))
-$(info PLATFORM_DEFAULT_RAM_SIZE --> $(PLATFORM_DEFAULT_RAM_SIZE))
-$(info PLATFORM_DEFAULT_RAM_START --> $(PLATFORM_DEFAULT_RAM_START))
-$(info PLATFORM_DEFAULT_USE_OVERWRITE --> $(PLATFORM_DEFAULT_USE_OVERWRITE))
-$(info PLATFORM_DEFINES_APP --> $(PLATFORM_DEFINES_APP))
-$(info PLATFORM_DEFINES_LIBS --> $(PLATFORM_DEFINES_LIBS))
-$(info PLATFORM_INCLUDE_DIRS_FLASH --> $(PLATFORM_INCLUDE_DIRS_FLASH))
-$(info PLATFORM_INCLUDE_DIRS_HAL --> $(PLATFORM_INCLUDE_DIRS_HAL))
-$(info PLATFORM_INCLUDE_DIRS_PDL_STARTUP --> $(PLATFORM_INCLUDE_DIRS_PDL_STARTUP))
-$(info PLATFORM_INCLUDE_DIRS_RETARGET_IO --> $(PLATFORM_INCLUDE_DIRS_RETARGET_IO))
-$(info PLATFORM_INCLUDE_DIRS_UTILS --> $(PLATFORM_INCLUDE_DIRS_UTILS))
-$(info PLATFORM_SERVICE_APP_DESC_OFFSET <-- $(PLATFORM_SERVICE_APP_DESC_OFFSET))
-$(info PLATFORM_SERVICE_APP_OFFSET <-- $(PLATFORM_SERVICE_APP_OFFSET))
-$(info PLATFORM_SERVICE_APP_SIZE --> $(PLATFORM_SERVICE_APP_SIZE))
-$(info PLATFORM_SIGN_ARGS --> $(PLATFORM_SIGN_ARGS))
-$(info PLATFORM_SOURCES_FLASH --> $(PLATFORM_SOURCES_FLASH))
-$(info PLATFORM_SOURCES_HAL --> $(PLATFORM_SOURCES_HAL))
-$(info PLATFORM_SOURCES_PDL_RUNTIME --> $(PLATFORM_SOURCES_PDL_RUNTIME))
-$(info PLATFORM_SOURCES_PDL_STARTUP --> $(PLATFORM_SOURCES_PDL_STARTUP))
-$(info PLATFORM_SOURCES_RETARGET_IO --> $(PLATFORM_SOURCES_RETARGET_IO))
-$(info PLATFORM_SUFFIX <-> $(PLATFORM_SUFFIX))
-$(info PLATFORM_SYSTEM_FILE_NAME --> $(PLATFORM_SYSTEM_FILE_NAME))
-$(info PLATFORM_USER_APP_START <-> $(PLATFORM_USER_APP_START))
-$(info POST_BUILD_ENABLE <-- $(POST_BUILD_ENABLE))
-$(info PRIMARY_IMG_START <-- $(PRIMARY_IMG_START))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info PROVISION_PATH <-> $(PROVISION_PATH))
-$(info SERVICE_APP_NAME <-> $(SERVICE_APP_NAME))
-$(info SERVICE_APP_PATH <-> $(SERVICE_APP_PATH))
-$(info SERVICE_APP_PLATFORM_SUFFIX <-> $(SERVICE_APP_PLATFORM_SUFFIX))
-$(info SHELL <-- $(SHELL))
-$(info SIGN_ARGS <-- $(SIGN_ARGS))
-$(info SIGN_TYPE <-> $(SIGN_TYPE))
-$(info SLOT_SIZE <-- $(SLOT_SIZE))
-$(info SMIF_CRYPTO_CONFIG <-> $(SMIF_CRYPTO_CONFIG))
-$(info SOURCES_LIBS --> $(SOURCES_LIBS))
-$(info SOURCES_MBEDTLS_CRYPTOLITE <-> $(SOURCES_MBEDTLS_CRYPTOLITE))
-$(info TOOLCHAIN_PATH <-- $(TOOLCHAIN_PATH))
-$(info UART_RX_DEFAULT --> $(UART_RX_DEFAULT))
-$(info UART_TX_DEFAULT --> $(UART_TX_DEFAULT))
-$(info UPGRADE_SUFFIX <-- $(UPGRADE_SUFFIX))
-$(info USE_CRYPTO_HW <-> $(USE_CRYPTO_HW))
-$(info USE_CUSTOM_MEMORY_MAP --> $(USE_CUSTOM_MEMORY_MAP))
-$(info USE_EXTERNAL_FLASH --> $(USE_EXTERNAL_FLASH))
-$(info USE_HW_ROLLBACK_PROT <-- $(USE_HW_ROLLBACK_PROT))
-endif
diff --git a/boot/cypress/platforms/PSC3.md b/boot/cypress/platforms/PSC3.md
new file mode 100644
index 0000000..a1eb402
--- /dev/null
+++ b/boot/cypress/platforms/PSC3.md
@@ -0,0 +1,3 @@
+## PSOC™ C3 platform description
+
+PSOC™ C3 support added for ModusToolbox Code Example - [mtb-example-psoc-control-edge-protect-bootloader](https://github.com/Infineon/mtb-example-psoc-control-edge-protect-bootloader). Please use ModusToolbox 3.3 or higher to create and run the project.
diff --git a/boot/cypress/platforms/PSOC6.mk b/boot/cypress/platforms/PSOC6.mk
index a12b02a..6747b4e 100644
--- a/boot/cypress/platforms/PSOC6.mk
+++ b/boot/cypress/platforms/PSOC6.mk
@@ -38,22 +38,22 @@
PLATFORM_SUFFIX := 02
else ifeq ($(PLATFORM), PSOC_062_1M)
# base kit CY8CKIT-062-WIFI-BT
-DEVICE ?= CY8C6247BZI-D54
+DEVICE ?= CY8C6247BZI_D54
PLATFORM_SUFFIX := 01
else ifeq ($(PLATFORM), PSOC_062_512K)
# base kit CY8CPROTO-062S3-4343W
-DEVICE ?= CY8C6245LQI-S3D72
+DEVICE ?= CY8C6245LQI_S3D72
PLATFORM_SUFFIX := 03
else ifeq ($(PLATFORM), PSOC_063_1M)
# base kit CY8CPROTO-063-BLE
-DEVICE ?= CYBLE-416045-02-device
+DEVICE ?= CYBLE_416045_02_device
PLATFORM_SUFFIX := 01
else ifeq ($(PLATFORM), PSOC_061_2M)
# FIXME!
-DEVICE ?= CY8C614ABZI-S2F44
+DEVICE ?= CY8C614ABZI_S2F44
PLATFORM_SUFFIX := 02
else ifeq ($(PLATFORM), PSOC_061_512K)
-DEVICE ?= CY8C6136BZI-F34
+DEVICE ?= CY8C6136BZI_F34
PLATFORM_SUFFIX := 03
USE_CRYPTO_HW := 0
endif
@@ -100,17 +100,19 @@
UART_RX_DEFAULT ?= P5_0
endif
-DEFINES += USE_SWAP_STATUS=1
-DEFINES += CY_DEBUG_UART_TX=$(UART_TX_DEFAULT)
-DEFINES += CY_DEBUG_UART_RX=$(UART_RX_DEFAULT)
-DEFINES += CYBSP_DEBUG_UART_TX=$(UART_TX_DEFAULT)
-DEFINES += CYBSP_DEBUG_UART_RX=$(UART_RX_DEFAULT)
+DEFINES += -DUSE_SWAP_STATUS=1
+DEFINES += -DCY_DEBUG_UART_TX=$(UART_TX_DEFAULT)
+DEFINES += -DCY_DEBUG_UART_RX=$(UART_RX_DEFAULT)
+DEFINES += -DCYBSP_DEBUG_UART_TX=$(UART_TX_DEFAULT)
+DEFINES += -DCYBSP_DEBUG_UART_RX=$(UART_RX_DEFAULT)
# Add device name to defines
-DEFINES += $(DEVICE)
-DEFINES += CY_USING_HAL
-DEFINES += CORE_NAME_$(CORE)_0=1
-DEFINES += COMPONENT_CAT1 COMPONENT_CAT1A COMPONENT_$(CORE)
+DEFINES += -D$(DEVICE)
+DEFINES += -DCY_USING_HAL
+DEFINES += -DCORE_NAME_$(CORE)_0=1
+DEFINES += -DCOMPONENT_CAT1
+DEFINES += -DCOMPONENT_CAT1A
+DEFINES += -DCOMPONENT_$(CORE)
# Minimum erase size of underlying memory hardware
PLATFORM_MEMORY_ALIGN := 0x200
@@ -138,25 +140,26 @@
CORE_SUFFIX = m4
endif
-PLATFORM_APP_SOURCES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/cyw_platform_utils.c
-PLATFORM_INCLUDE_DIRS_UTILS := $(PRJ_DIR)/platforms/utils/$(FAMILY)
+C_FILES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/platform_utils.c
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/utils/$(FAMILY)
###############################################################################
# Application dependent definitions
# MCUBootApp default settings
USE_CRYPTO_HW ?= 1
+MCUBOOT_DEPENDENCY_CHECK ?= 1
###############################################################################
ifeq ($(PLATFORM), $(filter $(PLATFORM), PSOC_061_2M PSOC_061_1M PSOC_061_512K))
# FIXME: not needed for real PSoC 61!
-PLATFORM_APP_SOURCES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/psoc6_02_cm0p_sleep.c
+C_FILES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/psoc6_02_cm0p_sleep.c
endif
ifeq ($(USE_SMIF_CONFIG), 1)
ifeq ($(USE_EXTERNAL_FLASH), 1)
- PLATFORM_SOURCES_FLASH += cy_serial_flash_prog.c
- PLATFORM_SOURCES_FLASH += $(PRJ_DIR)/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.c
- PLATFORM_INCLUDE_DIRS_FLASH += $(PRJ_DIR)/platforms/memory/PSOC6/smif_cfg_dbg
+ C_FILES += cy_serial_flash_prog.c
+ C_FILES += $(PRJ_DIR)/platforms/memory/PSOC6/smif_cfg_dbg/cycfg_qspi_memslot.c
+ INCLUDE_DIRS += $(PRJ_DIR)/platforms/memory/PSOC6/smif_cfg_dbg
endif
endif
@@ -243,6 +246,10 @@
endif
endif
+pre_build:
+ $(info [PRE_BUILD] - Generating linker script for application $(CUR_APP_PATH)/linker/$(APP_NAME).ld)
+ @$(CC) -E -x c $(CFLAGS) $(INCLUDE_DIRS) $(CUR_APP_PATH)/linker/$(APP_NAME)_$(CORE)_template$(LD_SUFFIX).ld | grep -v '^#' >$(CUR_APP_PATH)/linker/$(APP_NAME).ld
+
# Post build action to execute after main build job
post_build: $(OUT_CFG)/$(APP_NAME).bin
ifeq ($(POST_BUILD_ENABLE), 1)
@@ -268,67 +275,4 @@
PLATFORM_SYSTEM_FILE_NAME := system_psoc6_c$(CORE_SUFFIX).c
PLATFORM_STARTUP_FILE := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)/TOOLCHAIN_$(COMPILER)/startup_psoc6_$(PLATFORM_SUFFIX)_c$(CORE_SUFFIX).S
-PLATFORM_INCLUDE_DIRS_PDL_STARTUP := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### PSOC6.mk ####)
-$(info APP_CORE <-- $(APP_CORE))
-$(info APP_NAME <-- $(APP_NAME))
-$(info BOOT_RECORD <-- $(BOOT_RECORD))
-$(info BUILDCFG <-- $(BUILDCFG))
-$(info CFLAGS_PLATFORM --> $(CFLAGS_PLATFORM))
-$(info COMPILER <-- $(COMPILER))
-$(info CORE <-> $(CORE))
-$(info CORE_SUFFIX <-- $(CORE_SUFFIX))
-$(info DEFINES --> $(DEFINES))
-$(info DEVICE <-> $(DEVICE))
-$(info ENC_IMG <-- $(ENC_IMG))
-$(info ENC_KEY_FILE <-- $(ENC_KEY_FILE))
-$(info ERASED_VALUE <-- $(ERASED_VALUE))
-$(info FAMILY <-- $(FAMILY))
-$(info GCC_PATH <-- $(GCC_PATH))
-$(info HEADER_OFFSET <-- $(HEADER_OFFSET))
-$(info IMGTOOL_PATH <-> $(IMGTOOL_PATH))
-$(info IMG_TYPE <-- $(IMG_TYPE))
-$(info LED_PIN_DEFAULT --> $(LED_PIN_DEFAULT))
-$(info LED_PORT_DEFAULT --> $(LED_PORT_DEFAULT))
-$(info OUT_CFG <-- $(OUT_CFG))
-$(info PDL_CAT_SUFFIX <-> $(PDL_CAT_SUFFIX))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PLATFORM_APP_SOURCES --> $(PLATFORM_APP_SOURCES))
-$(info PLATFORM_DEFAULT_ERASED_VALUE --> $(PLATFORM_DEFAULT_ERASED_VALUE))
-$(info PLATFORM_DEFAULT_IMG_VER_ARG --> $(PLATFORM_DEFAULT_IMG_VER_ARG))
-$(info PLATFORM_DEFAULT_PRIMARY_IMG_START --> $(PLATFORM_DEFAULT_PRIMARY_IMG_START))
-$(info PLATFORM_DEFAULT_RAM_SIZE --> $(PLATFORM_DEFAULT_RAM_SIZE))
-$(info PLATFORM_DEFAULT_RAM_START --> $(PLATFORM_DEFAULT_RAM_START))
-$(info PLATFORM_DEFAULT_USER_APP_START <-- $(PLATFORM_DEFAULT_USER_APP_START))
-$(info PLATFORM_DEFAULT_USE_OVERWRITE --> $(PLATFORM_DEFAULT_USE_OVERWRITE))
-$(info PLATFORM_INCLUDE_DIRS_FLASH --> $(PLATFORM_INCLUDE_DIRS_FLASH))
-$(info PLATFORM_INCLUDE_DIRS_HAL_MCUB --> $(PLATFORM_INCLUDE_DIRS_HAL_MCUB))
-$(info PLATFORM_INCLUDE_DIRS_PDL_STARTUP --> $(PLATFORM_INCLUDE_DIRS_PDL_STARTUP))
-$(info PLATFORM_INCLUDE_DIRS_UTILS --> $(PLATFORM_INCLUDE_DIRS_UTILS))
-$(info PLATFORM_SIGN_ARGS --> $(PLATFORM_SIGN_ARGS))
-$(info PLATFORM_SOURCES_FLASH <-> $(PLATFORM_SOURCES_FLASH))
-$(info PLATFORM_SOURCES_HAL_MCUB --> $(PLATFORM_SOURCES_HAL_MCUB))
-$(info PLATFORM_STARTUP_FILE --> $(PLATFORM_STARTUP_FILE))
-$(info PLATFORM_SUFFIX <-> $(PLATFORM_SUFFIX))
-$(info PLATFORM_SYSTEM_FILE_NAME --> $(PLATFORM_SYSTEM_FILE_NAME))
-$(info PLATFORM_USER_APP_START --> $(PLATFORM_USER_APP_START))
-$(info POST_BUILD_ENABLE <-- $(POST_BUILD_ENABLE))
-$(info PRIMARY_IMG_START <-- $(PRIMARY_IMG_START))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info PYTHON_PATH <-- $(PYTHON_PATH))
-$(info SIGN_ARGS <-- $(SIGN_ARGS))
-$(info SIGN_KEY_FILE <-- $(SIGN_KEY_FILE))
-$(info SLOT_SIZE <-- $(SLOT_SIZE))
-$(info THIS_APP_PATH <-- $(THIS_APP_PATH))
-$(info UART_RX_DEFAULT --> $(UART_RX_DEFAULT))
-$(info UART_TX_DEFAULT --> $(UART_TX_DEFAULT))
-$(info UPGRADE_SUFFIX <-- $(UPGRADE_SUFFIX))
-$(info UPGRADE_TYPE <-- $(UPGRADE_TYPE))
-$(info USE_CRYPTO_HW --> $(USE_CRYPTO_HW))
-$(info USE_EXTERNAL_FLASH <-- $(USE_EXTERNAL_FLASH))
-$(info USE_XIP <-- $(USE_XIP))
-endif
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
diff --git a/boot/cypress/platforms/XMC7000.mk b/boot/cypress/platforms/XMC7000.mk
index 7393d6c..509a41d 100644
--- a/boot/cypress/platforms/XMC7000.mk
+++ b/boot/cypress/platforms/XMC7000.mk
@@ -60,11 +60,27 @@
USE_SWAP_STATUS ?= 1
ifeq ($(USE_SWAP_STATUS), 1)
-DEFINES += USE_SWAP_STATUS=1
+DEFINES += -DUSE_SWAP_STATUS=1
+endif
+
+ifeq ($(USE_INTERNAL_FLASH_CODE_LARGE), 1)
+DEFINES += -DUSE_INTERNAL_FLASH_CODE_LARGE
+endif
+
+ifeq ($(USE_INTERNAL_FLASH_CODE_SMALL), 1)
+DEFINES += -DUSE_INTERNAL_FLASH_CODE_SMALL
+endif
+
+ifeq ($(USE_INTERNAL_FLASH_WORK_LARGE), 1)
+DEFINES += -DUSE_INTERNAL_FLASH_WORK_LARGE
+endif
+
+ifeq ($(USE_INTERNAL_FLASH_WORK_SMALL), 1)
+DEFINES += -DUSE_INTERNAL_FLASH_WORK_SMALL
endif
# Add device name to defines
-DEFINES += $(DEVICE)
+DEFINES += -D$(DEVICE)
# Default upgrade method
PLATFORM_DEFAULT_USE_OVERWRITE ?= 0
@@ -93,20 +109,9 @@
CORE_SUFFIX = m0plus
else
CORE_SUFFIX = m7
-PLATFORM_SOURCES_CM0P_SLEEP := $(PRJ_DIR)/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7200_cm0p_sleep.c
+C_FILES += $(PRJ_DIR)/platforms/BSP/XMC7000/system/COMPONENT_XMC7x_CM0P_SLEEP/xmc7200_cm0p_sleep.c
endif
-# PSOC6HAL source files
-# PLATFORM_SOURCES_HAL_MCUB := $(THIS_APP_PATH)/mtb-hal-cat1/source/cyhal_crypto_common.c
-# PLATFORM_SOURCES_HAL_MCUB += $(THIS_APP_PATH)/mtb-hal-cat1/source/cyhal_hwmgr.c
-
-# needed for Crypto HW Acceleration and headers inclusion, do not use for peripherals
-# peripherals should be accessed
-# PLATFORM_INCLUDE_DIRS_HAL_MCUB := $(THIS_APP_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include
-# PLATFORM_INCLUDE_DIRS_HAL_MCUB += $(THIS_APP_PATH)/mtb-hal-cat1/include
-# PLATFORM_INCLUDE_DIRS_HAL_MCUB += $(THIS_APP_PATH)/mtb-hal-cat1/include_pvt
-# PLATFORM_INCLUDE_DIRS_HAL_MCUB += $(THIS_APP_PATH)/mtb-hal-cat1/COMPONENT_CAT$(PDL_CAT_SUFFIX)/include/pin_packages
-
###############################################################################
# Application dependent definitions
# MCUBootApp default settings
@@ -115,13 +120,12 @@
###############################################################################
# Platform dependend utils files
-PLATFORM_APP_SOURCES := $(PRJ_DIR)/platforms/utils/$(FAMILY)/cyw_platform_utils.c
-PLATFORM_APP_SOURCES += $(PLATFORM_SOURCES_CM0P_SLEEP)
-PLATFORM_INCLUDE_DIRS_UTILS := $(PRJ_DIR)/platforms/utils/$(FAMILY)
+C_FILES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/platform_utils.c
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/utils/$(FAMILY)
ifeq ($(USE_SECURE_MODE), 1)
-PLATFORM_APP_SOURCES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/cy_si_config.c
-PLATFORM_APP_SOURCES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/cy_si_key.c
+C_FILES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/cy_si_config.c
+C_FILES += $(PRJ_DIR)/platforms/utils/$(FAMILY)/cy_si_key.c
endif
# Post build job to execute for platform
@@ -192,6 +196,10 @@
endif
endif
+pre_build:
+ $(info [PRE_BUILD] - Generating linker script for application $(CUR_APP_PATH)/linker/$(APP_NAME).ld)
+ @$(CC) -E -x c $(CFLAGS) $(INCLUDE_DIRS) $(CUR_APP_PATH)/linker/$(APP_NAME)_$(CORE)_template$(LD_SUFFIX).ld | grep -v '^#' >$(CUR_APP_PATH)/linker/$(APP_NAME).ld
+
# Post build action to execute after main build job
post_build: $(OUT_CFG)/$(APP_NAME).bin
ifeq ($(POST_BUILD_ENABLE), 1)
@@ -222,78 +230,14 @@
PLATFORM_STARTUP_FILE := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)/TOOLCHAIN_$(COMPILER)/startup_cm7.S
endif
-PLATFORM_INCLUDE_DIRS_PDL_STARTUP := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
-PLATFORM_INCLUDE_DIRS_PDL_STARTUP += $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system
+INCLUDE_DIRS += $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)
-PLATFORM_DEFINES_LIBS := -DCY_USING_HAL
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_$(CORE)
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_$(CORE)_$(CORE_ID)
-PLATFORM_DEFINES_LIBS += -DCORE_NAME_$(CORE)_$(CORE_ID)=1
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_CAT1
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_CAT1C
-PLATFORM_DEFINES_LIBS += -DCOMPONENT_CAT1C8M
+DEFINES += -DCY_USING_HAL
+DEFINES += -DCOMPONENT_$(CORE)
+DEFINES += -DCOMPONENT_$(CORE)_$(CORE_ID)
+DEFINES += -DCORE_NAME_$(CORE)_$(CORE_ID)=1
+DEFINES += -DCOMPONENT_CAT1
+DEFINES += -DCOMPONENT_CAT1C
+DEFINES += -DCOMPONENT_CAT1C8M
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### PSOC6.mk ####)
-$(info APP_CORE <-- $(APP_CORE))
-$(info APP_NAME <-- $(APP_NAME))
-$(info BOOT_RECORD <-- $(BOOT_RECORD))
-$(info BUILDCFG <-- $(BUILDCFG))
-$(info CFLAGS_PLATFORM --> $(CFLAGS_PLATFORM))
-$(info COMPILER <-- $(COMPILER))
-$(info CORE <-> $(CORE))
-$(info CORE_SUFFIX <-- $(CORE_SUFFIX))
-$(info DEFINES --> $(DEFINES))
-$(info DEVICE <-> $(DEVICE))
-$(info ENC_IMG <-- $(ENC_IMG))
-$(info ENC_KEY_FILE <-- $(ENC_KEY_FILE))
-$(info ERASED_VALUE <-- $(ERASED_VALUE))
-$(info FAMILY <-- $(FAMILY))
-$(info GCC_PATH <-- $(GCC_PATH))
-$(info HEADER_OFFSET <-- $(HEADER_OFFSET))
-$(info IMGTOOL_PATH <-> $(IMGTOOL_PATH))
-$(info IMG_TYPE <-- $(IMG_TYPE))
-$(info LED_PIN_DEFAULT --> $(LED_PIN_DEFAULT))
-$(info LED_PORT_DEFAULT --> $(LED_PORT_DEFAULT))
-$(info OUT_CFG <-- $(OUT_CFG))
-$(info PDL_CAT_SUFFIX <-> $(PDL_CAT_SUFFIX))
-$(info PLATFORM <-- $(PLATFORM))
-$(info PLATFORM_APP_SOURCES --> $(PLATFORM_APP_SOURCES))
-$(info PLATFORM_DEFAULT_ERASED_VALUE --> $(PLATFORM_DEFAULT_ERASED_VALUE))
-$(info PLATFORM_DEFAULT_IMG_VER_ARG --> $(PLATFORM_DEFAULT_IMG_VER_ARG))
-$(info PLATFORM_DEFAULT_PRIMARY_IMG_START --> $(PLATFORM_DEFAULT_PRIMARY_IMG_START))
-$(info PLATFORM_DEFAULT_RAM_SIZE --> $(PLATFORM_DEFAULT_RAM_SIZE))
-$(info PLATFORM_DEFAULT_RAM_START --> $(PLATFORM_DEFAULT_RAM_START))
-$(info PLATFORM_DEFAULT_USER_APP_START <-- $(PLATFORM_DEFAULT_USER_APP_START))
-$(info PLATFORM_DEFAULT_USE_OVERWRITE --> $(PLATFORM_DEFAULT_USE_OVERWRITE))
-$(info PLATFORM_INCLUDE_DIRS_FLASH --> $(PLATFORM_INCLUDE_DIRS_FLASH))
-$(info PLATFORM_INCLUDE_DIRS_HAL_MCUB --> $(PLATFORM_INCLUDE_DIRS_HAL_MCUB))
-$(info PLATFORM_INCLUDE_DIRS_PDL_STARTUP --> $(PLATFORM_INCLUDE_DIRS_PDL_STARTUP))
-$(info PLATFORM_INCLUDE_DIRS_UTILS --> $(PLATFORM_INCLUDE_DIRS_UTILS))
-$(info PLATFORM_INCLUDE_RETARGET_IO_PDL --> $(PLATFORM_INCLUDE_RETARGET_IO_PDL))
-$(info PLATFORM_SIGN_ARGS --> $(PLATFORM_SIGN_ARGS))
-$(info PLATFORM_SOURCES_FLASH <-> $(PLATFORM_SOURCES_FLASH))
-$(info PLATFORM_SOURCES_HAL_MCUB --> $(PLATFORM_SOURCES_HAL_MCUB))
-$(info PLATFORM_SOURCES_RETARGET_IO_PDL --> $(PLATFORM_SOURCES_RETARGET_IO_PDL))
-$(info PLATFORM_STARTUP_FILE --> $(PLATFORM_STARTUP_FILE))
-$(info PLATFORM_SUFFIX <-> $(PLATFORM_SUFFIX))
-$(info PLATFORM_SYSTEM_FILE_NAME --> $(PLATFORM_SYSTEM_FILE_NAME))
-$(info PLATFORM_USER_APP_START --> $(PLATFORM_USER_APP_START))
-$(info POST_BUILD_ENABLE <-- $(POST_BUILD_ENABLE))
-$(info PRIMARY_IMG_START <-- $(PRIMARY_IMG_START))
-$(info PRJ_DIR <-- $(PRJ_DIR))
-$(info PYTHON_PATH <-- $(PYTHON_PATH))
-$(info SIGN_ARGS <-- $(SIGN_ARGS))
-$(info SIGN_KEY_FILE <-- $(SIGN_KEY_FILE))
-$(info SLOT_SIZE <-- $(SLOT_SIZE))
-$(info THIS_APP_PATH <-- $(THIS_APP_PATH))
-$(info UART_RX_DEFAULT --> $(UART_RX_DEFAULT))
-$(info UART_TX_DEFAULT --> $(UART_TX_DEFAULT))
-$(info UPGRADE_SUFFIX <-- $(UPGRADE_SUFFIX))
-$(info UPGRADE_TYPE <-- $(UPGRADE_TYPE))
-$(info USE_CRYPTO_HW --> $(USE_CRYPTO_HW))
-$(info USE_EXTERNAL_FLASH <-- $(USE_EXTERNAL_FLASH))
-$(info USE_XIP <-- $(USE_XIP))
-endif
diff --git a/boot/cypress/platforms/boot_rng/boot_rng.c b/boot/cypress/platforms/boot_rng/boot_rng.c
new file mode 100644
index 0000000..9a658cd
--- /dev/null
+++ b/boot/cypress/platforms/boot_rng/boot_rng.c
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * File Name: boot_rng.c
+ *
+ *******************************************************************************
+* Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+* an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+*
+* This software, including source code, documentation and related
+* materials ("Software") is owned by Cypress Semiconductor Corporation
+* or one of its affiliates ("Cypress") and is protected by and subject to
+* worldwide patent protection (United States and foreign),
+* United States copyright laws and international treaty provisions.
+* Therefore, you may use this Software only as provided in the license
+* agreement accompanying the software package from which you
+* obtained this Software ("EULA").
+* If no EULA applies, Cypress hereby grants you a personal, non-exclusive,
+* non-transferable license to copy, modify, and compile the Software
+* source code solely for use in connection with Cypress's
+* integrated circuit products. Any reproduction, modification, translation,
+* compilation, or representation of this Software except as specified
+* above is prohibited without the express written permission of Cypress.
+*
+* Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress
+* reserves the right to make changes to the Software without notice. Cypress
+* does not assume any liability arising out of the application or use of the
+* Software or any product or circuit described in the Software. Cypress does
+* not authorize its products for use in any products where a malfunction or
+* failure of the Cypress product may reasonably be expected to result in
+* significant property damage, injury or death ("High Risk Product"). By
+* including Cypress's product in a High Risk Product, the manufacturer
+* of such system or application assumes all risk of such use and in doing
+* so agrees to indemnify Cypress against all liability.
+*******************************************************************************/
+
+#include <stddef.h>
+#include <stdint.h>
+#include "cmsis_compiler.h"
+#include "boot_rng.h"
+
+/* PRNG parameters */
+#define PRNG_A 13U
+#define PRNG_B 17U
+#define PRNG_C 5U
+
+#define PRNG_DEFAULT_SEED (0xB59A9242U)
+
+/* Initialize PRNG by default values
+ * (32 bit numbers of Hamming distance 16 bits.) */
+static uint32_t prng_rnd;
+
+static bool rng_is_initialized = false;
+
+
+/*******************************************************************************
+ * Function Name: boot_rng_get_rnd_num_length
+ *******************************************************************************
+ * \brief Return size of rnd number that is generated by this RND
+ *
+ * return uint32_t
+ *
+ ******************************************************************************/
+uint32_t boot_rng_get_rnd_num_length(void)
+{
+ return sizeof(uint32_t);
+}
+
+
+/*******************************************************************************
+ * Function Name: boot_rng_is_initialized
+ *******************************************************************************
+ * \brief Return status PRNG initialization
+ *
+ * return true PRNG initialized
+ * false PRNG not initialized
+ *
+ ******************************************************************************/
+bool boot_rng_is_initialized(void)
+{
+ return rng_is_initialized;
+}
+
+
+/*******************************************************************************
+ * Function Name: boot_rng_initialization_done
+ *******************************************************************************
+ * \brief The function must be called if PRNG initialization is done.
+ *
+ *
+ ******************************************************************************/
+void boot_rng_initialization_done(void)
+{
+ rng_is_initialized = true;
+}
+
+
+/*******************************************************************************
+ * Function Name: boot_rng_init_seed
+ *******************************************************************************
+ * \brief Set PRNG seed
+ *
+ ******************************************************************************/
+void boot_rng_init_seed(uint32_t seed)
+{
+ if (!boot_rng_is_initialized())
+ {
+ prng_rnd = seed;
+ }
+}
+
+
+/*******************************************************************************
+ * Function Name: boot_rng_init
+ *******************************************************************************
+ * \brief Initialize initialize PRNG seed by TRNG value. By default it is used
+ * hardcoded PRNG_DEFAULT_SEED value as PRNG seed. Each platform should
+ * have its own implementation of this function to use true random
+ * number as PRNG seed(i.e. from TRNG)
+ *
+ * return true if RNG initialization is successful
+ * false in other cases
+ *
+ ******************************************************************************/
+__WEAK bool boot_rng_init(void)
+{
+ bool ret = false;
+
+ do
+ {
+ /* Prevent PRNG double initialization */
+ if(boot_rng_is_initialized())
+ {
+ ret = true;
+ break;
+ }
+
+ boot_rng_init_seed(PRNG_DEFAULT_SEED);
+ boot_rng_initialization_done();
+ ret = true;
+
+ } while(false);
+
+ return ret;
+}
+
+
+/*******************************************************************************
+ * Function Name: boot_rng_random_generate
+ *******************************************************************************
+ * \brief Generate 32-bit random number by PRNG.
+ *
+ ******************************************************************************/
+uint32_t boot_rng_random_generate(void)
+{
+ if (!boot_rng_is_initialized())
+ {
+ /* If PRNG initialized is failed then stop booting for secure reasons */
+ if(!boot_rng_init())
+ {
+ while(true) {
+ __WFI();
+ }
+ }
+ }
+
+ /* Generate a random number by PRNG */
+ prng_rnd ^= (prng_rnd << PRNG_A);
+ prng_rnd ^= (prng_rnd >> PRNG_B);
+ prng_rnd ^= (prng_rnd << PRNG_C);
+
+ return prng_rnd;
+}
diff --git a/boot/cypress/platforms/boot_rng/boot_rng.h b/boot/cypress/platforms/boot_rng/boot_rng.h
new file mode 100644
index 0000000..68c5646
--- /dev/null
+++ b/boot/cypress/platforms/boot_rng/boot_rng.h
@@ -0,0 +1,51 @@
+/******************************************************************************
+ * File Name: boot_rng.h
+ *
+ ******************************************************************************
+* Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+* an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+*
+* This software, including source code, documentation and related
+* materials ("Software") is owned by Cypress Semiconductor Corporation
+* or one of its affiliates ("Cypress") and is protected by and subject to
+* worldwide patent protection (United States and foreign),
+* United States copyright laws and international treaty provisions.
+* Therefore, you may use this Software only as provided in the license
+* agreement accompanying the software package from which you
+* obtained this Software ("EULA").
+* If no EULA applies, Cypress hereby grants you a personal, non-exclusive,
+* non-transferable license to copy, modify, and compile the Software
+* source code solely for use in connection with Cypress's
+* integrated circuit products. Any reproduction, modification, translation,
+* compilation, or representation of this Software except as specified
+* above is prohibited without the express written permission of Cypress.
+*
+* Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress
+* reserves the right to make changes to the Software without notice. Cypress
+* does not assume any liability arising out of the application or use of the
+* Software or any product or circuit described in the Software. Cypress does
+* not authorize its products for use in any products where a malfunction or
+* failure of the Cypress product may reasonably be expected to result in
+* significant property damage, injury or death ("High Risk Product"). By
+* including Cypress's product in a High Risk Product, the manufacturer
+* of such system or application assumes all risk of such use and in doing
+* so agrees to indemnify Cypress against all liability.
+*******************************************************************************/
+
+#ifndef BOOT_RNG_H
+#define BOOT_RNG_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+uint32_t boot_rng_get_rnd_num_length(void);
+bool boot_rng_is_initialized(void);
+void boot_rng_init_seed(uint32_t seed);
+void boot_rng_initialization_done(void);
+bool boot_rng_init(void);
+uint32_t boot_rng_random_generate(void);
+
+#endif /* BOOT_RNG_H */
diff --git a/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h b/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h
new file mode 100644
index 0000000..f86cb2a
--- /dev/null
+++ b/boot/cypress/platforms/crypto/PSC3/cyboot_crypto_list.h
@@ -0,0 +1,124 @@
+/*******************************************************************************
+* \file cyboot_crypto_list.h
+* \version 1.0.0
+* Provides header file for crypto API.
+********************************************************************************
+* \copyright
+* (c) 2023, Cypress Semiconductor Corporation (an Infineon company) or an
+* affiliate of Cypress Semiconductor Corporation. All rights reserved.
+* This software, associated documentation and materials ("Software") is owned
+* by Cypress Semiconductor Corporation or one of its affiliates ("Cypress") and
+* is protected by and subject to worldwide patent protection (United States and
+* foreign), United States copyright laws and international treaty provisions.
+* Therefore, you may use this Software only as provided in the license
+* agreement accompanying the software package from which you obtained this
+* Software ("EULA"). If no EULA applies, then any reproduction, modification,
+* translation, compilation, or representation of this Software is prohibited
+* without the express written permission of Cypress.
+* Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+* Cypress reserves the right to make changes to the Software without notice.
+* Cypress does not assume any liability arising out of the application or use
+* of the Software or any product or circuit described in the Software. Cypress
+* does not authorize its products for use in any products where a malfunction
+* or failure of the Cypress product may reasonably be expected to result in
+* significant property damage, injury or death ("High Risk Product").
+* By including Cypress's product in a High Risk Product, the manufacturer of
+* such system or application assumes all risk of such use and in doing so
+* agrees to indemnify Cypress against all liability.
+*******************************************************************************/
+
+#ifndef CY_FB_CRYPTO_API_H
+#define CY_FB_CRYPTO_API_H
+
+#include <stdint.h>
+
+/** \cond INTERNAL */
+/** A size in words of a SHA-256 result */
+#define CYBOOT_HASH_RESULT_SIZE_IN_WORDS (8U)
+#define CYBOOT_CONTEXT_SIZE_IN_WORDS (100U)
+
+typedef uint32_t cyboot_hash_result_t[CYBOOT_HASH_RESULT_SIZE_IN_WORDS];
+typedef uint32_t cyboot_sha256_context_t[CYBOOT_CONTEXT_SIZE_IN_WORDS];
+
+/********************************************************************************
+* This function does a SHA-256 checksum calculation.
+* \param data Input data for hash calculating
+* \param size Syze in bytes of input data
+* \param hash Calculated hash
+*
+* \return
+* \ref CYBOOT_CRYPTO_SUCCESS if successful
+*******************************************************************************/
+typedef uint32_t (*cyboot_ecdsa_p256_signature_validate_t)(uint8_t *pub_key, uint32_t pub_key_len,
+ uint8_t *hash, uint32_t hash_len,
+ uint8_t *sign, uint32_t sign_len);
+
+/********************************************************************************
+* This function does a SHA-256 checksum calculation.
+* \param data Input data for hash calculating
+* \param size Syze in bytes of input data
+* \param hash Calculated hash
+*
+* \return
+* \ref CYBOOT_CRYPTO_SUCCESS if successful
+*******************************************************************************/
+typedef uint32_t (*cyboot_sha256_ret_t)(const uint8_t *data, uint32_t size, cyboot_hash_result_t hash);
+
+/********************************************************************************
+* This function finishes the SHA-256 operation, and writes the result to the
+* output buffer.
+*
+* \param ctx The SHA-256 context.
+*
+* \param output The SHA-256 checksum result.
+*
+* \return
+* \ref CYBOOT_CRYPTO_SUCCESS if successful
+*******************************************************************************/
+typedef uint32_t (*cyboot_sha256_finish_t)(cyboot_sha256_context_t *ctx, cyboot_hash_result_t output);
+
+/********************************************************************************
+* This function feeds an input buffer into an ongoing SHA-256 checksum
+* calculation.
+*
+* \param ctx
+* The SHA-256 context. This must be initialized and have a hash operation started.
+*
+* \param data
+* The buffer holding the data. This must be a readable buffer of length
+* \p data_len in bytes
+*
+* \param data_len
+* The length of the input data in bytes.
+*
+* \return
+* \ref CYBOOT_CRYPTO_SUCCESS if successful
+*******************************************************************************/
+typedef uint32_t (*cyboot_sha256_update_t)(cyboot_sha256_context_t *ctx, const uint8_t *data, uint32_t data_len);
+
+/********************************************************************************
+* This function starts a SHA-256 checksum calculation.
+* \param ctx The SHA-256 context to initialize.
+*
+* \return
+* \ref CYBOOT_CRYPTO_SUCCESS if successful
+*******************************************************************************/
+typedef uint32_t (*cyboot_sha256_init_t)(cyboot_sha256_context_t *ctx);
+
+typedef struct
+{
+ cyboot_sha256_init_t sha256_init;
+ cyboot_sha256_update_t sha256_update;
+ cyboot_sha256_finish_t sha256_finish;
+ cyboot_sha256_ret_t sha256_ret;
+ cyboot_ecdsa_p256_signature_validate_t ecdsa_p256_signature_validate;
+} cy_boot_crypto_api_t;
+
+#define BOOTROM_CRYPTO_API ((cy_boot_crypto_api_t *)0x1080FFB8)
+#define CYBOOT_CRYPTO_SUCCESS 0x0D50B002
+
+/** \endcond */
+#endif
+/* [] END OF FILE */
diff --git a/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c b/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c
new file mode 100644
index 0000000..0232b8d
--- /dev/null
+++ b/boot/cypress/platforms/crypto/PSC3/image_ec256_port.c
@@ -0,0 +1,192 @@
+/*
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Copyright (c) 2016-2019 JUUL Labs
+ * Copyright (c) 2017 Linaro LTD
+ * Copyright (C) 2021 Arm Limited
+ *
+ * Original license:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <string.h>
+
+#include "mcuboot_config/mcuboot_config.h"
+
+#define NUM_ECC_BYTES (256U / 8U)
+#define EC256_KEY_SZ (138)
+
+#include "bootutil/sign_key.h"
+
+#include "mbedtls/oid.h"
+#include "mbedtls/asn1.h"
+#include "bootutil/crypto/ecdsa_p256.h"
+#include "bootutil/crypto/common.h"
+#include "bootutil_priv.h"
+
+#include "cyboot_crypto_list.h"
+
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
+/*
+ * Declaring these like this adds NULL termination.
+ */
+static const uint8_t ec_pubkey_oid[] = MBEDTLS_OID_EC_ALG_UNRESTRICTED;
+static const uint8_t ec_secp256r1_oid[] = MBEDTLS_OID_EC_GRP_SECP256R1;
+#endif
+
+static int
+bootutil_import_key(uint8_t **cp, uint8_t *end)
+{
+ size_t len;
+ mbedtls_asn1_buf alg;
+ mbedtls_asn1_buf param;
+
+ if (mbedtls_asn1_get_tag(cp, end, &len,
+ MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) {
+ return -1;
+ }
+ end = *cp + len;
+
+ /* ECParameters (RFC5480) */
+ if (mbedtls_asn1_get_alg(cp, end, &alg, ¶m)) {
+ return -2;
+ }
+#if !defined(MCUBOOT_USE_PSA_CRYPTO)
+ /* id-ecPublicKey (RFC5480) */
+ if (alg.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_pubkey_oid) - 1 ||
+ memcmp(alg.MBEDTLS_CONTEXT_MEMBER(p), ec_pubkey_oid, sizeof(ec_pubkey_oid) - 1)) {
+ return -3;
+ }
+ /* namedCurve (RFC5480) */
+ if (param.MBEDTLS_CONTEXT_MEMBER(len) != sizeof(ec_secp256r1_oid) - 1 ||
+ memcmp(param.MBEDTLS_CONTEXT_MEMBER(p), ec_secp256r1_oid, sizeof(ec_secp256r1_oid) - 1)) {
+ return -4;
+ }
+#endif
+ /* ECPoint (RFC5480) */
+ if (mbedtls_asn1_get_bitstring_null(cp, end, &len)) {
+ return -6;
+ }
+ if (*cp + len != end) {
+ return -7;
+ }
+
+ if (len != 2 * NUM_ECC_BYTES + 1) {
+ return -8;
+ }
+
+ return 0;
+}
+
+/*
+ * cp points to ASN1 string containing an integer.
+ * Verify the tag, and that the length is 32 bytes.
+ */
+static int
+bootutil_read_bigint(uint8_t i[NUM_ECC_BYTES], uint8_t **cp, uint8_t *end)
+{
+ size_t len;
+
+ if (mbedtls_asn1_get_tag(cp, end, &len, MBEDTLS_ASN1_INTEGER)) {
+ return -3;
+ }
+
+ if (len >= NUM_ECC_BYTES) {
+ (void)memcpy(i, *cp + len - NUM_ECC_BYTES, NUM_ECC_BYTES);
+ } else {
+ (void)memset(i, 0, NUM_ECC_BYTES - len);
+ (void)memcpy(i + NUM_ECC_BYTES - len, *cp, len);
+ }
+ *cp += len;
+ return 0;
+}
+
+/*
+ * Read in signature. Signature has r and s encoded as integers.
+ */
+static int
+bootutil_decode_sig(uint8_t signature[NUM_ECC_BYTES * 2], uint8_t *cp, uint8_t *end)
+{
+ int rc;
+ size_t len;
+
+ rc = mbedtls_asn1_get_tag(&cp, end, &len,
+ MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE);
+ if (rc) {
+ return -1;
+ }
+ if (cp + len > end) {
+ return -2;
+ }
+
+ rc = bootutil_read_bigint(signature, &cp, end);
+ if (rc) {
+ return -3;
+ }
+ rc = bootutil_read_bigint(signature + NUM_ECC_BYTES, &cp, end);
+ if (rc) {
+ return -4;
+ }
+ return 0;
+}
+
+fih_int
+bootutil_verify_sig(uint8_t *hash, uint32_t hlen, uint8_t *sig, size_t slen,
+ uint8_t key_id)
+{
+ uint8_t *pubkey;
+ uint8_t *end;
+ int rc = -1;
+
+ uint8_t signature[2 * NUM_ECC_BYTES];
+
+ pubkey = (uint8_t *)bootutil_keys[key_id].key;
+ end = pubkey + *bootutil_keys[key_id].len;
+
+ rc = bootutil_import_key(&pubkey, end);
+
+ if (rc != 0) {
+ return FIH_FAILURE;
+ }
+
+ rc = bootutil_decode_sig(signature, sig, sig + slen);
+
+ if (rc != 0) {
+ return FIH_FAILURE;
+ }
+
+ if (hlen != NUM_ECC_BYTES) {
+ return FIH_FAILURE;
+ }
+
+ /* Cryptolite key ram buffer workaround */
+ size_t key_len = end - pubkey;
+ uint8_t key[EC256_KEY_SZ];
+ /* Copy key to RAM as woraround for Cryptolite*/
+ (void)memcpy((void *)key, (const void *)pubkey, key_len);
+
+ if (BOOTROM_CRYPTO_API->ecdsa_p256_signature_validate(
+ key, key_len,
+ hash, hlen,
+ signature, sizeof(signature)) == CYBOOT_CRYPTO_SUCCESS) {
+ rc = 0;
+ }
+
+ FIH_RET(fih_int_encode_zero_equality(rc));
+}
diff --git a/boot/cypress/platforms/crypto/PSC3/sha256_port.h b/boot/cypress/platforms/crypto/PSC3/sha256_port.h
new file mode 100644
index 0000000..f74fd8b
--- /dev/null
+++ b/boot/cypress/platforms/crypto/PSC3/sha256_port.h
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * \file sha256_port.h
+ * \version 1.0.0
+ * Provides port layer for SHA256 MCUBoot functions
+ ********************************************************************************
+ * \copyright
+ * (c) 2023, Cypress Semiconductor Corporation (an Infineon company) or an
+ * affiliate of Cypress Semiconductor Corporation. All rights reserved.
+ * This software, associated documentation and materials ("Software") is owned
+ * by Cypress Semiconductor Corporation or one of its affiliates ("Cypress") and
+ * is protected by and subject to worldwide patent protection (United States and
+ * foreign), United States copyright laws and international treaty provisions.
+ * Therefore, you may use this Software only as provided in the license
+ * agreement accompanying the software package from which you obtained this
+ * Software ("EULA"). If no EULA applies, then any reproduction, modification,
+ * translation, compilation, or representation of this Software is prohibited
+ * without the express written permission of Cypress.
+ * Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * Cypress reserves the right to make changes to the Software without notice.
+ * Cypress does not assume any liability arising out of the application or use
+ * of the Software or any product or circuit described in the Software. Cypress
+ * does not authorize its products for use in any products where a malfunction
+ * or failure of the Cypress product may reasonably be expected to result in
+ * significant property damage, injury or death ("High Risk Product").
+ * By including Cypress's product in a High Risk Product, the manufacturer of
+ * such system or application assumes all risk of such use and in doing so
+ * agrees to indemnify Cypress against all liability.
+ *******************************************************************************/
+
+#pragma once
+
+#include "cyboot_crypto_list.h"
+#include "cy_cryptolite_common.h"
+
+#include "cy_cryptolite_sha256.h"
+
+#define BOOTUTIL_CRYPTO_SHA256_BLOCK_SIZE (64)
+#define BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE (32)
+
+typedef cyboot_sha256_context_t bootutil_sha256_context;
+
+static inline void bootutil_sha256_init(bootutil_sha256_context *ctx)
+{
+ BOOTROM_CRYPTO_API->sha256_init(ctx);
+}
+
+static inline void bootutil_sha256_drop(bootutil_sha256_context *ctx)
+{
+ (void)ctx;
+}
+
+static inline int bootutil_sha256_update(bootutil_sha256_context *ctx,
+ const void *data,
+ uint32_t data_len)
+{
+ int ret = -1;
+ uint32_t result;
+
+ uint32_t bytes_left = data_len;
+
+ uint8_t* data_bytes = (uint8_t*)data;
+ uint8_t tmp_buf[CY_CRYPTOLITE_SHA256_BLOCK_SIZE] = {0U};
+
+ while(bytes_left > CY_CRYPTOLITE_SHA256_BLOCK_SIZE)
+ {
+ memcpy(tmp_buf, data_bytes, CY_CRYPTOLITE_SHA256_BLOCK_SIZE);
+
+ result = BOOTROM_CRYPTO_API->sha256_update(ctx, CY_REMAP_ADDRESS_CRYPTOLITE(tmp_buf), CY_CRYPTOLITE_SHA256_BLOCK_SIZE);
+
+ data_bytes += CY_CRYPTOLITE_SHA256_BLOCK_SIZE;
+
+ bytes_left -= CY_CRYPTOLITE_SHA256_BLOCK_SIZE;
+
+ if (result != CYBOOT_CRYPTO_SUCCESS)
+ {
+ return -1;
+ }
+ }
+
+ memcpy(tmp_buf, data_bytes, bytes_left);
+
+ result = BOOTROM_CRYPTO_API->sha256_update(ctx, CY_REMAP_ADDRESS_CRYPTOLITE(tmp_buf), bytes_left);
+
+ if (result == CYBOOT_CRYPTO_SUCCESS) {
+ ret = 0;
+ }
+
+ return ret;
+}
+
+static inline int bootutil_sha256_finish(bootutil_sha256_context *ctx,
+ uint8_t *output)
+{
+ int ret = -1;
+
+ uint32_t result = BOOTROM_CRYPTO_API->sha256_finish(ctx, (uint32_t*)output);
+
+ if (result == CYBOOT_CRYPTO_SUCCESS) {
+ ret = 0;
+ }
+
+ return ret;
+}
\ No newline at end of file
diff --git a/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c b/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c
index 45dd60a..f3a8f1b 100644
--- a/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c
+++ b/boot/cypress/platforms/img_confirm/CYW20829/set_img_ok.c
@@ -1,5 +1,7 @@
/********************************************************************************
- * Copyright 2021 Infineon Technologies AG
+ * Copyright 2018-2024 Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation
+ *
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +22,8 @@
#include "set_img_ok.h"
#include <flash_map_backend/flash_map_backend.h>
+#define EXT_MEM_INTERFACE_ID 0
+
extern const struct flash_area_interface external_mem_interface;
static uint8_t row_buff[FLASH_ROW_BUF_SZ];
@@ -33,9 +37,9 @@
static int read_img_ok_value(uint32_t address)
{
- uint8_t tmp;
+ uint8_t tmp = 0U;
- external_mem_interface.read(0, address, &tmp, 1);
+ external_mem_interface.read(EXT_MEM_INTERFACE_ID, address, &tmp, 1);
return tmp;
}
@@ -56,14 +60,14 @@
/* Accepting an arbitrary address */
uint32_t row_mask = external_mem_interface.get_erase_size(0) - 1U;
- rc |= external_mem_interface.read(0, address & ~row_mask, row_buff, FLASH_ROW_BUF_SZ);
+ rc |= external_mem_interface.read(EXT_MEM_INTERFACE_ID, address & ~row_mask, row_buff, FLASH_ROW_BUF_SZ);
/* Modifying the target byte */
row_buff[address & row_mask] = src;
- rc |= external_mem_interface.erase(0, address & ~row_mask, FLASH_ROW_BUF_SZ);
+ rc |= external_mem_interface.erase(EXT_MEM_INTERFACE_ID, address & ~row_mask, FLASH_ROW_BUF_SZ);
- rc |= external_mem_interface.write(0, address & ~row_mask, row_buff, FLASH_ROW_BUF_SZ);
+ rc |= external_mem_interface.write(EXT_MEM_INTERFACE_ID, address & ~row_mask, row_buff, FLASH_ROW_BUF_SZ);
return rc;
}
@@ -96,5 +100,4 @@
return rc;
}
-
#endif /* !(SWAP_DISABLED) && defined(UPGRADE_IMAGE) */
diff --git a/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c b/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c
new file mode 100644
index 0000000..cb580a9
--- /dev/null
+++ b/boot/cypress/platforms/img_confirm/PSC3/set_img_ok.c
@@ -0,0 +1,104 @@
+/********************************************************************************
+* Copyright 2021 Infineon Technologies AG
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+********************************************************************************/
+
+#if !(SWAP_DISABLED) && defined(UPGRADE_IMAGE)
+
+#include <string.h>
+#include "set_img_ok.h"
+#include "cy_flash.h"
+
+static uint8_t row_buff[FLASH_ROW_BUF_SZ];
+
+/**
+ * @brief Function reads value of img_ok flag from address.
+ *
+ * @param address - address of img_ok flag in primary img trailer
+ * @return int - value at address
+ */
+static int read_img_ok_value(uint32_t address)
+{
+ return *(volatile uint8_t *)address;
+}
+
+/**
+ * @brief Function sets img_ok flag value to primary image trailer.
+ *
+ * @param address - address of img_ok flag in primary img trailer
+ * @param value - value corresponding to img_ok set
+ *
+ * @return - operation status. 0 - set succesfully, -1 - failed to set.
+ */
+static int write_img_ok_value(uint32_t address, uint8_t value)
+{
+ int rc = -1;
+ uint32_t row_addr = 0;
+
+ uint32_t row_mask = CY_FLASH_SIZEOF_ROW /* is a power of 2 */ - 1u;
+ cy_en_flashdrv_status_t st;
+
+ /* Accepting an arbitrary address */
+ row_addr = address & ~row_mask;
+
+ /* Preserving the row */
+ (void)memcpy(row_buff, (void *)row_addr, sizeof(row_buff));
+
+ /* Modifying the target byte */
+ row_buff[address & row_mask] = value;
+
+ /* Programming the updated row back */
+ st = Cy_Flash_ProgramRow(row_addr, (const uint32_t *)row_buff);
+
+ if (CY_FLASH_DRV_SUCCESS == st) {
+ rc = 0;
+ }
+
+ return rc;
+}
+
+
+/**
+ * @brief Public function to confirm that upgraded application is operable
+ * after swap. Should be called from main code of user application.
+ * It sets mcuboot flag img_ok in primary (boot) image trailer.
+ * MCUBootApp checks img_ok flag at first reset after upgrade and
+ * validates successful swap.
+ *
+ * @param address - address of img_ok flag in primary img trailer
+ * @param value - value corresponding to img_ok set
+ *
+ * @return - operation status. 1 - already set, 0 - set succesfully,
+ * -1 - failed to set.
+ */
+int set_img_ok(uint32_t address, uint8_t value)
+{
+ int32_t rc = -1;
+
+ /* Write Image OK flag to the slot trailer, so MCUBoot-loader
+ * will not revert new image
+ */
+
+ if (read_img_ok_value(address) != value) {
+ rc = write_img_ok_value(address, value);
+ }
+ else {
+ rc = IMG_OK_ALREADY_SET;
+ }
+
+ return rc;
+}
+
+#endif /* !(SWAP_DISABLED) && defined(UPGRADE_IMAGE) */
diff --git a/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h b/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h
new file mode 100644
index 0000000..2160e73
--- /dev/null
+++ b/boot/cypress/platforms/memory/PSC3/flash_map_backend_platform.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018 Nordic Semiconductor ASA
+ * Copyright (c) 2015 Runtime Inc
+ * Copyright (c) 2020 Cypress Semiconductor Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ /*******************************************************************************/
+
+#ifndef FLASH_MAP_BACKEND_PLATFORM_H
+#define FLASH_MAP_BACKEND_PLATFORM_H
+
+#include <assert.h>
+
+#include "cy_flash.h"
+#include "flash_map_backend/flash_map_backend.h"
+#include "memorymap.h"
+
+static inline const struct flash_area_interface* flash_area_get_api(uint8_t fd_id)
+{
+
+ const struct flash_area_interface* interface = NULL;
+
+ extern const struct flash_area_interface internal_mem_interface;
+
+ switch (fd_id) {
+ case FLASH:
+ interface = &internal_mem_interface;
+ break;
+
+ default:
+ assert(false);
+ interface = NULL;
+ break;
+ }
+
+ return interface;
+}
+
+#endif /* FLASH_MAP_BACKEND_PLATFORM_H */
diff --git a/boot/cypress/platforms/memory/PSC3/flashmap/overwrite_single_flash.json b/boot/cypress/platforms/memory/PSC3/flashmap/overwrite_single_flash.json
new file mode 100644
index 0000000..8552bec
--- /dev/null
+++ b/boot/cypress/platforms/memory/PSC3/flashmap/overwrite_single_flash.json
@@ -0,0 +1,32 @@
+{
+ "bootloader":
+ {
+ "bootloader_area":
+ {
+ "address" : "0x32000000",
+ "size" : "0x18000"
+ },
+
+ "ram":
+ {
+ "address" : "0x34000000",
+ "size" : "0xF000"
+ }
+ },
+
+ "application_1":
+ {
+ "slots":
+ {
+ "boot" : "0x32018000",
+ "upgrade" : "0x32028000",
+ "size" : "0x10000"
+ },
+
+ "ram":
+ {
+ "address" : "0x34000000",
+ "size" : "0xF000"
+ }
+ }
+}
diff --git a/boot/cypress/platforms/memory/PSC3/flashmap/platform.json b/boot/cypress/platforms/memory/PSC3/flashmap/platform.json
new file mode 100644
index 0000000..a3f4726
--- /dev/null
+++ b/boot/cypress/platforms/memory/PSC3/flashmap/platform.json
@@ -0,0 +1,12 @@
+{
+ "memory_regions":
+ [
+ {
+ "address" : "0x32000000",
+ "size" : "0x40000",
+ "erase_size" : "0x200",
+ "erase_value" : "0x00",
+ "mem_type" : "FLASH"
+ }
+ ]
+}
diff --git a/boot/cypress/platforms/memory/PSC3/flashmap/platform_properties.json b/boot/cypress/platforms/memory/PSC3/flashmap/platform_properties.json
new file mode 100644
index 0000000..335a148
--- /dev/null
+++ b/boot/cypress/platforms/memory/PSC3/flashmap/platform_properties.json
@@ -0,0 +1,16 @@
+{
+ "version": "1.0",
+ "description": "Properties of the platform",
+ "target": ["PSC3"],
+ "security_setup": {
+ "hw_rollback_prot": {
+ "description" :"HW anti roll-back counter support"
+ },
+ "hw_crypto_acceleration": {
+ "description" :"HW crypto acceleration support"
+ },
+ "keys": {
+ "TBD": "TBD"
+ }
+ }
+}
\ No newline at end of file
diff --git a/boot/cypress/platforms/memory/PSC3/internal_memory.c b/boot/cypress/platforms/memory/PSC3/internal_memory.c
new file mode 100644
index 0000000..320bcd3
--- /dev/null
+++ b/boot/cypress/platforms/memory/PSC3/internal_memory.c
@@ -0,0 +1,182 @@
+/********************************************************************************
+ * \copyright
+ * (c) (2016-2023), Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *******************************************************************************/
+
+#include <stdint.h>
+
+#include "bootutil/bootutil.h"
+#include "cy_flash.h"
+#include "cyboot_flash_list.h"
+#include "flash_map_backend_platform.h"
+#include "memorymap.h"
+
+static int erase(uint8_t fa_device_id, uintptr_t addr, uint32_t len);
+
+static uint32_t get_min_erase_size(uint8_t fa_device_id)
+{
+ return flash_devices[fa_device_id].erase_size;
+}
+
+static uint8_t get_erase_val(uint8_t fa_device_id)
+{
+ return flash_devices[fa_device_id].erase_val;
+}
+
+static inline uint32_t get_base_address(uint8_t fa_device_id)
+{
+ return flash_devices[fa_device_id].address;
+}
+
+static uint32_t get_align_size(uint8_t fa_device_id)
+{
+ return flash_devices[fa_device_id].erase_size;
+}
+
+/*
+ * Reads `len` bytes of flash memory at `off` to the buffer at `dst`
+ */
+static int read(uint8_t fa_device_id, uintptr_t addr, void *dst, uint32_t len)
+{
+ (void)fa_device_id;
+
+ int rc = -1;
+ void *src;
+ void *result = NULL;
+
+ /* Convert from uintptr_t to void*, MISRA C 11.6 */
+ (void)memcpy((void *)&src, (void const *)&addr, sizeof(void *));
+ /* flash read by simple memory copying */
+ result = memcpy(dst, src, (size_t)len);
+ if (result == dst) {
+ rc = 0;
+ }
+
+ return rc;
+}
+
+/*
+ * Writes `len` bytes of flash memory at `off` from the buffer at `src`
+ */
+static int write(uint8_t fa_device_id, uintptr_t addr, const void *src,
+ uint32_t len)
+{
+ (void)fa_device_id;
+
+ int rc = BOOT_EFLASH;
+ uintptr_t write_end_addr = 0u;
+ const uint32_t *row_ptr = NULL;
+ uint32_t row_number = 0u;
+ uint32_t row_addr = 0u;
+ uint32_t write_sz = CY_FLASH_SIZEOF_ROW;
+
+ if (src != NULL) {
+ write_end_addr = addr + len;
+
+ if (len % write_sz != 0u) {
+ rc = BOOT_EBADARGS;
+ } else if (addr % write_sz != 0u) {
+ rc = BOOT_EBADARGS;
+ } else {
+ /* do nothing */
+ }
+ if (rc != BOOT_EBADARGS) {
+ row_number = (write_end_addr - addr) / write_sz;
+ row_addr = addr;
+
+ row_ptr = (const uint32_t *)src;
+
+ for (uint32_t i = 0; i < row_number; i++) {
+ /* Flash requirement to have extra 16 bytes of space for write API's */
+ union
+ {
+ uint8_t u8[CY_FLASH_SIZEOF_ROW + 16U];
+ uint32_t u32[(CY_FLASH_SIZEOF_ROW + 16U) / 4U];
+ } buf;
+
+ (void) memcpy((void*)buf.u8, (const void*)row_ptr, CY_FLASH_SIZEOF_ROW);
+
+ if (Cy_Flash_ProgramRow(row_addr, buf.u32) !=
+ CY_FLASH_DRV_SUCCESS) {
+ rc = BOOT_EFLASH;
+ break;
+ } else {
+ rc = 0;
+ }
+ row_addr += (uint32_t)write_sz;
+ row_ptr = row_ptr + write_sz / 4U;
+ }
+ }
+ }
+
+ return rc;
+}
+
+/*< Erases `len` bytes of flash memory at `off` */
+static int erase(uint8_t fa_device_id, uintptr_t addr, uint32_t len)
+{
+ int rc = -1;
+ uint32_t row_addr = 0u;
+ uint32_t erase_sz = flash_devices[fa_device_id].erase_size;
+ uintptr_t erase_end_addr = addr + len;
+ uint32_t row_start_addr = (addr / erase_sz) * erase_sz;
+ uint32_t row_end_addr = (erase_end_addr / erase_sz) * erase_sz;
+ uint32_t row_number = (row_end_addr - row_start_addr) / erase_sz;
+
+ /* assume single row needs to be erased */
+ if (row_start_addr == row_end_addr) {
+ row_number = 1U;
+ }
+
+ while (row_number != 0u) {
+ row_number--;
+ row_addr = row_start_addr + row_number * (uint32_t)erase_sz;
+
+ if (Cy_Flash_EraseRow(row_addr) != CY_FLASH_DRV_SUCCESS) {
+ rc = BOOT_EFLASH;
+ break;
+ } else {
+ rc = 0;
+ }
+ }
+
+ return rc;
+}
+
+static int open(uint8_t fa_device_id)
+{
+ (void)fa_device_id;
+
+ return 0;
+}
+
+static void close(uint8_t fa_device_id)
+{
+ (void)fa_device_id;
+}
+
+const struct flash_area_interface internal_mem_interface = {
+ .open = &open,
+ .close = &close,
+ .read = &read,
+ .write = &write,
+ .erase = &erase,
+ .get_erase_val = &get_erase_val,
+ .get_erase_size = &get_min_erase_size,
+ .get_base_address = &get_base_address,
+ .get_align_size = &get_align_size};
diff --git a/boot/cypress/platforms/memory/PSC3/linker.ld b/boot/cypress/platforms/memory/PSC3/linker.ld
new file mode 100644
index 0000000..9588295
--- /dev/null
+++ b/boot/cypress/platforms/memory/PSC3/linker.ld
@@ -0,0 +1,310 @@
+/***************************************************************************//**
+* \file linker.ld
+* \version 1.0.0
+*
+* Linker file for the GNU C compiler.
+*
+* The main purpose of the linker script is to describe how the sections in the
+* input files should be mapped into the output file, and to control the memory
+* layout of the output file.
+*
+* \note The entry point location is fixed and starts at 0x10000000. The valid
+* application image should be placed there.
+*
+* \note The linker files included with the PDL template projects must be generic
+* and handle all common use cases. Your project may not use every section
+* defined in the linker files. In that case you may see warnings during the
+* build process. In your project, you can simply comment out or remove the
+* relevant code in the linker file.
+*
+********************************************************************************
+* \copyright
+* Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+* an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
+SEARCH_DIR(.)
+GROUP(-lgcc -lc -lnosys)
+ENTRY(Reset_Handler)
+
+/* The size of the stack section at the end of CM33 SRAM */
+STACK_SIZE = 0x8000;
+
+RAMVECTORS_ALIGNMENT = 128;
+
+/* Force symbol to be entered in the output file as an undefined symbol. Doing
+* this may, for example, trigger linking of additional modules from standard
+* libraries. You may list several symbols for each EXTERN, and you may use
+* EXTERN multiple times. This command has the same effect as the -u command-line
+* option.
+*/
+EXTERN(Reset_Handler)
+
+/* _base_SRAM = 0x34000000; sbus ram secure offset */
+_base_SRAM = RAM_ORIGIN; /* RAM_ORIGIN passed from makefile, 0x34000000 */
+/* _size_SRAM = 0x00010000; */
+_size_SRAM = RAM_SIZE; /* RAM_SIZE passed from makefile */
+/* _base_CODE_FLASH_VMA = 0x32000000; cbus flash secure offset */
+_base_CODE_FLASH_VMA = FLASH_ORIGIN + HEADER_SIZE; /* FLASH_ORIGIN passed from makefile */
+/* _base_CODE_FLASH_LMA = 0x32000000; sbus flash secure offset */
+_base_CODE_FLASH_LMA = FLASH_ORIGIN + HEADER_SIZE;
+/* _size_CODE_FLASH = 0x00040000; */
+_size_CODE_FLASH = FLASH_SIZE; /* FLASH_SIZE passed from makefile */
+
+
+/* The MEMORY section below describes the location and size of blocks of memory in the target.
+* Use this section to specify the memory regions available for allocation.
+*/
+MEMORY
+{
+ ram (rwx) : ORIGIN = _base_SRAM, LENGTH = _size_SRAM
+ flash (rx) : ORIGIN = _base_CODE_FLASH_VMA, LENGTH = _size_CODE_FLASH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a libnosys.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be defined in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __end__
+ * end
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ */
+
+
+SECTIONS
+{
+ /* Cortex-M33 application flash area */
+ .text ORIGIN(flash): AT (_base_CODE_FLASH_LMA)
+ {
+ /* Cortex-M33 flash vector table */
+ __Vectors = . ;
+ KEEP(*(.vectors))
+ . = ALIGN(4);
+ __Vectors_End = .;
+ __Vectors_Size = __Vectors_End - __Vectors;
+ __end__ = .;
+
+ . = ALIGN(4);
+ *(.text*)
+
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ /* Read-only code (constants). */
+ *(.rodata .rodata.* .constdata .constdata.* .conststring .conststring.*)
+
+ KEEP(*(.eh_frame*))
+ } > flash
+
+
+ .ARM.extab :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > flash
+
+ __exidx_start = .;
+
+ .ARM.exidx :
+ {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > flash
+ __exidx_end = .;
+
+
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+
+ /* Copy interrupt vectors from flash to RAM */
+ LONG (__Vectors) /* From */
+ LONG (__ram_vectors_start__) /* To */
+ LONG ((__Vectors_End - __Vectors) / 4) /* Size */
+
+ /* Copy data section to RAM */
+ LONG (__etext) /* From */
+ LONG (__data_start__) /* To */
+ LONG ((__data_end__ - __data_start__) / 4) /* Size */
+
+ __copy_table_end__ = .;
+ } > flash
+
+
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG ((__bss_end__ - __bss_start__) / 4)
+ __zero_table_end__ = .;
+ } > flash
+
+ __etext = . ;
+
+
+ .ramVectors (NOLOAD) : ALIGN(RAMVECTORS_ALIGNMENT)
+ {
+ __ram_vectors_start__ = .;
+ KEEP(*(.ram_vectors))
+ __ram_vectors_end__ = .;
+ } > ram
+
+
+ .data __ram_vectors_end__ :AT(_base_CODE_FLASH_LMA + __etext - ORIGIN(flash))
+ {
+ . = ALIGN(4);
+ __data_start__ = .;
+
+ *(vtable)
+ *(.data*)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+ . = ALIGN(4);
+
+ KEEP(*(.cy_ramfunc*))
+ . = ALIGN(4);
+
+ __data_end__ = .;
+
+ } > ram
+
+
+ /* Place variables in the section that should not be initialized during the
+ * device startup.
+ */
+ .noinit (NOLOAD) : ALIGN(8)
+ {
+ KEEP(*(.noinit))
+ } > ram
+
+
+ /* The uninitialized global or static variables are placed in this section.
+ *
+ * The NOLOAD attribute tells linker that .bss section does not consume
+ * any space in the image. The NOLOAD attribute changes the .bss type to
+ * NOBITS, and that makes linker to A) not allocate section in memory, and
+ * B) put information to clear the section with all zeros during application
+ * loading.
+ *
+ * Without the NOLOAD attribute, the .bss section might get PROGBITS type.
+ * This makes linker to A) allocate zeroed section in memory, and B) copy
+ * this section to RAM during application loading.
+ */
+ .bss (NOLOAD):
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > ram
+
+
+ .heap (NOLOAD):
+ {
+ __HeapBase = .;
+ __end__ = .;
+ end = __end__;
+ KEEP(*(.heap*))
+ . = ORIGIN(ram) + LENGTH(ram) - STACK_SIZE;
+ __HeapLimit = .;
+ } > ram
+
+
+ /* .stack_dummy section doesn't contains any symbols. It is only
+ * used for linker to calculate size of stack sections, and assign
+ * values to stack symbols later */
+ .stack_dummy (NOLOAD):
+ {
+ KEEP(*(.stack*))
+ } > ram
+
+
+ /* Set stack top to end of RAM, and stack limit move down by
+ * size of stack_dummy section */
+ . = ALIGN(32);
+ __StackTop = ORIGIN(ram) + LENGTH(ram);
+ __StackLimit = __StackTop - STACK_SIZE;
+ PROVIDE(__stack = __StackTop);
+
+ /* Check if data + heap + stack exceeds RAM limit */
+ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+
+}
+/* EOF */
diff --git a/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h b/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h
index b6f601b..614ce37 100644
--- a/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h
+++ b/boot/cypress/platforms/memory/XMC7000/flash_map_backend_platform.h
@@ -36,21 +36,40 @@
static inline const struct flash_area_interface* flash_area_get_api(uint8_t fd_id)
{
+#if defined(USE_INTERNAL_FLASH_CODE_LARGE) || defined(USE_INTERNAL_FLASH_CODE_SMALL)
extern const struct flash_area_interface internal_mem_interface;
+#endif /* defined(USE_INTERNAL_FLASH_CODE_LARGE) || defined(USE_INTERNAL_FLASH_CODE_SMALL) */
+
+#if defined(USE_INTERNAL_FLASH_WORK_LARGE) || defined(USE_INTERNAL_FLASH_WORK_SMALL)
extern const struct flash_area_interface internal_mem_eeprom_interface;
+#endif /* defined(USE_INTERNAL_FLASH_WORK_LARGE) || defined(USE_INTERNAL_FLASH_WORK_SMALL) */
const struct flash_area_interface* interface = NULL;
switch (fd_id) {
+#if defined(USE_INTERNAL_FLASH_CODE_LARGE)
case INTERNAL_FLASH_CODE_LARGE:
+ interface = &internal_mem_interface;
+ break;
+#endif /* defined(USE_INTERNAL_FLASH_CODE_LARGE) */
+
+#if defined(USE_INTERNAL_FLASH_CODE_SMALL)
case INTERNAL_FLASH_CODE_SMALL:
interface = &internal_mem_interface;
break;
+#endif /* defined(USE_INTERNAL_FLASH_CODE_SMALL) */
+#if defined(USE_INTERNAL_FLASH_WORK_LARGE)
case INTERNAL_FLASH_WORK_LARGE:
+ interface = &internal_mem_eeprom_interface;
+ break;
+#endif /* defined(USE_INTERNAL_FLASH_WORK_LARGE) */
+
+#if defined(USE_INTERNAL_FLASH_WORK_SMALL)
case INTERNAL_FLASH_WORK_SMALL:
interface = &internal_mem_eeprom_interface;
break;
+#endif /* defined(USE_INTERNAL_FLASH_WORK_SMALL) */
default:
assert(false);
diff --git a/boot/cypress/platforms/memory/cy_flash_map.c b/boot/cypress/platforms/memory/cy_flash_map.c
index b818724..52e69cb 100644
--- a/boot/cypress/platforms/memory/cy_flash_map.c
+++ b/boot/cypress/platforms/memory/cy_flash_map.c
@@ -38,27 +38,54 @@
#include "mcuboot_config/mcuboot_config.h"
#include "memorymap.h"
-/*
- * Macro takes flash API parameters fa, off and len
- * Checks flash area boundaries considering off and len
- * Returns absolute address of flash area memory where
- * operation should execute
- */
-#define MEM_VALIDATE_AND_GET_ADDRES(fa, off, len, addr, rc) \
- uintptr_t mem_base = 0u; \
- if ((fa) != NULL) { \
- if ((off) > (fa)->fa_size || \
- (len) > (fa)->fa_size || \
- (off) + (len) > (fa)->fa_size) { \
- (rc) = BOOT_EBADARGS; \
- } \
- if (flash_area_get_api((fa)->fa_device_id) != NULL) { \
- (rc) = flash_device_base((fa)->fa_device_id, &mem_base); \
- if ((0 == (rc)) && (mem_base != 0u)) { \
- (addr) = mem_base + (fa)->fa_off + (off); \
- } \
- } \
- }
+static bool flash_validate_boundaries(const struct flash_area *fa, uint32_t off, uint32_t len)
+{
+ bool is_valid = false;
+
+ do {
+ if ((fa) == NULL) {
+ break;
+ }
+
+ if ((off) > (fa)->fa_size ||
+ (len) > (fa)->fa_size ||
+ (off) + (len) > (fa)->fa_size) {
+ /* TODO: FWSECURITY-5960 */
+ }
+
+ is_valid = true;
+
+ } while (false);
+
+ return is_valid;
+}
+
+static uintptr_t flash_get_abs_address(const struct flash_area *fa, uint32_t off)
+{
+ uintptr_t addr = 0u;
+ uintptr_t mem_base = 0u;
+
+ do {
+ if ((fa) == NULL) {
+ break;
+ }
+
+ if (flash_area_get_api(fa->fa_device_id) == NULL) {
+ break;
+ }
+
+ if (flash_device_base(fa->fa_device_id, &mem_base) != 0) {
+ break;
+ }
+
+ if (mem_base != 0u) {
+ addr = mem_base + fa->fa_off + off;
+ }
+
+ } while (false);
+
+ return addr;
+}
/*
* PORTING GUIDE: REQUIRED
@@ -124,13 +151,17 @@
uint32_t len)
{
int rc = -1;
- uintptr_t addr = 0u;
-
- MEM_VALIDATE_AND_GET_ADDRES(fa, off, len, addr, rc);
- if (addr != 0u) {
- rc = flash_area_get_api(fa->fa_device_id)->read(fa->fa_device_id, addr, dst, len);
- } else {
- /* do nothing */
+ if (fa != NULL) {
+ if (flash_validate_boundaries(fa, off, len)) {
+ uintptr_t addr = flash_get_abs_address(fa, off);
+ if (addr != 0u) {
+ if (flash_area_get_api(fa->fa_device_id) != NULL) {
+ rc = flash_area_get_api(fa->fa_device_id)->read(fa->fa_device_id, addr, dst, len);
+ }
+ } else {
+ /* do nothing */
+ }
+ }
}
return rc;
@@ -144,13 +175,18 @@
const void *src, uint32_t len)
{
int rc = BOOT_EFLASH;
- uintptr_t addr = 0u;
- MEM_VALIDATE_AND_GET_ADDRES(fa, off, len, addr, rc);
- if (addr != 0u) {
- rc = flash_area_get_api(fa->fa_device_id)->write(fa->fa_device_id, addr, src, len);
- } else {
- /* do nothing */
+ if (fa != NULL) {
+ if (flash_validate_boundaries(fa, off, len)) {
+ uintptr_t addr = flash_get_abs_address(fa, off);
+ if (addr != 0u) {
+ if (flash_area_get_api(fa->fa_device_id) != NULL) {
+ rc = flash_area_get_api(fa->fa_device_id)->write(fa->fa_device_id, addr, src, len);
+ }
+ } else {
+ /* do nothing */
+ }
+ }
}
return rc;
@@ -163,13 +199,15 @@
int flash_area_erase(const struct flash_area *fa, uint32_t off, uint32_t len)
{
int rc = -1;
- uintptr_t addr = 0u;
-
- MEM_VALIDATE_AND_GET_ADDRES(fa, off, len, addr, rc);
- if (addr != 0u) {
- rc = flash_area_get_api(fa->fa_device_id)->erase(fa->fa_device_id, addr, len);
- } else {
- /* do nothing */
+ if (fa != NULL) {
+ uintptr_t addr = flash_get_abs_address(fa, off);
+ if (addr != 0u) {
+ if (flash_area_get_api(fa->fa_device_id) != NULL) {
+ rc = flash_area_get_api(fa->fa_device_id)->erase(fa->fa_device_id, addr, len);
+ }
+ } else {
+ /* do nothing */
+ }
}
return rc;
diff --git a/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c b/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c
index 7f32826..4612904 100644
--- a/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c
+++ b/boot/cypress/platforms/security_counter/CYW20829/cy_security_cnt_platform.c
@@ -136,7 +136,7 @@
bit_mask_to_check_others_images <<= start_bit_for_image_id;
/* Return an error if recieved full NV-counter has any bits of others image_id */
- if(FIH_TRUE == fih_uint_eq(fih_uint_encode(
+ if(fih_uint_eq(fih_uint_encode(
(uint32_t)(~bit_mask_to_check_others_images & fih_uint_decode(nv_counter))), FIH_UINT_ZERO)) {
/* Extract number of set bits from full NV-counter in the upgrade image */
*extracted_img_cnt = counter_extract(image_id, nv_counter);
@@ -186,7 +186,7 @@
}
if (CY_EFUSE_SUCCESS == efuse_stat) {
- if (FIH_TRUE == fih_uint_eq(nv_counter_secure, fih_uint_encode(nv_counter))) {
+ if (fih_uint_eq(nv_counter_secure, fih_uint_encode(nv_counter))) {
*security_cnt = counter_extract(image_id, fih_uint_encode(nv_counter));
@@ -228,7 +228,7 @@
*/
FIH_CALL(platform_security_counter_get, fih_rc, image_id, &efuse_img_counter);
- if (FIH_TRUE == fih_eq(fih_rc, FIH_SUCCESS)) {
+ if (fih_eq(fih_rc, FIH_SUCCESS)) {
/* Compare the new image's security counter value against the
* stored security counter value for that image index.
@@ -237,8 +237,8 @@
BOOT_LOG_DBG("image_id = %u, packet_img_counter = %u, efuse_img_counter = %u\n",
image_id, fih_uint_decode(packet_img_counter), fih_uint_decode(efuse_img_counter));
- if (FIH_TRUE == fih_uint_gt(packet_img_counter, efuse_img_counter) &&
- FIH_TRUE == fih_uint_le(packet_img_counter, fih_uint_encode(MAX_SEC_COUNTER_VAL))) {
+ if (fih_uint_gt(packet_img_counter, efuse_img_counter) &&
+ fih_uint_le(packet_img_counter, FIH_UINT_INIT(MAX_SEC_COUNTER_VAL))) {
BOOT_LOG_INF("service_app is called\n", __func__ );
/* Attention: This function initiates system reset */
diff --git a/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c b/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c
index ede6ac7..5afd417 100644
--- a/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c
+++ b/boot/cypress/platforms/security_counter/CYW20829/cy_service_app.c
@@ -149,7 +149,7 @@
(uint8_t *)&reprov_app_desc, sizeof(reprov_app_desc));
if (0 == rc) {
/* Set code to tell BootROM to launch a service app downloaded to RAM from an external memory */
- SRSS->BOOT_DLM_CTL = CYBOOT_REQUEST_EXT_APP;
+ SRSS->TST_DEBUG_CTL = CYBOOT_REQUEST_EXT_APP;
/* Trigger device reset */
__NVIC_SystemReset();
}
@@ -161,13 +161,13 @@
* Checks the service application completion status.
*
* Reads the service app descriptor from the flash. If it is populated, erases the service app
-* descriptor and verifies that the application status in the BOOT_DLM_CTL2 register
+* descriptor and verifies that the application status in the TST_DEBUG_STATUS register
* contains the CYAPP_SUCCESS value.
* Function limitations:
* - assumes that the service app descriptor is located in external flash;
* - erases the entire sector where the service app descriptor is located.
*
-* Returns 0 if the service app descriptor is empty or BOOT_DLM_CTL2 register
+* Returns 0 if the service app descriptor is empty or TST_DEBUG_STATUS register
* contains the CYAPP_SUCCESS value. Otherwise it returns -1.
*/
int32_t check_service_app_status(void)
@@ -186,7 +186,7 @@
FLASH_DEVICE_EXTERNAL_FLASH(0),
(CY_XIP_BASE + SERVICE_APP_DESC_OFFSET), qspi_get_erase_size());
if (0 == rc) {
- if (CYAPP_SUCCESS == SRSS->BOOT_DLM_CTL2) {
+ if (CYAPP_SUCCESS == SRSS->TST_DEBUG_STATUS) {
rc = 0;
} else {
rc = -1;
diff --git a/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c
new file mode 100644
index 0000000..a786702
--- /dev/null
+++ b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2020 Arm Limited.
+ * Copyright (c) 2021 Infineon Technologies AG
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#if defined MCUBOOT_HW_ROLLBACK_PROT
+
+#include <stdint.h>
+#include <string.h>
+
+#include "cy_security_cnt_platform.h"
+#include "rollback_counter.h"
+#include "cyboot_crypto_list.h"
+#include "cy_flash.h"
+#include "cy_cryptolite_common.h"
+
+/**
+ * Reads a data corresponding to security counter which is stored in
+ * efuses of chip and converts it actual value of security counter
+ *
+ * @param image_id Image id counter assisiated with
+ * @param security_cnt Pointer to a variable, where security counter value would be stored
+ *
+ * @return FIH_SUCCESS on success; FIH_FAILURE on failure.
+ */
+fih_int platform_security_counter_get(uint32_t image_id, fih_uint *security_cnt)
+{
+ (void)image_id;
+
+ fih_int fih_rc = FIH_SUCCESS;
+ uint32_t result;
+
+ cy_rbc_recover_rollback_counter();
+
+ result = cy_rbc_read_rollback_counter(image_id);
+
+ *security_cnt = fih_uint_encode(result);
+
+ FIH_RET(fih_rc);
+}
+
+/**
+ * Updates the stored value of a given image's security counter with a new
+ * security counter value if the new one is greater.
+ *
+ * @param image_id Image id counter assisiated with
+ * @param img_security_cnt Counter value
+ * @param custom_data Pointer to supplemental data (API), not used in this implementation
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int32_t platform_security_counter_update(uint32_t image_id, fih_uint img_security_cnt, uint8_t *custom_data)
+{
+ (void) custom_data;
+
+ int32_t rc = -1;
+
+ if (cy_rbc_update_rollback_counter(image_id, fih_uint_decode(img_security_cnt)) == CY_RBC_SUCCESS)
+ {
+ rc = 0;
+ }
+
+ return rc;
+}
+
+cy_rbc_result_t cy_rbc_calc_check_sum(const uint32_t *data, uint32_t dataSize, uint8_t *checkSum)
+{
+ cy_rbc_result_t rc = CY_RBC_SUCCESS;
+
+ do {
+ cyboot_sha256_context_t ctx = {0};
+ cyboot_hash_result_t hash;
+
+ if (BOOTROM_CRYPTO_API->sha256_init(&ctx) != CYBOOT_CRYPTO_SUCCESS) {
+ rc = CY_RBC_INVALID;
+ break;
+ }
+
+ if (BOOTROM_CRYPTO_API->sha256_update(&ctx, (uint8_t*)CY_REMAP_ADDRESS_CRYPTOLITE(data), dataSize) != CYBOOT_CRYPTO_SUCCESS) {
+ rc = CY_RBC_INVALID;
+ break;
+ }
+
+ if (BOOTROM_CRYPTO_API->sha256_finish(&ctx, hash) != CYBOOT_CRYPTO_SUCCESS) {
+ rc = CY_RBC_INVALID;
+ break;
+ }
+
+ memcpy(checkSum, hash, sizeof(hash));
+
+ } while (false);
+
+ return rc;
+}
+
+cy_rbc_result_t cy_rbc_program(const uint8_t *src, uintptr_t offset)
+{
+ uint32_t buf[(MEMORY_ALIGN + 16) / 4U];
+
+ memcpy(buf, src, MEMORY_ALIGN);
+
+ if (Cy_Flash_EraseRow(offset) == CY_FLASH_DRV_SUCCESS) {
+ if (Cy_Flash_ProgramRow(offset, buf) == CY_FLASH_DRV_SUCCESS) {
+ return CY_RBC_SUCCESS;
+ }
+ }
+
+ return CY_RBC_INVALID;
+}
+
+cy_rbc_result_t cy_rbc_erase(uintptr_t offset)
+{
+ if (Cy_Flash_EraseRow(offset) == CY_FLASH_DRV_SUCCESS) {
+ return CY_RBC_SUCCESS;
+ }
+
+ return CY_RBC_INVALID;
+}
+
+bool cy_rbc_is_erased(const uint8_t *data)
+{
+ for (uint32_t i = 0U; i < MEMORY_ALIGN; i++) {
+ if (data[i] != 0xFF) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+#endif /* defined MCUBOOT_HW_ROLLBACK_PROT */
diff --git a/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h
new file mode 100644
index 0000000..75f17cf
--- /dev/null
+++ b/boot/cypress/platforms/security_counter/PSC3/cy_security_cnt_platform.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2020 Arm Limited.
+ * Copyright (c) 2021 Infineon Technologies AG
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CY_SECURITY_CNT_PLATFORM_H
+#define CY_SECURITY_CNT_PLATFORM_H
+
+#if defined MCUBOOT_HW_ROLLBACK_PROT
+
+#include "bootutil/fault_injection_hardening.h"
+
+/**
+ * Reads a data corresponding to security counter which is stored in
+ * efuses of chip and converts it actual value of security conter
+ *
+ * @param image_id Image ID of counter to get value
+ * @param security_cnt Pointer to a variable, where security conter value would be stored
+ *
+ * @return FIH_SUCCESS on success; FIH_FAILURE on failure.
+ */
+fih_int platform_security_counter_get(uint32_t image_id, fih_uint *security_cnt);
+
+/**
+ * Updates the stored value of a given image's security counter with a new
+ * security counter value if the new one is greater.
+ *
+ * @param image_id Image ID of counter to update value
+ * @param img_security_cnt Security conter value of image
+ * @param custom_data Supplemental data
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int32_t platform_security_counter_update(uint32_t image_id, fih_uint img_security_cnt, uint8_t *custom_data);
+
+#endif /* MCUBOOT_HW_ROLLBACK_PROT */
+
+#endif /* CY_SECURITY_CNT_PLATFORM_H */
diff --git a/boot/cypress/platforms/security_counter/PSC3/rollback_counter.c b/boot/cypress/platforms/security_counter/PSC3/rollback_counter.c
new file mode 100644
index 0000000..507c382
--- /dev/null
+++ b/boot/cypress/platforms/security_counter/PSC3/rollback_counter.c
@@ -0,0 +1,258 @@
+#include "rollback_counter.h"
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdalign.h>
+
+/* Platform defined macro
+ #define CY_RBC_ROLLBACK_COUNTERS_NUM - platform defined counters amount
+ #define CY_RBC_CHECKSUM_LENGTH - platform defined CRC size
+ #define CY_RBC_ALIGN - platform defined memory alignment
+*/
+
+#if (defined(CY_RBC_ROLLBACK_COUNTERS_NUM)) && (defined(CY_RBC_CHECKSUM_LENGTH)) && (defined(CY_RBC_ALIGN))
+
+
+/* Should be aligned to memory row and be one row in size */
+typedef struct
+{
+ uint32_t counters[CY_RBC_ROLLBACK_COUNTERS_NUM];
+ uint32_t checkSum[CY_RBC_CHECKSUM_LENGTH / 4U];
+} cy_rbc_t;
+
+typedef union
+{
+ cy_rbc_t data;
+ volatile uint8_t page[CY_RBC_ALIGN];
+} cy_rbc_page_t;
+
+#define CY_RBC_START_ADDR (0x3203FC00UL)
+
+#define CY_RBC_MAIN ((cy_rbc_t*)(CY_RBC_START_ADDR))
+#define CY_RBC_BACKUP ((cy_rbc_t*)(CY_RBC_START_ADDR + 0x200UL))
+
+static bool cy_rbc_is_checksum_valid(const cy_rbc_t *counters);
+static cy_rbc_result_t cy_rbc_erase_backup(void);
+static cy_rbc_result_t cy_rbc_compare_backup(const cy_rbc_t *cntrs1, const cy_rbc_t *cntrs2);
+static cy_rbc_result_t cy_rbc_apply_backup(void);
+
+uint32_t cy_rbc_read_rollback_counter(uint8_t counter)
+{
+ uint32_t value = 0;
+
+ if(counter < CY_RBC_ROLLBACK_COUNTERS_NUM)
+ {
+ value = CY_RBC_MAIN->counters[counter];
+ }
+
+ return value;
+}
+
+cy_rbc_result_t cy_rbc_update_rollback_counter(uint8_t counter, uint32_t value)
+{
+ uint32_t actValue;
+ cy_rbc_result_t rc = CY_RBC_INVALID;
+ cy_rbc_t tempCntrs = {0};
+
+ if(counter < CY_RBC_ROLLBACK_COUNTERS_NUM)
+ {
+ actValue = CY_RBC_MAIN->counters[counter];
+ if(value > actValue)
+ {
+ /* Get current counters values and update the requested counter */
+ tempCntrs = *CY_RBC_MAIN;
+ tempCntrs.counters[counter] = value;
+
+ /* Calculate checksum for updated counters */
+ rc = cy_rbc_calc_check_sum(tempCntrs.counters, sizeof(tempCntrs.counters), (uint8_t*)tempCntrs.checkSum);
+
+ /* Program updated counters to the backup row */
+ if(CY_RBC_SUCCESS == rc)
+ {
+ rc = CY_RBC_INVALID;
+ rc = cy_rbc_program((uint8_t *)&tempCntrs, (uintptr_t)CY_RBC_BACKUP);
+ }
+
+ /* Copy the backup row to the main row and erase the backup */
+ if(CY_RBC_SUCCESS == rc)
+ {
+ rc = cy_rbc_apply_backup();
+ }
+ }
+ else if(value == actValue)
+ {
+ rc = CY_RBC_SUCCESS;
+ }
+ else
+ {
+ /* continue */
+ }
+ }
+
+ return rc;
+}
+
+cy_rbc_result_t cy_rbc_clear(void)
+{
+ cy_rbc_result_t rc = CY_RBC_INVALID;
+
+ rc = cy_rbc_erase((uintptr_t)CY_RBC_MAIN);
+
+ if(rc == CY_RBC_SUCCESS)
+ {
+ rc = CY_RBC_INVALID;
+ rc = cy_rbc_erase((uintptr_t)CY_RBC_BACKUP);
+ }
+
+ return rc;
+}
+
+cy_rbc_result_t cy_rbc_recover_rollback_counter(void)
+{
+ cy_rbc_result_t rc = CY_RBC_INVALID;
+
+ if(cy_rbc_is_erased((const uint8_t*)CY_RBC_BACKUP))
+ {
+ if(cy_rbc_is_checksum_valid(CY_RBC_MAIN))
+ {
+ rc = CY_RBC_SUCCESS;
+ }
+ }
+ else
+ {
+ if(cy_rbc_is_checksum_valid(CY_RBC_BACKUP))
+ {
+ if(cy_rbc_is_checksum_valid(CY_RBC_MAIN))
+ {
+ if(cy_rbc_compare_backup(CY_RBC_BACKUP, CY_RBC_MAIN) == CY_RBC_SUCCESS)
+ {
+ rc = cy_rbc_apply_backup();
+ }
+ else
+ {
+ if(cy_rbc_erase_backup() == CY_RBC_SUCCESS)
+ {
+ if(cy_rbc_is_checksum_valid(CY_RBC_MAIN))
+ {
+ rc = CY_RBC_SUCCESS;
+ }
+ }
+ }
+ }
+ else
+ {
+ rc = cy_rbc_apply_backup();
+ }
+ }
+ else
+ {
+ if(cy_rbc_erase_backup() == CY_RBC_SUCCESS)
+ {
+ if(cy_rbc_is_checksum_valid(CY_RBC_MAIN))
+ {
+ rc = CY_RBC_SUCCESS;
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+/*******************************************************************************
+* Function Name: cy_rbc_is_checksum_valid
+********************************************************************************
+* Checks if checksum for the rollback protection counters storage matches.
+*
+* \param counters Pointer to the rollback protection counters storage.
+*
+* \return true if the checksum matches, false otherwise.
+*******************************************************************************/
+static bool cy_rbc_is_checksum_valid(const cy_rbc_t *counters)
+{
+ bool valid = false;
+
+ uint8_t checkSum[CY_RBC_CHECKSUM_LENGTH] = {0U};
+
+ if(cy_rbc_calc_check_sum(counters->counters, sizeof(counters->counters), checkSum) == CY_RBC_SUCCESS)
+ {
+ volatile int32_t cmpResult = -1;
+
+ cmpResult = memcmp(checkSum, counters->checkSum, CY_RBC_CHECKSUM_LENGTH);
+
+ if(cmpResult == 0)
+ {
+ valid = true;
+ }
+ }
+
+ return valid;
+}
+
+/*******************************************************************************
+* Function Name: cy_rbc_erase_backup
+********************************************************************************
+* Erases backup storage of rollback protection counters.
+*
+* \return CY_RBC_SUCCESS if successful.
+*******************************************************************************/
+static cy_rbc_result_t cy_rbc_erase_backup(void)
+{
+ cy_rbc_result_t rc = CY_RBC_INVALID;
+
+ rc = cy_rbc_erase((uint32_t)CY_RBC_BACKUP);
+
+ return rc;
+}
+
+/*******************************************************************************
+* Function Name: cy_rbc_compare_backup
+********************************************************************************
+* Compares two rollback protection counters storages.
+*
+* \param cntrs1 Pointer to the first rollback protection counters storage.
+* \param cntrs1 Pointer to the second rollback protection counters storage.
+*
+* \return CY_RBC_SUCCESS if at least one counter in the first storage is greater,
+* CY_RBC_INVALID otherwise.
+*******************************************************************************/
+static cy_rbc_result_t cy_rbc_compare_backup(const cy_rbc_t *cntrs1, const cy_rbc_t *cntrs2)
+{
+ cy_rbc_result_t rc = CY_RBC_INVALID;
+ uint32_t i;
+
+ for(i = 0UL; i < CY_RBC_ROLLBACK_COUNTERS_NUM; i++)
+ {
+ if(cntrs1->counters[i] > cntrs2->counters[i])
+ {
+ rc = CY_RBC_SUCCESS;
+ break;
+ }
+ }
+
+ return rc;
+}
+
+/*******************************************************************************
+* Function Name: cy_rbc_apply_backup
+********************************************************************************
+* Copies backup rollback protection counters storage to the main one.
+*
+* \return CY_RBC_SUCCESS if successful.
+*******************************************************************************/
+static cy_rbc_result_t cy_rbc_apply_backup(void)
+{
+ cy_rbc_result_t rc = CY_RBC_INVALID;
+ const cy_rbc_t *tempCntrs = CY_RBC_BACKUP;
+
+ if(cy_rbc_program((const uint8_t *)tempCntrs, (uintptr_t)CY_RBC_MAIN) == CY_RBC_SUCCESS)
+ {
+ rc = cy_rbc_erase_backup();
+ }
+
+ return rc;
+}
+
+#endif
\ No newline at end of file
diff --git a/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h b/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h
new file mode 100644
index 0000000..a764cb4
--- /dev/null
+++ b/boot/cypress/platforms/security_counter/PSC3/rollback_counter.h
@@ -0,0 +1,79 @@
+/****************************************************************************//**
+* \file rollback_counter.h
+* \version 0.0.1
+*
+* \brief
+* This is the source code implementing rollback protection feature.
+*
+*********************************************************************************
+* \copyright
+* Copyright 2019-2024, Cypress Semiconductor Corporation. All rights reserved.
+* You may use this file only in accordance with the license, terms, conditions,
+* disclaimers, and limitations in the end user license agreement accompanying
+* the software package with which this file was provided.
+********************************************************************************/
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+ * @brief Result codes for RBC operations
+ */
+typedef enum
+{
+ CY_RBC_SUCCESS = 0, /**< Operation completed successfully */
+ CY_RBC_INVALID = -1, /**< Invalid operation or error occurred */
+} cy_rbc_result_t;
+
+/**
+ * @brief Reads the rollback counter for a specific counter number
+ * @param counter The counter number to read
+ * @return The counter value
+ */
+uint32_t cy_rbc_read_rollback_counter(uint8_t counter);
+
+/**
+ * @brief Updates the rollback counter for a specific counter number
+ * @param counter The counter number to update
+ * @param value The new value for the counter
+ * @return The result of the operation
+ */
+cy_rbc_result_t cy_rbc_update_rollback_counter(uint8_t counter, uint32_t value);
+
+/**
+ * @brief Recovers the rollback counter to its initial state
+ * @return The result of the operation
+ */
+cy_rbc_result_t cy_rbc_recover_rollback_counter(void);
+
+/**
+ * @brief Calculates the checksum of a data block
+ * @param data Pointer to the data block
+ * @param dataSize Size of the data block in bytes
+ * @param checkSum Pointer to store the calculated checksum
+ * @return The result of the operation
+ */
+extern cy_rbc_result_t cy_rbc_calc_check_sum(const uint32_t *data, uint32_t dataSize, uint8_t *checkSum);
+
+/**
+ * @brief Programs the data at a specific offset
+ * @param src Pointer to the source data
+ * @param offset Offset to program the data at
+ * @return The result of the operation
+ */
+extern cy_rbc_result_t cy_rbc_program(const uint8_t* src, uintptr_t offset);
+
+/**
+ * @brief Erases the data at a specific offset
+ * @param offset Offset to erase the data at
+ * @return The result of the operation
+ */
+extern cy_rbc_result_t cy_rbc_erase(uintptr_t offset);
+
+/**
+ * @brief Checks if the data at a specific offset is erased
+ * @param data Pointer to the data block
+ * @return True if the data is erased, false otherwise
+ */
+extern bool cy_rbc_is_erased(const uint8_t *data);
\ No newline at end of file
diff --git a/boot/cypress/platforms/utils/CYW20829/cyw_platform_utils.c b/boot/cypress/platforms/utils/CYW20829/platform_utils.c
similarity index 99%
rename from boot/cypress/platforms/utils/CYW20829/cyw_platform_utils.c
rename to boot/cypress/platforms/utils/CYW20829/platform_utils.c
index 63d07e3..d405caa 100644
--- a/boot/cypress/platforms/utils/CYW20829/cyw_platform_utils.c
+++ b/boot/cypress/platforms/utils/CYW20829/platform_utils.c
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "cyw_platform_utils.h"
+#include "platform_utils.h"
/* Cypress pdl headers */
#include "cy_pdl.h"
diff --git a/boot/cypress/platforms/utils/CYW20829/cyw_platform_utils.h b/boot/cypress/platforms/utils/CYW20829/platform_utils.h
similarity index 100%
rename from boot/cypress/platforms/utils/CYW20829/cyw_platform_utils.h
rename to boot/cypress/platforms/utils/CYW20829/platform_utils.h
diff --git a/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h b/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h
new file mode 100644
index 0000000..1213bf8
--- /dev/null
+++ b/boot/cypress/platforms/utils/PSC3/cyw_platform_utils.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CLEANUP_H
+#define CLEANUP_H
+
+#include <stdint.h>
+
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+#define STACKLESS __STATIC_INLINE
+#elif defined(__ICCARM__)
+#define STACKLESS __stackless __STATIC_INLINE
+#elif defined(__GNUC__)
+#define STACKLESS __STATIC_INLINE
+#endif
+
+#define VECTOR_TABLE_ALIGNMENT (0x400U)
+
+typedef __NO_RETURN void (*reset_handler_t)(void);
+
+typedef struct vect_tbl_start_s {
+ uint32_t stack_pointer;
+ reset_handler_t reset_handler;
+} vect_tbl_start_t;
+
+/*******************************************************************************
+ * Function Name: cleanup_helper
+ ********************************************************************************
+ * Summary:
+ * Cleans ram region
+ * This function used inside cleanup_and_boot function
+ *
+ * Parameters:
+ * l - region start pointer(lower address)
+ * r - region end pointer (higher address)
+ *
+ * Note:
+ * This function is critical to be "stackless".
+ * Two oncoming indices algorithm is used to prevent compiler optimization
+ * from calling memset function.
+ *
+ *******************************************************************************/
+STACKLESS
+void cleanup_helper(register uint8_t *l, register uint8_t *r)
+{
+ register uint8_t v = 0u;
+
+ do {
+ *l = v;
+ ++l;
+
+ --r;
+ *r = v;
+ } while (l < r);
+}
+
+/*******************************************************************************
+ * Function Name: cleanup_and_boot
+ ********************************************************************************
+ * Summary:
+ * This function cleans all ram and boots target app
+ *
+ * Parameters:
+ * p_vect_tbl_start - target app vector table address
+ *
+ *
+ *******************************************************************************/
+STACKLESS __NO_RETURN void launch_cm33_app(register vect_tbl_start_t* p_vect_tbl_start)
+{
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+ {
+ extern uint8_t Image$$RW_RAM_DATA$$Base[];
+ extern uint32_t Image$$RW_RAM_DATA$$Length[];
+ cleanup_helper(
+ Image$$RW_RAM_DATA$$Base,
+ Image$$RW_RAM_DATA$$Base + (uint32_t)Image$$RW_RAM_DATA$$Length);
+ }
+
+ {
+ extern uint8_t Image$$RW_IRAM1$$Base[];
+ extern uint32_t Image$$RW_IRAM1$$Length[];
+ cleanup_helper(
+ Image$$RW_IRAM1$$Base,
+ Image$$RW_IRAM1$$Base + (uint32_t)Image$$RW_IRAM1$$Length);
+ }
+
+ {
+ extern uint8_t Image$$ER_RAM_VECTORS$$Base[];
+ extern uint32_t Image$$ER_RAM_VECTORS$$Length[];
+ cleanup_helper(Image$$ER_RAM_VECTORS$$Base,
+ Image$$ER_RAM_VECTORS$$Base +
+ (uint32_t)Image$$ER_RAM_VECTORS$$Length);
+ }
+
+ {
+ extern uint8_t Image$$ARM_LIB_HEAP$$Base[];
+ extern uint32_t Image$$ARM_LIB_HEAP$$Length[];
+ cleanup_helper(
+ Image$$ARM_LIB_HEAP$$Base,
+ Image$$ARM_LIB_HEAP$$Base + (uint32_t)Image$$ARM_LIB_HEAP$$Length);
+ }
+
+#elif defined(__ICCARM__)
+ {
+#pragma section = ".data"
+ cleanup_helper(__section_begin(".data"), __section_end(".data"));
+ }
+
+ {
+#pragma section = ".bss"
+ cleanup_helper(__section_begin(".bss"), __section_end(".bss"));
+ }
+
+ {
+#pragma section = "HSTACK"
+ cleanup_helper(__section_begin("HSTACK"), __section_end("HSTACK"));
+ }
+#elif defined(__GNUC__)
+ {
+ extern uint8_t __data_start__[];
+ extern uint8_t __data_end__[];
+ cleanup_helper(__data_start__, __data_end__);
+ }
+
+ {
+ extern uint8_t __bss_start__[];
+ extern uint8_t __bss_end__[];
+ cleanup_helper(__bss_start__, __bss_end__);
+ }
+
+ {
+ extern uint8_t __HeapBase[];
+ extern uint8_t __HeapLimit[];
+ cleanup_helper(__HeapBase, __HeapLimit);
+ }
+
+ {
+ extern uint8_t __StackLimit[];
+ extern uint8_t __StackTop[];
+ cleanup_helper(__StackLimit, __StackTop);
+ }
+#endif /* cleanup */
+ /* Init next app vector table */
+#ifdef COMPONENT_CM33
+ MXCM33->CM33_NS_VECTOR_TABLE_BASE = (uint32_t)(void*)p_vect_tbl_start;
+#endif /* COMPONENT_CM33 */
+ SCB->VTOR = (uint32_t)(void*)p_vect_tbl_start;
+ __DSB();
+
+ /* Init next app stack pointer */
+#ifdef COMPONENT_CM33
+ __set_MSPLIM(0U);
+#endif /* COMPONENT_CM33 */
+ __set_MSP(p_vect_tbl_start->stack_pointer);
+#ifdef COMPONENT_CM33
+ /* FIXME: CM33_STACK_LIMIT must be defined for CM33 core */
+ __set_MSPLIM(CM33_STACK_LIMIT);
+#endif /* COMPONENT_CM33 */
+
+ /* Jump to next app */
+ p_vect_tbl_start->reset_handler();
+}
+
+#endif /* CLEANUP_H */
\ No newline at end of file
diff --git a/boot/cypress/platforms/utils/PSC3/platform_utils.h b/boot/cypress/platforms/utils/PSC3/platform_utils.h
new file mode 100644
index 0000000..de18aba
--- /dev/null
+++ b/boot/cypress/platforms/utils/PSC3/platform_utils.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) or
+ * an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CLEANUP_H
+#define CLEANUP_H
+
+#include <stdint.h>
+
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+#define STACKLESS __STATIC_INLINE
+#elif defined(__ICCARM__)
+#define STACKLESS __stackless __STATIC_INLINE
+#elif defined(__GNUC__)
+#define STACKLESS __STATIC_INLINE
+#endif
+
+#define VECTOR_TABLE_ALIGNMENT (0x400U)
+
+typedef __NO_RETURN void (*reset_handler_t)(void);
+
+typedef struct vect_tbl_start_s {
+ uint32_t stack_pointer;
+ reset_handler_t reset_handler;
+} vect_tbl_start_t;
+
+/*******************************************************************************
+ * Function Name: cleanup_helper
+ ********************************************************************************
+ * Summary:
+ * Cleans ram region
+ * This function used inside cleanup_and_boot function
+ *
+ * Parameters:
+ * l - region start pointer(lower address)
+ * r - region end pointer (higher address)
+ *
+ * Note:
+ * This function is critical to be "stackless".
+ * Two oncoming indices algorithm is used to prevent compiler optimization
+ * from calling memset function.
+ *
+ *******************************************************************************/
+STACKLESS
+void cleanup_helper(register uint8_t *l, register uint8_t *r)
+{
+ register uint8_t v = 0u;
+
+ do {
+ *l = v;
+ ++l;
+
+ --r;
+ *r = v;
+ } while (l < r);
+}
+
+/*******************************************************************************
+ * Function Name: cleanup_and_boot
+ ********************************************************************************
+ * Summary:
+ * This function cleans all ram and boots target app
+ *
+ * Parameters:
+ * p_vect_tbl_start - target app vector table address
+ *
+ *
+ *******************************************************************************/
+STACKLESS __NO_RETURN void launch_cm33_app(register vect_tbl_start_t* p_vect_tbl_start)
+{
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+ {
+ extern uint8_t Image$$RW_RAM_DATA$$Base[];
+ extern uint32_t Image$$RW_RAM_DATA$$Length[];
+ cleanup_helper(
+ Image$$RW_RAM_DATA$$Base,
+ Image$$RW_RAM_DATA$$Base + (uint32_t)Image$$RW_RAM_DATA$$Length);
+ }
+
+ {
+ extern uint8_t Image$$RW_IRAM1$$Base[];
+ extern uint32_t Image$$RW_IRAM1$$Length[];
+ cleanup_helper(
+ Image$$RW_IRAM1$$Base,
+ Image$$RW_IRAM1$$Base + (uint32_t)Image$$RW_IRAM1$$Length);
+ }
+
+ {
+ extern uint8_t Image$$ER_RAM_VECTORS$$Base[];
+ extern uint32_t Image$$ER_RAM_VECTORS$$Length[];
+ cleanup_helper(Image$$ER_RAM_VECTORS$$Base,
+ Image$$ER_RAM_VECTORS$$Base +
+ (uint32_t)Image$$ER_RAM_VECTORS$$Length);
+ }
+
+ {
+ extern uint8_t Image$$ARM_LIB_HEAP$$Base[];
+ extern uint32_t Image$$ARM_LIB_HEAP$$Length[];
+ cleanup_helper(
+ Image$$ARM_LIB_HEAP$$Base,
+ Image$$ARM_LIB_HEAP$$Base + (uint32_t)Image$$ARM_LIB_HEAP$$Length);
+ }
+
+#elif defined(__ICCARM__)
+ {
+#pragma section = ".data"
+ cleanup_helper(__section_begin(".data"), __section_end(".data"));
+ }
+
+ {
+#pragma section = ".bss"
+ cleanup_helper(__section_begin(".bss"), __section_end(".bss"));
+ }
+
+ {
+#pragma section = "HSTACK"
+ cleanup_helper(__section_begin("HSTACK"), __section_end("HSTACK"));
+ }
+#elif defined(__GNUC__)
+ {
+ extern uint8_t __data_start__[];
+ extern uint8_t __data_end__[];
+ cleanup_helper(__data_start__, __data_end__);
+ }
+
+ {
+ extern uint8_t __bss_start__[];
+ extern uint8_t __bss_end__[];
+ cleanup_helper(__bss_start__, __bss_end__);
+ }
+
+ {
+ extern uint8_t __HeapBase[];
+ extern uint8_t __HeapLimit[];
+ cleanup_helper(__HeapBase, __HeapLimit);
+ }
+
+ {
+ extern uint8_t __StackLimit[];
+ extern uint8_t __StackTop[];
+ cleanup_helper(__StackLimit, __StackTop);
+ }
+#endif /* cleanup */
+ /* Init next app vector table */
+#ifdef COMPONENT_CM33
+ MXCM33->CM33_NS_VECTOR_TABLE_BASE = (uint32_t)(void*)p_vect_tbl_start;
+#endif /* COMPONENT_CM33 */
+ SCB->VTOR = (uint32_t)(void*)p_vect_tbl_start;
+ __DSB();
+
+ /* Init next app stack pointer */
+#ifdef COMPONENT_CM33
+ __set_MSPLIM(0U);
+#endif /* COMPONENT_CM33 */
+ __set_MSP(p_vect_tbl_start->stack_pointer);
+#ifdef COMPONENT_CM33
+ /* FIXME: CM33_STACK_LIMIT must be defined for CM33 core */
+ __set_MSPLIM(CM33_STACK_LIMIT);
+#endif /* COMPONENT_CM33 */
+
+ /* Jump to next app */
+ p_vect_tbl_start->reset_handler();
+}
+
+#endif /* CLEANUP_H */
diff --git a/boot/cypress/platforms/utils/PSOC6/cyw_platform_utils.c b/boot/cypress/platforms/utils/PSOC6/platform_utils.c
similarity index 98%
rename from boot/cypress/platforms/utils/PSOC6/cyw_platform_utils.c
rename to boot/cypress/platforms/utils/PSOC6/platform_utils.c
index cafea5e..db18b8c 100644
--- a/boot/cypress/platforms/utils/PSOC6/cyw_platform_utils.c
+++ b/boot/cypress/platforms/utils/PSOC6/platform_utils.c
@@ -1,5 +1,5 @@
/***************************************************************************//**
-* \file cyw_platform_utils.h
+* \file platform_utils.h
*
* \brief
* PSoC6 platform utilities
@@ -25,7 +25,7 @@
*******************************************************************************/
#include <string.h>
-#include "cyw_platform_utils.h"
+#include "platform_utils.h"
#define IVT_ALIGNMENT (0x3FFu) /* IVT alignment requires to have these bits as zeros in IVT */
#define STACK_ALIGNMENT (7u) /* Per ARM AABI, a stack should be aligned to 64 bits, thus should have these bits as zeros */
diff --git a/boot/cypress/platforms/utils/PSOC6/cyw_platform_utils.h b/boot/cypress/platforms/utils/PSOC6/platform_utils.h
similarity index 98%
rename from boot/cypress/platforms/utils/PSOC6/cyw_platform_utils.h
rename to boot/cypress/platforms/utils/PSOC6/platform_utils.h
index 571e4f2..af85c6c 100644
--- a/boot/cypress/platforms/utils/PSOC6/cyw_platform_utils.h
+++ b/boot/cypress/platforms/utils/PSOC6/platform_utils.h
@@ -1,5 +1,5 @@
/***************************************************************************//**
-* \file cyw_platform_utils.h
+* \file platform_utils.h
*
* \brief
* PSoC6 platform utilities
diff --git a/boot/cypress/platforms/utils/XMC7000/cyw_platform_utils.c b/boot/cypress/platforms/utils/XMC7000/platform_utils.c
similarity index 97%
rename from boot/cypress/platforms/utils/XMC7000/cyw_platform_utils.c
rename to boot/cypress/platforms/utils/XMC7000/platform_utils.c
index 5e87042..df140d3 100644
--- a/boot/cypress/platforms/utils/XMC7000/cyw_platform_utils.c
+++ b/boot/cypress/platforms/utils/XMC7000/platform_utils.c
@@ -1,5 +1,5 @@
/***************************************************************************//**
-* \file cyw_platform_utils.h
+* \file platform_utils.h
*
* \brief
* xmc7000 platform utilities
@@ -25,7 +25,7 @@
*******************************************************************************/
#include <string.h>
-#include "cyw_platform_utils.h"
+#include "platform_utils.h"
#define IVT_ALIGNMENT (0x3FFu) /* IVT alignment requires to have these bits as zeros in IVT */
#define STACK_ALIGNMENT (7u) /* Per ARM AABI, a stack should be aligned to 64 bits, thus should have these bits as zeros */
diff --git a/boot/cypress/platforms/utils/XMC7000/cyw_platform_utils.h b/boot/cypress/platforms/utils/XMC7000/platform_utils.h
similarity index 97%
rename from boot/cypress/platforms/utils/XMC7000/cyw_platform_utils.h
rename to boot/cypress/platforms/utils/XMC7000/platform_utils.h
index 87c7dc1..b82e8af 100644
--- a/boot/cypress/platforms/utils/XMC7000/cyw_platform_utils.h
+++ b/boot/cypress/platforms/utils/XMC7000/platform_utils.h
@@ -1,5 +1,5 @@
/***************************************************************************//**
-* \file cyw_platform_utils.h
+* \file platform_utils.h
*
* \brief
* PSoC6 platform utilities
diff --git a/boot/cypress/scripts/feature.py b/boot/cypress/scripts/feature.py
index 01dbb1e..a0a61c4 100644
--- a/boot/cypress/scripts/feature.py
+++ b/boot/cypress/scripts/feature.py
@@ -1,5 +1,5 @@
"""
-Copyright 2023 Cypress Semiconductor Corporation (an Infineon company)
+Copyright 2024 Cypress Semiconductor Corporation (an Infineon company)
or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,10 +15,11 @@
limitations under the License.
"""
-
-import sys
+import argparse
import json
-import click
+import sys
+import os
+
def load_json(file_path):
"""
@@ -106,7 +107,8 @@
'image_encryption' : 'ENC_IMG',
'fault_injection_hardening' : 'FIH_PROFILE_LEVEL',
'combine_hex' : 'COMBINE_HEX',
- 'hw_key' : 'USE_HW_KEY'
+ 'hw_key' : 'USE_HW_KEY',
+ 'built_in_keys' : 'USE_BUILT_IN_KEYS'
}
debug_level_dict = {
@@ -193,7 +195,7 @@
"""
Handle any dictionary of 'feature_config'
"""
- dont_print_list = set(("validation_key", "version", "description", "target"))
+ dont_print_list = set(("validation_key", "encryption_key", "version", "description", "target"))
for k in f_dict:
@@ -206,12 +208,27 @@
if k == 'serial_logging':
f_out.write(self.__gen_debug_level(f_dict.get(k).get("value")))
+ if k == "validation_key":
+ value = f_dict.get(k).get("value")
+ if value != '':
+ f_out.write(f'ECDSA_PUBLIC_KEY={value}\n')
+
+ if k == "encryption_key":
+ value = f_dict.get(k).get("value")
+ if value != '':
+ f_out.write(f'ENC_PRIVATE_KEY={value}\n')
+
def make_file_generate(self, feature_json):
"""
Processing all keys and creation of a mk-file
"""
+ out_dir = os.path.dirname(self.out_f)
+
+ if not os.path.exists(out_dir):
+ os.mkdir(out_dir)
+
with open(self.out_f, "w", encoding='UTF-8') as f_out:
f_out.write(FeatureProcessor.generate_header_guard())
@@ -224,19 +241,25 @@
self.__handle_dictionary(feature_json, f_out)
-@click.group()
def cli():
- """
- Feature config parser to run from CLI
- """
+ parser = argparse.ArgumentParser(description='Feature config parser to run from CLI')
-@cli.command()
-@click.option('-f', '--feature_config', required=True,
- help='feature configuration file path')
-@click.option('-p', '--platform_properties', required=True,
- help='platform properties file path')
-@click.option('-n', '--output_name', required=True,
- help='the name of the make file that will be generated')
+ parser.add_argument('-f', '--feature_config', required=True,
+ help='Feature configuration file path')
+ parser.add_argument('-p', '--platform_properties', required=True,
+ help='Platform properties file path')
+ parser.add_argument('-n', '--output_name', required=True,
+ help='The name of the make file that will be generated')
+ parser.add_argument('other_args', nargs='?',
+ help='Ignore all other arguments, such as: run')
+
+ args = parser.parse_args()
+
+ run(args.feature_config, args.platform_properties, args.output_name)
+
+ # run('C:/Work/mcuboot/mtb-example-bootloader-solution/platforms/PSC3/feature_config.json',
+ # 'C:/Work/mcuboot/mtb-example-bootloader-solution/mtb_shared/mcuboot/1.9.3-ifx-boy2-es10/boot/cypress/platforms/memory/PSC3/flashmap/platform_properties.json',
+ # 'C:/Work/mcuboot/mtb-example-bootloader-solution/platforms/PSC3/feature_config.mk')
def run(feature_config, platform_properties, output_name):
diff --git a/boot/cypress/scripts/find_cysectools.py b/boot/cypress/scripts/find_cysectools.py
index 7bea0fc..8733575 100644
--- a/boot/cypress/scripts/find_cysectools.py
+++ b/boot/cypress/scripts/find_cysectools.py
@@ -17,7 +17,7 @@
import subprocess
import sys
-package = 'cysecuretools'
+package = 'edgeprotecttools'
def find_cysectools(package_name):
diff --git a/boot/cypress/scripts/memorymap_rework.py b/boot/cypress/scripts/memorymap_rework.py
index 855cf23..01b541f 100644
--- a/boot/cypress/scripts/memorymap_rework.py
+++ b/boot/cypress/scripts/memorymap_rework.py
@@ -1,5 +1,5 @@
"""
-Copyright 2023 Cypress Semiconductor Corporation (an Infineon company)
+Copyright 2024 Cypress Semiconductor Corporation (an Infineon company)
or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,9 +15,10 @@
limitations under the License.
"""
-import sys
+import argparse
import json
-import click
+import sys
+import os
APP_LIMIT = 8
@@ -41,6 +42,10 @@
, 'bootloader_ram_address' : 'BOOTLOADER_RAM_ORIGIN'
, 'bootloader_ram_size' : 'BOOTLOADER_RAM_SIZE'
, 'bootloader_area' : 'BOOTLOADER_AREA'
+ , 'staging_area' : 'USE_RAM_APPS_STAGING'
+ , 'ram_apps_staging_addr' : 'RAM_APPS_STAGING_ADDR'
+ , 'ram_apps_staging_size' : 'RAM_APPS_STAGING_SIZE'
+ , 'bootloader_ram_load' : 'BOOTLOADER_IN_RAM'
, 'application_count' : 'MCUBOOT_IMAGE_NUMBER'
, 'boot_image' : 'BOOT_IMAGE_NUMBER'
, 'sectors_count' : 'MAX_IMG_SECTORS'
@@ -113,10 +118,12 @@
def __init__(self):
self.bootloader_area : Memory = None
self.ram : Memory = None
+ self.ram_boot : Memory = None
self.scratch_area : Memory = None
self.status_area : Memory = None
self.shared_data : Memory = None
self.shared_upgrade : Memory = None
+ self.staging_area : Memory = None
self.core_name : int = None
@property
@@ -135,14 +142,17 @@
def has_status_area(self) -> bool:
return self.status_area is not None
+ @property
+ def has_staging_area(self) -> bool:
+ return self.staging_area is not None
+
def parse(self, section : json):
'''
- Parse JSON section and init fields.
+ Parse JSON 'bootloader' section and init fields.
'''
try:
- fields = ('bootloader_area', 'scratch_area', 'status_area', \
- 'shared_data', 'shared_upgrade', 'ram')
- for field in fields:
+ list_of_fields = section.keys()
+ for field in list_of_fields:
area = section.get(field)
if area:
setattr(self, field, Memory(int(area['address'], 0),
@@ -337,6 +347,7 @@
boot_area = main_app.boot_area
upgrade_area = main_app.upgrade_area
scratch_area = self.boot_layout.scratch_area
+ staging_area = self.boot_layout.staging_area
param_dict.update({'bootloader': [bootloader_area, 'FLASH_AREA_BOOTLOADER', 0]})
param_dict.update({'app_1_boot': [boot_area, 'FLASH_AREA_IMG_1_PRIMARY', 1]})
@@ -349,6 +360,10 @@
if self.boot_layout.has_scratch_area:
param_dict.update({'scratch_area': [scratch_area, 'FLASH_AREA_IMAGE_SCRATCH', 3]})
+ # Generate scratch area index
+ if self.boot_layout.has_staging_area:
+ param_dict.update({'staging_area': [staging_area, 'FLASH_AREA_RAM_APP_STAGING', 255]})
+
# Generate multiple app area indexes
multi_app_area_idx = 4
if len(self.apps) > 1:
@@ -382,9 +397,12 @@
'''
C-file generation, file name and path must be given by script user
'''
- path = f'{self.output_folder}/{self.output_name}.c'
+ path = os.path.join(self.output_folder, f'{self.output_name}.c')
include = f'{self.output_name}.h'
+ if not os.path.exists(self.output_folder):
+ os.mkdir(self.output_folder)
+
with open(path, "w", encoding='UTF-8') as f_out:
f_out.write(f'#include "{include}"\n')
f_out.write(f'#include "flash_map_backend.h"\n\n')
@@ -392,7 +410,7 @@
f_out.write('{\n')
for region in self.regions:
if region.mem_type[0] in self.region_types:
- f_out.write(f'\t[{region.mem_type[0]}] = ' + '{\n')
+ f_out.write('\t{\n')
f_out.write(f'\t\t.address = {hex(region.addr)}U,\n')
f_out.write(f'\t\t.size = {hex(region.sz)}U,\n')
f_out.write(f'\t\t.erase_size = {hex(region.erase_sz)}U,\n')
@@ -432,6 +450,7 @@
f_out.write('\n};\n\n')
f_out.write('image_boot_config_t image_boot_config[BOOT_IMAGE_NUMBER] = {\n')
+
for app in self.apps:
f_out.writelines('\n'.join([
'\t{\n'
@@ -442,7 +461,11 @@
f_out.write('};\n')
def __header_gen(self):
- path = f'{self.output_folder}/{self.output_name}.h'
+ path = os.path.join(self.output_folder, f'{self.output_name}.h')
+
+ if not os.path.exists(self.output_folder):
+ os.mkdir(self.output_folder)
+
with open(path, "w", encoding='UTF-8') as f_out:
header_guard_generate(f_out)
@@ -457,10 +480,11 @@
f_out.write('enum \n{\n')
- # it's critical to use 'regions' here!
+ # it's critical to use 'self.regions' here!
# because it fixes the bug when enum {INTERNAL_RRAM, EXTERNAL_FLASH,}
# is generated in incorrect sequence.
for region in self.regions:
+ if region.mem_type[0] in self.region_types:
f_out.write(f'\t{str(region.mem_type[0])},\n')
f_out.write('};\n\n')
@@ -483,6 +507,8 @@
f_out.write('extern image_boot_config_t image_boot_config[BOOT_IMAGE_NUMBER];\n\n')
def __bootloader_mk_file_gen(self):
+ print('\n[memorymap_rework.py] Generating boot mk file', file=sys.stderr)
+
boot = self.boot_layout
for mem_type in self.region_types:
@@ -491,6 +517,10 @@
for mem_type in self.region_types_alt:
print(f'USE_{mem_type} := 1')
+ # RAM app staging area
+ if boot.staging_area is None:
+ print(settings_dict['staging_area'], ':= 1')
+
# Upgrade mode
if boot.scratch_area is None and boot.status_area is None:
print(settings_dict['overwrite'], ':= 1')
@@ -518,10 +548,21 @@
print(f'{settings_dict["bootloader_app_address"]} :=', hex(boot.bootloader_area.addr))
print(f'{settings_dict["bootloader_app_size"]} :=', hex(boot.bootloader_area.sz))
- if boot.ram is not None:
+ if boot.ram:
print('# Bootloader ram area')
print(f'{settings_dict["bootloader_ram_address"]} :=', hex(boot.ram.addr))
print(f'{settings_dict["bootloader_ram_size"]} :=', hex(boot.ram.sz))
+
+ if boot.ram_boot:
+ print(f'{settings_dict["bootloader_ram_load"]} := 1')
+ print(f'{settings_dict["bootloader_ram_address"]} :=', hex(boot.ram_boot.addr))
+ print(f'{settings_dict["bootloader_ram_size"]} :=', hex(boot.ram_boot.sz))
+
+ if boot.staging_area:
+ print('# Bootloader RAM app staging area')
+ print(f'{settings_dict["staging_area"]} := 1')
+ print(f'{settings_dict["ram_apps_staging_addr"]} :=', hex(boot.staging_area.addr))
+ print(f'{settings_dict["ram_apps_staging_size"]} :=', hex(boot.staging_area.sz))
print('# Application area')
for img_id, app in enumerate(self.apps):
@@ -632,10 +673,12 @@
self.__memory_areas_create()
if app_id is None:
+ print('\n[memorymap_rework.py] Generating boot sources', file=sys.stderr)
self.__source_gen()
self.__header_gen()
self.__bootloader_mk_file_gen()
else:
+ print('\n[memorymap_rework.py] Generating app sources', file=sys.stderr)
self.__application_mk_file_gen()
except (FileNotFoundError, OSError):
@@ -643,23 +686,27 @@
sys.exit(-1)
-@click.group()
def cli():
- '''
- Memory map layout parser-configurator
- '''
+ parser = argparse.ArgumentParser(description='Memory map layout parser-configurator')
-@cli.command()
-@click.option('-i', '--memory_config', required=True,
- help='memory configuration file path')
-@click.option('-p', '--platform_config', required=True,
- help='platform configuration file path')
-@click.option('-n', '--output_name', required=True,
- help='generated areas path')
-@click.option('-o', '--output_folder', required=True,
- help='generated regions path')
-@click.option('-d', '--image_id', required=False,
- help='application image number')
+ parser.add_argument('-i', '--memory_config', required=True,
+ help='memory configuration file path')
+ parser.add_argument('-p', '--platform_config', required=True,
+ help='platform configuration file path')
+ parser.add_argument('-n', '--output_name', required=True,
+ help='generated areas path')
+ parser.add_argument('-o', '--output_folder', required=True,
+ help='generated regions path')
+ parser.add_argument('-d', '--image_id', required=False,
+ help='application image number')
+ parser.add_argument('other_args', nargs='?',
+ help='Ignore all other arguments, such as: run')
+
+ args = parser.parse_args()
+
+ run(args.memory_config, args.platform_config, args.output_folder, args.output_name,
+ args.image_id)
+
def run(memory_config, platform_config, output_folder, output_name, image_id):
''''
diff --git a/boot/cypress/toolchains.mk b/boot/cypress/toolchains.mk
index 7f5d771..1208def 100644
--- a/boot/cypress/toolchains.mk
+++ b/boot/cypress/toolchains.mk
@@ -32,35 +32,35 @@
OTHER := 4
ifeq ($(VERBOSE), 1)
-$(info $(COMPILER))
+ $(info $(COMPILER))
endif
# Path to the compiler installation
# NOTE: Absolute pathes for now for the sake of development
ifeq ($(HOST_OS), win)
- ifeq ($(COMPILER), GCC_ARM)
- TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/ModusToolbox/tools_3.2/gcc
- MY_TOOLCHAIN_PATH := $(call get_os_path, $(TOOLCHAIN_PATH))
- TOOLCHAIN_PATH := $(MY_TOOLCHAIN_PATH)
- GCC_PATH := $(TOOLCHAIN_PATH)
- # executables
- CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
- LD := $(CC)
- endif
+ ifeq ($(COMPILER), GCC_ARM)
+ TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/ModusToolbox/tools_3.2/gcc
+ MY_TOOLCHAIN_PATH := $(call get_os_path, $(TOOLCHAIN_PATH))
+ TOOLCHAIN_PATH := $(MY_TOOLCHAIN_PATH)
+ GCC_PATH := $(TOOLCHAIN_PATH)
+ # executables
+ CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
+ LD := $(CC)
+ endif
else ifeq ($(HOST_OS), osx)
- TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
- GCC_PATH := $(TOOLCHAIN_PATH)
+ TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
+ GCC_PATH := $(TOOLCHAIN_PATH)
- CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
- LD := $(CC)
+ CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
+ LD := $(CC)
else ifeq ($(HOST_OS), linux)
- TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
- GCC_PATH := $(TOOLCHAIN_PATH)
- # executables
- CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
- LD := $(CC)
+ TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
+ GCC_PATH := $(TOOLCHAIN_PATH)
+ # executables
+ CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
+ LD := $(CC)
endif
PDL_ELFTOOL := $(TOOLCHAIN_PATH)/../cymcuelftool-1.0/bin/cymcuelftool
@@ -70,80 +70,47 @@
# Set flags for toolchain executables
ifeq ($(COMPILER), GCC_ARM)
- # set build-in compiler flags
- CFLAGS_COMMON := -mthumb -ffunction-sections -fdata-sections -g -Wall -Wextra
- CFLAGS_COMMON += -Wno-discarded-qualifiers -Wno-ignored-qualifiers # KILLME
+ # set build-in compiler flags
+ CFLAGS_COMMON := -mthumb -ffunction-sections -fdata-sections -g -Wall -Wextra
+ CFLAGS_COMMON += -Wno-discarded-qualifiers -Wno-ignored-qualifiers # KILLME
- ifeq ($(WARN_AS_ERR), 1)
- CFLAGS_COMMON += -Werror
- endif
+ ifeq ($(WARN_AS_ERR), 1)
+ CFLAGS_COMMON += -Werror
+ endif
- ifeq ($(BUILDCFG), Debug)
- CFLAGS_SPECIAL ?= -Og -g3 -ffile-prefix-map=$(CURDIR)=.
- CFLAGS_COMMON += $(CFLAGS_SPECIAL)
- else ifeq ($(BUILDCFG), Release)
- ifeq ($(CFLAGS_OPTIMIZATION), )
- # Blinky upgrade releas XIP WORKAROUND
- CFLAGS_COMMON += -Os -g -DNDEBUG
- endif
- else
-$(error BUILDCFG : '$(BUILDCFG)' is not supported)
- endif
+ ifeq ($(BUILDCFG), Debug)
+ CFLAGS_SPECIAL ?= -Og -g3 -ffile-prefix-map=$(CURDIR)=.
+ CFLAGS_COMMON += $(CFLAGS_SPECIAL)
+ else ifeq ($(BUILDCFG), Release)
+ ifeq ($(CFLAGS_OPTIMIZATION), )
+ # Blinky upgrade releas XIP WORKAROUND
+ CFLAGS_COMMON += -Os -g -DNDEBUG
+ endif
+ else
+ $(error BUILDCFG : '$(BUILDCFG)' is not supported)
+ endif
- CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES)
+ CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES)
- CC_DEPEND = -MD -MP -MF
+ CC_DEPEND = -MD -MP -MF
- LDFLAGS_COMMON := -mcpu=cortex-$(CORE_SUFFIX) -mthumb -specs=nano.specs -ffunction-sections -fdata-sections -Wl,--gc-sections -ffat-lto-objects -g --enable-objc-gc
+ LDFLAGS_COMMON := -mcpu=cortex-$(CORE_SUFFIX) -mthumb -specs=nano.specs -ffunction-sections -fdata-sections -Wl,--gc-sections -ffat-lto-objects -g --enable-objc-gc
- ifeq ($(WARN_AS_ERR), 1)
- LDFLAGS_COMMON += -Wl,--fatal-warnings
- endif
+ ifeq ($(WARN_AS_ERR), 1)
+ LDFLAGS_COMMON += -Wl,--fatal-warnings
+ endif
- ifeq ($(BUILDCFG), Debug)
- LDFLAGS_SPECIAL ?= -Og
- LDFLAGS_COMMON += $(LDFLAGS_SPECIAL)
- else ifeq ($(BUILDCFG), Release)
- ifeq ($(CFLAGS_OPTIMIZATION), )
- # Blinky upgrade releas XIP WORKAROUND
- LDFLAGS_OPTIMIZATION ?= -Os
- endif
- else
-$(error BUILDCFG : '$(BUILDCFG)' is not supported)
- endif
- LDFLAGS_NANO := -L "$(GCC_PATH)/arm-none-eabi/lib/thumb/v6-m"
- LDFLAGS := $(LDFLAGS_COMMON) $(LDFLAGS_NANO) $(LDFLAGS_PLATFORM)
-endif
-
-###############################################################################
-# Print debug information about all settings used and/or set in this file
-ifeq ($(VERBOSE), 1)
-$(info #### toolchains.mk ####)
-$(info ARM --> $(ARM))
-$(info BUILDCFG <-- $(BUILDCFG))
-$(info CC <-> $(CC))
-$(info CFLAGS --> $(CFLAGS))
-$(info CFLAGS_COMMON <-> $(CFLAGS_COMMON))
-$(info CFLAGS_PLATFORM <-- $(CFLAGS_PLATFORM))
-$(info CFLAGS_SPECIAL <-> $(CFLAGS_SPECIAL))
-$(info COMPILER <-- $(COMPILER))
-$(info CORE_SUFFIX <-- $(CORE_SUFFIX))
-$(info GCC_ARM --> $(GCC_ARM))
-$(info GCC_PATH <-> $(GCC_PATH))
-$(info HOST_OS <-- $(HOST_OS))
-$(info IAR --> $(IAR))
-$(info INCLUDES <-- $(INCLUDES))
-$(info LD --> $(LD))
-$(info LDFLAGS --> $(LDFLAGS))
-$(info LDFLAGS_COMMON <-> $(LDFLAGS_COMMON))
-$(info LDFLAGS_NANO <-> $(LDFLAGS_NANO))
-$(info LDFLAGS_OPTIMIZATION --> $(LDFLAGS_OPTIMIZATION))
-$(info LDFLAGS_SPECIAL <-> $(LDFLAGS_SPECIAL))
-$(info MY_TOOLCHAIN_PATH <-> $(MY_TOOLCHAIN_PATH))
-$(info OBJCOPY --> $(OBJCOPY))
-$(info OBJDUMP --> $(OBJDUMP))
-$(info OTHER --> $(OTHER))
-$(info PDL_ELFTOOL --> $(PDL_ELFTOOL))
-$(info TOOLCHAIN_PATH <-> $(TOOLCHAIN_PATH))
-$(info USERNAME <-- $(USERNAME))
+ ifeq ($(BUILDCFG), Debug)
+ LDFLAGS_SPECIAL ?= -Og
+ LDFLAGS_COMMON += $(LDFLAGS_SPECIAL)
+ else ifeq ($(BUILDCFG), Release)
+ ifeq ($(CFLAGS_OPTIMIZATION), )
+ # Blinky upgrade releas XIP WORKAROUND
+ LDFLAGS_OPTIMIZATION ?= -Os
+ endif
+ else
+ $(error BUILDCFG : '$(BUILDCFG)' is not supported)
+ endif
+ LDFLAGS_NANO := -L "$(GCC_PATH)/arm-none-eabi/lib/thumb/v6-m"
+ LDFLAGS += $(LDFLAGS_COMMON) $(LDFLAGS_NANO) $(LDFLAGS_PLATFORM)
endif