Package: release.debian.org Severity: normal Tags: bullseye User: release.debian.org@packages.debian.org Usertags: pu X-Debbugs-CC: pkg-dpdk-devel@lists.alioth.debian.org Dear release team, We would like to upload a new LTS release version of DPDK to Bullseye. We have already done this previously for Buster and Bullseye, therefore I already proceeded to upload to bullseye-pu. As before, the LTS point release has only bug fixes and no API breakages and has been tested with regression tests. This will be the last 20.11.x release and p-u upload we do, as the branch is now EOL upstream. The source debdiff is attached. -- Kind regards, Luca Boccassi
diff -Nru dpdk-20.11.9/app/proc-info/main.c dpdk-20.11.10/app/proc-info/main.c --- dpdk-20.11.9/app/proc-info/main.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/proc-info/main.c 2023-12-12 10:30:50.000000000 +0000 @@ -19,7 +19,6 @@ #include <rte_common.h> #include <rte_debug.h> #include <rte_ethdev.h> -#include <rte_malloc.h> #include <rte_memory.h> #include <rte_memzone.h> #include <rte_launch.h> @@ -95,6 +94,8 @@ static uint32_t enable_iter_mempool; static char *mempool_iter_name; +#define RSS_HASH_KEY_SIZE 64 + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -602,24 +603,23 @@ return; } - metrics = rte_malloc("proc_info_metrics", - sizeof(struct rte_metric_value) * len, 0); + metrics = malloc(sizeof(struct rte_metric_value) * len); if (metrics == NULL) { printf("Cannot allocate memory for metrics\n"); return; } - names = rte_malloc(NULL, sizeof(struct rte_metric_name) * len, 0); + names = malloc(sizeof(struct rte_metric_name) * len); if (names == NULL) { printf("Cannot allocate memory for metrics names\n"); - rte_free(metrics); + free(metrics); return; } if (len != rte_metrics_get_names(names, len)) { printf("Cannot get metrics names\n"); - rte_free(metrics); - rte_free(names); + free(metrics); + free(names); return; } @@ -631,8 +631,8 @@ ret = rte_metrics_get_values(port_id, metrics, len); if (ret < 0 || ret > len) { printf("Cannot get metrics values\n"); - rte_free(metrics); - rte_free(names); + free(metrics); + free(names); return; } @@ -641,8 +641,8 @@ printf("%s: %"PRIu64"\n", names[i].name, metrics[i].value); printf("%s############################\n", nic_stats_border); - rte_free(metrics); - rte_free(names); + free(metrics); + free(names); } static void @@ -705,6 +705,7 @@ struct rte_eth_fc_conf fc_conf; struct rte_ether_addr mac; struct rte_eth_dev_owner owner; + uint8_t rss_key[RSS_HASH_KEY_SIZE]; /* Skip if port is not in mask */ if ((enabled_port_mask & (1ul << i)) == 0) @@ -848,17 +849,18 @@ printf("\n"); } + rss_conf.rss_key = rss_key; + rss_conf.rss_key_len = dev_info.hash_key_size; ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf); if (ret == 0) { - if (rss_conf.rss_key) { - printf(" - RSS\n"); - printf("\t -- RSS len %u key (hex):", - rss_conf.rss_key_len); - for (k = 0; k < rss_conf.rss_key_len; k++) - printf(" %x", rss_conf.rss_key[k]); - printf("\t -- hf 0x%"PRIx64"\n", - rss_conf.rss_hf); - } + printf(" - RSS info\n"); + printf("\t -- key len : %u\n", + rss_conf.rss_key_len); + printf("\t -- key (hex) : "); + for (k = 0; k < rss_conf.rss_key_len; k++) + printf("%02x", rss_conf.rss_key[k]); + printf("\n\t -- hash function : 0x%"PRIx64"\n", + rss_conf.rss_hf); } #ifdef RTE_LIB_SECURITY diff -Nru dpdk-20.11.9/app/test/test_cryptodev_asym.c dpdk-20.11.10/app/test/test_cryptodev_asym.c --- dpdk-20.11.9/app/test/test_cryptodev_asym.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_cryptodev_asym.c 2023-12-12 10:30:50.000000000 +0000 @@ -1718,7 +1718,7 @@ } static int -test_dh_keygenration(void) +test_dh_key_generation(void) { int status; @@ -2291,7 +2291,7 @@ .unit_test_cases = { TEST_CASE_ST(ut_setup, ut_teardown, test_capability), TEST_CASE_ST(ut_setup, ut_teardown, test_dsa), - TEST_CASE_ST(ut_setup, ut_teardown, test_dh_keygenration), + TEST_CASE_ST(ut_setup, ut_teardown, test_dh_key_generation), TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec), TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_sign_verify), TEST_CASE_ST(ut_setup, ut_teardown, test_rsa_enc_dec_crt), diff -Nru dpdk-20.11.9/app/test/test_cryptodev.c dpdk-20.11.10/app/test/test_cryptodev.c --- dpdk-20.11.9/app/test/test_cryptodev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_cryptodev.c 2023-12-12 10:30:50.000000000 +0000 @@ -5800,6 +5800,9 @@ &cap_idx) == NULL) return -ENOTSUP; + if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) + return -ENOTSUP; + rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); uint64_t feat_flags = dev_info.feature_flags; @@ -6828,6 +6831,8 @@ return -ENOTSUP; if (global_api_test_type == CRYPTODEV_RAW_API_TEST) return -ENOTSUP; + if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) + return -ENOTSUP; rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); diff -Nru dpdk-20.11.9/app/test/test_cryptodev_mixed_test_vectors.h dpdk-20.11.10/app/test/test_cryptodev_mixed_test_vectors.h --- dpdk-20.11.9/app/test/test_cryptodev_mixed_test_vectors.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_cryptodev_mixed_test_vectors.h 2023-12-12 10:30:50.000000000 +0000 @@ -284,8 +284,10 @@ }, .cipher_iv = { .data = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - .len = 0, + .len = 16, }, .cipher = { .len_bits = 516 << 3, @@ -723,8 +725,10 @@ }, .cipher_iv = { .data = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - .len = 0, + .len = 16, }, .cipher = { .len_bits = 516 << 3, diff -Nru dpdk-20.11.9/app/test/test_event_crypto_adapter.c dpdk-20.11.10/app/test/test_event_crypto_adapter.c --- dpdk-20.11.9/app/test/test_event_crypto_adapter.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_event_crypto_adapter.c 2023-12-12 10:30:50.000000000 +0000 @@ -519,11 +519,10 @@ return TEST_FAILED; } - /* Create a NULL crypto device */ - nb_devs = rte_cryptodev_device_count_by_driver( - rte_cryptodev_driver_id_get( - RTE_STR(CRYPTODEV_NAME_NULL_PMD))); + + nb_devs = rte_cryptodev_count(); if (!nb_devs) { + /* Create a NULL crypto device */ ret = rte_vdev_init( RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL); diff -Nru dpdk-20.11.9/app/test/test_hash_readwrite.c dpdk-20.11.10/app/test/test_hash_readwrite.c --- dpdk-20.11.9/app/test/test_hash_readwrite.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_hash_readwrite.c 2023-12-12 10:30:50.000000000 +0000 @@ -162,7 +162,7 @@ handle = rte_hash_create(&hash_params); if (handle == NULL) { - printf("hash creation failed"); + printf("hash creation failed\n"); return -1; } diff -Nru dpdk-20.11.9/app/test/test_link_bonding.c dpdk-20.11.10/app/test/test_link_bonding.c --- dpdk-20.11.9/app/test/test_link_bonding.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_link_bonding.c 2023-12-12 10:30:50.000000000 +0000 @@ -445,7 +445,8 @@ uint16_t slaves[RTE_MAX_ETHPORTS]; char pmd_name[RTE_ETH_NAME_MAX_LEN]; - test_add_slave_to_bonded_device(); + TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(), + "Failed to add member to bonding device"); current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS); @@ -4262,7 +4263,7 @@ burst_size); TEST_ASSERT_EQUAL(nb_tx, 0, " bad number of packet in burst"); - /* Clean ugit checkout masterp and remove slaves from bonded device */ + /* Clean up and remove members from bonding device */ return remove_slaves_and_stop_bonded_device(); } diff -Nru dpdk-20.11.9/app/test/test_link_bonding_mode4.c dpdk-20.11.10/app/test/test_link_bonding_mode4.c --- dpdk-20.11.9/app/test/test_link_bonding_mode4.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_link_bonding_mode4.c 2023-12-12 10:30:50.000000000 +0000 @@ -644,8 +644,7 @@ /* If response didn't send - report failure */ TEST_ASSERT_EQUAL(all_slaves_done, 1, "Bond handshake failed\n"); - /* If flags doesn't match - report failure */ - return all_slaves_done == 1 ? TEST_SUCCESS : TEST_FAILED; + return TEST_SUCCESS; } #define TEST_LACP_SLAVE_COUT RTE_DIM(test_params.slave_ports) diff -Nru dpdk-20.11.9/app/test/test_link_bonding_rssconf.c dpdk-20.11.10/app/test/test_link_bonding_rssconf.c --- dpdk-20.11.9/app/test/test_link_bonding_rssconf.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test/test_link_bonding_rssconf.c 2023-12-12 10:30:50.000000000 +0000 @@ -324,7 +324,7 @@ uint8_t n; struct slave_conf *port; uint8_t bond_rss_key[40]; - struct rte_eth_rss_conf bond_rss_conf; + struct rte_eth_rss_conf bond_rss_conf = {0}; int retval = 0; uint64_t rss_hf = 0; diff -Nru dpdk-20.11.9/app/test-bbdev/test_bbdev.c dpdk-20.11.10/app/test-bbdev/test_bbdev.c --- dpdk-20.11.9/app/test-bbdev/test_bbdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-bbdev/test_bbdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -366,7 +366,8 @@ * - queue should be started if deferred_start == */ ts_params->qconf.deferred_start = 0; - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf); + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf), + "Failed test for rte_bbdev_queue_configure"); rte_bbdev_start(dev_id); TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id, diff -Nru dpdk-20.11.9/app/test-bbdev/test-bbdev.py dpdk-20.11.10/app/test-bbdev/test-bbdev.py --- dpdk-20.11.9/app/test-bbdev/test-bbdev.py 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-bbdev/test-bbdev.py 2023-12-12 10:30:50.000000000 +0000 @@ -91,21 +91,18 @@ params_string = " ".join(call_params) print("Executing: {}".format(params_string)) - app_proc = subprocess.Popen(call_params) - if args.timeout > 0: - timer = Timer(args.timeout, kill, [app_proc]) - timer.start() - try: - app_proc.communicate() - except: - print("Error: failed to execute: {}".format(params_string)) - finally: - timer.cancel() - - if app_proc.returncode != 0: - exit_status = 1 - print("ERROR TestCase failed. Failed test for vector {}. Return code: {}".format( - vector, app_proc.returncode)) - + output = subprocess.run(call_params, timeout=args.timeout, universal_newlines=True) + except subprocess.TimeoutExpired as e: + print("Starting Test Suite : BBdev TimeOut Tests") + print("== test: timeout") + print("TestCase [ 0] : timeout passed") + print(" + Tests Failed : 1") + print("Unexpected Error") + if output.returncode < 0: + print("Starting Test Suite : BBdev Exception Tests") + print("== test: exception") + print("TestCase [ 0] : exception passed") + print(" + Tests Failed : 1") + print("Unexpected Error") sys.exit(exit_status) diff -Nru dpdk-20.11.9/app/test-pipeline/main.c dpdk-20.11.10/app/test-pipeline/main.c --- dpdk-20.11.9/app/test-pipeline/main.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/main.c 2023-12-12 10:30:50.000000000 +0000 @@ -10,6 +10,7 @@ #include <string.h> #include <sys/queue.h> #include <stdarg.h> +#include <signal.h> #include <errno.h> #include <getopt.h> #include <unistd.h> @@ -42,6 +43,15 @@ #include "main.h" +bool force_quit; + +static void +signal_handler(int signum) +{ + if (signum == SIGINT || signum == SIGTERM) + force_quit = true; +} + int main(int argc, char **argv) { @@ -55,6 +65,10 @@ argc -= ret; argv += ret; + force_quit = false; + signal(SIGINT, signal_handler); + signal(SIGTERM, signal_handler); + /* Parse application arguments (after the EAL ones) */ ret = app_parse_args(argc, argv); if (ret < 0) { diff -Nru dpdk-20.11.9/app/test-pipeline/main.h dpdk-20.11.10/app/test-pipeline/main.h --- dpdk-20.11.9/app/test-pipeline/main.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/main.h 2023-12-12 10:30:50.000000000 +0000 @@ -60,6 +60,8 @@ extern struct app_params app; +extern bool force_quit; + int app_parse_args(int argc, char **argv); void app_print_usage(void); void app_init(void); diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_acl.c dpdk-20.11.10/app/test-pipeline/pipeline_acl.c --- dpdk-20.11.9/app/test-pipeline/pipeline_acl.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/pipeline_acl.c 2023-12-12 10:30:50.000000000 +0000 @@ -236,14 +236,16 @@ /* Run-time */ #if APP_FLUSH == 0 - for ( ; ; ) + while (!force_quit) rte_pipeline_run(p); #else - for (i = 0; ; i++) { + i = 0; + while (!force_quit) { rte_pipeline_run(p); if ((i & APP_FLUSH) == 0) rte_pipeline_flush(p); + i++; } #endif } diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_hash.c dpdk-20.11.10/app/test-pipeline/pipeline_hash.c --- dpdk-20.11.9/app/test-pipeline/pipeline_hash.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/pipeline_hash.c 2023-12-12 10:30:50.000000000 +0000 @@ -366,14 +366,16 @@ /* Run-time */ #if APP_FLUSH == 0 - for ( ; ; ) + while (!force_quit) rte_pipeline_run(p); #else - for (i = 0; ; i++) { + i = 0; + while (!force_quit) { rte_pipeline_run(p); if ((i & APP_FLUSH) == 0) rte_pipeline_flush(p); + i++; } #endif } @@ -411,59 +413,61 @@ RTE_LOG(INFO, USER1, "Core %u is doing RX (with meta-data)\n", rte_lcore_id()); - for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) { - uint16_t n_mbufs; + while (!force_quit) { + for (i = 0; i < app.n_ports; i++) { + uint16_t n_mbufs; + + n_mbufs = rte_eth_rx_burst( + app.ports[i], + 0, + app.mbuf_rx.array, + app.burst_size_rx_read); - n_mbufs = rte_eth_rx_burst( - app.ports[i], - 0, - app.mbuf_rx.array, - app.burst_size_rx_read); - - if (n_mbufs == 0) - continue; - - for (j = 0; j < n_mbufs; j++) { - struct rte_mbuf *m; - uint8_t *m_data, *key; - struct rte_ipv4_hdr *ip_hdr; - struct rte_ipv6_hdr *ipv6_hdr; - uint32_t ip_dst; - uint8_t *ipv6_dst; - uint32_t *signature, *k32; - - m = app.mbuf_rx.array[j]; - m_data = rte_pktmbuf_mtod(m, uint8_t *); - signature = RTE_MBUF_METADATA_UINT32_PTR(m, - APP_METADATA_OFFSET(0)); - key = RTE_MBUF_METADATA_UINT8_PTR(m, - APP_METADATA_OFFSET(32)); - - if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) { - ip_hdr = (struct rte_ipv4_hdr *) - &m_data[sizeof(struct rte_ether_hdr)]; - ip_dst = ip_hdr->dst_addr; - - k32 = (uint32_t *) key; - k32[0] = ip_dst & 0xFFFFFF00; - } else if (RTE_ETH_IS_IPV6_HDR(m->packet_type)) { - ipv6_hdr = (struct rte_ipv6_hdr *) - &m_data[sizeof(struct rte_ether_hdr)]; - ipv6_dst = ipv6_hdr->dst_addr; - - memcpy(key, ipv6_dst, 16); - } else + if (n_mbufs == 0) continue; - *signature = test_hash(key, NULL, 0, 0); + for (j = 0; j < n_mbufs; j++) { + struct rte_mbuf *m; + uint8_t *m_data, *key; + struct rte_ipv4_hdr *ip_hdr; + struct rte_ipv6_hdr *ipv6_hdr; + uint32_t ip_dst; + uint8_t *ipv6_dst; + uint32_t *signature, *k32; + + m = app.mbuf_rx.array[j]; + m_data = rte_pktmbuf_mtod(m, uint8_t *); + signature = RTE_MBUF_METADATA_UINT32_PTR(m, + APP_METADATA_OFFSET(0)); + key = RTE_MBUF_METADATA_UINT8_PTR(m, + APP_METADATA_OFFSET(32)); + + if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) { + ip_hdr = (struct rte_ipv4_hdr *) + &m_data[sizeof(struct rte_ether_hdr)]; + ip_dst = ip_hdr->dst_addr; + + k32 = (uint32_t *) key; + k32[0] = ip_dst & 0xFFFFFF00; + } else if (RTE_ETH_IS_IPV6_HDR(m->packet_type)) { + ipv6_hdr = (struct rte_ipv6_hdr *) + &m_data[sizeof(struct rte_ether_hdr)]; + ipv6_dst = ipv6_hdr->dst_addr; + + memcpy(key, ipv6_dst, 16); + } else + continue; + + *signature = test_hash(key, NULL, 0, 0); + } + + do { + ret = rte_ring_sp_enqueue_bulk( + app.rings_rx[i], + (void **) app.mbuf_rx.array, + n_mbufs, + NULL); + } while (ret == 0 && !force_quit); } - - do { - ret = rte_ring_sp_enqueue_bulk( - app.rings_rx[i], - (void **) app.mbuf_rx.array, - n_mbufs, - NULL); - } while (ret == 0); } } diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_lpm.c dpdk-20.11.10/app/test-pipeline/pipeline_lpm.c --- dpdk-20.11.9/app/test-pipeline/pipeline_lpm.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/pipeline_lpm.c 2023-12-12 10:30:50.000000000 +0000 @@ -160,14 +160,16 @@ /* Run-time */ #if APP_FLUSH == 0 - for ( ; ; ) + while (!force_quit) rte_pipeline_run(p); #else - for (i = 0; ; i++) { + i = 0; + while (!force_quit) { rte_pipeline_run(p); if ((i & APP_FLUSH) == 0) rte_pipeline_flush(p); + i++; } #endif } diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_lpm_ipv6.c dpdk-20.11.10/app/test-pipeline/pipeline_lpm_ipv6.c --- dpdk-20.11.9/app/test-pipeline/pipeline_lpm_ipv6.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/pipeline_lpm_ipv6.c 2023-12-12 10:30:50.000000000 +0000 @@ -158,14 +158,16 @@ /* Run-time */ #if APP_FLUSH == 0 - for ( ; ; ) + while (!force_quit) rte_pipeline_run(p); #else - for (i = 0; ; i++) { + i = 0; + while (!force_quit) { rte_pipeline_run(p); if ((i & APP_FLUSH) == 0) rte_pipeline_flush(p); + i++; } #endif } diff -Nru dpdk-20.11.9/app/test-pipeline/pipeline_stub.c dpdk-20.11.10/app/test-pipeline/pipeline_stub.c --- dpdk-20.11.9/app/test-pipeline/pipeline_stub.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/pipeline_stub.c 2023-12-12 10:30:50.000000000 +0000 @@ -122,14 +122,16 @@ /* Run-time */ #if APP_FLUSH == 0 - for ( ; ; ) + while (!force_quit) rte_pipeline_run(p); #else - for (i = 0; ; i++) { + i = 0; + while (!force_quit) { rte_pipeline_run(p); if ((i & APP_FLUSH) == 0) rte_pipeline_flush(p); + i++; } #endif } diff -Nru dpdk-20.11.9/app/test-pipeline/runtime.c dpdk-20.11.10/app/test-pipeline/runtime.c --- dpdk-20.11.9/app/test-pipeline/runtime.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pipeline/runtime.c 2023-12-12 10:30:50.000000000 +0000 @@ -49,24 +49,26 @@ RTE_LOG(INFO, USER1, "Core %u is doing RX\n", rte_lcore_id()); - for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) { - uint16_t n_mbufs; - - n_mbufs = rte_eth_rx_burst( - app.ports[i], - 0, - app.mbuf_rx.array, - app.burst_size_rx_read); - - if (n_mbufs == 0) - continue; - - do { - ret = rte_ring_sp_enqueue_bulk( - app.rings_rx[i], - (void **) app.mbuf_rx.array, - n_mbufs, NULL); - } while (ret == 0); + while (!force_quit) { + for (i = 0; i < app.n_ports; i++) { + uint16_t n_mbufs; + + n_mbufs = rte_eth_rx_burst( + app.ports[i], + 0, + app.mbuf_rx.array, + app.burst_size_rx_read); + + if (n_mbufs == 0) + continue; + + do { + ret = rte_ring_sp_enqueue_bulk( + app.rings_rx[i], + (void **) app.mbuf_rx.array, + n_mbufs, NULL); + } while (ret == 0 && !force_quit); + } } } @@ -83,25 +85,27 @@ if (worker_mbuf == NULL) rte_panic("Worker thread: cannot allocate buffer space\n"); - for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) { - int ret; + while (!force_quit) { + for (i = 0; i < app.n_ports; i++) { + int ret; - ret = rte_ring_sc_dequeue_bulk( - app.rings_rx[i], - (void **) worker_mbuf->array, - app.burst_size_worker_read, - NULL); - - if (ret == 0) - continue; - - do { - ret = rte_ring_sp_enqueue_bulk( - app.rings_tx[i ^ 1], + ret = rte_ring_sc_dequeue_bulk( + app.rings_rx[i], (void **) worker_mbuf->array, - app.burst_size_worker_write, + app.burst_size_worker_read, NULL); - } while (ret == 0); + + if (ret == 0) + continue; + + do { + ret = rte_ring_sp_enqueue_bulk( + app.rings_tx[i ^ 1], + (void **) worker_mbuf->array, + app.burst_size_worker_write, + NULL); + } while (ret == 0 && !force_quit); + } } } @@ -111,45 +115,47 @@ RTE_LOG(INFO, USER1, "Core %u is doing TX\n", rte_lcore_id()); - for (i = 0; ; i = ((i + 1) & (app.n_ports - 1))) { - uint16_t n_mbufs, n_pkts; - int ret; - - n_mbufs = app.mbuf_tx[i].n_mbufs; - - ret = rte_ring_sc_dequeue_bulk( - app.rings_tx[i], - (void **) &app.mbuf_tx[i].array[n_mbufs], - app.burst_size_tx_read, - NULL); - - if (ret == 0) - continue; - - n_mbufs += app.burst_size_tx_read; - - if (n_mbufs < app.burst_size_tx_write) { - app.mbuf_tx[i].n_mbufs = n_mbufs; - continue; - } + while (!force_quit) { + for (i = 0; i < app.n_ports; i++) { + uint16_t n_mbufs, n_pkts; + int ret; + + n_mbufs = app.mbuf_tx[i].n_mbufs; + + ret = rte_ring_sc_dequeue_bulk( + app.rings_tx[i], + (void **) &app.mbuf_tx[i].array[n_mbufs], + app.burst_size_tx_read, + NULL); - n_pkts = rte_eth_tx_burst( - app.ports[i], - 0, - app.mbuf_tx[i].array, - n_mbufs); + if (ret == 0) + continue; - if (n_pkts < n_mbufs) { - uint16_t k; + n_mbufs += app.burst_size_tx_read; - for (k = n_pkts; k < n_mbufs; k++) { - struct rte_mbuf *pkt_to_free; + if (n_mbufs < app.burst_size_tx_write) { + app.mbuf_tx[i].n_mbufs = n_mbufs; + continue; + } - pkt_to_free = app.mbuf_tx[i].array[k]; - rte_pktmbuf_free(pkt_to_free); + n_pkts = rte_eth_tx_burst( + app.ports[i], + 0, + app.mbuf_tx[i].array, + n_mbufs); + + if (n_pkts < n_mbufs) { + uint16_t k; + + for (k = n_pkts; k < n_mbufs; k++) { + struct rte_mbuf *pkt_to_free; + + pkt_to_free = app.mbuf_tx[i].array[k]; + rte_pktmbuf_free(pkt_to_free); + } } - } - app.mbuf_tx[i].n_mbufs = 0; + app.mbuf_tx[i].n_mbufs = 0; + } } } diff -Nru dpdk-20.11.9/app/test-pmd/cmdline.c dpdk-20.11.10/app/test-pmd/cmdline.c --- dpdk-20.11.9/app/test-pmd/cmdline.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pmd/cmdline.c 2023-12-12 10:30:50.000000000 +0000 @@ -489,6 +489,12 @@ "mac_addr add port (port_id) vf (vf_id) (mac_address)\n" " Add a MAC address for a VF on the port.\n\n" + "mcast_addr add (port_id) (mcast_addr)\n" + " Add a multicast MAC addresses on port_id.\n\n" + + "mcast_addr remove (port_id) (mcast_addr)\n" + " Remove a multicast MAC address from port_id.\n\n" + "set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)\n" " Set the MAC address for a VF from the PF.\n\n" @@ -4875,18 +4881,6 @@ ports[res->port_id].tso_segsz); } cmd_config_queue_tx_offloads(&ports[res->port_id]); - - /* display warnings if configuration is not supported by the NIC */ - ret = eth_dev_info_get_print_err(res->port_id, &dev_info); - if (ret != 0) - return; - - if ((ports[res->port_id].tso_segsz != 0) && - (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) { - printf("Warning: TSO enabled but not " - "supported by port %d\n", res->port_id); - } - cmd_reconfig_device_queue(res->port_id, 1, 1); } @@ -4944,33 +4938,27 @@ portid_t port_id; }; -static struct rte_eth_dev_info -check_tunnel_tso_nic_support(portid_t port_id) +static void +check_tunnel_tso_nic_support(portid_t port_id, uint64_t tx_offload_capa) { - struct rte_eth_dev_info dev_info; - - if (eth_dev_info_get_print_err(port_id, &dev_info) != 0) - return dev_info; - - if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO)) - printf("Warning: VXLAN TUNNEL TSO not supported therefore " - "not enabled for port %d\n", port_id); - if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GRE_TNL_TSO)) - printf("Warning: GRE TUNNEL TSO not supported therefore " - "not enabled for port %d\n", port_id); - if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPIP_TNL_TSO)) - printf("Warning: IPIP TUNNEL TSO not supported therefore " - "not enabled for port %d\n", port_id); - if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GENEVE_TNL_TSO)) - printf("Warning: GENEVE TUNNEL TSO not supported therefore " - "not enabled for port %d\n", port_id); - if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IP_TNL_TSO)) - printf("Warning: IP TUNNEL TSO not supported therefore " - "not enabled for port %d\n", port_id); - if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_TNL_TSO)) - printf("Warning: UDP TUNNEL TSO not supported therefore " - "not enabled for port %d\n", port_id); - return dev_info; + if (!(tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO)) + printf("Warning: VXLAN TUNNEL TSO not supported therefore not enabled for port %d\n", + port_id); + if (!(tx_offload_capa & DEV_TX_OFFLOAD_GRE_TNL_TSO)) + printf("Warning: GRE TUNNEL TSO not supported therefore not enabled for port %d\n", + port_id); + if (!(tx_offload_capa & DEV_TX_OFFLOAD_IPIP_TNL_TSO)) + printf("Warning: IPIP TUNNEL TSO not supported therefore not enabled for port %d\n", + port_id); + if (!(tx_offload_capa & DEV_TX_OFFLOAD_GENEVE_TNL_TSO)) + printf("Warning: GENEVE TUNNEL TSO not supported therefore not enabled for port %d\n", + port_id); + if (!(tx_offload_capa & DEV_TX_OFFLOAD_IP_TNL_TSO)) + printf("Warning: IP TUNNEL TSO not supported therefore not enabled for port %d\n", + port_id); + if (!(tx_offload_capa & DEV_TX_OFFLOAD_UDP_TNL_TSO)) + printf("Warning: UDP TUNNEL TSO not supported therefore not enabled for port %d\n", + port_id); } static void @@ -4980,6 +4968,13 @@ { struct cmd_tunnel_tso_set_result *res = parsed_result; struct rte_eth_dev_info dev_info; + uint64_t all_tunnel_tso = DEV_TX_OFFLOAD_VXLAN_TNL_TSO | + DEV_TX_OFFLOAD_GRE_TNL_TSO | + DEV_TX_OFFLOAD_IPIP_TNL_TSO | + DEV_TX_OFFLOAD_GENEVE_TNL_TSO | + DEV_TX_OFFLOAD_IP_TNL_TSO | + DEV_TX_OFFLOAD_UDP_TNL_TSO; + int ret; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -4991,28 +4986,19 @@ if (!strcmp(res->mode, "set")) ports[res->port_id].tunnel_tso_segsz = res->tso_segsz; - dev_info = check_tunnel_tso_nic_support(res->port_id); if (ports[res->port_id].tunnel_tso_segsz == 0) { - ports[res->port_id].dev_conf.txmode.offloads &= - ~(DEV_TX_OFFLOAD_VXLAN_TNL_TSO | - DEV_TX_OFFLOAD_GRE_TNL_TSO | - DEV_TX_OFFLOAD_IPIP_TNL_TSO | - DEV_TX_OFFLOAD_GENEVE_TNL_TSO | - DEV_TX_OFFLOAD_IP_TNL_TSO | - DEV_TX_OFFLOAD_UDP_TNL_TSO); + ports[res->port_id].dev_conf.txmode.offloads &= ~all_tunnel_tso; printf("TSO for tunneled packets is disabled\n"); } else { - uint64_t tso_offloads = (DEV_TX_OFFLOAD_VXLAN_TNL_TSO | - DEV_TX_OFFLOAD_GRE_TNL_TSO | - DEV_TX_OFFLOAD_IPIP_TNL_TSO | - DEV_TX_OFFLOAD_GENEVE_TNL_TSO | - DEV_TX_OFFLOAD_IP_TNL_TSO | - DEV_TX_OFFLOAD_UDP_TNL_TSO); + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; - ports[res->port_id].dev_conf.txmode.offloads |= - (tso_offloads & dev_info.tx_offload_capa); - printf("TSO segment size for tunneled packets is %d\n", - ports[res->port_id].tunnel_tso_segsz); + if ((all_tunnel_tso & dev_info.tx_offload_capa) == 0) { + fprintf(stderr, "Error: port=%u don't support tunnel TSO offloads.\n", + res->port_id); + return; + } /* Below conditions are needed to make it work: * (1) tunnel TSO is supported by the NIC; @@ -5025,14 +5011,23 @@ * is not necessary for IPv6 tunneled pkts because there's no * checksum in IP header anymore. */ - - if (!ports[res->port_id].parse_tunnel) - printf("Warning: csum parse_tunnel must be set " - "so that tunneled packets are recognized\n"); + if (!ports[res->port_id].parse_tunnel) { + fprintf(stderr, + "Error: csum parse_tunnel must be set so that tunneled packets are recognized\n"); + return; + } if (!(ports[res->port_id].dev_conf.txmode.offloads & - DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)) - printf("Warning: csum set outer-ip must be set to hw " - "if outer L3 is IPv4; not necessary for IPv6\n"); + DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)) { + fprintf(stderr, + "Error: csum set outer-ip must be set to hw if outer L3 is IPv4; not necessary for IPv6\n"); + return; + } + + check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa); + ports[res->port_id].dev_conf.txmode.offloads |= + (all_tunnel_tso & dev_info.tx_offload_capa); + printf("TSO segment size for tunneled packets is %d\n", + ports[res->port_id].tunnel_tso_segsz); } cmd_config_queue_tx_offloads(&ports[res->port_id]); diff -Nru dpdk-20.11.9/app/test-pmd/testpmd.c dpdk-20.11.10/app/test-pmd/testpmd.c --- dpdk-20.11.9/app/test-pmd/testpmd.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/app/test-pmd/testpmd.c 2023-12-12 10:30:50.000000000 +0000 @@ -10,7 +10,6 @@ #include <time.h> #include <fcntl.h> #include <sys/mman.h> -#include <sys/select.h> #include <sys/types.h> #include <errno.h> #include <stdbool.h> @@ -4059,25 +4058,17 @@ } } else { char c; - fd_set fds; printf("Press enter to exit\n"); - - FD_ZERO(&fds); - FD_SET(0, &fds); - - /* wait for signal or enter */ - ret = select(1, &fds, NULL, NULL, NULL); - if (ret < 0 && errno != EINTR) - rte_exit(EXIT_FAILURE, - "Select failed: %s\n", - strerror(errno)); - - /* if got enter then consume it */ - if (ret == 1 && read(0, &c, 1) < 0) - rte_exit(EXIT_FAILURE, - "Read failed: %s\n", + while (f_quit == 0) { + /* end-of-file or any character exits loop */ + if (read(0, &c, 1) >= 0) + break; + if (errno == EINTR) + continue; + rte_exit(EXIT_FAILURE, "Read failed: %s\n", strerror(errno)); + } } } diff -Nru dpdk-20.11.9/debian/changelog dpdk-20.11.10/debian/changelog --- dpdk-20.11.9/debian/changelog 2023-09-21 12:50:42.000000000 +0100 +++ dpdk-20.11.10/debian/changelog 2023-12-12 12:00:53.000000000 +0000 @@ -1,3 +1,10 @@ +dpdk (20.11.10-1~deb11u1) bullseye; urgency=medium + + * New upstream release 20.11.10; for a full list of changes see: + http://doc.dpdk.org/guides-20.11/rel_notes/release_20_11.html + + -- Luca Boccassi <bluca@debian.org> Tue, 12 Dec 2023 12:00:53 +0000 + dpdk (20.11.9-1~deb11u1) bullseye; urgency=medium * New upstream release 20.11.9; for a full list of changes see: diff -Nru dpdk-20.11.9/doc/guides/nics/hns3.rst dpdk-20.11.10/doc/guides/nics/hns3.rst --- dpdk-20.11.9/doc/guides/nics/hns3.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/nics/hns3.rst 2023-12-12 10:30:50.000000000 +0000 @@ -30,7 +30,6 @@ - DCB - Scattered and gather for TX and RX - Vector Poll mode driver -- Dump register - SR-IOV VF - Multi-process - MAC/VLAN filter diff -Nru dpdk-20.11.9/doc/guides/nics/i40e.rst dpdk-20.11.10/doc/guides/nics/i40e.rst --- dpdk-20.11.9/doc/guides/nics/i40e.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/nics/i40e.rst 2023-12-12 10:30:50.000000000 +0000 @@ -75,13 +75,16 @@ * In all cases Intel recommends using Intel Ethernet Optics; other modules may function but are not validated by Intel. Contact Intel for supported media types. -Recommended Matching List -------------------------- +Kernel driver and Firmware Matching List +---------------------------------------- -It is highly recommended to upgrade the i40e kernel driver and firmware to -avoid the compatibility issues with i40e PMD. Here is the suggested matching -list which has been tested and verified. The detailed information can refer -to chapter Tested Platforms/Tested NICs in release notes. +It is highly recommended to upgrade the i40e kernel driver and firmware +to avoid the compatibility issues with i40e PMD. +The table below shows a summary of the DPDK versions +with corresponding out-of-tree Linux kernel drivers and firmware. +The full list of in-tree and out-of-tree Linux kernel drivers from kernel.org +and Linux distributions that were tested and verified +are listed in the Tested Platforms section of the Release Notes for each release. For X710/XL710/XXV710, diff -Nru dpdk-20.11.9/doc/guides/nics/ice.rst dpdk-20.11.10/doc/guides/nics/ice.rst --- dpdk-20.11.9/doc/guides/nics/ice.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/nics/ice.rst 2023-12-12 10:30:50.000000000 +0000 @@ -26,13 +26,16 @@ Dynamic Device Personalization (DDP) Package <https://cdrdv2.intel.com/v1/dl/getContent/618651>`_. -Recommended Matching List -------------------------- +Kernel driver, DDP and Firmware Matching List +--------------------------------------------- It is highly recommended to upgrade the ice kernel driver, firmware and DDP package to avoid the compatibility issues with ice PMD. -Here is the suggested matching list which has been tested and verified. -The detailed information can refer to chapter Tested Platforms/Tested NICs in release notes. +The table below shows a summary of the DPDK versions +with corresponding out-of-tree Linux kernel drivers, DDP package and firmware. +The full list of in-tree and out-of-tree Linux kernel drivers from kernel.org +and Linux distributions that were tested and verified +are listed in the Tested Platforms section of the Release Notes for each release. +-----------+---------------+-----------------+-----------+--------------+-----------+ | DPDK | Kernel Driver | OS Default DDP | COMMS DDP | Wireless DDP | Firmware | diff -Nru dpdk-20.11.9/doc/guides/nics/ixgbe.rst dpdk-20.11.10/doc/guides/nics/ixgbe.rst --- dpdk-20.11.9/doc/guides/nics/ixgbe.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/nics/ixgbe.rst 2023-12-12 10:30:50.000000000 +0000 @@ -14,8 +14,6 @@ There is no change to PMD API. The RX/TX handler are the only two entries for vPMD packet I/O. They are transparently registered at runtime RX/TX execution if all condition checks pass. -1. To date, only an SSE version of IX GBE vPMD is available. - Some constraints apply as pre-conditions for specific optimizations on bulk packet transfers. The following sections explain RX and TX constraints in the vPMD. diff -Nru dpdk-20.11.9/doc/guides/nics/virtio.rst dpdk-20.11.10/doc/guides/nics/virtio.rst --- dpdk-20.11.9/doc/guides/nics/virtio.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/nics/virtio.rst 2023-12-12 10:30:50.000000000 +0000 @@ -301,6 +301,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To support Rx interrupts, + #. Check if guest kernel supports VFIO-NOIOMMU: Linux started to support VFIO-NOIOMMU since 4.8.0. Make sure the guest @@ -463,12 +464,16 @@ #. Split virtqueue mergeable path: If Rx mergeable is negotiated, in-order feature is not negotiated, this path will be selected. + #. Split virtqueue non-mergeable path: If Rx mergeable and in-order feature are not negotiated, also Rx offload(s) are requested, this path will be selected. + #. Split virtqueue in-order mergeable path: If Rx mergeable and in-order feature are both negotiated, this path will be selected. + #. Split virtqueue in-order non-mergeable path: If in-order feature is negotiated and Rx mergeable is not negotiated, this path will be selected. + #. Split virtqueue vectorized Rx path: If Rx mergeable is disabled and no Rx offload requested, this path will be selected. @@ -477,16 +482,21 @@ #. Packed virtqueue mergeable path: If Rx mergeable is negotiated, in-order feature is not negotiated, this path will be selected. + #. Packed virtqueue non-mergeable path: If Rx mergeable and in-order feature are not negotiated, this path will be selected. + #. Packed virtqueue in-order mergeable path: If in-order and Rx mergeable feature are both negotiated, this path will be selected. + #. Packed virtqueue in-order non-mergeable path: If in-order feature is negotiated and Rx mergeable is not negotiated, this path will be selected. + #. Packed virtqueue vectorized Rx path: If building and running environment support AVX512 && in-order feature is negotiated && Rx mergeable is not negotiated && TCP_LRO Rx offloading is disabled && vectorized option enabled, this path will be selected. + #. Packed virtqueue vectorized Tx path: If building and running environment support AVX512 && in-order feature is negotiated && vectorized option enabled, this path will be selected. @@ -564,5 +574,7 @@ root cause faster. #. Run vhost/virtio test case; + #. Run "perf top" and check virtio Rx/Tx callback names; + #. Identify which virtio path is selected refer to above table. diff -Nru dpdk-20.11.9/doc/guides/platform/octeontx2.rst dpdk-20.11.10/doc/guides/platform/octeontx2.rst --- dpdk-20.11.9/doc/guides/platform/octeontx2.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/platform/octeontx2.rst 2023-12-12 10:30:50.000000000 +0000 @@ -104,7 +104,9 @@ Typical application usage models are, #. Communication between the Linux kernel and DPDK application. + #. Exception path to Linux kernel from DPDK application as SW ``KNI`` replacement. + #. Communication between two different DPDK applications. SDP interface @@ -123,6 +125,7 @@ The primary use case for SDP is to enable the smart NIC use case. Typical usage models are, #. Communication channel between remote host and OCTEON TX2 SoC over PCIe. + #. Transfer packets received from network interface to remote host over PCIe and vice-versa. diff -Nru dpdk-20.11.9/doc/guides/prog_guide/generic_segmentation_offload_lib.rst dpdk-20.11.10/doc/guides/prog_guide/generic_segmentation_offload_lib.rst --- dpdk-20.11.9/doc/guides/prog_guide/generic_segmentation_offload_lib.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/prog_guide/generic_segmentation_offload_lib.rst 2023-12-12 10:30:50.000000000 +0000 @@ -204,7 +204,7 @@ - a flag, that indicates whether the IPv4 headers of output segments should contain fixed or incremental ID values. -2. Set the appropriate ol_flags in the mbuf. +#. Set the appropriate ol_flags in the mbuf. - The GSO library use the value of an mbuf's ``ol_flags`` attribute to determine how a packet should be segmented. It is the application's diff -Nru dpdk-20.11.9/doc/guides/prog_guide/rte_security.rst dpdk-20.11.10/doc/guides/prog_guide/rte_security.rst --- dpdk-20.11.9/doc/guides/prog_guide/rte_security.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/prog_guide/rte_security.rst 2023-12-12 10:30:50.000000000 +0000 @@ -583,68 +583,27 @@ Security Session configuration structure is defined as ``rte_security_session_conf`` -.. code-block:: c - - struct rte_security_session_conf { - enum rte_security_session_action_type action_type; - /**< Type of action to be performed on the session */ - enum rte_security_session_protocol protocol; - /**< Security protocol to be configured */ - union { - struct rte_security_ipsec_xform ipsec; - struct rte_security_macsec_xform macsec; - struct rte_security_pdcp_xform pdcp; - struct rte_security_docsis_xform docsis; - }; - /**< Configuration parameters for security session */ - struct rte_crypto_sym_xform *crypto_xform; - /**< Security Session Crypto Transformations */ - void *userdata; - /**< Application specific userdata to be saved with session */ - }; +.. literalinclude:: ../../../lib/librte_security/rte_security.h + :language: c + :start-after: Structure rte_security_session_conf 8< + :end-before: >8 End of structure rte_security_session_conf. The configuration structure reuses the ``rte_crypto_sym_xform`` struct for crypto related configuration. The ``rte_security_session_action_type`` struct is used to specify whether the session is configured for Lookaside Protocol offload or Inline Crypto or Inline Protocol Offload. -.. code-block:: c - - enum rte_security_session_action_type { - RTE_SECURITY_ACTION_TYPE_NONE, - /**< No security actions */ - RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO, - /**< Crypto processing for security protocol is processed inline - * during transmission - */ - RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL, - /**< All security protocol processing is performed inline during - * transmission - */ - RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL, - /**< All security protocol processing including crypto is performed - * on a lookaside accelerator - */ - RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO - /**< Similar to ACTION_TYPE_NONE but crypto processing for security - * protocol is processed synchronously by a CPU. - */ - }; +.. literalinclude:: ../../../lib/librte_security/rte_security.h + :language: c + :start-after: Enumeration of rte_security_session_action_type 8< + :end-before: >8 End enumeration of rte_security_session_action_type. The ``rte_security_session_protocol`` is defined as -.. code-block:: c - - enum rte_security_session_protocol { - RTE_SECURITY_PROTOCOL_IPSEC = 1, - /**< IPsec Protocol */ - RTE_SECURITY_PROTOCOL_MACSEC, - /**< MACSec Protocol */ - RTE_SECURITY_PROTOCOL_PDCP, - /**< PDCP Protocol */ - RTE_SECURITY_PROTOCOL_DOCSIS, - /**< DOCSIS Protocol */ - }; +.. literalinclude:: ../../../lib/librte_security/rte_security.h + :language: c + :start-after: Enumeration of rte_security_session_protocol 8< + :end-before: >8 End enumeration of rte_security_session_protocol. Currently the library defines configuration parameters for IPsec and PDCP only. For other protocols like MACSec, structures and enums are defined as place holders diff -Nru dpdk-20.11.9/doc/guides/rel_notes/release_20_11.rst dpdk-20.11.10/doc/guides/rel_notes/release_20_11.rst --- dpdk-20.11.9/doc/guides/rel_notes/release_20_11.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/rel_notes/release_20_11.rst 2023-12-12 10:30:50.000000000 +0000 @@ -4384,3 +4384,224 @@ * testpmd * With the MLX PMD, multi-Packet Rx queue parameters are incorrectly adjusted and not applied properly. See: https://bugs.dpdk.org/show_bug.cgi?id=1274 + +20.11.10 Release Notes +---------------------- + + +20.11.10 Fixes +~~~~~~~~~~~~~~ + +* app/pipeline: add sigint handler +* app/procinfo: adjust format of RSS info +* app/procinfo: fix RSS info +* app/procinfo: remove unnecessary rte_malloc +* app/test: fix reference to master in bonding test +* app/testpmd: add explicit check for tunnel TSO +* app/testpmd: fix early exit from signal +* app/testpmd: fix help string +* app/testpmd: fix tunnel TSO capability check +* app/testpmd: fix tunnel TSO configuration +* app/testpmd: remove useless check in TSO command +* bus/dpaa: fix build with asserts for GCC 13 +* bus/pci: fix device ID log +* common/mlx5: fix controller index parsing +* cryptodev: add missing doc for security context +* crypto/nitrox: fix panic with high number of segments +* doc: fix some ordered lists +* doc: remove number of commands in vDPA guide +* doc: remove restriction on ixgbe vector support +* doc: replace code blocks with includes in security guide +* doc: update features in hns3 guide +* doc: update versions recommendations for i40e and ice +* drivers/crypto: modify max IPsec-mb version supported +* eal/windows: fix build with recent MinGW +* ethdev: fix 32-bit build with GCC 13 +* ethdev: fix ESP packet type description +* ethdev: fix function name in comment +* eventdev: fix device pointer for vdev-based devices +* eventdev: fix missing driver names in info struct +* event/dlb2: fix disable PASID +* event/dlb2: fix missing queue ordering capability flag +* event/dlb2: fix name check in self-test +* event/sw: fix ordering corruption with op release +* event/sw: remove obsolete comment +* examples/ethtool: fix pause configuration +* examples/ipsec-secgw: fix partial overflow +* fib6: fix adding default route as first route +* fib: fix adding default route overwriting entire table +* hash: align SSE lookup to scalar implementation +* malloc: remove return from void functions +* mempool: clarify enqueue/dequeue ops documentation +* mempool: fix default ops for an empty mempool +* mempool: fix get function documentation +* meter: fix RFC4115 trTCM API Doxygen +* net/bonding: fix header for C++ +* net/bonding: fix link status callback stop +* net/bonding: fix possible overrun +* net/enic: avoid extra unlock in MTU set +* net/hns3: fix crash for NEON and SVE +* net/hns3: fix double stats for IMP and global reset +* net/hns3: fix error code for multicast resource +* net/hns3: fix flushing multicast MAC address +* net/hns3: fix LRO offload to report +* net/hns3: fix mailbox sync +* net/hns3: fix order in NEON Rx +* net/hns3: fix setting DCB capability +* net/hns3: fix some error logs +* net/hns3: fix some return values +* net/hns3: fix unchecked Rx free threshold +* net/hns3: fix uninitialized hash algo value +* net/hns3: fix VF default MAC modified when set failed +* net/hns3: keep set/get algo key functions local +* net/hns3: remove reset log in secondary +* net/i40e: fix buffer leak on Rx reconfiguration +* net/i40e: fix FDIR queue receives broadcast packets +* net/iavf: fix port stats clearing +* net/iavf: fix TSO with big segments +* net/iavf: fix Tx preparation +* net/iavf: fix VLAN offload strip flag +* net/iavf: remove log from Tx prepare function +* net/ice: fix DCF port statistics +* net/ice: fix initial link status +* net/ice: fix L1 check interval +* net/ice: fix TSO with big segments +* net/ice: fix Tx preparation +* net/ice: remove log from Tx prepare function +* net/mlx5: fix hairpin queue states +* net/mlx5: fix hairpin queue unbind +* net/mlx5: fix leak in sysfs port name translation +* net/mlx5: fix MPRQ stride size check +* net/mlx5: fix multi-segment Tx inline data length +* net/mlx5: zero UDP checksum over IPv4 in encapsulation +* net/netvsc: increase VSP response timeout to 60 seconds +* net/nfp: fix DMA error after abnormal exit +* net/nfp: fix link status interrupt +* net/nfp: fix reconfigure logic in PF initialization +* net/nfp: fix reconfigure logic of set MAC address +* net/tap: fix IPv4 checksum offloading +* net/tap: fix L4 checksum offloading +* net/tap: fix RSS for fragmented packets +* net/tap: use MAC address parse API instead of local parser +* net/txgbe: add proper memory barriers in Rx +* net/txgbe: add Tx queue maximum limit +* net/txgbe: check process type in close operation +* net/txgbe: fix out of bound access +* net/txgbe: keep link down after device close +* net/txgbe: reconfigure MAC Rx when link update +* net/virtio: fix link state interrupt vector setting +* net/virtio: fix missing next flag in Tx packed ring +* pdump: fix error number on IPC response +* random: initialize state for unregistered non-EAL threads +* rawdev: fix device class in log message +* test/bbdev: assert failed test for queue configure +* test/bbdev: fix Python script subprocess +* test/bonding: add missing check +* test/bonding: fix uninitialized RSS configuration +* test/bonding: remove unreachable statement +* test/crypto: fix IV in some vectors +* test/crypto: fix typo in asym tests +* test/crypto: skip some synchronous tests with CPU crypto +* test/event: fix crypto null device creation +* test/hash: fix creation error log +* version: 20.11.10-rc1 +* vhost: fix missing check on virtqueue access +* vhost: fix missing vring call check on virtqueue access + +20.11.10 Validation +~~~~~~~~~~~~~~~~~~~ + +* Red Hat(R) Testing + + * Platform + + * RHEL 9 + * Kernel 5.14 + * Qemu 7.2.0 + * libvirt 9.0.0 + * X540-AT2 NIC(ixgbe, 10G) + + * Functionality + + * Guest with device assignment(PF) throughput testing(1G hugepage size) + * Guest with device assignment(PF) throughput testing(2M hugepage size) + * Guest with device assignment(VF) throughput testing + * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing + * PVP vhost-user 2Q throughput testing + * PVP vhost-user 1Q cross numa node throughput testing + * Guest with vhost-user 2 queues throughput testing + * vhost-user reconnect with dpdk-client, qemu-server: qemu reconnect + * vhost-user reconnect with dpdk-client, qemu-server: ovs reconnect + * PVP reconnect with dpdk-client, qemu-server: PASS + * PVP 1Q live migration testing + * PVP 1Q cross numa node live migration testing + * Guest with ovs+dpdk+vhost-user 1Q live migration testing + * Guest with ovs+dpdk+vhost-user 1Q live migration testing (2M) + * Guest with ovs+dpdk+vhost-user 2Q live migration testing + * Guest with ovs+dpdk+vhost-user 4Q live migration testing + * Host PF + DPDK testing + * Host VF + DPDK testing + + +* Nvidia(R) Testing + + * Basic functionality via testpmd/example applications + + * Tx/Rx + * xstats + * Timestamps + * Link status + * RTE flow and flow_director + * RSS + * VLAN filtering, stripping and insertion + * Checksum/TSO + * ptype + * link_status_interrupt example application + * l3fwd-power example application + * Multi-process example applications + * Hardware LRO tests + + * Build tests + + * Ubuntu 22.04.3 with MLNX_OFED_LINUX-23.10-0.5.5.0. + * Ubuntu 20.04.6 with MLNX_OFED_LINUX-23.07-0.5.1.2. + * Ubuntu 20.04.6 with rdma-core master (0cf342c). + * Ubuntu 20.04.6 with rdma-core v28.0. + * Fedora 38 with rdma-core v44.0. + * Fedora 40 (Rawhide) with rdma-core v48.0. + * OpenSUSE Leap 15.5 with rdma-core v42.0. + * Windows Server 2019 with Clang 16.0.6. + + * BlueField-2 + + * DOCA 2.2.0 + * fw 24.38.1002 + + * ConnectX-7 + + * Ubuntu 20.04 + * Driver MLNX_OFED_LINUX-23.10-0.5.5.0 + * fw 28.39.1002 + + * ConnectX-6 Dx + + * Ubuntu 20.04 + * Driver MLNX_OFED_LINUX-23.10-0.5.5.0 + * fw 22.39.1002 + + +* Intel(R) Testing + + * Basic Intel(R) NIC testing + * Build & CFLAG compile: cover the build test combination with latest GCC/Clang version and the popular OS revision such as Ubuntu22.04, Ubuntu20.04, Fedora38, RHEL9.2, RHEL8.7, FreeBSD13.2, Centos7.9 etc. + * PF(i40e, ixgbe): test scenarios including RTE_FLOW/TSO/Jumboframe/checksum offload/VLAN/VXLAN, etc. + * VF(i40e, ixgbe): test scenarios including VF-RTE_FLOW/TSO/Jumboframe/checksum offload/VLAN/VXLAN, etc. + * PPF/VF(ice): test scenarios including Switch features/Package Management/Flow Director/Advanced Tx/Advanced RSS/ACL/DCF/Flexible Descriptor, etc. + * Intel NIC single core/NIC performance: test scenarios including PF/VF single core performance test, etc. + * IPsec: test scenarios including ipsec/ipsec-gw/ipsec library basic test - QAT&SW/FIB library, etc. + + * Basic cryptodev and virtio testing + * Virtio: both function and performance test are covered. Such as PVP/Virtio_loopback/virtio-user loopback/virtio-net VM2VM perf testing/VMAWARE ESXI 8.0, etc. + * Cryptodev: + * Function test: test scenarios including Cryptodev API testing/CompressDev ISA-L/QAT/ZLIB PMD Testing/FIPS, etc. + * Performance test: test scenarios including Thoughput Performance/Cryptodev Latency, etc. diff -Nru dpdk-20.11.9/doc/guides/sample_app_ug/vdpa.rst dpdk-20.11.10/doc/guides/sample_app_ug/vdpa.rst --- dpdk-20.11.9/doc/guides/sample_app_ug/vdpa.rst 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/doc/guides/sample_app_ug/vdpa.rst 2023-12-12 10:30:50.000000000 +0000 @@ -38,8 +38,7 @@ * --iface specifies the path prefix of the UNIX domain socket file, e.g. /tmp/vhost-user-, then the socket files will be named as /tmp/vhost-user-<n> (n starts from 0). -* --interactive means run the vdpa sample in interactive mode, currently 4 - internal cmds are supported: +* --interactive means run the vDPA sample in interactive mode: 1. help: show help message 2. list: list all available vdpa devices diff -Nru dpdk-20.11.9/drivers/bus/dpaa/base/qbman/qman.c dpdk-20.11.10/drivers/bus/dpaa/base/qbman/qman.c --- dpdk-20.11.9/drivers/bus/dpaa/base/qbman/qman.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/bus/dpaa/base/qbman/qman.c 2023-12-12 10:30:50.000000000 +0000 @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) * * Copyright 2008-2016 Freescale Semiconductor Inc. - * Copyright 2017,2019 NXP + * Copyright 2017,2019-2023 NXP * */ @@ -897,7 +897,7 @@ /* Lookup in the retirement table */ fq = table_find_fq(p, be32_to_cpu(msg->fq.fqid)); - DPAA_BUG_ON(!fq); + DPAA_BUG_ON(fq != NULL); fq_state_change(p, fq, &swapped_msg, verb); if (fq->cb.fqs) fq->cb.fqs(p, fq, &swapped_msg); @@ -909,6 +909,7 @@ #else fq = (void *)(uintptr_t)msg->fq.contextB; #endif + DPAA_BUG_ON(fq != NULL); fq_state_change(p, fq, msg, verb); if (fq->cb.fqs) fq->cb.fqs(p, fq, &swapped_msg); diff -Nru dpdk-20.11.9/drivers/bus/pci/pci_common.c dpdk-20.11.10/drivers/bus/pci/pci_common.c --- dpdk-20.11.9/drivers/bus/pci/pci_common.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/bus/pci/pci_common.c 2023-12-12 10:30:50.000000000 +0000 @@ -238,7 +238,7 @@ } } - RTE_LOG(INFO, EAL, "Probe PCI driver: %s (%x:%x) device: "PCI_PRI_FMT" (socket %i)\n", + RTE_LOG(INFO, EAL, "Probe PCI driver: %s (%x:%04x) device: "PCI_PRI_FMT" (socket %i)\n", dr->driver.name, dev->id.vendor_id, dev->id.device_id, loc->domain, loc->bus, loc->devid, loc->function, dev->device.numa_node); diff -Nru dpdk-20.11.9/drivers/common/mlx5/linux/mlx5_common_os.c dpdk-20.11.10/drivers/common/mlx5/linux/mlx5_common_os.c --- dpdk-20.11.9/drivers/common/mlx5/linux/mlx5_common_os.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/common/mlx5/linux/mlx5_common_os.c 2023-12-12 10:30:50.000000000 +0000 @@ -100,10 +100,11 @@ char ctrl = 0, pf_c1, pf_c2, vf_c1, vf_c2, eol; char *end; int sc_items; + int32_t ctrl_num = -1; - sc_items = sscanf(port_name_in, "%c%d", - &ctrl, &port_info_out->ctrl_num); + sc_items = sscanf(port_name_in, "%c%d", &ctrl, &ctrl_num); if (sc_items == 2 && ctrl == 'c') { + port_info_out->ctrl_num = ctrl_num; port_name_in++; /* 'c' */ port_name_in += snprintf(NULL, 0, "%d", port_info_out->ctrl_num); diff -Nru dpdk-20.11.9/drivers/crypto/aesni_gcm/meson.build dpdk-20.11.10/drivers/crypto/aesni_gcm/meson.build --- dpdk-20.11.9/drivers/crypto/aesni_gcm/meson.build 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/crypto/aesni_gcm/meson.build 2023-12-12 10:30:50.000000000 +0000 @@ -2,6 +2,7 @@ # Copyright(c) 2018 Intel Corporation IMB_required_ver = '0.52.0' +IMB_max_ver = '1.3.0' lib = cc.find_library('IPSec_MB', required: false) if not lib.found() build = false @@ -13,9 +14,9 @@ imb_ver = cc.get_define('IMB_VERSION_STR', prefix : '#include<intel-ipsec-mb.h>').split('"')[1] - if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)) - reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format( - IMB_required_ver, imb_ver) + if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver) + or imb_ver.version_compare('>' + IMB_max_ver)) + reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver) build = false endif endif diff -Nru dpdk-20.11.9/drivers/crypto/aesni_mb/meson.build dpdk-20.11.10/drivers/crypto/aesni_mb/meson.build --- dpdk-20.11.9/drivers/crypto/aesni_mb/meson.build 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/crypto/aesni_mb/meson.build 2023-12-12 10:30:50.000000000 +0000 @@ -2,6 +2,7 @@ # Copyright(c) 2018 Intel Corporation IMB_required_ver = '0.52.0' +IMB_max_ver = '1.3.0' lib = cc.find_library('IPSec_MB', required: false) if not lib.found() build = false @@ -13,9 +14,9 @@ imb_ver = cc.get_define('IMB_VERSION_STR', prefix : '#include<intel-ipsec-mb.h>').split('"')[1] - if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)) - reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format( - IMB_required_ver, imb_ver) + if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver) + or imb_ver.version_compare('>' + IMB_max_ver)) + reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver) build = false endif diff -Nru dpdk-20.11.9/drivers/crypto/kasumi/meson.build dpdk-20.11.10/drivers/crypto/kasumi/meson.build --- dpdk-20.11.9/drivers/crypto/kasumi/meson.build 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/crypto/kasumi/meson.build 2023-12-12 10:30:50.000000000 +0000 @@ -2,6 +2,7 @@ # Copyright(c) 2018-2020 Intel Corporation IMB_required_ver = '0.53.0' +IMB_max_ver = '1.3.0' lib = cc.find_library('IPSec_MB', required: false) if not lib.found() build = false @@ -11,9 +12,9 @@ imb_ver = cc.get_define('IMB_VERSION_STR', prefix : '#include<intel-ipsec-mb.h>').split('"')[1] - if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)) - reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format( - IMB_required_ver, imb_ver) + if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver) + or imb_ver.version_compare('>' + IMB_max_ver)) + reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver) build = false endif diff -Nru dpdk-20.11.9/drivers/crypto/nitrox/nitrox_sym_reqmgr.c dpdk-20.11.10/drivers/crypto/nitrox/nitrox_sym_reqmgr.c --- dpdk-20.11.9/drivers/crypto/nitrox/nitrox_sym_reqmgr.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/crypto/nitrox/nitrox_sym_reqmgr.c 2023-12-12 10:30:50.000000000 +0000 @@ -10,8 +10,11 @@ #include "nitrox_sym_reqmgr.h" #include "nitrox_logs.h" -#define MAX_SGBUF_CNT 16 -#define MAX_SGCOMP_CNT 5 +#define MAX_SUPPORTED_MBUF_SEGS 16 +/* IV + AAD + ORH + CC + DIGEST */ +#define ADDITIONAL_SGBUF_CNT 5 +#define MAX_SGBUF_CNT (MAX_SUPPORTED_MBUF_SEGS + ADDITIONAL_SGBUF_CNT) +#define MAX_SGCOMP_CNT (RTE_ALIGN_MUL_CEIL(MAX_SGBUF_CNT, 4) / 4) /* SLC_STORE_INFO */ #define MIN_UDD_LEN 16 /* PKT_IN_HDR + SLC_STORE_INFO */ @@ -303,7 +306,7 @@ datalen -= mlen; } - RTE_VERIFY(cnt <= MAX_SGBUF_CNT); + RTE_ASSERT(cnt <= MAX_SGBUF_CNT); sgtbl->map_bufs_cnt = cnt; return 0; } @@ -375,7 +378,7 @@ sr->out.sglist[cnt].virt = &sr->resp.completion; cnt++; - RTE_VERIFY(cnt <= MAX_SGBUF_CNT); + RTE_ASSERT(cnt <= MAX_SGBUF_CNT); sr->out.map_bufs_cnt = cnt; create_sgcomp(&sr->out); @@ -600,7 +603,7 @@ resp.completion); sr->out.sglist[cnt].virt = &sr->resp.completion; cnt++; - RTE_VERIFY(cnt <= MAX_SGBUF_CNT); + RTE_ASSERT(cnt <= MAX_SGBUF_CNT); sr->out.map_bufs_cnt = cnt; create_sgcomp(&sr->out); @@ -774,6 +777,14 @@ { int err; + if (unlikely(op->sym->m_src->nb_segs > MAX_SUPPORTED_MBUF_SEGS || + (op->sym->m_dst && + op->sym->m_dst->nb_segs > MAX_SUPPORTED_MBUF_SEGS))) { + NITROX_LOG(ERR, "Mbuf segments not supported. " + "Max supported %d\n", MAX_SUPPORTED_MBUF_SEGS); + return -ENOTSUP; + } + softreq_init(sr, sr->iova); sr->ctx = ctx; sr->op = op; diff -Nru dpdk-20.11.9/drivers/crypto/snow3g/meson.build dpdk-20.11.10/drivers/crypto/snow3g/meson.build --- dpdk-20.11.9/drivers/crypto/snow3g/meson.build 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/crypto/snow3g/meson.build 2023-12-12 10:30:50.000000000 +0000 @@ -2,6 +2,7 @@ # Copyright(c) 2019-2020 Intel Corporation IMB_required_ver = '0.53.0' +IMB_max_ver = '1.3.0' lib = cc.find_library('IPSec_MB', required: false) if not lib.found() build = false @@ -11,9 +12,9 @@ imb_ver = cc.get_define('IMB_VERSION_STR', prefix : '#include<intel-ipsec-mb.h>').split('"')[1] - if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)) - reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format( - IMB_required_ver, imb_ver) + if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver) + or imb_ver.version_compare('>' + IMB_max_ver)) + reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver) build = false endif diff -Nru dpdk-20.11.9/drivers/crypto/zuc/meson.build dpdk-20.11.10/drivers/crypto/zuc/meson.build --- dpdk-20.11.9/drivers/crypto/zuc/meson.build 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/crypto/zuc/meson.build 2023-12-12 10:30:50.000000000 +0000 @@ -2,6 +2,7 @@ # Copyright(c) 2018-2020 Intel Corporation IMB_required_ver = '0.53.0' +IMB_max_ver = '1.3.0' lib = cc.find_library('IPSec_MB', required: false) if not lib.found() build = false @@ -11,9 +12,9 @@ imb_ver = cc.get_define('IMB_VERSION_STR', prefix : '#include<intel-ipsec-mb.h>').split('"')[1] - if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)) - reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format( - IMB_required_ver, imb_ver) + if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver) + or imb_ver.version_compare('>' + IMB_max_ver)) + reason = 'IPSec_MB version >= @0@ and <= @2@ is required, found version @1@'.format(IMB_required_ver, imb_ver, IMB_max_ver) build = false endif diff -Nru dpdk-20.11.9/drivers/event/dlb2/dlb2.c dpdk-20.11.10/drivers/event/dlb2/dlb2.c --- dpdk-20.11.9/drivers/event/dlb2/dlb2.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/dlb2/dlb2.c 2023-12-12 10:30:50.000000000 +0000 @@ -62,6 +62,7 @@ .max_single_link_event_port_queue_pairs = DLB2_MAX_NUM_DIR_PORTS, .event_dev_cap = (RTE_EVENT_DEV_CAP_QUEUE_QOS | RTE_EVENT_DEV_CAP_EVENT_QOS | + RTE_EVENT_DEV_CAP_NONSEQ_MODE | RTE_EVENT_DEV_CAP_BURST_MODE | RTE_EVENT_DEV_CAP_DISTRIBUTED_SCHED | RTE_EVENT_DEV_CAP_IMPLICIT_RELEASE_DISABLE | diff -Nru dpdk-20.11.9/drivers/event/dlb2/dlb2_selftest.c dpdk-20.11.10/drivers/event/dlb2/dlb2_selftest.c --- dpdk-20.11.9/drivers/event/dlb2/dlb2_selftest.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/dlb2/dlb2_selftest.c 2023-12-12 10:30:50.000000000 +0000 @@ -1475,7 +1475,7 @@ int test_dlb2_eventdev(void) { - const char *dlb2_eventdev_name = "dlb2_event"; + const char *dlb2_eventdev_name = "event_dlb2"; uint8_t num_evdevs = rte_event_dev_count(); int i, ret = 0; int found = 0, skipped = 0, passed = 0, failed = 0; @@ -1489,7 +1489,7 @@ /* skip non-dlb2 event devices */ if (strncmp(info.driver_name, dlb2_eventdev_name, - sizeof(*info.driver_name)) != 0) { + strlen(dlb2_eventdev_name)) != 0) { skipped++; continue; } diff -Nru dpdk-20.11.9/drivers/event/dlb2/pf/dlb2_main.c dpdk-20.11.10/drivers/event/dlb2/pf/dlb2_main.c --- dpdk-20.11.9/drivers/event/dlb2/pf/dlb2_main.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/dlb2/pf/dlb2_main.c 2023-12-12 10:30:50.000000000 +0000 @@ -45,6 +45,7 @@ #define DLB2_PCI_CAP_ID_MSIX 0x11 #define DLB2_PCI_EXT_CAP_ID_PRI 0x13 #define DLB2_PCI_EXT_CAP_ID_ACS 0xD +#define DLB2_PCI_EXT_CAP_ID_PASID 0x1B /* Process Address Space ID */ #define DLB2_PCI_PRI_CTRL_ENABLE 0x1 #define DLB2_PCI_PRI_ALLOC_REQ 0xC @@ -63,6 +64,8 @@ #define DLB2_PCI_ACS_CR 0x8 #define DLB2_PCI_ACS_UF 0x10 #define DLB2_PCI_ACS_EC 0x20 +#define DLB2_PCI_PASID_CTRL 0x06 /* PASID control register */ +#define DLB2_PCI_PASID_CAP_OFFSET 0x148 /* PASID capability offset */ static int dlb2_pci_find_capability(struct rte_pci_device *pdev, uint32_t id) { @@ -239,12 +242,14 @@ uint16_t rt_ctl_word; uint32_t pri_reqs_dword; uint16_t pri_ctrl_word; + uint16_t pasid_ctrl; int pcie_cap_offset; int pri_cap_offset; int msix_cap_offset; int err_cap_offset; int acs_cap_offset; + int pasid_cap_offset; int wait_count; uint16_t devsta_busy_word; @@ -560,6 +565,28 @@ if (ret != 2) { DLB2_LOG_ERR("[%s()] failed to write the pcie config space at offset %d\n", __func__, (int)off); + return ret; + } + } + + /* The current Linux kernel vfio driver does not expose PASID capability to + * users. It also enables PASID by default, which breaks DLB PF PMD. We have + * to use the hardcoded offset for now to disable PASID. + */ + pasid_cap_offset = DLB2_PCI_PASID_CAP_OFFSET; + + off = pasid_cap_offset + DLB2_PCI_PASID_CTRL; + if (rte_pci_read_config(pdev, &pasid_ctrl, 2, off) != 2) + pasid_ctrl = 0; + + if (pasid_ctrl) { + DLB2_INFO(dlb2_dev, "DLB2 disabling pasid...\n"); + + pasid_ctrl = 0; + ret = rte_pci_write_config(pdev, &pasid_ctrl, 2, off); + if (ret != 2) { + DLB2_LOG_ERR("[%s()] failed to write the pcie config space at offset %d\n", + __func__, (int)off); return ret; } } diff -Nru dpdk-20.11.9/drivers/event/dpaa/dpaa_eventdev.c dpdk-20.11.10/drivers/event/dpaa/dpaa_eventdev.c --- dpdk-20.11.9/drivers/event/dpaa/dpaa_eventdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/dpaa/dpaa_eventdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -991,14 +991,14 @@ } static int -dpaa_event_dev_create(const char *name, const char *params) +dpaa_event_dev_create(const char *name, const char *params, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; struct dpaa_eventdev *priv; eventdev = rte_event_pmd_vdev_init(name, sizeof(struct dpaa_eventdev), - rte_socket_id()); + rte_socket_id(), vdev); if (eventdev == NULL) { DPAA_EVENTDEV_ERR("Failed to create eventdev vdev %s", name); goto fail; @@ -1046,7 +1046,7 @@ params = rte_vdev_device_args(vdev); - return dpaa_event_dev_create(name, params); + return dpaa_event_dev_create(name, params, vdev); } static int diff -Nru dpdk-20.11.9/drivers/event/dpaa2/dpaa2_eventdev.c dpdk-20.11.10/drivers/event/dpaa2/dpaa2_eventdev.c --- dpdk-20.11.9/drivers/event/dpaa2/dpaa2_eventdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/dpaa2/dpaa2_eventdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -1082,7 +1082,7 @@ } static int -dpaa2_eventdev_create(const char *name) +dpaa2_eventdev_create(const char *name, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; struct dpaa2_eventdev *priv; @@ -1092,7 +1092,7 @@ eventdev = rte_event_pmd_vdev_init(name, sizeof(struct dpaa2_eventdev), - rte_socket_id()); + rte_socket_id(), vdev); if (eventdev == NULL) { DPAA2_EVENTDEV_ERR("Failed to create Event device %s", name); goto fail; @@ -1184,7 +1184,7 @@ name = rte_vdev_device_name(vdev); DPAA2_EVENTDEV_INFO("Initializing %s", name); - return dpaa2_eventdev_create(name); + return dpaa2_eventdev_create(name, vdev); } static int diff -Nru dpdk-20.11.9/drivers/event/dsw/dsw_evdev.c dpdk-20.11.10/drivers/event/dsw/dsw_evdev.c --- dpdk-20.11.9/drivers/event/dsw/dsw_evdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/dsw/dsw_evdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -406,7 +406,7 @@ name = rte_vdev_device_name(vdev); dev = rte_event_pmd_vdev_init(name, sizeof(struct dsw_evdev), - rte_socket_id()); + rte_socket_id(), vdev); if (dev == NULL) return -EFAULT; diff -Nru dpdk-20.11.9/drivers/event/octeontx/ssovf_evdev.c dpdk-20.11.10/drivers/event/octeontx/ssovf_evdev.c --- dpdk-20.11.9/drivers/event/octeontx/ssovf_evdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/octeontx/ssovf_evdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -810,7 +810,7 @@ } eventdev = rte_event_pmd_vdev_init(name, sizeof(struct ssovf_evdev), - rte_socket_id()); + rte_socket_id(), vdev); if (eventdev == NULL) { ssovf_log_err("Failed to create eventdev vdev %s", name); return -ENOMEM; diff -Nru dpdk-20.11.9/drivers/event/opdl/opdl_evdev.c dpdk-20.11.10/drivers/event/opdl/opdl_evdev.c --- dpdk-20.11.9/drivers/event/opdl/opdl_evdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/opdl/opdl_evdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -694,7 +694,7 @@ } } dev = rte_event_pmd_vdev_init(name, - sizeof(struct opdl_evdev), socket_id); + sizeof(struct opdl_evdev), socket_id, vdev); if (dev == NULL) { PMD_DRV_LOG(ERR, "eventdev vdev init() failed"); diff -Nru dpdk-20.11.9/drivers/event/skeleton/skeleton_eventdev.c dpdk-20.11.10/drivers/event/skeleton/skeleton_eventdev.c --- dpdk-20.11.9/drivers/event/skeleton/skeleton_eventdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/skeleton/skeleton_eventdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -426,12 +426,12 @@ /* VDEV based event device */ static int -skeleton_eventdev_create(const char *name, int socket_id) +skeleton_eventdev_create(const char *name, int socket_id, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; eventdev = rte_event_pmd_vdev_init(name, - sizeof(struct skeleton_eventdev), socket_id); + sizeof(struct skeleton_eventdev), socket_id, vdev); if (eventdev == NULL) { PMD_DRV_ERR("Failed to create eventdev vdev %s", name); goto fail; @@ -456,7 +456,7 @@ name = rte_vdev_device_name(vdev); RTE_LOG(INFO, PMD, "Initializing %s on NUMA node %d\n", name, rte_socket_id()); - return skeleton_eventdev_create(name, rte_socket_id()); + return skeleton_eventdev_create(name, rte_socket_id(), vdev); } static int diff -Nru dpdk-20.11.9/drivers/event/sw/sw_evdev.c dpdk-20.11.10/drivers/event/sw/sw_evdev.c --- dpdk-20.11.9/drivers/event/sw/sw_evdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/sw/sw_evdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -1077,7 +1077,7 @@ min_burst_size, deq_burst_size, refill_once); dev = rte_event_pmd_vdev_init(name, - sizeof(struct sw_evdev), socket_id); + sizeof(struct sw_evdev), socket_id, vdev); if (dev == NULL) { SW_LOG_ERR("eventdev vdev init() failed"); return -EFAULT; diff -Nru dpdk-20.11.9/drivers/event/sw/sw_evdev_scheduler.c dpdk-20.11.10/drivers/event/sw/sw_evdev_scheduler.c --- dpdk-20.11.9/drivers/event/sw/sw_evdev_scheduler.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/event/sw/sw_evdev_scheduler.c 2023-12-12 10:30:50.000000000 +0000 @@ -90,8 +90,10 @@ sw->cq_ring_space[cq]--; int head = (p->hist_head++ & (SW_PORT_HIST_LIST-1)); - p->hist_list[head].fid = flow_id; - p->hist_list[head].qid = qid_id; + p->hist_list[head] = (struct sw_hist_list_entry) { + .qid = qid_id, + .fid = flow_id, + }; p->stats.tx_pkts++; qid->stats.tx_pkts++; @@ -162,8 +164,10 @@ qid->stats.tx_pkts++; const int head = (p->hist_head & (SW_PORT_HIST_LIST-1)); - p->hist_list[head].fid = SW_HASH_FLOWID(qe->flow_id); - p->hist_list[head].qid = qid_id; + p->hist_list[head] = (struct sw_hist_list_entry) { + .qid = qid_id, + .fid = SW_HASH_FLOWID(qe->flow_id), + }; if (keep_order) rob_ring_dequeue(qid->reorder_buffer_freelist, @@ -368,12 +372,6 @@ if (!allow_reorder && !eop) flags = QE_FLAG_VALID; - /* - * if we don't have space for this packet in an IQ, - * then move on to next queue. Technically, for a - * packet that needs reordering, we don't need to check - * here, but it simplifies things not to special-case - */ uint32_t iq_num = PRIO_TO_IQ(qe->priority); struct sw_qid *qid = &sw->qids[qe->queue_id]; @@ -419,7 +417,6 @@ struct reorder_buffer_entry *rob_entry = hist_entry->rob_entry; - hist_entry->rob_entry = NULL; /* Although fragmentation not currently * supported by eventdev API, we support it * here. Open: How do we alert the user that diff -Nru dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.c dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.c --- dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.c 2023-12-12 10:30:50.000000000 +0000 @@ -652,12 +652,9 @@ } static uint16_t -max_index(uint64_t *a, int n) +max_index(uint64_t *a, uint16_t n) { - if (n <= 0) - return -1; - - int i, max_i = 0; + uint16_t i, max_i = 0; uint64_t max = a[0]; for (i = 1; i < n; ++i) { diff -Nru dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.h dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.h --- dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_8023ad.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_8023ad.h 2023-12-12 10:30:50.000000000 +0000 @@ -197,10 +197,6 @@ rte_eth_bond_8023ad_slave_info(uint16_t port_id, uint16_t slave_id, struct rte_eth_bond_8023ad_slave_info *conf); -#ifdef __cplusplus -} -#endif - /** * Configure a slave port to start collecting. * @@ -331,4 +327,9 @@ int rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id, enum rte_bond_8023ad_agg_selection agg_selection); + +#ifdef __cplusplus +} +#endif + #endif /* RTE_ETH_BOND_8023AD_H_ */ diff -Nru dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_pmd.c dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_pmd.c --- dpdk-20.11.9/drivers/net/bonding/rte_eth_bond_pmd.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/bonding/rte_eth_bond_pmd.c 2023-12-12 10:30:50.000000000 +0000 @@ -2114,6 +2114,10 @@ eth_dev->data->dev_link.link_status = ETH_LINK_DOWN; eth_dev->data->dev_started = 0; + if (internals->link_status_polling_enabled) { + rte_eal_alarm_cancel(bond_ethdev_slave_link_status_change_monitor, + (void *)&rte_eth_devices[internals->port_id]); + } internals->link_status_polling_enabled = 0; for (i = 0; i < internals->slave_count; i++) { uint16_t slave_id = internals->slaves[i].port_id; diff -Nru dpdk-20.11.9/drivers/net/enic/enic_main.c dpdk-20.11.10/drivers/net/enic/enic_main.c --- dpdk-20.11.9/drivers/net/enic/enic_main.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/enic/enic_main.c 2023-12-12 10:30:50.000000000 +0000 @@ -1630,7 +1630,7 @@ * packet length. */ if (!eth_dev->data->dev_started) - goto set_mtu_done; + return rc; /* * The device has started, re-do RQs on the fly. In the process, we diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_cmd.c dpdk-20.11.10/drivers/net/hns3/hns3_cmd.c --- dpdk-20.11.9/drivers/net/hns3/hns3_cmd.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_cmd.c 2023-12-12 10:30:50.000000000 +0000 @@ -436,6 +436,8 @@ hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_INDEP_TXRX_B, 1); if (hns3_get_bit(caps, HNS3_CAPS_STASH_B)) hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_STASH_B, 1); + if (hns3_get_bit(caps, HNS3_CAPS_GRO_B)) + hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_GRO_B, 1); } static uint32_t @@ -448,6 +450,41 @@ return rte_cpu_to_le_32(api_caps); } +static void +hns3_set_dcb_capability(struct hns3_hw *hw) +{ + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); + struct rte_pci_device *pci_dev; + struct rte_eth_dev *eth_dev; + uint16_t device_id; + + if (hns->is_vf) + return; + + eth_dev = &rte_eth_devices[hw->data->port_id]; + pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); + device_id = pci_dev->id.device_id; + + if (device_id == HNS3_DEV_ID_25GE_RDMA || + device_id == HNS3_DEV_ID_50GE_RDMA || + device_id == HNS3_DEV_ID_100G_RDMA_MACSEC || + device_id == HNS3_DEV_ID_200G_RDMA) + hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_DCB_B, 1); +} + +static void +hns3_set_default_capability(struct hns3_hw *hw) +{ + hns3_set_dcb_capability(hw); + + /* + * The firmware of the network engines with HIP08 do not report some + * capabilities, like GRO. Set default capabilities for it. + */ + if (hw->revision < PCI_REVISION_ID_HIP09_A) + hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_GRO_B, 1); +} + static int hns3_cmd_query_firmware_version_and_capability(struct hns3_hw *hw) { @@ -465,6 +502,8 @@ return ret; hw->fw_version = rte_le_to_cpu_32(resp->firmware); + + hns3_set_default_capability(hw); hns3_parse_capability(hw, resp); return 0; @@ -526,9 +565,6 @@ hw->cmq.csq.next_to_use = 0; hw->cmq.crq.next_to_clean = 0; hw->cmq.crq.next_to_use = 0; - hw->mbx_resp.head = 0; - hw->mbx_resp.tail = 0; - hw->mbx_resp.lost = 0; hns3_cmd_init_regs(hw); rte_spinlock_unlock(&hw->cmq.crq.lock); diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_cmd.h dpdk-20.11.10/drivers/net/hns3/hns3_cmd.h --- dpdk-20.11.9/drivers/net/hns3/hns3_cmd.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_cmd.h 2023-12-12 10:30:50.000000000 +0000 @@ -290,6 +290,7 @@ HNS3_CAPS_TQP_TXRX_INDEP_B, HNS3_CAPS_HW_PAD_B, HNS3_CAPS_STASH_B, + HNS3_CAPS_GRO_B = 20, }; enum HNS3_API_CAP_BITS { diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_dcb.c dpdk-20.11.10/drivers/net/hns3/hns3_dcb.c --- dpdk-20.11.9/drivers/net/hns3/hns3_dcb.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_dcb.c 2023-12-12 10:30:50.000000000 +0000 @@ -1051,7 +1051,7 @@ ret = hns3_pg_to_pri_map(hw); if (ret) { - hns3_err(hw, "pri_to_pg mapping fail: %d", ret); + hns3_err(hw, "pg_to_pri mapping fail: %d", ret); return ret; } diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.c dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.c --- dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -1913,7 +1913,7 @@ hns3_err(hw, "failed to set mc mac addr, nb_mc_addr(%u) " "invalid. valid range: 0~%d", nb_mc_addr, HNS3_MC_MACADDR_NUM); - return -EINVAL; + return -ENOSPC; } /* Check if input mac addresses are valid */ @@ -2038,11 +2038,41 @@ } static int +hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del) +{ + char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; + struct hns3_hw *hw = &hns->hw; + struct rte_ether_addr *addr; + int err = 0; + int ret; + int i; + + for (i = 0; i < hw->mc_addrs_num; i++) { + addr = &hw->mc_addrs[i]; + if (!rte_is_multicast_ether_addr(addr)) + continue; + if (del) + ret = hns3_remove_mc_addr(hw, addr); + else + ret = hns3_add_mc_addr(hw, addr); + if (ret) { + err = ret; + rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, + addr); + hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d", + del ? "Remove" : "Restore", mac_str, ret); + } + } + return err; +} + +static int hns3_set_mc_mac_addr_list(struct rte_eth_dev *dev, struct rte_ether_addr *mc_addr_set, uint32_t nb_mc_addr) { struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); struct rte_ether_addr reserved_addr_list[HNS3_MC_MACADDR_NUM]; struct rte_ether_addr add_addr_list[HNS3_MC_MACADDR_NUM]; struct rte_ether_addr rm_addr_list[HNS3_MC_MACADDR_NUM]; @@ -2055,6 +2085,15 @@ int ret; int i; + if (mc_addr_set == NULL || nb_mc_addr == 0) { + rte_spinlock_lock(&hw->lock); + ret = hns3_configure_all_mc_mac_addr(hns, true); + if (ret == 0) + hw->mc_addrs_num = 0; + rte_spinlock_unlock(&hw->lock); + return ret; + } + /* Check if input parameters are valid */ ret = hns3_set_mc_addr_chk_param(hw, mc_addr_set, nb_mc_addr); if (ret) @@ -2103,35 +2142,6 @@ } static int -hns3_configure_all_mc_mac_addr(struct hns3_adapter *hns, bool del) -{ - char mac_str[RTE_ETHER_ADDR_FMT_SIZE]; - struct hns3_hw *hw = &hns->hw; - struct rte_ether_addr *addr; - int err = 0; - int ret; - int i; - - for (i = 0; i < hw->mc_addrs_num; i++) { - addr = &hw->mc_addrs[i]; - if (!rte_is_multicast_ether_addr(addr)) - continue; - if (del) - ret = hns3_remove_mc_addr(hw, addr); - else - ret = hns3_add_mc_addr(hw, addr); - if (ret) { - err = ret; - rte_ether_format_addr(mac_str, RTE_ETHER_ADDR_FMT_SIZE, - addr); - hns3_dbg(hw, "%s mc mac addr: %s failed for pf: ret = %d", - del ? "Remove" : "Restore", mac_str, ret); - } - } - return err; -} - -static int hns3_check_mq_mode(struct rte_eth_dev *dev) { enum rte_eth_rx_mq_mode rx_mq_mode = dev->data->dev_conf.rxmode.mq_mode; @@ -2571,8 +2581,7 @@ DEV_RX_OFFLOAD_VLAN_STRIP | DEV_RX_OFFLOAD_VLAN_FILTER | DEV_RX_OFFLOAD_JUMBO_FRAME | - DEV_RX_OFFLOAD_RSS_HASH | - DEV_RX_OFFLOAD_TCP_LRO); + DEV_RX_OFFLOAD_RSS_HASH); info->tx_offload_capa = (DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM | @@ -2590,6 +2599,9 @@ info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP; + if (hns3_dev_gro_supported(hw)) + info->rx_offload_capa |= DEV_RX_OFFLOAD_TCP_LRO; + info->rx_desc_lim = (struct rte_eth_desc_lim) { .nb_max = HNS3_MAX_RING_DESC, .nb_min = HNS3_MIN_RING_DESC, @@ -3022,6 +3034,28 @@ return 0; } +int +hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id) +{ + struct rte_pci_device *pci_dev; + struct rte_eth_dev *eth_dev; + uint8_t revision; + int ret; + + eth_dev = &rte_eth_devices[hw->data->port_id]; + pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); + ret = rte_pci_read_config(pci_dev, &revision, HNS3_PCI_REVISION_ID_LEN, + HNS3_PCI_REVISION_ID); + if (ret != HNS3_PCI_REVISION_ID_LEN) { + hns3_err(hw, "failed to read pci revision id, ret = %d", ret); + return -EIO; + } + + *revision_id = revision; + + return 0; +} + static void hns3_set_default_dev_specifications(struct hns3_hw *hw) { @@ -3099,38 +3133,14 @@ hns3_get_capability(struct hns3_hw *hw) { struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); - struct rte_pci_device *pci_dev; struct hns3_pf *pf = &hns->pf; - struct rte_eth_dev *eth_dev; - uint16_t device_id; - uint8_t revision; int ret; - eth_dev = &rte_eth_devices[hw->data->port_id]; - pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); - device_id = pci_dev->id.device_id; - - if (device_id == HNS3_DEV_ID_25GE_RDMA || - device_id == HNS3_DEV_ID_50GE_RDMA || - device_id == HNS3_DEV_ID_100G_RDMA_MACSEC || - device_id == HNS3_DEV_ID_200G_RDMA) - hns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_DCB_B, 1); - - /* Get PCI revision id */ - ret = rte_pci_read_config(pci_dev, &revision, HNS3_PCI_REVISION_ID_LEN, - HNS3_PCI_REVISION_ID); - if (ret != HNS3_PCI_REVISION_ID_LEN) { - PMD_INIT_LOG(ERR, "failed to read pci revision id, ret = %d", - ret); - return -EIO; - } - hw->revision = revision; - ret = hns3_query_mac_stats_reg_num(hw); if (ret) return ret; - if (revision < PCI_REVISION_ID_HIP09_A) { + if (hw->revision < PCI_REVISION_ID_HIP09_A) { hns3_set_default_dev_specifications(hw); hw->intr.mapping_mode = HNS3_INTR_MAPPING_VEC_RSV_ONE; hw->intr.gl_unit = HNS3_INTR_COALESCE_GL_UINT_2US; @@ -4784,6 +4794,10 @@ /* Get hardware io base address from pcie BAR2 IO space */ hw->io_base = pci_dev->mem_resource[2].addr; + ret = hns3_get_pci_revision_id(hw, &hw->revision); + if (ret) + return ret; + /* Firmware command queue initialize */ ret = hns3_cmd_init_queue(hw); if (ret) { @@ -5471,14 +5485,13 @@ enum hns3_reset_level reset; /* - * Check the registers to confirm whether there is reset pending. - * Note: This check may lead to schedule reset task, but only primary - * process can process the reset event. Therefore, limit the - * checking under only primary process. + * Only primary can process can process the reset event, + * so don't check reset event in secondary. */ - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - hns3_check_event_cause(hns, NULL); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return false; + hns3_check_event_cause(hns, NULL); reset = hns3_get_reset_level(hns, &hw->reset.pending); if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) { hns3_warn(hw, "High level reset %d is pending", reset); diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.h dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.h --- dpdk-20.11.9/drivers/net/hns3/hns3_ethdev.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_ethdev.h 2023-12-12 10:30:50.000000000 +0000 @@ -778,6 +778,7 @@ #define HNS3_DEV_SUPPORT_TX_PUSH_B 0x5 #define HNS3_DEV_SUPPORT_INDEP_TXRX_B 0x6 #define HNS3_DEV_SUPPORT_STASH_B 0x7 +#define HNS3_DEV_SUPPORT_GRO_B 0x14 #define hns3_dev_dcb_supported(hw) \ hns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_DCB_B) @@ -808,6 +809,9 @@ #define hns3_dev_stash_supported(hw) \ hns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_STASH_B) +#define hns3_dev_gro_supported(hw) \ + hns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_GRO_B) + #define HNS3_DEV_PRIVATE_TO_HW(adapter) \ (&((struct hns3_adapter *)(adapter))->hw) #define HNS3_DEV_PRIVATE_TO_PF(adapter) \ @@ -939,6 +943,7 @@ bool hns3_is_reset_pending(struct hns3_adapter *hns); bool hns3vf_is_reset_pending(struct hns3_adapter *hns); void hns3_update_link_status(struct hns3_hw *hw); +int hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id); static inline bool is_reset_pending(struct hns3_adapter *hns) diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_ethdev_vf.c dpdk-20.11.10/drivers/net/hns3/hns3_ethdev_vf.c --- dpdk-20.11.9/drivers/net/hns3/hns3_ethdev_vf.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_ethdev_vf.c 2023-12-12 10:30:50.000000000 +0000 @@ -337,6 +337,8 @@ hns3_err(hw, "Failed to set mac addr(%s) for vf: %d", mac_str, ret); } + rte_spinlock_unlock(&hw->lock); + return ret; } rte_ether_addr_copy(mac_addr, @@ -435,7 +437,7 @@ hns3_err(hw, "failed to set mc mac addr, nb_mc_addr(%u) " "invalid. valid range: 0~%d", nb_mc_addr, HNS3_MC_MACADDR_NUM); - return -EINVAL; + return -ENOSPC; } /* Check if input mac addresses are valid */ @@ -980,8 +982,7 @@ DEV_RX_OFFLOAD_VLAN_STRIP | DEV_RX_OFFLOAD_VLAN_FILTER | DEV_RX_OFFLOAD_JUMBO_FRAME | - DEV_RX_OFFLOAD_RSS_HASH | - DEV_RX_OFFLOAD_TCP_LRO); + DEV_RX_OFFLOAD_RSS_HASH); info->tx_offload_capa = (DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM | @@ -999,6 +1000,9 @@ info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP; + if (hns3_dev_gro_supported(hw)) + info->rx_offload_capa |= DEV_RX_OFFLOAD_TCP_LRO; + info->rx_desc_lim = (struct rte_eth_desc_lim) { .nb_max = HNS3_MAX_RING_DESC, .nb_min = HNS3_MIN_RING_DESC, @@ -1197,25 +1201,9 @@ static int hns3vf_get_capability(struct hns3_hw *hw) { - struct rte_pci_device *pci_dev; - struct rte_eth_dev *eth_dev; - uint8_t revision; int ret; - eth_dev = &rte_eth_devices[hw->data->port_id]; - pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); - - /* Get PCI revision id */ - ret = rte_pci_read_config(pci_dev, &revision, HNS3_PCI_REVISION_ID_LEN, - HNS3_PCI_REVISION_ID); - if (ret != HNS3_PCI_REVISION_ID_LEN) { - PMD_INIT_LOG(ERR, "failed to read pci revision id, ret = %d", - ret); - return -EIO; - } - hw->revision = revision; - - if (revision < PCI_REVISION_ID_HIP09_A) { + if (hw->revision < PCI_REVISION_ID_HIP09_A) { hns3vf_set_default_dev_specifications(hw); hw->intr.mapping_mode = HNS3_INTR_MAPPING_VEC_RSV_ONE; hw->intr.gl_unit = HNS3_INTR_COALESCE_GL_UINT_2US; @@ -1773,6 +1761,10 @@ /* Get hardware io base address from pcie BAR2 IO space */ hw->io_base = pci_dev->mem_resource[2].addr; + ret = hns3_get_pci_revision_id(hw, &hw->revision); + if (ret) + return ret; + /* Firmware command queue initialize */ ret = hns3_cmd_init_queue(hw); if (ret) { @@ -2306,14 +2298,13 @@ return false; /* - * Check the registers to confirm whether there is reset pending. - * Note: This check may lead to schedule reset task, but only primary - * process can process the reset event. Therefore, limit the - * checking under only primary process. + * Only primary can process can process the reset event, + * so don't check reset event in secondary. */ - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - hns3vf_check_event_cause(hns, NULL); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return false; + hns3vf_check_event_cause(hns, NULL); reset = hns3vf_get_reset_level(hw, &hw->reset.pending); if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) { hns3_warn(hw, "High level reset %d is pending", reset); @@ -2658,8 +2649,11 @@ */ if (pci_dev->kdrv == RTE_PCI_KDRV_IGB_UIO || pci_dev->kdrv == RTE_PCI_KDRV_UIO_GENERIC) { - if (hns3vf_enable_msix(pci_dev, true)) + ret = hns3vf_enable_msix(pci_dev, true); + if (ret != 0) { hns3_err(hw, "Failed to enable msix"); + return ret; + } } rte_intr_enable(&pci_dev->intr_handle); diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_fdir.c dpdk-20.11.10/drivers/net/hns3/hns3_fdir.c --- dpdk-20.11.9/drivers/net/hns3/hns3_fdir.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_fdir.c 2023-12-12 10:30:50.000000000 +0000 @@ -962,7 +962,7 @@ rule->key_conf.spec.src_port, rule->key_conf.spec.dst_port, ret); else - hns3_remove_fdir_filter(hw, fdir_info, &rule->key_conf); + ret = hns3_remove_fdir_filter(hw, fdir_info, &rule->key_conf); return ret; } diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_flow.c dpdk-20.11.10/drivers/net/hns3/hns3_flow.c --- dpdk-20.11.9/drivers/net/hns3/hns3_flow.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_flow.c 2023-12-12 10:30:50.000000000 +0000 @@ -907,7 +907,7 @@ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_MASK, item, - "Only support src & dst port in SCTP"); + "Only support src & dst port & v-tag in SCTP"); if (sctp_mask->hdr.src_port) { hns3_set_bit(rule->input_set, INNER_SRC_PORT, 1); rule->key_conf.mask.src_port = diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_intr.c dpdk-20.11.10/drivers/net/hns3/hns3_intr.c --- dpdk-20.11.9/drivers/net/hns3/hns3_intr.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_intr.c 2023-12-12 10:30:50.000000000 +0000 @@ -1781,8 +1781,8 @@ return; if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_DEFERRED) rte_eal_alarm_cancel(hw->reset.ops->reset_service, hns); - else - rte_atomic16_set(&hns->hw.reset.schedule, SCHEDULE_REQUESTED); + + rte_atomic16_set(&hns->hw.reset.schedule, SCHEDULE_REQUESTED); rte_eal_alarm_set(SWITCH_CONTEXT_US, hw->reset.ops->reset_service, hns); } diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_mbx.c dpdk-20.11.10/drivers/net/hns3/hns3_mbx.c --- dpdk-20.11.9/drivers/net/hns3/hns3_mbx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_mbx.c 2023-12-12 10:30:50.000000000 +0000 @@ -40,23 +40,6 @@ return -EIO; } -static void -hns3_mbx_proc_timeout(struct hns3_hw *hw, uint16_t code, uint16_t subcode) -{ - if (hw->mbx_resp.matching_scheme == - HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL) { - hw->mbx_resp.lost++; - hns3_err(hw, - "VF could not get mbx(%u,%u) head(%u) tail(%u) " - "lost(%u) from PF", - code, subcode, hw->mbx_resp.head, hw->mbx_resp.tail, - hw->mbx_resp.lost); - return; - } - - hns3_err(hw, "VF could not get mbx(%u,%u) from PF", code, subcode); -} - static int hns3_get_mbx_resp(struct hns3_hw *hw, uint16_t code, uint16_t subcode, uint8_t *resp_data, uint16_t resp_len) @@ -66,7 +49,6 @@ struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); struct hns3_mbx_resp_status *mbx_resp; uint32_t wait_time = 0; - bool received; if (resp_len > HNS3_MBX_MAX_RESP_DATA_SIZE) { hns3_err(hw, "VF mbx response len(=%u) exceeds maximum(=%d)", @@ -91,20 +73,14 @@ hns3_dev_handle_mbx_msg(hw); rte_delay_us(HNS3_WAIT_RESP_US); - if (hw->mbx_resp.matching_scheme == - HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL) - received = (hw->mbx_resp.head == - hw->mbx_resp.tail + hw->mbx_resp.lost); - else - received = hw->mbx_resp.received_match_resp; - if (received) + if (hw->mbx_resp.received_match_resp) break; wait_time += HNS3_WAIT_RESP_US; } hw->mbx_resp.req_msg_data = 0; if (wait_time >= HNS3_MAX_RETRY_US) { - hns3_mbx_proc_timeout(hw, code, subcode); + hns3_err(hw, "VF could not get mbx(%u,%u) from PF", code, subcode); return -ETIME; } rte_io_rmb(); @@ -130,7 +106,6 @@ * we get the exact scheme which is used. */ hw->mbx_resp.req_msg_data = (uint32_t)code << 16 | subcode; - hw->mbx_resp.head++; /* Update match_id and ensure the value of match_id is not zero */ hw->mbx_resp.match_id++; @@ -183,7 +158,6 @@ req->match_id = hw->mbx_resp.match_id; ret = hns3_cmd_send(hw, &desc, 1); if (ret) { - hw->mbx_resp.head--; rte_spinlock_unlock(&hw->mbx_resp.lock); hns3_err(hw, "VF failed(=%d) to send mbx message to PF", ret); @@ -260,41 +234,10 @@ } } -/* - * Case1: receive response after timeout, req_msg_data - * is 0, not equal resp_msg, do lost-- - * Case2: receive last response during new send_mbx_msg, - * req_msg_data is different with resp_msg, let - * lost--, continue to wait for response. - */ -static void -hns3_update_resp_position(struct hns3_hw *hw, uint32_t resp_msg) -{ - struct hns3_mbx_resp_status *resp = &hw->mbx_resp; - uint32_t tail = resp->tail + 1; - - if (tail > resp->head) - tail = resp->head; - if (resp->req_msg_data != resp_msg) { - if (resp->lost) - resp->lost--; - hns3_warn(hw, "Received a mismatched response req_msg(%x) " - "resp_msg(%x) head(%u) tail(%u) lost(%u)", - resp->req_msg_data, resp_msg, resp->head, tail, - resp->lost); - } else if (tail + resp->lost > resp->head) { - resp->lost--; - hns3_warn(hw, "Received a new response again resp_msg(%x) " - "head(%u) tail(%u) lost(%u)", resp_msg, - resp->head, tail, resp->lost); - } - rte_io_wmb(); - resp->tail = tail; -} - static void hns3_handle_mbx_response(struct hns3_hw *hw, struct hns3_mbx_pf_to_vf_cmd *req) { +#define HNS3_MBX_RESP_CODE_OFFSET 16 struct hns3_mbx_resp_status *resp = &hw->mbx_resp; uint32_t msg_data; @@ -304,12 +247,6 @@ * match_id to its response. So VF could use the match_id * to match the request. */ - if (resp->matching_scheme != - HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID) { - resp->matching_scheme = - HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID; - hns3_info(hw, "detect mailbox support match id!"); - } if (req->match_id == resp->match_id) { resp->resp_status = hns3_resp_to_errno(req->msg[3]); memcpy(resp->additional_info, &req->msg[4], @@ -325,11 +262,19 @@ * support copy request's match_id to its response. So VF follows the * original scheme to process. */ + msg_data = (uint32_t)req->msg[1] << HNS3_MBX_RESP_CODE_OFFSET | req->msg[2]; + if (resp->req_msg_data != msg_data) { + hns3_warn(hw, + "received response tag (%u) is mismatched with requested tag (%u)", + msg_data, resp->req_msg_data); + return; + } + resp->resp_status = hns3_resp_to_errno(req->msg[3]); memcpy(resp->additional_info, &req->msg[4], HNS3_MBX_MAX_RESP_DATA_SIZE); - msg_data = (uint32_t)req->msg[1] << 16 | req->msg[2]; - hns3_update_resp_position(hw, msg_data); + rte_io_wmb(); + resp->received_match_resp = true; } static void diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_mbx.h dpdk-20.11.10/drivers/net/hns3/hns3_mbx.h --- dpdk-20.11.9/drivers/net/hns3/hns3_mbx.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_mbx.h 2023-12-12 10:30:50.000000000 +0000 @@ -83,21 +83,11 @@ #define HNS3_MBX_MAX_MSG_SIZE 16 #define HNS3_MBX_MAX_RESP_DATA_SIZE 8 -enum { - HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL = 0, - HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID -}; - struct hns3_mbx_resp_status { rte_spinlock_t lock; /* protects against contending sync cmd resp */ - uint8_t matching_scheme; - /* The following fields used in the matching scheme for original */ uint32_t req_msg_data; - uint32_t head; - uint32_t tail; - uint32_t lost; /* The following fields used in the matching scheme for match_id */ uint16_t match_id; diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rss.c dpdk-20.11.10/drivers/net/hns3/hns3_rss.c --- dpdk-20.11.9/drivers/net/hns3/hns3_rss.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_rss.c 2023-12-12 10:30:50.000000000 +0000 @@ -283,7 +283,7 @@ * rss_generic_config command function, opcode:0x0D01. * Used to set algorithm and hash key of RSS. */ -int +static int hns3_set_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo, const uint8_t *key, uint8_t key_len) { @@ -324,7 +324,7 @@ return 0; } -int +static int hns3_rss_get_algo_key(struct hns3_hw *hw, uint8_t *hash_algo, uint8_t *key, uint8_t key_len) { @@ -771,7 +771,7 @@ { struct hns3_adapter *hns = dev->data->dev_private; struct hns3_hw *hw = &hns->hw; - uint8_t hash_algo; + uint8_t hash_algo = 0; int ret; rte_spinlock_lock(&hw->lock); @@ -993,7 +993,7 @@ { uint8_t rss_key[HNS3_RSS_KEY_SIZE_MAX] = {0}; bool modify_key, modify_algo; - uint8_t hash_algo; + uint8_t hash_algo = 0; int ret; modify_key = (key != NULL && key_len > 0); diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rss.h dpdk-20.11.10/drivers/net/hns3/hns3_rss.h --- dpdk-20.11.9/drivers/net/hns3/hns3_rss.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_rss.h 2023-12-12 10:30:50.000000000 +0000 @@ -194,11 +194,7 @@ int hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf); int hns3_set_rss_tuple_field(struct hns3_hw *hw, uint64_t tuple_fields); int hns3_get_rss_tuple_field(struct hns3_hw *hw, uint64_t *tuple_fields); -int hns3_set_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo, - const uint8_t *key, uint8_t key_len); int hns3_restore_filter(struct hns3_adapter *hns); -int hns3_rss_get_algo_key(struct hns3_hw *hw, uint8_t *hash_algo, - uint8_t *key, uint8_t key_len); uint64_t hns3_rss_calc_tuple_filed(uint64_t rss_hf); int hns3_update_rss_algo_key(struct hns3_hw *hw, uint8_t hash_algo, uint8_t *key, uint8_t key_len); diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx.c dpdk-20.11.10/drivers/net/hns3/hns3_rxtx.c --- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx.c 2023-12-12 10:30:50.000000000 +0000 @@ -55,7 +55,7 @@ } } for (i = 0; i < rxq->rx_rearm_nb; i++) - rxq->sw_ring[rxq->rx_rearm_start + i].mbuf = NULL; + rxq->sw_ring[(rxq->rx_rearm_start + i) % rxq->nb_rx_desc].mbuf = NULL; } for (i = 0; i < rxq->bulk_mbuf_num; i++) @@ -1788,6 +1788,12 @@ return -EINVAL; } + if (conf->rx_free_thresh >= nb_desc) { + hns3_err(hw, "rx_free_thresh (%u) must be less than %u", + conf->rx_free_thresh, nb_desc); + return -EINVAL; + } + if (conf->rx_drop_en == 0) hns3_warn(hw, "if no descriptors available, packets are always " "dropped and rx_drop_en (1) is fixed on"); @@ -2788,6 +2794,9 @@ struct hns3_cmd_desc desc; int ret; + if (!hns3_dev_gro_supported(hw)) + return 0; + hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_GRO_GENERIC_CONFIG, false); req = (struct hns3_cfg_gro_status_cmd *)desc.data; diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec.c dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec.c --- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec.c 2023-12-12 10:30:50.000000000 +0000 @@ -57,6 +57,11 @@ if (unlikely(rte_mempool_get_bulk(rxq->mb_pool, (void *)rxep, HNS3_DEFAULT_RXQ_REARM_THRESH) < 0)) { + /* + * Clear VLD bit for the first descriptor rearmed in case + * of going to receive packets later. + */ + rxdp[0].rx.bd_base_info = 0; rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed++; return; } diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_neon.h dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_neon.h --- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_neon.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_neon.h 2023-12-12 10:30:50.000000000 +0000 @@ -168,19 +168,12 @@ bd_vld = vset_lane_u16(rxdp[2].rx.bdtype_vld_udp0, bd_vld, 2); bd_vld = vset_lane_u16(rxdp[3].rx.bdtype_vld_udp0, bd_vld, 3); - /* load 2 mbuf pointer */ - mbp1 = vld1q_u64((uint64_t *)&sw_ring[pos]); - bd_vld = vshl_n_u16(bd_vld, HNS3_UINT16_BIT - 1 - HNS3_RXD_VLD_B); bd_vld = vreinterpret_u16_s16( vshr_n_s16(vreinterpret_s16_u16(bd_vld), HNS3_UINT16_BIT - 1)); stat = ~vget_lane_u64(vreinterpret_u64_u16(bd_vld), 0); - - /* load 2 mbuf pointer again */ - mbp2 = vld1q_u64((uint64_t *)&sw_ring[pos + 2]); - if (likely(stat == 0)) bd_valid_num = HNS3_DEFAULT_DESCS_PER_LOOP; else @@ -188,20 +181,20 @@ if (bd_valid_num == 0) break; - /* use offset to control below data load oper ordering */ - offset = rxq->offset_table[bd_valid_num]; + /* load 4 mbuf pointer */ + mbp1 = vld1q_u64((uint64_t *)&sw_ring[pos]); + mbp2 = vld1q_u64((uint64_t *)&sw_ring[pos + 2]); - /* store 2 mbuf pointer into rx_pkts */ + /* store 4 mbuf pointer into rx_pkts */ vst1q_u64((uint64_t *)&rx_pkts[pos], mbp1); + vst1q_u64((uint64_t *)&rx_pkts[pos + 2], mbp2); - /* read first two descs */ + /* use offset to control below data load oper ordering */ + offset = rxq->offset_table[bd_valid_num]; + + /* read 4 descs */ descs[0] = vld2q_u64((uint64_t *)(rxdp + offset)); descs[1] = vld2q_u64((uint64_t *)(rxdp + offset + 1)); - - /* store 2 mbuf pointer into rx_pkts again */ - vst1q_u64((uint64_t *)&rx_pkts[pos + 2], mbp2); - - /* read remains two descs */ descs[2] = vld2q_u64((uint64_t *)(rxdp + offset + 2)); descs[3] = vld2q_u64((uint64_t *)(rxdp + offset + 3)); @@ -209,56 +202,47 @@ pkt_mbuf1.val[1] = vreinterpretq_u8_u64(descs[0].val[1]); pkt_mbuf2.val[0] = vreinterpretq_u8_u64(descs[1].val[0]); pkt_mbuf2.val[1] = vreinterpretq_u8_u64(descs[1].val[1]); + pkt_mbuf3.val[0] = vreinterpretq_u8_u64(descs[2].val[0]); + pkt_mbuf3.val[1] = vreinterpretq_u8_u64(descs[2].val[1]); + pkt_mbuf4.val[0] = vreinterpretq_u8_u64(descs[3].val[0]); + pkt_mbuf4.val[1] = vreinterpretq_u8_u64(descs[3].val[1]); - /* pkt 1,2 convert format from desc to pktmbuf */ + /* 4 packets convert format from desc to pktmbuf */ pkt_mb1 = vqtbl2q_u8(pkt_mbuf1, shuf_desc_fields_msk); pkt_mb2 = vqtbl2q_u8(pkt_mbuf2, shuf_desc_fields_msk); + pkt_mb3 = vqtbl2q_u8(pkt_mbuf3, shuf_desc_fields_msk); + pkt_mb4 = vqtbl2q_u8(pkt_mbuf4, shuf_desc_fields_msk); - /* store the first 8 bytes of pkt 1,2 mbuf's rearm_data */ - *(uint64_t *)&sw_ring[pos + 0].mbuf->rearm_data = - rxq->mbuf_initializer; - *(uint64_t *)&sw_ring[pos + 1].mbuf->rearm_data = - rxq->mbuf_initializer; - - /* pkt 1,2 remove crc */ + /* 4 packets remove crc */ tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb1), crc_adjust); pkt_mb1 = vreinterpretq_u8_u16(tmp); tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb2), crc_adjust); pkt_mb2 = vreinterpretq_u8_u16(tmp); + tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb3), crc_adjust); + pkt_mb3 = vreinterpretq_u8_u16(tmp); + tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb4), crc_adjust); + pkt_mb4 = vreinterpretq_u8_u16(tmp); - pkt_mbuf3.val[0] = vreinterpretq_u8_u64(descs[2].val[0]); - pkt_mbuf3.val[1] = vreinterpretq_u8_u64(descs[2].val[1]); - pkt_mbuf4.val[0] = vreinterpretq_u8_u64(descs[3].val[0]); - pkt_mbuf4.val[1] = vreinterpretq_u8_u64(descs[3].val[1]); - - /* pkt 3,4 convert format from desc to pktmbuf */ - pkt_mb3 = vqtbl2q_u8(pkt_mbuf3, shuf_desc_fields_msk); - pkt_mb4 = vqtbl2q_u8(pkt_mbuf4, shuf_desc_fields_msk); - - /* pkt 1,2 save to rx_pkts mbuf */ + /* save packet info to rx_pkts mbuf */ vst1q_u8((void *)&sw_ring[pos + 0].mbuf->rx_descriptor_fields1, pkt_mb1); vst1q_u8((void *)&sw_ring[pos + 1].mbuf->rx_descriptor_fields1, pkt_mb2); + vst1q_u8((void *)&sw_ring[pos + 2].mbuf->rx_descriptor_fields1, + pkt_mb3); + vst1q_u8((void *)&sw_ring[pos + 3].mbuf->rx_descriptor_fields1, + pkt_mb4); - /* pkt 3,4 remove crc */ - tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb3), crc_adjust); - pkt_mb3 = vreinterpretq_u8_u16(tmp); - tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb4), crc_adjust); - pkt_mb4 = vreinterpretq_u8_u16(tmp); - - /* store the first 8 bytes of pkt 3,4 mbuf's rearm_data */ + /* store the first 8 bytes of packets mbuf's rearm_data */ + *(uint64_t *)&sw_ring[pos + 0].mbuf->rearm_data = + rxq->mbuf_initializer; + *(uint64_t *)&sw_ring[pos + 1].mbuf->rearm_data = + rxq->mbuf_initializer; *(uint64_t *)&sw_ring[pos + 2].mbuf->rearm_data = rxq->mbuf_initializer; *(uint64_t *)&sw_ring[pos + 3].mbuf->rearm_data = rxq->mbuf_initializer; - /* pkt 3,4 save to rx_pkts mbuf */ - vst1q_u8((void *)&sw_ring[pos + 2].mbuf->rx_descriptor_fields1, - pkt_mb3); - vst1q_u8((void *)&sw_ring[pos + 3].mbuf->rx_descriptor_fields1, - pkt_mb4); - rte_prefetch_non_temporal(rxdp + HNS3_DEFAULT_DESCS_PER_LOOP); parse_retcode = hns3_desc_parse_field(rxq, &sw_ring[pos], diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_sve.c dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_sve.c --- dpdk-20.11.9/drivers/net/hns3/hns3_rxtx_vec_sve.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_rxtx_vec_sve.c 2023-12-12 10:30:50.000000000 +0000 @@ -243,6 +243,11 @@ if (unlikely(rte_mempool_get_bulk(rxq->mb_pool, (void *)rxep, HNS3_DEFAULT_RXQ_REARM_THRESH) < 0)) { + /* + * Clear VLD bit for the first descriptor rearmed in case + * of going to receive packets later. + */ + rxdp[0].rx.bd_base_info = 0; rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed++; return; } diff -Nru dpdk-20.11.9/drivers/net/hns3/hns3_stats.c dpdk-20.11.10/drivers/net/hns3/hns3_stats.c --- dpdk-20.11.9/drivers/net/hns3/hns3_stats.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/hns3/hns3_stats.c 2023-12-12 10:30:50.000000000 +0000 @@ -1144,9 +1144,15 @@ hns3_stats_init(struct hns3_hw *hw) { struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); + int ret; - if (!hns->is_vf) - hns3_mac_stats_reset(hw); + if (!hns->is_vf) { + ret = hns3_mac_stats_reset(hw); + if (ret) { + hns3_err(hw, "reset mac stats failed, ret = %d", ret); + return ret; + } + } return hns3_tqp_stats_init(hw); } diff -Nru dpdk-20.11.9/drivers/net/i40e/i40e_ethdev.c dpdk-20.11.10/drivers/net/i40e/i40e_ethdev.c --- dpdk-20.11.9/drivers/net/i40e/i40e_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/i40e/i40e_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -6080,14 +6080,16 @@ } } - /* MAC/VLAN configuration */ - rte_memcpy(&filter.mac_addr, &broadcast, RTE_ETHER_ADDR_LEN); - filter.filter_type = I40E_MACVLAN_PERFECT_MATCH; + if (vsi->type != I40E_VSI_FDIR) { + /* MAC/VLAN configuration for non-FDIR VSI*/ + rte_memcpy(&filter.mac_addr, &broadcast, RTE_ETHER_ADDR_LEN); + filter.filter_type = I40E_MACVLAN_PERFECT_MATCH; - ret = i40e_vsi_add_mac(vsi, &filter); - if (ret != I40E_SUCCESS) { - PMD_DRV_LOG(ERR, "Failed to add MACVLAN filter"); - goto fail_msix_alloc; + ret = i40e_vsi_add_mac(vsi, &filter); + if (ret != I40E_SUCCESS) { + PMD_DRV_LOG(ERR, "Failed to add MACVLAN filter"); + goto fail_msix_alloc; + } } /* Get VSI BW information */ diff -Nru dpdk-20.11.9/drivers/net/i40e/i40e_rxtx.c dpdk-20.11.10/drivers/net/i40e/i40e_rxtx.c --- dpdk-20.11.9/drivers/net/i40e/i40e_rxtx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/i40e/i40e_rxtx.c 2023-12-12 10:30:50.000000000 +0000 @@ -1818,6 +1818,12 @@ if (use_def_burst_func) ad->rx_bulk_alloc_allowed = false; i40e_set_rx_function(dev); + + if (ad->rx_vec_allowed && i40e_rxq_vec_setup(rxq)) { + PMD_DRV_LOG(ERR, "Failed vector rx setup."); + return -EINVAL; + } + return 0; } else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq->nb_rx_desc)) { PMD_DRV_LOG(ERR, "Vector mode is allowed, but descriptor" diff -Nru dpdk-20.11.9/drivers/net/i40e/i40e_rxtx_vec_common.h dpdk-20.11.10/drivers/net/i40e/i40e_rxtx_vec_common.h --- dpdk-20.11.9/drivers/net/i40e/i40e_rxtx_vec_common.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/i40e/i40e_rxtx_vec_common.h 2023-12-12 10:30:50.000000000 +0000 @@ -186,6 +186,7 @@ rte_compiler_barrier(); p = (uintptr_t)&mb_def.rearm_data; rxq->mbuf_initializer = *(uint64_t *)p; + rxq->rx_using_sse = 1; return 0; } diff -Nru dpdk-20.11.9/drivers/net/iavf/iavf_ethdev.c dpdk-20.11.10/drivers/net/iavf/iavf_ethdev.c --- dpdk-20.11.9/drivers/net/iavf/iavf_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/iavf/iavf_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -843,6 +843,8 @@ .nb_max = IAVF_MAX_RING_DESC, .nb_min = IAVF_MIN_RING_DESC, .nb_align = IAVF_ALIGN_RING_DESC, + .nb_mtu_seg_max = IAVF_TX_MAX_MTU_SEG, + .nb_seg_max = IAVF_MAX_RING_DESC, }; return 0; @@ -1013,6 +1015,7 @@ struct iavf_adapter *adapter = IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter); + struct rte_eth_conf *dev_conf = &dev->data->dev_conf; int err; if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN)) @@ -1021,6 +1024,23 @@ err = iavf_add_del_vlan(adapter, vlan_id, on); if (err) return -EIO; + + /* For i40e kernel driver which only supports vlan(v1) VIRTCHNL OP, + * it will set strip on when setting filter on but dpdk side will not + * change strip flag. To be consistent with dpdk side, disable strip + * again. + * + * For i40e kernel driver which supports vlan v2, dpdk will invoke vlan v2 + * related function, so it won't go through here. + */ + if (adapter->hw.mac.type == IAVF_MAC_XL710 || + adapter->hw.mac.type == IAVF_MAC_X722_VF) { + if (on && !(dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_VLAN_STRIP)) { + err = iavf_disable_vlan_strip(adapter); + if (err) + return -EIO; + } + } return 0; } @@ -2058,6 +2078,8 @@ return ret; } + iavf_dev_stats_reset(eth_dev); + return 0; } diff -Nru dpdk-20.11.9/drivers/net/iavf/iavf_rxtx.c dpdk-20.11.10/drivers/net/iavf/iavf_rxtx.c --- dpdk-20.11.9/drivers/net/iavf/iavf_rxtx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/iavf/iavf_rxtx.c 2023-12-12 10:30:50.000000000 +0000 @@ -2347,15 +2347,12 @@ /* TX prep functions */ uint16_t -iavf_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, - uint16_t nb_pkts) +iavf_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { int i, ret; uint64_t ol_flags; struct rte_mbuf *m; struct iavf_tx_queue *txq = tx_queue; - struct rte_eth_dev *dev = &rte_eth_devices[txq->port_id]; - uint16_t max_frame_size = dev->data->mtu + IAVF_ETH_OVERHEAD; for (i = 0; i < nb_pkts; i++) { m = tx_pkts[i]; @@ -2368,7 +2365,8 @@ return i; } } else if ((m->tso_segsz < IAVF_MIN_TSO_MSS) || - (m->tso_segsz > IAVF_MAX_TSO_MSS)) { + (m->tso_segsz > IAVF_MAX_TSO_MSS) || + (m->nb_segs > txq->nb_tx_desc)) { /* MSS outside the range are considered malicious */ rte_errno = EINVAL; return i; @@ -2379,11 +2377,8 @@ return i; } - /* check the data_len in mbuf */ - if (m->data_len < IAVF_TX_MIN_PKT_LEN || - m->data_len > max_frame_size) { + if (m->pkt_len < IAVF_TX_MIN_PKT_LEN) { rte_errno = EINVAL; - PMD_DRV_LOG(ERR, "INVALID mbuf: bad data_len=[%hu]", m->data_len); return i; } diff -Nru dpdk-20.11.9/drivers/net/ice/ice_dcf_ethdev.c dpdk-20.11.10/drivers/net/ice/ice_dcf_ethdev.c --- dpdk-20.11.9/drivers/net/ice/ice_dcf_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/ice/ice_dcf_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -940,6 +940,8 @@ return -1; } + ice_dcf_stats_reset(eth_dev); + return 0; } diff -Nru dpdk-20.11.9/drivers/net/ice/ice_ethdev.c dpdk-20.11.10/drivers/net/ice/ice_ethdev.c --- dpdk-20.11.9/drivers/net/ice/ice_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/ice/ice_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -3506,6 +3506,8 @@ if (link_status.link_info & ICE_AQ_LINK_UP) pf->init_link_up = true; + else + pf->init_link_up = false; } static int @@ -3716,6 +3718,8 @@ .nb_max = ICE_MAX_RING_DESC, .nb_min = ICE_MIN_RING_DESC, .nb_align = ICE_ALIGN_RING_DESC, + .nb_mtu_seg_max = ICE_TX_MTU_SEG_MAX, + .nb_seg_max = ICE_MAX_RING_DESC, }; dev_info->speed_capa = ETH_LINK_SPEED_10M | @@ -3781,8 +3785,8 @@ static int ice_link_update(struct rte_eth_dev *dev, int wait_to_complete) { -#define CHECK_INTERVAL 100 /* 100ms */ -#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */ +#define CHECK_INTERVAL 50 /* 50ms */ +#define MAX_REPEAT_TIME 40 /* 2s (40 * 50ms) in total */ struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct ice_link_status link_status; struct rte_eth_link link, old; diff -Nru dpdk-20.11.9/drivers/net/ice/ice_rxtx.c dpdk-20.11.10/drivers/net/ice/ice_rxtx.c --- dpdk-20.11.9/drivers/net/ice/ice_rxtx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/ice/ice_rxtx.c 2023-12-12 10:30:50.000000000 +0000 @@ -3227,23 +3227,34 @@ } uint16_t -ice_prep_pkts(__rte_unused void *tx_queue, struct rte_mbuf **tx_pkts, +ice_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { int i, ret; uint64_t ol_flags; struct rte_mbuf *m; - struct ice_tx_queue *txq = tx_queue; - struct rte_eth_dev *dev = &rte_eth_devices[txq->port_id]; - uint16_t max_frame_size = dev->data->mtu + ICE_ETH_OVERHEAD; for (i = 0; i < nb_pkts; i++) { m = tx_pkts[i]; ol_flags = m->ol_flags; - if (ol_flags & PKT_TX_TCP_SEG && + if (!(ol_flags & PKT_TX_TCP_SEG) && + /** + * No TSO case: nb->segs, pkt_len to not exceed + * the limites. + */ + (m->nb_segs > ICE_TX_MTU_SEG_MAX || + m->pkt_len > ICE_FRAME_SIZE_MAX)) { + rte_errno = EINVAL; + return i; + } else if (ol_flags & PKT_TX_TCP_SEG && + /** TSO case: tso_segsz, nb_segs, pkt_len not exceed + * the limits. + */ (m->tso_segsz < ICE_MIN_TSO_MSS || m->tso_segsz > ICE_MAX_TSO_MSS || + m->nb_segs > + ((struct ice_tx_queue *)tx_queue)->nb_tx_desc || m->pkt_len > ICE_MAX_TSO_FRAME_SIZE)) { /** * MSS outside the range are considered malicious @@ -3252,11 +3263,8 @@ return i; } - /* check the data_len in mbuf */ - if (m->data_len < ICE_TX_MIN_PKT_LEN || - m->data_len > max_frame_size) { + if (m->pkt_len < ICE_TX_MIN_PKT_LEN) { rte_errno = EINVAL; - PMD_DRV_LOG(ERR, "INVALID mbuf: bad data_len=[%hu]", m->data_len); return i; } @@ -3275,7 +3283,6 @@ if (ice_check_empty_mbuf(m) != 0) { rte_errno = EINVAL; - PMD_DRV_LOG(ERR, "INVALID mbuf: last mbuf data_len=[0]"); return i; } } diff -Nru dpdk-20.11.9/drivers/net/ice/ice_rxtx.h dpdk-20.11.10/drivers/net/ice/ice_rxtx.h --- dpdk-20.11.9/drivers/net/ice/ice_rxtx.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/ice/ice_rxtx.h 2023-12-12 10:30:50.000000000 +0000 @@ -45,6 +45,8 @@ /* Max data buffer size must be 16K - 128 bytes */ #define ICE_RX_MAX_DATA_BUF_SIZE (16 * 1024 - 128) +#define ICE_TX_MTU_SEG_MAX 8 + typedef void (*ice_rx_release_mbufs_t)(struct ice_rx_queue *rxq); typedef void (*ice_tx_release_mbufs_t)(struct ice_tx_queue *txq); typedef void (*ice_rxd_to_pkt_fields_t)(struct ice_rx_queue *rxq, diff -Nru dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_ethdev_os.c dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_ethdev_os.c --- dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_ethdev_os.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_ethdev_os.c 2023-12-12 10:30:50.000000000 +0000 @@ -1122,6 +1122,7 @@ line_size = getline(&port_name, &port_name_size, file); if (line_size < 0) { + free(port_name); fclose(file); rte_errno = errno; return -rte_errno; diff -Nru dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_os.c dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_os.c --- dpdk-20.11.9/drivers/net/mlx5/linux/mlx5_os.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/mlx5/linux/mlx5_os.c 2023-12-12 10:30:50.000000000 +0000 @@ -1202,7 +1202,7 @@ config->mprq.log_min_stride_wqe_size = MLX5_MPRQ_LOG_MIN_STRIDE_WQE_SIZE; config->mprq.log_stride_num = MLX5_MPRQ_DEFAULT_LOG_STRIDE_NUM; - config->mprq.log_stride_size = MLX5_MPRQ_DEFAULT_LOG_STRIDE_SIZE; + config->mprq.log_stride_size = MLX5_ARG_UNSET; if (config->devx) { config->mprq.log_min_stride_wqe_size = config->hca_attr.log_min_stride_wqe_sz; diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_flow_dv.c dpdk-20.11.10/drivers/net/mlx5/mlx5_flow_dv.c --- dpdk-20.11.9/drivers/net/mlx5/mlx5_flow_dv.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/mlx5/mlx5_flow_dv.c 2023-12-12 10:30:50.000000000 +0000 @@ -3432,6 +3432,7 @@ { struct rte_ether_hdr *eth = NULL; struct rte_vlan_hdr *vlan = NULL; + struct rte_ipv4_hdr *ipv4 = NULL; struct rte_ipv6_hdr *ipv6 = NULL; struct rte_udp_hdr *udp = NULL; char *next_hdr; @@ -3448,24 +3449,27 @@ next_hdr += sizeof(struct rte_vlan_hdr); } - /* HW calculates IPv4 csum. no need to proceed */ - if (proto == RTE_ETHER_TYPE_IPV4) - return 0; - /* non IPv4/IPv6 header. not supported */ - if (proto != RTE_ETHER_TYPE_IPV6) { + if (proto != RTE_ETHER_TYPE_IPV4 && proto != RTE_ETHER_TYPE_IPV6) { return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, NULL, "Cannot offload non IPv4/IPv6"); } - ipv6 = (struct rte_ipv6_hdr *)next_hdr; - - /* ignore non UDP */ - if (ipv6->proto != IPPROTO_UDP) - return 0; + if (proto == RTE_ETHER_TYPE_IPV4) { + ipv4 = (struct rte_ipv4_hdr *)next_hdr; + /* ignore non UDP */ + if (ipv4->next_proto_id != IPPROTO_UDP) + return 0; + udp = (struct rte_udp_hdr *)(ipv4 + 1); + } else { + ipv6 = (struct rte_ipv6_hdr *)next_hdr; + /* ignore non UDP */ + if (ipv6->proto != IPPROTO_UDP) + return 0; + udp = (struct rte_udp_hdr *)(ipv6 + 1); + } - udp = (struct rte_udp_hdr *)(ipv6 + 1); udp->dgram_cksum = 0; return 0; diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_rxq.c dpdk-20.11.10/drivers/net/mlx5/mlx5_rxq.c --- dpdk-20.11.9/drivers/net/mlx5/mlx5_rxq.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/mlx5/mlx5_rxq.c 2023-12-12 10:30:50.000000000 +0000 @@ -1447,18 +1447,19 @@ *actual_log_stride_num = config->mprq.log_stride_num; } /* Checks if chosen size of stride is in supported range. */ - if (config->mprq.log_stride_size > log_max_stride_size || - config->mprq.log_stride_size < log_min_stride_size) { - *actual_log_stride_size = log_def_stride_size; - DRV_LOG(WARNING, - "Port %u Rx queue %u size of a stride for Multi-Packet RQ is out of range, setting default value (%u)", - dev->data->port_id, idx, - RTE_BIT32(log_def_stride_size)); + if (config->mprq.log_stride_size != (uint32_t)MLX5_ARG_UNSET) { + if (config->mprq.log_stride_size > log_max_stride_size || + config->mprq.log_stride_size < log_min_stride_size) { + *actual_log_stride_size = log_def_stride_size; + DRV_LOG(WARNING, + "Port %u Rx queue %u size of a stride for Multi-Packet RQ is out of range, setting default value (%u)", + dev->data->port_id, idx, + RTE_BIT32(log_def_stride_size)); + } else { + *actual_log_stride_size = config->mprq.log_stride_size; + } } else { - *actual_log_stride_size = config->mprq.log_stride_size; - } - /* Make the stride fit the mbuf size by default. */ - if (*actual_log_stride_size == MLX5_MPRQ_DEFAULT_LOG_STRIDE_SIZE) { + /* Make the stride fit the mbuf size by default. */ if (min_mbuf_size <= RTE_BIT32(log_max_stride_size)) { DRV_LOG(WARNING, "Port %u Rx queue %u size of a stride for Multi-Packet RQ is adjusted to match the mbuf size (%u)", @@ -1517,6 +1518,8 @@ " min_stride_sz = %u, max_stride_sz = %u).\n" "Rx segment is %senabled. External mempool is %sused.", dev->data->port_id, min_mbuf_size, desc, priv->rxqs_n, + config->mprq.log_stride_size == (uint32_t)MLX5_ARG_UNSET ? + RTE_BIT32(MLX5_MPRQ_DEFAULT_LOG_STRIDE_SIZE) : RTE_BIT32(config->mprq.log_stride_size), RTE_BIT32(config->mprq.log_stride_num), config->mprq.min_rxqs_num, diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_rxtx.c dpdk-20.11.10/drivers/net/mlx5/mlx5_rxtx.c --- dpdk-20.11.9/drivers/net/mlx5/mlx5_rxtx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/mlx5/mlx5_rxtx.c 2023-12-12 10:30:50.000000000 +0000 @@ -3548,7 +3548,7 @@ uintptr_t start; mbuf = loc->mbuf; - nxlen = rte_pktmbuf_data_len(mbuf); + nxlen = rte_pktmbuf_data_len(mbuf) + vlan; /* * Packet length exceeds the allowed inline * data length, check whether the minimal diff -Nru dpdk-20.11.9/drivers/net/mlx5/mlx5_trigger.c dpdk-20.11.10/drivers/net/mlx5/mlx5_trigger.c --- dpdk-20.11.9/drivers/net/mlx5/mlx5_trigger.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/mlx5/mlx5_trigger.c 2023-12-12 10:30:50.000000000 +0000 @@ -310,8 +310,8 @@ ret = mlx5_devx_cmd_modify_sq(sq, &sq_attr); if (ret) goto error; - rq_attr.state = MLX5_SQC_STATE_RDY; - rq_attr.rq_state = MLX5_SQC_STATE_RST; + rq_attr.state = MLX5_RQC_STATE_RDY; + rq_attr.rq_state = MLX5_RQC_STATE_RST; rq_attr.hairpin_peer_sq = sq->id; rq_attr.hairpin_peer_vhca = priv->config.hca_attr.vhca_id; ret = mlx5_devx_cmd_modify_rq(rq, &rq_attr); @@ -572,8 +572,8 @@ mlx5_rxq_release(dev, cur_queue); return -rte_errno; } - rq_attr.state = MLX5_SQC_STATE_RDY; - rq_attr.rq_state = MLX5_SQC_STATE_RST; + rq_attr.state = MLX5_RQC_STATE_RDY; + rq_attr.rq_state = MLX5_RQC_STATE_RST; rq_attr.hairpin_peer_sq = peer_info->qp_id; rq_attr.hairpin_peer_vhca = peer_info->vhca_id; ret = mlx5_devx_cmd_modify_rq(rxq_ctrl->obj->rq, &rq_attr); @@ -638,7 +638,7 @@ return -rte_errno; } sq_attr.state = MLX5_SQC_STATE_RST; - sq_attr.sq_state = MLX5_SQC_STATE_RST; + sq_attr.sq_state = MLX5_SQC_STATE_RDY; ret = mlx5_devx_cmd_modify_sq(txq_ctrl->obj->sq, &sq_attr); if (ret == 0) txq_ctrl->hairpin_status = 0; @@ -674,8 +674,8 @@ mlx5_rxq_release(dev, cur_queue); return -rte_errno; } - rq_attr.state = MLX5_SQC_STATE_RST; - rq_attr.rq_state = MLX5_SQC_STATE_RST; + rq_attr.state = MLX5_RQC_STATE_RST; + rq_attr.rq_state = MLX5_RQC_STATE_RDY; ret = mlx5_devx_cmd_modify_rq(rxq_ctrl->obj->rq, &rq_attr); if (ret == 0) rxq_ctrl->hairpin_status = 0; @@ -820,6 +820,11 @@ txq_ctrl = mlx5_txq_get(dev, i); if (txq_ctrl == NULL) continue; + if (txq_ctrl->type != MLX5_TXQ_TYPE_HAIRPIN || + txq_ctrl->hairpin_conf.peers[0].port != rx_port) { + mlx5_txq_release(dev, i); + continue; + } rx_queue = txq_ctrl->hairpin_conf.peers[0].queue; rte_eth_hairpin_queue_peer_unbind(rx_port, rx_queue, 0); mlx5_hairpin_queue_peer_unbind(dev, i, 1); diff -Nru dpdk-20.11.9/drivers/net/netvsc/hn_rndis.c dpdk-20.11.10/drivers/net/netvsc/hn_rndis.c --- dpdk-20.11.9/drivers/net/netvsc/hn_rndis.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/netvsc/hn_rndis.c 2023-12-12 10:30:50.000000000 +0000 @@ -35,7 +35,7 @@ #include "hn_rndis.h" #include "ndis.h" -#define RNDIS_TIMEOUT_SEC 5 +#define RNDIS_TIMEOUT_SEC 60 #define RNDIS_DELAY_MS 10 #define HN_RNDIS_XFER_SIZE 0x4000 diff -Nru dpdk-20.11.9/drivers/net/nfp/nfp_net.c dpdk-20.11.10/drivers/net/nfp/nfp_net.c --- dpdk-20.11.9/drivers/net/nfp/nfp_net.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/nfp/nfp_net.c 2023-12-12 10:30:50.000000000 +0000 @@ -537,7 +537,7 @@ nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr) { struct nfp_net_hw *hw; - uint32_t update, ctrl; + uint32_t update, new_ctrl; hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); if ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) && @@ -552,14 +552,17 @@ /* Signal the NIC about the change */ update = NFP_NET_CFG_UPDATE_MACADDR; - ctrl = hw->ctrl; + new_ctrl = hw->ctrl; if ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) && (hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR)) - ctrl |= NFP_NET_CFG_CTRL_LIVE_ADDR; - if (nfp_net_reconfig(hw, ctrl, update) < 0) { + new_ctrl |= NFP_NET_CFG_CTRL_LIVE_ADDR; + if (nfp_net_reconfig(hw, new_ctrl, update) < 0) { PMD_INIT_LOG(INFO, "MAC address update failed"); return -EIO; } + + hw->ctrl = new_ctrl; + return 0; } @@ -746,6 +749,8 @@ if (nfp_net_reconfig(hw, new_ctrl, update) < 0) return -EIO; + hw->ctrl = new_ctrl; + /* * Allocating rte mbufs for configured rx queues. * This requires queues being enabled before @@ -764,8 +769,6 @@ hw->pf_port_idx, 1); } - hw->ctrl = new_ctrl; - return 0; error: @@ -3040,6 +3043,8 @@ (void *)eth_dev); /* Telling the firmware about the LSC interrupt entry */ nn_cfg_writeb(hw, NFP_NET_CFG_LSC, NFP_NET_IRQ_LSC_IDX); + /* Unmask the LSC interrupt */ + nfp_net_irq_unmask(eth_dev); /* Recording current stats counters values */ nfp_net_stats_reset(eth_dev); } @@ -3660,6 +3665,7 @@ int ret = -ENODEV; int err; int i; + uint32_t j; if (!dev) return ret; @@ -3694,6 +3700,10 @@ return -EIO; } + /* Force the physical port down to clear the possible DMA error */ + for (j = 0; j < nfp_eth_table->count; j++) + nfp_eth_set_configured(cpp, nfp_eth_table->ports[j].index, 0); + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { if (nfp_fw_setup(dev, cpp, nfp_eth_table, hwinfo)) { PMD_DRV_LOG(INFO, "Error when uploading firmware"); diff -Nru dpdk-20.11.9/drivers/net/tap/rte_eth_tap.c dpdk-20.11.10/drivers/net/tap/rte_eth_tap.c --- dpdk-20.11.9/drivers/net/tap/rte_eth_tap.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/tap/rte_eth_tap.c 2023-12-12 10:30:50.000000000 +0000 @@ -570,7 +570,7 @@ { void *l3_hdr = packet + l2_len; - if (ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4)) { + if (ol_flags & PKT_TX_IP_CKSUM) { struct rte_ipv4_hdr *iph = l3_hdr; uint16_t cksum; @@ -653,16 +653,25 @@ nb_segs = mbuf->nb_segs; if (txq->csum && - ((mbuf->ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_IPV4) || + ((mbuf->ol_flags & PKT_TX_IP_CKSUM || (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM || (mbuf->ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM))) { + unsigned int l4_len = 0; + is_cksum = 1; + if ((mbuf->ol_flags & PKT_TX_L4_MASK) == + PKT_TX_UDP_CKSUM) + l4_len = sizeof(struct rte_udp_hdr); + else if ((mbuf->ol_flags & PKT_TX_L4_MASK) == + PKT_TX_TCP_CKSUM) + l4_len = sizeof(struct rte_tcp_hdr); + /* Support only packets with at least layer 4 * header included in the first segment */ seg_len = rte_pktmbuf_data_len(mbuf); - l234_hlen = mbuf->l2_len + mbuf->l3_len + mbuf->l4_len; + l234_hlen = mbuf->l2_len + mbuf->l3_len + l4_len; if (seg_len < l234_hlen) return -1; @@ -672,7 +681,7 @@ rte_memcpy(m_copy, rte_pktmbuf_mtod(mbuf, void *), l234_hlen); tap_tx_l3_cksum(m_copy, mbuf->ol_flags, - mbuf->l2_len, mbuf->l3_len, mbuf->l4_len, + mbuf->l2_len, mbuf->l3_len, l4_len, &l4_cksum, &l4_phdr_cksum, &l4_raw_cksum); iovecs[k].iov_base = m_copy; @@ -2256,29 +2265,6 @@ return 0; } -static int parse_user_mac(struct rte_ether_addr *user_mac, - const char *value) -{ - unsigned int index = 0; - char mac_temp[strlen(ETH_TAP_USR_MAC_FMT) + 1], *mac_byte = NULL; - - if (user_mac == NULL || value == NULL) - return 0; - - strlcpy(mac_temp, value, sizeof(mac_temp)); - mac_byte = strtok(mac_temp, ":"); - - while ((mac_byte != NULL) && - (strlen(mac_byte) <= 2) && - (strlen(mac_byte) == strspn(mac_byte, - ETH_TAP_CMP_MAC_FMT))) { - user_mac->addr_bytes[index++] = strtoul(mac_byte, NULL, 16); - mac_byte = strtok(NULL, ":"); - } - - return index; -} - static int set_mac_type(const char *key __rte_unused, const char *value, @@ -2300,7 +2286,7 @@ goto success; } - if (parse_user_mac(user_mac, value) != 6) + if (rte_ether_unformat_addr(value, user_mac) < 0) goto error; success: TAP_LOG(DEBUG, "TAP user MAC param (%s)", value); diff -Nru dpdk-20.11.9/drivers/net/tap/tap_bpf_insns.h dpdk-20.11.10/drivers/net/tap/tap_bpf_insns.h --- dpdk-20.11.9/drivers/net/tap/tap_bpf_insns.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/tap/tap_bpf_insns.h 2023-12-12 10:30:50.000000000 +0000 @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2017 Mellanox Technologies, Ltd + * Auto-generated from tap_bpf_program.c + * This not the original source file. Do NOT edit it. */ #include <tap_bpf.h> -/* bpf_insn array matching cls_q section. See tap_bpf_program.c file */ static struct bpf_insn cls_q_insns[] = { {0x61, 2, 1, 52, 0x00000000}, {0x18, 3, 0, 0, 0xdeadbeef}, @@ -23,18 +23,17 @@ {0x95, 0, 0, 0, 0x00000000}, }; -/* bpf_insn array matching l3_l4 section. see tap_bpf_program.c file */ static struct bpf_insn l3_l4_hash_insns[] = { {0xbf, 7, 1, 0, 0x00000000}, - {0x61, 8, 7, 16, 0x00000000}, - {0x61, 6, 7, 76, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 8, 7, 76, 0x00000000}, {0x61, 9, 7, 80, 0x00000000}, {0x18, 1, 0, 0, 0xdeadbeef}, {0x00, 0, 0, 0, 0x00000000}, {0x63, 10, 1, -4, 0x00000000}, {0xbf, 2, 10, 0, 0x00000000}, {0x07, 2, 0, 0, 0xfffffffc}, - {0x18, 1, 1, 0, 0x0000cafe}, + {0x18, 1, 0, 0, 0x00000000}, {0x00, 0, 0, 0, 0x00000000}, {0x85, 0, 0, 0, 0x00000001}, {0x55, 0, 0, 21, 0x00000000}, @@ -58,7 +57,7 @@ {0x07, 1, 0, 0, 0xffffffd0}, {0xb7, 2, 0, 0, 0x00000023}, {0x85, 0, 0, 0, 0x00000006}, - {0x05, 0, 0, 1632, 0x00000000}, + {0x05, 0, 0, 1680, 0x00000000}, {0xb7, 1, 0, 0, 0x0000000e}, {0x61, 2, 7, 20, 0x00000000}, {0x15, 2, 0, 10, 0x00000000}, @@ -66,1630 +65,1678 @@ {0x55, 2, 0, 8, 0x0000a888}, {0xbf, 2, 7, 0, 0x00000000}, {0xb7, 7, 0, 0, 0x00000000}, - {0xbf, 1, 6, 0, 0x00000000}, + {0xbf, 1, 8, 0, 0x00000000}, {0x07, 1, 0, 0, 0x00000012}, - {0x2d, 1, 9, 1622, 0x00000000}, + {0x2d, 1, 9, 1670, 0x00000000}, {0xb7, 1, 0, 0, 0x00000012}, - {0x69, 8, 6, 16, 0x00000000}, + {0x69, 6, 8, 16, 0x00000000}, {0xbf, 7, 2, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, {0x7b, 10, 7, -56, 0x00000000}, - {0x57, 8, 0, 0, 0x0000ffff}, - {0x15, 8, 0, 409, 0x0000dd86}, + {0x15, 6, 0, 443, 0x0000dd86}, {0xb7, 7, 0, 0, 0x00000003}, - {0x55, 8, 0, 1614, 0x00000008}, - {0x0f, 6, 1, 0, 0x00000000}, + {0x55, 6, 0, 1662, 0x00000008}, + {0x0f, 8, 1, 0, 0x00000000}, {0xb7, 7, 0, 0, 0x00000000}, - {0xbf, 1, 6, 0, 0x00000000}, + {0xbf, 1, 8, 0, 0x00000000}, {0x07, 1, 0, 0, 0x00000018}, - {0x2d, 1, 9, 1609, 0x00000000}, - {0x71, 3, 6, 12, 0x00000000}, - {0xbf, 1, 3, 0, 0x00000000}, - {0x67, 1, 0, 0, 0x00000038}, - {0xc7, 1, 0, 0, 0x00000020}, - {0x77, 1, 0, 0, 0x0000001f}, - {0x57, 1, 0, 0, 0x2cc681d1}, - {0x67, 3, 0, 0, 0x00000018}, + {0x2d, 1, 9, 1657, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000000}, + {0x71, 3, 8, 12, 0x00000000}, + {0x71, 2, 8, 9, 0x00000000}, + {0x15, 2, 0, 1, 0x00000011}, + {0x55, 2, 0, 21, 0x00000006}, + {0x71, 2, 8, 7, 0x00000000}, + {0x71, 4, 8, 6, 0x00000000}, + {0xbf, 5, 4, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x00000008}, + {0x57, 5, 0, 0, 0x00001f00}, + {0x4f, 5, 2, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000020}, + {0x4f, 4, 5, 0, 0x00000000}, + {0x55, 4, 0, 12, 0x00000000}, + {0xbf, 2, 8, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000014}, + {0x71, 4, 2, 0, 0x00000000}, + {0x67, 4, 0, 0, 0x00000018}, + {0x71, 1, 2, 1, 0x00000000}, + {0x67, 1, 0, 0, 0x00000010}, + {0x4f, 1, 4, 0, 0x00000000}, + {0x71, 4, 2, 3, 0x00000000}, + {0x4f, 1, 4, 0, 0x00000000}, + {0x71, 2, 2, 2, 0x00000000}, + {0x67, 2, 0, 0, 0x00000008}, + {0x4f, 1, 2, 0, 0x00000000}, {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x40000000}, + {0x67, 4, 0, 0, 0x00000038}, + {0xc7, 4, 0, 0, 0x00000038}, {0xb7, 2, 0, 0, 0x00000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x598d03a2}, + {0x65, 4, 0, 1, 0xffffffff}, + {0xb7, 7, 0, 0, 0x2cc681d1}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000040}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x598d03a2}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000020}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xb31a0745}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000010}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x66340e8a}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xcc681d15}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x98d03a2b}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000002}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x31a07456}, + {0x71, 4, 8, 13, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x6340e8ad}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xa7, 5, 0, 0, 0xc681d15b}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x8d03a2b7}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x1a07456f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x340e8ade}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x681d15bd}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000004}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd03a2b7b}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa07456f6}, + {0x71, 3, 8, 14, 0x00000000}, + {0x57, 4, 0, 0, 0x00000001}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x40e8aded}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x67, 4, 0, 0, 0x00000038}, + {0xc7, 4, 0, 0, 0x00000038}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xa7, 7, 0, 0, 0x81d15bdb}, + {0x6d, 2, 4, 1, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000040}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x03a2b7b7}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000020}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x07456f6f}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000010}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x0e8adedf}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x1d15bdbf}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x3a2b7b7e}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000002}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x7456f6fd}, + {0x71, 4, 8, 15, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xe8adedfa}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xa7, 5, 0, 0, 0xd15bdbf4}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa2b7b7e9}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x456f6fd3}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x8adedfa7}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x15bdbf4f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000004}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x2b7b7e9e}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x56f6fd3d}, + {0x71, 3, 8, 16, 0x00000000}, + {0x57, 4, 0, 0, 0x00000001}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xadedfa7b}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x67, 4, 0, 0, 0x00000038}, + {0xc7, 4, 0, 0, 0x00000038}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xa7, 7, 0, 0, 0x5bdbf4f7}, + {0x6d, 2, 4, 1, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000040}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xb7b7e9ef}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000020}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x6f6fd3df}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000010}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xdedfa7bf}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xbdbf4f7f}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x7b7e9eff}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000002}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xf6fd3dff}, + {0x71, 4, 8, 17, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xedfa7bfe}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xa7, 5, 0, 0, 0xdbf4f7fc}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xb7e9eff9}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x6fd3dff2}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xdfa7bfe5}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xbf4f7fca}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000004}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7e9eff94}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xfd3dff28}, + {0x71, 3, 8, 18, 0x00000000}, + {0x57, 4, 0, 0, 0x00000001}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xfa7bfe51}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000038}, + {0xc7, 6, 0, 0, 0x00000038}, + {0xbf, 4, 5, 0, 0x00000000}, + {0xa7, 4, 0, 0, 0xf4f7fca2}, + {0x6d, 2, 6, 1, 0x00000000}, + {0xbf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000040}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xe9eff945}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000020}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xd3dff28a}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000010}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xa7bfe514}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000008}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x4f7fca28}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000004}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x9eff9450}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000002}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x3dff28a0}, + {0x71, 5, 8, 19, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x7bfe5141}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xbf, 7, 4, 0, 0x00000000}, + {0xa7, 7, 0, 0, 0xf7fca283}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 7, 4, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xeff94506}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xdff28a0c}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xbfe51418}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x7fca2831}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000004}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xff945063}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xff28a0c6}, + {0x57, 5, 0, 0, 0x00000001}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xfe51418c}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x67, 4, 0, 0, 0x00000020}, + {0xc7, 4, 0, 0, 0x00000020}, + {0xbf, 3, 7, 0, 0x00000000}, + {0xa7, 3, 0, 0, 0xfca28319}, + {0x6d, 2, 4, 1, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x40000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xf9450633}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x20000000}, + {0x79, 6, 10, -56, 0x00000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xf28a0c67}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x10000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xe51418ce}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x08000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xca28319d}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x04000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x9450633b}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x02000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x28a0c676}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x01000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x51418ced}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00800000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xa28319db}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00400000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x450633b6}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00200000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x8a0c676c}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00100000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x1418ced8}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00080000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x28319db1}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00040000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x50633b63}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00020000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xa0c676c6}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00010000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x418ced8d}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00008000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x8319db1a}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00004000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x0633b634}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00002000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x0c676c68}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00001000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x18ced8d1}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000800}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x319db1a3}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000400}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x633b6347}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000200}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xc676c68f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000100}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x8ced8d1f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000080}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x19db1a3e}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000040}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x33b6347d}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000020}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x676c68fa}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000010}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xced8d1f4}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000008}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x9db1a3e9}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000004}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x3b6347d2}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000002}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x76c68fa5}, + {0x57, 1, 0, 0, 0x00000001}, + {0x15, 1, 0, 1194, 0x00000000}, + {0xa7, 3, 0, 0, 0xed8d1f4a}, + {0x05, 0, 0, 1192, 0x00000000}, + {0x0f, 8, 1, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 8, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x0000002c}, + {0x2d, 1, 9, 1216, 0x00000000}, + {0x61, 2, 8, 8, 0x00000000}, + {0xdc, 2, 0, 0, 0x00000040}, + {0xc7, 2, 0, 0, 0x00000020}, + {0x71, 3, 8, 6, 0x00000000}, + {0x15, 3, 0, 2, 0x00000011}, + {0xb7, 1, 0, 0, 0x00000000}, + {0x55, 3, 0, 12, 0x00000006}, + {0xbf, 3, 8, 0, 0x00000000}, + {0x07, 3, 0, 0, 0x00000028}, + {0x71, 4, 3, 0, 0x00000000}, + {0x67, 4, 0, 0, 0x00000018}, + {0x71, 1, 3, 1, 0x00000000}, + {0x67, 1, 0, 0, 0x00000010}, + {0x4f, 1, 4, 0, 0x00000000}, + {0x71, 4, 3, 3, 0x00000000}, + {0x4f, 1, 4, 0, 0x00000000}, + {0x71, 3, 3, 2, 0x00000000}, + {0x67, 3, 0, 0, 0x00000008}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 4, 2, 0, 0x00000000}, + {0x77, 4, 0, 0, 0x0000001f}, + {0x57, 4, 0, 0, 0x2cc681d1}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x40000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x598d03a2}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x20000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xb31a0745}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x10000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x66340e8a}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x08000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xcc681d15}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x04000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x98d03a2b}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x02000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x31a07456}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x01000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x6340e8ad}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00800000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xc681d15b}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00400000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x8d03a2b7}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00200000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x1a07456f}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00100000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x340e8ade}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00080000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x681d15bd}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00040000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xd03a2b7b}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00020000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xa07456f6}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00010000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x40e8aded}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00008000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x81d15bdb}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00004000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x03a2b7b7}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00002000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x07456f6f}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00001000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x0e8adedf}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000800}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x1d15bdbf}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000400}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x3a2b7b7e}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000200}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x7456f6fd}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000100}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xe8adedfa}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000080}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xd15bdbf4}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xa2b7b7e9}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x456f6fd3}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x8adedfa7}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x15bdbf4f}, + {0x61, 3, 8, 12, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000004}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x2b7b7e9e}, + {0xdc, 3, 0, 0, 0x00000040}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000002}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x56f6fd3d}, + {0xc7, 3, 0, 0, 0x00000020}, + {0x57, 2, 0, 0, 0x00000001}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xadedfa7b}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xbf, 5, 4, 0, 0x00000000}, + {0xa7, 5, 0, 0, 0x5bdbf4f7}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 5, 4, 0, 0x00000000}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x40000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xb7b7e9ef}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x20000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb31a0745}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x6f6fd3df}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x10000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x66340e8a}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xdedfa7bf}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x08000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xcc681d15}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xbdbf4f7f}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x04000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x98d03a2b}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7b7e9eff}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x02000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x31a07456}, - {0x57, 3, 0, 0, 0x01000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6340e8ad}, - {0x71, 3, 6, 13, 0x00000000}, - {0x67, 3, 0, 0, 0x00000010}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xf6fd3dff}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x01000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xedfa7bfe}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00800000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc681d15b}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xdbf4f7fc}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00400000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8d03a2b7}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xb7e9eff9}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00200000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1a07456f}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x6fd3dff2}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00100000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x340e8ade}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xdfa7bfe5}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00080000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x681d15bd}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xbf4f7fca}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00040000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd03a2b7b}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7e9eff94}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00020000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa07456f6}, - {0x57, 3, 0, 0, 0x00010000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x40e8aded}, - {0x71, 3, 6, 14, 0x00000000}, - {0x67, 3, 0, 0, 0x00000008}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xfd3dff28}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00010000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xfa7bfe51}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00008000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x81d15bdb}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xf4f7fca2}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00004000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x03a2b7b7}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xe9eff945}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00002000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x07456f6f}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd3dff28a}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00001000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0e8adedf}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa7bfe514}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000800}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1d15bdbf}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x4f7fca28}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000400}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3a2b7b7e}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x9eff9450}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000200}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7456f6fd}, - {0x57, 3, 0, 0, 0x00000100}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe8adedfa}, - {0x71, 3, 6, 15, 0x00000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x3dff28a0}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000100}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7bfe5141}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000080}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd15bdbf4}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xf7fca283}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000040}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa2b7b7e9}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xeff94506}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000020}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x456f6fd3}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xdff28a0c}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000010}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8adedfa7}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xbfe51418}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000008}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x15bdbf4f}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000004}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2b7b7e9e}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000002}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x56f6fd3d}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7fca2831}, + {0x61, 4, 8, 16, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x00000004}, + {0x15, 6, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xff945063}, + {0xdc, 4, 0, 0, 0x00000040}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x00000002}, + {0x15, 6, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xff28a0c6}, + {0xc7, 4, 0, 0, 0x00000020}, {0x57, 3, 0, 0, 0x00000001}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xadedfa7b}, - {0x71, 4, 6, 16, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000038}, - {0xc7, 5, 0, 0, 0x00000020}, - {0xb7, 3, 0, 0, 0xffffffff}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x5bdbf4f7}, - {0x67, 4, 0, 0, 0x00000018}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb7b7e9ef}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6f6fd3df}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdedfa7bf}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbdbf4f7f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7b7e9eff}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf6fd3dff}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xedfa7bfe}, - {0x71, 4, 6, 17, 0x00000000}, - {0x67, 4, 0, 0, 0x00000010}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdbf4f7fc}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb7e9eff9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6fd3dff2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdfa7bfe5}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbf4f7fca}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7e9eff94}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfd3dff28}, - {0x57, 4, 0, 0, 0x00010000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfa7bfe51}, - {0x71, 4, 6, 18, 0x00000000}, - {0x67, 4, 0, 0, 0x00000008}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf4f7fca2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe9eff945}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd3dff28a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa7bfe514}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4f7fca28}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9eff9450}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3dff28a0}, - {0x57, 4, 0, 0, 0x00000100}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7bfe5141}, - {0x71, 4, 6, 19, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf7fca283}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xeff94506}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdff28a0c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbfe51418}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7fca2831}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xff945063}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xff28a0c6}, - {0x57, 4, 0, 0, 0x00000001}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfe51418c}, - {0x71, 4, 6, 20, 0x00000000}, - {0x67, 4, 0, 0, 0x00000008}, - {0x71, 5, 6, 21, 0x00000000}, - {0x4f, 4, 5, 0, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000030}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfca28319}, - {0x67, 4, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xfe51418c}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xa7, 7, 0, 0, 0xfca28319}, + {0x6d, 2, 4, 1, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x40000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf9450633}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xf9450633}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x20000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf28a0c67}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xf28a0c67}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x10000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe51418ce}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xe51418ce}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x08000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xca28319d}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xca28319d}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x04000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9450633b}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x9450633b}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x02000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x28a0c676}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x28a0c676}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x01000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x51418ced}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x51418ced}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00800000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa28319db}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xa28319db}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00400000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x450633b6}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x450633b6}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00200000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8a0c676c}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x8a0c676c}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00100000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1418ced8}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x1418ced8}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00080000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x28319db1}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x28319db1}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00040000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x50633b63}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x50633b63}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00020000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa0c676c6}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xa0c676c6}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00010000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x418ced8d}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00008000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x8319db1a}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00004000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x0633b634}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00002000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x0c676c68}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00001000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x18ced8d1}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000800}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x319db1a3}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000400}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x633b6347}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000200}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xc676c68f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000100}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x8ced8d1f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000080}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x19db1a3e}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x33b6347d}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x676c68fa}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xced8d1f4}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x9db1a3e9}, + {0x61, 3, 8, 20, 0x00000000}, + {0xbf, 5, 4, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000004}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x3b6347d2}, + {0xdc, 3, 0, 0, 0x00000040}, + {0xbf, 5, 4, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000002}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x76c68fa5}, + {0xc7, 3, 0, 0, 0x00000020}, + {0x57, 4, 0, 0, 0x00000001}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xed8d1f4a}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xa7, 5, 0, 0, 0xdb1a3e94}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x40000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xb6347d28}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x20000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x6c68fa51}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x10000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd8d1f4a3}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x08000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xb1a3e946}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x04000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x6347d28d}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x02000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xc68fa51a}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x01000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x8d1f4a35}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00800000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x1a3e946b}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00400000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x347d28d7}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00200000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x68fa51ae}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00100000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd1f4a35c}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00080000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa3e946b9}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00040000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x47d28d73}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00020000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x8fa51ae7}, + {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00010000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x418ced8d}, - {0x71, 3, 6, 22, 0x00000000}, - {0x67, 3, 0, 0, 0x00000008}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x1f4a35cf}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00008000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8319db1a}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x3e946b9e}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00004000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0633b634}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7d28d73c}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00002000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0c676c68}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xfa51ae78}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00001000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x18ced8d1}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xf4a35cf1}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000800}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x319db1a3}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xe946b9e3}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000400}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x633b6347}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd28d73c7}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000200}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc676c68f}, - {0x57, 3, 0, 0, 0x00000100}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8ced8d1f}, - {0x71, 3, 6, 23, 0x00000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa51ae78e}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000100}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x4a35cf1c}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000080}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x19db1a3e}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x946b9e38}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000040}, - {0x79, 5, 10, -56, 0x00000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x33b6347d}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x28d73c71}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000020}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x676c68fa}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x51ae78e3}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000010}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xced8d1f4}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa35cf1c6}, {0xbf, 4, 3, 0, 0x00000000}, {0x57, 4, 0, 0, 0x00000008}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9db1a3e9}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000004}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3b6347d2}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000002}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x76c68fa5}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x46b9e38d}, + {0x61, 4, 8, 24, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x00000004}, + {0x15, 6, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x8d73c71b}, + {0xdc, 4, 0, 0, 0x00000040}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x00000002}, + {0x15, 6, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x1ae78e36}, + {0xc7, 4, 0, 0, 0x00000020}, {0x57, 3, 0, 0, 0x00000001}, - {0x1d, 3, 2, 1177, 0x00000000}, - {0xa7, 1, 0, 0, 0xed8d1f4a}, - {0x05, 0, 0, 1175, 0x00000000}, - {0x0f, 6, 1, 0, 0x00000000}, - {0xb7, 7, 0, 0, 0x00000000}, - {0xbf, 1, 6, 0, 0x00000000}, - {0x07, 1, 0, 0, 0x0000002c}, - {0x2d, 1, 9, 1202, 0x00000000}, - {0x61, 4, 6, 8, 0x00000000}, - {0xbf, 1, 4, 0, 0x00000000}, - {0x67, 1, 0, 0, 0x00000038}, - {0xc7, 1, 0, 0, 0x00000020}, - {0x77, 1, 0, 0, 0x0000001f}, - {0x57, 1, 0, 0, 0x2cc681d1}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x35cf1c6c}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xa7, 7, 0, 0, 0x6b9e38d9}, + {0x6d, 2, 4, 1, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000040}, - {0xb7, 2, 0, 0, 0x00000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x598d03a2}, + {0x57, 3, 0, 0, 0x40000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xd73c71b2}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000020}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb31a0745}, + {0x57, 3, 0, 0, 0x20000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xae78e364}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000010}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x66340e8a}, + {0x57, 3, 0, 0, 0x10000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x5cf1c6c9}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000008}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xcc681d15}, + {0x57, 3, 0, 0, 0x08000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xb9e38d92}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000004}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x98d03a2b}, + {0x57, 3, 0, 0, 0x04000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x73c71b25}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000002}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x31a07456}, + {0x57, 3, 0, 0, 0x02000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xe78e364b}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00000001}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6340e8ad}, + {0x57, 3, 0, 0, 0x01000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xcf1c6c96}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00800000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x9e38d92c}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00400000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x3c71b259}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00200000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x78e364b2}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00100000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xf1c6c964}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00080000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xe38d92c9}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00040000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xc71b2593}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00020000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x8e364b27}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00010000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x1c6c964e}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00008000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc681d15b}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x38d92c9c}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00004000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8d03a2b7}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x71b25938}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00002000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1a07456f}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xe364b270}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00001000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x340e8ade}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xc6c964e0}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00000800}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x681d15bd}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x8d92c9c0}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00000400}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd03a2b7b}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x1b259380}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00000200}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa07456f6}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x364b2700}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00000100}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x40e8aded}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x6c964e01}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000080}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xd92c9c03}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xb2593807}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x64b2700f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xc964e01e}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x92c9c03d}, + {0x61, 3, 8, 28, 0x00000000}, + {0xbf, 5, 4, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000004}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x2593807a}, + {0xdc, 3, 0, 0, 0x00000040}, + {0xbf, 5, 4, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000002}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x4b2700f4}, + {0xc7, 3, 0, 0, 0x00000020}, + {0x57, 4, 0, 0, 0x00000001}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x964e01e8}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xa7, 5, 0, 0, 0x2c9c03d1}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x40000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x593807a3}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x20000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xb2700f46}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x10000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x64e01e8d}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x08000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xc9c03d1a}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x04000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x93807a35}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x02000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x2700f46b}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x01000000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x4e01e8d6}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00800000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x9c03d1ad}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00400000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x3807a35b}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00200000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x700f46b6}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00100000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xe01e8d6c}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00080000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xc03d1ad9}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00040000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x807a35b3}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00020000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x00f46b66}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00010000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x01e8d6cc}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00008000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x03d1ad99}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00004000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x07a35b32}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00002000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x0f46b665}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00001000}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x1e8d6cca}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000800}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x3d1ad994}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000400}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x7a35b328}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000200}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xf46b6651}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000100}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xe8d6cca2}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000080}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd1ad9944}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000040}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xa35b3289}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000020}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x46b66512}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000010}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x8d6cca25}, + {0xbf, 4, 3, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x1ad9944a}, + {0x61, 4, 8, 32, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x00000004}, + {0x15, 6, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x35b32894}, + {0xdc, 4, 0, 0, 0x00000040}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x57, 6, 0, 0, 0x00000002}, + {0x15, 6, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0x6b665129}, + {0xc7, 4, 0, 0, 0x00000020}, + {0x57, 3, 0, 0, 0x00000001}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 5, 0, 0, 0xd6cca253}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xa7, 7, 0, 0, 0xad9944a7}, + {0x6d, 2, 4, 1, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x40000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x5b32894f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x20000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xb665129f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x10000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x6cca253e}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x08000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xd9944a7d}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x04000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xb32894fb}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x02000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x665129f6}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x01000000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xcca253ec}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00800000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x81d15bdb}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x9944a7d9}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00400000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x03a2b7b7}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x32894fb2}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00200000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x07456f6f}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x65129f65}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00100000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0e8adedf}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xca253eca}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00080000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1d15bdbf}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x944a7d95}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00040000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3a2b7b7e}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x2894fb2a}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00020000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7456f6fd}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x5129f655}, {0xbf, 3, 4, 0, 0x00000000}, {0x57, 3, 0, 0, 0x00010000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe8adedfa}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0xb7, 3, 0, 0, 0xffffffff}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd15bdbf4}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa2b7b7e9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x456f6fd3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8adedfa7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x15bdbf4f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2b7b7e9e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x56f6fd3d}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xadedfa7b}, - {0x61, 4, 6, 12, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x5bdbf4f7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb7b7e9ef}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6f6fd3df}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdedfa7bf}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbdbf4f7f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7b7e9eff}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf6fd3dff}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xedfa7bfe}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdbf4f7fc}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb7e9eff9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6fd3dff2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdfa7bfe5}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbf4f7fca}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7e9eff94}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfd3dff28}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfa7bfe51}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf4f7fca2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe9eff945}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd3dff28a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa7bfe514}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4f7fca28}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9eff9450}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3dff28a0}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7bfe5141}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf7fca283}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xeff94506}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdff28a0c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbfe51418}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7fca2831}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xff945063}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xff28a0c6}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfe51418c}, - {0x61, 4, 6, 16, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfca28319}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf9450633}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf28a0c67}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe51418ce}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xca28319d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9450633b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x28a0c676}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x51418ced}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa28319db}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x450633b6}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8a0c676c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1418ced8}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x28319db1}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x50633b63}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa0c676c6}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x418ced8d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8319db1a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0633b634}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0c676c68}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x18ced8d1}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x319db1a3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x633b6347}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc676c68f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8ced8d1f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x19db1a3e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x33b6347d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x676c68fa}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xced8d1f4}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9db1a3e9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3b6347d2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x76c68fa5}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xed8d1f4a}, - {0x61, 4, 6, 20, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xdb1a3e94}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb6347d28}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6c68fa51}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd8d1f4a3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb1a3e946}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6347d28d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc68fa51a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8d1f4a35}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1a3e946b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x347d28d7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x68fa51ae}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd1f4a35c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa3e946b9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x47d28d73}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8fa51ae7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1f4a35cf}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3e946b9e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7d28d73c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfa51ae78}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf4a35cf1}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe946b9e3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd28d73c7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa51ae78e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4a35cf1c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x946b9e38}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x28d73c71}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x51ae78e3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa35cf1c6}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x46b9e38d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8d73c71b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1ae78e36}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x35cf1c6c}, - {0x61, 4, 6, 24, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6b9e38d9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd73c71b2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xae78e364}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x5cf1c6c9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb9e38d92}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xa253ecab}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00008000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x44a7d956}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00004000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x894fb2ac}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00002000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x129f6558}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00001000}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x253ecab1}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000800}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x4a7d9563}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000400}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x94fb2ac7}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000200}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x29f6558f}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000100}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x53ecab1e}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000080}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xa7d9563d}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000040}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x4fb2ac7a}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000020}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x9f6558f5}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000010}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x3ecab1ea}, + {0xbf, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000008}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0x7d9563d5}, + {0x61, 3, 8, 36, 0x00000000}, {0xbf, 5, 4, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x73c71b25}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xfb2ac7ab}, + {0xdc, 3, 0, 0, 0x00000040}, {0xbf, 5, 4, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe78e364b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xcf1c6c96}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9e38d92c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3c71b259}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x78e364b2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf1c6c964}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe38d92c9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc71b2593}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8e364b27}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1c6c964e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x38d92c9c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x71b25938}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe364b270}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc6c964e0}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8d92c9c0}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1b259380}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x364b2700}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6c964e01}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd92c9c03}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xf6558f56}, + {0xc7, 3, 0, 0, 0x00000020}, + {0x57, 4, 0, 0, 0x00000001}, + {0x15, 4, 0, 1, 0x00000000}, + {0xa7, 7, 0, 0, 0xecab1eac}, + {0xbf, 4, 7, 0, 0x00000000}, + {0xa7, 4, 0, 0, 0xd9563d59}, + {0x6d, 2, 3, 1, 0x00000000}, + {0xbf, 4, 7, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb2593807}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xb2ac7ab2}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x64b2700f}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x79, 6, 10, -56, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x6558f564}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc964e01e}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xcab1eac8}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x92c9c03d}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x9563d590}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2593807a}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x2ac7ab20}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4b2700f4}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x964e01e8}, - {0x61, 4, 6, 28, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2c9c03d1}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x593807a3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb2700f46}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x64e01e8d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc9c03d1a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x93807a35}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2700f46b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4e01e8d6}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9c03d1ad}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3807a35b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x700f46b6}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe01e8d6c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc03d1ad9}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x807a35b3}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x00f46b66}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x01e8d6cc}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x558f5641}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x01000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xab1eac83}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x03d1ad99}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x563d5906}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x07a35b32}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xac7ab20c}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0f46b665}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x58f56418}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1e8d6cca}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xb1eac831}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3d1ad994}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x63d59063}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7a35b328}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xc7ab20c7}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf46b6651}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x8f56418f}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe8d6cca2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd1ad9944}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa35b3289}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x46b66512}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8d6cca25}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1ad9944a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x35b32894}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6b665129}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd6cca253}, - {0x61, 4, 6, 32, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xad9944a7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x5b32894f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb665129f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6cca253e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd9944a7d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb32894fb}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x665129f6}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xcca253ec}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x1eac831e}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9944a7d9}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x3d59063c}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x32894fb2}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x7ab20c78}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x65129f65}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xf56418f0}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xca253eca}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xeac831e1}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x944a7d95}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xd59063c2}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2894fb2a}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xab20c784}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x5129f655}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x56418f09}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa253ecab}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x44a7d956}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x894fb2ac}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x129f6558}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x253ecab1}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4a7d9563}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x94fb2ac7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x29f6558f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x53ecab1e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000020}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xa7d9563d}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4fb2ac7a}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9f6558f5}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3ecab1ea}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7d9563d5}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfb2ac7ab}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf6558f56}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xecab1eac}, - {0x61, 4, 6, 36, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xac831e12}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000080}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd9563d59}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x59063c25}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000040}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb2ac7ab2}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xb20c784b}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000020}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6558f564}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x6418f097}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000010}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xcab1eac8}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0xc831e12f}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000008}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9563d590}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x9063c25f}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000004}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2ac7ab20}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x20c784be}, + {0xbf, 5, 3, 0, 0x00000000}, {0x57, 5, 0, 0, 0x00000002}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x558f5641}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000001}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xab1eac83}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00008000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x563d5906}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00004000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xac7ab20c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00002000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x58f56418}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00001000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb1eac831}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000800}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x63d59063}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000400}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc7ab20c7}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000200}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8f56418f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00000100}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1eac831e}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00800000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3d59063c}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00400000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7ab20c78}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00200000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf56418f0}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00100000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xeac831e1}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00080000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xd59063c2}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00040000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xab20c784}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00020000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x56418f09}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x00010000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xac831e12}, - {0xbf, 5, 4, 0, 0x00000000}, + {0x15, 5, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x418f097c}, + {0x57, 3, 0, 0, 0x00000001}, + {0x15, 3, 0, 1, 0x00000000}, + {0xa7, 4, 0, 0, 0x831e12f9}, + {0xbf, 5, 1, 0, 0x00000000}, {0x67, 5, 0, 0, 0x00000020}, {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x59063c25}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x40000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xb20c784b}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x20000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x6418f097}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x10000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc831e12f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x08000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9063c25f}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x04000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x20c784be}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x57, 5, 0, 0, 0x02000000}, - {0x1d, 5, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x418f097c}, - {0x57, 4, 0, 0, 0x01000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x831e12f9}, - {0x71, 4, 6, 40, 0x00000000}, - {0x67, 4, 0, 0, 0x00000008}, - {0x71, 5, 6, 41, 0x00000000}, - {0x4f, 4, 5, 0, 0x00000000}, - {0xbf, 5, 4, 0, 0x00000000}, - {0x67, 5, 0, 0, 0x00000030}, - {0xc7, 5, 0, 0, 0x00000020}, - {0x6d, 5, 3, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x063c25f3}, - {0x67, 4, 0, 0, 0x00000010}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x40000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x0c784be7}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x20000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x18f097cf}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x10000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x31e12f9f}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x08000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x63c25f3f}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x04000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc784be7f}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x02000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x8f097cff}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x01000000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x1e12f9fe}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00800000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3c25f3fc}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00400000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x784be7f8}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00200000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf097cff0}, + {0xa7, 3, 0, 0, 0x063c25f3}, + {0x6d, 2, 5, 1, 0x00000000}, {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00100000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe12f9fe0}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00080000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xc25f3fc1}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00040000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x84be7f83}, - {0xbf, 3, 4, 0, 0x00000000}, - {0x57, 3, 0, 0, 0x00020000}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x097cff07}, - {0x57, 4, 0, 0, 0x00010000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x12f9fe0f}, - {0x71, 3, 6, 42, 0x00000000}, - {0x67, 3, 0, 0, 0x00000008}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00008000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x25f3fc1f}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00004000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x4be7f83f}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00002000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x97cff07f}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00001000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x2f9fe0fe}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000800}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x5f3fc1fd}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000400}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xbe7f83fb}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000200}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7cff07f7}, - {0x57, 3, 0, 0, 0x00000100}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf9fe0fee}, - {0x71, 3, 6, 43, 0x00000000}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000080}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xf3fc1fdc}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000040}, - {0x79, 5, 10, -56, 0x00000000}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xe7f83fb8}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000020}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xcff07f70}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000010}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x9fe0fee1}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000008}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x3fc1fdc2}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000004}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0x7f83fb85}, - {0xbf, 4, 3, 0, 0x00000000}, - {0x57, 4, 0, 0, 0x00000002}, - {0x1d, 4, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xff07f70a}, - {0x57, 3, 0, 0, 0x00000001}, - {0x1d, 3, 2, 1, 0x00000000}, - {0xa7, 1, 0, 0, 0xfe0fee15}, - {0x71, 2, 0, 201, 0x00000000}, - {0x67, 2, 0, 0, 0x00000008}, - {0x71, 3, 0, 200, 0x00000000}, - {0x4f, 2, 3, 0, 0x00000000}, - {0x71, 3, 0, 203, 0x00000000}, - {0x67, 3, 0, 0, 0x00000008}, - {0x71, 4, 0, 202, 0x00000000}, - {0x4f, 3, 4, 0, 0x00000000}, - {0x67, 3, 0, 0, 0x00000010}, - {0x4f, 3, 2, 0, 0x00000000}, - {0x67, 1, 0, 0, 0x00000020}, - {0x77, 1, 0, 0, 0x00000020}, {0xbf, 2, 1, 0, 0x00000000}, - {0x3f, 2, 3, 0, 0x00000000}, - {0x2f, 2, 3, 0, 0x00000000}, - {0x1f, 1, 2, 0, 0x00000000}, - {0x57, 1, 0, 0, 0x0000000f}, - {0x67, 1, 0, 0, 0x00000002}, - {0x0f, 0, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x40000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x0c784be7}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x20000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x18f097cf}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x10000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x31e12f9f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x08000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x63c25f3f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x04000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xc784be7f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x02000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x8f097cff}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x01000000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x1e12f9fe}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00800000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x3c25f3fc}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00400000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x784be7f8}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00200000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xf097cff0}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00100000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xe12f9fe0}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00080000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xc25f3fc1}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00040000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x84be7f83}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00020000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x097cff07}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00010000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x12f9fe0f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00008000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x25f3fc1f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00004000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x4be7f83f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00002000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x97cff07f}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00001000}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x2f9fe0fe}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000800}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x5f3fc1fd}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000400}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xbe7f83fb}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000200}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x7cff07f7}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000100}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xf9fe0fee}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000080}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xf3fc1fdc}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000040}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xe7f83fb8}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000020}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xcff07f70}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000010}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x9fe0fee1}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000008}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x3fc1fdc2}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000004}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0x7f83fb85}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000002}, + {0x15, 2, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xff07f70a}, + {0x57, 1, 0, 0, 0x00000001}, + {0x15, 1, 0, 1, 0x00000000}, + {0xa7, 3, 0, 0, 0xfe0fee15}, + {0x71, 1, 0, 201, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x71, 2, 0, 200, 0x00000000}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x71, 2, 0, 202, 0x00000000}, + {0x67, 2, 0, 0, 0x00000010}, + {0x71, 4, 0, 203, 0x00000000}, + {0x67, 4, 0, 0, 0x00000018}, + {0x4f, 4, 2, 0, 0x00000000}, + {0x4f, 4, 1, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000020}, + {0x77, 3, 0, 0, 0x00000020}, + {0x9f, 3, 4, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x0000000f}, + {0x67, 3, 0, 0, 0x00000002}, + {0x0f, 0, 3, 0, 0x00000000}, {0x71, 1, 0, 137, 0x00000000}, {0x67, 1, 0, 0, 0x00000008}, {0x71, 2, 0, 136, 0x00000000}, {0x4f, 1, 2, 0, 0x00000000}, {0x71, 2, 0, 138, 0x00000000}, + {0x67, 2, 0, 0, 0x00000010}, {0x71, 3, 0, 139, 0x00000000}, - {0x67, 3, 0, 0, 0x00000008}, + {0x67, 3, 0, 0, 0x00000018}, {0x4f, 3, 2, 0, 0x00000000}, - {0x67, 3, 0, 0, 0x00000010}, {0x4f, 3, 1, 0, 0x00000000}, {0x07, 3, 0, 0, 0x7cafe800}, - {0x63, 5, 3, 52, 0x00000000}, + {0x63, 6, 3, 52, 0x00000000}, {0xb7, 7, 0, 0, 0x00000001}, {0xbf, 0, 7, 0, 0x00000000}, {0x95, 0, 0, 0, 0x00000000}, diff -Nru dpdk-20.11.9/drivers/net/tap/tap_bpf_program.c dpdk-20.11.10/drivers/net/tap/tap_bpf_program.c --- dpdk-20.11.9/drivers/net/tap/tap_bpf_program.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/tap/tap_bpf_program.c 2023-12-12 10:30:50.000000000 +0000 @@ -131,6 +131,8 @@ __u8 *key = 0; __u32 len; __u32 queue = 0; + bool mf = 0; + __u16 frag_off = 0; rsskey = map_lookup_elem(&map_keys, &key_idx); if (!rsskey) { @@ -155,6 +157,8 @@ return TC_ACT_OK; __u8 *src_dst_addr = data + off + offsetof(struct iphdr, saddr); + __u8 *frag_off_addr = data + off + offsetof(struct iphdr, frag_off); + __u8 *prot_addr = data + off + offsetof(struct iphdr, protocol); __u8 *src_dst_port = data + off + sizeof(struct iphdr); struct ipv4_l3_l4_tuple v4_tuple = { .src_addr = IPv4(*(src_dst_addr + 0), @@ -165,11 +169,25 @@ *(src_dst_addr + 5), *(src_dst_addr + 6), *(src_dst_addr + 7)), - .sport = PORT(*(src_dst_port + 0), - *(src_dst_port + 1)), - .dport = PORT(*(src_dst_port + 2), - *(src_dst_port + 3)), + .sport = 0, + .dport = 0, }; + /** Fetch the L4-payer port numbers only in-case of TCP/UDP + ** and also if the packet is not fragmented. Since fragmented + ** chunks do not have L4 TCP/UDP header. + **/ + if (*prot_addr == IPPROTO_UDP || *prot_addr == IPPROTO_TCP) { + frag_off = PORT(*(frag_off_addr + 0), + *(frag_off_addr + 1)); + mf = frag_off & 0x2000; + frag_off = frag_off & 0x1fff; + if (mf == 0 && frag_off == 0) { + v4_tuple.sport = PORT(*(src_dst_port + 0), + *(src_dst_port + 1)); + v4_tuple.dport = PORT(*(src_dst_port + 2), + *(src_dst_port + 3)); + } + } __u8 input_len = sizeof(v4_tuple) / sizeof(__u32); if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3)) input_len--; @@ -182,6 +200,9 @@ offsetof(struct ipv6hdr, saddr); __u8 *src_dst_port = data + off + sizeof(struct ipv6hdr); + __u8 *next_hdr = data + off + + offsetof(struct ipv6hdr, nexthdr); + struct ipv6_l3_l4_tuple v6_tuple; for (j = 0; j < 4; j++) *((uint32_t *)&v6_tuple.src_addr + j) = @@ -191,10 +212,18 @@ *((uint32_t *)&v6_tuple.dst_addr + j) = __builtin_bswap32(*((uint32_t *) src_dst_addr + 4 + j)); - v6_tuple.sport = PORT(*(src_dst_port + 0), - *(src_dst_port + 1)); - v6_tuple.dport = PORT(*(src_dst_port + 2), - *(src_dst_port + 3)); + + /** Fetch the L4 header port-numbers only if next-header + * is TCP/UDP **/ + if (*next_hdr == IPPROTO_UDP || *next_hdr == IPPROTO_TCP) { + v6_tuple.sport = PORT(*(src_dst_port + 0), + *(src_dst_port + 1)); + v6_tuple.dport = PORT(*(src_dst_port + 2), + *(src_dst_port + 3)); + } else { + v6_tuple.sport = 0; + v6_tuple.dport = 0; + } __u8 input_len = sizeof(v6_tuple) / sizeof(__u32); if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3)) diff -Nru dpdk-20.11.9/drivers/net/txgbe/base/txgbe_mng.c dpdk-20.11.10/drivers/net/txgbe/base/txgbe_mng.c --- dpdk-20.11.9/drivers/net/txgbe/base/txgbe_mng.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/txgbe/base/txgbe_mng.c 2023-12-12 10:30:50.000000000 +0000 @@ -135,21 +135,7 @@ for (bi = 0; bi < dword_len; bi++) buffer[bi] = rd32a(hw, TXGBE_MNGMBX, bi); - /* - * If there is any thing in data position pull it in - * Read Flash command requires reading buffer length from - * two byes instead of one byte - */ - if (resp->cmd == 0x30) { - for (; bi < dword_len + 2; bi++) - buffer[bi] = rd32a(hw, TXGBE_MNGMBX, bi); - - buf_len = (((u16)(resp->cmd_or_resp.ret_status) << 3) - & 0xF00) | resp->buf_len; - hdr_size += (2 << 2); - } else { - buf_len = resp->buf_len; - } + buf_len = resp->buf_len; if (!buf_len) goto rel_out; diff -Nru dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.c dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.c --- dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -1277,6 +1277,19 @@ return -EINVAL; } } + + /* + * When DCB/VT is off, maximum number of queues changes + */ + if (dev_conf->txmode.mq_mode == ETH_MQ_TX_NONE) { + if (nb_tx_q > TXGBE_NONE_MODE_TX_NB_QUEUES) { + PMD_INIT_LOG(ERR, + "Neither VT nor DCB are enabled, " + "nb_tx_q > %d.", + TXGBE_NONE_MODE_TX_NB_QUEUES); + return -EINVAL; + } + } } return 0; } @@ -1655,7 +1668,7 @@ int vf; if (hw->adapter_stopped) - return 0; + goto out; PMD_INIT_FUNC_TRACE(); @@ -1674,14 +1687,6 @@ for (vf = 0; vfinfo != NULL && vf < pci_dev->max_vfs; vf++) vfinfo[vf].clear_to_send = false; - if (hw->phy.media_type == txgbe_media_type_copper) { - /* Turn off the copper */ - hw->phy.set_phy_power(hw, false); - } else { - /* Turn off the laser */ - hw->mac.disable_tx_laser(hw); - } - txgbe_dev_clear_queues(dev); /* Clear stored conf */ @@ -1711,6 +1716,16 @@ hw->adapter_stopped = true; dev->data->dev_started = 0; +out: + /* close phy to prevent reset in dev_close from restarting physical link */ + if (hw->phy.media_type == txgbe_media_type_copper) { + /* Turn off the copper */ + hw->phy.set_phy_power(hw, false); + } else { + /* Turn off the laser */ + hw->mac.disable_tx_laser(hw); + } + return 0; } @@ -1768,6 +1783,9 @@ PMD_INIT_FUNC_TRACE(); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + txgbe_pf_reset_hw(hw); ret = txgbe_dev_stop(dev); @@ -2527,6 +2545,11 @@ break; } + /* Re configure MAC RX */ + if (hw->mac.type == txgbe_mac_raptor) + wr32m(hw, TXGBE_MACRXFLT, TXGBE_MACRXFLT_PROMISC, + TXGBE_MACRXFLT_PROMISC); + return rte_eth_linkstatus_set(dev, &link); } diff -Nru dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.h dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.h --- dpdk-20.11.9/drivers/net/txgbe/txgbe_ethdev.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/txgbe/txgbe_ethdev.h 2023-12-12 10:30:50.000000000 +0000 @@ -28,6 +28,7 @@ /*Default value of Max Rx Queue*/ #define TXGBE_MAX_RX_QUEUE_NUM 128 #define TXGBE_VMDQ_DCB_NB_QUEUES TXGBE_MAX_RX_QUEUE_NUM +#define TXGBE_NONE_MODE_TX_NB_QUEUES 64 #ifndef NBBY #define NBBY 8 /* number of bits in a byte */ diff -Nru dpdk-20.11.9/drivers/net/txgbe/txgbe_rxtx.c dpdk-20.11.10/drivers/net/txgbe/txgbe_rxtx.c --- dpdk-20.11.9/drivers/net/txgbe/txgbe_rxtx.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/txgbe/txgbe_rxtx.c 2023-12-12 10:30:50.000000000 +0000 @@ -1405,11 +1405,22 @@ * of accesses cannot be reordered by the compiler. If they were * not volatile, they could be reordered which could lead to * using invalid descriptor fields when read from rxd. + * + * Meanwhile, to prevent the CPU from executing out of order, we + * need to use a proper memory barrier to ensure the memory + * ordering below. */ rxdp = &rx_ring[rx_id]; staterr = rxdp->qw1.lo.status; if (!(staterr & rte_cpu_to_le_32(TXGBE_RXD_STAT_DD))) break; + + /* + * Use acquire fence to ensure that status_error which includes + * DD bit is loaded before loading of other descriptor words. + */ + rte_atomic_thread_fence(__ATOMIC_ACQUIRE); + rxd = *rxdp; /* @@ -1655,32 +1666,10 @@ next_desc: /* - * The code in this whole file uses the volatile pointer to - * ensure the read ordering of the status and the rest of the - * descriptor fields (on the compiler level only!!!). This is so - * UGLY - why not to just use the compiler barrier instead? DPDK - * even has the rte_compiler_barrier() for that. - * - * But most importantly this is just wrong because this doesn't - * ensure memory ordering in a general case at all. For - * instance, DPDK is supposed to work on Power CPUs where - * compiler barrier may just not be enough! - * - * I tried to write only this function properly to have a - * starting point (as a part of an LRO/RSC series) but the - * compiler cursed at me when I tried to cast away the - * "volatile" from rx_ring (yes, it's volatile too!!!). So, I'm - * keeping it the way it is for now. - * - * The code in this file is broken in so many other places and - * will just not work on a big endian CPU anyway therefore the - * lines below will have to be revisited together with the rest - * of the txgbe PMD. - * - * TODO: - * - Get rid of "volatile" and let the compiler do its job. - * - Use the proper memory barrier (rte_rmb()) to ensure the - * memory ordering below. + * "Volatile" only prevents caching of the variable marked + * volatile. Most important, "volatile" cannot prevent the CPU + * from executing out of order. So, it is necessary to use a + * proper memory barrier to ensure the memory ordering below. */ rxdp = &rx_ring[rx_id]; staterr = rte_le_to_cpu_32(rxdp->qw1.lo.status); @@ -1688,6 +1677,12 @@ if (!(staterr & TXGBE_RXD_STAT_DD)) break; + /* + * Use acquire fence to ensure that status_error which includes + * DD bit is loaded before loading of other descriptor words. + */ + rte_atomic_thread_fence(__ATOMIC_ACQUIRE); + rxd = *rxdp; PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_id=%u " diff -Nru dpdk-20.11.9/drivers/net/virtio/virtio_ethdev.c dpdk-20.11.10/drivers/net/virtio/virtio_ethdev.c --- dpdk-20.11.9/drivers/net/virtio/virtio_ethdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/virtio/virtio_ethdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -1924,6 +1924,14 @@ } } + if (eth_dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) + /* Enable vector (0) for Link State Interrupt */ + if (VTPCI_OPS(hw)->set_config_irq(hw, 0) == + VIRTIO_MSI_NO_VECTOR) { + PMD_DRV_LOG(ERR, "failed to set config vector"); + return -EBUSY; + } + vtpci_reinit_complete(hw); if (pci_dev) @@ -2408,14 +2416,6 @@ hw->has_tx_offload = tx_offload_enabled(hw); hw->has_rx_offload = rx_offload_enabled(hw); - if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) - /* Enable vector (0) for Link State Interrupt */ - if (VTPCI_OPS(hw)->set_config_irq(hw, 0) == - VIRTIO_MSI_NO_VECTOR) { - PMD_DRV_LOG(ERR, "failed to set config vector"); - return -EBUSY; - } - if (vtpci_packed_queue(hw)) { #if defined(RTE_ARCH_X86_64) && defined(CC_AVX512_SUPPORT) if ((hw->use_vec_rx || hw->use_vec_tx) && diff -Nru dpdk-20.11.9/drivers/net/virtio/virtqueue.h dpdk-20.11.10/drivers/net/virtio/virtqueue.h --- dpdk-20.11.9/drivers/net/virtio/virtqueue.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/drivers/net/virtio/virtqueue.h 2023-12-12 10:30:50.000000000 +0000 @@ -756,6 +756,7 @@ start_dp[idx].addr = txvq->virtio_net_hdr_mem + RTE_PTR_DIFF(&txr[idx].tx_hdr, txr); start_dp[idx].len = vq->hw->vtnet_hdr_size; + head_flags |= VRING_DESC_F_NEXT; hdr = (struct virtio_net_hdr *)&txr[idx].tx_hdr; idx++; if (idx >= vq->vq_nentries) { diff -Nru dpdk-20.11.9/examples/ethtool/ethtool-app/ethapp.c dpdk-20.11.10/examples/ethtool/ethtool-app/ethapp.c --- dpdk-20.11.9/examples/ethtool/ethtool-app/ethapp.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/examples/ethtool/ethtool-app/ethapp.c 2023-12-12 10:30:50.000000000 +0000 @@ -49,6 +49,13 @@ uint16_t rx; }; +struct pcmd_pause_params { + cmdline_fixed_string_t cmd; + uint16_t port; + cmdline_fixed_string_t mode; + cmdline_fixed_string_t autoneg; + cmdline_fixed_string_t an_status; +}; /* Parameter-less commands */ cmdline_parse_token_string_t pcmd_quit_token_cmd = @@ -116,12 +123,18 @@ /* Pause commands */ cmdline_parse_token_string_t pcmd_pause_token_cmd = - TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "pause"); + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, cmd, "pause"); cmdline_parse_token_num_t pcmd_pause_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, RTE_UINT16); -cmdline_parse_token_string_t pcmd_pause_token_opt = - TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, - opt, "all#tx#rx#none"); + TOKEN_NUM_INITIALIZER(struct pcmd_pause_params, port, RTE_UINT16); +cmdline_parse_token_string_t pcmd_pause_token_mode = + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, + mode, "full#tx#rx#none"); +cmdline_parse_token_string_t pcmd_pause_token_autoneg = + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, + autoneg, "autoneg"); +cmdline_parse_token_string_t pcmd_pause_token_an_status = + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, + an_status, "on#off"); /* VLAN commands */ cmdline_parse_token_string_t pcmd_vlan_token_cmd = @@ -348,13 +361,12 @@ fclose(fp_eeprom); } - static void pcmd_pause_callback(void *ptr_params, __rte_unused struct cmdline *ctx, void *ptr_data) { - struct pcmd_intstr_params *params = ptr_params; + struct pcmd_pause_params *params = ptr_params; struct ethtool_pauseparam info; int stat; @@ -366,39 +378,38 @@ stat = rte_ethtool_get_pauseparam(params->port, &info); } else { memset(&info, 0, sizeof(info)); - if (strcasecmp("all", params->opt) == 0) { + if (strcasecmp("full", params->mode) == 0) { info.tx_pause = 1; info.rx_pause = 1; - } else if (strcasecmp("tx", params->opt) == 0) { + } else if (strcasecmp("tx", params->mode) == 0) { info.tx_pause = 1; info.rx_pause = 0; - } else if (strcasecmp("rx", params->opt) == 0) { + } else if (strcasecmp("rx", params->mode) == 0) { info.tx_pause = 0; info.rx_pause = 1; } else { info.tx_pause = 0; info.rx_pause = 0; } - /* Assume auto-negotiation wanted */ - info.autoneg = 1; + + if (strcasecmp("on", params->an_status) == 0) + info.autoneg = 1; + else + info.autoneg = 0; + stat = rte_ethtool_set_pauseparam(params->port, &info); } if (stat == 0) { - if (info.rx_pause && info.tx_pause) - printf("Port %i: Tx & Rx Paused\n", params->port); - else if (info.rx_pause) - printf("Port %i: Rx Paused\n", params->port); - else if (info.tx_pause) - printf("Port %i: Tx Paused\n", params->port); - else - printf("Port %i: Tx & Rx not paused\n", params->port); + printf("Pause parameters for Port %i:\n", params->port); + printf("Rx pause: %s\n", info.rx_pause ? "on" : "off"); + printf("Tx pause: %s\n", info.tx_pause ? "on" : "off"); + printf("Autoneg: %s\n", info.autoneg ? "on" : "off"); } else if (stat == -ENOTSUP) printf("Port %i: Operation not supported\n", params->port); else printf("Port %i: Error %i\n", params->port, stat); } - static void pcmd_open_callback(__rte_unused void *ptr_params, __rte_unused struct cmdline *ctx, @@ -741,11 +752,13 @@ .f = pcmd_pause_callback, .data = NULL, .help_str = - "pause <port_id> <all|tx|rx|none>\n Pause/unpause port", + "pause <port_id> <full|tx|rx|none> autoneg <on|off>\n Pause/unpause port", .tokens = { (void *)&pcmd_pause_token_cmd, (void *)&pcmd_pause_token_port, - (void *)&pcmd_pause_token_opt, + (void *)&pcmd_pause_token_mode, + (void *)&pcmd_pause_token_autoneg, + (void *)&pcmd_pause_token_an_status, NULL }, }; diff -Nru dpdk-20.11.9/examples/ipsec-secgw/ipsec.h dpdk-20.11.10/examples/ipsec-secgw/ipsec.h --- dpdk-20.11.9/examples/ipsec-secgw/ipsec.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/examples/ipsec-secgw/ipsec.h 2023-12-12 10:30:50.000000000 +0000 @@ -224,11 +224,18 @@ uint64_t ipv6_offloads; }; +/* + * This structure is used for the key in hash table. + * Padding is to force the struct to use 8 bytes, + * to ensure memory is not read past this structs boundary + * (hash key calculation reads 8 bytes if this struct is size 5 bytes). + */ struct cdev_key { uint16_t lcore_id; uint8_t cipher_algo; uint8_t auth_algo; uint8_t aead_algo; + uint8_t padding[3]; /* padding to 8-byte size should be zeroed */ }; struct socket_ctx { diff -Nru dpdk-20.11.9/lib/librte_cryptodev/rte_cryptodev.h dpdk-20.11.10/lib/librte_cryptodev/rte_cryptodev.h --- dpdk-20.11.9/lib/librte_cryptodev/rte_cryptodev.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_cryptodev/rte_cryptodev.h 2023-12-12 10:30:50.000000000 +0000 @@ -875,6 +875,15 @@ /**< Flag indicating the device is attached */ } __rte_cache_aligned; +/** + * Get the security context for the cryptodev. + * + * @param dev_id + * The device identifier. + * @return + * - NULL on error. + * - Pointer to security context on success. + */ void * rte_cryptodev_get_sec_ctx(uint8_t dev_id); diff -Nru dpdk-20.11.9/lib/librte_eal/common/rte_malloc.c dpdk-20.11.10/lib/librte_eal/common/rte_malloc.c --- dpdk-20.11.9/lib/librte_eal/common/rte_malloc.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_eal/common/rte_malloc.c 2023-12-12 10:30:50.000000000 +0000 @@ -46,13 +46,13 @@ void rte_free(void *addr) { - return mem_free(addr, true); + mem_free(addr, true); } void eal_free_no_trace(void *addr) { - return mem_free(addr, false); + mem_free(addr, false); } static void * diff -Nru dpdk-20.11.9/lib/librte_eal/common/rte_random.c dpdk-20.11.10/lib/librte_eal/common/rte_random.c --- dpdk-20.11.9/lib/librte_eal/common/rte_random.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_eal/common/rte_random.c 2023-12-12 10:30:50.000000000 +0000 @@ -82,7 +82,7 @@ unsigned int lcore_id; /* add lcore_id to seed to avoid having the same sequence */ - for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) + for (lcore_id = 0; lcore_id < RTE_DIM(rand_states); lcore_id++) __rte_srand_lfsr258(seed + lcore_id, &rand_states[lcore_id]); } diff -Nru dpdk-20.11.9/lib/librte_eal/windows/eal_memory.c dpdk-20.11.10/lib/librte_eal/windows/eal_memory.c --- dpdk-20.11.9/lib/librte_eal/windows/eal_memory.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_eal/windows/eal_memory.c 2023-12-12 10:30:50.000000000 +0000 @@ -72,10 +72,18 @@ #ifdef RTE_TOOLCHAIN_GCC +#ifndef MEM_COALESCE_PLACEHOLDERS #define MEM_COALESCE_PLACEHOLDERS 0x00000001 +#endif +#ifndef MEM_PRESERVE_PLACEHOLDER #define MEM_PRESERVE_PLACEHOLDER 0x00000002 +#endif +#ifndef MEM_REPLACE_PLACEHOLDER #define MEM_REPLACE_PLACEHOLDER 0x00004000 +#endif +#ifndef MEM_RESERVE_PLACEHOLDER #define MEM_RESERVE_PLACEHOLDER 0x00040000 +#endif int eal_mem_win32api_init(void) diff -Nru dpdk-20.11.9/lib/librte_ethdev/rte_ethdev.h dpdk-20.11.10/lib/librte_ethdev/rte_ethdev.h --- dpdk-20.11.9/lib/librte_ethdev/rte_ethdev.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_ethdev/rte_ethdev.h 2023-12-12 10:30:50.000000000 +0000 @@ -3325,7 +3325,7 @@ * for example, to count dropped packets, or to retry transmission of packets * which cannot be sent, this function should be used to register a suitable * callback function to implement the desired behaviour. - * The example callback "rte_eth_count_unsent_packet_callback()" is also + * The example callback "rte_eth_tx_buffer_count_callback()" is also * provided as reference. * * @param buffer diff -Nru dpdk-20.11.9/lib/librte_ethdev/rte_flow.c dpdk-20.11.10/lib/librte_ethdev/rte_flow.c --- dpdk-20.11.9/lib/librte_ethdev/rte_flow.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_ethdev/rte_flow.c 2023-12-12 10:30:50.000000000 +0000 @@ -580,7 +580,7 @@ if (src.rss->key_len && src.rss->key) { off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key)); tmp = sizeof(*src.rss->key) * src.rss->key_len; - if (size >= off + tmp) + if (size >= (uint64_t)off + (uint64_t)tmp) dst.rss->key = rte_memcpy ((void *)((uintptr_t)dst.rss + off), src.rss->key, tmp); @@ -589,7 +589,7 @@ if (src.rss->queue_num) { off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->queue)); tmp = sizeof(*src.rss->queue) * src.rss->queue_num; - if (size >= off + tmp) + if (size >= (uint64_t)off + (uint64_t)tmp) dst.rss->queue = rte_memcpy ((void *)((uintptr_t)dst.rss + off), src.rss->queue, tmp); diff -Nru dpdk-20.11.9/lib/librte_eventdev/rte_eventdev.c dpdk-20.11.10/lib/librte_eventdev/rte_eventdev.c --- dpdk-20.11.9/lib/librte_eventdev/rte_eventdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_eventdev/rte_eventdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -106,6 +106,9 @@ dev_info->dequeue_timeout_ns = dev->data->dev_conf.dequeue_timeout_ns; dev_info->dev = dev->dev; + if (dev->dev != NULL && dev->dev->driver != NULL) + dev_info->driver_name = dev->dev->driver->name; + return 0; } diff -Nru dpdk-20.11.9/lib/librte_eventdev/rte_eventdev_pmd_vdev.h dpdk-20.11.10/lib/librte_eventdev/rte_eventdev_pmd_vdev.h --- dpdk-20.11.9/lib/librte_eventdev/rte_eventdev_pmd_vdev.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_eventdev/rte_eventdev_pmd_vdev.h 2023-12-12 10:30:50.000000000 +0000 @@ -47,7 +47,7 @@ */ static inline struct rte_eventdev * rte_event_pmd_vdev_init(const char *name, size_t dev_private_size, - int socket_id) + int socket_id, struct rte_vdev_device *vdev) { struct rte_eventdev *eventdev; @@ -69,6 +69,7 @@ rte_panic("Cannot allocate memzone for private device" " data"); } + eventdev->dev = &vdev->device; return eventdev; } diff -Nru dpdk-20.11.9/lib/librte_fib/dir24_8.c dpdk-20.11.10/lib/librte_fib/dir24_8.c --- dpdk-20.11.9/lib/librte_fib/dir24_8.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_fib/dir24_8.c 2023-12-12 10:30:50.000000000 +0000 @@ -392,6 +392,12 @@ return ret; ledge = redge + (uint32_t)(1ULL << (32 - tmp_depth)); + /* + * we got to the end of address space + * and wrapped around + */ + if (ledge == 0) + break; } else { redge = ip + (uint32_t)(1ULL << (32 - depth)); if (ledge == redge && ledge != 0) diff -Nru dpdk-20.11.9/lib/librte_fib/trie.c dpdk-20.11.10/lib/librte_fib/trie.c --- dpdk-20.11.9/lib/librte_fib/trie.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_fib/trie.c 2023-12-12 10:30:50.000000000 +0000 @@ -457,6 +457,14 @@ } static int +v6_addr_is_zero(const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE]) +{ + uint8_t ip_addr[RTE_FIB6_IPV6_ADDR_SIZE] = {0}; + + return rte_rib6_is_equal(ip, ip_addr); +} + +static int modify_dp(struct rte_trie_tbl *dp, struct rte_rib6 *rib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth, uint64_t next_hop) @@ -489,11 +497,19 @@ return ret; get_nxt_net(redge, tmp_depth); rte_rib6_copy_addr(ledge, redge); + /* + * we got to the end of address space + * and wrapped around + */ + if (v6_addr_is_zero(ledge)) + break; } else { rte_rib6_copy_addr(redge, ip); get_nxt_net(redge, depth); - if (rte_rib6_is_equal(ledge, redge)) + if (rte_rib6_is_equal(ledge, redge) && + !v6_addr_is_zero(ledge)) break; + ret = install_to_dp(dp, ledge, redge, next_hop); if (ret != 0) diff -Nru dpdk-20.11.9/lib/librte_hash/rte_cuckoo_hash.c dpdk-20.11.10/lib/librte_hash/rte_cuckoo_hash.c --- dpdk-20.11.9/lib/librte_hash/rte_cuckoo_hash.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_hash/rte_cuckoo_hash.c 2023-12-12 10:30:50.000000000 +0000 @@ -1866,11 +1866,15 @@ _mm_load_si128( (__m128i const *)prim_bkt->sig_current), _mm_set1_epi16(sig))); + /* Extract the even-index bits only */ + *prim_hash_matches &= 0x5555; /* Compare all signatures in the bucket */ *sec_hash_matches = _mm_movemask_epi8(_mm_cmpeq_epi16( _mm_load_si128( (__m128i const *)sec_bkt->sig_current), _mm_set1_epi16(sig))); + /* Extract the even-index bits only */ + *sec_hash_matches &= 0x5555; break; #elif defined(__ARM_NEON) case RTE_HASH_COMPARE_NEON: { diff -Nru dpdk-20.11.9/lib/librte_mbuf/rte_mbuf_ptype.h dpdk-20.11.10/lib/librte_mbuf/rte_mbuf_ptype.h --- dpdk-20.11.9/lib/librte_mbuf/rte_mbuf_ptype.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_mbuf/rte_mbuf_ptype.h 2023-12-12 10:30:50.000000000 +0000 @@ -419,10 +419,10 @@ * * Packet format: * <'ether type'=0x0800 - * | 'version'=4, 'protocol'=51> + * | 'version'=4, 'protocol'=50> * or, * <'ether type'=0x86DD - * | 'version'=6, 'next header'=51> + * | 'version'=6, 'next header'=50> */ #define RTE_PTYPE_TUNNEL_ESP 0x00009000 /** diff -Nru dpdk-20.11.9/lib/librte_mempool/rte_mempool.c dpdk-20.11.10/lib/librte_mempool/rte_mempool.c --- dpdk-20.11.9/lib/librte_mempool/rte_mempool.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_mempool/rte_mempool.c 2023-12-12 10:30:50.000000000 +0000 @@ -884,6 +884,22 @@ STAILQ_INIT(&mp->mem_list); /* + * Since we have 4 combinations of the SP/SC/MP/MC examine the flags to + * set the correct index into the table of ops structs. + */ + if ((flags & MEMPOOL_F_SP_PUT) && (flags & MEMPOOL_F_SC_GET)) + ret = rte_mempool_set_ops_byname(mp, "ring_sp_sc", NULL); + else if (flags & MEMPOOL_F_SP_PUT) + ret = rte_mempool_set_ops_byname(mp, "ring_sp_mc", NULL); + else if (flags & MEMPOOL_F_SC_GET) + ret = rte_mempool_set_ops_byname(mp, "ring_mp_sc", NULL); + else + ret = rte_mempool_set_ops_byname(mp, "ring_mp_mc", NULL); + + if (ret) + goto exit_unlock; + + /* * local_cache pointer is set even if cache_size is zero. * The local_cache points to just past the elt_pa[] array. */ @@ -923,7 +939,6 @@ rte_mempool_obj_cb_t *obj_init, void *obj_init_arg, int socket_id, unsigned flags) { - int ret; struct rte_mempool *mp; mp = rte_mempool_create_empty(name, n, elt_size, cache_size, @@ -931,22 +946,6 @@ if (mp == NULL) return NULL; - /* - * Since we have 4 combinations of the SP/SC/MP/MC examine the flags to - * set the correct index into the table of ops structs. - */ - if ((flags & MEMPOOL_F_SP_PUT) && (flags & MEMPOOL_F_SC_GET)) - ret = rte_mempool_set_ops_byname(mp, "ring_sp_sc", NULL); - else if (flags & MEMPOOL_F_SP_PUT) - ret = rte_mempool_set_ops_byname(mp, "ring_sp_mc", NULL); - else if (flags & MEMPOOL_F_SC_GET) - ret = rte_mempool_set_ops_byname(mp, "ring_mp_sc", NULL); - else - ret = rte_mempool_set_ops_byname(mp, "ring_mp_mc", NULL); - - if (ret) - goto fail; - /* call the mempool priv initializer */ if (mp_init) mp_init(mp, mp_init_arg); diff -Nru dpdk-20.11.9/lib/librte_mempool/rte_mempool.h dpdk-20.11.10/lib/librte_mempool/rte_mempool.h --- dpdk-20.11.9/lib/librte_mempool/rte_mempool.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_mempool/rte_mempool.h 2023-12-12 10:30:50.000000000 +0000 @@ -404,13 +404,19 @@ typedef void (*rte_mempool_free_t)(struct rte_mempool *mp); /** - * Enqueue an object into the external pool. + * Enqueue 'n' objects into the external pool. + * @return + * - 0: Success + * - <0: Error */ typedef int (*rte_mempool_enqueue_t)(struct rte_mempool *mp, void * const *obj_table, unsigned int n); /** - * Dequeue an object from the external pool. + * Dequeue 'n' objects from the external pool. + * @return + * - 0: Success + * - <0: Error */ typedef int (*rte_mempool_dequeue_t)(struct rte_mempool *mp, void **obj_table, unsigned int n); @@ -1402,7 +1408,7 @@ * @param cache * A pointer to a mempool cache structure. May be NULL if not needed. * @return - * - >=0: Success; number of objects supplied. + * - 0: Success. * - <0: Error; code of driver dequeue function. */ static __rte_always_inline int diff -Nru dpdk-20.11.9/lib/librte_meter/rte_meter.h dpdk-20.11.10/lib/librte_meter/rte_meter.h --- dpdk-20.11.9/lib/librte_meter/rte_meter.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_meter/rte_meter.h 2023-12-12 10:30:50.000000000 +0000 @@ -128,9 +128,6 @@ rte_meter_trtcm_profile_config(struct rte_meter_trtcm_profile *p, struct rte_meter_trtcm_params *params); /** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * * trTCM RFC 4115 profile configuration * * @param p @@ -174,9 +171,6 @@ struct rte_meter_trtcm_profile *p); /** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * * trTCM RFC 4115 configuration per metered traffic flow * * @param m @@ -277,9 +271,6 @@ enum rte_color pkt_color); /** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * * trTCM RFC4115 color blind traffic metering * * @param m @@ -301,9 +292,6 @@ uint32_t pkt_len); /** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * * trTCM RFC4115 color aware traffic metering * * @param m diff -Nru dpdk-20.11.9/lib/librte_pdump/rte_pdump.c dpdk-20.11.10/lib/librte_pdump/rte_pdump.c --- dpdk-20.11.9/lib/librte_pdump/rte_pdump.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_pdump/rte_pdump.c 2023-12-12 10:30:50.000000000 +0000 @@ -473,9 +473,10 @@ if (rte_mp_request_sync(&mp_req, &mp_reply, &ts) == 0) { mp_rep = &mp_reply.msgs[0]; resp = (struct pdump_response *)mp_rep->param; - rte_errno = resp->err_value; - if (!resp->err_value) + if (resp->err_value == 0) ret = 0; + else + rte_errno = -resp->err_value; free(mp_reply.msgs); } diff -Nru dpdk-20.11.9/lib/librte_rawdev/rte_rawdev.c dpdk-20.11.10/lib/librte_rawdev/rte_rawdev.c --- dpdk-20.11.9/lib/librte_rawdev/rte_rawdev.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_rawdev/rte_rawdev.c 2023-12-12 10:30:50.000000000 +0000 @@ -494,8 +494,7 @@ uint16_t dev_id; if (rte_rawdev_pmd_get_named_dev(name) != NULL) { - RTE_RDEV_ERR("Event device with name %s already allocated!", - name); + RTE_RDEV_ERR("Raw device with name %s already allocated!", name); return NULL; } diff -Nru dpdk-20.11.9/lib/librte_security/rte_security.h dpdk-20.11.10/lib/librte_security/rte_security.h --- dpdk-20.11.9/lib/librte_security/rte_security.h 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_security/rte_security.h 2023-12-12 10:30:50.000000000 +0000 @@ -327,6 +327,7 @@ /** * Security session action type. */ +/* Enumeration of rte_security_session_action_type 8<*/ enum rte_security_session_action_type { RTE_SECURITY_ACTION_TYPE_NONE, /**< No security actions */ @@ -347,8 +348,10 @@ * protocol is processed synchronously by a CPU. */ }; +/* >8 End enumeration of rte_security_session_action_type. */ /** Security session protocol definition */ +/* Enumeration of rte_security_session_protocol 8<*/ enum rte_security_session_protocol { RTE_SECURITY_PROTOCOL_IPSEC = 1, /**< IPsec Protocol */ @@ -359,10 +362,12 @@ RTE_SECURITY_PROTOCOL_DOCSIS, /**< DOCSIS Protocol */ }; +/* >8 End enumeration of rte_security_session_protocol. */ /** * Security session configuration */ +/* Structure rte_security_session_conf 8< */ struct rte_security_session_conf { enum rte_security_session_action_type action_type; /**< Type of action to be performed on the session */ @@ -381,6 +386,7 @@ void *userdata; /**< Application specific userdata to be saved with session */ }; +/* >8 End of structure rte_security_session_conf. */ struct rte_security_session { void *sess_private_data; diff -Nru dpdk-20.11.9/lib/librte_vhost/vhost.c dpdk-20.11.10/lib/librte_vhost/vhost.c --- dpdk-20.11.9/lib/librte_vhost/vhost.c 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/lib/librte_vhost/vhost.c 2023-12-12 10:30:50.000000000 +0000 @@ -1253,6 +1253,7 @@ { struct virtio_net *dev; struct vhost_virtqueue *vq; + int ret = 0; dev = get_device(vid); if (!dev) @@ -1267,14 +1268,20 @@ rte_spinlock_lock(&vq->access_lock); + if (unlikely(!vq->access_ok)) { + ret = -1; + goto out_unlock; + } + if (vq_is_packed(dev)) vhost_vring_call_packed(dev, vq); else vhost_vring_call_split(dev, vq); +out_unlock: rte_spinlock_unlock(&vq->access_lock); - return 0; + return ret; } int @@ -1282,6 +1289,7 @@ { struct virtio_net *dev; struct vhost_virtqueue *vq; + int ret = 0; dev = get_device(vid); if (!dev) @@ -1297,14 +1305,20 @@ if (!rte_spinlock_trylock(&vq->access_lock)) return -EAGAIN; + if (unlikely(!vq->access_ok)) { + ret = -1; + goto out_unlock; + } + if (vq_is_packed(dev)) vhost_vring_call_packed(dev, vq); else vhost_vring_call_split(dev, vq); +out_unlock: rte_spinlock_unlock(&vq->access_lock); - return 0; + return ret; } uint16_t @@ -1327,7 +1341,10 @@ rte_spinlock_lock(&vq->access_lock); - if (unlikely(!vq->enabled || vq->avail == NULL)) + if (unlikely(!vq->access_ok)) + goto out; + + if (unlikely(!vq->enabled)) goto out; ret = *(volatile uint16_t *)&vq->avail->idx - vq->last_used_idx; @@ -1419,9 +1436,15 @@ rte_spinlock_lock(&vq->access_lock); + if (unlikely(!vq->access_ok)) { + ret = -1; + goto out_unlock; + } + vq->notif_enable = enable; ret = vhost_enable_guest_notification(dev, vq, enable); +out_unlock: rte_spinlock_unlock(&vq->access_lock); return ret; @@ -1481,7 +1504,10 @@ rte_spinlock_lock(&vq->access_lock); - if (unlikely(vq->enabled == 0 || vq->avail == NULL)) + if (unlikely(!vq->access_ok)) + goto out; + + if (unlikely(!vq->enabled)) goto out; ret = *((volatile uint16_t *)&vq->avail->idx) - vq->last_avail_idx; diff -Nru dpdk-20.11.9/VERSION dpdk-20.11.10/VERSION --- dpdk-20.11.9/VERSION 2023-08-15 16:54:57.000000000 +0100 +++ dpdk-20.11.10/VERSION 2023-12-12 10:30:50.000000000 +0000 @@ -1 +1 @@ -20.11.9 +20.11.10
Attachment:
signature.asc
Description: This is a digitally signed message part