This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, next has been updated discards 88e124e13900109e0d0aec1981417382f357c98a (commit) discards b61de566190e19cc79531fdca737787cc359584b (commit) discards ae393d6677e242464773aa81a5c18fdfe1ce2c85 (commit) discards 9f02c58d41ec59f443e880766855265885f3a13d (commit) discards 4954fd9289befbdd06d52b4d9b7ed7a83f268b10 (commit) discards fb667f44a397a34bc1c4af41c49a766156740ff3 (commit) discards f318c88f26b15140dda243e6a1d27e3c8f9d275b (commit) discards 8862db747458bf1a52ccd22eaf8b5cb1f8539e95 (commit) discards 7137f734b5421c59cfb03bfc4928a40dbfef9166 (commit) discards 03c84e04003ed74e9cdf3b575dad6e7496bb93b9 (commit) discards 905ce7df9aadb43a004347b674a0f5f40b7e179e (commit) discards 45ae15980256afe38fcb1e67931292fe1941d37a (commit) discards eebc3caa3e1cbb8b3ae75d6aba2912fa399c4c18 (commit) discards f4657562b7c2b23e64aaba234820cbe50c2422ec (commit) discards e0dbfd90a11078bc6b5eb03ce3e48b7b22161470 (commit) discards 58d6f8fe7a2652c20db2b5cd632a7f5d6a560546 (commit) discards 89538dedcb71c8f54987758229f0d5b6f1de3ada (commit) discards 79b1cc361a7e1eb1098d006e0b70c903460d32c7 (commit) discards 4c1190787a1d48147cbfe7e20c8b31b0b05c94f3 (commit) discards 40cd2eb0ddb11d4880bf0cd19a2b661a9b42d398 (commit) discards 2d76e64f9ca79b3efce87bd02d849d139a9f305a (commit) discards 86b8f3d4371b3fd0ec09091b404b829f2e97730d (commit) discards 0841edfc364b39fce8c1ed1cdbddecde1d98b42e (commit) discards c7801718747a7bcaf377fd25cdd97582f8755b05 (commit) discards fa9533ede03e40f0455c6d889997042f32235fc1 (commit) discards 07a5a017f0178e9067aab7aeb9a9fc4152152f5c (commit) via 2cfe11680ecc2186339183e94f291ce586740f8b (commit) via bb6abbb8a5a8f92a7b18c7c2b3336be1ef264e11 (commit) via 45d422099d86461c48871879e0f7abbf37acfd5c (commit) via 614161c1a440d13d866975dc13df13cde2e8b3f3 (commit) via 279621af7fd8bf2b84b16acce85ff5bf040e7771 (commit) via 29195afb96cd539e4d4a94bd3d64336acf34bcaa (commit) via b653ea8ac54aea1a81ce9f49d4ec60f81bec2d2d (commit) via 3c8f24c52d80bd7e032ba3a1788c8dbc4d5ea0ad (commit) via 9b98d35daf7736b34e51400c6a7e32bf81537ce6 (commit) via 774b652640be4ab7147db0a337f84ce8d602b665 (commit) via 8999344484a2c3b4c08b84c5b27e2b355fa312d5 (commit) via e475a06dba8b79eace4131ea7327e87a10546351 (commit) via c5fbca288838d39f3f6434d381acb25f12c1dc9e (commit) via 22921366d8a2f9155d43f7022d645c6d364c8b58 (commit) via 0278905b45145a168f5b63afa0dbf0be30e808be (commit) via da0198f610f10c8af2c19eb4148001d1759eb401 (commit) via 6b24e0905df12ba075d86e471a48035f6c7b91ef (commit) via c8f25051021015221ec8d46cf2e06914eb8ca868 (commit) via 5f095cc66bc3fcafe8f44ed7348ef127f40c9026 (commit) via 3d6cf1de61e0b5c846317b3ffcbd0cfd07531b90 (commit) via 43d7f57b9f9f24526330c51fda8554d52414b82f (commit) via c4a8f43ff08b954d14857c5a59544f8d914205e3 (commit) via f972ef61a9693b7895cb7f85084c1c53c3b13131 (commit) via b6b667b1e95635a6ba77a19078d7d28013bcde1d (commit) via bae53291795e9c19cbfde9c0d0e11a19d9870623 (commit) via dd31792d10772c3e41519fc0b6d68cf13b0fe9d4 (commit) via 0e04be4851ecc94da8b4cac3c576260c0518c936 (commit) via d59c00c5f0255a5f1fc462332eef291bb2993f64 (commit) via 29c7a054f7151d33795a0d8d7df5594bf4fddb55 (commit) via 2dd964e170d71078cfe03d4c9e00c6f592b4326b (commit) via 449c693b2678bc29577b64fb76003bb10b86db6e (commit) via b13eba4e9b9cb814f115627addf763322fe22a76 (commit) via ea9f2aa440a653a77cbcadc2862c5af298205272 (commit) via 5e840b83992bba2f64750bb3a4599478d6ea9260 (commit) via 387b402c4f2fc0694b6e0fe68ee4be8a2bd42442 (commit)
This update added new revisions after undoing existing revisions. That is to say, the old revision is not a strict subset of the new revision. This situation occurs when you --force push a change and generate a repository containing something like this:
* -- * -- B -- O -- O -- O (88e124e13900109e0d0aec1981417382f357c98a) \ N -- N -- N (2cfe11680ecc2186339183e94f291ce586740f8b)
When this happens we assume that you've already had alert emails for all of the O revisions, and so we here report only the revisions in the N branch from the common base, B.
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 2cfe11680ecc2186339183e94f291ce586740f8b Author: Maxim Uvarov maxim.uvarov@linaro.org Date: Wed Nov 8 15:50:47 2017 +0300
configure.ac: update API and .so versions
Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org Reviewed-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org
diff --git a/configure.ac b/configure.ac index 069fdb4c..459ea231 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.5]) # Set correct API version ########################################################################## m4_define([odpapi_generation_version], [1]) -m4_define([odpapi_major_version], [15]) +m4_define([odpapi_major_version], [16]) m4_define([odpapi_minor_version], [0]) m4_define([odpapi_point_version], [0]) m4_define([odpapi_version], @@ -36,10 +36,10 @@ AM_SILENT_RULES([yes]) # 3. if interfaces were removed, then use C+1:0:0 ##########################################################################
-ODP_LIBSO_VERSION=115:0:2 +ODP_LIBSO_VERSION=116:0:0 AC_SUBST(ODP_LIBSO_VERSION)
-ODPHELPER_LIBSO_VERSION=112:1:0 +ODPHELPER_LIBSO_VERSION=113:1:1 AC_SUBST(ODPHELPER_LIBSO_VERSION)
# Checks for programs.
commit bb6abbb8a5a8f92a7b18c7c2b3336be1ef264e11 Author: Bill Fischofer bill.fischofer@linaro.org Date: Wed Nov 1 13:51:05 2017 -0500
changelog: updates for odp v1.16.0.0
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/CHANGELOG b/CHANGELOG index 866e51e9..af575783 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,225 @@ +== OpenDataPlane (1.16.0.0) +=== New Features +ODP v1.16.0.0 is the final preview release before the official release of +Tiger Moth. It introduces new APIs and extensions, as well as bug fixes and +functional improvements. + +==== APIs +The following new and changed APIs are included in this release: + +===== Initialization Changes +The new `odp_feature_t` type is introduced that defines various feature bits +for ODP components. This is used in an expanded `odp_init_t` argument to +`odp_init_global()` to specify which ODP features are unused by the +application. For example, if the application knows it will not be making use +of crypto features or the classifier, this may permit the ODP implementation +to configure itself more efficiently. Results are undefined if an application +asserts that it will not be using a feature and it attempts to do so +afterwards. + +Associated with this new support the `odp_init_param_init()` API is added +to initialize the `odp_init_t` struct to default values. + +===== Packet API Changes + +* The `odp_packet_unshared_len()` API is removed. Testing showed that this +API was non-essential and conflicted with the goal of implementation +efficiency. +* The `odp_print_packet_data()` API is added. This permits packet data to +be logged along with platform-defined metadata for debugging or diagnostic +purposes. + +===== PktIO API Changes + +* The `loop_supported` attribute of the `odp_pktio_capability_t` struct is +deprecated since this is redundant. The `enable_loop` field of the +`odp_pktio_config_t` struct (which is returned as part of the +`odp_packet_capability_t` struct) is the proper way to determine whether a +PktIO supports loopback mode. + +===== System Info API Changes + +* The documentation for the `odp_sys_huge_page_size()` API is updated to +clarify that a 0 return code indicates that huge pages are not supported by +this platform. +* The `odp_sys_huge_page_size_all()` API is added to return all +huge page sizes supported by this platform. + +===== Timer API Changes + +* The documentation for the various parameters contained in the +`odp_timer_pool_param_t` struct are expanded and clarified. + +=== Miscellaneous Fixes and Improvements + +==== Default Packet Headroom +The default packet headroom in `odp-linux` has been increased from 66 to +128 bytes for better compatibility with `odp-dpdk`. + +==== Zero-copy Packet References +The `odp-linux` reference implementation now fully supports zero-copy +packet references. Previously these APIs were implemented via packet copies, +which while functionally correct, were not how these APIs are intended to +operate. + +==== DPDK Zero-copy I/O support +The `--enable-dpdk-zero-copy` `configure` option is added to allow DPDK PktIO +devices to avoid data copies, leading to improved performance. + +==== DPDK Checksum offload support +DPDK PktIO now makes use of RX and TX IP/UDP/TCP checksum offload. + +==== Shared memory stored in /dev/shm +In the `odp-linux` reference implementation, shared memory is now backed to +`/dev/shm` rather than `/tmp` for better reliability and robustness. This may +be overridden as part of ODP build-time customization if desired. + +==== IPC Improvements +PktIO IPC support has received improvements in both performance and +reliability and is now suitable for development use. + +==== Netmap Improvements +The thread ID is now used to create unique vdev MAC addresses to avoid +conflicts with multiple ODP processes running on the same host system. + +==== `drv` directory removed +The `include/odp/drv` directory and related files have been removed. Driver +support is moved to a follow-on ODP release, so removing these files avoids +confusion as they are still incomplete. + +=== Dependency Changes + +==== Dependency on autoconf-archive removed +Since some build environments do not supply autoconf-archive, this dependency +is removed. + +==== DPDK support upgraded to 17.08 release +The ODP DPDK Packet I/O support has been upgraded to work with the DPDK 17.08 +release. + +==== Added support for OpenSSL 1.1.x releases +ODP use of OpenSSL for crypto processing has been upgraded to allow use of +OpenSSL 1.1.x. + +=== Build System Restructure +The ODP build system has been overhauled to support more comprehensive and +efficient automated testing under Travis CI. Greater use of Autoconf is now +made to control ODP configuration and build options, permitting greater +environmental flexibility. This includes an expanded range of test coverage, +including cross-compilation support for ARMv8, MIPS,and Power architectures, +as well as testing under the latest levels of GCC and clang. + +=== Arm Architecture Support Improvements + +* ARMv8 generic timer support is now included +* Improved time efficiency and accuracy by using native ARMv8 time/clock +instructions. + +==== Test Improvements +The `test` directory has been reorganized and streamlined. Platform-specific +tests are moved from `test/linux-generic` to +`platform/linux-generic/test/`. As a result, the `test/common_plat` +directory is deleted so that `test/validation`, `test/performance`, etc. are +now used for all platform-independent tests. + +==== Examples Improvements + +===== IPv4 Fragmentation Reassembly Example +The `ipfragreass` example program has been added to demonstrate IPv4 fragment +reassembly. + +===== ODP Generator Improvements +The `odp_generator` example program now uses packet references for improved +performance in UDP and ICMP traffic. The program also now makes use of HW +checksum offload support, when available. + +=== Documentation Improvements + +* The ODP Users Guide has clarified usage information about the ODP time +APIs for better portability. +* A section has been added to the ODP Users Guide on API specification +principles. This clarifies expected behavior of ODP applications and +implementations and makes explicit what the specification means by "undefined +behavior". +* All Doxygen used in ODP is upgraded to conform to the stricter documentation +requirements introduced by Doxygen 1.8.13. + +=== Bug Fixes + +==== https://bugs.linaro.org/show_bug.cgi?id=2254%5BBug 2254] +check-odp: valgrind generates "No rule to make target" + +==== https://bugs.linaro.org/show_bug.cgi?id=2407%5BBug 2407] +test odp_l2fwd_run.sh contains todo items + +==== https://bugs.linaro.org/show_bug.cgi?id=2812%5BBug 2812] +Helper/test/process fails on a single core system + +==== https://bugs.linaro.org/show_bug.cgi?id=2861%5BBug 2861] +Remove redundant loop_support parameter in pktio capability + +==== https://bugs.linaro.org/show_bug.cgi?id=2938%5BBug 2938] +Make file deps failure + +==== https://bugs.linaro.org/show_bug.cgi?id=2976%5BBug 2976] +IP headers checksum functions are incorrect + +==== https://bugs.linaro.org/show_bug.cgi?id=3024%5BBug 3024] +odp_traffic_mngr example is broken + +==== https://bugs.linaro.org/show_bug.cgi?id=3026%5BBug 3026] +pktio_ipc_run test can fail due to segfault + +==== https://bugs.linaro.org/show_bug.cgi?id=3043%5BBug 3043] +User guide error (packet diagram fix) + +==== https://bugs.linaro.org/show_bug.cgi?id=3052%5BBug 3052] +api-next out of tree build broken + +==== https://bugs.linaro.org/show_bug.cgi?id=3066%5BBug 3066] +Cross compile broken for ARMv8 + +==== https://bugs.linaro.org/show_bug.cgi?id=3126%5BBug 3126] +IPC pktio test fails with taskset -c 1-2 + +==== https://bugs.linaro.org/show_bug.cgi?id=3177%5BBug 3177] +Test case for classification enable + +==== https://bugs.linaro.org/show_bug.cgi?id=3182%5BBug 3182] +Memory allocation checks (in traffic manager) + +==== https://bugs.linaro.org/show_bug.cgi?id=3216%5BBug 3216] +Adding --enable-helper-linux configure flag breaks build + +==== https://bugs.linaro.org/show_bug.cgi?id=3238%5BBug 3238] +Doxygen warnings on helper header files + +==== https://bugs.linaro.org/show_bug.cgi?id=3241%5BBug 3241] +codecov: _odp_packet_cmp_data is not covered + +==== https://bugs.linaro.org/show_bug.cgi?id=3242%5BBug 3242] +setup_pktio_entry missing unlock + +==== https://bugs.linaro.org/show_bug.cgi?id=3249%5BBug 3249] +odp_cpu_hz() does not work on all Linux distros + +==== https://bugs.linaro.org/show_bug.cgi?id=3262%5BBug 3262] +Missing doxygen detected by Travis + +==== https://bugs.linaro.org/show_bug.cgi?id=3289%5BBug 3289] +'num_queues' isn't ignored when "classifier_enable" is enabled + +==== https://bugs.linaro.org/show_bug.cgi?id=3300%5BBug 3300] +Validation tests cannot be disabled after commit b4d17b1 + +==== https://bugs.linaro.org/show_bug.cgi?id=3411%5BBug 3411] +wrong openssl_lock pointer type + +=== Known Issues + +==== https://bugs.linaro.org/show_bug.cgi?id=3245%5BBug 3245] +Cannot run l2fwd application on Cavium ThunderX platform + == OpenDataPlane (1.15.0.0) === New Features ODP v1.15.0.0 continues the preview of Tiger Moth, introducing new APIs and
commit 45d422099d86461c48871879e0f7abbf37acfd5c Author: Bill Fischofer bill.fischofer@linaro.org Date: Tue Jun 13 07:55:14 2017 -0500
validation: init: use odp_init_param_init() in init tests
Provide test coverage for odp_init_param_init() API.
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/validation/api/init/init.c b/test/validation/api/init/init.c index d44ff234..3dc40ea5 100644 --- a/test/validation/api/init/init.c +++ b/test/validation/api/init/init.c @@ -26,10 +26,10 @@ static int odp_init_log(odp_log_level_t level, const char *fmt, ...); void init_test_odp_init_global_replace_abort(void) { int status; - struct odp_init_t init_data; + odp_init_t init_data; odp_instance_t instance;
- memset(&init_data, 0, sizeof(init_data)); + odp_init_param_init(&init_data); init_data.abort_fn = &odp_init_abort;
status = odp_init_global(&instance, &init_data, NULL); @@ -79,10 +79,10 @@ int init_main_abort(int argc, char *argv[]) void init_test_odp_init_global_replace_log(void) { int status; - struct odp_init_t init_data; + odp_init_t init_data; odp_instance_t instance;
- memset(&init_data, 0, sizeof(init_data)); + odp_init_param_init(&init_data); init_data.log_fn = &odp_init_log;
replacement_logging_used = 0;
commit 614161c1a440d13d866975dc13df13cde2e8b3f3 Author: Bill Fischofer bill.fischofer@linaro.org Date: Tue Jun 13 07:55:13 2017 -0500
linux-generic: init: implement odp_init_param_init()
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/odp_init.c b/platform/linux-generic/odp_init.c index 92a58370..fe03709b 100644 --- a/platform/linux-generic/odp_init.c +++ b/platform/linux-generic/odp_init.c @@ -25,6 +25,11 @@
struct odp_global_data_s odp_global_data;
+void odp_init_param_init(odp_init_t *param) +{ + memset(param, 0, sizeof(odp_init_t)); +} + int odp_init_global(odp_instance_t *instance, const odp_init_t *params, const odp_platform_init_t *platform_params ODP_UNUSED)
commit 279621af7fd8bf2b84b16acce85ff5bf040e7771 Author: Bill Fischofer bill.fischofer@linaro.org Date: Tue Jun 13 07:55:12 2017 -0500
api: init: add support for unused features
Add the not_used field to odp_init_t to permit applications to specify that they will not use various ODP features. This may allow implementations to provide optimized behavior.
Also add the odp_init_param_init() API to initialize odp_init_t to default values.
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/init.h b/include/odp/api/spec/init.h index 154cdf8f..e8ec4113 100644 --- a/include/odp/api/spec/init.h +++ b/include/odp/api/spec/init.h @@ -29,6 +29,7 @@ extern "C" {
#include <odp/api/std_types.h> #include <odp/api/hints.h> +#include <odp/api/feature.h> #include <odp/api/thread.h> #include <odp/api/cpumask.h>
@@ -153,8 +154,22 @@ typedef struct odp_init_t { odp_log_func_t log_fn; /** Replacement for the default abort fn */ odp_abort_func_t abort_fn; + /** Unused features. These are hints to the ODP implementation that + * the application will not use any APIs associated with these + * features. Implementations may use this information to provide + * optimized behavior. Results are undefined if applications assert + * that a feature will not be used and it is used anyway. + */ + odp_feature_t not_used; } odp_init_t;
+/** + * Initialize the odp_init_t to default values for all fields + * + * @param[out] param Address of the odp_init_t to be initialized + */ +void odp_init_param_init(odp_init_t *param); + /** * @typedef odp_platform_init_t * ODP platform initialization data
commit 29195afb96cd539e4d4a94bd3d64336acf34bcaa Author: Bill Fischofer bill.fischofer@linaro.org Date: Tue Jun 13 07:55:11 2017 -0500
api: feature: add odp feature bits
Add new odp_feature_t bits that permit other APIs/components to refer to various ODP features.
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/Makefile.am b/include/Makefile.am index a3a7e165..746b5975 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -17,6 +17,7 @@ odpapispecinclude_HEADERS = \ odp/api/spec/debug.h \ odp/api/spec/errno.h \ odp/api/spec/event.h \ + odp/api/spec/feature.h \ odp/api/spec/hash.h \ odp/api/spec/hints.h \ odp/api/spec/init.h \ diff --git a/include/odp/api/spec/feature.h b/include/odp/api/spec/feature.h new file mode 100644 index 00000000..0cfc141d --- /dev/null +++ b/include/odp/api/spec/feature.h @@ -0,0 +1,69 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP features. + * Define various ODP feature sets that can be referenced by other + * components. + */ + +#ifndef ODP_API_FEATURE_H_ +#define ODP_API_FEATURE_H_ +#include <odp/visibility_begin.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/std_types.h> + +/** @defgroup odp_features ODP_FEATURE + * ODP feature definitions + * @{ + */ + +/** Definition of ODP features */ +typedef union odp_feature_t { + /** All features */ + uint32_t all_feat; + + /** Individual feature bits */ + struct { + /** Classifier APIs, e.g., odp_cls_xxx(), odp_cos_xxx() */ + uint32_t cls:1; + + /** Crypto APIs, e.g., odp_crypto_xxx() */ + uint32_t crypto:1; + + /** IPsec APIs, e.g., odp_ipsec_xxx() */ + uint32_t ipsec:1; + + /** Scheduler APIs, e.g., odp_schedule_xxx() */ + uint32_t schedule:1; + + /** Time APIs are, e.g., odp_time_xxx() */ + uint32_t time:1; + + /** Timer APIs, e.g., odp_timer_xxx(), odp_timeout_xxx() */ + uint32_t timer:1; + + /** Traffic Manager APIs, e.g., odp_tm_xxx() */ + uint32_t tm:1; + } feat; +} odp_feature_t; + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#include <odp/visibility_end.h> +#endif diff --git a/include/odp_api.h b/include/odp_api.h index 060ec888..3a03a05b 100644 --- a/include/odp_api.h +++ b/include/odp_api.h @@ -32,6 +32,7 @@ extern "C" { #include <odp/api/barrier.h> #include <odp/api/spinlock.h> #include <odp/api/atomic.h> +#include <odp/api/feature.h> #include <odp/api/init.h> #include <odp/api/system_info.h> #include <odp/api/thread.h> diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index cb13126e..9cb501cf 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -35,6 +35,7 @@ odpapiinclude_HEADERS = \ include/odp/api/deprecated.h \ include/odp/api/errno.h \ include/odp/api/event.h \ + include/odp/api/feature.h \ include/odp/api/hash.h \ include/odp/api/hints.h \ include/odp/api/init.h \ diff --git a/platform/linux-generic/include/odp/api/feature.h b/platform/linux-generic/include/odp/api/feature.h new file mode 100644 index 00000000..55a86a83 --- /dev/null +++ b/platform/linux-generic/include/odp/api/feature.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP features. + */ + +#ifndef ODP_PLAT_FEATURE_H_ +#define ODP_PLAT_FEATURE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @ingroup odp_feature + * @{ + */ + +/** + * @} + */ + +#include <odp/api/spec/feature.h> + +#ifdef __cplusplus +} +#endif + +#endif
commit b653ea8ac54aea1a81ce9f49d4ec60f81bec2d2d Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Wed Jul 12 14:42:06 2017 +0300
doc: move PREDEFINED to common place
It is easy to update PREDEFINED definitions in one Doxyfile, while forgetting about the others, as happened e.g. with ODP_DEPRECATE(x) definition. Move PREDEFINED definitions into Doxyfile_common, so that it is included by the rest of Doxyfiles.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/doc/Doxyfile_common b/doc/Doxyfile_common index 59558535..0471dcf3 100644 --- a/doc/Doxyfile_common +++ b/doc/Doxyfile_common @@ -30,3 +30,15 @@ MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES INTERNAL_DOCS = YES DOT_IMAGE_FORMAT = svg +PREDEFINED = __GNUC__ \ + __attribute__(x)= \ + ODP_ALIGNED(x)= \ + ODPDRV_ALIGNED(x)= \ + __BIG_ENDIAN_BITFIELD \ + __LITTLE_ENDIAN_BITFIELD \ + __x86_64__ \ + ODP_PACKED \ + ODPDRV_PACKED \ + ODP_DEPRECATE(x)=x \ + "ODP_HANDLE_T(type)=odp_handle_t type" \ + "ODPDRV_HANDLE_T(type)=odpdrv_handle_t type" diff --git a/doc/application-api-guide/Doxyfile b/doc/application-api-guide/Doxyfile index a2168a92..00c18df2 100644 --- a/doc/application-api-guide/Doxyfile +++ b/doc/application-api-guide/Doxyfile @@ -6,6 +6,4 @@ PROJECT_LOGO = $(SRCDIR)/doc/images/ODP-Logo-HQ.svg INPUT = $(SRCDIR)/doc/application-api-guide \ $(SRCDIR)/include EXAMPLE_PATH = $(SRCDIR)/example $(SRCDIR) -PREDEFINED = __GNUC__ \ - "ODP_HANDLE_T(type)=odp_handle_t type" WARNINGS = NO diff --git a/doc/helper-guide/Doxyfile b/doc/helper-guide/Doxyfile index bcc24539..bb9bd8e6 100644 --- a/doc/helper-guide/Doxyfile +++ b/doc/helper-guide/Doxyfile @@ -33,13 +33,5 @@ LAYOUT_FILE = $(SRCDIR)/doc/doxygenlayout.xml ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES -PREDEFINED = __GNUC__ \ - __attribute__(x)= \ - ODP_ALIGNED(x)= \ - __BIG_ENDIAN_BITFIELD \ - __LITTLE_ENDIAN_BITFIELD \ - __x86_64__ \ - ODP_PACKED \ - "ODP_HANDLE_T(type)=odp_handle_t type" INTERNAL_DOCS = YES DOT_IMAGE_FORMAT = svg diff --git a/doc/platform-api-guide/Doxyfile b/doc/platform-api-guide/Doxyfile index 1f2d49a4..d716b4a3 100644 --- a/doc/platform-api-guide/Doxyfile +++ b/doc/platform-api-guide/Doxyfile @@ -10,12 +10,3 @@ INPUT = $(SRCDIR)/doc/application-api-guide \ $(SRCDIR)/platform/$(WITH_PLATFORM)/include/odp/api \ $(SRCDIR)/platform/$(WITH_PLATFORM)/arch/$(WITH_ARCH) EXAMPLE_PATH = $(SRCDIR)/example $(SRCDIR)/platform $(SRCDIR) -PREDEFINED = __GNUC__ \ - __attribute__(x)= \ - ODP_ALIGNED(x)= \ - __BIG_ENDIAN_BITFIELD \ - __LITTLE_ENDIAN_BITFIELD \ - __x86_64__ \ - ODP_PACKED \ - ODP_DEPRECATE(x)=x \ - "ODP_HANDLE_T(type)=odp_handle_t type"
commit 3c8f24c52d80bd7e032ba3a1788c8dbc4d5ea0ad Author: Petri Savolainen petri.savolainen@linaro.org Date: Tue Sep 5 13:46:58 2017 +0300
api: packet_io: refine packet format on output
Define explicitly that (by default) packet output does not need any extra metadata to be set. Also (Ethernet) padding and CRC are added by default.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index 76c63e72..efc3aa76 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -857,6 +857,11 @@ uint64_t odp_pktin_wait_time(uint64_t nsec); * is less than 'num', the remaining packets at the end of packets[] array * are not consumed, and the caller has to take care of them. * + * Entire packet data is sent out (odp_packet_len() bytes of data, starting from + * odp_packet_data()). All other packet metadata is ignored unless otherwise + * specified e.g. for protocol offload purposes. Link protocol specific frame + * checksum and padding are added to frames before transmission. + * * @param queue Packet output queue handle for sending packets * @param packets[] Array of packets to send * @param num Number of packets to send
commit 9b98d35daf7736b34e51400c6a7e32bf81537ce6 Author: Bill Fischofer bill.fischofer@linaro.org Date: Thu Oct 5 15:35:08 2017 -0500
doc: userguide: remove references to odp_packet_unshared_len()
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@nokia.com Reviewed-by: Nikhil Agarwal nikhil.agarwal@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/doc/images/reflen.svg b/doc/images/reflen.svg deleted file mode 100644 index de232903..00000000 --- a/doc/images/reflen.svg +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" viewBox="0 0 915.17047 183.26279" stroke-miterlimit="10" id="svg2" inkscape:version="0.91 r13725" sodipodi:docname="reflen.svg" width="915.17047" height="183.26279" style="fill:none;stroke:none;stroke-linecap:square;stroke-miterlimit:10"> - <metadata id="metadata71"> - rdf:RDF - <cc:Work rdf:about=""> - dc:formatimage/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage%22/%3E - dc:title/ - </cc:Work> - </rdf:RDF> - </metadata> - <defs id="defs69"/> - <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1628" inkscape:window-height="868" id="namedview67" showgrid="false" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" inkscape:zoom="0.62083333" inkscape:cx="571.31623" inkscape:cy="459.71573" inkscape:window-x="65" inkscape:window-y="24" inkscape:window-maximized="0" inkscape:current-layer="svg2"/> - <clipPath id="g188eb9bc0a_2_33.0"> - <path d="M 0,0 960,0 960,540 0,540 0,0 Z" id="path5" inkscape:connector-curvature="0" style="clip-rule:nonzero"/> - </clipPath> - <path style="fill:#b6d7a8;fill-rule:nonzero" inkscape:connector-curvature="0" id="path11" d="m 463.3302,61.79527 314.36218,0 0,82.55118 -314.36218,0 z"/> - <path style="fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" inkscape:connector-curvature="0" id="path13" d="m 463.3302,61.79527 314.36218,0 0,82.55118 -314.36218,0 z"/> - <path style="fill:#b6d7a8;fill-rule:nonzero" inkscape:connector-curvature="0" id="path15" d="m 786.29646,61.79514 127.87402,0 0,82.55118 -127.87402,0 z"/> - <path style="fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:2, 6" inkscape:connector-curvature="0" id="path17" d="m 786.29646,61.79514 127.87402,0 0,82.55118 -127.87402,0 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path19" d="m 821.96286,108.49073 0.23437,1.48437 q -0.70312,0.14063 -1.26562,0.14063 -0.90625,0 -1.40625,-0.28125 -0.5,-0.29688 -0.70313,-0.75 -0.20312,-0.46875 -0.20312,-1.98438 l 0,-5.65625 -1.23438,0 0,-1.3125 1.23438,0 0,-2.4375 1.65625,-1 0,3.4375 1.6875,0 0,1.3125 -1.6875,0 0,5.75 q 0,0.71875 0.0781,0.92188 0.0937,0.20312 0.29688,0.32812 0.20312,0.125 0.57812,0.125 0.26563,0 0.73438,-0.0781 z m 7.9646,0.28125 q -0.9375,0.79687 -1.79688,1.125 -0.85937,0.3125 -1.84375,0.3125 -1.60937,0 -2.48437,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32812,-1.32813 0.32813,-0.59375 0.85938,-0.95312 0.53125,-0.35938 1.20312,-0.54688 0.5,-0.14062 1.48438,-0.25 2.03125,-0.25 2.98437,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64062,-0.5625 -1.90625,-0.5625 -1.17187,0 -1.73437,0.40625 -0.5625,0.40625 -0.82813,1.46875 l -1.64062,-0.23438 q 0.23437,-1.04687 0.73437,-1.6875 0.51563,-0.6406 2 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26563,0 2.04688,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51562,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10938,0.60938 0.4375,1.17188 l -1.75,0 q -0.26562,-0.51563 -0.32812,-1.21875 z m -0.14063,-3.71875 q -0.90625,0.35937 -2.73437,0.625 -1.03125,0.14062 -1.45313,0.32812 -0.42187,0.1875 -0.65625,0.54688 -0.23437,0.35937 -0.23437,0.79687 0,0.67188 0.5,1.125 0.51562,0.4375 1.48437,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10938,-1.15625 0.26562,-0.57813 0.26562,-1.67188 l 0,-0.60937 z m 4.09443,-6.75 0,-1.90625 1.67187,0 0,1.90625 -1.67187,0 z m 0,11.6875 0,-9.85938 1.67187,0 0,9.85938 -1.67187,0 z m 4.09796,0 0,-13.59375 1.67187,0 0,13.59375 -1.67187,0 z m 4.16046,0 0,-9.85938 1.5,0 0,1.5 q 0.57812,-1.04687 1.0625,-1.375 0.48437,-0.34375 1.07812,-0.34375 0.84375,0 1.71875,0.54688 l -0.57812,1.54687 q -0.60938,-0.35937 -1.23438,-0.35937 -0.54687,0 -0.98437,0.32812 -0.42188,0.328 13 -0.60938,0.90625 -0.28125,0.89063 -0.28125,1.95313 l 0,5.15625 -1.67187,0 z m 5.60327,-4.92188 q 0,-2.73437 1.53125,-4.0625 1.26563,-1.09375 3.09375,-1.09375 2.03125,0 3.3125,1.34375 1.29688,1.32813 1.29688,3.67188 0,1.90625 -0.57813,3 -0.5625,1.07812 -1.65625,1.6875 -1.07812,0.59375 -2.375,0.59375 -2.0625,0 -3.34375,-1.32813 -1.28125,-1.32812 -1.28125,-3.8125 z m 1.71875,0 q 0,1.89063 0.82813,2.82813 0.82812,0.9375 2.07812,0.9375 1.25,0 2.0625,-0.9375 0.82813,-0.95313 0.82813,-2.89063 0,-1.82812 -0.82813,-2.76562 -0.82812,-0.9375 -2.0625,-0.9375 -1.25,0 -2.07812,0.9375 -0.82813,0.9375 -0.82813,2.82812 z m 8.65698,0 q 0,-2.73437 1.53125,-4.0625 1.26563,-1.09375 3.09375,-1.09375 2.03125,0 3.3125,1.34375 1.29688,1.32813 1.29688,3.67188 0,1.90625 -0.57813,3 -0.5625,1.07812 -1.65625,1.6875 -1.07812,0.59375 -2.375,0.59375 -2.0625,0 -3.34375,-1.32813 -1.28125,-1.32812 -1.28125,-3.8125 z m 1.71875,0 q 0,1.89063 0.82813,2.82813 0.82812,0.9375 2.07812,0.9375 1.25,0 2.0625,-0.9375 0.82813, -0.95313 0.82813,-2.89063 0,-1.82812 -0.82813,-2.76562 -0.82812,-0.9375 -2.0625,-0.9375 -1.25,0 -2.07812,0.9375 -0.82813,0.9375 -0.82813,2.82812 z m 9.28198,4.92188 0,-9.85938 1.5,0 0,1.39063 q 0.45313,-0.71875 1.21875,-1.15625 0.78125,-0.45313 1.76563,-0.45313 1.09375,0 1.79687,0.45313 0.70313,0.45312 0.98438,1.28125 1.17187,-1.73438 3.04687,-1.73438 1.46875,0 2.25,0.8125 0.79688,0.8125 0.79688,2.5 l 0,6.76563 -1.67188,0 0,-6.20313 q 0,-1 -0.15625,-1.4375 -0.15625,-0.45312 -0.59375,-0.71875 -0.42187,-0.26562 -1,-0.26562 -1.03125,0 -1.71875,0.6875 -0.6875,0.6875 -0.6875,2.21875 l 0,5.71875 -1.67187,0 0,-6.40625 q 0,-1.10938 -0.40625,-1.65625 -0.40625,-0.5625 -1.34375,-0.5625 -0.70313,0 -1.3125,0.375 -0.59375,0.35937 -0.85938,1.07812 -0.26562,0.71875 -0.26562,2.0625 l 0,5.10938 -1.67188,0 z"/> - <path style="fill:#d9ead3;fill-rule:nonzero" inkscape:connector-curvature="0" id="path21" d="m 166.25364,61.79527 298.01575,0 0,82.55118 -298.01575,0 z"/> - <path style="fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" inkscape:connector-curvature="0" id="path23" d="m 166.25364,61.79527 298.01575,0 0,82.55118 -298.01575,0 z"/> - <path style="fill:#d9ead3;fill-rule:nonzero" inkscape:connector-curvature="0" id="path25" d="m 1,61.79514 156.66142,0 0,82.55118 -156.66142,0 z"/> - <path style="fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:2, 6" inkscape:connector-curvature="0" id="path27" d="m 1,61.79514 156.66142,0 0,82.55118 -156.66142,0 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path29" d="m 38.57682,109.99073 0,-13.59375 1.671875,0 0,4.875 q 1.171875,-1.35938 2.953125,-1.35938 1.09375,0 1.890625,0.4375 0.8125,0.42188 1.15625,1.1875 0.359375,0.76563 0.359375,2.20313 l 0,6.25 -1.671875,0 0,-6.25 q 0,-1.25 -0.546875,-1.8125 -0.546875,-0.57813 -1.53125,-0.57813 -0.75,0 -1.40625,0.39063 -0.640625,0.375 -0.921875,1.04687 -0.28125,0.65625 -0.28125,1.8125 l 0,5.39063 -1.671875,0 z m 17.125717,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.515625,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.421875,-1.32813 -1.265625,-1.32812 -1.265625,-3.73437 0,-2.48438 1.265625,-3.85938 1.28125,-1.375 3.328125,-1.375 1.984375,0 3.234375,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.01563,0.4375 l -7.34375,0 q 0.09375,1.625 0.921875,2.48437 0.828125,0.85938 2.0625,0.85938 0.90625,0 1.546875,-0.46875 0.65625,-0.48438 1.046875,-1.54688 z m -5.484375,-2.70312 5.5,0 q -0.109375,-1.23438 -0.625,- 1.85938 -0.796875,-0.96875 -2.078125,-0.96875 -1.140625,0 -1.9375,0.78125 -0.78125,0.76563 -0.859375,2.04688 z m 15.547592,4.65625 q -0.9375,0.79687 -1.796875,1.125 -0.859375,0.3125 -1.84375,0.3125 -1.609375,0 -2.484375,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.328125,-1.32813 0.328125,-0.59375 0.859375,-0.95312 0.53125,-0.35938 1.203125,-0.54688 0.5,-0.14062 1.484375,-0.25 2.03125,-0.25 2.984375,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.640625,-0.5625 -1.90625,-0.5625 -1.171875,0 -1.734375,0.40625 -0.5625,0.40625 -0.828125,1.46875 l -1.640625,-0.23438 q 0.234375,-1.04687 0.734375,-1.6875 0.515625,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.265625,0 2.046875,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.515625,1.14062 0.09375,0.42188 0.09375,1.53125 l 0,2.23438 q 0,2.32812 0.09375,2.95312 0.109375,0.60938 0.4375,1.17188 l -1.75,0 q -0.265625,-0.51563 -0.328125,-1.21875 z m -0.140625,-3.71875 q -0.90625,0.35937 -2.734375,0.625 -1.0 3125,0.14062 -1.453125,0.32812 -0.421875,0.1875 -0.65625,0.54688 -0.234375,0.35937 -0.234375,0.79687 0,0.67188 0.5,1.125 0.515625,0.4375 1.484375,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.109375,-1.15625 0.265625,-0.57813 0.265625,-1.67188 l 0,-0.60937 z m 10.469464,4.9375 0,-1.25 q -0.9375,1.46875 -2.75,1.46875 -1.17187,0 -2.17187,-0.64063 -0.984377,-0.65625 -1.531252,-1.8125 -0.53125,-1.17187 -0.53125,-2.6875 0,-1.46875 0.484375,-2.67187 0.5,-1.20313 1.468747,-1.84375 0.98438,-0.64063 2.20313,-0.64063 0.89062,0 1.57812,0.375 0.70313,0.375 1.14063,0.98438 l 0,-4.875 1.65625,0 0,13.59375 -1.54688,0 z m -5.28125,-4.92188 q 0,1.89063 0.79688,2.82813 0.8125,0.9375 1.89062,0.9375 1.09375,0 1.85938,-0.89063 0.76562,-0.89062 0.76562,-2.73437 0,-2.01563 -0.78125,-2.95313 -0.78125,-0.95312 -1.92187,-0.95312 -1.10938,0 -1.85938,0.90625 -0.75,0.90625 -0.75,2.85937 z m 9.25072,4.92188 0,-9.85938 1.5,0 0,1.5 q 0.57812,-1.04687 1.0625,-1.375 0.48437,-0.34375 1.07812,-0.34375 0.84375,0 1.7 1875,0.54688 l -0.57812,1.54687 q -0.60938,-0.35937 -1.23438,-0.35937 -0.54687,0 -0.98437,0.32812 -0.42188,0.32813 -0.60938,0.90625 -0.28125,0.89063 -0.28125,1.95313 l 0,5.15625 -1.67187,0 z m 5.6033,-4.92188 q 0,-2.73437 1.53125,-4.0625 1.26563,-1.09375 3.09375,-1.09375 2.03125,0 3.3125,1.34375 1.29688,1.32813 1.29688,3.67188 0,1.90625 -0.57813,3 -0.5625,1.07812 -1.65625,1.6875 -1.07812,0.59375 -2.375,0.59375 -2.0625,0 -3.34375,-1.32813 -1.28125,-1.32812 -1.28125,-3.8125 z m 1.71875,0 q 0,1.89063 0.82813,2.82813 0.82812,0.9375 2.07812,0.9375 1.25,0 2.0625,-0.9375 0.82813,-0.95313 0.82813,-2.89063 0,-1.82812 -0.82813,-2.76562 -0.82812,-0.9375 -2.0625,-0.9375 -1.25,0 -2.07812,0.9375 -0.82813,0.9375 -0.82813,2.82812 z m 8.65697,0 q 0,-2.73437 1.53125,-4.0625 1.26562,-1.09375 3.093737,-1.09375 2.03125,0 3.3125,1.34375 1.29688,1.32813 1.29688,3.67188 0,1.90625 -0.57813,3 -0.5625,1.07812 -1.65625,1.6875 -1.07812,0.59375 -2.375,0.59375 -2.062497,0 -3.343737,-1.32813 -1.28125,-1.32812 -1.2 8125,-3.8125 z m 1.71875,0 q 0,1.89063 0.82812,2.82813 0.82812,0.9375 2.078117,0.9375 1.25,0 2.0625,-0.9375 0.82813,-0.95313 0.82813,-2.89063 0,-1.82812 -0.82813,-2.76562 -0.82812,-0.9375 -2.0625,-0.9375 -1.249997,0 -2.078117,0.9375 -0.82812,0.9375 -0.82812,2.82812 z m 9.281957,4.92188 0,-9.85938 1.5,0 0,1.39063 q 0.45312,-0.71875 1.21875,-1.15625 0.78125,-0.45313 1.76562,-0.45313 1.09375,0 1.79688,0.45313 0.70312,0.45312 0.98437,1.28125 1.17188,-1.73438 3.04688,-1.73438 1.46875,0 2.25,0.8125 0.79687,0.8125 0.79687,2.5 l 0,6.76563 -1.67187,0 0,-6.20313 q 0,-1 -0.15625,-1.4375 -0.15625,-0.45312 -0.59375,-0.71875 -0.42188,-0.26562 -1,-0.26562 -1.03125,0 -1.71875,0.6875 -0.6875,0.6875 -0.6875,2.21875 l 0,5.71875 -1.67188,0 0,-6.40625 q 0,-1.10938 -0.40625,-1.65625 -0.40625,-0.5625 -1.34375,-0.5625 -0.70312,0 -1.3125,0.375 -0.59375,0.35937 -0.85937,1.07812 -0.26563,0.71875 -0.26563,2.0625 l 0,5.10938 -1.67187,0 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path31" d="m 322.39276,88.56955 283.0551,0 0,37.98425 -283.0551,0 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path33" d="m 416.94009,107.26291 0,-13.64063 1.53125,0 0,1.28125 q 0.53125,-0.75 1.20313,-1.125 0.6875,-0.375 1.64062,-0.375 1.26563,0 2.23438,0.65625 0.96875,0.64063 1.45312,1.82813 0.5,1.1875 0.5,2.59375 0,1.51562 -0.54687,2.73437 -0.54688,1.20313 -1.57813,1.84375 -1.03125,0.64063 -2.17187,0.64063 -0.84375,0 -1.51563,-0.34375 -0.65625,-0.35938 -1.07812,-0.89063 l 0,4.79688 -1.67188,0 z m 1.51563,-8.65625 q 0,1.90625 0.76562,2.8125 0.78125,0.90625 1.875,0.90625 1.10938,0 1.89063,-0.9375 0.79687,-0.9375 0.79687,-2.92188 0,-1.875 -0.78125,-2.8125 -0.76562,-0.9375 -1.84375,-0.9375 -1.0625,0 -1.89062,1 -0.8125,1 -0.8125,2.89063 z m 15.29757,3.65625 q -0.9375,0.79687 -1.79687,1.125 -0.85938,0.3125 -1.84375,0.3125 -1.60938,0 -2.48438,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32813,-1.32813 0.32812,-0.59375 0.85937,-0.95312 0.53125,-0.35938 1.20313,-0.54688 0.5,-0.14062 1.48437,-0.25 2.03125,-0 .25 2.98438,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64063,-0.5625 -1.90625,-0.5625 -1.17188,0 -1.73438,0.40625 -0.5625,0.40625 -0.82812,1.46875 l -1.64063,-0.23438 q 0.23438,-1.04687 0.73438,-1.6875 0.51562,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26562,0 2.04687,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51563,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10937,0.60938 0.4375,1.17188 l -1.75,0 q -0.26563,-0.51563 -0.32813,-1.21875 z m -0.14062,-3.71875 q -0.90625,0.35937 -2.73438,0.625 -1.03125,0.14062 -1.45312,0.32812 -0.42188,0.1875 -0.65625,0.54688 -0.23438,0.35937 -0.23438,0.79687 0,0.67188 0.5,1.125 0.51563,0.4375 1.48438,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10937,-1.15625 0.26563,-0.57813 0.26563,-1.67188 l 0,-0.60937 z m 10.51635,1.32812 1.64063,0.21875 q -0.26563,1.6875 -1.375,2.65625 -1.10938,0.95313 -2.73438,0.95313 -2.01562,0 -3.25,-1.3125 -1.21875,-1.32813 -1.21875,-3.79688 0,- 1.59375 0.51563,-2.78125 0.53125,-1.20312 1.60937,-1.79687 1.09375,-0.60938 2.35938,-0.60938 1.60937,0 2.625,0.8125 1.01562,0.8125 1.3125,2.3125 l -1.625,0.25 q -0.23438,-1 -0.82813,-1.5 -0.59375,-0.5 -1.42187,-0.5 -1.26563,0 -2.0625,0.90625 -0.78125,0.90625 -0.78125,2.85938 0,1.98437 0.76562,2.89062 0.76563,0.89063 1.98438,0.89063 0.98437,0 1.64062,-0.59375 0.65625,-0.60938 0.84375,-1.85938 z m 2.90625,3.60938 0,-13.59375 1.67188,0 0,7.75 3.95312,-4.01563 2.15625,0 -3.76562,3.65625 4.14062,6.20313 -2.0625,0 -3.25,-5.03125 -1.17187,1.125 0,3.90625 -1.67188,0 z m 16.0625,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.51562,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42188,-1.32813 -1.26562,-1.32812 -1.26562,-3.73437 0,-2.48438 1.26562,-3.85938 1.28125,-1.375 3.32813,-1.375 1.98437,0 3.23437,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92187,2.48437 0.82813,0.85938 2.0625,0.85938 0.90625,0 1.54688,-0.46875 0.65625,-0.48438 1.04687,-1. 54688 z m -5.48437,-2.70312 5.5,0 q -0.10938,-1.23438 -0.625,-1.85938 -0.79688,-0.96875 -2.07813,-0.96875 -1.14062,0 -1.9375,0.78125 -0.78125,0.76563 -0.85937,2.04688 z m 12.76633,4.375 0.23437,1.48437 q -0.70312,0.14063 -1.26562,0.14063 -0.90625,0 -1.40625,-0.28125 -0.5,-0.29688 -0.70313,-0.75 -0.20312,-0.46875 -0.20312,-1.98438 l 0,-5.65625 -1.23438,0 0,-1.3125 1.23438,0 0,-2.4375 1.65625,-1 0,3.4375 1.6875,0 0,1.3125 -1.6875,0 0,5.75 q 0,0.71875 0.0781,0.92188 0.0937,0.20312 0.29688,0.32812 0.20312,0.125 0.57812,0.125 0.26563,0 0.73438,-0.0781 z m 13.10098,1.5 0,-1.25 q -0.9375,1.46875 -2.75,1.46875 -1.17188,0 -2.17188,-0.64063 -0.98437,-0.65625 -1.53125,-1.8125 -0.53125,-1.17187 -0.53125,-2.6875 0,-1.46875 0.48438,-2.67187 0.5,-1.20313 1.46875,-1.84375 0.98437,-0.64063 2.20312,-0.64063 0.89063,0 1.57813,0.375 0.70312,0.375 1.14062,0.98438 l 0,-4.875 1.65625,0 0,13.59375 -1.54687,0 z m -5.28125,-4.92188 q 0,1.89063 0.79687,2.82813 0.8125,0.9375 1.89063,0.9375 1.09375,0 1.85937,-0 .89063 0.76563,-0.89062 0.76563,-2.73437 0,-2.01563 -0.78125,-2.95313 -0.78125,-0.95312 -1.92188,-0.95312 -1.10937,0 -1.85937,0.90625 -0.75,0.90625 -0.75,2.85937 z m 15.70386,3.70313 q -0.9375,0.79687 -1.79688,1.125 -0.85937,0.3125 -1.84375,0.3125 -1.60937,0 -2.48437,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32812,-1.32813 0.32813,-0.59375 0.85938,-0.95312 0.53125,-0.35938 1.20312,-0.54688 0.5,-0.14062 1.48438,-0.25 2.03125,-0.25 2.98437,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64062,-0.5625 -1.90625,-0.5625 -1.17187,0 -1.73437,0.40625 -0.5625,0.40625 -0.82813,1.46875 l -1.64062,-0.23438 q 0.23437,-1.04687 0.73437,-1.6875 0.51563,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26563,0 2.04688,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51562,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10938,0.60938 0.4375,1.17188 l -1.75,0 q -0.26562,-0.51563 -0.32812,-1.21875 z m -0.14063,-3.71875 q -0.90625,0.35 937 -2.73437,0.625 -1.03125,0.14062 -1.45313,0.32812 -0.42187,0.1875 -0.65625,0.54688 -0.23437,0.35937 -0.23437,0.79687 0,0.67188 0.5,1.125 0.51562,0.4375 1.48437,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10938,-1.15625 0.26562,-0.57813 0.26562,-1.67188 l 0,-0.60937 z m 7.73505,3.4375 0.23437,1.48437 q -0.70312,0.14063 -1.26562,0.14063 -0.90625,0 -1.40625,-0.28125 -0.5,-0.29688 -0.70313,-0.75 -0.20312,-0.46875 -0.20312,-1.98438 l 0,-5.65625 -1.23438,0 0,-1.3125 1.23438,0 0,-2.4375 1.65625,-1 0,3.4375 1.6875,0 0,1.3125 -1.6875,0 0,5.75 q 0,0.71875 0.0781,0.92188 0.0937,0.20312 0.29688,0.32812 0.20312,0.125 0.57812,0.125 0.26563,0 0.73438,-0.0781 z m 7.9646,0.28125 q -0.9375,0.79687 -1.79688,1.125 -0.85937,0.3125 -1.84375,0.3125 -1.60937,0 -2.48437,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32812,-1.32813 0.32813,-0.59375 0.85938,-0.95312 0.53125,-0.35938 1.20312,-0.54688 0.5,-0.14062 1.48438,-0.25 2.03125,-0.25 2.98437,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.468 75,-1.4375 -0.64062,-0.5625 -1.90625,-0.5625 -1.17187,0 -1.73437,0.40625 -0.5625,0.40625 -0.82813,1.46875 l -1.64062,-0.23438 q 0.23437,-1.04687 0.73437,-1.6875 0.51563,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26563,0 2.04688,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51562,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10938,0.60938 0.4375,1.17188 l -1.75,0 q -0.26562,-0.51563 -0.32812,-1.21875 z m -0.14063,-3.71875 q -0.90625,0.35937 -2.73437,0.625 -1.03125,0.14062 -1.45313,0.32812 -0.42187,0.1875 -0.65625,0.54688 -0.23437,0.35937 -0.23437,0.79687 0,0.67188 0.5,1.125 0.51562,0.4375 1.48437,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10938,-1.15625 0.26562,-0.57813 0.26562,-1.67188 l 0,-0.60937 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path35" d="m 346.50918,129.48167 q -1.375,-1.75 -2.32813,-4.07813 -0.95312,-2.34375 -0.95312,-4.84375 0,-2.21875 0.70312,-4.23437 0.84375,-2.34375 2.57813,-4.67188 l 1.20312,0 q -1.125,1.92188 -1.48437,2.75 -0.5625,1.28125 -0.89063,2.67188 -0.40625,1.73437 -0.40625,3.48437 0,4.46875 2.78125,8.92188 l -1.20312,0 z m 3.02518,-4 0,-13.59375 1.67187,0 0,4.875 q 1.17188,-1.35938 2.95313,-1.35938 1.09375,0 1.89062,0.4375 0.8125,0.42188 1.15625,1.1875 0.35938,0.76563 0.35938,2.20313 l 0,6.25 -1.67188,0 0,-6.25 q 0,-1.25 -0.54687,-1.8125 -0.54688,-0.57813 -1.53125,-0.57813 -0.75,0 -1.40625,0.39063 -0.64063,0.375 -0.92188,1.04687 -0.28125,0.65625 -0.28125,1.8125 l 0,5.39063 -1.67187,0 z m 17.1257,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.51563,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42187,-1.32813 -1.26563,-1.32812 -1.26563,-3.73437 0,-2.48438 1.26563,-3.85938 1.28125,-1.375 3.32812,-1.375 1.9 8438,0 3.23438,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92188,2.48437 0.82812,0.85938 2.0625,0.85938 0.90625,0 1.54687,-0.46875 0.65625,-0.48438 1.04688,-1.54688 z m -5.48438,-2.70312 5.5,0 q -0.10937,-1.23438 -0.625,-1.85938 -0.79687,-0.96875 -2.07812,-0.96875 -1.14063,0 -1.9375,0.78125 -0.78125,0.76563 -0.85938,2.04688 z m 15.54761,4.65625 q -0.9375,0.79687 -1.79687,1.125 -0.85938,0.3125 -1.84375,0.3125 -1.60938,0 -2.48438,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32813,-1.32813 0.32812,-0.59375 0.85937,-0.95312 0.53125,-0.35938 1.20313,-0.54688 0.5,-0.14062 1.48437,-0.25 2.03125,-0.25 2.98438,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64063,-0.5625 -1.90625,-0.5625 -1.17188,0 -1.73438,0.40625 -0.5625,0.40625 -0.82812,1.46875 l -1.64063,-0.23438 q 0.23438,-1.04687 0.73438,-1.6875 0.51562,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26562,0 2.04687,0.29688 0.78125,0.29687 1.15625,0.75 0.375, 0.45312 0.51563,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10937,0.60938 0.4375,1.17188 l -1.75,0 q -0.26563,-0.51563 -0.32813,-1.21875 z m -0.14062,-3.71875 q -0.90625,0.35937 -2.73438,0.625 -1.03125,0.14062 -1.45312,0.32812 -0.42188,0.1875 -0.65625,0.54688 -0.23438,0.35937 -0.23438,0.79687 0,0.67188 0.5,1.125 0.51563,0.4375 1.48438,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10937,-1.15625 0.26563,-0.57813 0.26563,-1.67188 l 0,-0.60937 z m 10.46945,4.9375 0,-1.25 q -0.9375,1.46875 -2.75,1.46875 -1.17188,0 -2.17188,-0.64063 -0.98437,-0.65625 -1.53125,-1.8125 -0.53125,-1.17187 -0.53125,-2.6875 0,-1.46875 0.48438,-2.67187 0.5,-1.20313 1.46875,-1.84375 0.98437,-0.64063 2.20312,-0.64063 0.89063,0 1.57813,0.375 0.70312,0.375 1.14062,0.98438 l 0,-4.875 1.65625,0 0,13.59375 -1.54687,0 z m -5.28125,-4.92188 q 0,1.89063 0.79687,2.82813 0.8125,0.9375 1.89063,0.9375 1.09375,0 1.85937,-0.89063 0.76563,-0.89062 0.76563,-2.73437 0,-2.01563 -0.78125,-2.953 13 -0.78125,-0.95312 -1.92188,-0.95312 -1.10937,0 -1.85937,0.90625 -0.75,0.90625 -0.75,2.85937 z m 16.01635,1.75 1.71875,0.21875 q -0.40625,1.5 -1.51562,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42188,-1.32813 -1.26562,-1.32812 -1.26562,-3.73437 0,-2.48438 1.26562,-3.85938 1.28125,-1.375 3.32813,-1.375 1.98437,0 3.23437,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92187,2.48437 0.82813,0.85938 2.0625,0.85938 0.90625,0 1.54688,-0.46875 0.65625,-0.48438 1.04687,-1.54688 z m -5.48437,-2.70312 5.5,0 q -0.10938,-1.23438 -0.625,-1.85938 -0.79688,-0.96875 -2.07813,-0.96875 -1.14062,0 -1.9375,0.78125 -0.78125,0.76563 -0.85937,2.04688 z m 9.09445,5.875 0,-9.85938 1.5,0 0,1.5 q 0.57813,-1.04687 1.0625,-1.375 0.48438,-0.34375 1.07813,-0.34375 0.84375,0 1.71875,0.54688 l -0.57813,1.54687 q -0.60937,-0.35937 -1.23437,-0.35937 -0.54688,0 -0.98438,0.32812 -0.42187,0.32813 -0.60937,0.90625 -0.28125,0.89063 -0.28125,1.95313 l 0,5.15625 -1.6718 8,0 z m 5.55643,-2.9375 1.65625,-0.26563 q 0.14062,1 0.76562,1.53125 0.64063,0.51563 1.78125,0.51563 1.15625,0 1.70313,-0.46875 0.5625,-0.46875 0.5625,-1.09375 0,-0.5625 -0.48438,-0.89063 -0.34375,-0.21875 -1.70312,-0.5625 -1.84375,-0.46875 -2.5625,-0.79687 -0.70313,-0.34375 -1.07813,-0.9375 -0.35937,-0.60938 -0.35937,-1.32813 0,-0.65625 0.29687,-1.21875 0.3125,-0.5625 0.82813,-0.9375 0.39062,-0.28125 1.0625,-0.48437 0.67187,-0.20313 1.4375,-0.20313 1.17187,0 2.04687,0.34375 0.875,0.32813 1.28125,0.90625 0.42188,0.5625 0.57813,1.51563 l -1.625,0.21875 q -0.10938,-0.75 -0.65625,-1.17188 -0.53125,-0.4375 -1.5,-0.4375 -1.15625,0 -1.64063,0.39063 -0.48437,0.375 -0.48437,0.875 0,0.32812 0.20312,0.59375 0.20313,0.26562 0.64063,0.4375 0.25,0.0937 1.46875,0.4375 1.76562,0.46875 2.46875,0.76562 0.70312,0.29688 1.09375,0.875 0.40625,0.57813 0.40625,1.4375 0,0.82813 -0.48438,1.57813 -0.48437,0.73437 -1.40625,1.14062 -0.92187,0.39063 -2.07812,0.39063 -1.92188,0 -2.9375,-0.79688 -1,-0.79687 -1.2 8125,-2.35937 z m 18.69894,0.73437 0,-3.71875 -3.70312,0 0,-1.5625 3.70312,0 0,-3.70312 1.57813,0 0,3.70312 3.6875,0 0,1.5625 -3.6875,0 0,3.71875 -1.57813,0 z m 12.56262,5.98438 0,-13.64063 1.53125,0 0,1.28125 q 0.53125,-0.75 1.20313,-1.125 0.6875,-0.375 1.64062,-0.375 1.26563,0 2.23438,0.65625 0.96875,0.64063 1.45312,1.82813 0.5,1.1875 0.5,2.59375 0,1.51562 -0.54687,2.73437 -0.54688,1.20313 -1.57813,1.84375 -1.03125,0.64063 -2.17187,0.64063 -0.84375,0 -1.51563,-0.34375 -0.65625,-0.35938 -1.07812,-0.89063 l 0,4.79688 -1.67188,0 z m 1.51563,-8.65625 q 0,1.90625 0.76562,2.8125 0.78125,0.90625 1.875,0.90625 1.10938,0 1.89063,-0.9375 0.79687,-0.9375 0.79687,-2.92188 0,-1.875 -0.78125,-2.8125 -0.76562,-0.9375 -1.84375,-0.9375 -1.0625,0 -1.89062,1 -0.8125,1 -0.8125,2.89063 z m 15.29761,3.65625 q -0.9375,0.79687 -1.79688,1.125 -0.85937,0.3125 -1.84375,0.3125 -1.60937,0 -2.48437,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32812,-1.32813 0.32813,-0.59375 0.85938,-0.95312 0.53125,-0 .35938 1.20312,-0.54688 0.5,-0.14062 1.48438,-0.25 2.03125,-0.25 2.98437,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64062,-0.5625 -1.90625,-0.5625 -1.17187,0 -1.73437,0.40625 -0.5625,0.40625 -0.82813,1.46875 l -1.64062,-0.23438 q 0.23437,-1.04687 0.73437,-1.6875 0.51563,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26563,0 2.04688,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51562,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10938,0.60938 0.4375,1.17188 l -1.75,0 q -0.26562,-0.51563 -0.32812,-1.21875 z m -0.14063,-3.71875 q -0.90625,0.35937 -2.73437,0.625 -1.03125,0.14062 -1.45313,0.32812 -0.42187,0.1875 -0.65625,0.54688 -0.23437,0.35937 -0.23437,0.79687 0,0.67188 0.5,1.125 0.51562,0.4375 1.48437,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10938,-1.15625 0.26562,-0.57813 0.26562,-1.67188 l 0,-0.60937 z m 4.0007,8.73437 -0.17187,-1.5625 q 0.54687,0.14063 0.95312,0.14063 0.54688,0 0.875,-0.1875 0.34375,-0.18 75 0.5625,-0.51563 0.15625,-0.25 0.5,-1.25 0.0469,-0.14062 0.15625,-0.40625 l -3.73437,-9.875 1.79687,0 2.04688,5.71875 q 0.40625,1.07813 0.71875,2.28125 0.28125,-1.15625 0.6875,-2.25 l 2.09375,-5.75 1.67187,0 -3.75,10.03125 q -0.59375,1.625 -0.9375,2.23438 -0.4375,0.82812 -1.01562,1.20312 -0.57813,0.39063 -1.375,0.39063 -0.48438,0 -1.07813,-0.20313 z m 9.375,-3.79687 0,-13.59375 1.67188,0 0,13.59375 -1.67188,0 z m 3.55109,-4.92188 q 0,-2.73437 1.53125,-4.0625 1.26563,-1.09375 3.09375,-1.09375 2.03125,0 3.3125,1.34375 1.29688,1.32813 1.29688,3.67188 0,1.90625 -0.57813,3 -0.5625,1.07812 -1.65625,1.6875 -1.07812,0.59375 -2.375,0.59375 -2.0625,0 -3.34375,-1.32813 -1.28125,-1.32812 -1.28125,-3.8125 z m 1.71875,0 q 0,1.89063 0.82813,2.82813 0.82812,0.9375 2.07812,0.9375 1.25,0 2.0625,-0.9375 0.82813,-0.95313 0.82813,-2.89063 0,-1.82812 -0.82813,-2.76562 -0.82812,-0.9375 -2.0625,-0.9375 -1.25,0 -2.07812,0.9375 -0.82813,0.9375 -0.82813,2.82812 z m 15.71948,3.70313 q -0.9375,0.79687 -1.7968 7,1.125 -0.85938,0.3125 -1.84375,0.3125 -1.60938,0 -2.48438,-0.78125 -0.87503,-0.79688 -0.87503,-2.03125 0,-0.73438 0.32816,-1.32813 0.32812,-0.59375 0.85937,-0.95312 0.53125,-0.35938 1.20313,-0.54688 0.5,-0.14062 1.48437,-0.25 2.03125,-0.25 2.98438,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64063,-0.5625 -1.90625,-0.5625 -1.17188,0 -1.73438,0.40625 -0.5625,0.40625 -0.82812,1.46875 l -1.64063,-0.23438 q 0.23438,-1.04687 0.73438,-1.6875 0.51562,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26562,0 2.04687,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51563,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10937,0.60938 0.4375,1.17188 l -1.75,0 q -0.26563,-0.51563 -0.32813,-1.21875 z m -0.14062,-3.71875 q -0.90625,0.35937 -2.73438,0.625 -1.03125,0.14062 -1.45312,0.32812 -0.42188,0.1875 -0.65625,0.54688 -0.23438,0.35937 -0.23438,0.79687 0,0.67188 0.5,1.125 0.51563,0.4375 1.48438,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0 .4375 1.10937,-1.15625 0.26563,-0.57813 0.26563,-1.67188 l 0,-0.60937 z m 10.46942,4.9375 0,-1.25 q -0.9375,1.46875 -2.75,1.46875 -1.17188,0 -2.17188,-0.64063 -0.98437,-0.65625 -1.53125,-1.8125 -0.53125,-1.17187 -0.53125,-2.6875 0,-1.46875 0.48438,-2.67187 0.5,-1.20313 1.46875,-1.84375 0.98437,-0.64063 2.20312,-0.64063 0.89063,0 1.57813,0.375 0.70312,0.375 1.14062,0.98438 l 0,-4.875 1.65625,0 0,13.59375 -1.54687,0 z m -5.28125,-4.92188 q 0,1.89063 0.79687,2.82813 0.8125,0.9375 1.89063,0.9375 1.09375,0 1.85937,-0.89063 0.76563,-0.89062 0.76563,-2.73437 0,-2.01563 -0.78125,-2.95313 -0.78125,-0.95312 -1.92188,-0.95312 -1.10937,0 -1.85937,0.90625 -0.75,0.90625 -0.75,2.85937 z m 17.96527,2.71875 0,-3.71875 -3.70313,0 0,-1.5625 3.70313,0 0,-3.70312 1.57812,0 0,3.70312 3.6875,0 0,1.5625 -3.6875,0 0,3.71875 -1.57812,0 z m 16.21893,0.70313 0.23438,1.48437 q -0.70313,0.14063 -1.26563,0.14063 -0.90625,0 -1.40625,-0.28125 -0.5,-0.29688 -0.70312,-0.75 -0.20313,-0.46875 -0.20313,-1.98438 l 0,-5.6 5625 -1.23437,0 0,-1.3125 1.23437,0 0,-2.4375 1.65625,-1 0,3.4375 1.6875,0 0,1.3125 -1.6875,0 0,5.75 q 0,0.71875 0.0781,0.92188 0.0937,0.20312 0.29687,0.32812 0.20313,0.125 0.57813,0.125 0.26562,0 0.73437,-0.0781 z m 1.51142,1.5 0,-9.85938 1.5,0 0,1.5 q 0.57812,-1.04687 1.0625,-1.375 0.48437,-0.34375 1.07812,-0.34375 0.84375,0 1.71875,0.54688 l -0.57812,1.54687 q -0.60938,-0.35937 -1.23438,-0.35937 -0.54687,0 -0.98437,0.32812 -0.42188,0.32813 -0.60938,0.90625 -0.28125,0.89063 -0.28125,1.95313 l 0,5.15625 -1.67187,0 z m 12.66577,-1.21875 q -0.9375,0.79687 -1.79688,1.125 -0.85937,0.3125 -1.84375,0.3125 -1.60937,0 -2.48437,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32812,-1.32813 0.32813,-0.59375 0.85938,-0.95312 0.53125,-0.35938 1.20312,-0.54688 0.5,-0.14062 1.48438,-0.25 2.03125,-0.25 2.98437,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64062,-0.5625 -1.90625,-0.5625 -1.17187,0 -1.73437,0.40625 -0.5625,0.40625 -0.82813,1.46875 l -1.64062,-0.23438 q 0.23437, -1.04687 0.73437,-1.6875 0.51563,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26563,0 2.04688,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51562,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10938,0.60938 0.4375,1.17188 l -1.75,0 q -0.26562,-0.51563 -0.32812,-1.21875 z m -0.14063,-3.71875 q -0.90625,0.35937 -2.73437,0.625 -1.03125,0.14062 -1.45313,0.32812 -0.42187,0.1875 -0.65625,0.54688 -0.23437,0.35937 -0.23437,0.79687 0,0.67188 0.5,1.125 0.51562,0.4375 1.48437,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10938,-1.15625 0.26562,-0.57813 0.26562,-1.67188 l 0,-0.60937 z m 4.09448,-6.75 0,-1.90625 1.67188,0 0,1.90625 -1.67188,0 z m 0,11.6875 0,-9.85938 1.67188,0 0,9.85938 -1.67188,0 z m 4.09797,0 0,-13.59375 1.67187,0 0,13.59375 -1.67187,0 z m 10.92608,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.51562,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42188,-1.32813 -1.26562,-1.32812 -1.26562,-3.73437 0,-2.48438 1.26562,-3 .85938 1.28125,-1.375 3.32813,-1.375 1.98437,0 3.23437,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92187,2.48437 0.82813,0.85938 2.0625,0.85938 0.90625,0 1.54688,-0.46875 0.65625,-0.48438 1.04687,-1.54688 z m -5.48437,-2.70312 5.5,0 q -0.10938,-1.23438 -0.625,-1.85938 -0.79688,-0.96875 -2.07813,-0.96875 -1.14062,0 -1.9375,0.78125 -0.78125,0.76563 -0.85937,2.04688 z m 9.09442,5.875 0,-9.85938 1.5,0 0,1.5 q 0.57812,-1.04687 1.0625,-1.375 0.48437,-0.34375 1.07812,-0.34375 0.84375,0 1.71875,0.54688 l -0.57812,1.54687 q -0.60938,-0.35937 -1.23438,-0.35937 -0.54687,0 -0.98437,0.32812 -0.42188,0.32813 -0.60938,0.90625 -0.28125,0.89063 -0.28125,1.95313 l 0,5.15625 -1.67187,0 z m 5.55646,-2.9375 1.65625,-0.26563 q 0.14062,1 0.76562,1.53125 0.64063,0.51563 1.78125,0.51563 1.15625,0 1.70313,-0.46875 0.5625,-0.46875 0.5625,-1.09375 0,-0.5625 -0.48438,-0.89063 -0.34375,-0.21875 -1.70312,-0.5625 -1.84375,-0.46875 -2.5625,-0.79687 -0.70313,-0.34375 -1.0 7813,-0.9375 -0.35937,-0.60938 -0.35937,-1.32813 0,-0.65625 0.29687,-1.21875 0.3125,-0.5625 0.82813,-0.9375 0.39062,-0.28125 1.0625,-0.48437 0.67187,-0.20313 1.4375,-0.20313 1.17187,0 2.04687,0.34375 0.875,0.32813 1.28125,0.90625 0.42188,0.5625 0.57813,1.51563 l -1.625,0.21875 q -0.10938,-0.75 -0.65625,-1.17188 -0.53125,-0.4375 -1.5,-0.4375 -1.15625,0 -1.64063,0.39063 -0.48437,0.375 -0.48437,0.875 0,0.32812 0.20312,0.59375 0.20313,0.26562 0.64063,0.4375 0.25,0.0937 1.46875,0.4375 1.76562,0.46875 2.46875,0.76562 0.70312,0.29688 1.09375,0.875 0.40625,0.57813 0.40625,1.4375 0,0.82813 -0.48438,1.57813 -0.48437,0.73437 -1.40625,1.14062 -0.92187,0.39063 -2.07812,0.39063 -1.92188,0 -2.9375,-0.79688 -1,-0.79687 -1.28125,-2.35937 z m 11.09375,6.9375 -1.1875,0 q 2.76562,-4.45313 2.76562,-8.92188 0,-1.73437 -0.39062,-3.45312 -0.32813,-1.39063 -0.89063,-2.67188 -0.35937,-0.84375 -1.48437,-2.78125 l 1.1875,0 q 1.75,2.32813 2.57812,4.67188 0.71875,2.01562 0.71875,4.23437 0,2.5 -0.96875,4.84375 -0 .95312,2.32813 -2.32812,4.07813 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path37" d="m 85.343263,0 172.346467,0 0,28.50394 -172.346467,0 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path39" d="m 95.843263,21.17197 0,-13.59375 6.031247,0 q 1.8125,0 2.75,0.35937 0.95312,0.35938 1.51562,1.29688 0.5625,0.92187 0.5625,2.04687 0,1.45313 -0.9375,2.45313 -0.92187,0.98437 -2.89062,1.25 0.71875,0.34375 1.09375,0.67187 0.78125,0.73438 1.48437,1.8125 l 2.375,3.70313 -2.26562,0 -1.79688,-2.82813 q -0.79687,-1.21875 -1.3125,-1.875 -0.5,-0.65625 -0.90625,-0.90625 -0.40625,-0.26562 -0.8125,-0.35937 -0.3125,-0.0781 -1.015617,-0.0781 l -2.07812,0 0,6.04688 -1.79688,0 z m 1.79688,-7.59375 3.859367,0 q 1.23437,0 1.92187,-0.25 0.70313,-0.26563 1.0625,-0.82813 0.375,-0.5625 0.375,-1.21875 0,-0.96875 -0.70312,-1.57812 -0.70313,-0.625 -2.21875,-0.625 l -4.296867,0 0,4.5 z m 18.176057,4.42187 1.71875,0.21875 q -0.40625,1.5 -1.51562,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42188,-1.32813 -1.26562,-1.32812 -1.26562,-3.73437 0,-2.48438 1.26562,-3.85938 1.28125,-1.375 3.32813,-1.375 1.98437,0 3.23437,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92187,2.48437 0.82813,0.85938 2.0625,0.85938 0.90625,0 1.54688,-0.46875 0.65625,-0.48438 1.04687,-1.54688 z m -5.48437,-2.70312 5.5,0 q -0.10938,-1.23438 -0.625,-1.85938 -0.79688,-0.96875 -2.07813,-0.96875 -1.14062,0 -1.9375,0.78125 -0.78125,0.76563 -0.85937,2.04688 z m 9.51634,5.875 0,-8.54688 -1.48437,0 0,-1.3125 1.48437,0 0,-1.04687 q 0,-0.98438 0.17188,-1.46875 0.23437,-0.65625 0.84375,-1.04688 0.60937,-0.40625 1.70312,-0.40625 0.70313,0 1.5625,0.15625 l -0.25,1.46875 q -0.51562,-0.0937 -0.98437,-0.0937 -0.76563,0 -1.07813,0.32813 -0.3125,0.3125 -0.3125,1.20312 l 0,0.90625 1.92188,0 0,1.3125 -1.92188,0 0,8.54688 -1.65625,0 z m 11.52705,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.51562,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42188,-1.32813 -1.26562,-1.32812 -1.26562,-3.73437 0,-2.48438 1.26562,-3.85938 1.28125,-1.375 3.32813,-1.375 1.98437,0 3.23437,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92187,2.48437 0.82813,0.85938 2.0625,0.85938 0.90625,0 1.54688,-0.46875 0.65625,-0.48438 1.04687,-1.54688 z m -5.48437,-2.70312 5.5,0 q -0.10938,-1.23438 -0.625,-1.85938 -0.79688,-0.96875 -2.07813,-0.96875 -1.14062,0 -1.9375,0.78125 -0.78125,0.76563 -0.85937,2.04688 z m 9.09447,5.875 0,-9.85938 1.5,0 0,1.5 q 0.57812,-1.04687 1.0625,-1.375 0.48437,-0.34375 1.07812,-0.34375 0.84375,0 1.71875,0.54688 l -0.57812,1.54687 q -0.60938,-0.35937 -1.23438,-0.35937 -0.54687,0 -0.98437,0.32812 -0.42188,0.32813 -0.60938,0.90625 -0.28125,0.89063 -0.28125,1.95313 l 0,5.15625 -1.67187,0 z m 12.9783,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.51563,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42187,-1.32813 -1.26563,-1.32812 -1.26563,-3.73437 0,-2.48438 1.26563,-3.85938 1.28125,-1.375 3.32812,-1.375 1.98438,0 3.23438,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92188,2.48437 0.8281 2,0.85938 2.0625,0.85938 0.90625,0 1.54687,-0.46875 0.65625,-0.48438 1.04688,-1.54688 z m -5.48438,-2.70312 5.5,0 q -0.10937,-1.23438 -0.625,-1.85938 -0.79687,-0.96875 -2.07812,-0.96875 -1.14063,0 -1.9375,0.78125 -0.78125,0.76563 -0.85938,2.04688 z m 9.1101,5.875 0,-9.85938 1.5,0 0,1.40625 q 1.09375,-1.625 3.14062,-1.625 0.89063,0 1.64063,0.32813 0.75,0.3125 1.10937,0.84375 0.375,0.51562 0.53125,1.21875 0.0937,0.46875 0.0937,1.625 l 0,6.0625 -1.67187,0 0,-6 q 0,-1.01563 -0.20313,-1.51563 -0.1875,-0.51562 -0.6875,-0.8125 -0.5,-0.29687 -1.17187,-0.29687 -1.0625,0 -1.84375,0.67187 -0.76563,0.67188 -0.76563,2.57813 l 0,5.375 -1.67187,0 z m 16.81321,-3.60938 1.64063,0.21875 q -0.26563,1.6875 -1.375,2.65625 -1.10938,0.95313 -2.73438,0.95313 -2.01562,0 -3.25,-1.3125 -1.21875,-1.32813 -1.21875,-3.79688 0,-1.59375 0.51563,-2.78125 0.53125,-1.20312 1.60937,-1.79687 1.09375,-0.60938 2.35938,-0.60938 1.60937,0 2.625,0.8125 1.01562,0.8125 1.3125,2.3125 l -1.625,0.25 q -0.23438,-1 -0.82813,-1.5 - 0.59375,-0.5 -1.42187,-0.5 -1.26563,0 -2.0625,0.90625 -0.78125,0.90625 -0.78125,2.85938 0,1.98437 0.76562,2.89062 0.76563,0.89063 1.98438,0.89063 0.98437,0 1.64062,-0.59375 0.65625,-0.60938 0.84375,-1.85938 z m 9.64063,0.4375 1.71875,0.21875 q -0.40625,1.5 -1.51563,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42187,-1.32813 -1.26563,-1.32812 -1.26563,-3.73437 0,-2.48438 1.26563,-3.85938 1.28125,-1.375 3.32812,-1.375 1.98438,0 3.23438,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92188,2.48437 0.82812,0.85938 2.0625,0.85938 0.90625,0 1.54687,-0.46875 0.65625,-0.48438 1.04688,-1.54688 z m -5.48438,-2.70312 5.5,0 q -0.10937,-1.23438 -0.625,-1.85938 -0.79687,-0.96875 -2.07812,-0.96875 -1.14063,0 -1.9375,0.78125 -0.78125,0.76563 -0.85938,2.04688 z m 14.51215,5.875 0,-13.59375 5.125,0 q 1.35937,0 2.07812,0.125 1,0.17187 1.67188,0.64062 0.67187,0.46875 1.07812,1.3125 0.42188,0.84375 0.42188,1.84375 0,1.73438 -1.10938,2.9375 -1.09375,1.20 313 -3.98437,1.20313 l -3.48438,0 0,5.53125 -1.79687,0 z m 1.79687,-7.14063 3.51563,0 q 1.75,0 2.46875,-0.64062 0.73437,-0.65625 0.73437,-1.82813 0,-0.85937 -0.4375,-1.46875 -0.42187,-0.60937 -1.125,-0.79687 -0.45312,-0.125 -1.67187,-0.125 l -3.48438,0 0,4.85937 z m 16.86545,5.92188 q -0.9375,0.79687 -1.79687,1.125 -0.85938,0.3125 -1.84375,0.3125 -1.60938,0 -2.48438,-0.78125 -0.875,-0.79688 -0.875,-2.03125 0,-0.73438 0.32813,-1.32813 0.32812,-0.59375 0.85937,-0.95312 0.53125,-0.35938 1.20313,-0.54688 0.5,-0.14062 1.48437,-0.25 2.03125,-0.25 2.98438,-0.57812 0,-0.34375 0,-0.4375 0,-1.01563 -0.46875,-1.4375 -0.64063,-0.5625 -1.90625,-0.5625 -1.17188,0 -1.73438,0.40625 -0.5625,0.40625 -0.82812,1.46875 l -1.64063,-0.23438 q 0.23438,-1.04687 0.73438,-1.6875 0.51562,-0.64062 1.46875,-0.98437 0.96875,-0.35938 2.25,-0.35938 1.26562,0 2.04687,0.29688 0.78125,0.29687 1.15625,0.75 0.375,0.45312 0.51563,1.14062 0.0937,0.42188 0.0937,1.53125 l 0,2.23438 q 0,2.32812 0.0937,2.95312 0.10937,0.60938 0.4375,1.17188 l -1.75,0 q -0.26563,-0.51563 -0.32813,-1.21875 z m -0.14062,-3.71875 q -0.90625,0.35937 -2.73438,0.625 -1.03125,0.14062 -1.45312,0.32812 -0.42188,0.1875 -0.65625,0.54688 -0.23438,0.35937 -0.23438,0.79687 0,0.67188 0.5,1.125 0.51563,0.4375 1.48438,0.4375 0.96875,0 1.71875,-0.42187 0.75,-0.4375 1.10937,-1.15625 0.26563,-0.57813 0.26563,-1.67188 l 0,-0.60937 z m 10.51634,1.32812 1.64062,0.21875 q -0.26562,1.6875 -1.375,2.65625 -1.10937,0.95313 -2.73437,0.95313 -2.01563,0 -3.25,-1.3125 -1.21875,-1.32813 -1.21875,-3.79688 0,-1.59375 0.51562,-2.78125 0.53125,-1.20312 1.60938,-1.79687 1.09375,-0.60938 2.35937,-0.60938 1.60938,0 2.625,0.8125 1.01563,0.8125 1.3125,2.3125 l -1.625,0.25 q -0.23437,-1 -0.82812,-1.5 -0.59375,-0.5 -1.42188,-0.5 -1.26562,0 -2.0625,0.90625 -0.78125,0.90625 -0.78125,2.85938 0,1.98437 0.76563,2.89062 0.76562,0.89063 1.98437,0.89063 0.98438,0 1.64063,-0.59375 0.65625,-0.60938 0.84375,-1.85938 z m 2.90625,3.60938 0,-13.59375 1.67187,0 0,7.75 3.95313,-4 .01563 2.15626,0 -3.76564,3.65625 4.14064,6.20313 -2.06251,0 -3.25,-5.03125 -1.17188,1.125 0,3.90625 -1.67187,0 z m 16.06251,-3.17188 1.71875,0.21875 q -0.40625,1.5 -1.51562,2.34375 -1.09375,0.82813 -2.8125,0.82813 -2.15625,0 -3.42188,-1.32813 -1.26562,-1.32812 -1.26562,-3.73437 0,-2.48438 1.26562,-3.85938 1.28125,-1.375 3.32813,-1.375 1.98437,0 3.23437,1.34375 1.25,1.34375 1.25,3.79688 0,0.14062 -0.0156,0.4375 l -7.34375,0 q 0.0937,1.625 0.92187,2.48437 0.82813,0.85938 2.0625,0.85938 0.90625,0 1.54688,-0.46875 0.65625,-0.48438 1.04687,-1.54688 z m -5.48437,-2.70312 5.5,0 q -0.10938,-1.23438 -0.625,-1.85938 -0.79688,-0.96875 -2.07813,-0.96875 -1.14062,0 -1.9375,0.78125 -0.78125,0.76563 -0.85937,2.04688 z m 12.76633,4.375 0.23437,1.48437 q -0.70312,0.14063 -1.26562,0.14063 -0.90625,0 -1.40625,-0.28125 -0.5,-0.29688 -0.70313,-0.75 -0.20312,-0.46875 -0.20312,-1.98438 l 0,-5.65625 -1.23438,0 0,-1.3125 1.23438,0 0,-2.4375 1.65625,-1 0,3.4375 1.6875,0 0,1.3125 -1.6875,0 0,5.75 q 0,0.71875 0.0781,0.92188 0.0937,0.20312 0.29688,0.32812 0.20312,0.125 0.57812,0.125 0.26563,0 0.73438,-0.0781 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path41" d="m 134.49812,27.32282 32.28346,34.17325"/> - <path style="fill-rule:evenodd;stroke:#595959;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round" inkscape:connector-curvature="0" id="path43" d="m 134.49812,27.32282 28.16315,29.81174"/> - <path style="fill:#595959;fill-rule:evenodd;stroke:#595959;stroke-width:1;stroke-linecap:butt" inkscape:connector-curvature="0" id="path45" d="m 161.46058,58.26883 4.31709,2.16455 -1.91574,-4.43314 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path47" d="m 165.9199,145.17847 0,0 c 0,4.72269 0.63806,8.55118 1.42514,8.55118 l 145.48018,0 c 0.78708,0 1.42514,3.82849 1.42514,8.55118 l 0,0 c 0,-4.72269 0.63806,-8.55118 1.42514,-8.55118 l 145.89014,0 c 0.78708,0 1.42514,-3.82849 1.42514,-8.55118 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path49" d="m 165.9199,145.17847 0,0 c 0,4.72269 0.63806,8.55118 1.42514,8.55118 l 145.48018,0 c 0.78708,0 1.42514,3.82849 1.42514,8.55118 l 0,0 c 0,-4.72269 0.63806,-8.55118 1.42514,-8.55118 l 145.89014,0 c 0.78708,0 1.42514,-3.82849 1.42514,-8.55118"/> - <path style="fill-rule:nonzero;stroke:#595959;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round" inkscape:connector-curvature="0" id="path51" d="m 165.9199,145.17847 0,0 c 0,4.72269 0.63806,8.55118 1.42514,8.55118 l 145.48018,0 c 0.78708,0 1.42514,3.82849 1.42514,8.55118 l 0,0 c 0,-4.72269 0.63806,-8.55118 1.42514,-8.55118 l 145.89014,0 c 0.78708,0 1.42514,-3.82849 1.42514,-8.55118"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path53" d="m 157.93869,157.62497 314.3622,0 0,25.63782 -314.3622,0 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path55" d="m 182.6591,173.3639 q 0,1.78125 -1.28125,3.04687 -1.28125,1.26563 -3.07813,1.26563 -1.8125,0 -3.09375,-1.26563 -1.26562,-1.28125 -1.26562,-3.04687 0,-1.78125 1.26562,-3.04688 1.28125,-1.26562 3.09375,-1.26562 1.79688,0 3.07813,1.26562 1.28125,1.25 1.28125,3.04688 z m -0.79688,0 q 0,-1.46875 -1.04687,-2.5 -1.03125,-1.03125 -2.51563,-1.03125 -1.48437,0 -2.53125,1.04687 -1.04687,1.03125 -1.04687,2.48438 0,1.45312 1.04687,2.5 1.04688,1.03125 2.53125,1.03125 1.48438,0 2.51563,-1.03125 1.04687,-1.04688 1.04687,-2.5 z m 11.65186,-7.64063 0,10.85938 1.04687,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -1.82812,0 0,-1.54688 q -1.35938,1.85938 -3.45313,1.85938 -1.04687,0 -2.01562,-0.5625 -0.96875,-0.5625 -1.53125,-1.59375 -0.5625,-1.04688 -0.5625,-2.15625 0,-1.10938 0.5625,-2.14063 0.5625,-1.04687 1.53125,-1.60937 0.96875,-0.562 5 2.03125,-0.5625 2.04687,0 3.4375,1.85937 l 0,-4.40625 -1.04688,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.125,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.82813,0 z m -0.78125,7.64063 q 0,-1.48438 -1.01563,-2.5 -1,-1.03125 -2.375,-1.03125 -1.39062,0 -2.39062,1.03125 -1,1.01562 -1,2.5 0,1.46875 1,2.5 1,1.03125 2.39062,1.03125 1.375,0 2.375,-1.03125 1.01563,-1.03125 1.01563,-2.5 z m 5.43311,-4.03125 0,1.42187 q 0.6875,-0.84375 1.48437,-1.26562 0.8125,-0.4375 1.89063,-0.4375 1.15625,0 2.125,0.54687 0.96875,0.53125 1.5,1.5 0.54687,0.95313 0.54687,2 0,1.6875 -1.20312,2.89063 -1.20313,1.1875 -2.95313,1.1875 -2.09375,0 -3.39062,-1.70313 l 0,4.6875 1.89062,0 q 0.28125,0 0.39063,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.39063,0.10937 l -3.71875,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.0937 -0.10937,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.04688,0 0,-10.04687 -1.04688,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.82813,0 z m 6.75,3.76562 q 0,-1.34375 -0.98438,-2.29687 -0.96875,-0.96875 -2.375,-0.96875 -1.42187,0 -2.40625,0.96875 -0.98437,0.96875 -0.98437,2.29687 0,1.35938 0.98437,2.32813 0.98438,0.95312 2.40625,0.95312 1.39063,0 2.375,-0.95312 0.98438,-0.96875 0.98438,-2.32813 z m 12.76123,9.46875 -10.35938,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.10938 -0.10937,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 10.35938,0 q 0.29687,0 0.40625,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.40625,0.10937 z m 3.29248,-13.23437 0,1.42187 q 0.6875,-0.84375 1.48437,-1.26562 0.8125,-0.4375 1.89063,-0.4375 1.15625,0 2.125,0.54687 0.96873,0.53125 1.49998,1.5 0.54688,0.95313 0.54688,2 0,1.6875 -1.20313,2.89063 -1.20311,1.1875 -2.95311,1.1875 -2.09375,0 -3.39062,-1.70313 l 0,4.6875 1.89062,0 q 0.28125,0 0.39063,0.10938 0.125,0.1 0937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.39063,0.10937 l -3.71875,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.0937 -0.10937,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.04688,0 0,-10.04687 -1.04688,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.82813,0 z m 6.74998,3.76562 q 0,-1.34375 -0.98437,-2.29687 -0.96874,-0.96875 -2.37499,-0.96875 -1.42187,0 -2.40625,0.96875 -0.98437,0.96875 -0.98437,2.29687 0,1.35938 0.98437,2.32813 0.98438,0.95312 2.40625,0.95312 1.39063,0 2.37499,-0.95312 0.98437,-0.96875 0.98437,-2.32813 z m 9.82373,4.26563 0,-1.125 q -1.6875,1.4375 -3.625,1.4375 -1.40625,0 -2.1875,-0.70313 -0.78125,-0.71875 -0.78125,-1.75 0,-1.14062 1.03125,-1.98437 1.04688,-0.84375 3.03125,-0.84375 0.54688,0 1.17188,0.0781 0.625,0.0625 1.35937,0.21875 l 0,-1.26562 q 0,-0.64063 -0.59375,-1.10938 -0.59375,-0.48437 -1.78125,-0.48437 -0.90625,0 -2.54687,0 .53125 -0.29688,0.0937 -0.375,0.0937 -0.15625,0 -0.26563,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.15625 0.0937,-0.25 0.14062,-0.14062 1.0625,-0.375 1.4375,-0.39062 2.1875,-0.39062 1.46875,0 2.29687,0.73437 0.82813,0.71875 0.82813,1.64063 l 0,5.15625 1.03125,0 q 0.29687,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10938,0.10938 -0.40625,0.10938 l -1.82813,0 z m 0,-3.875 q -0.54687,-0.15625 -1.15625,-0.23438 -0.60937,-0.0781 -1.28125,-0.0781 -1.70312,0 -2.65625,0.73437 -0.73437,0.54688 -0.73437,1.3125 0,0.70313 0.54687,1.1875 0.5625,0.48438 1.625,0.48438 1,0 1.85938,-0.40625 0.875,-0.40625 1.79687,-1.28125 l 0,-1.71875 z m 12.41748,-3.375 0,-0.25 q 0,-0.29688 0.10938,-0.40625 0.10937,-0.125 0.28125,-0.125 0.17187,0 0.28125,0.125 0.10937,0.10937 0.10937,0.40625 l 0,1.75 q 0,0.29687 -0.10937,0.42187 -0.10938,0.10938 -0.28125,0.10938 -0.15625,0 -0.26563,-0.0937 -0.10937,-0.10938 -0.125,-0.35938 -0.0625,-0.67187 -0.875,-1.26562 -0.79687,-0.59375 -2.17 187,-0.59375 -1.73438,0 -2.64063,1.09375 -0.90625,1.07812 -0.90625,2.48437 0,1.51563 0.98438,2.5 1,0.98438 2.57812,0.98438 0.92188,0 1.85938,-0.32813 0.9375,-0.34375 1.70312,-1.09375 0.1875,-0.17187 0.34375,-0.17187 0.15625,0 0.26563,0.10937 0.10937,0.0937 0.10937,0.25 0,0.40625 -0.9375,1.01563 -1.51562,1 -3.375,1 -1.875,0 -3.09375,-1.20313 -1.20312,-1.20312 -1.20312,-3.04687 0,-1.89063 1.23437,-3.125 1.23438,-1.25 3.125,-1.25 1.78125,0 3,1.0625 z m 6.57373,3.78125 0,3.46875 -1.82812,0 q -0.28125,0 -0.40625,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.04687,0 0,-10.07813 -1.04687,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.125,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.82812,0 0,7.17188 3.3125,-2.78125 -0.40625,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 2.5,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.1 25,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -0.90625,0 -3.04687,2.54687 3.85937,3.92188 0.89063,0 q 0.29687,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10938,0.10938 -0.40625,0.10938 l -2.51563,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 0.54688,0 -3.34375,-3.4375 -0.89063,0.75 z m 17.19873,-0.35938 -7.95312,0 q 0.21875,1.51563 1.28125,2.4375 1.0625,0.92188 2.625,0.92188 0.875,0 1.82812,-0.28125 0.95313,-0.29688 1.5625,-0.76563 0.17188,-0.14062 0.29688,-0.14062 0.15625,0 0.26562,0.125 0.10938,0.10937 0.10938,0.26562 0,0.15625 -0.15625,0.29688 -0.4375,0.46875 -1.57813,0.875 -1.14062,0.40625 -2.32812,0.40625 -2,0 -3.34375,-1.3125 -1.34375,-1.3125 -1.34375,-3.1875 0,-1.6875 1.25,-2.90625 1.26562,-1.21875 3.125,-1.21875 1.90625,0 3.14062,1.25 1.23438,1.25 1.21875,3.23437 z m -0.79687,-0.79687 q -0.23438,-1.28125 -1.21875,-2.09375 -0.98438,-0.8125 -2.34375,-0.8125 -1.375,0 -2.35938,0.8125 -0.96875,0.79687 -1.21875,2.09375 l 7.14063,0 z m 6.3706,-3.40625 4.23438,0 q 0.28125,0 0.39062,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.39062,0.10938 l -4.23438,0 0,5.1875 q 0,0.6875 0.54688,1.14062 0.54687,0.45313 1.59375,0.45313 0.78125,0 1.70312,-0.23438 0.92188,-0.25 1.4375,-0.54687 0.1875,-0.10938 0.29688,-0.10938 0.15625,0 0.26562,0.125 0.10938,0.10938 0.10938,0.26563 0,0.14062 -0.125,0.25 -0.29688,0.3125 -1.4375,0.67187 -1.14063,0.35938 -2.1875,0.35938 -1.375,0 -2.1875,-0.64063 -0.79688,-0.64062 -0.79688,-1.73437 l 0,-5.1875 -1.4375,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.4375,0 0,-2.29688 q 0,-0.28125 0.10938,-0.40625 0.10937,-0.125 0.28125,-0.125 0.17187,0 0.28125,0.125 0.10937,0.125 0.10937,0.40625 l 0,2.29688 z m 18.18311,13.23437 -10.35938,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.10938 -0.1093 7,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 10.35938,0 q 0.29687,0 0.40625,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.40625,0.10937 z m 8.90185,-5.20312 0,-1.14063 q -1.60937,1.45313 -3.45312,1.45313 -1.14063,0 -1.73438,-0.625 -0.78125,-0.8125 -0.78125,-1.90625 l 0,-5.03125 -1.04687,0 q -0.28125,0 -0.40625,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.82812,0 0,5.8125 q 0,0.76562 0.48438,1.26562 0.48437,0.48438 1.20312,0.48438 1.90625,0 3.5,-1.75 l 0,-5.03125 -1.4375,0 q -0.28125,0 -0.40625,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 2.20313,0 0,7.25 0.67187,0 q 0.26563,0 0.39063,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.39063,0.10938 l -1.4375,0 z m 6.21436,-8.03125 0,1.17187 q 0.8125,-0.82812 1.46875,-1.14062 0.65625,-0.3125 1.48437,-0.3125 0.89063,0 1.625,0.37 5 0.51563,0.28125 0.9375,0.9375 0.42188,0.64062 0.42188,1.3125 l 0,4.90625 0.65625,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -2.07813,0 q -0.29687,0 -0.42187,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.42187,-0.10937 l 0.64063,0 0,-4.78125 q 0,-0.82813 -0.60938,-1.39063 -0.59375,-0.57812 -1.60937,-0.57812 -0.76563,0 -1.32813,0.3125 -0.5625,0.3125 -1.60937,1.54687 l 0,4.89063 0.875,0 q 0.28125,0 0.39062,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.39062,0.10938 l -2.54688,0 q -0.26562,0 -0.39062,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.39062,-0.10937 l 0.89063,0 0,-6.46875 -0.65625,0 q -0.28125,0 -0.40625,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.4375,0 z m 16.4956,0.5 q 0,-0.26563 0.10938,-0.375 0.10937,-0.125 0.28125,-0.125 0 .17187,0 0.28125,0.125 0.10937,0.10937 0.10937,0.40625 l 0,1.32812 q 0,0.28125 -0.10937,0.40625 -0.10938,0.10938 -0.28125,0.10938 -0.17188,0 -0.28125,-0.0937 -0.0937,-0.10938 -0.10938,-0.34375 -0.0625,-0.54688 -0.57812,-0.90625 -0.76563,-0.53125 -2.01563,-0.53125 -1.3125,0 -2.03125,0.53125 -0.54687,0.40625 -0.54687,0.89062 0,0.5625 0.64062,0.9375 0.45313,0.25 1.70313,0.39063 1.60937,0.17187 2.25,0.40625 0.89062,0.32812 1.32812,0.90625 0.45313,0.5625 0.45313,1.23437 0,0.98438 -0.95313,1.76563 -0.95312,0.78125 -2.8125,0.78125 -1.84375,0 -3.01562,-0.9375 0,0.3125 -0.0469,0.40625 -0.0312,0.0937 -0.125,0.15625 -0.0937,0.0625 -0.21875,0.0625 -0.17187,0 -0.28125,-0.10938 -0.10937,-0.125 -0.10937,-0.40625 l 0,-1.60937 q 0,-0.28125 0.10937,-0.39063 0.10938,-0.125 0.28125,-0.125 0.17188,0 0.28125,0.125 0.10938,0.10938 0.10938,0.29688 0,0.42187 0.21875,0.71875 0.32812,0.4375 1.03125,0.73437 0.71875,0.29688 1.75,0.29688 1.51562,0 2.25,-0.5625 0.75,-0.57813 0.75,-1.20313 0,-0.71875 -0.75,-1.1562 5 -0.76563,-0.4375 -2.21875,-0.57812 -1.45313,-0.15625 -2.07813,-0.39063 -0.625,-0.25 -0.98437,-0.73437 -0.35938,-0.48438 -0.35938,-1.03125 0,-1.01563 0.98438,-1.59375 0.98437,-0.59375 2.35937,-0.59375 1.60938,0 2.625,0.78125 z m 6.26123,-4.10938 0,4.79688 q 0.73438,-0.8125 1.40625,-1.14063 0.6875,-0.32812 1.54688,-0.32812 0.90625,0 1.53125,0.32812 0.64062,0.3125 1.0625,0.98438 0.4375,0.65625 0.4375,1.39062 l 0,4.82813 0.85937,0 q 0.29688,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.40625,0.10938 l -2.53125,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 0.875,0 0,-4.78125 q 0,-0.84375 -0.60937,-1.40625 -0.60938,-0.5625 -1.6875,-0.5625 -0.85938,0 -1.45313,0.42187 -0.4375,0.29688 -1.4375,1.39063 l 0,4.9375 0.875,0 q 0.28125,0 0.39063,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10938,0.10938 -0.39063,0.10938 l -2.54687,0 q -0.26563,0 -0.3 9063,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.39063,-0.10937 l 0.89062,0 0,-10.07813 -1.04687,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.125,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.82812,0 z m 16.19873,11.64063 0,-1.125 q -1.6875,1.4375 -3.625,1.4375 -1.40625,0 -2.1875,-0.70313 -0.78125,-0.71875 -0.78125,-1.75 0,-1.14062 1.03125,-1.98437 1.04688,-0.84375 3.03125,-0.84375 0.54688,0 1.17188,0.0781 0.625,0.0625 1.35937,0.21875 l 0,-1.26562 q 0,-0.64063 -0.59375,-1.10938 -0.59375,-0.48437 -1.78125,-0.48437 -0.90625,0 -2.54687,0.53125 -0.29688,0.0937 -0.375,0.0937 -0.15625,0 -0.26563,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.15625 0.0937,-0.25 0.14062,-0.14062 1.0625,-0.375 1.4375,-0.39062 2.1875,-0.39062 1.46875,0 2.29687,0.73437 0.82813,0.71875 0.82813,1.64063 l 0,5.15625 1.03125,0 q 0.29687,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10938,0.10938 -0.40625,0.10938 l -1.82813,0 z m 0,-3.875 q -0.54687,-0.15625 -1.15625,-0.23438 -0.60937,-0.0781 -1.28125,-0.0781 -1.70312,0 -2.65625,0.73437 -0.73437,0.54688 -0.73437,1.3125 0,0.70313 0.54687,1.1875 0.5625,0.48438 1.625,0.48438 1,0 1.85938,-0.40625 0.875,-0.40625 1.79687,-1.28125 l 0,-1.71875 z m 8.22998,-4.15625 0,1.96875 q 1.53125,-1.375 2.28125,-1.76563 0.75,-0.40625 1.39063,-0.40625 0.70312,0 1.29687,0.46875 0.59375,0.46875 0.59375,0.71875 0,0.17188 -0.10937,0.29688 -0.10938,0.10937 -0.29688,0.10937 -0.0937,0 -0.15625,-0.0312 -0.0625,-0.0312 -0.23437,-0.21875 -0.32813,-0.3125 -0.57813,-0.4375 -0.23437,-0.125 -0.46875,-0.125 -0.5,0 -1.21875,0.40625 -0.71875,0.40625 -2.5,2 l 0,4.26563 3.45313,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -6.10938,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.26562 0,-0.15625 0.10937,-0.26563 0.10938,-0.10937 0.40625,-0.10937 l 1.875,0 0,-6.5 -1.4375,0 q -0.28125,0 -0.40625,-0. 10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 2.21875,0 z m 16.55811,4.20312 -7.95313,0 q 0.21875,1.51563 1.28125,2.4375 1.0625,0.92188 2.625,0.92188 0.875,0 1.82813,-0.28125 0.95312,-0.29688 1.5625,-0.76563 0.17187,-0.14062 0.29687,-0.14062 0.15625,0 0.26563,0.125 0.10937,0.10937 0.10937,0.26562 0,0.15625 -0.15625,0.29688 -0.4375,0.46875 -1.57812,0.875 -1.14063,0.40625 -2.32813,0.40625 -2,0 -3.34375,-1.3125 -1.34375,-1.3125 -1.34375,-3.1875 0,-1.6875 1.25,-2.90625 1.26563,-1.21875 3.125,-1.21875 1.90625,0 3.14063,1.25 1.23437,1.25 1.21875,3.23437 z m -0.79688,-0.79687 q -0.23437,-1.28125 -1.21875,-2.09375 -0.98437,-0.8125 -2.34375,-0.8125 -1.375,0 -2.35937,0.8125 -0.96875,0.79687 -1.21875,2.09375 l 7.14062,0 z m 11.79248,-7.01563 0,10.85938 1.04688,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -1.82813,0 0,-1.54688 q -1.35937,1.85938 -3.45312,1.85938 -1.0 4688,0 -2.01563,-0.5625 -0.96875,-0.5625 -1.53125,-1.59375 -0.5625,-1.04688 -0.5625,-2.15625 0,-1.10938 0.5625,-2.14063 0.5625,-1.04687 1.53125,-1.60937 0.96875,-0.5625 2.03125,-0.5625 2.04688,0 3.4375,1.85937 l 0,-4.40625 -1.04687,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.125,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.82812,0 z m -0.78125,7.64063 q 0,-1.48438 -1.01562,-2.5 -1,-1.03125 -2.375,-1.03125 -1.39063,0 -2.39063,1.03125 -1,1.01562 -1,2.5 0,1.46875 1,2.5 1,1.03125 2.39063,1.03125 1.375,0 2.375,-1.03125 1.01562,-1.03125 1.01562,-2.5 z m 13.54248,9.20312 -10.35937,0 q -0.28125,0 -0.40625,-0.10937 -0.10938,-0.10938 -0.10938,-0.28125 0,-0.17188 0.10938,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 10.35937,0 q 0.29688,0 0.40625,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10937,0.10937 -0.40625,0.10937 z m 6.62061,-16.84375 0,10.85938 3.0625,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0 .125,0.10938 -0.40625,0.10938 l -6.90625,0 q -0.28125,0 -0.40625,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 3.0625,0 0,-10.07813 -2.23438,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.10938,-0.28125 0.125,-0.10938 0.42187,-0.10938 l 3.01563,0 z m 15.22998,7.8125 -7.95313,0 q 0.21875,1.51563 1.28125,2.4375 1.0625,0.92188 2.625,0.92188 0.875,0 1.82813,-0.28125 0.95312,-0.29688 1.5625,-0.76563 0.17187,-0.14062 0.29687,-0.14062 0.15625,0 0.26563,0.125 0.10937,0.10937 0.10937,0.26562 0,0.15625 -0.15625,0.29688 -0.4375,0.46875 -1.57812,0.875 -1.14063,0.40625 -2.32813,0.40625 -2,0 -3.34375,-1.3125 -1.34375,-1.3125 -1.34375,-3.1875 0,-1.6875 1.25,-2.90625 1.26563,-1.21875 3.125,-1.21875 1.90625,0 3.14063,1.25 1.23437,1.25 1.21875,3.23437 z m -0.79688,-0.79687 q -0.23437,-1.28125 -1.21875,-2.09375 -0.98437,-0.8125 -2.34375,-0.8125 -1.375,0 -2.35937,0.8125 -0.96875,0.79687 -1.21875,2.09375 l 7.1406 2,0 z m 5.46436,-3.40625 0,1.17187 q 0.8125,-0.82812 1.46875,-1.14062 0.65625,-0.3125 1.48437,-0.3125 0.89063,0 1.625,0.375 0.51563,0.28125 0.9375,0.9375 0.42188,0.64062 0.42188,1.3125 l 0,4.90625 0.65625,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -2.07813,0 q -0.29687,0 -0.42187,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.42187,-0.10937 l 0.64063,0 0,-4.78125 q 0,-0.82813 -0.60938,-1.39063 -0.59375,-0.57812 -1.60937,-0.57812 -0.76563,0 -1.32813,0.3125 -0.5625,0.3125 -1.60937,1.54687 l 0,4.89063 0.875,0 q 0.28125,0 0.39062,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.39062,0.10938 l -2.54688,0 q -0.26562,0 -0.39062,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.39062,-0.10937 l 0.89063,0 0,-6.46875 -0.65625,0 q -0.28125,0 -0.40625,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28 125 0.125,-0.10937 0.40625,-0.10937 l 1.4375,0 z m 13.82373,3.40625 q 0,-1.0625 0.28125,-2.25 0.28125,-1.20313 1.0625,-2.76563 0.79687,-1.57812 1.15625,-1.90625 0.10937,-0.0937 0.23437,-0.0937 0.17188,0 0.28125,0.10938 0.125,0.10937 0.125,0.26562 0,0.0937 -0.0625,0.20313 -1.03125,1.875 -1.46875,3.40625 -0.42187,1.51562 -0.42187,3.03125 0,1.53125 0.42187,3.0625 0.4375,1.51562 1.46875,3.375 0.0625,0.125 0.0625,0.20312 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.28125,0.10938 -0.125,0 -0.23437,-0.0937 -0.34375,-0.3125 -1.125,-1.84375 -0.78125,-1.53125 -1.07813,-2.70313 -0.29687,-1.1875 -0.29687,-2.39062 z m 11.71435,0.0156 q 0,1.0625 -0.28125,2.26563 -0.26562,1.1875 -1.0625,2.75 -0.78125,1.57812 -1.14062,1.89062 -0.10938,0.10938 -0.25,0.10938 -0.15625,0 -0.28125,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.0781 0.0625,-0.20312 1.01563,-1.85938 1.45313,-3.375 0.4375,-1.53125 0.4375,-3.04688 0,-1.53125 -0.4375,-3.04687 -0.4375,-1.53125 -1.45313,-3.40625 -0.0625,-0.10938 -0.0625,-0. 20313 0,-0.15625 0.10938,-0.26562 0.125,-0.10938 0.28125,-0.10938 0.14062,0 0.25,0.0937 0.34375,0.32813 1.10937,1.85938 0.78125,1.51562 1.07813,2.70312 0.29687,1.17188 0.29687,2.375 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path57" d="m 169.91769,54.48294 0,0 c 0,-5.24454 0.70856,-9.49606 1.58261,-9.49606 l 300.22058,0 c 0.87406,0 1.58264,-4.25153 1.58264,-9.49607 l 0,0 c 0,5.24454 0.70856,9.49607 1.58261,9.49607 l 300.2206,0 c 0.87403,0 1.58258,4.25152 1.58258,9.49606 z"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path59" d="m 169.91769,54.48294 0,0 c 0,-5.24454 0.70856,-9.49606 1.58261,-9.49606 l 300.22058,0 c 0.87406,0 1.58264,-4.25153 1.58264,-9.49607 l 0,0 c 0,5.24454 0.70856,9.49607 1.58261,9.49607 l 300.2206,0 c 0.87403,0 1.58258,4.25152 1.58258,9.49606"/> - <path style="fill-rule:nonzero;stroke:#595959;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round" inkscape:connector-curvature="0" id="path61" d="m 169.91769,54.48294 0,0 c 0,-5.24454 0.70856,-9.49606 1.58261,-9.49606 l 300.22058,0 c 0.87406,0 1.58264,-4.25153 1.58264,-9.49607 l 0,0 c 0,5.24454 0.70856,9.49607 1.58261,9.49607 l 300.2206,0 c 0.87403,0 1.58258,4.25152 1.58258,9.49606"/> - <path style="fill:#000000;fill-opacity:0;fill-rule:nonzero" inkscape:connector-curvature="0" id="path63" d="m 374.07254,0 202.26773,0 0,28.50394 -202.26773,0 z"/> - <path style="fill:#000000;fill-rule:nonzero" inkscape:connector-curvature="0" id="path65" d="m 393.13504,17.17197 q 0,1.78125 -1.28125,3.04687 -1.28125,1.26563 -3.07812,1.26563 -1.8125,0 -3.09375,-1.26563 -1.26563,-1.28125 -1.26563,-3.04687 0,-1.78125 1.26563,-3.04688 1.28125,-1.26562 3.09375,-1.26562 1.79687,0 3.07812,1.26562 1.28125,1.25 1.28125,3.04688 z m -0.79687,0 q 0,-1.46875 -1.04688,-2.5 -1.03125,-1.03125 -2.51562,-1.03125 -1.48438,0 -2.53125,1.04687 -1.04688,1.03125 -1.04688,2.48438 0,1.45312 1.04688,2.5 1.04687,1.03125 2.53125,1.03125 1.48437,0 2.51562,-1.03125 1.04688,-1.04688 1.04688,-2.5 z m 11.65185,-7.64063 0,10.85938 1.04688,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -1.82813,0 0,-1.54688 q -1.35937,1.85938 -3.45312,1.85938 -1.04688,0 -2.01563,-0.5625 -0.96875,-0.5625 -1.53125,-1.59375 -0.5625,-1.04688 -0.5625,-2.15625 0,-1.10938 0.5625,-2.14063 0.5625,-1.04687 1.53125,-1.60937 0.96875,-0.56 25 2.03125,-0.5625 2.04688,0 3.4375,1.85937 l 0,-4.40625 -1.04687,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.125,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.82812,0 z m -0.78125,7.64063 q 0,-1.48438 -1.01562,-2.5 -1,-1.03125 -2.375,-1.03125 -1.39063,0 -2.39063,1.03125 -1,1.01562 -1,2.5 0,1.46875 1,2.5 1,1.03125 2.39063,1.03125 1.375,0 2.375,-1.03125 1.01562,-1.03125 1.01562,-2.5 z m 5.43311,-4.03125 0,1.42187 q 0.6875,-0.84375 1.48437,-1.26562 0.8125,-0.4375 1.89063,-0.4375 1.15625,0 2.125,0.54687 0.96875,0.53125 1.5,1.5 0.54687,0.95313 0.54687,2 0,1.6875 -1.20312,2.89063 -1.20313,1.1875 -2.95313,1.1875 -2.09375,0 -3.39062,-1.70313 l 0,4.6875 1.89062,0 q 0.28125,0 0.39063,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.39063,0.10937 l -3.71875,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.0937 -0.10937,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.04688,0 0,-10.04687 -1.04688,0 q -0.28125, 0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.82813,0 z m 6.75,3.76562 q 0,-1.34375 -0.98438,-2.29687 -0.96875,-0.96875 -2.375,-0.96875 -1.42187,0 -2.40625,0.96875 -0.98437,0.96875 -0.98437,2.29687 0,1.35938 0.98437,2.32813 0.98438,0.95312 2.40625,0.95312 1.39063,0 2.375,-0.95312 0.98438,-0.96875 0.98438,-2.32813 z m 12.76123,9.46875 -10.35938,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.10938 -0.10937,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 10.35938,0 q 0.29687,0 0.40625,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.40625,0.10937 z m 3.29248,-13.23437 0,1.42187 q 0.6875,-0.84375 1.48437,-1.26562 0.8125,-0.4375 1.89063,-0.4375 1.15625,0 2.125,0.54687 0.96875,0.53125 1.5,1.5 0.54687,0.95313 0.54687,2 0,1.6875 -1.20312,2.89063 -1.20313,1.1875 -2.95313,1.1875 -2.09375,0 -3.39062,-1.70313 l 0,4.6875 1.89062,0 q 0.28125,0 0.39063,0.10938 0.125,0.1093 7 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10938,0.10937 -0.39063,0.10937 l -3.71875,0 q -0.28125,0 -0.40625,-0.10937 -0.10937,-0.0937 -0.10937,-0.28125 0,-0.17188 0.10937,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.04688,0 0,-10.04687 -1.04688,0 q -0.28125,0 -0.40625,-0.10938 -0.10937,-0.10937 -0.10937,-0.28125 0,-0.17187 0.10937,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.82813,0 z m 6.75,3.76562 q 0,-1.34375 -0.98438,-2.29687 -0.96875,-0.96875 -2.375,-0.96875 -1.42187,0 -2.40625,0.96875 -0.98437,0.96875 -0.98437,2.29687 0,1.35938 0.98437,2.32813 0.98438,0.95312 2.40625,0.95312 1.39063,0 2.375,-0.95312 0.98438,-0.96875 0.98438,-2.32813 z m 9.82373,4.26563 0,-1.125 q -1.6875,1.4375 -3.625,1.4375 -1.40625,0 -2.1875,-0.70313 -0.78125,-0.71875 -0.78125,-1.75 0,-1.14062 1.03125,-1.98437 1.04687,-0.84375 3.03125,-0.84375 0.54687,0 1.17187,0.0781 0.625,0.0625 1.35938,0.21875 l 0,-1.26562 q 0,-0.64063 -0.59375,-1.10938 -0.59375,-0.48437 -1.78125,-0.48437 -0.90625,0 -2.54688,0.53125 -0. 29687,0.0937 -0.375,0.0937 -0.15625,0 -0.26562,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.15625 0.0937,-0.25 0.14063,-0.14062 1.0625,-0.375 1.4375,-0.39062 2.1875,-0.39062 1.46875,0 2.29688,0.73437 0.82812,0.71875 0.82812,1.64063 l 0,5.15625 1.03125,0 q 0.29688,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.40625,0.10938 l -1.82812,0 z m 0,-3.875 q -0.54688,-0.15625 -1.15625,-0.23438 -0.60938,-0.0781 -1.28125,-0.0781 -1.70313,0 -2.65625,0.73437 -0.73438,0.54688 -0.73438,1.3125 0,0.70313 0.54688,1.1875 0.5625,0.48438 1.625,0.48438 1,0 1.85937,-0.40625 0.875,-0.40625 1.79688,-1.28125 l 0,-1.71875 z m 12.41748,-3.375 0,-0.25 q 0,-0.29688 0.10937,-0.40625 0.10938,-0.125 0.28125,-0.125 0.17188,0 0.28125,0.125 0.10938,0.10937 0.10938,0.40625 l 0,1.75 q 0,0.29687 -0.10938,0.42187 -0.10937,0.10938 -0.28125,0.10938 -0.15625,0 -0.26562,-0.0937 -0.10938,-0.10938 -0.125,-0.35938 -0.0625,-0.67187 -0.875,-1.26562 -0.79688,-0.59375 -2.17188,-0.593 75 -1.73437,0 -2.64062,1.09375 -0.90625,1.07812 -0.90625,2.48437 0,1.51563 0.98437,2.5 1,0.98438 2.57813,0.98438 0.92187,0 1.85937,-0.32813 0.9375,-0.34375 1.70313,-1.09375 0.1875,-0.17187 0.34375,-0.17187 0.15625,0 0.26562,0.10937 0.10938,0.0937 0.10938,0.25 0,0.40625 -0.9375,1.01563 -1.51563,1 -3.375,1 -1.875,0 -3.09375,-1.20313 -1.20313,-1.20312 -1.20313,-3.04687 0,-1.89063 1.23438,-3.125 1.23437,-1.25 3.125,-1.25 1.78125,0 3,1.0625 z m 6.57373,3.78125 0,3.46875 -1.82813,0 q -0.28125,0 -0.40625,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.04688,0 0,-10.07813 -1.04688,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.125,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 1.82813,0 0,7.17188 3.3125,-2.78125 -0.40625,0 q -0.28125,0 -0.40625,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 2.5,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -0.90625,0 -3.04688,2.54687 3.85938,3.92188 0.89062,0 q 0.29688,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.40625,0.10938 l -2.51562,0 q -0.28125,0 -0.40625,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 0.54687,0 -3.34375,-3.4375 -0.89062,0.75 z m 17.19876,-0.35938 -7.95316,0 q 0.21875,1.51563 1.28125,2.4375 1.0625,0.92188 2.625,0.92188 0.875,0 1.82813,-0.28125 0.95315,-0.29688 1.56253,-0.76563 0.17187,-0.14062 0.29687,-0.14062 0.15625,0 0.26563,0.125 0.10937,0.10937 0.10937,0.26562 0,0.15625 -0.15625,0.29688 -0.4375,0.46875 -1.57815,0.875 -1.14063,0.40625 -2.32813,0.40625 -2,0 -3.34375,-1.3125 -1.34375,-1.3125 -1.34375,-3.1875 0,-1.6875 1.25,-2.90625 1.26563,-1.21875 3.125,-1.21875 1.90625,0 3.14066,1.25 1.23437,1.25 1.21875,3.23437 z m -0.79688,-0.79687 q -0.23437,-1.28125 -1.21878,-2.09375 -0.98437,-0.8125 -2.34375 ,-0.8125 -1.375,0 -2.35937,0.8125 -0.96875,0.79687 -1.21875,2.09375 l 7.14065,0 z m 6.37061,-3.40625 4.23437,0 q 0.28125,0 0.39063,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.10938,0.10938 -0.39063,0.10938 l -4.23437,0 0,5.1875 q 0,0.6875 0.54687,1.14062 0.54688,0.45313 1.59375,0.45313 0.78125,0 1.70313,-0.23438 0.92187,-0.25 1.4375,-0.54687 0.1875,-0.10938 0.29687,-0.10938 0.15625,0 0.26563,0.125 0.10937,0.10938 0.10937,0.26563 0,0.14062 -0.125,0.25 -0.29687,0.3125 -1.4375,0.67187 -1.14062,0.35938 -2.1875,0.35938 -1.375,0 -2.1875,-0.64063 -0.79687,-0.64062 -0.79687,-1.73437 l 0,-5.1875 -1.4375,0 q -0.28125,0 -0.40625,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.4375,0 0,-2.29688 q 0,-0.28125 0.10937,-0.40625 0.10938,-0.125 0.28125,-0.125 0.17188,0 0.28125,0.125 0.10938,0.125 0.10938,0.40625 l 0,2.29688 z m 18.1831,13.23437 -10.35937,0 q -0.28125,0 -0.40625,-0.10937 -0.10938,-0.10938 -0.10938,-0.2812 5 0,-0.17188 0.10938,-0.28125 0.125,-0.10938 0.40625,-0.10938 l 10.35937,0 q 0.29688,0 0.40625,0.10938 0.125,0.10937 0.125,0.28125 0,0.17187 -0.125,0.28125 -0.10937,0.10937 -0.40625,0.10937 z m 6.62061,-16.84375 0,10.85938 3.0625,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -6.90625,0 q -0.28125,0 -0.40625,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 3.0625,0 0,-10.07813 -2.23438,0 q -0.28125,0 -0.40625,-0.10937 -0.125,-0.10938 -0.125,-0.28125 0,-0.17188 0.10938,-0.28125 0.125,-0.10938 0.42187,-0.10938 l 3.01563,0 z m 15.22998,7.8125 -7.95313,0 q 0.21875,1.51563 1.28125,2.4375 1.0625,0.92188 2.625,0.92188 0.875,0 1.82813,-0.28125 0.95312,-0.29688 1.5625,-0.76563 0.17187,-0.14062 0.29687,-0.14062 0.15625,0 0.26563,0.125 0.10937,0.10937 0.10937,0.26562 0,0.15625 -0.15625,0.29688 -0.4375,0.46875 -1.57812,0.875 -1.14063,0.40625 -2.32813,0.40625 -2,0 -3.34 375,-1.3125 -1.34375,-1.3125 -1.34375,-3.1875 0,-1.6875 1.25,-2.90625 1.26563,-1.21875 3.125,-1.21875 1.90625,0 3.14063,1.25 1.23437,1.25 1.21875,3.23437 z m -0.79688,-0.79687 q -0.23437,-1.28125 -1.21875,-2.09375 -0.98437,-0.8125 -2.34375,-0.8125 -1.375,0 -2.35937,0.8125 -0.96875,0.79687 -1.21875,2.09375 l 7.14062,0 z m 5.46436,-3.40625 0,1.17187 q 0.8125,-0.82812 1.46875,-1.14062 0.65625,-0.3125 1.48437,-0.3125 0.89063,0 1.625,0.375 0.51563,0.28125 0.9375,0.9375 0.42188,0.64062 0.42188,1.3125 l 0,4.90625 0.65625,0 q 0.28125,0 0.40625,0.10937 0.125,0.10938 0.125,0.28125 0,0.17188 -0.125,0.28125 -0.125,0.10938 -0.40625,0.10938 l -2.07813,0 q -0.29687,0 -0.42187,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.17187 0.10938,-0.28125 0.125,-0.10937 0.42187,-0.10937 l 0.64063,0 0,-4.78125 q 0,-0.82813 -0.60938,-1.39063 -0.59375,-0.57812 -1.60937,-0.57812 -0.76563,0 -1.32813,0.3125 -0.5625,0.3125 -1.60937,1.54687 l 0,4.89063 0.875,0 q 0.28125,0 0.39062,0.10937 0.125,0.10938 0.125,0.281 25 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.39062,0.10938 l -2.54688,0 q -0.26562,0 -0.39062,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.39062,-0.10937 l 0.89063,0 0,-6.46875 -0.65625,0 q -0.28125,0 -0.40625,-0.10938 -0.125,-0.10937 -0.125,-0.28125 0,-0.17187 0.125,-0.28125 0.125,-0.10937 0.40625,-0.10937 l 1.4375,0 z m 13.82373,3.40625 q 0,-1.0625 0.28125,-2.25 0.28125,-1.20313 1.0625,-2.76563 0.79687,-1.57812 1.15625,-1.90625 0.10937,-0.0937 0.23437,-0.0937 0.17188,0 0.28125,0.10938 0.125,0.10937 0.125,0.26562 0,0.0937 -0.0625,0.20313 -1.03125,1.875 -1.46875,3.40625 -0.42187,1.51562 -0.42187,3.03125 0,1.53125 0.42187,3.0625 0.4375,1.51562 1.46875,3.375 0.0625,0.125 0.0625,0.20312 0,0.17188 -0.125,0.28125 -0.10937,0.10938 -0.28125,0.10938 -0.125,0 -0.23437,-0.0937 -0.34375,-0.3125 -1.125,-1.84375 -0.78125,-1.53125 -1.07813,-2.70313 -0.29687,-1.1875 -0.29687,-2.39062 z m 11.71435,0.0156 q 0,1.0625 -0.28125,2.26563 -0.26562,1.1875 -1.0625,2 .75 -0.78125,1.57812 -1.14062,1.89062 -0.10938,0.10938 -0.25,0.10938 -0.15625,0 -0.28125,-0.10938 -0.10938,-0.10937 -0.10938,-0.28125 0,-0.0781 0.0625,-0.20312 1.01563,-1.85938 1.45313,-3.375 0.4375,-1.53125 0.4375,-3.04688 0,-1.53125 -0.4375,-3.04687 -0.4375,-1.53125 -1.45313,-3.40625 -0.0625,-0.10938 -0.0625,-0.20313 0,-0.15625 0.10938,-0.26562 0.125,-0.10938 0.28125,-0.10938 0.14062,0 0.25,0.0937 0.34375,0.32813 1.10937,1.85938 0.78125,1.51562 1.07813,2.70312 0.29687,1.17188 0.29687,2.375 z"/> -</svg> diff --git a/doc/users-guide/users-guide-packet.adoc b/doc/users-guide/users-guide-packet.adoc index d5f2ff19..6d9e98a5 100644 --- a/doc/users-guide/users-guide-packet.adoc +++ b/doc/users-guide/users-guide-packet.adoc @@ -473,32 +473,16 @@ reliability, the shared data contained in any packet referred to by references should be treated as read only once it has been successfully referenced until it is known that all references to it have been freed.
-To assist applications in working with references, ODP provides two additional -APIs: +To assist applications in working with references, ODP provides the additional +API:
[source,c] ----- int odp_packet_has_ref(odp_packet_t pkt); - -uint32_t odp_packet_unshared_len(odp_packet_t pkt); ----- The `odp_packet_has_ref()` API says whether any other packets exist that share any bytes with this packet.
-Because references and referenced packets consist of an unshared -prefix, that is modifiable, followed by a shared body that should not be -modified, the `odp_packet_unshared_len()` API is available that operates as -shown here: - -.Packet Reference Lengths -image::reflen.svg[align="center"] - -`odp_packet_unshared_len()` returns the same value as `odp_packet_len()` when -`odp_packet_has_ref()` returns 0, but for packets for which -`odp_packet_has_ref()` returns 1, only returns the number of unshared bytes -prefixed to them. To ensure portability and reliability, only offsets -0..`odp_packet_unshared_len()`-1 should be modified by the caller. - ===== Compound References Note that architecturally ODP does not limit referencing and so it is possible that a reference may be used as a basis for creating another reference. The @@ -509,11 +493,7 @@ As noted earlier, the intent behind references is that they are lightweight objects that can be implemented without requiring data copies. The existence of compound references may complicate this goal for some implementations. As a result, implementations are always free to perform partial or full copies of -packets as part of any reference creation call. The -`odp_packet_unshared_len()` API will always provide an authoritative answer to -the question of how many bytes of a packet may safely be modified in any -context, so whether or not copies have been performed applications can be -assured of portability across all conforming ODP implementations. +packets as part of any reference creation call.
Note also that a packet may not reference itself, nor may circular reference relationships be formed, _e.g.,_ packet A is used as a header for a reference
commit 774b652640be4ab7147db0a337f84ce8d602b665 Author: Bill Fischofer bill.fischofer@linaro.org Date: Thu Oct 5 15:34:45 2017 -0500
api: packet: remove odp_packet_unshared_len()
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@nokia.com Reviewed-by: Nikhil Agarwal nikhil.agarwal@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/packet.h b/include/odp/api/spec/packet.h index 7f5eec10..bc7cd0ba 100644 --- a/include/odp/api/spec/packet.h +++ b/include/odp/api/spec/packet.h @@ -955,25 +955,6 @@ odp_packet_t odp_packet_ref(odp_packet_t pkt, uint32_t offset); odp_packet_t odp_packet_ref_pkt(odp_packet_t pkt, uint32_t offset, odp_packet_t hdr);
-/** - * Packet unshared data length - * - * When a packet has multiple references, packet data is divided into two - * parts: unshared and shared. The unshared part always precedes the shared - * part. This call returns number of bytes in the unshared part. When a - * packet has only a single reference (see odp_packet_has_ref()), all packet - * data is unshared and unshared length equals the packet length - * (odp_packet_len()). - * - * Application may modify only the unshared part, the rest of the packet data - * must be treated as read only. - * - * @param pkt Packet handle - * - * @return Packet unshared data length - */ -uint32_t odp_packet_unshared_len(odp_packet_t pkt); - /** * Test if packet has multiple references *
commit 8999344484a2c3b4c08b84c5b27e2b355fa312d5 Author: Bill Fischofer bill.fischofer@linaro.org Date: Thu Oct 5 15:34:27 2017 -0500
linux-generic: packet: remove odp_packet_unshared_len() implementation
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@nokia.com Reviewed-by: Nikhil Agarwal nikhil.agarwal@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/include/odp_packet_internal.h b/platform/linux-generic/include/odp_packet_internal.h index 3b3dec95..89fb34b6 100644 --- a/platform/linux-generic/include/odp_packet_internal.h +++ b/platform/linux-generic/include/odp_packet_internal.h @@ -124,7 +124,6 @@ typedef struct { odp_pktio_t input;
uint32_t frame_len; - uint32_t shared_len;
uint16_t headroom; uint16_t tailroom; @@ -225,7 +224,6 @@ static inline void packet_init(odp_packet_hdr_t *pkt_hdr, uint32_t len) * segment occupied by the allocated length. */ pkt_hdr->frame_len = len; - pkt_hdr->shared_len = 0; pkt_hdr->headroom = CONFIG_PACKET_HEADROOM; pkt_hdr->tailroom = pool->seg_len - seg_len + CONFIG_PACKET_TAILROOM;
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index 87282639..68a6eef5 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -504,7 +504,6 @@ static inline odp_packet_hdr_t *add_segments(odp_packet_hdr_t *pkt_hdr, new_hdr->frame_len = pkt_hdr->frame_len + len; new_hdr->headroom = pool->headroom + offset; new_hdr->tailroom = pkt_hdr->tailroom; - new_hdr->shared_len = pkt_hdr->shared_len;
pkt_hdr = new_hdr; } else { @@ -708,7 +707,6 @@ static inline odp_packet_hdr_t *free_segments(odp_packet_hdr_t *pkt_hdr, new_hdr->headroom = seg_headroom(new_hdr, 0);
new_hdr->frame_len = pkt_hdr->frame_len - free_len; - new_hdr->shared_len = pkt_hdr->shared_len;
pull_head(new_hdr, pull_len);
@@ -2196,7 +2194,6 @@ odp_packet_t odp_packet_ref_static(odp_packet_t pkt) odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
packet_ref_inc(pkt_hdr); - pkt_hdr->shared_len = pkt_hdr->frame_len;
return pkt; } @@ -2279,16 +2276,12 @@ odp_packet_t odp_packet_ref(odp_packet_t pkt, uint32_t offset) link_hdr->buf_hdr.segcount = segcount - seg_idx; link_hdr->frame_len = len; link_hdr->tailroom = pkt_hdr->tailroom; - link_hdr->shared_len = len;
/* Link header does not have headroom, it just points to other * buffers. Zero length headroom ensures that head of the other buffer * is not pushed through a reference. */ link_hdr->headroom = 0;
- if (pkt_hdr->shared_len < len) - pkt_hdr->shared_len = len; - return ref;
} @@ -2298,9 +2291,6 @@ odp_packet_t odp_packet_ref_pkt(odp_packet_t pkt, uint32_t offset, { odp_packet_t ref; int ret; - odp_packet_hdr_t *new_hdr; - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - uint32_t len = pkt_hdr->frame_len;
ref = odp_packet_ref(pkt, offset);
@@ -2317,11 +2307,7 @@ odp_packet_t odp_packet_ref_pkt(odp_packet_t pkt, uint32_t offset, return ODP_PACKET_INVALID; }
- new_hdr = packet_hdr(hdr); - new_hdr->shared_len = len - offset; - return hdr; - }
int odp_packet_has_ref(odp_packet_t pkt) @@ -2347,17 +2333,6 @@ int odp_packet_has_ref(odp_packet_t pkt) return 0; }
-uint32_t odp_packet_unshared_len(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - uint32_t len = pkt_hdr->frame_len; - - if (odp_packet_has_ref(pkt)) - return len - pkt_hdr->shared_len; - - return len; -} - /* Include non-inlined versions of API functions */ #if ODP_ABI_COMPAT == 1 #include <odp/api/plat/packet_inlines_api.h>
commit e475a06dba8b79eace4131ea7327e87a10546351 Author: Bill Fischofer bill.fischofer@linaro.org Date: Thu Oct 5 15:33:53 2017 -0500
test: packet: remove references to odp_packet_unshared_len()
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@nokia.com Reviewed-by: Nikhil Agarwal nikhil.agarwal@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/performance/odp_bench_packet.c b/test/performance/odp_bench_packet.c index 622245ff..29539e0e 100644 --- a/test/performance/odp_bench_packet.c +++ b/test/performance/odp_bench_packet.c @@ -1267,17 +1267,6 @@ static int bench_packet_ref_pkt(void) return i; }
-static int bench_packet_unshared_len(void) -{ - int i; - uint32_t ret = 0; - - for (i = 0; i < TEST_REPEAT_COUNT; i++) - ret += odp_packet_unshared_len(gbl_args->pkt_tbl[i]); - - return ret; -} - static int bench_packet_has_ref(void) { int i; @@ -1517,8 +1506,6 @@ bench_info_t test_suite[] = { free_packets_twice, NULL), BENCH_INFO(bench_packet_ref_pkt, alloc_packets_twice, free_packets_twice, NULL), - BENCH_INFO(bench_packet_unshared_len, alloc_ref_packets, - free_packets_twice, NULL), BENCH_INFO(bench_packet_has_ref, alloc_ref_packets, free_packets_twice, NULL), }; diff --git a/test/validation/api/packet/packet.c b/test/validation/api/packet/packet.c index 5e5626a3..9318dfc7 100644 --- a/test/validation/api/packet/packet.c +++ b/test/validation/api/packet/packet.c @@ -1496,7 +1496,6 @@ void packet_test_concat_extend_trunc(void)
CU_ASSERT(odp_packet_len(pkt) == (cur_len + alloc_len)); cur_len = odp_packet_len(pkt); - CU_ASSERT(cur_len == odp_packet_unshared_len(pkt)); }
ret = odp_packet_extend_tail(&pkt, ext_len, NULL, NULL); @@ -1504,14 +1503,12 @@ void packet_test_concat_extend_trunc(void)
CU_ASSERT(odp_packet_len(pkt) == (cur_len + ext_len)); cur_len = odp_packet_len(pkt); - CU_ASSERT(cur_len == odp_packet_unshared_len(pkt));
ret = odp_packet_extend_head(&pkt, ext_len, NULL, NULL); CU_ASSERT(ret >= 0);
CU_ASSERT(odp_packet_len(pkt) == (cur_len + ext_len)); cur_len = odp_packet_len(pkt); - CU_ASSERT(cur_len == odp_packet_unshared_len(pkt));
pkt2 = odp_packet_alloc(pool, alloc_len); CU_ASSERT_FATAL(pkt2 != ODP_PACKET_INVALID); @@ -1524,21 +1521,18 @@ void packet_test_concat_extend_trunc(void)
CU_ASSERT(odp_packet_len(pkt) == (cur_len + alloc_len)); cur_len = odp_packet_len(pkt); - CU_ASSERT(cur_len == odp_packet_unshared_len(pkt));
ret = odp_packet_trunc_head(&pkt, trunc_len, NULL, NULL); CU_ASSERT(ret >= 0);
CU_ASSERT(odp_packet_len(pkt) == (cur_len - trunc_len)); cur_len = odp_packet_len(pkt); - CU_ASSERT(cur_len == odp_packet_unshared_len(pkt));
ret = odp_packet_trunc_tail(&pkt, trunc_len, NULL, NULL); CU_ASSERT(ret >= 0);
CU_ASSERT(odp_packet_len(pkt) == (cur_len - trunc_len)); cur_len = odp_packet_len(pkt); - CU_ASSERT(cur_len == odp_packet_unshared_len(pkt));
odp_packet_free(pkt);
@@ -1606,7 +1600,6 @@ void packet_test_extend_small(void) }
CU_ASSERT(odp_packet_len(pkt) == len); - CU_ASSERT(odp_packet_unshared_len(pkt) == len);
len = odp_packet_len(pkt);
@@ -1902,7 +1895,6 @@ void packet_test_extend_ref(void) NULL, NULL) >= 0); CU_ASSERT(odp_packet_extend_head(&max_pkt, 1, NULL, NULL) >= 0); CU_ASSERT(odp_packet_len(max_pkt) == max_len); - CU_ASSERT(odp_packet_unshared_len(max_pkt) == max_len);
/* Now try with a reference in place */ CU_ASSERT(odp_packet_trunc_tail(&max_pkt, 100, NULL, NULL) >= 0); @@ -1912,75 +1904,37 @@ void packet_test_extend_ref(void) CU_ASSERT(ref != ODP_PACKET_INVALID); CU_ASSERT(odp_packet_len(ref) == max_len - 200); if (odp_packet_has_ref(ref) == 1) { - CU_ASSERT(odp_packet_unshared_len(ref) == 0); - /* And ref's affect on max_pkt */ CU_ASSERT(odp_packet_has_ref(max_pkt) == 1); - CU_ASSERT(odp_packet_unshared_len(max_pkt) == 100); - } else { - CU_ASSERT(odp_packet_unshared_len(ref) == odp_packet_len(ref)); - CU_ASSERT(odp_packet_unshared_len(max_pkt) == - odp_packet_len(max_pkt)); }
/* Now extend max_pkt and verify effect */ CU_ASSERT(odp_packet_extend_head(&max_pkt, 10, NULL, NULL) >= 0); CU_ASSERT(odp_packet_len(max_pkt) == max_len - 90);
- if (odp_packet_has_ref(max_pkt) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(max_pkt) == 110); - } - /* Extend on max_pkt should not affect ref */ CU_ASSERT(odp_packet_len(ref) == max_len - 200);
- if (odp_packet_has_ref(ref) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref) == 0); - } - /* Now extend ref and verify effect*/ CU_ASSERT(odp_packet_extend_head(&ref, 20, NULL, NULL) >= 0); CU_ASSERT(odp_packet_len(ref) == max_len - 180);
- if (odp_packet_has_ref(ref) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref) == 20); - } - /* Extend on ref should not affect max_pkt */ CU_ASSERT(odp_packet_len(max_pkt) == max_len - 90);
- if (odp_packet_has_ref(max_pkt) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(max_pkt) == 110); - } - /* Trunc max_pkt of all unshared len */ CU_ASSERT(odp_packet_trunc_head(&max_pkt, 110, NULL, NULL) >= 0);
/* Verify effect on max_pkt */ CU_ASSERT(odp_packet_len(max_pkt) == max_len - 200);
- if (odp_packet_has_ref(max_pkt) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(max_pkt) == 0); - } - /* Verify that ref is unchanged */ CU_ASSERT(odp_packet_len(ref) == max_len - 180);
- if (odp_packet_has_ref(ref) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref) == 20); - } - /* Free ref and verify that max_pkt is back to being unreferenced */ odp_packet_free(ref); CU_ASSERT(odp_packet_has_ref(max_pkt) == 0); CU_ASSERT(odp_packet_len(max_pkt) == max_len - 200); - CU_ASSERT(odp_packet_unshared_len(max_pkt) == max_len - 200);
odp_packet_free(max_pkt); } @@ -2192,7 +2146,7 @@ void packet_test_ref(void) odp_packet_free(pkt); odp_packet_free(pkt3);
- /* Test has_ref, unshared_len, lengths, etc */ + /* Test has_ref, lengths, etc */ base_pkt = odp_packet_copy(test_packet, odp_packet_pool(test_packet)); CU_ASSERT_FATAL(base_pkt != ODP_PACKET_INVALID); base_hr = odp_packet_headroom(base_pkt); @@ -2239,8 +2193,6 @@ void packet_test_ref(void) /* Nothing is a ref or has a ref before we start */ for (i = 0; i < 4; i++) { CU_ASSERT(odp_packet_has_ref(hdr_pkt[i]) == 0); - CU_ASSERT(odp_packet_len(hdr_pkt[i]) == - odp_packet_unshared_len(hdr_pkt[i])); }
/* Create a couple of refs */ @@ -2255,10 +2207,6 @@ void packet_test_ref(void) if (odp_packet_has_ref(base_pkt) == 1) { CU_ASSERT(odp_packet_has_ref(refhdr_pkt[0]) == 1); CU_ASSERT(odp_packet_has_ref(refhdr_pkt[1]) == 1); - - CU_ASSERT(odp_packet_unshared_len(base_pkt) == 0); - } else { - CU_ASSERT(odp_packet_unshared_len(base_pkt) == pkt_len); }
CU_ASSERT(odp_packet_len(refhdr_pkt[0]) == @@ -2266,20 +2214,6 @@ void packet_test_ref(void) CU_ASSERT(odp_packet_len(refhdr_pkt[1]) == hdr_len[1] + pkt_len - offset[1]);
- if (odp_packet_has_ref(refhdr_pkt[0]) == 1) { - CU_ASSERT(odp_packet_unshared_len(refhdr_pkt[0]) == hdr_len[0]); - } else { - CU_ASSERT(odp_packet_unshared_len(refhdr_pkt[0]) == - odp_packet_len(refhdr_pkt[0])); - } - - if (odp_packet_has_ref(refhdr_pkt[1]) == 1) { - CU_ASSERT(odp_packet_unshared_len(refhdr_pkt[1]) == hdr_len[1]); - } else { - CU_ASSERT(odp_packet_unshared_len(refhdr_pkt[1]) == - odp_packet_len(refhdr_pkt[1])); - } - packet_compare_offset(refhdr_pkt[0], hdr_len[0], base_pkt, offset[0], pkt_len - offset[0]); @@ -2298,8 +2232,6 @@ void packet_test_ref(void)
if (odp_packet_has_ref(refhdr_pkt[2]) == 1) { CU_ASSERT(odp_packet_has_ref(refhdr_pkt[0]) == 1); - CU_ASSERT(odp_packet_unshared_len(refhdr_pkt[2]) == hdr_len[2]); - CU_ASSERT(odp_packet_unshared_len(refhdr_pkt[0]) == 2); }
/* Delete the refs */ @@ -2342,13 +2274,6 @@ void packet_test_ref(void)
if (odp_packet_has_ref(base_pkt) == 1) { CU_ASSERT(odp_packet_has_ref(ref_pkt[0]) == 1); - CU_ASSERT(odp_packet_unshared_len(base_pkt) == 0); - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == 0); - } else { - CU_ASSERT(odp_packet_unshared_len(base_pkt) == - odp_packet_len(base_pkt)); - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == - odp_packet_len(ref_pkt[0])); }
CU_ASSERT(odp_packet_len(ref_pkt[0]) == odp_packet_len(base_pkt)); @@ -2380,16 +2305,6 @@ void packet_test_ref(void) CU_ASSERT(odp_packet_len(ref_pkt[0]) == segmented_pkt_len - offset[0]); CU_ASSERT(odp_packet_len(ref_pkt[1]) == segmented_pkt_len - offset[1]);
- if (odp_packet_has_ref(ref_pkt[0]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == 0); - } - - if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == 0); - } - /* Free the base pkts -- references should still be valid */ odp_packet_free(base_pkt); odp_packet_free(segmented_base_pkt); @@ -2407,34 +2322,16 @@ void packet_test_ref(void)
CU_ASSERT(odp_packet_push_head(ref_pkt[0], hr[0]) != NULL);
- if (odp_packet_has_ref(ref_pkt[0]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == hr[0]); - } - CU_ASSERT(odp_packet_len(ref_pkt[0]) == hr[0] + segmented_pkt_len - offset[0]);
CU_ASSERT(odp_packet_pull_head(ref_pkt[0], hr[0] / 2) != NULL);
- if (odp_packet_has_ref(ref_pkt[0]) == 1) { - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == - hr[0] - (hr[0] / 2)); - } - if (hr[1] > 0) { CU_ASSERT(odp_packet_push_head(ref_pkt[1], 1) != NULL); - if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == 1); - } CU_ASSERT(odp_packet_len(ref_pkt[1]) == 1 + segmented_pkt_len - offset[1]); CU_ASSERT(odp_packet_pull_head(ref_pkt[1], 1) != NULL); - if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == 0); - } CU_ASSERT(odp_packet_len(ref_pkt[1]) == segmented_pkt_len - offset[1]); } @@ -2450,67 +2347,24 @@ void packet_test_ref(void) ref_len[1] = odp_packet_len(ref_pkt[1]); CU_ASSERT(ref_len[1] == odp_packet_len(base_pkt) - offset[1]);
- if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == 0); - } - CU_ASSERT(odp_packet_push_head(base_pkt, base_hr / 2) != NULL);
- if (odp_packet_has_ref(base_pkt) == 1) { - CU_ASSERT(odp_packet_unshared_len(base_pkt) == - base_hr / 2 + offset[1]); - } CU_ASSERT(odp_packet_len(ref_pkt[1]) == ref_len[1]); - if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == 0); - }
ref_pkt[0] = odp_packet_ref(base_pkt, offset[0]); CU_ASSERT_FATAL(ref_pkt[0] != ODP_PACKET_INVALID); ref_len[0] = odp_packet_len(ref_pkt[0]); CU_ASSERT(ref_len[0] = odp_packet_len(base_pkt) - offset[0]); - if (odp_packet_has_ref(ref_pkt[0]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == 0); - }
CU_ASSERT(odp_packet_push_head(base_pkt, base_hr - base_hr / 2) != NULL); - if (odp_packet_has_ref(base_pkt) == 1) { - CU_ASSERT(odp_packet_unshared_len(base_pkt) == - base_hr - base_hr / 2 + offset[0]); - } CU_ASSERT(odp_packet_len(ref_pkt[1]) == ref_len[1]); CU_ASSERT(odp_packet_len(ref_pkt[0]) == ref_len[0]);
- if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == 0); - } - if (odp_packet_has_ref(ref_pkt[0]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == 0); - } - hr[0] = odp_packet_headroom(ref_pkt[0]); hr[1] = odp_packet_headroom(ref_pkt[1]); CU_ASSERT(odp_packet_push_head(ref_pkt[0], hr[0]) != NULL); CU_ASSERT(odp_packet_push_head(ref_pkt[1], hr[1]) != NULL); - if (odp_packet_has_ref(ref_pkt[0]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[0]) == hr[0]); - } - if (odp_packet_has_ref(ref_pkt[1]) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(ref_pkt[1]) == hr[1]); - } - if (odp_packet_has_ref(base_pkt) == 1) { - /* CU_ASSERT needs braces */ - CU_ASSERT(odp_packet_unshared_len(base_pkt) == - base_hr - base_hr / 2 + offset[0]); - }
odp_packet_free(base_pkt); odp_packet_free(ref_pkt[0]);
commit c5fbca288838d39f3f6434d381acb25f12c1dc9e Author: Petri Savolainen petri.savolainen@linaro.org Date: Thu Sep 14 15:02:51 2017 +0300
api: timer: refine timer pool param documentation
Specify explicitly what each timer pool parameter means. This does not change the intended use of the parameters.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/timer.h b/include/odp/api/spec/timer.h index 75f9db98..d846618f 100644 --- a/include/odp/api/spec/timer.h +++ b/include/odp/api/spec/timer.h @@ -99,12 +99,36 @@ typedef enum { * Timer pool parameters are used when creating and querying timer pools. */ typedef struct { - uint64_t res_ns; /**< Timeout resolution in nanoseconds */ - uint64_t min_tmo; /**< Minimum relative timeout in nanoseconds */ - uint64_t max_tmo; /**< Maximum relative timeout in nanoseconds */ - uint32_t num_timers; /**< (Minimum) number of supported timers */ - int priv; /**< Shared (false) or private (true) timer pool */ - odp_timer_clk_src_t clk_src; /**< Clock source for timers */ + /** Timeout resolution in nanoseconds. Timer pool must serve timeouts + * with this or higher resolution. The minimum valid value (highest + * resolution) is defined by timer capability 'highest_res_ns'. */ + uint64_t res_ns; + + /** Minimum relative timeout in nanoseconds. All requested timeouts + * will be at least this many nanoseconds after the current + * time of the timer pool. Timer set functions return an error, if too + * short timeout was requested. The value may be also less than + * 'res_ns'. */ + uint64_t min_tmo; + + /** Maximum relative timeout in nanoseconds. All requested timeouts + * will be at most this many nanoseconds after the current + * time of the timer pool. Timer set functions return an error, if too + * long timeout was requested. */ + uint64_t max_tmo; + + /** Number of timers needed. Application will create in maximum this + * many concurrent timers from the timer pool. */ + uint32_t num_timers; + + /** Thread private timer pool. When zero, multiple thread may use the + * timer pool concurrently. When non-zero, only single thread uses the + * timer pool (concurrently). */ + int priv; + + /** Clock source for timers */ + odp_timer_clk_src_t clk_src; + } odp_timer_pool_param_t;
/**
commit 22921366d8a2f9155d43f7022d645c6d364c8b58 Author: Mykyta Iziumtsev mykyta.iziumtsev@linaro.org Date: Wed Oct 4 12:02:55 2017 +0200
api: fixing typos
Signed-off-by: Mykyta Iziumtsev mykyta.iziumtsev@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/packet.h b/include/odp/api/spec/packet.h index c7775d02..7f5eec10 100644 --- a/include/odp/api/spec/packet.h +++ b/include/odp/api/spec/packet.h @@ -904,7 +904,7 @@ odp_packet_t odp_packet_ref_static(odp_packet_t pkt); * dynamic references must not be mixed. Results are undefined if these * restrictions are not observed. * - * The packet handle 'pkt' may itself by a (dynamic) reference to a packet. + * The packet handle 'pkt' may itself be a (dynamic) reference to a packet. * * If the caller does not intend to modify either the packet or the new * reference to it, odp_packet_ref_static() may be used to create @@ -931,7 +931,7 @@ odp_packet_t odp_packet_ref(odp_packet_t pkt, uint32_t offset); * packet consists metadata and data of the 'hdr' packet, followed by the * shared part of packet 'pkt'. * - * The packet handle ('pkt') may itself by a (dynamic) reference to a packet, + * The packet handle ('pkt') may itself be a (dynamic) reference to a packet, * but the header packet handle ('hdr') must be unique. Both packets must be * have been allocated from the same pool and the handles must not refer to * the same packet. Results are undefined if these restrictions are not diff --git a/include/odp/api/spec/traffic_mngr.h b/include/odp/api/spec/traffic_mngr.h index 3a748cef..c9134e8e 100644 --- a/include/odp/api/spec/traffic_mngr.h +++ b/include/odp/api/spec/traffic_mngr.h @@ -75,7 +75,7 @@ extern "C" {
/** * @def ODP_TM_MAX_TM_QUEUES - * The largest number of tm_queues that can handled by any one TM system. + * The largest number of tm_queues that can be handled by any one TM system. */
/** @@ -97,7 +97,7 @@ extern "C" {
/** * @def ODP_TM_MIN_SHAPER_BW - * The largest amount of bandwidth that any shaper's peak or commit rate can + * The lowest amount of bandwidth that any shaper's peak or commit rate can * be set to. It is in units of 1000 bytes/second. */
@@ -143,7 +143,7 @@ extern "C" {
/** * @typedef odp_tm_node_t - * Each odp_tm_queue_t value is an opaque ODP handle representing a specific + * Each odp_tm_node_t value is an opaque ODP handle representing a specific * tm node within a specific TM system. */
commit 0278905b45145a168f5b63afa0dbf0be30e808be Author: Petri Savolainen petri.savolainen@linaro.org Date: Wed Oct 25 13:35:32 2017 +0300
validation: packet: add packet_print_data test
Test the new packet payload print function with couple of lengths and offsets. Added line feeds to separate packet print output from CUnit prints.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/validation/api/packet/packet.c b/test/validation/api/packet/packet.c index bf8f5f44..5e5626a3 100644 --- a/test/validation/api/packet/packet.c +++ b/test/validation/api/packet/packet.c @@ -535,7 +535,10 @@ void packet_test_prefetch(void) void packet_test_debug(void) { CU_ASSERT(odp_packet_is_valid(test_packet) == 1); + printf("\n\n"); odp_packet_print(test_packet); + odp_packet_print_data(test_packet, 0, 100); + odp_packet_print_data(test_packet, 14, 20); }
void packet_test_context(void) @@ -2179,7 +2182,10 @@ void packet_test_ref(void) packet_compare_data(pkt3, ref2);
/* Try print function on a reference */ + printf("\n\n"); odp_packet_print(ref2); + odp_packet_print_data(ref2, 0, 100); + odp_packet_print_data(ref2, 14, 20);
odp_packet_free(ref); odp_packet_free(ref2);
commit da0198f610f10c8af2c19eb4148001d1759eb401 Author: Petri Savolainen petri.savolainen@linaro.org Date: Wed Oct 25 13:29:55 2017 +0300
linux-gen: packet: implement odp_packet_data_print
Implemented the new packet payload print function using ODP_PRINT macro. Removed an extra space from the print macro as well as extra null char and line feed from odp_packet_print.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/include/odp_debug_internal.h b/platform/linux-generic/include/odp_debug_internal.h index 02ae87a9..4c44bebe 100644 --- a/platform/linux-generic/include/odp_debug_internal.h +++ b/platform/linux-generic/include/odp_debug_internal.h @@ -81,7 +81,7 @@ extern "C" { * specifically for dumping internal data. */ #define ODP_PRINT(fmt, ...) \ - odp_global_data.log_fn(ODP_LOG_PRINT, " " fmt, ##__VA_ARGS__) + odp_global_data.log_fn(ODP_LOG_PRINT, fmt, ##__VA_ARGS__)
#ifdef __cplusplus } diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index 89bae362..87282639 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -1751,9 +1751,68 @@ void odp_packet_print(odp_packet_t pkt) seg = odp_packet_next_seg(pkt, seg); }
- str[len] = '\0'; + ODP_PRINT("%s\n", str); +} + +void odp_packet_print_data(odp_packet_t pkt, uint32_t offset, + uint32_t byte_len) +{ + odp_packet_hdr_t *hdr = packet_hdr(pkt); + uint32_t bytes_per_row = 16; + int num_rows = (byte_len + bytes_per_row - 1) / bytes_per_row; + int max_len = 256 + (3 * byte_len) + (3 * num_rows); + char str[max_len]; + int len = 0; + int n = max_len - 1; + uint32_t data_len = odp_packet_len(pkt); + pool_t *pool = hdr->buf_hdr.pool_ptr; + + len += snprintf(&str[len], n - len, "Packet\n------\n"); + len += snprintf(&str[len], n - len, + " pool index %" PRIu32 "\n", pool->pool_idx); + len += snprintf(&str[len], n - len, + " buf index %" PRIu32 "\n", hdr->buf_hdr.index); + len += snprintf(&str[len], n - len, + " segcount %" PRIu16 "\n", hdr->buf_hdr.segcount); + len += snprintf(&str[len], n - len, + " data len %" PRIu32 "\n", data_len); + len += snprintf(&str[len], n - len, + " data ptr %p\n", odp_packet_data(pkt)); + len += snprintf(&str[len], n - len, + " print offset %" PRIu32 "\n", offset); + len += snprintf(&str[len], n - len, + " print length %" PRIu32 "\n", byte_len); + + if (offset + byte_len > data_len) { + len += snprintf(&str[len], n - len, " BAD OFFSET OR LEN\n"); + ODP_PRINT("%s\n", str); + return; + } + + while (byte_len) { + uint32_t copy_len; + uint8_t data[bytes_per_row]; + uint32_t i; + + if (byte_len > bytes_per_row) + copy_len = bytes_per_row; + else + copy_len = byte_len; + + odp_packet_copy_to_mem(pkt, offset, copy_len, data); + + len += snprintf(&str[len], n - len, " "); + + for (i = 0; i < copy_len; i++) + len += snprintf(&str[len], n - len, " %02x", data[i]); + + len += snprintf(&str[len], n - len, "\n"); + + byte_len -= copy_len; + offset += copy_len; + }
- ODP_PRINT("\n%s\n", str); + ODP_PRINT("%s\n", str); }
int odp_packet_is_valid(odp_packet_t pkt)
commit 6b24e0905df12ba075d86e471a48035f6c7b91ef Author: Petri Savolainen petri.savolainen@linaro.org Date: Tue Oct 24 14:32:01 2017 +0300
api: packet: print packet data
Added debug print function which includes packet payload bytes. Printing starts from offset, so it's easy to e.g. limit print to IPv4 header bytes only: odp_packet_print_data(pkt, l3_offset(pkt), 20)
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org Reviewed-by: Balasubramanian Manoharan bala.manoharan@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/packet.h b/include/odp/api/spec/packet.h index 79d8773e..c7775d02 100644 --- a/include/odp/api/spec/packet.h +++ b/include/odp/api/spec/packet.h @@ -1502,14 +1502,27 @@ void odp_packet_shaper_len_adjust_set(odp_packet_t pkt, int8_t adj); */
/** - * Print packet to the console + * Print packet debug information * - * Print all packet debug information to the console. + * Print all packet debug information to the ODP log. * * @param pkt Packet handle */ void odp_packet_print(odp_packet_t pkt);
+/** + * Print packet data + * + * Print packet debug information with packet data to the ODP log. Operation + * prints 'len' bytes of packet data starting from 'offset' byte. Offset plus + * length must not exceed packet length (odp_packet_len()). + * + * @param pkt Packet handle + * @param offset Byte offset into the packet + * @param len Number of bytes to print + */ +void odp_packet_print_data(odp_packet_t pkt, uint32_t offset, uint32_t len); + /** * Perform full packet validity check *
commit c8f25051021015221ec8d46cf2e06914eb8ca868 Author: Maxim Uvarov maxim.uvarov@linaro.org Date: Thu Oct 26 19:24:21 2017 +0300
shippable: add libconfig and libnuma
add libconfig and libnuma for docker image for api-next.
Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org
diff --git a/scripts/Dockerfile b/scripts/Dockerfile index 995330fa..b15282aa 100644 --- a/scripts/Dockerfile +++ b/scripts/Dockerfile @@ -12,12 +12,14 @@ RUN sudo apt-get update && sudo apt-get install -yy \ gcc-4.8 \ graphviz \ kmod \ - mscgen \ + libconfig-dev \ libcunit1-dev \ + libnuma-dev \ libpcap-dev \ libssl-dev \ libtool \ linux-headers-`uname -r` \ + mscgen \ ruby-dev
RUN sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10
commit 5f095cc66bc3fcafe8f44ed7348ef127f40c9026 Author: Balasubramanian Manoharan bala.manoharan@linaro.org Date: Wed Aug 2 08:40:38 2017 -0700
api: packetio: deprecate redundant loop_supported field in capability
removes redundant loop_supported boolean in odp_pktio_capability_t Fixes https://bugs.linaro.org/show_bug.cgi?id=2861
Signed-off-by: Balasubramanian Manoharan bala.manoharan@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index cec1f22a..76c63e72 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -19,6 +19,7 @@ extern "C" { #endif
+#include <odp/api/deprecated.h> #include <odp/api/packet_io_stats.h> #include <odp/api/queue.h> #include <odp/api/time.h> @@ -445,11 +446,8 @@ typedef struct odp_pktio_capability_t { * set to zero. */ odp_pktio_set_op_t set_op;
- /** Support of Loopback mode - * - * A boolean to denote whether loop back mode is supported on this - * specific interface. */ - odp_bool_t loop_supported; + /** @deprecated Use enable_loop inside odp_pktin_config_t */ + odp_bool_t ODP_DEPRECATE(loop_supported); } odp_pktio_capability_t;
/** diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 0473483d..5880a2a1 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -418,7 +418,7 @@ int odp_pktio_config(odp_pktio_t hdl, const odp_pktio_config_t *config) return -1; }
- if (config->enable_loop && !capa.loop_supported) { + if (config->enable_loop && !capa.config.enable_loop) { ODP_ERR("Loopback mode not supported\n"); return -1; }
commit 3d6cf1de61e0b5c846317b3ffcbd0cfd07531b90 Author: Matias Elo matias.elo@nokia.com Date: Wed Jul 5 17:23:19 2017 +0300
validation: system_info: add test for odp_sys_huge_page_size_all()
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/validation/api/system/system.c b/test/validation/api/system/system.c index 6873fcc4..a2749003 100644 --- a/test/validation/api/system/system.c +++ b/test/validation/api/system/system.c @@ -15,6 +15,7 @@
#define DIFF_TRY_NUM 160 #define RES_TRY_NUM 10 +#define PAGESZ_NUM 10
void system_test_odp_version_numbers(void) { @@ -216,6 +217,25 @@ void system_test_odp_sys_huge_page_size(void) CU_ASSERT(0 < page); }
+void system_test_odp_sys_huge_page_size_all(void) +{ + uint64_t pagesz_tbs[PAGESZ_NUM]; + uint64_t prev_pagesz = 0; + int num; + int i; + + num = odp_sys_huge_page_size_all(NULL, 0); + CU_ASSERT(num >= 0); + + num = odp_sys_huge_page_size_all(pagesz_tbs, PAGESZ_NUM); + CU_ASSERT(num >= 0); + for (i = 0; i < num && i < PAGESZ_NUM; i++) { + CU_ASSERT(pagesz_tbs[i] > 0); + CU_ASSERT(pagesz_tbs[i] > prev_pagesz); + prev_pagesz = pagesz_tbs[i]; + } +} + int system_check_odp_cpu_hz(void) { if (odp_cpu_hz() == 0) { @@ -318,6 +338,7 @@ odp_testinfo_t system_suite[] = { ODP_TEST_INFO(system_test_odp_cpu_model_str_id), ODP_TEST_INFO(system_test_odp_sys_page_size), ODP_TEST_INFO(system_test_odp_sys_huge_page_size), + ODP_TEST_INFO(system_test_odp_sys_huge_page_size_all), ODP_TEST_INFO_CONDITIONAL(system_test_odp_cpu_hz, system_check_odp_cpu_hz), ODP_TEST_INFO_CONDITIONAL(system_test_odp_cpu_hz_id, diff --git a/test/validation/api/system/system.h b/test/validation/api/system/system.h index c33729b9..0ea72dcd 100644 --- a/test/validation/api/system/system.h +++ b/test/validation/api/system/system.h @@ -20,6 +20,7 @@ void system_test_odp_cpu_model_str(void); void system_test_odp_cpu_model_str_id(void); void system_test_odp_sys_page_size(void); void system_test_odp_sys_huge_page_size(void); +void system_test_odp_sys_huge_page_size_all(void); int system_check_odp_cpu_hz(void); void system_test_odp_cpu_hz(void); int system_check_odp_cpu_hz_id(void);
commit 43d7f57b9f9f24526330c51fda8554d52414b82f Author: Matias Elo matias.elo@nokia.com Date: Wed Jul 5 17:23:18 2017 +0300
linux-gen: system_info: implement odp_sys_huge_page_size_all()
Directory /sys/kernel/mm/hugepages contains subdirectories for all huge page sizes supported by the running kernel. Loop through the contents of this directory to find the supported huge page sizes.
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/odp_system_info.c b/platform/linux-generic/odp_system_info.c index 1303d793..3cbe1d3d 100644 --- a/platform/linux-generic/odp_system_info.c +++ b/platform/linux-generic/odp_system_info.c @@ -423,6 +423,42 @@ uint64_t odp_sys_huge_page_size(void) return odp_global_data.hugepage_info.default_huge_page_size; }
+static int pagesz_compare(const void *pagesz1, const void *pagesz2) +{ + return (*(const uint64_t *)pagesz1 - *(const uint64_t *)pagesz2); +} + +int odp_sys_huge_page_size_all(uint64_t size[], int num) +{ + DIR *dir; + struct dirent *entry; + int pagesz_num = 0; + int saved = 0; + + /* See: kernel.org: hugetlbpage.txt */ + dir = opendir("/sys/kernel/mm/hugepages"); + if (!dir) { + ODP_ERR("Failed to open huge page directory\n"); + return -1; + } + + while ((entry = readdir(dir)) != NULL) { + unsigned long sz; + + if (sscanf(entry->d_name, "hugepages-%8lukB", &sz) == 1) { + if (size != NULL && saved < num) + size[saved++] = sz * 1024; + pagesz_num++; + } + } + closedir(dir); + + if (size != NULL && saved > 1) + qsort(size, saved, sizeof(uint64_t), pagesz_compare); + + return pagesz_num; +} + uint64_t odp_sys_page_size(void) { return odp_global_data.system_info.page_size;
commit c4a8f43ff08b954d14857c5a59544f8d914205e3 Author: Matias Elo matias.elo@nokia.com Date: Wed Jul 5 17:23:17 2017 +0300
api: system_info: add function for fetching all supported huge page sizes
A system may simultaneously support multiple huge page sizes. Add a new API function odp_sys_huge_page_size_all() which returns all supported page sizes. odp_sys_huge_page_size() stays unmodified to maintain backward compatibility.
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-and-tested-by: Bill Fischofer bill.fischofer@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/system_info.h b/include/odp/api/spec/system_info.h index ca4dcdc7..140db7b4 100644 --- a/include/odp/api/spec/system_info.h +++ b/include/odp/api/spec/system_info.h @@ -27,9 +27,28 @@ extern "C" { * Default system huge page size in bytes * * @return Default huge page size in bytes + * @retval 0 on no huge pages */ uint64_t odp_sys_huge_page_size(void);
+/** + * System huge page sizes in bytes + * + * Returns the number of huge page sizes supported by the system. Outputs up to + * 'num' sizes when the 'size' array pointer is not NULL. If return value is + * larger than 'num', there are more supported sizes than the function was + * allowed to output. If return value (N) is less than 'num', only sizes + * [0 ... N-1] have been written. Returned values are ordered from smallest to + * largest. + * + * @param[out] size Points to an array of huge page sizes for output + * @param num Maximum number of huge page sizes to output + * + * @return Number of supported huge page sizes + * @retval <0 on failure + */ +int odp_sys_huge_page_size_all(uint64_t size[], int num); + /** * Page size in bytes *
commit f972ef61a9693b7895cb7f85084c1c53c3b13131 Author: Brian Brooks brian.brooks@arm.com Date: Fri Jun 23 16:04:36 2017 -0500
test: odp_pktio_ordered: add queue size
Signed-off-by: Brian Brooks brian.brooks@arm.com Reviewed-and-tested-by: Yi He yi.he@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/performance/odp_pktio_ordered.c b/test/performance/odp_pktio_ordered.c index d7e43c4b..ed4e2e8e 100644 --- a/test/performance/odp_pktio_ordered.c +++ b/test/performance/odp_pktio_ordered.c @@ -93,6 +93,9 @@ /** Maximum number of pktio queues per interface */ #define MAX_QUEUES 32
+/** Seems to need at least 8192 elements per queue */ +#define QUEUE_SIZE 8192 + /** Maximum number of pktio interfaces */ #define MAX_PKTIOS 8
@@ -1222,6 +1225,7 @@ int main(int argc, char *argv[]) qparam.sched.prio = ODP_SCHED_PRIO_DEFAULT; qparam.sched.sync = ODP_SCHED_SYNC_ATOMIC; qparam.sched.group = ODP_SCHED_GROUP_ALL; + qparam.size = QUEUE_SIZE;
gbl_args->flow_qcontext[i][j].idx = i; gbl_args->flow_qcontext[i][j].input_queue = 0;
commit b6b667b1e95635a6ba77a19078d7d28013bcde1d Author: Bill Fischofer bill.fischofer@linaro.org Date: Tue Jun 13 07:55:15 2017 -0500
doc: userguide: add odp_init_global() documentation for unused features
Update User Guide startup section to include current parameters for odp_init_global() and odp_init_local() as well as optimization hints for unused features.
Signed-off-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/doc/users-guide/users-guide.adoc b/doc/users-guide/users-guide.adoc index 0d1e5eb7..0c7d3f77 100644 --- a/doc/users-guide/users-guide.adoc +++ b/doc/users-guide/users-guide.adoc @@ -558,20 +558,44 @@ calling the terminate functions should only be done when the application is sure it has closed the ingress and subsequently drained all queues, etc.
=== Startup -The first API that must be called by an ODP application is 'odp_init_global()'. +The first API that must be called by an ODP application is `odp_init_global()`: +[source,c] +----- +int odp_init_global(odp_instance_t *instance, + const odp_init_t *param, + const odp_platform_init_t *platform_param); +----- This takes two pointers. The first, `odp_init_t`, contains ODP initialization data that is platform independent and portable, while the second, `odp_platform_init_t`, is passed unparsed to the implementation to be used for platform specific data that is not yet, or may never be -suitable for the ODP API. +suitable for the ODP API. Each of these parameters is optional and may be +specified as NULL to accept the implementation-defined default initialization +values.
-Calling odp_init_global() establishes the ODP API framework and MUST be +Calling `odp_init_global()` establishes the ODP API framework and MUST be called before any other ODP API may be called. Note that it is only called -once per application. Following global initialization, each thread in turn +once per application. A successful call to `odp_init_global()` returns rc = 0 +and sets the `instance` variable supplied as input to the call to an handle +representing this unique ODP instance. + +The `odp_init_t` parameter is used to specify various customizations to the +ODP environment being established by this call. For example, the caller can +specify the maximum number of worker threads it will use, the thread masks +associated with these threads, as well as whether the default logging or +abort functions are to be overridden with an application-supplied handler. + +The application may also provide optimization hints to the ODP implementation +if it knows that it will never use specific ODP feature sets, such as the +packet classifier or traffic manager. Implementations may use such hints to +provide optimized behavior to applications that are known not to need these +features. + +Following global initialization, each thread in turn calls 'odp_init_local()'. This establishes the local ODP thread context for that thread and MUST be called before other ODP APIs may be -called by that thread. The sole argument to this call is the _thread type_, -which is either `ODP_THREAD_WORKER` or `ODP_THREAD_CONTROL`. +called by that thread. The sole argument to this call is the `instance` +variable returned by `odp_init_global()`.
=== Shutdown Shutdown is the logical reverse of the initialization procedure, with
commit bae53291795e9c19cbfde9c0d0e11a19d9870623 Author: Petri Savolainen petri.savolainen@linaro.org Date: Wed Feb 22 17:08:22 2017 +0200
abi: event: add ODP_EVENT_IPSEC_RESULT
Update ABI spec with the new IPSEC event type.
Signed-off-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/arch/default/api/abi/event.h b/include/odp/arch/default/api/abi/event.h index fd86f25c..336938f5 100644 --- a/include/odp/arch/default/api/abi/event.h +++ b/include/odp/arch/default/api/abi/event.h @@ -28,7 +28,8 @@ typedef enum odp_event_type_t { ODP_EVENT_BUFFER = 1, ODP_EVENT_PACKET = 2, ODP_EVENT_TIMEOUT = 3, - ODP_EVENT_CRYPTO_COMPL = 4 + ODP_EVENT_CRYPTO_COMPL = 4, + ODP_EVENT_IPSEC_RESULT = 5 } odp_event_type_t;
/**
commit dd31792d10772c3e41519fc0b6d68cf13b0fe9d4 Author: Christophe Milard christophe.milard@linaro.org Date: Tue Jan 24 18:48:05 2017 +0100
test: preventing odp.conf loading for tests
The tests should not be affected by any system or user ODP configuration file. The ODP_SYSCONFIG_FILE environment variables is therefore set to "none" in TESTS_ENVIRONMENT. Tests which need specific a configuration file will have to overwrite this setting. Note that tests ran manually (not using make check) may be affected by configuration files. Setting ODP_SYSCONFIG_FILE to an appropriate value (possibly "none") may be required.
Signed-off-by: Christophe Milard christophe.milard@linaro.org Reviewed-and-tested-by: Yi He yi.he@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/Makefile.inc b/test/Makefile.inc index aa20ba26..f7c0da21 100644 --- a/test/Makefile.inc +++ b/test/Makefile.inc @@ -22,4 +22,6 @@ AM_LDFLAGS = -L$(LIB) -static
@VALGRIND_CHECK_RULES@
-TESTS_ENVIRONMENT= ODP_PLATFORM=${with_platform} EXEEXT=${EXEEXT} +TESTS_ENVIRONMENT = ODP_PLATFORM=${with_platform} \ + EXEEXT=${EXEEXT} \ + ODP_SYSCONFIG_FILE=none
-----------------------------------------------------------------------
Summary of changes: .travis.yml | 25 ++++---- CHANGELOG | 15 +++++ Makefile.am | 8 ++- configure.ac | 4 +- doc/Makefile.am | 3 +- doc/application-api-guide/Doxyfile | 1 - doc/application-api-guide/Makefile.am | 1 + doc/driver-api-guide/.gitignore | 1 - doc/driver-api-guide/Doxyfile | 9 --- doc/driver-api-guide/Makefile.am | 5 -- doc/driver-api-guide/odp.dox | 20 ------ doc/implementers-guide/implementers-guide.adoc | 72 +++++----------------- doc/m4/configure.m4 | 3 +- example/l2fwd/README | 3 +- example/l2fwd/odp_l2fwd.c | 2 +- include/odp/drv/spec/README | 4 -- include/odp/drv/spec/compiler.h | 51 --------------- include/odp/drv/spec/std_types.h | 40 ------------ include/odp_drv.h | 27 -------- platform/linux-generic/Makefile.am | 4 -- platform/linux-generic/include/odp/drv/README | 2 - platform/linux-generic/include/odp/drv/compiler.h | 34 ---------- platform/linux-generic/include/odp/drv/std_types.h | 42 ------------- platform/linux-generic/odp_crypto.c | 19 ++---- scripts/ci-checkpatches.sh | 22 ++++--- test/performance/odp_l2fwd_run.sh | 6 +- 26 files changed, 78 insertions(+), 345 deletions(-) delete mode 100644 doc/driver-api-guide/.gitignore delete mode 100644 doc/driver-api-guide/Doxyfile delete mode 100644 doc/driver-api-guide/Makefile.am delete mode 100644 doc/driver-api-guide/odp.dox delete mode 100644 include/odp/drv/spec/README delete mode 100644 include/odp/drv/spec/compiler.h delete mode 100644 include/odp/drv/spec/std_types.h delete mode 100644 include/odp_drv.h delete mode 100644 platform/linux-generic/include/odp/drv/README delete mode 100644 platform/linux-generic/include/odp/drv/compiler.h delete mode 100644 platform/linux-generic/include/odp/drv/std_types.h
hooks/post-receive