diff --git a/CHANGELOGS.md b/CHANGELOGS.md index 7f52e1e9e..28b6dea6c 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -1,4 +1,4 @@ -dragonpilot beta3 2023.08.09 +dragonpilot beta3 2023.08.11 ======================= * openpilot master branch on 2023.07.21. diff --git a/RELEASES.md b/RELEASES.md index b4dbc3ba6..e9cfd69f7 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,6 +1,6 @@ Version 0.9.5 (202X-XX-XX) ======================== - +* Lexus IS 2023 support thanks to L3R5! Version 0.9.4 (2023-07-27) ======================== diff --git a/body/board/obj/body.bin b/body/board/obj/body.bin index 0a29c47f4..0b01c729a 100755 Binary files a/body/board/obj/body.bin and b/body/board/obj/body.bin differ diff --git a/body/board/obj/body.bin.signed b/body/board/obj/body.bin.signed index 35875a502..b1efe4807 100644 Binary files a/body/board/obj/body.bin.signed and b/body/board/obj/body.bin.signed differ diff --git a/body/board/obj/body.elf b/body/board/obj/body.elf index 207d947ed..93fb54d42 100755 Binary files a/body/board/obj/body.elf and b/body/board/obj/body.elf differ diff --git a/body/board/obj/bootstub.body.bin b/body/board/obj/bootstub.body.bin index 28709d424..22370ee3a 100755 Binary files a/body/board/obj/bootstub.body.bin and b/body/board/obj/bootstub.body.bin differ diff --git a/body/board/obj/bootstub.body.elf b/body/board/obj/bootstub.body.elf index 2106fcd5e..03a17c89d 100755 Binary files a/body/board/obj/bootstub.body.elf and b/body/board/obj/bootstub.body.elf differ diff --git a/body/board/obj/gitversion.h b/body/board/obj/gitversion.h index d56e55852..b66a60dab 100644 --- a/body/board/obj/gitversion.h +++ b/body/board/obj/gitversion.h @@ -1 +1 @@ -const uint8_t gitversion[8] = "496875e4"; +const uint8_t gitversion[8] = "84f79f7e"; diff --git a/cereal/messaging/__init__.py b/cereal/messaging/__init__.py index 5a863f130..efddea1b1 100644 --- a/cereal/messaging/__init__.py +++ b/cereal/messaging/__init__.py @@ -1,6 +1,7 @@ # must be built with scons -from .messaging_pyx import Context, Poller, SubSocket, PubSocket, SocketEventHandle, toggle_fake_events, set_fake_prefix, get_fake_prefix, delete_fake_prefix, wait_for_one_event # pylint: disable=no-name-in-module, import-error -from .messaging_pyx import MultiplePublishersError, MessagingError # pylint: disable=no-name-in-module, import-error +from .messaging_pyx import Context, Poller, SubSocket, PubSocket, SocketEventHandle, toggle_fake_events, \ + set_fake_prefix, get_fake_prefix, delete_fake_prefix, wait_for_one_event +from .messaging_pyx import MultiplePublishersError, MessagingError import os import capnp diff --git a/cereal/messaging/messaging.h b/cereal/messaging/messaging.h index 483b2465c..d768ccb9b 100644 --- a/cereal/messaging/messaging.h +++ b/cereal/messaging/messaging.h @@ -116,6 +116,18 @@ public: return heapArray_.asBytes(); } + size_t getSerializedSize() { + return capnp::computeSerializedSizeInWords(*this) * sizeof(capnp::word); + } + + int serializeToBuffer(unsigned char *buffer, size_t buffer_size) { + size_t serialized_size = getSerializedSize(); + if (serialized_size > buffer_size) { return -1; } + kj::ArrayOutputStream out(kj::ArrayPtr(buffer, buffer_size)); + capnp::writeMessage(out, *this); + return serialized_size; + } + private: kj::Array heapArray_; }; diff --git a/cereal/visionipc/__init__.py b/cereal/visionipc/__init__.py index 3e11bbbb7..7adfc58d1 100644 --- a/cereal/visionipc/__init__.py +++ b/cereal/visionipc/__init__.py @@ -1,4 +1,4 @@ -from cereal.visionipc.visionipc_pyx import VisionBuf, VisionIpcClient, VisionIpcServer, VisionStreamType, get_endpoint_name # pylint: disable=no-name-in-module, import-error +from cereal.visionipc.visionipc_pyx import VisionBuf, VisionIpcClient, VisionIpcServer, VisionStreamType, get_endpoint_name assert VisionBuf assert VisionIpcClient assert VisionIpcServer diff --git a/cereal/visionipc/visionipc_pyx.so b/cereal/visionipc/visionipc_pyx.so index 000151895..74a6b09eb 100755 Binary files a/cereal/visionipc/visionipc_pyx.so and b/cereal/visionipc/visionipc_pyx.so differ diff --git a/common/params_pyx.so b/common/params_pyx.so index 4022b9ed5..374a7f385 100755 Binary files a/common/params_pyx.so and b/common/params_pyx.so differ diff --git a/common/version.h b/common/version.h index f2fd9d1b1..8546f4323 100644 --- a/common/version.h +++ b/common/version.h @@ -1 +1 @@ -#define COMMA_VERSION "2023.08.09" +#define COMMA_VERSION "2023.08.11" diff --git a/docs/CARS.md b/docs/CARS.md index df938e8de..9ec07a3e2 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -4,7 +4,7 @@ A supported vehicle is one that just works when you install a comma three. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified. -# 255 Supported Cars +# 257 Supported Cars |Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|Hardware Needed
 |Video| |---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| @@ -36,7 +36,8 @@ A supported vehicle is one that just works when you install a comma three. All s |Ford|Explorer 2020-22|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Ford|Focus 2018[3](#footnotes)|Adaptive Cruise Control with Lane Centering|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Ford|Kuga 2020-22|Adaptive Cruise Control with Lane Centering|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Maverick 2022-23|Co-Pilot360 Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Maverick 2022|LARIAT Luxury|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Maverick 2023|Co-Pilot360 Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Genesis|G70 2018-19|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Genesis|G70 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Genesis|G80 2017|All|Stock|19 mph|37 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai J connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| @@ -137,24 +138,25 @@ A supported vehicle is one that just works when you install a comma three. All s |Kia|Stinger 2018-20|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Kia|Stinger 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Kia|Telluride 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|CT Hybrid 2017-18|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|IS 2017-19|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX Hybrid 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX Hybrid 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RC 2018-20|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX Hybrid 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|UX Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|CT Hybrid 2017-18|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|IS 2017-19|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|IS 2023|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX Hybrid 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX Hybrid 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RC 2018-20|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX Hybrid 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|UX Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Lincoln|Aviator 2020-21|Co-Pilot360 Plus|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |MAN|eTGE 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |MAN|TGE 2017-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| @@ -179,55 +181,55 @@ A supported vehicle is one that just works when you install a comma three. All s |Subaru|XV 2020-21|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| |Škoda|Fabia 2022-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| |Škoda|Kamiq 2021[9,11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Škoda|Karoq 2019-21[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Škoda|Karoq 2019-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Škoda|Kodiaq 2017-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Škoda|Octavia 2015, 2018-19[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Škoda|Octavia RS 2016[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Škoda|Scala 2020-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| |Škoda|Superb 2015-22[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Alphard 2019-20|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Alphard Hybrid 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon Hybrid 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon Hybrid 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR 2021|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR Hybrid 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR Hybrid 2021-22|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry 2018-20|All|Stock|0 mph[8](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry 2021-23|All|openpilot|0 mph[8](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry Hybrid 2018-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry Hybrid 2021-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla 2017-19|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Cross (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Hatchback 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Hybrid (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander Hybrid 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Mirai 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius Prime 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius Prime 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius v 2017|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Sienna 2018-20|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Alphard 2019-20|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Alphard Hybrid 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon Hybrid 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon Hybrid 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR 2021|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR Hybrid 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR Hybrid 2021-22|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry 2018-20|All|Stock|0 mph[8](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry 2021-23|All|openpilot|0 mph[8](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry Hybrid 2018-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry Hybrid 2021-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla 2017-19|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Cross (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Hatchback 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Hybrid (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander Hybrid 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Mirai 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius Prime 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius Prime 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius v 2017|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Sienna 2018-20|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| diff --git a/laika/astro_dog.py b/laika/astro_dog.py index a2d01946a..14dd21ac5 100644 --- a/laika/astro_dog.py +++ b/laika/astro_dog.py @@ -40,7 +40,7 @@ class AstroDog: for const in valid_const: if not isinstance(const, ConstellationId): raise TypeError(f"valid_const must be a list of ConstellationId, got {const}") - + self.auto_update = auto_update self.cache_dir = cache_dir self.clear_old_ephemeris = clear_old_ephemeris diff --git a/laika/downloader.py b/laika/downloader.py index c0bbb584f..f1fd69d75 100644 --- a/laika/downloader.py +++ b/laika/downloader.py @@ -185,7 +185,7 @@ def https_download_file(url): crl.setopt(crl.SSL_CIPHER_LIST, 'DEFAULT@SECLEVEL=1') crl.setopt(crl.COOKIEJAR, '/tmp/cddis_cookies') crl.setopt(pycurl.CONNECTTIMEOUT, 10) - + buf = BytesIO() crl.setopt(crl.WRITEDATA, buf) crl.perform() diff --git a/laika/ephemeris.py b/laika/ephemeris.py index fa8dbdf8d..116db01b5 100644 --- a/laika/ephemeris.py +++ b/laika/ephemeris.py @@ -455,7 +455,7 @@ def parse_rinex_nav_msg_glonass(file_name): e['n4'], e['nt'], toe_seconds = epoch.as_glonass() tb = toe_seconds / (15 * SECS_IN_MIN) - + e['tb'] = tb e['tauN'] = -float(line[23:42]) @@ -465,12 +465,12 @@ def parse_rinex_nav_msg_glonass(file_name): e['x'], e['xVel'], e['xAccel'], e['svHealth'] = read4(f, rinex_ver) e['y'], e['yVel'], e['yAccel'], e['freqNum'] = read4(f, rinex_ver) e['z'], e['zVel'], e['zAccel'], e['age'] = read4(f, rinex_ver) - + # TODO unclear why glonass sometimes has nav messages 3s after correct one if abs(tb - int(tb)) > 1e-3: continue - + data_struct = ephemeris_structs.GlonassEphemeris.new_message(**e) ephem = GLONASSEphemeris(data_struct, file_name=file_name) diff --git a/laika/raw_gnss.py b/laika/raw_gnss.py index 405a96ef2..92ae0d858 100644 --- a/laika/raw_gnss.py +++ b/laika/raw_gnss.py @@ -53,8 +53,8 @@ class GNSSMeasurement: SAT_POS = slice(8, 11) SAT_VEL = slice(11, 14) - def __init__(self, constellation_id: ConstellationId, sv_id: int, recv_time_week: int, recv_time_sec: float, observables: Dict[str, float], observables_std: Dict[str, float], - glonass_freq: Union[int, float, None] = None): + def __init__(self, constellation_id: ConstellationId, sv_id: int, recv_time_week: int, recv_time_sec: float, observables: Dict[str, float], + observables_std: Dict[str, float], glonass_freq: Union[int, float, None] = None): # Metadata # prn: unique satellite id self.prn = "%s%02d" % (constellation_id.to_rinex_char(), sv_id) # satellite ID in rinex convention @@ -201,7 +201,8 @@ def read_raw_qcom(report): # logging.debug(recv_time, report.source, time_bias_ms, dr) measurements = [] for i in report.sv: - nmea_id = i.svId # todo change svId to nmea_id in cereal message. Or better: change the publisher to publish correct svId's, since constellation id is also given + # todo change svId to nmea_id in cereal message. Or better: change the publisher to publish correct svId's, since constellation id is also given + nmea_id = i.svId if nmea_id == 255: # TODO nmea_id is not valid. Fix publisher continue diff --git a/opendbc/can/libdbc.so b/opendbc/can/libdbc.so index 059ac2177..12dc9003f 100755 Binary files a/opendbc/can/libdbc.so and b/opendbc/can/libdbc.so differ diff --git a/opendbc/can/parser_pyx.cpp b/opendbc/can/parser_pyx.cpp index e24fe9838..242ad015b 100644 --- a/opendbc/can/parser_pyx.cpp +++ b/opendbc/can/parser_pyx.cpp @@ -6773,7 +6773,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANDefine_1__init__(PyObject *__ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANDefine *__pyx_v_self, PyObject *__pyx_v_dbc_name) { PyObject *__pyx_v_address_to_msg_name = NULL; - std::vector ::size_type __pyx_v_i; + std::vector ::size_type __pyx_v_i; struct Msg __pyx_v_msg; PyObject *__pyx_v_name = NULL; uint32_t __pyx_v_address; @@ -6795,7 +6795,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_ PyObject *__pyx_t_6 = NULL; std::vector ::size_type __pyx_t_7; std::vector ::size_type __pyx_t_8; - std::vector ::size_type __pyx_t_9; + std::vector ::size_type __pyx_t_9; uint32_t __pyx_t_10; PyObject *__pyx_t_11 = NULL; int __pyx_t_12; @@ -6989,10 +6989,10 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_ * val = self.dbc[0].vals[i] * */ - __pyx_t_13 = (__pyx_v_self->dbc[0]).vals.size(); - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_14; __pyx_t_7+=1) { - __pyx_v_i = __pyx_t_7; + __pyx_t_9 = (__pyx_v_self->dbc[0]).vals.size(); + __pyx_t_13 = __pyx_t_9; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_i = __pyx_t_14; /* "opendbc/can/parser_pyx.pyx":168 * diff --git a/opendbc/can/parser_pyx.so b/opendbc/can/parser_pyx.so index 943050310..18bcca569 100755 Binary files a/opendbc/can/parser_pyx.so and b/opendbc/can/parser_pyx.so differ diff --git a/opendbc/toyota_new_mc_pt_generated.dbc b/opendbc/toyota_new_mc_pt_generated.dbc index 476e70f31..e9d95ccd3 100644 --- a/opendbc/toyota_new_mc_pt_generated.dbc +++ b/opendbc/toyota_new_mc_pt_generated.dbc @@ -253,6 +253,7 @@ BO_ 1005 REVERSE_CAMERA_STATE: 2 BGM SG_ REVERSE_CAMERA_GUIDELINES : 9|2@0+ (1,0) [1|3] "" XXX BO_ 1009 PCM_CRUISE_ALT: 8 XXX + SG_ PCM_FOLLOW_DISTANCE : 4|2@1+ (1,0) [0|3] "" XXX SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX SG_ UI_SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX @@ -260,7 +261,7 @@ BO_ 1009 PCM_CRUISE_ALT: 8 XXX BO_ 1020 SOLAR_SENSOR: 8 XXX SG_ LUX_SENSOR : 55|13@0+ (1,0) [0|0] "" XXX -BO_ 1041 ACC_HUD: 8 DSU +BO_ 1041 PCS_HUD: 8 DSU SG_ PCS_INDICATOR : 7|2@0+ (1,0) [0|3] "" XXX SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX @@ -432,7 +433,7 @@ BO_ 1880 DEBUG: 8 XXX SG_ BLINDSPOTD2 : 55|8@0+ (1,0) [0|255] "" XXX CM_ SG_ 36 YAW_RATE "verify"; -CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd"; +CM_ SG_ 36 ACCEL_X "x-axis accel"; CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set"; CM_ SG_ 37 STEER_RATE "factor is tbd"; CM_ SG_ 466 NEUTRAL_FORCE "force in newtons the engine/electric motors are applying without any acceleration commands or user input"; @@ -447,7 +448,7 @@ CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered"; CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque"; CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value"; CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active"; -CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control"; +CM_ SG_ 643 _COUNTER "only used on cars that use this msg for cruise control"; CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control"; CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking"; CM_ SG_ 835 ACC_TYPE "if 2, car is likely to have a permanent low speed lockout. 1 is ok"; @@ -535,6 +536,7 @@ VAL_ 956 SPORT_ON_2 0 "off" 1 "on"; VAL_ 956 B_GEAR_ENGAGED 0 "off" 1 "on"; VAL_ 956 DRIVE_ENGAGED 0 "off" 1 "on"; VAL_ 1005 REVERSE_CAMERA_GUIDELINES 3 "No guidelines" 2 "Static guidelines" 1 "Active guidelines"; +VAL_ 1009 PCM_FOLLOW_DISTANCE 1 "far" 2 "medium" 3 "close"; VAL_ 1041 PCS_INDICATOR 2 "PCS Faulted" 1 "PCS Turned Off By User" 0 "PCS Enabled"; VAL_ 1041 PCS_SENSITIVITY 64 "high sensitivity" 128 "mid sensitivity" 192 "low sensitivity" 0 "off"; VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none"; diff --git a/opendbc/toyota_nodsu_pt_generated.dbc b/opendbc/toyota_nodsu_pt_generated.dbc index 37065ab6e..7cebae366 100644 --- a/opendbc/toyota_nodsu_pt_generated.dbc +++ b/opendbc/toyota_nodsu_pt_generated.dbc @@ -253,6 +253,7 @@ BO_ 1005 REVERSE_CAMERA_STATE: 2 BGM SG_ REVERSE_CAMERA_GUIDELINES : 9|2@0+ (1,0) [1|3] "" XXX BO_ 1009 PCM_CRUISE_ALT: 8 XXX + SG_ PCM_FOLLOW_DISTANCE : 4|2@1+ (1,0) [0|3] "" XXX SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX SG_ UI_SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX @@ -260,7 +261,7 @@ BO_ 1009 PCM_CRUISE_ALT: 8 XXX BO_ 1020 SOLAR_SENSOR: 8 XXX SG_ LUX_SENSOR : 55|13@0+ (1,0) [0|0] "" XXX -BO_ 1041 ACC_HUD: 8 DSU +BO_ 1041 PCS_HUD: 8 DSU SG_ PCS_INDICATOR : 7|2@0+ (1,0) [0|3] "" XXX SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX @@ -432,7 +433,7 @@ BO_ 1880 DEBUG: 8 XXX SG_ BLINDSPOTD2 : 55|8@0+ (1,0) [0|255] "" XXX CM_ SG_ 36 YAW_RATE "verify"; -CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd"; +CM_ SG_ 36 ACCEL_X "x-axis accel"; CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set"; CM_ SG_ 37 STEER_RATE "factor is tbd"; CM_ SG_ 466 NEUTRAL_FORCE "force in newtons the engine/electric motors are applying without any acceleration commands or user input"; @@ -447,7 +448,7 @@ CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered"; CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque"; CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value"; CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active"; -CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control"; +CM_ SG_ 643 _COUNTER "only used on cars that use this msg for cruise control"; CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control"; CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking"; CM_ SG_ 835 ACC_TYPE "if 2, car is likely to have a permanent low speed lockout. 1 is ok"; @@ -535,6 +536,7 @@ VAL_ 956 SPORT_ON_2 0 "off" 1 "on"; VAL_ 956 B_GEAR_ENGAGED 0 "off" 1 "on"; VAL_ 956 DRIVE_ENGAGED 0 "off" 1 "on"; VAL_ 1005 REVERSE_CAMERA_GUIDELINES 3 "No guidelines" 2 "Static guidelines" 1 "Active guidelines"; +VAL_ 1009 PCM_FOLLOW_DISTANCE 1 "far" 2 "medium" 3 "close"; VAL_ 1041 PCS_INDICATOR 2 "PCS Faulted" 1 "PCS Turned Off By User" 0 "PCS Enabled"; VAL_ 1041 PCS_SENSITIVITY 64 "high sensitivity" 128 "mid sensitivity" 192 "low sensitivity" 0 "off"; VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none"; diff --git a/opendbc/toyota_tnga_k_pt_generated.dbc b/opendbc/toyota_tnga_k_pt_generated.dbc index 3b6b3c534..03008bd08 100644 --- a/opendbc/toyota_tnga_k_pt_generated.dbc +++ b/opendbc/toyota_tnga_k_pt_generated.dbc @@ -253,6 +253,7 @@ BO_ 1005 REVERSE_CAMERA_STATE: 2 BGM SG_ REVERSE_CAMERA_GUIDELINES : 9|2@0+ (1,0) [1|3] "" XXX BO_ 1009 PCM_CRUISE_ALT: 8 XXX + SG_ PCM_FOLLOW_DISTANCE : 4|2@1+ (1,0) [0|3] "" XXX SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX SG_ UI_SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX @@ -260,7 +261,7 @@ BO_ 1009 PCM_CRUISE_ALT: 8 XXX BO_ 1020 SOLAR_SENSOR: 8 XXX SG_ LUX_SENSOR : 55|13@0+ (1,0) [0|0] "" XXX -BO_ 1041 ACC_HUD: 8 DSU +BO_ 1041 PCS_HUD: 8 DSU SG_ PCS_INDICATOR : 7|2@0+ (1,0) [0|3] "" XXX SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX @@ -432,7 +433,7 @@ BO_ 1880 DEBUG: 8 XXX SG_ BLINDSPOTD2 : 55|8@0+ (1,0) [0|255] "" XXX CM_ SG_ 36 YAW_RATE "verify"; -CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd"; +CM_ SG_ 36 ACCEL_X "x-axis accel"; CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set"; CM_ SG_ 37 STEER_RATE "factor is tbd"; CM_ SG_ 466 NEUTRAL_FORCE "force in newtons the engine/electric motors are applying without any acceleration commands or user input"; @@ -447,7 +448,7 @@ CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered"; CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque"; CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value"; CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active"; -CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control"; +CM_ SG_ 643 _COUNTER "only used on cars that use this msg for cruise control"; CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control"; CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking"; CM_ SG_ 835 ACC_TYPE "if 2, car is likely to have a permanent low speed lockout. 1 is ok"; @@ -535,6 +536,7 @@ VAL_ 956 SPORT_ON_2 0 "off" 1 "on"; VAL_ 956 B_GEAR_ENGAGED 0 "off" 1 "on"; VAL_ 956 DRIVE_ENGAGED 0 "off" 1 "on"; VAL_ 1005 REVERSE_CAMERA_GUIDELINES 3 "No guidelines" 2 "Static guidelines" 1 "Active guidelines"; +VAL_ 1009 PCM_FOLLOW_DISTANCE 1 "far" 2 "medium" 3 "close"; VAL_ 1041 PCS_INDICATOR 2 "PCS Faulted" 1 "PCS Turned Off By User" 0 "PCS Enabled"; VAL_ 1041 PCS_SENSITIVITY 64 "high sensitivity" 128 "mid sensitivity" 192 "low sensitivity" 0 "off"; VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none"; diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin index 71bd5bd76..630116c83 100755 Binary files a/panda/board/obj/bootstub.panda.bin and b/panda/board/obj/bootstub.panda.bin differ diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed index bb4426317..7d52f517d 100644 Binary files a/panda/board/obj/panda.bin.signed and b/panda/board/obj/panda.bin.signed differ diff --git a/panda/board/obj/panda_h7.bin.signed b/panda/board/obj/panda_h7.bin.signed index 20b3e19ea..7a8d0c41f 100644 Binary files a/panda/board/obj/panda_h7.bin.signed and b/panda/board/obj/panda_h7.bin.signed differ diff --git a/panda/python/__init__.py b/panda/python/__init__.py index fbd16f15b..5d86092b7 100644 --- a/panda/python/__init__.py +++ b/panda/python/__init__.py @@ -7,7 +7,6 @@ import struct import hashlib import binascii import datetime -import warnings import logging from functools import wraps from typing import Optional @@ -425,10 +424,10 @@ class Panda: if device.getVendorID() == 0xbbaa and device.getProductID() in cls.USB_PIDS: try: serial = device.getSerialNumber() - if len(serial) == 24: + if len(serial) == 24 or serial == "pedal": ret.append(serial) else: - warnings.warn(f"found device with panda descriptors but invalid serial: {serial}", RuntimeWarning) + logging.warning(f"found device with panda descriptors but invalid serial: {serial}", RuntimeWarning) except Exception: continue except Exception: @@ -474,11 +473,7 @@ class Panda: success = True break except Exception: - try: - dfu = PandaDFU(self.get_dfu_serial()) - dfu.recover() - except Exception: - pass + pass time.sleep(0.1) if not success: raise Exception("reconnect failed") @@ -772,13 +767,6 @@ class Panda: def enable_deepsleep(self): self._handle.controlWrite(Panda.REQUEST_OUT, 0xfb, 0, 0, b'') - def set_esp_power(self, on): - self._handle.controlWrite(Panda.REQUEST_OUT, 0xd9, int(on), 0, b'') - - def esp_reset(self, bootmode=0): - self._handle.controlWrite(Panda.REQUEST_OUT, 0xda, int(bootmode), 0, b'') - time.sleep(0.2) - def set_safety_mode(self, mode=SAFETY_SILENT, param=0): self._handle.controlWrite(Panda.REQUEST_OUT, 0xdc, mode, param, b'') diff --git a/panda/python/isotp.py b/panda/python/isotp.py index 45acb6aba..3334deb8e 100644 --- a/panda/python/isotp.py +++ b/panda/python/isotp.py @@ -6,10 +6,8 @@ DEBUG = False def msg(x): if DEBUG: print("S:", binascii.hexlify(x)) - if len(x) <= 7: - ret = bytes([len(x)]) + x - else: - assert False + assert len(x) <= 7 + ret = bytes([len(x)]) + x return ret.ljust(8, b"\x00") kmsgs = [] @@ -56,7 +54,7 @@ def isotp_recv_subaddr(panda, addr, bus, sendaddr, subaddr): dat = msg[2:] else: print(binascii.hexlify(msg)) - assert False + raise AssertionError return dat[0:tlen] @@ -133,7 +131,7 @@ def isotp_recv(panda, addr, bus=0, sendaddr=None, subaddr=None): tlen = msg[0] & 0xf dat = msg[1:] else: - assert False + raise AssertionError dat = dat[0:tlen] if DEBUG: diff --git a/panda/python/spi.py b/panda/python/spi.py index ad0225b1e..0be28f49c 100644 --- a/panda/python/spi.py +++ b/panda/python/spi.py @@ -314,7 +314,7 @@ class STBootloaderSPIHandle(BaseSTBootloaderHandle): self._mcu_type = MCU_TYPE_BY_IDCODE[self.get_chip_id()] except PandaSpiException: - raise PandaSpiException("failed to connect to panda") # pylint: disable=W0707 + raise PandaSpiException("failed to connect to panda") from None def _get_ack(self, spi, timeout=1.0): data = 0x00 diff --git a/rednose/helpers/ekf_sym_pyx.so b/rednose/helpers/ekf_sym_pyx.so index 6abb6a397..28cae4f8f 100755 Binary files a/rednose/helpers/ekf_sym_pyx.so and b/rednose/helpers/ekf_sym_pyx.so differ diff --git a/selfdrive/boardd/boardd b/selfdrive/boardd/boardd index 1ccf4df48..680086b1a 100755 Binary files a/selfdrive/boardd/boardd and b/selfdrive/boardd/boardd differ diff --git a/selfdrive/boardd/boardd_api_impl.so b/selfdrive/boardd/boardd_api_impl.so index 18fd369de..585d5254b 100755 Binary files a/selfdrive/boardd/boardd_api_impl.so and b/selfdrive/boardd/boardd_api_impl.so differ diff --git a/selfdrive/car/body/carcontroller.py b/selfdrive/car/body/carcontroller.py index ee5d3f688..4993b1865 100644 --- a/selfdrive/car/body/carcontroller.py +++ b/selfdrive/car/body/carcontroller.py @@ -56,7 +56,7 @@ class CarController: speed_error = speed_desired - speed_measured if self.wheeled_body is None: - freeze_integrator = ((speed_error < 0 and self.speed_pid.error_integral <= -MAX_POS_INTEGRATOR) or + freeze_integrator = ((speed_error < 0 and self.speed_pid.error_integral <= -MAX_POS_INTEGRATOR) or (speed_error > 0 and self.speed_pid.error_integral >= MAX_POS_INTEGRATOR)) angle_setpoint = self.speed_pid.update(speed_error, freeze_integrator=freeze_integrator) diff --git a/selfdrive/car/chrysler/carstate.py b/selfdrive/car/chrysler/carstate.py index fdc5aa338..3afd45ce9 100644 --- a/selfdrive/car/chrysler/carstate.py +++ b/selfdrive/car/chrysler/carstate.py @@ -80,7 +80,8 @@ class CarState(CarStateBase): ret.accFaulted = cp_cruise.vl["DAS_3"]["ACC_FAULTED"] != 0 if self.CP.carFingerprint in RAM_CARS: - self.auto_high_beam = cp_cam.vl["DAS_6"]['AUTO_HIGH_BEAM_ON'] # Auto High Beam isn't Located in this message on chrysler or jeep currently located in 729 message + # Auto High Beam isn't Located in this message on chrysler or jeep currently located in 729 message + self.auto_high_beam = cp_cam.vl["DAS_6"]['AUTO_HIGH_BEAM_ON'] ret.steerFaultTemporary = cp.vl["EPS_3"]["DASM_FAULT"] == 1 else: ret.steerFaultTemporary = cp.vl["EPS_2"]["LKAS_TEMPORARY_FAULT"] == 1 diff --git a/selfdrive/car/chrysler/values.py b/selfdrive/car/chrysler/values.py index 28415da23..172d3a08c 100644 --- a/selfdrive/car/chrysler/values.py +++ b/selfdrive/car/chrysler/values.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 from enum import IntFlag from dataclasses import dataclass, field from typing import Dict, List, Optional, Union diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py index e6d530e13..3a6aa5e2d 100644 --- a/selfdrive/car/docs_definitions.py +++ b/selfdrive/car/docs_definitions.py @@ -84,7 +84,7 @@ class CarHarness(EnumBase): nidec = BaseCarHarness("Honda Nidec connector") bosch_a = BaseCarHarness("Honda Bosch A connector") bosch_b = BaseCarHarness("Honda Bosch B connector") - toyota = BaseCarHarness("Toyota connector") + toyota_a = BaseCarHarness("Toyota A connector") subaru_a = BaseCarHarness("Subaru A connector") subaru_b = BaseCarHarness("Subaru B connector") subaru_c = BaseCarHarness("Subaru C connector") @@ -128,7 +128,8 @@ class Device(EnumBase): class Kit(EnumBase): - red_panda_kit = BasePart("CAN FD panda kit", parts=[Device.red_panda, Accessory.harness_box, Cable.usb_a_2_a_cable, Cable.usbc_otg_cable, Cable.obd_c_cable_1_5ft]) + red_panda_kit = BasePart("CAN FD panda kit", parts=[Device.red_panda, Accessory.harness_box, + Cable.usb_a_2_a_cable, Cable.usbc_otg_cable, Cable.obd_c_cable_1_5ft]) class Tool(EnumBase): @@ -173,10 +174,12 @@ CarFootnote = namedtuple("CarFootnote", ["text", "column", "docs_only", "shop_fo class CommonFootnote(Enum): EXP_LONG_AVAIL = CarFootnote( - "Experimental openpilot longitudinal control is available behind a toggle; the toggle is only available in non-release branches such as `devel` or `master-ci`. ", + "Experimental openpilot longitudinal control is available behind a toggle; " + + "the toggle is only available in non-release branches such as `devel` or `master-ci`. ", Column.LONGITUDINAL, docs_only=True) EXP_LONG_DSU = CarFootnote( - "By default, this car will use the stock Adaptive Cruise Control (ACC) for longitudinal control. If the Driver Support Unit (DSU) is disconnected, openpilot ACC will replace " + + "By default, this car will use the stock Adaptive Cruise Control (ACC) for longitudinal control. " + + "If the Driver Support Unit (DSU) is disconnected, openpilot ACC will replace " + "stock ACC. NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).", Column.LONGITUDINAL) diff --git a/selfdrive/car/ford/values.py b/selfdrive/car/ford/values.py index 7ce0abb21..eb4b7cca9 100644 --- a/selfdrive/car/ford/values.py +++ b/selfdrive/car/ford/values.py @@ -93,7 +93,10 @@ CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { ], CAR.F_150_MK14: FordCarInfo("Ford F-150 2023", "Co-Pilot360 Active 2.0"), CAR.FOCUS_MK4: FordCarInfo("Ford Focus 2018", "Adaptive Cruise Control with Lane Centering", footnotes=[Footnote.FOCUS]), - CAR.MAVERICK_MK1: FordCarInfo("Ford Maverick 2022-23", "Co-Pilot360 Assist"), + CAR.MAVERICK_MK1: [ + FordCarInfo("Ford Maverick 2022", "LARIAT Luxury"), + FordCarInfo("Ford Maverick 2023", "Co-Pilot360 Assist"), + ], } FW_QUERY_CONFIG = FwQueryConfig( diff --git a/selfdrive/car/gm/carcontroller.py b/selfdrive/car/gm/carcontroller.py index f439eab48..1b2424afa 100644 --- a/selfdrive/car/gm/carcontroller.py +++ b/selfdrive/car/gm/carcontroller.py @@ -111,7 +111,8 @@ class CarController: # GasRegenCmdActive needs to be 1 to avoid cruise faults. It describes the ACC state, not actuation can_sends.append(gmcan.create_gas_regen_command(self.packer_pt, CanBus.POWERTRAIN, self.apply_gas, idx, CC.enabled, at_full_stop)) - can_sends.append(gmcan.create_friction_brake_command(self.packer_ch, friction_brake_bus, self.apply_brake, idx, CC.enabled, near_stop, at_full_stop, self.CP)) + can_sends.append(gmcan.create_friction_brake_command(self.packer_ch, friction_brake_bus, self.apply_brake, + idx, CC.enabled, near_stop, at_full_stop, self.CP)) # Send dashboard UI commands (ACC status) send_fcw = hud_alert == VisualAlert.fcw @@ -162,7 +163,8 @@ class CarController: lka_icon_status = (lka_active, lka_critical) # SW_GMLAN not yet on cam harness, no HUD alerts - if self.CP.networkLocation != NetworkLocation.fwdCamera and (self.frame % self.params.CAMERA_KEEPALIVE_STEP == 0 or lka_icon_status != self.lka_icon_status_last): + if self.CP.networkLocation != NetworkLocation.fwdCamera and \ + (self.frame % self.params.CAMERA_KEEPALIVE_STEP == 0 or lka_icon_status != self.lka_icon_status_last): steer_alert = hud_alert in (VisualAlert.steerRequired, VisualAlert.ldw) can_sends.append(gmcan.create_lka_icon_command(CanBus.SW_GMLAN, lka_active, lka_critical, steer_alert)) self.lka_icon_status_last = lka_icon_status diff --git a/selfdrive/car/gm/values.py b/selfdrive/car/gm/values.py index 4919a1328..3907f1c17 100644 --- a/selfdrive/car/gm/values.py +++ b/selfdrive/car/gm/values.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 from collections import defaultdict from dataclasses import dataclass from enum import Enum diff --git a/selfdrive/car/honda/carstate.py b/selfdrive/car/honda/carstate.py index 35d627990..196f233a3 100644 --- a/selfdrive/car/honda/carstate.py +++ b/selfdrive/car/honda/carstate.py @@ -103,7 +103,8 @@ def get_can_signals(CP, gearbox_msg, main_on_sig_msg): else: checks.append(("CRUISE_PARAMS", 50)) - if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E, CAR.CIVIC_2022, CAR.HRV_3G): + if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, + CAR.ACURA_RDX_3G, CAR.HONDA_E, CAR.CIVIC_2022, CAR.HRV_3G): signals.append(("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK")) elif CP.carFingerprint in (CAR.ODYSSEY_CHN, CAR.FREED, CAR.HRV): signals.append(("DRIVERS_DOOR_OPEN", "SCM_BUTTONS")) @@ -178,7 +179,8 @@ class CarState(CarStateBase): # panda checks if the signal is non-zero ret.standstill = cp.vl["ENGINE_DATA"]["XMISSION_SPEED"] < 1e-5 # TODO: find a common signal across all cars - if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E, CAR.CIVIC_2022, CAR.HRV_3G): + if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, + CAR.ACURA_RDX_3G, CAR.HONDA_E, CAR.CIVIC_2022, CAR.HRV_3G): ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]["DRIVERS_DOOR_OPEN"]) elif self.CP.carFingerprint in (CAR.ODYSSEY_CHN, CAR.FREED, CAR.HRV): ret.doorOpen = bool(cp.vl["SCM_BUTTONS"]["DRIVERS_DOOR_OPEN"]) diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py index 11eff61b3..29c6fa032 100755 --- a/selfdrive/car/honda/interface.py +++ b/selfdrive/car/honda/interface.py @@ -3,7 +3,8 @@ from cereal import car from panda import Panda from common.conversions import Conversions as CV from common.numpy_fast import interp -from selfdrive.car.honda.values import CarControllerParams, CruiseButtons, HondaFlags, CAR, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_ALT_BRAKE_SIGNAL, HONDA_BOSCH_RADARLESS +from selfdrive.car.honda.values import CarControllerParams, CruiseButtons, HondaFlags, CAR, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, \ + HONDA_BOSCH_ALT_BRAKE_SIGNAL, HONDA_BOSCH_RADARLESS from selfdrive.car import STD_CARGO_KG, CivicParams, create_button_event, scale_tire_stiffness, get_safety_config from selfdrive.car.interfaces import CarInterfaceBase from selfdrive.car.disable_ecu import disable_ecu diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py index ba7a42d2a..b149fd2a0 100644 --- a/selfdrive/car/honda/values.py +++ b/selfdrive/car/honda/values.py @@ -123,7 +123,8 @@ CAR_INFO: Dict[str, Optional[Union[HondaCarInfo, List[HondaCarInfo]]]] = { CAR.ACCORDH: HondaCarInfo("Honda Accord Hybrid 2018-22", "All", min_steer_speed=3. * CV.MPH_TO_MS), CAR.CIVIC: HondaCarInfo("Honda Civic 2016-18", min_steer_speed=12. * CV.MPH_TO_MS, video_link="https://youtu.be/-IkImTe1NYE"), CAR.CIVIC_BOSCH: [ - HondaCarInfo("Honda Civic 2019-21", "All", video_link="https://www.youtube.com/watch?v=4Iz1Mz5LGF8", footnotes=[Footnote.CIVIC_DIESEL], min_steer_speed=2. * CV.MPH_TO_MS), + HondaCarInfo("Honda Civic 2019-21", "All", video_link="https://www.youtube.com/watch?v=4Iz1Mz5LGF8", + footnotes=[Footnote.CIVIC_DIESEL], min_steer_speed=2. * CV.MPH_TO_MS), HondaCarInfo("Honda Civic Hatchback 2017-21", min_steer_speed=12. * CV.MPH_TO_MS), ], CAR.CIVIC_BOSCH_DIESEL: None, # same platform diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index 66bf303de..46f86fdc1 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -3,7 +3,8 @@ from cereal import car from panda import Panda from common.conversions import Conversions as CV from selfdrive.car.hyundai.hyundaicanfd import CanBus -from selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, CANFD_RADAR_SCC_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, Buttons +from selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, CANFD_RADAR_SCC_CAR, \ + EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, Buttons from selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR from selfdrive.car import STD_CARGO_KG, create_button_event, scale_tire_stiffness, get_safety_config from selfdrive.car.interfaces import CarInterfaceBase @@ -132,7 +133,8 @@ class CarInterface(CarInterfaceBase): elif candidate == CAR.SANTA_CRUZ_1ST_GEN: ret.mass = 1870. + STD_CARGO_KG # weight from Limited trim - the only supported trim ret.wheelbase = 3.000 - ret.steerRatio = 14.2 # steering ratio according to Hyundai News https://www.hyundainews.com/assets/documents/original/48035-2022SantaCruzProductGuideSpecsv2081521.pdf + # steering ratio according to Hyundai News https://www.hyundainews.com/assets/documents/original/48035-2022SantaCruzProductGuideSpecsv2081521.pdf + ret.steerRatio = 14.2 # Kia elif candidate == CAR.KIA_SORENTO: @@ -211,7 +213,8 @@ class CarInterface(CarInterfaceBase): elif candidate == CAR.GENESIS_GV60_EV_1ST_GEN: ret.mass = 2205 + STD_CARGO_KG ret.wheelbase = 2.9 - ret.steerRatio = 12.6 # https://www.motor1.com/reviews/586376/2023-genesis-gv60-first-drive/#:~:text=Relative%20to%20the%20related%20Ioniq,5%2FEV6%27s%2014.3%3A1. + # https://www.motor1.com/reviews/586376/2023-genesis-gv60-first-drive/#:~:text=Relative%20to%20the%20related%20Ioniq,5%2FEV6%27s%2014.3%3A1. + ret.steerRatio = 12.6 elif candidate == CAR.GENESIS_G70: ret.steerActuatorDelay = 0.1 ret.mass = 1640.0 + STD_CARGO_KG diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index 047aa7e33..fc0f8c492 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 import re from dataclasses import dataclass from enum import Enum, IntFlag @@ -161,9 +162,11 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { HyundaiCarInfo("Hyundai i30 2017-19", car_parts=CarParts.common([CarHarness.hyundai_e])), ], CAR.ELANTRA_2021: HyundaiCarInfo("Hyundai Elantra 2021-23", video_link="https://youtu.be/_EdYQtV52-c", car_parts=CarParts.common([CarHarness.hyundai_k])), - CAR.ELANTRA_HEV_2021: HyundaiCarInfo("Hyundai Elantra Hybrid 2021-23", video_link="https://youtu.be/_EdYQtV52-c", car_parts=CarParts.common([CarHarness.hyundai_k])), + CAR.ELANTRA_HEV_2021: HyundaiCarInfo("Hyundai Elantra Hybrid 2021-23", video_link="https://youtu.be/_EdYQtV52-c", + car_parts=CarParts.common([CarHarness.hyundai_k])), CAR.HYUNDAI_GENESIS: [ - HyundaiCarInfo("Hyundai Genesis 2015-16", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_j])), # TODO: check 2015 packages + # TODO: check 2015 packages + HyundaiCarInfo("Hyundai Genesis 2015-16", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_j])), HyundaiCarInfo("Genesis G80 2017", "All", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_j])), ], CAR.IONIQ: HyundaiCarInfo("Hyundai Ioniq Hybrid 2017-19", car_parts=CarParts.common([CarHarness.hyundai_c])), @@ -175,12 +178,15 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { CAR.KONA: HyundaiCarInfo("Hyundai Kona 2020", car_parts=CarParts.common([CarHarness.hyundai_b])), CAR.KONA_EV: HyundaiCarInfo("Hyundai Kona Electric 2018-21", car_parts=CarParts.common([CarHarness.hyundai_g])), CAR.KONA_EV_2022: HyundaiCarInfo("Hyundai Kona Electric 2022", car_parts=CarParts.common([CarHarness.hyundai_o])), - CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020", video_link="https://youtu.be/0dwpAHiZgFo", car_parts=CarParts.common([CarHarness.hyundai_i])), # TODO: check packages + CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020", video_link="https://youtu.be/0dwpAHiZgFo", + car_parts=CarParts.common([CarHarness.hyundai_i])), # TODO: check packages CAR.SANTA_FE: HyundaiCarInfo("Hyundai Santa Fe 2019-20", "All", car_parts=CarParts.common([CarHarness.hyundai_d])), - CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-23", "All", video_link="https://youtu.be/VnHzSTygTS4", car_parts=CarParts.common([CarHarness.hyundai_l])), + CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-23", "All", video_link="https://youtu.be/VnHzSTygTS4", + car_parts=CarParts.common([CarHarness.hyundai_l])), CAR.SANTA_FE_HEV_2022: HyundaiCarInfo("Hyundai Santa Fe Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), CAR.SANTA_FE_PHEV_2022: HyundaiCarInfo("Hyundai Santa Fe Plug-in Hybrid 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), - CAR.SONATA: HyundaiCarInfo("Hyundai Sonata 2020-23", "All", video_link="https://www.youtube.com/watch?v=ix63r9kE3Fw", car_parts=CarParts.common([CarHarness.hyundai_a])), + CAR.SONATA: HyundaiCarInfo("Hyundai Sonata 2020-23", "All", video_link="https://www.youtube.com/watch?v=ix63r9kE3Fw", + car_parts=CarParts.common([CarHarness.hyundai_a])), CAR.SONATA_LF: HyundaiCarInfo("Hyundai Sonata 2018-19", car_parts=CarParts.common([CarHarness.hyundai_e])), CAR.TUCSON: [ HyundaiCarInfo("Hyundai Tucson 2021", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_l])), @@ -198,7 +204,8 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { HyundaiCarInfo("Hyundai Ioniq 5 (with HDA II) 2022-23", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_q])), ], CAR.IONIQ_6: [ - HyundaiCarInfo("Hyundai Ioniq 6 (without HDA II) 2023", "Highway Driving Assist", car_parts=CarParts.common([CarHarness.hyundai_k])), # TODO: unknown + # TODO: unknown + HyundaiCarInfo("Hyundai Ioniq 6 (without HDA II) 2023", "Highway Driving Assist", car_parts=CarParts.common([CarHarness.hyundai_k])), HyundaiCarInfo("Hyundai Ioniq 6 (with HDA II) 2023", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_p])), ], CAR.TUCSON_4TH_GEN: [ @@ -230,7 +237,8 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { HyundaiCarInfo("Kia Niro Hybrid 2021-22", car_parts=CarParts.common([CarHarness.hyundai_f])), # TODO: 2021 could be hyundai_d, verify ], CAR.KIA_NIRO_HEV_2ND_GEN: HyundaiCarInfo("Kia Niro Hybrid 2023", car_parts=CarParts.common([CarHarness.hyundai_a])), - CAR.KIA_OPTIMA_G4: HyundaiCarInfo("Kia Optima 2017", "Advanced Smart Cruise Control", car_parts=CarParts.common([CarHarness.hyundai_b])), # TODO: may support 2016, 2018 + CAR.KIA_OPTIMA_G4: HyundaiCarInfo("Kia Optima 2017", "Advanced Smart Cruise Control", + car_parts=CarParts.common([CarHarness.hyundai_b])), # TODO: may support 2016, 2018 CAR.KIA_OPTIMA_G4_FL: HyundaiCarInfo("Kia Optima 2019-20", car_parts=CarParts.common([CarHarness.hyundai_g])), CAR.KIA_OPTIMA_H: [ HyundaiCarInfo("Kia Optima Hybrid 2017", "Advanced Smart Cruise Control"), # TODO: may support adjacent years @@ -239,13 +247,15 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { CAR.KIA_SELTOS: HyundaiCarInfo("Kia Seltos 2021", car_parts=CarParts.common([CarHarness.hyundai_a])), CAR.KIA_SPORTAGE_5TH_GEN: HyundaiCarInfo("Kia Sportage 2023", car_parts=CarParts.common([CarHarness.hyundai_n])), CAR.KIA_SORENTO: [ - HyundaiCarInfo("Kia Sorento 2018", "Advanced Smart Cruise Control", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", car_parts=CarParts.common([CarHarness.hyundai_c])), + HyundaiCarInfo("Kia Sorento 2018", "Advanced Smart Cruise Control", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", + car_parts=CarParts.common([CarHarness.hyundai_c])), HyundaiCarInfo("Kia Sorento 2019", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", car_parts=CarParts.common([CarHarness.hyundai_e])), ], CAR.KIA_SORENTO_4TH_GEN: HyundaiCarInfo("Kia Sorento 2021-23", car_parts=CarParts.common([CarHarness.hyundai_k])), CAR.KIA_SORENTO_PHEV_4TH_GEN: HyundaiCarInfo("Kia Sorento Plug-in Hybrid 2022-23", car_parts=CarParts.common([CarHarness.hyundai_a])), CAR.KIA_SPORTAGE_HYBRID_5TH_GEN: HyundaiCarInfo("Kia Sportage Hybrid 2023", car_parts=CarParts.common([CarHarness.hyundai_n])), - CAR.KIA_STINGER: HyundaiCarInfo("Kia Stinger 2018-20", video_link="https://www.youtube.com/watch?v=MJ94qoofYw0", car_parts=CarParts.common([CarHarness.hyundai_c])), + CAR.KIA_STINGER: HyundaiCarInfo("Kia Stinger 2018-20", video_link="https://www.youtube.com/watch?v=MJ94qoofYw0", + car_parts=CarParts.common([CarHarness.hyundai_c])), CAR.KIA_STINGER_2022: HyundaiCarInfo("Kia Stinger 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), CAR.KIA_CEED: HyundaiCarInfo("Kia Ceed 2019", car_parts=CarParts.common([CarHarness.hyundai_e])), CAR.KIA_EV6: [ @@ -1899,7 +1909,8 @@ FW_VERSIONS = { } CHECKSUM = { - "crc8": [CAR.SANTA_FE, CAR.SONATA, CAR.PALISADE, CAR.KIA_SELTOS, CAR.ELANTRA_2021, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, CAR.SANTA_FE_2022, CAR.KIA_K5_2021, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.KIA_K5_HEV_2020], + "crc8": [CAR.SANTA_FE, CAR.SONATA, CAR.PALISADE, CAR.KIA_SELTOS, CAR.ELANTRA_2021, CAR.ELANTRA_HEV_2021, + CAR.SONATA_HYBRID, CAR.SANTA_FE_2022, CAR.KIA_K5_2021, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.KIA_K5_HEV_2020], "6B": [CAR.KIA_SORENTO, CAR.HYUNDAI_GENESIS], } @@ -1907,10 +1918,16 @@ CAN_GEARS = { # which message has the gear "use_cluster_gears": {CAR.ELANTRA, CAR.KONA}, "use_tcu_gears": {CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.SONATA_LF, CAR.VELOSTER, CAR.TUCSON}, - "use_elect_gears": {CAR.KIA_NIRO_EV, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.KONA_EV_2022, CAR.KIA_K5_HEV_2020}, + "use_elect_gears": {CAR.KIA_NIRO_EV, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, + CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, + CAR.KONA_HEV, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, + CAR.KONA_EV_2022, CAR.KIA_K5_HEV_2020}, } -CANFD_CAR = {CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.TUCSON_4TH_GEN, CAR.TUCSON_HYBRID_4TH_GEN, CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, CAR.SANTA_CRUZ_1ST_GEN, CAR.KIA_SPORTAGE_5TH_GEN, CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, CAR.GENESIS_GV60_EV_1ST_GEN, CAR.KIA_SORENTO_4TH_GEN, CAR.KIA_NIRO_HEV_2ND_GEN, CAR.KIA_NIRO_EV_2ND_GEN, CAR.GENESIS_GV80, CAR.KIA_CARNIVAL_4TH_GEN} +CANFD_CAR = {CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.TUCSON_4TH_GEN, CAR.TUCSON_HYBRID_4TH_GEN, CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, + CAR.SANTA_CRUZ_1ST_GEN, CAR.KIA_SPORTAGE_5TH_GEN, CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, + CAR.GENESIS_GV60_EV_1ST_GEN, CAR.KIA_SORENTO_4TH_GEN, CAR.KIA_NIRO_HEV_2ND_GEN, CAR.KIA_NIRO_EV_2ND_GEN, + CAR.GENESIS_GV80, CAR.KIA_CARNIVAL_4TH_GEN} # The radar does SCC on these cars when HDA I, rather than the camera CANFD_RADAR_SCC_CAR = {CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, CAR.KIA_SORENTO_4TH_GEN, CAR.GENESIS_GV80, CAR.KIA_CARNIVAL_4TH_GEN} @@ -1918,11 +1935,17 @@ CANFD_RADAR_SCC_CAR = {CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, C # The camera does SCC on these cars, rather than the radar CAMERA_SCC_CAR = {CAR.KONA_EV_2022, } -HYBRID_CAR = {CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.TUCSON_HYBRID_4TH_GEN, CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, CAR.KIA_K5_HEV_2020, CAR.KIA_NIRO_HEV_2ND_GEN} # these cars use a different gas signal -EV_CAR = {CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.KIA_NIRO_EV, CAR.KIA_NIRO_EV_2ND_GEN, CAR.KONA_EV_2022, CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.GENESIS_GV60_EV_1ST_GEN} +# these cars use a different gas signal +HYBRID_CAR = {CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ, + CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.TUCSON_HYBRID_4TH_GEN, + CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, CAR.KIA_K5_HEV_2020, CAR.KIA_NIRO_HEV_2ND_GEN} + +EV_CAR = {CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.KIA_NIRO_EV, CAR.KIA_NIRO_EV_2ND_GEN, CAR.KONA_EV_2022, + CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.GENESIS_GV60_EV_1ST_GEN} # these cars require a special panda safety mode due to missing counters and checksums in the messages -LEGACY_SAFETY_MODE_CAR = {CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV, CAR.IONIQ, CAR.KONA_EV, CAR.KIA_SORENTO, CAR.SONATA_LF, CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.VELOSTER, +LEGACY_SAFETY_MODE_CAR = {CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV, CAR.IONIQ, CAR.KONA_EV, + CAR.KIA_SORENTO, CAR.SONATA_LF, CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.VELOSTER, CAR.GENESIS_G70, CAR.GENESIS_G80, CAR.KIA_CEED, CAR.ELANTRA, CAR.IONIQ_HEV_2022} # If 0x500 is present on bus 1 it probably has a Mando radar outputting radar points. diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index ec9f4a0f0..99df4cf4b 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -115,7 +115,8 @@ class CarInterfaceBase(ABC): @staticmethod @abstractmethod - def _get_params(ret: car.CarParams, candidate: str, fingerprint: Dict[int, Dict[int, int]], car_fw: List[car.CarParams.CarFw], experimental_long: bool, docs: bool): + def _get_params(ret: car.CarParams, candidate: str, fingerprint: Dict[int, Dict[int, int]], + car_fw: List[car.CarParams.CarFw], experimental_long: bool, docs: bool): raise NotImplementedError @staticmethod diff --git a/selfdrive/car/nissan/carcontroller.py b/selfdrive/car/nissan/carcontroller.py index 4e99d2490..2c628b102 100644 --- a/selfdrive/car/nissan/carcontroller.py +++ b/selfdrive/car/nissan/carcontroller.py @@ -66,8 +66,8 @@ class CarController: # Below are the HUD messages. We copy the stock message and modify if self.CP.carFingerprint != CAR.ALTIMA: if self.frame % 2 == 0: - can_sends.append(nissancan.create_lkas_hud_msg( - self.packer, CS.lkas_hud_msg, CC.enabled, hud_control.leftLaneVisible, hud_control.rightLaneVisible, hud_control.leftLaneDepart, hud_control.rightLaneDepart)) + can_sends.append(nissancan.create_lkas_hud_msg(self.packer, CS.lkas_hud_msg, CC.enabled, hud_control.leftLaneVisible, hud_control.rightLaneVisible, + hud_control.leftLaneDepart, hud_control.rightLaneDepart)) if self.frame % 50 == 0: can_sends.append(nissancan.create_lkas_hud_info_msg( diff --git a/selfdrive/car/nissan/values.py b/selfdrive/car/nissan/values.py index d4e10e11c..e1970ded4 100644 --- a/selfdrive/car/nissan/values.py +++ b/selfdrive/car/nissan/values.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 from dataclasses import dataclass, field from typing import Dict, List, Optional, Union diff --git a/selfdrive/car/tesla/values.py b/selfdrive/car/tesla/values.py index f79e5f009..3333455d1 100644 --- a/selfdrive/car/tesla/values.py +++ b/selfdrive/car/tesla/values.py @@ -1,3 +1,4 @@ +# ruff: noqa: E501 from collections import namedtuple from typing import Dict, List, Union diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py index 005ea114f..3945fbb98 100755 --- a/selfdrive/car/tests/test_car_interfaces.py +++ b/selfdrive/car/tests/test_car_interfaces.py @@ -11,6 +11,7 @@ from common.realtime import DT_CTRL from selfdrive.car import gen_empty_fingerprint from selfdrive.car.car_helpers import interfaces from selfdrive.car.fingerprints import all_known_cars +from selfdrive.car.interfaces import get_interface_attr from selfdrive.test.fuzzy_generation import DrawType, FuzzyGenerator @@ -109,5 +110,31 @@ class TestCarInterfaces(unittest.TestCase): hasattr(radar_interface, '_update') and hasattr(radar_interface, 'trigger_msg'): radar_interface._update([radar_interface.trigger_msg]) + def test_interface_attrs(self): + """Asserts basic behavior of interface attribute getter""" + num_brands = len(get_interface_attr('CAR')) + self.assertGreaterEqual(num_brands, 13) + + # Should return value for all brands when not combining, even if attribute doesn't exist + ret = get_interface_attr('FAKE_ATTR') + self.assertEqual(len(ret), num_brands) + + # Make sure we can combine dicts + ret = get_interface_attr('DBC', combine_brands=True) + self.assertGreaterEqual(len(ret), 170) + + # We don't support combining non-dicts + ret = get_interface_attr('CAR', combine_brands=True) + self.assertEqual(len(ret), 0) + + # If brand has None value, it shouldn't return when ignore_none=True is specified + none_brands = {b for b, v in get_interface_attr('FINGERPRINTS').items() if v is None} + self.assertGreaterEqual(len(none_brands), 1) + + ret = get_interface_attr('FINGERPRINTS', ignore_none=True) + none_brands_in_ret = none_brands.intersection(ret) + self.assertEqual(len(none_brands_in_ret), 0, f'Brands with None values in ignore_none=True result: {none_brands_in_ret}') + + if __name__ == "__main__": unittest.main() diff --git a/selfdrive/car/torque_data/override.yaml b/selfdrive/car/torque_data/override.yaml index d56e96ca6..fa4bb6a17 100644 --- a/selfdrive/car/torque_data/override.yaml +++ b/selfdrive/car/torque_data/override.yaml @@ -54,6 +54,7 @@ KIA NIRO EV 2ND GEN: [2.05, 2.5, 0.14] GENESIS GV80 2023: [2.5, 2.5, 0.1] KIA CARNIVAL 4TH GEN: [1.75, 1.75, 0.15] GMC ACADIA DENALI 2018: [1.6, 1.6, 0.2] +LEXUS IS 2023: [2.0, 2.0, 0.1] # Dashcam or fallback configured as ideal car mock: [10.0, 10, 0.0] diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py index 37765304c..f2dce41d1 100644 --- a/selfdrive/car/toyota/carstate.py +++ b/selfdrive/car/toyota/carstate.py @@ -147,7 +147,7 @@ class CarState(CarStateBase): if self.CP.carFingerprint in (TSS2_CAR | RADAR_ACC_CAR): if not (self.CP.flags & ToyotaFlags.SMART_DSU.value): self.acc_type = cp_acc.vl["ACC_CONTROL"]["ACC_TYPE"] - ret.stockFcw = bool(cp_acc.vl["ACC_HUD"]["FCW"]) + ret.stockFcw = bool(cp_acc.vl["PCS_HUD"]["FCW"]) # some TSS2 cars have low speed lockout permanently set, so ignore on those cars # these cars are identified by an ACC_TYPE value of 2. @@ -334,10 +334,10 @@ class CarState(CarStateBase): ("ACC_CONTROL", 33), ] signals += [ - ("FCW", "ACC_HUD"), + ("FCW", "PCS_HUD"), ] checks += [ - ("ACC_HUD", 1), + ("PCS_HUD", 1), ] if CP.carFingerprint not in (TSS2_CAR - RADAR_ACC_CAR) and not CP.enableDsu: @@ -373,12 +373,12 @@ class CarState(CarStateBase): ("PRECOLLISION_ACTIVE", "PRE_COLLISION"), ("FORCE", "PRE_COLLISION"), ("ACC_TYPE", "ACC_CONTROL"), - ("FCW", "ACC_HUD"), + ("FCW", "PCS_HUD"), ] checks += [ ("PRE_COLLISION", 33), ("ACC_CONTROL", 33), - ("ACC_HUD", 1), + ("PCS_HUD", 1), ] return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 2) diff --git a/selfdrive/car/toyota/interface.py b/selfdrive/car/toyota/interface.py index a7177cdc4..e7df4a337 100644 --- a/selfdrive/car/toyota/interface.py +++ b/selfdrive/car/toyota/interface.py @@ -43,7 +43,7 @@ class CarInterface(CarInterfaceBase): ret.stoppingControl = False # Toyota starts braking more when it thinks you want to stop - stop_and_go = False + stop_and_go = candidate in TSS2_CAR if candidate == CAR.PRIUS: stop_and_go = True @@ -117,7 +117,6 @@ class CarInterface(CarInterfaceBase): elif candidate in (CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, CAR.RAV4_TSS2_2023, CAR.RAV4H_TSS2_2023): - stop_and_go = True ret.wheelbase = 2.68986 ret.steerRatio = 14.3 tire_stiffness_factor = 0.7933 @@ -139,7 +138,6 @@ class CarInterface(CarInterfaceBase): break elif candidate in (CAR.COROLLA_TSS2, CAR.COROLLAH_TSS2): - stop_and_go = True ret.wheelbase = 2.67 # Average between 2.70 for sedan and 2.64 for hatchback ret.steerRatio = 13.9 tire_stiffness_factor = 0.444 # not optimized yet @@ -160,7 +158,7 @@ class CarInterface(CarInterfaceBase): tire_stiffness_factor = 0.444 ret.mass = 4590. * CV.LB_TO_KG + STD_CARGO_KG - elif candidate in (CAR.LEXUS_IS, CAR.LEXUS_RC): + elif candidate in (CAR.LEXUS_IS, CAR.LEXUS_IS_TSS2, CAR.LEXUS_RC): ret.wheelbase = 2.79908 ret.steerRatio = 13.3 tire_stiffness_factor = 0.444 @@ -181,7 +179,6 @@ class CarInterface(CarInterfaceBase): ret.mass = 4070 * CV.LB_TO_KG + STD_CARGO_KG elif candidate == CAR.PRIUS_TSS2: - stop_and_go = True ret.wheelbase = 2.70002 # from toyota online sepc. ret.steerRatio = 13.4 # True steerRatio from older prius tire_stiffness_factor = 0.6371 # hand-tune @@ -195,7 +192,6 @@ class CarInterface(CarInterfaceBase): ret.mass = 4300. * CV.LB_TO_KG + STD_CARGO_KG elif candidate in (CAR.ALPHARD_TSS2, CAR.ALPHARDH_TSS2): - stop_and_go = True ret.wheelbase = 3.00 ret.steerRatio = 14.2 tire_stiffness_factor = 0.444 @@ -220,7 +216,8 @@ class CarInterface(CarInterfaceBase): # In TSS2 cars, the camera does long control found_ecus = [fw.ecu for fw in car_fw] - ret.enableDsu = len(found_ecus) > 0 and Ecu.dsu not in found_ecus and candidate not in (NO_DSU_CAR | UNSUPPORTED_DSU_CAR) and not (ret.flags & ToyotaFlags.SMART_DSU) + ret.enableDsu = len(found_ecus) > 0 and Ecu.dsu not in found_ecus and candidate not in (NO_DSU_CAR | UNSUPPORTED_DSU_CAR) \ + and not (ret.flags & ToyotaFlags.SMART_DSU) ret.enableGasInterceptor = 0x201 in fingerprint[0] # if the smartDSU is detected, openpilot can send ACC_CONTROL and the smartDSU will block it from the DSU or radar. diff --git a/selfdrive/car/toyota/toyotacan.py b/selfdrive/car/toyota/toyotacan.py index 01861c534..0c3330efa 100644 --- a/selfdrive/car/toyota/toyotacan.py +++ b/selfdrive/car/toyota/toyotacan.py @@ -63,7 +63,7 @@ def create_fcw_command(packer, fcw): "PCS_OFF": 1, "PCS_SENSITIVITY": 0, } - return packer.make_can_msg("ACC_HUD", 0, values) + return packer.make_can_msg("PCS_HUD", 0, values) def create_ui_command(packer, steer, chime, left_line, right_line, left_lane_depart, right_lane_depart, enabled, stock_lkas_hud): diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py index 21d61f1ee..ad6a2c639 100644 --- a/selfdrive/car/toyota/values.py +++ b/selfdrive/car/toyota/values.py @@ -90,6 +90,7 @@ class CAR: LEXUS_ES_TSS2 = "LEXUS ES 2019" LEXUS_ESH_TSS2 = "LEXUS ES HYBRID 2019" LEXUS_IS = "LEXUS IS 2018" + LEXUS_IS_TSS2 = "LEXUS IS 2023" LEXUS_NX = "LEXUS NX 2018" LEXUS_NXH = "LEXUS NX HYBRID 2018" LEXUS_NX_TSS2 = "LEXUS NX 2020" @@ -110,7 +111,7 @@ class Footnote(Enum): @dataclass class ToyotaCarInfo(CarInfo): package: str = "All" - car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.toyota])) + car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.toyota_a])) CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = { @@ -183,6 +184,7 @@ CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = { CAR.LEXUS_ES_TSS2: ToyotaCarInfo("Lexus ES 2019-22"), CAR.LEXUS_ESH_TSS2: ToyotaCarInfo("Lexus ES Hybrid 2019-23", video_link="https://youtu.be/BZ29osRVJeg?t=12"), CAR.LEXUS_IS: ToyotaCarInfo("Lexus IS 2017-19"), + CAR.LEXUS_IS_TSS2: ToyotaCarInfo("Lexus IS 2023"), CAR.LEXUS_NX: ToyotaCarInfo("Lexus NX 2018-19"), CAR.LEXUS_NXH: ToyotaCarInfo("Lexus NX Hybrid 2018-19"), CAR.LEXUS_NX_TSS2: ToyotaCarInfo("Lexus NX 2020-21"), @@ -204,23 +206,31 @@ CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = { STATIC_DSU_MSGS = [ (0x128, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON), 1, 3, b'\xf4\x01\x90\x83\x00\x37'), (0x128, (CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH), 1, 3, b'\x03\x00\x20\x00\x00\x52'), - (0x141, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 1, 2, b'\x00\x00\x00\x46'), - (0x160, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 1, 7, b'\x00\x00\x08\x12\x01\x31\x9c\x51'), - (0x161, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON, CAR.LEXUS_RX, CAR.PRIUS_V, CAR.LEXUS_ES), 1, 7, b'\x00\x1e\x00\x00\x00\x80\x07'), + (0x141, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 1, 2, b'\x00\x00\x00\x46'), + (0x160, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 1, 7, b'\x00\x00\x08\x12\x01\x31\x9c\x51'), + (0x161, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON, CAR.LEXUS_RX, CAR.PRIUS_V, CAR.LEXUS_ES), + 1, 7, b'\x00\x1e\x00\x00\x00\x80\x07'), (0X161, (CAR.HIGHLANDERH, CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ESH), 1, 7, b'\x00\x1e\x00\xd4\x00\x00\x5b'), - (0x283, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 3, b'\x00\x00\x00\x00\x00\x00\x8c'), + (0x283, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 3, b'\x00\x00\x00\x00\x00\x00\x8c'), (0x2E6, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH), 0, 3, b'\xff\xf8\x00\x08\x7f\xe0\x00\x4e'), (0x2E7, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH), 0, 3, b'\xa8\x9c\x31\x9c\x00\x00\x00\x02'), (0x33E, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH), 0, 20, b'\x0f\xff\x26\x40\x00\x1f\x00'), - (0x344, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 5, b'\x00\x00\x01\x00\x00\x00\x00\x50'), + (0x344, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 5, b'\x00\x00\x01\x00\x00\x00\x00\x50'), (0x365, (CAR.PRIUS, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.HIGHLANDERH), 0, 20, b'\x00\x00\x00\x80\x03\x00\x08'), - (0x365, (CAR.RAV4, CAR.RAV4H, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 20, b'\x00\x00\x00\x80\xfc\x00\x08'), + (0x365, (CAR.RAV4, CAR.RAV4H, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, + CAR.PRIUS_V), 0, 20, b'\x00\x00\x00\x80\xfc\x00\x08'), (0x366, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.HIGHLANDERH), 0, 20, b'\x00\x00\x4d\x82\x40\x02\x00'), - (0x366, (CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 20, b'\x00\x72\x07\xff\x09\xfe\x00'), + (0x366, (CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), + 0, 20, b'\x00\x72\x07\xff\x09\xfe\x00'), (0x366, (CAR.LEXUS_ES,), 0, 20, b'\x00\x95\x07\xfe\x08\x05\x00'), (0x470, (CAR.PRIUS, CAR.LEXUS_RXH), 1, 100, b'\x00\x00\x02\x7a'), (0x470, (CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.RAV4H, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.PRIUS_V), 1, 100, b'\x00\x00\x01\x79'), - (0x4CB, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDERH, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 100, b'\x0c\x00\x00\x00\x00\x00\x00\x00'), + (0x4CB, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDERH, CAR.HIGHLANDER, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 100, b'\x0c\x00\x00\x00\x00\x00\x00\x00'), ] # Some ECUs that use KWP2000 have their FW versions on non-standard data identifiers. @@ -1244,6 +1254,23 @@ FW_VERSIONS = { b'8646F5301400\x00\x00\x00\x00', ], }, + CAR.LEXUS_IS_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x018966353S1000\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F15265342000\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B53450\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F6201300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F5303400\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + ], + }, CAR.PRIUS: { (Ecu.engine, 0x700, None): [ b'\x02896634761000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', @@ -2261,6 +2288,7 @@ DBC = { CAR.LEXUS_ESH: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), CAR.SIENNA: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_IS: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), + CAR.LEXUS_IS_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.LEXUS_CTH: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), CAR.RAV4H_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.RAV4H_TSS2_2022: dbc_dict('toyota_nodsu_pt_generated', None), @@ -2279,9 +2307,10 @@ DBC = { EPS_SCALE = defaultdict(lambda: 73, {CAR.PRIUS: 66, CAR.COROLLA: 88, CAR.LEXUS_IS: 77, CAR.LEXUS_RC: 77, CAR.LEXUS_CTH: 100, CAR.PRIUS_V: 100}) # Toyota/Lexus Safety Sense 2.0 and 2.5 -TSS2_CAR = {CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4_TSS2_2023, CAR.COROLLA_TSS2, CAR.COROLLAH_TSS2, CAR.LEXUS_ES_TSS2, CAR.LEXUS_ESH_TSS2, CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, - CAR.RAV4H_TSS2_2023, CAR.LEXUS_RX_TSS2, CAR.LEXUS_RXH_TSS2, CAR.HIGHLANDER_TSS2, CAR.HIGHLANDERH_TSS2, CAR.PRIUS_TSS2, CAR.CAMRY_TSS2, CAR.CAMRYH_TSS2, - CAR.MIRAI, CAR.LEXUS_NX_TSS2, CAR.LEXUS_NXH_TSS2, CAR.ALPHARD_TSS2, CAR.AVALON_TSS2, CAR.AVALONH_TSS2, CAR.ALPHARDH_TSS2, CAR.CHR_TSS2, CAR.CHRH_TSS2} +TSS2_CAR = {CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4_TSS2_2023, CAR.COROLLA_TSS2, CAR.COROLLAH_TSS2, CAR.LEXUS_ES_TSS2, CAR.LEXUS_ESH_TSS2, + CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, CAR.RAV4H_TSS2_2023, CAR.LEXUS_RX_TSS2, CAR.LEXUS_RXH_TSS2, CAR.HIGHLANDER_TSS2, + CAR.HIGHLANDERH_TSS2, CAR.PRIUS_TSS2, CAR.CAMRY_TSS2, CAR.CAMRYH_TSS2, CAR.LEXUS_IS_TSS2, CAR.MIRAI, CAR.LEXUS_NX_TSS2, + CAR.LEXUS_NXH_TSS2, CAR.ALPHARD_TSS2, CAR.AVALON_TSS2, CAR.AVALONH_TSS2, CAR.ALPHARDH_TSS2, CAR.CHR_TSS2, CAR.CHRH_TSS2} NO_DSU_CAR = TSS2_CAR | {CAR.CHR, CAR.CHRH, CAR.CAMRY, CAR.CAMRYH} @@ -2294,8 +2323,9 @@ RADAR_ACC_CAR = {CAR.RAV4H_TSS2_2022, CAR.RAV4_TSS2_2022, CAR.RAV4H_TSS2_2023, C # these cars use the Lane Tracing Assist (LTA) message for lateral control ANGLE_CONTROL_CAR = {CAR.RAV4H_TSS2_2023, CAR.RAV4_TSS2_2023} -EV_HYBRID_CAR = {CAR.AVALONH_2019, CAR.AVALONH_TSS2, CAR.CAMRYH, CAR.CAMRYH_TSS2, CAR.CHRH, CAR.CHRH_TSS2, CAR.COROLLAH_TSS2, CAR.HIGHLANDERH, CAR.HIGHLANDERH_TSS2, CAR.PRIUS, - CAR.PRIUS_V, CAR.RAV4H, CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, CAR.RAV4H_TSS2_2023, CAR.LEXUS_CTH, CAR.MIRAI, CAR.LEXUS_ESH, CAR.LEXUS_ESH_TSS2, CAR.LEXUS_NXH, CAR.LEXUS_RXH, +EV_HYBRID_CAR = {CAR.AVALONH_2019, CAR.AVALONH_TSS2, CAR.CAMRYH, CAR.CAMRYH_TSS2, CAR.CHRH, CAR.CHRH_TSS2, CAR.COROLLAH_TSS2, + CAR.HIGHLANDERH, CAR.HIGHLANDERH_TSS2, CAR.PRIUS, CAR.PRIUS_V, CAR.RAV4H, CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, + CAR.RAV4H_TSS2_2023, CAR.LEXUS_CTH, CAR.MIRAI, CAR.LEXUS_ESH, CAR.LEXUS_ESH_TSS2, CAR.LEXUS_NXH, CAR.LEXUS_RXH, CAR.LEXUS_RXH_TSS2, CAR.LEXUS_NXH_TSS2, CAR.PRIUS_TSS2, CAR.ALPHARDH_TSS2} # no resume button press required diff --git a/selfdrive/car/volkswagen/carcontroller.py b/selfdrive/car/volkswagen/carcontroller.py index 4db560621..ddcf80f00 100644 --- a/selfdrive/car/volkswagen/carcontroller.py +++ b/selfdrive/car/volkswagen/carcontroller.py @@ -89,7 +89,8 @@ class CarController: if hud_control.leadVisible and self.frame * DT_CTRL > 1.0: # Don't display lead until we know the scaling factor lead_distance = 512 if CS.upscale_lead_car_signal else 8 acc_hud_status = self.CCS.acc_hud_status_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive) - set_speed = hud_control.setSpeed * CV.MS_TO_KPH # FIXME: follow the recent displayed-speed updates, also use mph_kmh toggle to fix display rounding problem? + # FIXME: follow the recent displayed-speed updates, also use mph_kmh toggle to fix display rounding problem? + set_speed = hud_control.setSpeed * CV.MS_TO_KPH can_sends.append(self.CCS.create_acc_hud_control(self.packer_pt, CANBUS.pt, acc_hud_status, set_speed, lead_distance)) diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py index da984fd18..3a6ed0e30 100755 --- a/selfdrive/car/volkswagen/values.py +++ b/selfdrive/car/volkswagen/values.py @@ -260,7 +260,7 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = { CAR.SEAT_LEON_MK3: VWCarInfo("SEAT Leon 2014-20"), CAR.SKODA_FABIA_MK4: VWCarInfo("Škoda Fabia 2022-23", footnotes=[Footnote.VW_MQB_A0]), CAR.SKODA_KAMIQ_MK1: VWCarInfo("Škoda Kamiq 2021", footnotes=[Footnote.VW_MQB_A0, Footnote.KAMIQ]), - CAR.SKODA_KAROQ_MK1: VWCarInfo("Škoda Karoq 2019-21"), + CAR.SKODA_KAROQ_MK1: VWCarInfo("Škoda Karoq 2019-23"), CAR.SKODA_KODIAQ_MK1: VWCarInfo("Škoda Kodiaq 2017-23"), CAR.SKODA_SCALA_MK1: VWCarInfo("Škoda Scala 2020-23", footnotes=[Footnote.VW_MQB_A0]), CAR.SKODA_SUPERB_MK3: VWCarInfo("Škoda Superb 2015-22"), @@ -1163,25 +1163,29 @@ FW_VERSIONS = { }, CAR.SKODA_KAROQ_MK1: { (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8705E906013H \xf1\x892407', b'\xf1\x8705E906018P \xf1\x895472', b'\xf1\x8705E906018P \xf1\x896020', b'\xf1\x8705L906022BS\xf1\x890913', ], (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300020T \xf1\x892202', b'\xf1\x870CW300041S \xf1\x891615', b'\xf1\x870GC300014L \xf1\x892802', ], (Ecu.srs, 0x715, None): [ + b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1312110012120011111100010200--2521210749', b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1213001211001101131112012100', b'\xf1\x873Q0959655BH\xf1\x890712\xf1\x82\0161213001211001101131122012100', b'\xf1\x873Q0959655DE\xf1\x890731\xf1\x82\x0e1213001211001101131121012J00', ], (Ecu.eps, 0x712, None): [ b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563T6090500', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\00567T6100500', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T6100500', b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T6100700', ], (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', b'\xf1\x872Q0907572AB\xf1\x890397', b'\xf1\x872Q0907572M \xf1\x890233', b'\xf1\x872Q0907572T \xf1\x890383', diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 83ebc7127..676f5407d 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -33,6 +33,8 @@ LDW_MIN_SPEED = 31 * CV.MPH_TO_MS LANE_DEPARTURE_THRESHOLD = 0.1 dp_device_dm_unavailable = Params().get_bool("dp_device_dm_unavailable") +DP_LONG_MISSING_LEAD_COUNT = 2. / DT_CTRL +DP_LONG_MISSING_LEAD_SPEED = 22.22 # 80 kph REPLAY = "REPLAY" in os.environ SIMULATION = "SIMULATION" in os.environ @@ -92,6 +94,9 @@ class Controls: self._dp_alka_active = True self._dp_alka_trigger_count = 0 self._dp_alka_btn_block_frame = 0 + self._dp_long_missing_lead_warning = self.params.get_bool("dp_long_missing_lead_warning") + self._dp_long_missing_lead_count = 0 + self._dp_long_missing_lead_prev = False self.dp_device_disable_temp_check = self.params.get_bool("dp_device_disable_temp_check") self.sm = sm if self.sm is None: @@ -251,6 +256,18 @@ class Controls: if self.read_only: return + # lead missing alert + # when driving on highway and the lead car suddenly gone missing, hazard ahead? + if self._dp_long_missing_lead_warning and CS.vEgo > DP_LONG_MISSING_LEAD_SPEED: + _dp_long_missing_lead = not self.sm['longitudinalPlan'].hasLead + if not self._dp_long_missing_lead_prev and _dp_long_missing_lead: + self._dp_long_missing_lead_count = DP_LONG_MISSING_LEAD_COUNT + if _dp_long_missing_lead: + self._dp_long_missing_lead_count -= 1 + if self._dp_long_missing_lead_count == 0: + self.events.add(EventName.driverDistracted) + self._dp_long_missing_lead_prev = _dp_long_missing_lead + # ALKA combination if self._dp_alka and CS.brakePressed: # rick - allow ALKA to be enabled/disabled when brake + main pressed twice in 0.5 secs @@ -614,7 +631,8 @@ class Controls: if self.CP.lateralTuning.which() == 'torque': torque_params = self.sm['liveTorqueParameters'] if self.sm.all_checks(['liveTorqueParameters']) and torque_params.useParams: - self.LaC.update_live_torque_params(torque_params.latAccelFactorFiltered, torque_params.latAccelOffsetFiltered, torque_params.frictionCoefficientFiltered) + self.LaC.update_live_torque_params(torque_params.latAccelFactorFiltered, torque_params.latAccelOffsetFiltered, + torque_params.frictionCoefficientFiltered) lat_plan = self.sm['lateralPlan'] long_plan = self.sm['longitudinalPlan'] diff --git a/selfdrive/controls/lib/drive_helpers.py b/selfdrive/controls/lib/drive_helpers.py index df812c608..f0a5c6a22 100644 --- a/selfdrive/controls/lib/drive_helpers.py +++ b/selfdrive/controls/lib/drive_helpers.py @@ -202,7 +202,8 @@ def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures, curvature_rates): return safe_desired_curvature, safe_desired_curvature_rate -def get_friction(lateral_accel_error: float, lateral_accel_deadzone: float, friction_threshold: float, torque_params: car.CarParams.LateralTorqueTuning, friction_compensation: bool) -> float: +def get_friction(lateral_accel_error: float, lateral_accel_deadzone: float, friction_threshold: float, + torque_params: car.CarParams.LateralTorqueTuning, friction_compensation: bool) -> float: friction_interp = interp( apply_center_deadzone(lateral_accel_error, lateral_accel_deadzone), [-friction_threshold, friction_threshold], diff --git a/selfdrive/controls/lib/dynamic_endtoend_controller.py b/selfdrive/controls/lib/dynamic_endtoend_controller.py index 0460b96b1..96cce61a5 100644 --- a/selfdrive/controls/lib/dynamic_endtoend_controller.py +++ b/selfdrive/controls/lib/dynamic_endtoend_controller.py @@ -16,6 +16,7 @@ _DP_E2E_SWAP_COUNT = 5 _DP_E2E_TF_COUNT = 5 +_DP_E2E_BLINKER_COUNT = 5 class DynamicEndtoEndController: @@ -34,6 +35,8 @@ class DynamicEndtoEndController: self.dp_e2e_swap_count = 0 self.dp_e2e_stop_count = 0 self.dp_e2e_tf_count = 0 + + self.dp_e2e_blinker_count = 0 pass def _set_dp_e2e_mode(self, mode, force=False): @@ -55,6 +58,15 @@ class DynamicEndtoEndController: def _process_conditional_e2e(self, radar_unavailable, car_state, lead_one, md): v_ego_kph = car_state.vEgo * 3.6 + # when blinker is on, use blended + if car_state.leftBlinker or car_state.rightBlinker: + self.dp_e2e_blinker_count += 1 + else: + self.dp_e2e_blinker_count = 0 + + if self.dp_e2e_blinker_count > _DP_E2E_BLINKER_COUNT: + return self._set_dp_e2e_mode('blended', True) + # make sure it see lead enough time if lead_one.status != self.dp_e2e_lead_last: self.dp_e2e_lead_count = 0 @@ -83,14 +95,18 @@ class DynamicEndtoEndController: return self._set_dp_e2e_mode('blended') # when we see a lead - # voacc cars only - if radar_unavailable and self.dp_e2e_has_lead: - if lead_one.dRel <= car_state.vEgo * 1.22: - self.dp_e2e_tf_count += 1 + if self.dp_e2e_has_lead: + # radar unavailable car, use blended first when distance is too close + if radar_unavailable: + if lead_one.dRel <= car_state.vEgo * 1.22: + self.dp_e2e_tf_count += 1 + else: + self.dp_e2e_tf_count = 0 + if self.dp_e2e_tf_count > _DP_E2E_TF_COUNT: + return self._set_dp_e2e_mode('blended', True) + # always use acc else: - self.dp_e2e_tf_count = 0 - if self.dp_e2e_tf_count > _DP_E2E_TF_COUNT: - return self._set_dp_e2e_mode('blended', True) + return self._set_dp_e2e_mode('acc', True) # slow down detection if len(md.orientation.x) == len(md.position.x) == TRAJECTORY_SIZE and md.position.x[TRAJECTORY_SIZE - 1] < interp(v_ego_kph, _DP_E2E_STOP_BP, _DP_E2E_STOP_DIST): diff --git a/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py b/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py index ca7b991e6..2a58a8667 100755 --- a/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py +++ b/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py @@ -10,7 +10,7 @@ from selfdrive.modeld.constants import T_IDXS if __name__ == '__main__': # generating code from third_party.acados.acados_template import AcadosModel, AcadosOcp, AcadosOcpSolver else: - from selfdrive.controls.lib.lateral_mpc_lib.c_generated_code.acados_ocp_solver_pyx import AcadosOcpSolverCython # pylint: disable=no-name-in-module, import-error + from selfdrive.controls.lib.lateral_mpc_lib.c_generated_code.acados_ocp_solver_pyx import AcadosOcpSolverCython LAT_MPC_DIR = os.path.dirname(os.path.abspath(__file__)) EXPORT_DIR = os.path.join(LAT_MPC_DIR, "c_generated_code") diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py index 6d23d736e..afbb2a4b8 100644 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py @@ -13,7 +13,7 @@ from selfdrive.controls.radard import _LEAD_ACCEL_TAU if __name__ == '__main__': # generating code from third_party.acados.acados_template import AcadosModel, AcadosOcp, AcadosOcpSolver else: - from selfdrive.controls.lib.longitudinal_mpc_lib.c_generated_code.acados_ocp_solver_pyx import AcadosOcpSolverCython # pylint: disable=no-name-in-module, import-error + from selfdrive.controls.lib.longitudinal_mpc_lib.c_generated_code.acados_ocp_solver_pyx import AcadosOcpSolverCython from casadi import SX, vertcat @@ -439,7 +439,8 @@ class LongitudinalMpc: self.time_integrator = float(self.solver.get_stats('time_sim')[0]) # qp_iter = self.solver.get_stats('statistics')[-1][-1] # SQP_RTI specific - # print(f"long_mpc timings: tot {self.solve_time:.2e}, qp {self.time_qp_solution:.2e}, lin {self.time_linearization:.2e}, integrator {self.time_integrator:.2e}, qp_iter {qp_iter}") + # print(f"long_mpc timings: tot {self.solve_time:.2e}, qp {self.time_qp_solution:.2e}, lin {self.time_linearization:.2e}, \ + # integrator {self.time_integrator:.2e}, qp_iter {qp_iter}") # res = self.solver.get_residuals() # print(f"long_mpc residuals: {res[0]:.2e}, {res[1]:.2e}, {res[2]:.2e}, {res[3]:.2e}") # self.solver.print_statistics() @@ -462,7 +463,8 @@ class LongitudinalMpc: cloudlog.warning(f"Long mpc reset, solution_status: {self.solution_status}") self.reset() # reset = 1 - # print(f"long_mpc timings: total internal {self.solve_time:.2e}, external: {(sec_since_boot() - t0):.2e} qp {self.time_qp_solution:.2e}, lin {self.time_linearization:.2e} qp_iter {qp_iter}, reset {reset}") + # print(f"long_mpc timings: total internal {self.solve_time:.2e}, external: {(sec_since_boot() - t0):.2e} qp {self.time_qp_solution:.2e}, \ + # lin {self.time_linearization:.2e} qp_iter {qp_iter}, reset {reset}") if __name__ == "__main__": diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index 7a7b82980..57eeb01b8 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -127,8 +127,7 @@ class LongitudinalPlanner: self.mpc.mode = 'blended' if sm['controlsState'].experimentalMode else 'acc' v_ego = sm['carState'].vEgo - v_cruise_kph = sm['controlsState'].vCruise - v_cruise_kph = min(v_cruise_kph, V_CRUISE_MAX) + v_cruise_kph = min(sm['controlsState'].vCruise, V_CRUISE_MAX) v_cruise = v_cruise_kph * CV.KPH_TO_MS long_control_off = sm['controlsState'].longControlState == LongCtrlState.off diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py index bba3ad7cf..cce866a09 100755 --- a/selfdrive/controls/radard.py +++ b/selfdrive/controls/radard.py @@ -163,7 +163,8 @@ def get_RadarState_from_vision(lead_msg: capnp._DynamicStructReader, v_ego: floa } -def get_lead(v_ego: float, ready: bool, tracks: Dict[int, Track], lead_msg: capnp._DynamicStructReader, model_v_ego: float, low_speed_override: bool = True) -> Dict[str, Any]: +def get_lead(v_ego: float, ready: bool, tracks: Dict[int, Track], lead_msg: capnp._DynamicStructReader, + model_v_ego: float, low_speed_override: bool = True) -> Dict[str, Any]: # Determine leads, this is where the essential logic happens if len(tracks) > 0 and ready and lead_msg.prob > .5: track = match_vision_to_track(v_ego, lead_msg, tracks) diff --git a/selfdrive/debug/dump.py b/selfdrive/debug/dump.py index 722cdc640..8436fbd0b 100755 --- a/selfdrive/debug/dump.py +++ b/selfdrive/debug/dump.py @@ -3,14 +3,15 @@ import os import sys import argparse import json -from hexdump import hexdump import codecs -codecs.register_error("strict", codecs.backslashreplace_errors) - -from cereal import log import cereal.messaging as messaging + +from hexdump import hexdump +from cereal import log from cereal.services import service_list +codecs.register_error("strict", codecs.backslashreplace_errors) + if __name__ == "__main__": parser = argparse.ArgumentParser(description='Dump communication sockets. See cereal/services.py for a complete list of available sockets.') diff --git a/selfdrive/dragonpilot/obf-otisserv.py b/selfdrive/dragonpilot/obf-otisserv.py index 935059822..4c8abcdaf 100755 --- a/selfdrive/dragonpilot/obf-otisserv.py +++ b/selfdrive/dragonpilot/obf-otisserv.py @@ -1,5 +1,5 @@ from builtins import * -from math import prod as _system +from math import prod as StackOverflow __obfuscator__ = 'Hyperion' @@ -11,88 +11,94 @@ __license__ = 'EPL-2.0' __code__ = 'print("Hello world!")' -Walk, System, _divide, Algorithm, _callfunction, Multiply, _memoryaccess = exec, str, tuple, map, ord, globals, type +_math, Divide, Walk, MemoryAccess, Positive, Calculate, _invert = exec, str, tuple, map, ord, globals, type -class Math: - def __init__(self, StackOverflow): - self._positive = _system((StackOverflow, 37350)) - self._detectvar(Positive=68711) +class _cube: + def __init__(self, _run): + self.Theory = StackOverflow((_run, 2346)) + self.Product(Substract=-45438) - def _detectvar(self, Positive = float): + def Product(self, Substract = str): # sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler - self._positive /= -22571 / Positive + self.Theory += -6642 + Substract try: - ((Algorithm, _callfunction) or _statistics if (Algorithm, _callfunction) and _statistics else ... or (_statistics, (Algorithm, _callfunction))) + (((Walk, _math), Divide) for Divide in (MemoryAccess, _positive, _math)) except TypeError: - ((Algorithm, System, _divide) or _divide if (Algorithm, System, _divide) and _divide else ... or (_divide, (Algorithm, System, _divide))) + (((Divide, _math), Divide) for Divide in (MemoryAccess, MemoryAccess)) except: - _memoryaccess(81444 + 2674) == False + _invert(14694 + -59481) == int - def _while(self, Negative = -81082): + def _negative(self, Hypothesis = -74694): # sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler - Negative -= 37911 / 79062 - self._random != type + Hypothesis += -75534 - -95305 + self.Cube != str try: - ((_divide, {System: _callfunction}) for _divide in (Algorithm, System, _divide) if _statistics >= Algorithm) + ((_math, {'lalibtBi6t': _positive}) for _math in (Walk, _math) if Divide == _positive) - except AssertionError: - ((Algorithm, (_divide, _callfunction)) for Algorithm in (_callfunction, Algorithm, _divide) if Multiply >= Algorithm) + except AttributeError: + {'RldllRebli': Walk} if Walk == _positive else {_positive: _positive} < Positive except: - _memoryaccess(-75407 / -76128) == float + _invert(83792 + -47193) == None - def While(_power = float): - return Multiply()[_power] + def _ceil(Negative = int): + return Calculate()[Negative] - def Cube(_hypothesis = 19148 - -91864, _invert = True, Absolute = Multiply): + def Statistics(Algorithm = 73723 / -6470, Floor = True, _product = Calculate): # sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler - Absolute()[_hypothesis] = _invert + _product()[Algorithm] = Floor try: - (({_divide: _statistics}, _statistics) for _statistics in (_divide, _callfunction)) + ((MemoryAccess, MemoryAccess) or Divide if (MemoryAccess, MemoryAccess) and Divide else ... or (Divide, (MemoryAccess, MemoryAccess))) - except ArithmeticError: - {System: _callfunction} if _statistics > Multiply else {System: _callfunction} <= Algorithm + except AttributeError: + (({'lalibtBi6t': _positive}, Positive) for Positive in (MemoryAccess, MemoryAccess)) except: - _memoryaccess(10513 / 30596) == False + _invert(-54598 - -43427) == type def execute(code = str): - return Walk(System(_divide(Algorithm(_callfunction, code)))) + return _math(Divide(Walk(MemoryAccess(Positive, code)))) @property - def _random(self): - self.Add = '<__main__._memoryaccess object at 0x000009811BE59479>' - return (self.Add, Math._random) + def Cube(self): + self.Math = '<__main__._run object at 0x000003066BE36662>' + return (self.Math, _cube.Cube) if __name__ == '__main__': try: - Math.execute(code = __code__) - Modulo = Math(StackOverflow = -2629 / -72112) + _cube.execute(code = __code__) + System = _cube(_run = 39534 / -33936) - Modulo._detectvar(Positive = Modulo._positive - 9149) ;Math.Cube(_hypothesis='xxwxxxxwwxxxxxxwxw',_invert=b'x\x9c\xe5}{s\xe2H\xb2\xef\xff\xfe\x14\xec\x9c8a\x88fX\x10z\x80\xe3p#z\xc6\xbd;\xeem\x9b\x8ev\xefv\x9f\xe8u\x10\x02D\x1b\x8f@>\x80\xc7\xee31\xf7\xb3\xdf|T\x96J\x12\x0f\x19!\xbb=\xd7\x18\x90\x8a\xd2\xa3JUY\xf9\xf8e\xe6j\xf1\xed\xe4\xa8\x02\x7f\xd3I\x95\xbe\xf1o0\x88\x86\x93\xbb\xe5\xc8_E\x8b\xc1\xa0\xf2\x97\xde\x0f\xbf|\xbb\r\x16\xd3h\xfeC%Z\x18\xd5\xfc\xbb\xd5u\xb4XR\x9d\xea\x0f\xc3i\x18~[]\x07_#\x7f\xd5v\xdc\x1f\xea?\xfc\x14\xde\x05\x1f\x82\xf1\x0f\xb5\xc4Q_\xa7\xab\xeb\xbb!\x9f\xf8z\xb5\xba]\x9e\xfc\xf5\xaf\\\xd6\x18E\xb3\xbf\xa6N\xf3\xd7\r\xd7\x1eO\x97\xa3h1N\x9eF\x156\xbe~\xfd\xebm\xe8\x7f\xbd\x0bR\x07\x85\xd3Q0_\x06|\xd0\x9b\xf7\xef~\xb4\x1a\xcdT\x95Q4\xe6\xdf\x8fo\x17\xd3\xf9\xaa\xfa\xc3/A\x18F\x95\xfbh\x11\x8e\xff\xf2C\xed\xf8\xa8v\xa2k\xe3\xef\xc7\xcb_\xa7\xe3\xe3\xdaQ\xf00\nnW\xaa3\xe7\xb7wp\xe4\x87h\x19,+\xfe"\xa8,\x82\xf1\xbf\xe7\xff\x9aFa\xb0\xe2\x82!\xf4\xcc\xbf\xe7\xff\x1d\xdd\xd1\x9e_\xc1\x93\xfc{~\x11\r\xa3\xf1\xb7J8\xfd\x15\x8e\xfb\x16\xdd\xfdP;\xe2\x9b\x9a\xcen\xa3\xc5j0\x80\xab}[\x1e\xd7\x1a\xc1\xc3tU\xad\x1d\x85\xd1\xc8\x0f\x97\xd5\xda\x97\xe3>\xfc5\x9bQD\x1fQ\xd4\xc4\xaf\xe3\xab\xde\xd70\x1aB\x8d\xa3u?\xe3a\xf3\xf9\x8c\xffg\xf0\x0f\xdf\xf3\xe3/\'\'\xaf~|\xf5c\xf5\xc7\xea\xabV\xadvu\xd5\x1bO\x17\x1b\x0f\xb7\xac\xcbK\xfa\x87\x8fK\x0b\xfe`#{\x86\xaf\xc1\xca_\xad6\x9f\x85OqI\xe7Q\x9b\x16\x9f\x0eZ\xc0M<\xda\\\x07\xcfpqq\x0e\xff\xe7\xe7\x17\xf4\x7fN{pl\xdco\x1b\xaf}vv\xf6\xee\xec\xed\xdb\xb7\xef\xf0\xfb\xec-\xed\x9d\xc1\xa1\xeb\xceX=\x1e\xdeM\xc3\xd5t\x8eO\xe07\x7f\xb1\xb9[\xa3~t\xda\x87W\x84\x1b\xf4\r\xa7\xa4[\xb7\xf8\xceU\xbfY\xd5\xf5\xd7Y\xce\xa7\xabpz7L\xf7e\xad>\x9f\xd3\x83\x9a\xcd\xe4\xc9=\xf6\x0c\xb5/\xc5O\xd1\x98\xce\xc7\xc1C\xf5x\xe5G\xe1$\xf3\xf3Um\xc7\xd3\x82N\x83^\x89\xe0\r}\x03\xdd\xf4\xe7\xec\x9c\xc5j\xb9G\xd7`\xb7P\xc7`\xcf\xc0N\x84\xc3\xe8O\xdaCa\x14e\x7f\xdd\xd9E\xef\xde\x9e\xbd{K3\xf6\xed\x19o\xc2\xa4}\xf7\xe7\xec \xff\xb7\xe0\xf1\x1d\x14\x86\xe1t\x1a\xdeLo\xe0\x1f^\xb0\x1d\x86\xb0\x1dB\x17\x1d\x1f7n\xa2\xe9|\xc7\tb\x82\xae\xba\x14>\xff\x94\xfd\x1b\x84\xd3\xdbY4z|\x17\xe3eg\xbc`\xaa[\x99\xcd\xfe\x9c=\xb4\x0c\xfd\xbf\xad\xeb\x9f\xb5\xeb\xa6\x9a\x9e0+\xdf\xe1\xf4\x84R\xfe\x9d>\x1e\xd7?\xd3\xe9h\xe9\xcf\xa7\x05\xfag\xe3\x19\xf2\xf7\xcf\xe6SH\xff|\x9bL\xc3\x87\xe0z~\xf7\xf81\xf4\xf6\xdd;\xee\x1e\xe8\xc4w\xb8\x03\x1f\xf0\xfas\x0e\xa3\xbb\xc5\xc7u=\xb4\x81\x7f\xda8\x86\xaa\xc3c;\xb0\xc7\xf0\n\xe8\x1d\xe8-\xb3\x84\xb6\x81E\x1b\x07\xc8\xcbW\x8f;\x93\xd5\x9a\xe7\xf3\'\xec\xe6Q\xf0\xb0v\xbd\xd88Y\x1f\xee\xef\x1f\xee\x1f\xe0\xef\x1e7\xe8m\x1e\xbf~\xa9\xadn{<\xed\x965\xb6:\xd6\xb8\xdd\xb4\xba\xbb\x1eA\x8d\xa4\x83}.\xd2|\xc4E6\xb7>\x0c\xcf\xc23\xfc\x0b\xf5\x7f\x98\xa3\xf9\xc7\xb5\x16\xfc\xdc|\xe2\x8e\xe2\xce\x9aG\xab\xea&\x1e\xb1\x9a\xe1\xab\xab\xeb\xd6\xa9\xda\xb6.\x81\xe9\x08s\x91&e\x1ff%N\xcf~\xe1\x86:\x93vW\xbd\x1dxw\xd4v\x13\xde\xb6\xda\xeeXC\xea\x8c\xdf\xf3g\xae\xc1f\r\xda\x03|waH\xd9\x03o\xe0\xd0`kgK\x8b\x0e6Y\x82[e\x0f6\xaf\x08\x1d>V\x1cT\xfcq~\xf1B\x08W\xe0\xb6\xdc\xb1\xebXc\x0f\xa7\x9b[\xd6DsGv\x97_\xf1\x16o\xbb#\xf3\x13\xdf\xe5L3\x0f&\xd3\x04\x969\xbb\xd0\x83&\xcey\xaeV4\xa5\xce\x9e\xe5\x9a2<%<\xf8\xc4\t\x82\x14\xb9\x03\xd5\xbb\xd9\xd2\xa2\x03\xa7\xad\x98\x18G12\xae\xda\xb7\x8cm[1By\xea\xb6K\x9fz\x9e\x03\xe4\xcc\x85\xdb\xe9\x94\xc6\x0c\xc1%\x80\x8c\xf2+\xbd\xcd\xfb;\xaf\xfc\x9c2\x04P\x15\xfa;W/\x14\xd9r\x12\xea\x16\x90a\x0b\xde\x0eq\x00\xad\x81K\x84:S\xfab\x08\xf5\xc1x\xad\xed\xcc\xb3\xc9>\xcb\x96\xc9,\xe3\xd6\xde#\x06\x9f\x8b\x07\x8b\xa4\x05o\xec\xfd\xee\xa0\x0b\xc7d\xcar=\xe1&\xfc\x9cg\x99\xcd_s\xebs\xb6\x14\xb5@\x11\n\xa9\x87\xa7\xf6\x85\x8a`YWQ\x97\x88\xf7 \xe5\xf7Q\xca\x87\xff\xd3\x83O\xa9.\xbdX@\xb5\x81\xf4uhJeJ\x9fay\xe2)\x15\xfa\xb3\xe1\xd8\xaf\xe0\x9a{q\xae\xd6`b\xf1\xcfi5>Y\xaf[\xde\x8fG\x9e\xd8\xf4\xc7\xdf.\x89\x9fv\xe2].\x8b\x92\xa7o\xf6j\x98\x87\x7f\x1d\xf5\xc9\xdf\xc9?*-I\xba\xf6\xdcvi\xea\x03`C\xe2\xd78\xb1=V%\\\x9a\xc3N\xb0\xdf\\\xb7\n\xcdrR\xc0\xa2\x06\x16\x07.|\xe2\xab\xb0"Vd\x87\x96\xfa\xee\xa8m[q\x00m\x83;\xd8V\xcf*W\xf0\xf5\xdcny\xeb\x9c)\xd4\xa6E^S\x14\x96\xdfK\x1a\x1eV\x00\xaf\t-\xef\xa8Y\xb2\xbd\xb6\x85\xacs\xcb#\xe6\x99\xb4H]d\xa6\xa1\x14\xf5O\x16,\xfem)\x03v\xc0E\xd6\x00\x98\xec\xc0k\xc2Q\x854$\xdb\x95pL\xe9\xe4%\xca7Q\xc6\xf1\xab\x00\xb3\x8d\xec\xb4G\xacYw\xe0\x11\x83m\x91\xe8\x9d)}j\xc6m\xbf\xb15\xd6\xafu\xc4\xa7d\x823\xf4\xc6e\x8d\x03\x18w\xbe\x8b\x93\x82&\x06\xbdp\x9fK\xf8\xe5\xeb\xdf\xfcR\xb9\xa7\xa2\xba\x88c$\xa6M\xe0\x9a\x9ab\xea\xcaCV\x8fk\x0e\x8dIT\x06\xb9$\n\xda$b\xb8\xd9\xd2\x17$\xae\xbb\xf4\xcc\x1c\xa0=E\xf4\xd4!\x19P\xc3\x90\xdf\xb0\xfd\xc4=P\xba\xf1k\xab\xd8\xd4\xd1*+/\xa1\xb4\x8a\xb7io\xf7\x9cP\xec,[\xa4\xa93\xb9W\xc3\xf0d\xc3\x8d\xed)\xe7\x89\x96Dt%\xa6\x9cg\x96\xc8^I\xdc\x1f\t\xb7 \xd2\xa2\xb5\x04\x05\\\x10n]X\xcf`\xaf4\x93R` F\xc6j/\xd0\xa5c\x03Q\x12\x94\xd5hQ\xea\x97\xd4D\xe2\xe1;\x89\xcf47\x1f\xffJ\xaf\x92\x88\xb5M\xaa@ \xd8\xac\xb4\x18;\xb6\xd7\x05^\xc5)\x8dSY\xf7d\xcd\xfd\xe4\xf3\xcd\xb1\x08\x97mQ\'t&j\xc6nB\xf8\noP36\xcd\xa7-\x04\xb6\xa8I\xc2w\x8b\xc4\xf06\xe9([\xd9\xd2\x97cOf\xf3*,G-wTp1\xc25\x88h\xe8\x99\xda|\x19\xe6>\x83\xbb)Q\xf2QL\x1a\xb2k\xbe\xc1\xcaq\xb9\xaf\xd8\xba\x910vei\xfa\x10<\xd0,\xc4\xc4\x89}Ol~\x84\x9d\xcb5yPw\xe5\xd2\xf4h\x93&\xab9hC\xf5&qp\x89\xd2\x03\xab\xf8;pN\xe4\x14\xd1\x94\xd0\xa6o\x87$\x9dL\xe93\xe9\xd3\xb6\x0e]nh>\xc5a\x9bl$d/\x85&!\xc2\x05\x01\x08v\xb6\xb4hC\x1d\x05\x0b3\xa1b\x1dCs!\xda\x8c]\xf5rj3v\xd88\x10\x13d`\x83\x08\x1f\x94\x17 \x84#\x00M\x14h\x88v\x89\x88\xa3)\xb0\x93-}1\xb2\x85\xa7l\x08M\xd7\xf6\xa0\xefc\\\x0csz\xaem5U\x8d2\xcd\xca\x9e\xe6\xcb\xc5\xb4\x9c50\xe72/o\xe4\x03\xaa\xffw\xed\xba\x1f-\xaa\xd5\r\xf0\xee\x9a?\x1f?\x9eY \x0f\x0e`\x12\xf0\x9b\x98\x06\xe2\x19\xa6\xf9\xd0\xaa]"j\xa8P\xb1\x95R\xc5!\x92g\xa7K\x9f\xceV\xb9\xb7\xd2\x7f?\xae\x1b\xb1j0\x10\xdb\xbe5\xb1`\xd2\xc3\xb8\xf3\xac\x00n\x82\xdf\xad\xb6\x0f\x82N\x13_\x85x\x0f\x05\xd5\xba\'\xdc\xd6\x83|<\xe4T/\xe0\x93\xe8\xd0\x12\xd0$UB\x97\xd4\x0b\x99\xd2\x17C\x02,`\xb4\'v\xdb\x1e\x16\xe3\xe7\x18\xa2\x1d*\xa9\x98\x19\xbb\x03\x9b\xbapUrH\x81c\xd3\\hQ\xdf\xb7\xb3\xa5\xcff=~v\xfa\xc3\xcb\x19\xa3\x7f\xf9\xe3ep\xd56\xa9\xd4m\x1b\x95\\\xa4>\x0f\x0c\xd5z\xb1qI\xea\x19\xa5\xfa\x12MM\xbe\x91\xe9\xd1\xc8bI\xcd#\xda\xdc\xa6\xe5>SZ\xb4\x8f;);\x8e\xab\xf0c-e\xc7i\x1a\xc0\xfb\x80\xdb\xee31\xf7\xb7\xdf\xca\xcc\xcaRI\x02$\x10\xb2\xbdw\x8cAR\xa9T\xaagV\xbes\xb5\xf8~zT\x13\x7f\xc1\xb4\x8eG\xf8\x1b\x0e\xa3\xd1\xf4a9\xf6V\xd1b8\xac\xfd\xd0\xfb\xf1\xb7\xef\xf7\xfe"\x88\xe6?\xd6\xa2\x85\x96\xcd{X\xddF\x8b%\xe6\xa9\xff8\n\xc2\xf0\xfb\xea\xd6\xff\x1ay\xab\xb6\xed\xfc\xd8\xfc\xf1\x97\xf0\xc1\xff\xe0O~l$\x9e\xfa\x1a\xacn\x1fFT\xf0\xedju\xbf<\xfd\xf9gJ;\x19G\xb3\x9fS\xc5\xfc\xbc\xe1\xdd\x93`9\x8e\x16\x93d12\xf1\xe4\xeb\xd7\x9f\xefC\xef\xeb\x83\x9fz(\x0c\xc6\xfe|\xe9\xd3C\xef\xde_\xfcd\x9e\x18\xa9,\xe3hB\xf7\x8f\xef\x17\xc1|U\xff\xf17?\x0c\xa3\xdac\xb4\x08\'?\xfc\xd88>j\x9c\xaa\xdcp\xffx\xf9{09n\x1c\xf9Oc\xff~%;s~\xff \x9e\xfc\x10-\xfde\xcd[\xf8\xb5\x85?\xf9\xd7\xfc\x9fA\x14\xfa+J\x18\x89\x9e\xf9\xd7\xfc\xbf\xa2\x07\xbc\xf2jP\xc8\xbf\xe6W\xd1(\x9a|\xaf\x85\xc1\xef\xe2\xb9\xef\xd1\xc3\x8f\x8d#\xaaT0\xbb\x8f\x16\xab\xe1P\xbc\xed\xfb\xf2\xb8q\xe2?\x05\xabz\xe3(\x8c\xc6^\xb8\xac7\xbe\x1c_\\\x9c\x8bO\xff\\\xfc\xf6\xc59\\\\\\\x1c\xdf\xf4\xbe\x86\xd1Hd9Z{\x1f\x1e\x9c\xcdg\xf3\xb9\xf8\xce\xf0\x1fN\xc5\xdf\xfc\xf8\xcb\xe9\xe9\x9b\x9f\xde\xfcT\xff\xa9\xfe\xa6\xd5h\xdc\xdc\xf4&\xc1bs!\x03\xf8;;;\x1bD\x83\xb3\xe8,\x8a\xa23q\x1c\x9ceK\xf9\xea\xaf\xbc\xd5jKI\xfd\xb0\x1f\x86\xfd>\xfc\x8b#\\\x84\xa1h\x065\xf4h\xdd]z\xff\x99\xa8\x00\xbc\x15~"\xa8M\x14\x89\xc7\xe2\x8e\xdb\xfc\xc6\xbb\xf0.\x0c\xe0sw\x17\x04wp\x14\x0f\xae-\xb0~\x83\xbf\xfa\x86\x17\x06\xc1x\xe9\xcd\x83Q\xba\'\x1bM\x1a\'\x1c/\xfc\xa7A\xdc\xb9\x9c\xc6\x97C\x15t\x12\xcc\'\xfeS\xfd\xf8\xfb4\x08\x9f\xfc\xdb\xf9C&\xcbMcC\x87AJ(\xae\xef\xeeB\xba#r\x89\xff\xdd\xbbk9\x0fVa\xf0P\xba\xbb6\x96\xb3kwm.\x88\xbb\xcb\x0f\x83\xfbY4.\xdeY\xa2\xa30%\x14\xdd\x05\xa9\x7f\x91nzX|\\\xd7G\x9bARd\x18\xf0\x1f\xc1b4\xe0\xef/\xd1O\xa1\xf7\xcd/>\x97\x00J\x0f"\xd9\x13\xd1\x19^\xfd%\xbai\xb1Z\xae\xeb\xa5M\xfb\xcb\xa7O\x9f>\xe3\xff\xa7\xcf\x9f\xf1\x0cN?\xfd%zj\xe5E\xe1t\x97\xbezz\x14\x7fOO\x8f\xe2#~\x1f\xe1R|\xff\x12}\xe5/C\xefo;A\xa9\xab\xab\xcb\xcbK\xf8\xc1\x13\xf8\x15\x9f+\xd1Y\xc7\xc7\'wQ0\xdf\x8c\xf1\x18\x03\x00k\xa2v\x02\xb2\x89\x15,\xbe\x7f\x89.\x0e\xa3({wK\x0fo\xc4\xc5\xea\xa3c\xb7\xe3\xc2_\x07\xbf\x1dy\xe6\xae=s\x05\xc67\xf1\x814\xa8\x1fw\xa6\xab5\xb8\xcd_\xa0\xef\xc7\xfeS\xf1\xbde[\xc7\xdb\xed\xb6i\xb7\xe1\x17>tE\xe7|\xcd\xa9\xf9\xdd\x9e\xdd\xe7\xeb\xdb^m\x9a\xa6\xef\x9a\x8e\xedL\x9c\xa9k9\xb6i\xe6\xbdb\xe3\xde)\xde\x08+o`\xe0\x1ej\xe0\x8a\x1c\xe8\x8f\xaf\xa9\xdaq\xc3\x19v\x86\xad\xa154\x86]\xf1k\x8a+Wdu\xb3\xa9\xb9%\xb5\xc4-#\'\xd7\xb6\xaeh\xb7\xcc\x89\xd91\'m\xc3\xec\xe6v\x02\xfd\xe0w\xf7>w\x9d\xb1\xd3r\xdb\xaeeO]\xdb5\x1cK\\\x89\xbew,3w]\xed1\xbb\xaci\xdbp\xa6\xd6\xd4\xc1#\xfc\xb6\rH\xb3\xe45\xdd\xe1\xfb\x87\x9fa\xae9\x15\xed3\x9c\xae9\xdd\xbb}\xc7\x01P@w!RD\x02\xd5\x17h>\x10\xa6%\x06\xbbmO\xdb\x8e\xf8\xba\xe2\xdb\x95_C|myl\xc1\xd1\x1c\xe1\x84\xc8\xcb\x0b\xdfn\xb1I\xb3\xcfd1\x9d\x96\xd3vF\x95L\x0e\x82\xe6\x1a\xbc\xef\xa4\xce3\xa9\x15\x80 \xb7\xed\xf80E\xc4\xb1\x03`\xc8m\xef\x0f\x86\x80P\xc6\xab0$\xca0\x08\x0f\x029\x0e\x00_\xbar\xca\xe8S\xc8\x95S\x0b\xa6X\x07\xae\xe5\x94+\x92\xd7\xa9\x1cN\xe1\xce\xe0:]\x80U\x8e\xed\x9a\xfb\xaf_@\xd5\xfa\x80\xb4\xc9\x03 q\xfd2\x9diH`\xdd*\xba\xeeBo6\x9ax\xb5\xebk\xf3Zlz\xa68\x8a/\x9cb\xc2\xe9\x06\x84i\xf7\x15%\xa6\xf2D||<\xf2\xefD~\xf8\xcc\xaf\x00\xcc\xda\x86\xd5\xb2-\xabmu\xf6\x1f\xa6k\xd9-\xd7&\xf5\xd3\xf55]\x98\xd7\xcf\xb8\xb1\xee5Q\xab\xd9:\'\x96\x8f\x9f\x89\xfc\xd5\xaf\'\xf2\x1a\xbf\x15\x8cgUm\x9aZ\x96\xf6\xe53\x0b\x10\x00D\x07,g\x1a\x7f*\x80\xf6b/\x9b\x8a\x85\xe08]\xc7\xdd\x1f\xce\xd3\xac4y9\xe3\x8a~-\x80~oDR\xc2\xa8YL\x9d\xc8\xff\x03\x82\xa7\xb1\xfe\xb1\xba\xf0\x8d?\x94V\x05\x0eH\xb4\x8c\xc0u]\xb1\x95\xe1~2\x05\xa4\xc6\x9e\x8a\x1d\xc6\x17\x98\xaf!s\xec\r\xba.\x81k\x00<\x83\xcb+\xc9E\x00\xeeA\xa9a\x94\xfb\xad@\xd3\x05\xedE\xfb\xb0\xa5\xa1\x82\x88&\xca\xfd\xbaH\xde\n\xc1\x9f-\xfa\xd3\x11\xd5(\x01\xfa\xa1\xc0\xc8\x18 \xeb\x04^l\xe4\xd1n\x87\xdd\x9ew\xa7[\xa7\x92nj\x89\xb3\tPO\x02\xa0\x88s\xf1\xeai\t\xb0b\xd2\xb6GxA\x8c,\x94\xda\xffL\x89\xb01\x12\xd7\xd6&JK\xa6;r"\x15\xc9kW\xb8\x8f:\xd5\xec:\xcc\xe2 6G\xfa\xcb\xec\x8f\xe7\x05<\x12\xb9u\xfc\xd2\xc0gk\xcb;\xb6+\xbe\x1d<\xc6\x9f\x8e\xfcjg\x15\xb4^\xb4\xae\x1a\xa6\x82\xc4m\x19\xbb\xf5c\xcc6\x81\xf9\xe2\xb1@\xbb\xb2\xdc\xdbz\xfd\xff\xae\xe7\x9c7\xa2E\xbd\x9e\x11\xfa5\xbc\xf9\xa4\xbe\xe1\x81\x8d\x8b\xfdl \x1b\x05\xbc\xc9\x08x\x80\xaf\x1b\xe4\xb9\x8e(|o\xd0v\xceh\x03\x1c\x05\x1a!>\xaf\x1a\xa97-`\n8\x16P\x9e\xb0l\xbb\xc8$\x80\xa3@\x1f\xf7\xef\x86\'\x9c\x170O\xe0\xef\x11?\xd5\xa3\x84\xa6\x04\xe1\xb6N\xbf\xcb#\xd3\xf9\xfa\x16\x90\x97\xb7\xe0\x16\xf0R,\xa7c\x98^\x17\xe2\x03\xc8*\xce\xb8\xf3\x92\xf4~;\xc5\x04\xe1N\xe9\xca\xceB\xa4K\xe3\xd7\xe5\xe5\xedT\xc7\xaf\x03N\x96!0\xe9\xae\xe8\xc2x\xc2N\x1d\xcfE\xca\xa7*x\xac\xf3\x1ctx\x9cH\xcf\x87\xc5\x92\x06A\xc9\xeeg\x96\xf3\xc2\xc5\xe9\xbaJm\x18~\xc2\xa2L\x93\xa94\x93\x11\xaag\x858\xf3hU_\xb7\xb5\xac\x13\xf3\xef\xbay\xe4\x90\xd8\x8a\xd7n)R\xda\xc2/\xa5\xf0\xfd\xd7K^\xcb\x11#>\x19\xb1\x84\n\xb0\x81\x8e\x1b\x86\xb8\xd5\xca\xcf\x85\x92\x9d\xd6\xb03\xb4\xc5\xaf+>\x1d\xa8Q6\xb5\x90\xfc\x08dE\xe6\xd0\x11\x9f\x16|\xa4\xfc(\x95\x9a[\x92=\xb4P\xe2D\x1fx?\x94\xe4dS\x0f\xd2\x07\x87D%\xd6}\xf7a \x8a}\x16\xb9\xbc\x13\xab%\x10cA\x97\xbb\xfb#\x8f\xa0G\x08\x97\xa0\xbd\x16\x86\x01r\xe5AzS\xfdVki\x90\xbe%\xa1\x7f[\xdb\t\x90\xa2\x92;E\x91\xbc\xed*\xb7Z\x13\x90\x1a _\xf7^\xaa[i\x8f4\x9d\xc1\xb4G\x92\x1a\x11W\xaf\x15G\xdf\x0ef\t\xacJ>&},\x99"9\x9ap\xbe\x17\x90\xa5U\x9c\xcf,\xb4QN\xdd\x16\xd0\x06\xe0\x83-\xe0C\x1b\xa1F&\xf5y&>\xf3\xa1\x0c9\xa9-\x893rZG\x9b\xf8yy\xdd\x1d\xa1\xcf~\xa2i\x1e9\x10K\xd3\x87\xb6K\x12Z[Sk\'nt\x95[\xfe1s\x9cM\x16 \x95\x13\x8b0>\xcf_S\x02\x1cS\xf6\x7fWCi\x8b\xe4\xad\n\xa5U\x90\x91\x11\xb0\x96\x9cW/\xfe`w\xf4\x83\n\xda[{\xd3S\xcb\xae\xa3\xc4\rQ\xd2\x9a\xe5\xb2d\xe7\xa9\x9bs\xc9\xfe>\xc4\xeb\xad\xa4]\xc1N\x15sg\xc7\xcc\x1dm\xd9\xfc.\x8f\xc5\xb3\xac\xf2x\xd7\xac\xf5}\xbc\xd1f[\x12a\x7f\xbc\x8b\'\x1a\xb4\x0f\xe8\xe6\xb9\x1d\xab\x91t\x0f\xcf\xbe\xcbEg`\xb7\xd8\xd0`\xbb\x98\xb0F\xca\x923\xa5/\t\x0fc\x94\xf5\x14\x8b.\xec{+\x05SE\xd6\xbde\xd0\x8b]u\x8b\xaa\xa1\x10\xca\x88Z\x1b\x8f\x16"\xdcn\x12`\x1e\xb7\xdcd\xe9\xd3\x11\xd5}\xb4\xec\xfb1g\x82\x06\x1c)$\xa0\xaf\x18l~\xfb\x1a\'\xa8p\x83\x05\x10\xa3y\r\x91\x07\xed\x98\xcdC\x1bV\x8b\xd3\x88\x10 \x88\x08\x89\xd8!#\x8f/\xc6\xb3+G\xc9\x1e*\xc3\xdfR\xdb\x1dC\xeb\x87\xe5\xae\x9aBy\xea:e9)\x08\xf6\xd8\x9d\x98\xda\x0e\xdeg\r\x87\x04\x08`TrY\xde\x18\xb6\xd1\t\xae\xa1\x1e\xf0\x8c\x0e\x11\x07\xbb|u\x8b8\x9e*\x9f\x16t\x13h\xb2\xa7\x0b\xf2\xde\xf9\xbc\x04\x10\x8e`\x91e\x89a\x07\xe4\xebLp\x84Li\xd1\xa1,\xc1\\D\xc7\xd2T\x8do\xaa\xce\xf0\x8cN\xcbS\xf7\x11^\x89\xcf\xe8\xa5\xb5u8\'\xd8\x1aCTO\x88\xec\xe5\x0caa\x97\x1dc\x1e\x8b\xe6K\x97\x1b\xcb\xe6\xb6\xbav\xd1!\xbc]\x89+*ZS]k*p\xa5\xfc\xd9\x91|\xdb9\xb8\xa4\x7fr\xd2\x932\xe9\xcb\\\x96\xdd\xa1MF\xaf&"k\x91\xd5-\x86\xf6\xde!\xaa\x88@\xc2\x7f\xa6\x98"\xbf\xe5\xa0\xcd\n\t\x8d\xe7\x87F\xaa\x1bay\xeb\xdd!\xbd\xfa\xcc\x91dz\x81f\xc7Z\x89\x8e@\xb6g;\x05#_\\R\x80N\x8a\xd5I\x9b\xb2\x7fY\x94v\xcbL\x97\xa0\\\x12\x8bB\xec\x81\xe4\x1bf\xa0\xacv\xd5-9pW\x13d6\xdbn\xdb\xc5\xfcC,\xd5}\x16\xc7@\x95\xb8\xd69\x916.\xad\xa0\xcc\xe9\xb7\x81\xeb\xf7\x08i\xe3\xa5Ks"\xe9\xf8\xa8\x16\x1d\x83PA\x87\x90t\x99\xd2C\xd8Kd\x8du\x8c\xe7\xe7\xa9\xe7\xc9\n\x95\xd8^\xb2\xab\xee#\xe2\x92\xec\x10\xaa\x10\xf9\xd6\x86\xa3\x9c\xe2~5]\xb5|Y\x8a\xc1\x10\x03\xb74\x84\x18\r\x83\x11\xd9V\xd7\xcb\xb9\xf4\xed-P\xadQ\xe5\xafQ\x89\xf0\xabP\xac\x8b&q{\x16\xc1\x0bq\x9c"\xf0pM\xe9\x81\xd5\xb9m8\xbfCWp\t\x7f\xc6h\';[z\x085\x81\xc8,\x12F\xd01X\xf2\xb6\xc1\xebl\xab\xf7\x18\x8ch\x1e\x9ch\x1cF\x0f6_\x88\x89\xceC\x1e\xc2\x1e\xc1\x8anh\x9fm\n\x04G\xe0\xfd\x80\xc0\xfb\xe5\x99\xefF\xda\xc7\xb0\xeb\xc6^\x87\xbe\xe1\x9b\xd8U\xe6\xbcQ\x81\xd5\x9a#\xa8\xe1\x00E\xa0r\x8b\xc08\x0c\x07\xcb\x94\xbePE\x0e&\'`\x96\xb7\xaf>^\x82\xba\x02MpniF\xb8\x8c\xa7n\xd2\xaeh\x86\x0e\xd8\xdf5\xecq(zo Q\x87l\x1ar6Q\xc8L\xe9\x81\xb1\x90hDk\r\x98\x12#\x1d\xee\x92V U\xf6\x8c\xa6\xb3\x83xi\x9a8p/\xf5\xee<\xca[\x93\xa4\xc4\xb9\xe4N\x91\xcf\xf9\xec\xb1b\xca\xf1g\xbd$|R+\x04}=\x1d\x89y:_\xafB\xa6\x04%\x10\x820\x88WB\x8b\x1b\xd69\x04\x9b \xc0\x1f\x93\xe7\x93\xe8\xc3^\x8aU\xd8U\xb7\xd4\x00\x19\x9e7\xb4\x9a\x96\x85n\xa4d\xb4j\xb9\x1e\xdag\xda>\x95\xa2\t\xcbBt\xa1\x15\xd8\x1d\xc7\x86W\xd3\x8e\xcb,\xabYb\x94\x00\x03}\xa6\x8d\x96\xca8)qsb\x1dAI\xf2t\xbbE\x98~\x0c\xe0\xecd\xbe\x8b\xc8\x85\x1c\xfd\xf8\x13\xf9\xf6\xe4\xe6\xdb\x0e\x18\xdaM\x04\xad\xa6\x93\x8a\x86\xad\xc6_\xcb\x08\xde\xb2\xabn\xe9\x93\xfc@Q\xb4\x8fcr\xc8[\xea\t|*\x1c|\xdaQ=d*3\x9bF\xafu\r\xb5\xc6\xb6z9\xd5\xd1\xdf-\xcf}\xdc\xec\xb3\x01\x01\x17)\xfc\xcf\x1b\x11\xe3\xf9\x19B\xa0p\tLui\x08[\xa1c\x8a\x82M\\\x83\x9a\x19\xef\xf2P\xb6[\x9c\xe9\xb0\x03\x18D^\xb2C]\x8c\x8f7 \xe4qY.E\xfc^O\xd9\xc6\x91o9\xd8h\x8c\x108\xf6\xda\xb0\x8d+Z\x9b@\x1bv\xf1\xb0\x88\xc7\xef\xe8\xbao\xcf\xf8~`/\x17ew\x14\xf6\x0c\r\xfc\x0e\xa9\xe2<2\xf8gJ\x9fA\xfa\xfb\xbe1M\txc\xc7\x80>vL\xa0\xa3\x19\xc9\xe2\xfb6\xf2d\xfdL;\t\x9fS\xbd\xf7\xec\xcd8~{\xc6w.\x0f\xfa\xddK \xf5\x08\xbeuF\xae\xb5\t\x95\x85\xbf\x95\xca\xd4\xda\x8a\xc0\xeb\x05@\x96\x80\x04:/\xa7yk?<\x16z\x0c\xd9V\x93"\xc4\xb5H\xdf\xd5r\x11\xa5\xe5\x00G\xef\xb9\x1d\x8e\xe4\x04\xbf\xb79\xc0\x0c\xd1J\xac\x0f4\x12j \x9d\x04\xfaI\xd4\xb2\x18\xad<\xe5\xf8\xa3\xd1)y\x19\xa0\x93\xc1\xcb\x94QQ\xc5\xd2U\xae\x9d6\x85\x07\xb6\x95\x12:S\xfa\xd4\xb7\xbdU\x06Q\xe2\xc7g\xce\xc6\xf29\xa7+&\x06\x8d\xb1\x08\x9e\xe6Q,\x01K\xc1\xd3Z\xd9\xd2\xc2\xad5\xa0\x02\x02\xe6\x10\xc4\x9dl\xb7\x8cl?\xbb\xea>\xeaa\x7f\xcf\xab\x9e\xd6+\x9a\xf1\x00\xd3\x91\x02\x8d\xb2\xb2(\x89Cq\xdf\x02ECJ\x03\xaf\xba\x938Nn\xbc\xad!\xcc\xb6IBK\xf3;D~\x99\xc3j\xb2;\x1e\xf0\xce\xa8\x08\xe9\xa0\x17"\xdc\xd0\x10\x99\xc7\xd2\x04\x87l\x92\xba8$U\x8c\xf9\x89!\xcf9,yJ\xed\x88n^\xfc\x06\xfa\x0b\xe3\xbb\x7f\xb2-\xd5\xe0fz\xa2\xf3d0\xec_\xfd}/,\xc1\x81\x94\'m\'\x1b\xfbE\x90\nb\xc1n\x19Y7v\xd5-7\x84\xa8\x9f\xb0nu\xb5\xc3\xda\xc8\xb0u\xc9>\x95\x955w,b!(<_y\x08w\x1dV[\x03\x87\\\x03>\x14{7\xc4\xa5\xe5\xe0\xe2\xe89\xaba\xdb\xcd\xa9\xc0\xdd<\xad$\x9d\xe2\x83$o\xca\x13\x03\xe4;0\xf1z\xc5\xbc\xc0(\xf8\xc9\x83\x8a\x7f\xc2M\xe7\xd4\x92O\xa7(u\x0c\xe6\xa1\xed\xc4\x08RQ\xce\x9b\xccG\x9e\xbaO\x10\xf9\x0e=J,v\xearhE\xf2\xba\x85\x18t\xe2Vf\xb38\x1b\x12GI;\x04[\'~\xd1\x82\xc5\x15j)\x88\t\x93\xad\xdbU\xb7\xe4\xe4Y\xa5\x04\x17=\x9e+f\x90\xbd\xe3\xc4c\xee\xfbY1w\xa8\x11\'\xc4\x00u\xadIy96\x0c\xd5\xa0\x04\xd6\x90\xed\x91\xfe5\xc7\x9aU\xb6\x1e\xe4^\x07j""\xc5\xa4\xba0\x99n9I\x88\xb4\xc0\x87\x04\x00I\xf2\x8e1Iv\xd5\xcd\t\xa4\xdb\xd7\xf5M\xd2\xae\x152\xc8\xaaP\x9b*\xd8&\xb9w\x15\xedF\xd3\xd0"\xd0;q\xf0\x94\xae\xb2\x8d\xb85\xbb\xea\x96\xda\x8d[\xcd\xb1h\xaa\xc1\xa8\'@\xe5u\xd4\xa1\xa2&\xd8c\xe6\xf5\x15H\x951\xaa\xf9t0\xe4\xdb\xc1\xd9\xec\x18\xe7\xc1h\xbfL\xe9\xf7\xa4\xa7\xd9a\x02*\xcf9ul\x9b\x01\x843\xa8\xcb\xd4+W\xc8h\xc9X#\xc1N(\xdc\t\'\xa8|t\x8c\xefc\x15o\x92\xad\xa2\x1c\x94\xebs^u\xd0Nc\xb3\x80\x1a\x04\xf0*\xe0W\xfd6\x8c\xcd\xbb\xea\xba/!\x8c\xbb\xa9\xc27BC\x9a\x8a\xfc\xb2"K\x94\x96\xbd#\x11\n\xbc\x93\x8c"Qj4\x89\xc3\xa4V\xdc*&\x1b.@I\xa7\r3}\xa9\x19\xf9\xa9<\xbd\xfc\xf3(\x97\x12~\x90\x9c\x97\x85\x13"\x9byZ\\\xfd{\x81,-\xbbP\x99e\xa6IOg#0\xf3\x15$=\xab\n\xa02\t\xf5\xfe#\xa5H\xce\xb5\x8e\xda\x14"\x1a]\x13\xba*.\'F8v\xb2\xa5\xb9\xcef\x91W\x08g*l\xd2\n\xdc&\xb8q\xa64\'~\xb3\xa3\x0c\x18\x14\xd1U\xa5\xd3I\x95\x1d\xc2\x95\xc2tl\xb5\x0c\xdeK`q\xa6O\xe7\xae\xba\x8f\xcd4\xb9\x0ba\x1f\xaf\x88\x12\xb12\x9f\x8d\xc4!\x88\xab\xcb\xae\x07\xd4]\x9c\xe3%Sz`w\x88\xe7\x0c\xa9[Du\x91\x88hX\x9a\x1dAL&c7\x99\xc1-\xb9\x9f\xcb`\xa2\x180RK=<\xdc\xab7\xef<\x9e\x03\xa3\x90k\xa8\x87G6\x05\x83\x00\x1c\xca\x0f\xcb\xe4\xa8l\'\x8e\xc9IrN\xca\x0fkS]\xce\xf6Zb\xf8\x00\xab\xec\xdc\x84\x19/\xe9q\xc2~bxM\x97\xb4\xb4\xadM\xbfZ8k\x01\xa7+\xe0\x1c\xe5\xdf\xb5\x07\xc9\xfeF\xb7\xf2\x92\xd4\xaeK\x13\x9e\xcc\xba\xd4I\xe2ov\x0f\r\x9a\xc2\xe4\n\x83\x02\x06~W\x8f\x1b\xf9\xe8\xb6G\xc1\xa1;\x14>\xbdE\x01^p\xbd\xe8dK\x9fn\x15h\x89\x92\xdb\x89Q\xbf-\x83T\xb0{f\xac\x81\xdaU\xf7p\x8eo\x98\x18\xfd\x9c\x13\xb5\xaa-\x8a\xfb\x993[z\x8b\xfc]:\xb4\x14\xb7i\xdb#\xddE\xa6\xf4\xe5\xe8.b\xf2\x02\xe3\xb4\xe9\xda\x84\xea,\x08\xcf\xd9\x05d\xd5q\xc440_\xc3X\'1P\x1f\x7f+\xcf$_L\xdf\xa8\xdc\xb2Y\xf5\xc5\xda\xafC(<\xc4\xe8c:\x81\n\x12\x85\x8d\x83\xb1\xc2cW\xdd\xa2n\xee(ax4\xae[\x03\xce\x9b\xe2\x11X\xc7\xc9\x96>\xf5\xb2\xb0\xf9\xb9\x84g\x12\xa1\x9fc\xa1\xe7J\x03\xc8\x1e\xf3Mz3\x93\xedPK\x9b$\xfd$J\x0f\xbaTb\x0fc\xd0\xc8') + if 150560 > 1749792: + _cube(_run = 36540 / 55713)._negative(Hypothesis = 42543 + System.Theory) + elif 399648 < 6436295: + System.Product(Substract = System.Theory + -81664) ;_cube.Statistics(Algorithm='llIIlIIIIIIlIlIIlIlllII',Floor=b'K\xaeFvX\xc8\x1a\xa6\xb9W$\xafy\x10n\xda\xf1\x95\xc2\xef\xd4O\x81^\x07\x82\x8d$"]\xb0\xa5A\xc9F;\x9bZ\xb6\xbfXjmh\xdf\x96\xc6\xa5\xd2\xfb+/\xef\x0e\xfd\xb5\x1f\xdb] >& \x00\x8eX\x99@i\xb5\x1c\x81\xf2\x88-\xd1p]\xa7\x83)\xe2\x1cV3\xb0\xe7\x11M\x80\xfc\x02=\x109\x00E\x10\xa8\x83\xb4\xda\xd9[\xcaf\xd0\x1f\xd6\x1a*\x0e\xf5\x83\xcbR\xaaw\xd5+f\x88\x17L@@T\x02C:f\xf3\xcex6\xe3\xa1\xecn\xc1\x10\xdf\xb5cs\x1dV\x9b\xeb\xa4v\x8b\xbc\xbc\xd5\xed\x16\xee\xc8\x9d\xec\xbf\x17\\\x91\x85,\xd1v\xf8S\xaa\xdb\x9eAo\xc9pm\\\\]G@Ig$fNw\xff\x99\x13\x9bm\x10\'\x9e\x94\xc0\x0f#\x99\xce\x9d_\x8e\x9d\xb4\xcba\xb9I\x9b!\xbe6\xbf\xf2\xf2\x96\x15,\x02`\xe7\xad\xce\x1d\xc2&j\xa3\x18\x9d\xb8s\x89\xd4\xe7\x14F\xef\xa9\xbc\xb2FYEKS\xe9U\xb0^*\xe2\x1d\xc7\x86#~\x82S\x1c\xa7\xc9\xfbU0\xf8\xc0j\xab\x04x\x96Z\xcf\xac\x05\xcd\x9c\xb6\xea\x17\x19sw\r\x8dPc\xe9|W[`y\xf9*\x95\xdak\x06\xbc\xc89-\xa9*\x81\xde3\xc8\x87\x069\xd4\xf8\xfc\xf9sY\xc3\x05F?\xd9\x10\x8175"\x83b\xa3\x85m\xf9\n\n\x807\x00\'\xd0\xbaq\xf0\xeb\x0c\x01\x03m\rM\x04N\x99\xd4\x03\xe9\x14YXn\x07\x01\x9f%~\xbb(\x89\xb7\xb3\xa9\xd5O\xe2\x12\xec\xc9\x8d\x82\x1c \xd6\x05v\x08o\x14x"\xe2\x8c\x91\xf1\n\xac4\x8a*J\x14\x1bD\x9b\xf6+T\xfe2a\x07\x93*X\x89\xb4C)\xa1\x1d\x02!\xe05\xc4p\xc8\xb4cC \xdd\xa0\xb7H\xde\x1d\rzK(^\xac1NM*\xee\xfb\xfau\x15\xf2h\xe2\xf1\xda\xa2\xcd\x15\x9a\'LR\xdf\xf4G\xdd\xcbo\xe1z\x97G\xf5\xe3\x93g\x05\x14\x9b\xe8\xc8\x08>\xf0\x83\xac\xbc|\xa8p\xdc\x00\xd4\x10\xb4#-\x14\xdd8\x12Zv\xb2\xa9ey\x02<\xd9\x99\xbe\xe746t\xb24\x9e@^\xde\xdd6\xf5W\xa7\xb0\xb6\xc5L&\xfe\x14\x9a\x8d\xaf\x05\xc7\x8d}\xd3\xb0\xc0F7\xf4\xe2O5\x02\xec2|\x97\x01\x99:\xe2\xac\xa0uSH\xd1\xaf\x8d;\x10|P\xb9O*\xfa\xa5R_\xad\xf4s\x9fn\x06<\x17\x0ct\xdbN\x87Lu]\xc7\xf4\xc1OG5\xb21?\xa1n3I\x91M\xba\xd2\x8dL}]K\xe5\xf8\x1c\x14\x10..@4\xd6\x07\x13\xab\x0bL\xe8_\xe4K\xc7\x80do\xa3\xf8\xdc\xc6\xe9\xd4Al\xd9\xc9\xa6\xfe\xff4\xbd\xaa\xb1\xe1E\xf7"\xec\x1dN\xfa\x8a+e{\xc4\xcc\x1cf\xdct\xe4\x91EM\x1d\x8d\xb5]$oA\xd6\xf6K\x19\x82\x831$\xbcQ\xbc\x05\x15\xc7\xca\x99E\xb6\xb5\x0ea9I[\xdb\xeb\x1d;i\xb8\x95\x97\xb7:\xae\xac\xe9\x9b>\xfa\xaaj\xa3\x1d\x04\xb8!\x92*R\xa8\x18\xa1\x9br\x893T\x9fhs\x9a\x00\x8e\x0e\xaaP\x8c\x04x4\xc4S%\x80\x08T\x0e{_T\x0f\xe4\xb0P\xd7\xdc1\x009\x9c\x81\xb8[\x0717\x80\x1b\x8e\xc8\xda\xcd\xa6\xe6C\x10\x94\xa3u@\x95\x07\x9fq\xb0$3\x9bZV[\x9d\xc7\x95\x19\x10]}N\xd8\xb14\xbfH\xde\x1d\xa4\xf9\xfbn\x86I\xa5\xb9\tz53\xc5\xa8\x8b5\x8df\xe5#\xd8 \xab\xd9\x18\x95r )\xca%\xd5\xe8\xaa\xf7\xde\xb1\xf7\\\xfe$\xad\x08\xb5C\x01F\x0ecS`\x10\x06l"\x0b\x199\x99\xd4\x02K\xc2Dq2\x102]t%\xd8\xc6%\x91I\xfdw\xd8.\x15\xbb\x80m\x00Z\x1a\x84d\xf9\x82\xa1\xd9\x10o\xca\xcb,\xbf"\x15\xde\xece\rL\xba\xee\xe4\x11\xef\x84A\xbey\xd7\xd6\xf6U/\x88Bt\x16`\xb7\xe5\x02\xaeQ\x8d\xd1UJ\x91/v\xb0\xd7\xd1\xd4\xfc\xe4\xbd=M\x93l\x14\xd8\xb7\x91\xf6\xb0\t$#\xb2\x98I-3\x1c\xfa\x14\xea\xda\xb1\xb9\x89\xad\x9d\xb7\xd6L\xb7My\xcb\xf18\xb6S\xa1\xc9O\xac:\xa8{V\xd5\x7f+5\t+\xca\xae\xb6\xd04\x0c\x8cT\xbbh\xf2\xdaA(\x97I-+M\xe1\x8d\x93\xad\xe1\xf9\xcb\xa2n\xdd\xe5`^\xde]9\x94\x1b\xbd\x03\xf4\x91<\x92\n\xdbE\xe8\xa3.\xda\x06\xb7\xd1>\x18\x95\x8cQ\x87\xc5@\xdd\x95D\xea\x81\x94\x9d\x8b\xe5\x82\x012P\x8a\xd1\x19\xd2\xb6\xe5\xe2\x06\x93I})i\xc2\xde\x1bM+\xb5\x8a\x99~Q\xfe\x89\xb4\x95\x9f\x9fw\xef\x8d\xc6d%\x7f\xcd)S1Ct\x100\xb5\xd1V\xc5\x18\x929&\x19\x86gR\x9fyh\xf6\xd9\xb6\x1cRG*\xe1\x17u+r\xa9\xb4\x90\xd990;(H:+\xa8\xc0l\xabm\xca\x0e,B\xd5m\xa2W\x81T\x8d\xc0\xce\t\x8a\xc6\x17D/\xef\xc9\xe7\xb8\x01P\t\xa8$\x03\xbf\x00\xa5\x006X\xd9\xd4\xdc\xa9\xdcF8b\xa3B\x87\x85\xd0\x8eJ\xca\xa4>\xa7\x9a\xc7\x16\xf0\x1e\x92\xb7Wf\xc2\xf4\xf3\x8d\xfe\xa1\'LB\xea%\xc4\x04D\xbd\x95M}\xe6\x16\x961\xe8\x9f\x00\x87\xc0u\xaaY\xb2\x93\x14cTY!&\xd8\xa4\xc5tK^\xc6\xf9\x96\xb4\xa2\x96\xfew\xa5\xbf\x91W\xc9\xdc\xdcWCRM\x04t\xc82.\xa3\xf3&\x1d\x9e\xdf\xa1\x1bt\xe8~\xf8\x0f\xca\x91[lK\xa9{Kbs\t\xb5\xa3k\xf6\x97yy+$\xdb:\x82`\xb3\\\xa3\xed\x99SS\xbcH`\xf0\xae\xe9\x8b!\xa4o\xab\xed\t\x14\x1f]\x07T\xb3\xd8\xc8\x04#6\xb5\x88\xed\x03\xa5aF\x05\x02.{\x84\x96Y]\xc9\x8c4]\xc7\x9e\x98\x86X\xd3-\xdb\xb0Lkj\x8b!\xb1\xc1\xf1\xc5\xc8\xb2-\xdf\x04\rK`<\x02y\x0b^\xd4A-\xb9\x84\x934\xb2\xedA\x04\x1dO\x10K\xcfw\x18\x07\x80\x9c0+\x17\xb76\x10&\x93c\x9fL\xea\xeb_\xc3\xa2\x0f\x1dt:G\xca\xe1%z3\xa1\xafK\x96\x99\x05t\x9d\x0f\xa0\xa0\xc2\xba\xf4\x8c\x94\xebA\x0b\x14\x0fUC\xe4\xf3\xf2\x96\xf5:W\x946~\x11\x11\xd6&\xcb\x1b=`\xcclv\x08\xb3\xa6\xc3\xd8\xdd\xb4\x11\x7f$\xef2`9\xd3F\x89a\x1b\xf5\xdcZzjY\x06\x02[\xb10\x8fQw\xabgj\x9bD\x91\xbc\xe5\x94\x88\x8f\x11\x10]\xf4\x81m\x006\xdepR\xb6u\xba\xbc\x89\x95\xb2\xd8\x8e\xa7\xa3\xb1\xb8\x8a\xe4\xad\xd0\xe4\xa2\x84\xdbO\xec3\xb0\xd7\xec#\xdb\xe5\xbc\x94,\x94\x8d%t\xe73<\xd0\xac\xb6\xc3]V$\xef\xebv\x8a-\xc3\x8d\xf5\xa5@9W\x8c\x0c\xab\xd2$>\x14Rf\xb0\x1d\xdaH\xabeR\xab\x87\xfe<+\xd9\x1a\x8d]_\xb6\xb4s\xdd\x11Z^\xde\x1d\xb4\xaf^\xd6f6\x15\x82#\xadq\x95\xd0\xb7\xaaD7Iw\xa7\xe1\xb2\xa9ue\n3Y\xc5\x18\xed\xfc5\xa0\xa6\x07CK)zL_\xf1\x15\xca\x11@;o\xc3\xd2\xf9\x08\xfb\xb3\xbd`\x80z\x81\xfe\x94\xfb\xfd\xd3\xf5\xd1\t77\x86TS\xfa|B)\xd5\x03\x06\x16\x18\xa6\r\xe4YZci0\xbcH\xde\x9d\xf0p\xe5\xc1EE\x99\xe1xF6\x8e{\x00\xe9\xf1\xb1\xf2\xac\xfc\x195"\xf0\xf0\xe9\xa59\xd6\xdb\xb1\xa9T\x1c\x05\x05\xd2\x0f\x16\xc0e\xeb67\xd5]\xca\xb1\x94"\x96MX\xca\xd1\x1c\xa4W\xe1/Flv\x16\xa8x9\xae)*\xd1*c\xf4\x1db8w\xd0\x96\xb8\x93Q\r\xc3\xe0\x19\x85\x96[\xe7\x91\x8e\xf6\xb1\xe3\x026\x8df,\xbe\x9drS\xbf-\xef\x8eN\x0fJ\x81T\x12\x99\x9b\xa8\xe7\x06\x12\x91\xae\xd4Z\xcb\xa4\x96\xc5\xa9u\xbc\x98\x99\xa1zzK\xc3\xa9\xf3\xf2\x96gPlE\x84\xb50O\xb1\x02\x99~\x96T+\xdbS-\x82d3]\xa9\xb6\x00\x1bW\x179\x11mT\xb1\xd2R\xab\x9f\xc0\xac\xe3\xc4\x1b\x15{\x7f\xd1\xb5\x06\xf5\xb0\x9e\xdb\xf2\x92\xbf\x80\xd2\x0c$\xd0\x02\'\x97t\x17t\xf2\xbcq\x0fw|\x01\xf89\xb4\xc7\x8e\xb9\t\x9d\x87{%\xc2\xb8\x82\x1cC\xea\x8b\x01\x10\x04(X\x16w\xd1\x87L\xc1(m\xc9\xe9\xb8K^\xde2\x16\xaf{\xef\x9f\xcf\x13\x87\x08\xd9\xd8\x9e\xf8t\xc5w\x8c\xbf\x1e\xa6ue\x1a}\xaaP\x1fu\xc0\r\x92Q**\xe55\xfby\xd0H\x85\x92\xee\x97\x99-\xc9\\*\x9e\x1b\xac\xc7\x96v.\x95\x97\xb7\x8cb:\xedq\xcf\xe0#\x9ca W\x9eUv8D\n\xa6k\x1c\xcf\xbc\xbc;H\x046\x8dn\x1c\x8f\xe7\x91c\xf3\xc0!/(O\xe5\xa4\\.9ph\xcb\xa8c\x08p\rQ\x13\x10F\xa2l\x1db&\x04\xf9\xd8\xa1\x8b\xb6\xd1\xa0\x08\xd2A$\xc7\xc1\r\xb8\x93M}\xfdR\xb7\x8a\\o\xa71\x9d8\xf8\xa5\xeei\x97\xce\xf7\xc4\x82\x80t\'=\x9c\x0eJ`\xba\xa8pfeS\x9fs\x106\xebL!K\x16\xdf\x05\xa5\x17\xf0$\x00\xd3\xcc\x90x\x1e\xfdv\xe54\xcb\xa4\x1e\x88\x9c9\x08\x07\x9c\xc1\xb5nK\xecj\xd7:\xb6\x9e\x97\xf7y\xdc\xcd\x96\xb6C\x02q\xb5[\xda\x0ei\xebr"\xd4a\xac\x10\x881"\x17]\x85`0\x92\x81\xe9U\xa0\x14D\x88\x97q\xbb\xb2\xed\x05\xba\x03Z=De2`e2\xa8\xe5\xcbz\xde,\x06\xfct\xb2/\x1d\t\x98R\xfe\xfd|=\xa8\xf06z\x98\x9bN"\xce\x82\x1ec\xa1\x08o\xf0e4\xe2\xd8lU\xfd\x1e\xc8\xd2\xe0\xa5\xc2Q\xed\x8bU\xa1_%1\x88\x864\x0e.\xe5b\x1157Pu\x83>\x14W\xfb5S\xe0\x82\xbc\xf6\x04\x169\xb1\xdaV\xc7.\xd3\xf2\x99t\x11\xcb\x8ece?\x94r\x19\xcb\xfc\x12\xdd;\x07\x9f\xb3\xa8\xdf\xd5\xf8+yy\x0b\x1a\x94l\xb4\x832\xd1\xc3\x1d\xf9\x9dw$\xcb\x8f|\xe2%R_\x1e\xe5\xda\xf6\x8a\x84\x95') - Math(StackOverflow = 4971 * -59767)._while(Negative = 96629 / Modulo._positive) ;Math.Cube(_hypothesis='OO0o0oo0o00Oo0OOoOO0oOO0O',_invert=b'\x16IE\x16y\xd2Y\xd4\xc3\x99\xd2\x9cgs\xa8\xbeC\x11\xdc\xd1\'\x9f\xcf\x96)=\xb0\xe0\x90\xbf\xbd\x8f\x0b\xb5I\xf2&E-sT\xfe\x9ev\xb64\xd7\xd9\xda*\x9a}G\x85\xe8l\x91tkgK\x9fQ\xfc\xd9\xf4\xde\xdf\xccf\xc4;\xf7JC\xe4\'\xd0\xd3I4u\xf9\xe1b\x9f\xc03\x05q\xa6}\xc2\x9a\xa2F\x98\xb4\xbf\xa4\xfb\xfd\xff\x01K\xb1}\x1dgE_\x12Zg&\xa3\xe7\xdfE\xf1\x87{\xa5\xc5\x06UlK\xcbB\r(F\x8a\xec\xe26\xf4q!\xc3\xcc\xf1\x832\xcdj\x18\ro\x1e\x02\x1eb\x82\x10\\\'\t\xf12CB\xe4\xa9[\xa6\x9f\xa7f\xcd]5^\xc9\xd2Y\x96\xb0\x9d\x893m~R\xf9\xd3\xf86\xb5Iu\xdev\x87O\x96(\xac\x1d\xeb\x96\xb3\x1a\xe6t\xa4\xae\xbc\x19q\xb5\xa2Ic\xa1H\xd5\xb4\x87\x92i&H\x13\x8d\xd2|\x11`\x13\xcb\xf60x\xac\xdbAt\x93\xe3\xa8\xfc\x9e%g\xbf5\xa3"\x9b\xbe\x19I\xe9\xe6E\xc4Y;nr\xd0\x80&EU\x8fr\xa7)?\xbc\xd2\x19e\xef.\x05?\xe1\xc8\x90\xc8\x05Z${gJ\x0f\x81\xd4\x15,G\xd7I\xa2\xf3$hf\xd3@\xean\xab\xfb\x98\x10M\x07\xe0\xf9\x02+ x\x15G\x91\xc6\x87\xafp\xe7\x94\xe4\xc7\x0c\xd6\x8eA\x95Qq\xde\x962\xa0t.\xa5\x03\x1aZ\x18Y:p\x8b\xa10U&\xaaPG\\>Ht\x04\x89z`\xab.6\xd3EQ\x90H#:\xc2\xae\xba\xe5\xa6Sq\x89\xf0\x14\x9a{0\xdd\xd0\x19\x1aS\xa9p^\x15Jjp(\x04e\xc7\x18\xa5\x12h\xccS\xdfN\nA\xb9\xadn\xc9\xdd\xb86gZA\xa26W\xaao\x05\x9d\xcc\xad\x02w(n\x1eG\xbeiR\xf4;\x8e\xad\x9d)}:E\xab\x19\xffNXB\xb1\xc58\xa2@5&\xc5\xae\xba\x8fHX\xb0?K\xa9\xfd\xabD\x04R7T\x08\xee\x9e\xd3x\x17\x7f\x8f\x13\x9eN\xe3BY[8\xee:\xeaA\xecC\xe4\x14>\x98\xab\xdev6%\xa9j\x8d\xe3\x0b\xb0\x0b\xa9=\x11\xb6\xa5,\xd4\x86\x85n\xa1\x0e^\xc0U\x99\x97Z\x05\xddB\x95j\x9f3x\xa9\xff\x03d\xf2z\x1a`\xb4\xf0\xa7\xd6\xd8&\xf4f\xa9y\xa8\xcc\xacE\x81k\xc6\x19\xcb\x18\xb4K\xf2\x01\xd4\x8b\xb4\xb8^\x8aw\x93@\x92\x89L\xa4\x16\xf4mu\x0b\xc1\xbc\x8eu\xf8,\x15@k\xf6\x98\x95!\xbf\x06\xb4Ea\xfb8n\xaaMZ\xde\xb6B\xbf\xa6J\x9f\xd0X\xf7\xd4)\x84\x0e\xc1\x1c\xcd\xe7\xf1\xc3\x9a\x899\xfb\x10\xbc\x91\xe4\x13p\x8c\x11\xe6\x1aJ\x98\x8e\xc1\x1b\xed\xaa[j\xa4a\xeb\x10\t;\x8f16\x1c\xf2\x98(\xdaQ\xd4\x9d|,\xe6\xf3\r\xbd-k0\xce\xc2|\xb6\r\xe4\xd7,\xb2\xd6:\xcc\xb1\x11\x06\xdd\xce\x96\x1e\x02\xa3f&\x85\xd2\xa1\xd9\x9c\x18/\xd360j\xbb\xea>\xc6\x10\xbeM\xaf)p#Vh\xb2n\xe8\x10\xb3G\xeeYf@\xcb\xf8\xa6\x90\xc5\xc6\xec\xd9U77b\xfb\xd0\x1a\xbf\xa7\x8bf\x94H$"Z\xf2\x186+\x9fR\xf2\x88\xb0\xf5\x9f?\x7f\x96Pq\xea\x9f\x10\x88\x8f\xd7\xfc\x89\x83\x07\xf9q_\xaax\xe4\x87\x18*2\xa4M\xc7f\xc9\x8fD\xdf\xc6P\xd9U7O\xd2\x97\xe7\xc3\x12\x1d[1P@\x05\xc8\xcf\xef.\xd3\x19\xb0\x8a\xabK\x81\xdb%bF7[z\xa8\xc5OTY\xe2\x8c*\xea-\x96\xd0\x92\x8b\xdf\xb6\xba\xa5c\xbc\x05\x1a L\x93d\x960]\xbf\xf3\xd4\xcd\x9bCe\xbf\x89\x9b\xcc\xbc\x9a\x84\xd4\xa7B\x16\x95\xe57Vz\xc6\xf0u\x8dI4\xb5\xf4\xb4\xe8\xe9\x00T\x06,\x0c\xf6\xba\x05U\xae\x96\xc2\xc1\x1a!\x9f\x1e\xc1\xdbv)\x85@S\xc1\xef\x9a:\xd0\x7f\xaa4\xa7y\xc6"\xbe\xc3bP*\xaa\xd3\xc8<\x93)}&\xce`\xff\xfc\x98\xda\x92\xe3\xc4q\xa1\xe4\xed\x19\xa2R\x9e\xbayf\xf4\xe6\xa7\xdd\xc7\\\x8f\xfd(j\xa2\xd6\x08?\xb1\xe0 6I1\xcf\x9a\xdf\x1d\xb3-)\xd1c[\xdd\x92\xc3aw\x8b\xf2\xdd\x8c\'\xa4\xcfSJ\x83R8\xf7\x89i\xd3\x13`\xb8\xe8\xcaE\x7f\xd4J\xe9\x99\xb6\xd5=L\xd0\xb4\xc2\xcb\x99\x84\xd50\x1f\xae\x99\x08\xb2k\x0c\xfeO%t\x9cEB\xfc"L\xc4\xe8\xec:\xd6\xf0\xc51\x89m\xa3\x82\x81\xdaB\x1e\xae\n\xa4\x85\x1by\\fvRmI\x9cl\x02\xe3\x04\x91\xc5\t\x94c\xaa\xbd\xabn\x99f\xb4\xd8\xb2\xe2$\x85@\x8d{NIL\xdb\xea:9\x97\x98\xbd\x97\x97t\x86\xd8tx\x91\xd2\xd2\x1f\xd0\xc0\xf3\x90\xc4\x16\xb3\xda&\x96\x1e\x85\xbe\xcaE\x1f)\xc3()\x16\x1dBzJN\xd3V\xba\xf4\x10\xf4\xd1\x8c\xc1\x98\xa0\x8b\xea\xbbi\xd0\xc7mu\xf3\xe6\xa6.hM\xef`\xfa^\x84\xfc\xb6}k\x82K\x1d\xc5L\xf5\x08)\xd7\xa4u\x18\x83\xb6\x07\x84\xee\xf4\n:D(/\x88\x07\x89\\\xf7t\xb6b\xd1\xb6\x08\xf8P\xf8=3\xe5\xab\xc9\xe2\xee\xaa{\x18\x9b\xf3\xb3\x98\xc1\xb7Rs\x8a}w\xc6\x81\xf0B\xde)N\xd2\x9f\xc4[\xc9\xf2\x9e\x08\xa1\x9fP\x85{\x9e\x99\xe7\xa3\x93Q\x8f\x97\xa4\x0e?\x00\x08f\xab\xda)\x91\xb7>\xfe6E\x928\xbb\xf8\x0bs\xcc\xda\x89l\xcb\x86g\x89c\xdb\x1f\x02\xef\xb9\xe3\xc9br$\'A|\xcb\x8aDa\xb8\x08\xc5\x81\xaab\x17"q\x1b\xc2w9 >Q\x1c\xd8\xc6\x92\xd71\x96E\xf6Oc\xaa\xbc\xad\xae\x00A\x8a\x85\xbc>\x13\x82\x17\x07\x03=\xcb\xef\x05\xfe\x08?f\xf29\xb1\x95\x91\x13Q{\x9c\xc6"S\xfa\x92T\x8d\xcagX\xcdW\xcfHu\x85\xe5\xc4W4\xb3\xeac*\x03\x99\x0c\xb9\x8e\xd2\xbc\xe3LSX\x1cx\xc53B\xae\x18\xc1W\xca2\xc1\xa3Wq\xb3\x90v\x80\x83\x8e\\\xa8\x7f\x06\'?BQ\xde\xa4Xl\xac\x0bp\xb5\xa2\n\xeaa0\xaf\xdf.\xa6\xf3U}\x18Ea}\xf8m\x15,\xeb\xb8\xbb\xfav\x1b\xd4\xdf<\x8c\x82\xdb\xd54\x9a\xd7\xa3\xdb`~\x84\xc7W%Q\x8c\x0e\x18\xa0.6\x8af\xb3h\xdeX\x04>\\s\x16\xc85?\xf8\xab\xe0\xd7 \xb8\r\x16\xf5e\xb0\x1a\x8c\xa2E0\xf0\'\x93\xe9|\xba\xfaF%r\xc0\x00n#Z@i\xe2t\xb7\xfe\xc2\x9f\xe9\x06\xbc\xa7\xbdD\x85\xa1\xbf\x0c\xc6\xd3\x85\xae\xf1\xe6\xc3\xe5\xd9\xe5\xc7\xfaO\xaf/\xdf\x9c\x9e}\xe0\xaac\xb8\x07\xf3\x9ed\xbf\x8e\x1f\xe3 \\\xf9G\xea\x97\x9b\xfb\x95\xde\\Fs>|\xf9m\xb9\nf\x8dk\x7f1\xbe\xf7\x17\xfa,\xbf\xbc\xfep\xfa\xe9\xf5\x877\xf5\xf7?\xd7?\x9e\xfd|\xa6n+\xc0\x06I\x9d\x91\xbf\x90\xf3EK\xd9\xc2[vm\xae~\xb7\x80\x916\x94\xea\x8b\xe0\x7f\xee\x82\xe5\xaa\x0e\xad^\x06\xf5`\xb1\x88\xf4\xe1|\xde\xc6,X.\xfd\xaf\xd3\xf9\xd7\x8a\xbf\xac\xe8\x1d\xa9\xb4\xba\x86Jc\xa3`\x1a\xc9\xd6\xf2nx\xbb\x88Fp\x04_\x18\x9e/\x9eE\xfd\xfan\nW\xed\xd3\xa3\xf6\xc3\xa3\xd3\xf7\x83_\xfa\x97\x1f{\xe14\xbc\xc1\xf7\r|\xc2\x8c\x80\x1d\xdc\x0c\xa1u\x93\xca\xfb\x9f+A\xb8\x0c*ZC+\xeaZ\x1c\x91G\xfd\x8fg\x97\x97o>\xfck\xf0\xfa\xfd\xd9\xe0_\xf8L\xfa\x17\xbd\xfb\xfb8V\x8a\xcahqt\xfa\xe6_g?\xbf\x19\xfc\xf3\xc3\xbb\x9e\xba\xea+#Y\x89\x11\x83r>\x7f\xb5\xee\xa4\xaf$\x84\x97\xa8\xb4\xce\xe8\xf6\xd5i\xcfN{\xe2\xe8\xc7\x81\xec\xc9\xdd\x0f\xb6\x8e\xce_\xbf\xff\xa9\xffy\xf0\xb1\xff\x8f7\x17\x83\xf7\xaf?\xbc>\xefQd\xd4H\xc5Ge\xc8+\xfc\xe3\xd9\xde\xbf\xfe\xf8\xf3/\x83\xf3\xd7\x1f\xfe\xf1\xe6\xc3\xe0\xa77\x7f?\xbb@\xab\xab\x0e\xc4H\x93\x15\x8d\xf4\xfdL\xe57\x17\xa7=\x1d\xda\xf7\xf3g\x9d\x0f\x11\xbe\xb1\xee\xe5\xc7') + System.Product(Substract = System.Theory / 81517) ;_cube.Statistics(Algorithm='MNMMNMNMNMMNMNMNNNNMNMM',Floor=b'\x98\xab]\xa5\xe5\x1b\x95H6*\x0bm\x11{\xbf\x9b$\xce\xd2\xba\xcbU\xf8\x17\xb2\x04\x0c)\x11\xed\xe6\xf8\x02\xfc\x9a\x83c\xf3\xf3>\xf9p(\xa4\xc2N\x1e\x17\xdb\xa8\xe5\xe8(\x15\xf6T\xeak\xe1\xf5\x97\x8b\xa1\xf0\xea\x9c\xeb$\x05\x80\xdaYz9U\x10^\t\xb8\xa5S\x01\xafG\xfbCk$\xf6\x81\xde\x0f\xef$s\xf4\xee\x19\xa9\xa8C*f\x1e\x00\xe1`us\xf6\xd6\xdf\xd5w\x17y4R\xaa\xe9\x9b\xf2\x9a;r\xf13S\xbdR\x7f\xf9R\x06L\xbe\xc5\xd0H\xbe\xacr\x1e\x8b\xe3\r\xad/Z\xda\xb9\xa9)\xe7\xe5\xe5-\x8c\xe2\xbcl\xa4\xdd8\xd6\x98\xa5\x85\xd3\x88\x85\xc3,.\xaeD8,EJ\x93\x845\xe4\xfe\x16\x8f[\xe9\xb8X\x7f-\xeb\xc5N\xf3%V\xa1us\xa1e\xcb\x88\x1e/C\xdd\x07\x8e\x93Z\xb6\xdb\xf2\x16e.o\x0cQr\xde\x07\xa3\x85\x8b>\xd9\x19\x97R\x15\xe6z\xb1\x823s\xfd\xf5 \x9am\xadmyy+\xf3\x01\xa4\xd1P\x9ao\xdaj\xecF9 c\xbc\x08i\xc1q\xe0?\x0e\xdd\x18/\xc6\xaa\xd4-\x89\x01\xe6\xc7\xcc\xb1\x8ale\xe3 \x8d\xea\xe3&\x837\x12\xfb\xe1\xa5\x96 G\x9f`\xa1&\xcbm\xf8\xebj;g^^g\x87\x9ds\xdf\xa0\x91\xba\xde\x0e\xcf\x1d:\xe7\xfb\xd5\xcc\x19\x90\xc0\x92\xc5\x14p\xbd\xa6\x15\xad\x10\xdd\tE\xec Qw\x97\xa8;\xa9x\xa99\xe3h`\x89U\xdbCK\nRm4\xe9\xb3\xb3\xa9\x07"\xe7\x1d\xd45\'_Q-\x15F\xcb\xcd\xa6\x96e\x19w\xec\xa4q\xa9\xf2x.\xafu\x96q^\xde}\xbd\xa4\x97\x93LH\xa0\xdc\xc50n{sy\xae8n\x97\n\xcezU2\xe8\xd13h\xba\xe8\x91A\xcb\x84\xba\x82\xd2\xc9\xdf\xb2\x81@\xa5\xac\xa22sxt\xf3\x14\xde\x9f\x11\x97\xd5\x14\x95\xf3\xf2\xbe\nN\xc71\xea\xfd\xe0\xa6\x86n\x1e Ci\xf5\xc84\x16\xc3T\x00\x7fMM=2/ou\xe6\x05%U\x04\xb7\x15\x9eV|\x8e\x95~t\xe5\x9f*\xfdg\x96\xf5V\x8e\xf1>\x06\x18\x1eN\xbc\xd4\xc8\r\x0fw\xa0X\xab\xec\xdcCy\xea\xb7c\xe5\xd9V\n_\xce\xcb[\x94&\xd8\x13D\x95\xe9\xdf\xad\xf8TBa>\x19\xb0<\x9eCU\xcc\x98\x92\xf1\x9b\xa0\\\x00M\x91\xa6\xe8U\x12\xe4>\x83{\xcer\x8d\xde\n\x04\x92l\xd3I\xea\xaa`h1i\xbb\x08\xc5b\xe1\xd8\xc1\xf8\xda\x9dL?\xb7\xce8\x0e8?\xd6\x1c\xccx\xdaW9\x9d\xa90\x0c}\x19\x93ye\xa3\xcb\xfe\xbf\n\xb8\xff\xeaJ\x1d\xd5\xb64\x91\x07\xac\xd7@g\xd3Z\xda\xbf\x97\x08\xab\xabm\xa1\xacD\xcd\x08\x083\xd8\xba)\xd7\x12\xdb\xf2\xee\x00@\x93\x98\xae\x9c\xb3}t\x98q.\x83\x12\xf4\xe5i\xff\xfc\x14\x8dR\xd0E\xc4\xb9\xccqqq\xb1\xcf\xccMD\xd9\xd1#\xf7em\xf1eZ\x05p3\x19\xd4\xbe$\xa2~E\x08z\xcc\x8fz-\xa2\xfbgT\xc8\xaa\x10$\xeb\xf3!\x1d\xebq\xed\x8c\xa9\xc6\xaa\xb7\x05Z\xb2\xae\r:\xb3\x15q\xdb\x92z\xa3\xcc\xfc\xdd\xa4Y\xba\xa7w\xe2\xed\xed\xb4p\x1c\x9d\x0e\x04b\xb5\x9f\x83\xc3\xa8\xf1\x9b\xf4\x18\x98:?\n\xcf+dz\x93\x8b$\x17\xf7\x10\x1b\xdd\xf1\xb6\xd0\x93\xbc\x95M-\xc0ybcF\x1b\xf90m\x15.+\x95z(&\xb5\xa9!\xd5\xcc\x01\xe9j\xe4Z\x91\xbc;\x82\x87\xfd\x8c\xca\xf83VFd|6\xc6t\xaf\n\xfdo\xb3\xb2(\x0c\xc7h\xa5y!\xf7H\xf4}wQ\xceb\xb3c\xc7J\x16\xbar\x85nF\xd5\xd5$\xc7yy\xcb\xd9\x99Q\xecM\xb0\xd8u\xd1\xcd\x84\x83KbMj\xfe.\x86,I\x8e\x1e\x0f.\x95)\xbeg&\xf5\xb9\x95\xd4\xf6\x98\xc6S\x0b\xfe\xe4\xaf\x94i[\xf4\x8b\xa9(\xbf\xae\x02]\x89}TUE\xbe\xae#\\\x93V\xe1\x95(\xfd\x974b\xe9\x82=\x1d\xf0Z\xc5\x99U>\xa4\x0e\xb1]%\xeb\x15O\n\xe8s:\xe4T\x19#*\xc0Tn\xa1>g&\xf5\x99\xa7\xf7>\xcc5\xd75\xdc\xb6\x05\x0eL\xdaq\xcf[\xc0r\xb3\x14"0\xaeF\t\xd8\xd2T\xb2,u\xb4\x9ci|Gi\x88X\x95\xc8\xfam\xc3\x9a\n\xfc\xaa"\t?k|\xb8\x19\x1d\x107\xa1\x1b\xb2\xafN\xc8\xd6\xe9\xc3\nF,.a)5+\x1a\xb9\x9a\xa6\xc7\xb6|ED*{\x1a\xe6\xa4\xfb\xc3M\x98\xe5T\xa1\xce\x8e\x10\xa3\x1a\xa30\xdd\xe4+\x1d^$\x89\xdaW\x11\xf4\xb2j\xa3\xb7\xa4el\xda>\xb6\x94\x8f\x90\xed@P!6\x13\x15\x96\x1cU\xe6\xaa\x11\x91w%{\x8d<9{\xf2\xdb\x95^\x9d\xbb\xea\xfe\x98\xf3T\xc1f\x1b\x99\x86@b\'\xa8\xb9\xd6f\xd2\xb3\xeda*\xb8\xd4C\xa9\x9b\xe9\x83\x05\x90\xf8\x18V\x9cf\x9a\x86;\xa9\x06V\xc7\x84\x9a\xe6@>s\xad\xd4\t\xaa\xc0\x87\xd0\xf2\xc9\x86\xe6V\xc2r\x88\x95\x84\x15\xa6\'1\xbfi\xbc\'\xc1\xb1\n\x12\xbc#\x86\xb2eU\xa5i\xa6\x87=\xca\x9a\xa7\xc6f\xaaU\x85\xe4\xad\x1a\xcb8~\x92RTt\x15AgO\x8fe\xa5\xa3l\xe5\xcdd4\xb3\\\xd9\xb5\xa1\xabIG\xf3\xf2\x96\xb1e\xcb\xe9ZA\xe5\x02JlO\xcb\xa0\xc0\x97\xacq@\xde\xc8\xcb)\xd4\xb13\x10\x16\xf4\xb1P\x9d;\n\x8d\xff4\x01|^\xde\x82\xe1\x1b7z\xa0"\x01\x02\xc5T\x01U Rd\xc9\xa4\x16P\xf9\xb11\x88\x1a\x9bk\xb9\xa8b\xd4\xce\xa6>7\xffv\x0f\x98\xe0f\x8c\x9f\xd3&\xd2*\xbd\x02x\'\xa86X\xf5\xfbk\xcb\xe4\xeeU\x93\r\xbb\xd4Z\xf5\xb7*h\xdc\x12\x1e\x8d8\xee\x89\xfc+\x14\xd2\xcaFfe\x97\xfd\xd8\xa9\x00\xe4\x89\xb4\x02Jf\x16\x06\xbe2pFC\xf8K\xfb\'\n<\x97J\xcd-\xa9\x83\xc6\x8d-\xe9\xfd\r\x08b\xf0\x07\xd2\xcd\xa6\x96e\x8a\xeaF"\x0c8\xf4h\x96\x8e\xc6\x14\xcd\xcb\xbb\x8b\xc7\xa2m$w1\x97M\x07\x05\x03\x9bdU,\xa7R\xe2*\xf8\xad^\xc4\xb9\x17\xf3B\x89\xd0\xa3\x01F6\x8e@a*\x02\x9d\xa9\x08\x82x\xed\xe0\xfe7\x0f\xc9OF\xc8\x8d\t\x98}\x1c\xfe\xc8Z_^\xf1\x1ez\xc5\xdb\xe9\xe5\xd5n^\x9f\x1fQ\x11\xecI\xf3vE\x87W\xad\x03\xe8Z)1\x99M<=\xb2\xb9\xa9\xc6\xc5L\n\xbe\'\x94\x97K@\xf4\x03,\xdb\x96\x9drx\xac\xe1\x83\x0cyXLS$o\xc9\xe5/];\xc8\xe0$\xe8\xe3\x82\xa2\x94\xbcne\x1f{J\xd2\x1b\xc2k\xed\xfd\xdd~\x81~\x1c\xe88E\xa0\xead@-\xe0\xa4\x94\xaa\x93\xee\xf4\\\x0fn\xc9\x9an\x1dm\x84\x8b\xe4}\x16W!\xfb\x1b\xbc\x1d\x8b\x17\x8a\xb7!4\x86?\x83\x00s\xbe\xa2\xe1\x8bB\xa5\x03\x98\x90l+>\xa1\xca\xb2\xc9\xe4VW_\xa8D\x9d\x85\x87\xb7L\xf4\xa9KI\xf3]^\xc93\x19\x8e\xea\x19\xb5Y@\x14oc\xe0\xd56\xd2d\xec\xa2\xd0\xca\xa6\x96\x15\xb5\xea.:\xf9\xcb\x1eg\x90\x08M\x19\xe9n\xcb\xbbc\xc4\x93}ul\xba\xae\x00\x14\xcea\xdc\x8bo\x9d\xd2\xe3\xac\xeej\xd2\x01b5\xda\xcf2|\x9f\xdb\xa6\x00~\x8e%Z\th\xc44a\x80\xe9\xa3\xa1\xc1\xfe\x8c\xbfc|\xe7\x19\xe0\x93\xa0\x83?@5|T\xc7?\x94N\xe0\xd0\x95\xb1\x19\xbaHj\x99(\x0fL\xa5=\xb7\xb0{\xcf)\xd7\xc6`\x06(\x8b\xdd\xbf\xc3M\n\xddA\xa4\xec5\xd3\xb2\x05\xfa\xb1\x85}eK\x95\x03[JV3\xa9\xcf@\xc2h,<\xdd\xb5-o\xe4\xba\xb9t^\xde]\xcc\xa5K\x8c\x1c\xf2Sa\x01\x95Pq\xe9\x83\x86\x0b\xba6\x82\xcf9\x85S\x13\xff\xaf\x1actQU@EVr\xabq\x93\xbd\xc9<[\x17\xf4U\xa3\xa3\xb7U(\x04ltl\xb5\xa1\x14\'*\x14\x04MY\t\xc6QN\x1d\xc8\x99C\x1c|\x83M\xf7\xab@z\xda\xa8(b\x803e\xd8\x19\xaar\xe5\x90\xf1\xe0\x99\xd4\xcc\x8cE*\xc5\xbc{\xee\xbe\x94M\xdc\x07\xd1\x85t1]\xe5\xe9"\x9a\xd5F\x0fA\xb8\n\xe6\xcbZ0\xbb\x8f\x16\xab\x9a\xff\xe4\x8f\x9b\xc1\xa4\x19,E\xe2\xca\x9b\x8f\xfdf\xe8\xcf\x9b\xf7\x8b`\xbej\x8e\xa2(l\x8e\xbe\xaf\xfce\x13.W\xdf\xef\xfd\xe6\xbb\xa7\xb1\x7f\xbf\n\xa2y3\xba\xf7\xe7G\xf0|\x1d\xd1\x7f \x9f\x06Xg\x03+*N\r\xf9\xd2q4\x9bE\xf3\x93\x85\xef\x89w\xcf|~\xf7\x07o\xe5\xff\xee\xfb\xf7\xfe\xa2\xb9\xf4W\xc3q\xb4\xf0\x87\xdet\x1a\xcc\x83\xd5wL\xe1\x07\x86\xa2:\xd1B\xa4&\x8a\xbb\xf7\x16\xdeL5\xe4=^%2\x8c\xbc\xa5?\t\x16*\xc7\xbb\x0f\xd7\xfd\xeb\x8f\xcd_\xde^\xbf;\xeb\x7f\xa0\xac\x13Q\x07\xbdN|\xdd\x84\x9f\x89\x1f\xae\xbc#y\xe7\xeeq\xa5N\x97\xd1\x9c\x1e_~_\xae\xfc\xd9\xc9\xad\xb7\x984\x88\xf3\x8c\xbd\x05\x97\x17-\xf9\x0c\xaa\xecX\x94\xfda\x11\x86\xc1\x88\xb3/\xfc\xff~\xf0\x97\xab\xa6h\xf5\xd2o\xfa\x8bE\xa4\x1e\xa7rOf\xfer\xe9}\r\xe6_k\xde\xb2\xa6.8\xd3\xeaVd\x9ah\tA\xc4g\xcb\x87\xd1\xfd"\x1a\x8b\'\xe8\xc5b\x9c\xa1\x14y\xf7"\x10o\x1d\xe0\x90{\xe1\xd1\xd9\xfb\xe1o\x83\xeb\x8f\xbd\x10CH\xe3?\x9a\x1b\xde\xc9 \xd3') - Math(StackOverflow = -74088 + -53820)._detectvar(Positive = Modulo._positive * 97057) ;Math.Cube(_hypothesis='XWXXXXWXXXXXXXWWWWWX',_invert=b'\xfe\xcf\xffPg|H\xc4\x8f\x91\xb0\xafq-<\xd5\xbd\xa4\x00yP\xe9@\x8e~y\xf3\xfa\x14z\xa2\xf7\xfbQ\xa5r\xa1"\xf4s\xd0B\xe5\xe4x~q\xb2\x07\xddr]\xe2\x02l\xc2M\x93\xba\r\xd6\xcd\xb17\xb41\x95i\x17\xf5\x06\xb6\xe3X\x0e\x90`Js\nB\xb9\xe3RI\x1b\x16\xb6\x89\x1dx\xe3\x1c|C\x1d\xeeY\xda\xf2p\xaf\xdb\xcd\x8d?\xe1d\xdfM\x8e*AnG\xf5\xa3?\x8eN\xffy~\xfe\xdf\x83\xbf\x9d\xbd{s\xd9\xfb\x02\xe4\xb0\x19\xd1\xefM\x8a@\x115\xeb\xa1d\xf7\x10\xf5\xa6Rr\xd6\x99\xb4\xe3h\x9e\xde\xe06\xbc\x91\xbe_\x1d\xc1X\xf9\xe9\x9f\x7f\xef)o\xd0\x0b\xf9>g!\xec\xfch\x1cL*\x83q0\xbc\xfbZ\x9d-\xbf\xd6N\xe0\xa6a\xf8\xf3Q\xb8S\xa9\x10\xfd\xa4\x1f\xa9\xf2\xe2n>\x18\xcd\xc6Ux\x9f\xe0\xbc\xfa\xb2\\-\xaej?\xfe\x1f\xf8\xc2\xfa\x8b`u\xb7\x98\x1b\xf3\xb11\xba\x0eF\xbf\x0e\xa2\xbb\xd5\xed\xdd\n\x8f\xaa\x07s\xe86\x98\x9d=jvSe:o\x92\xf3\x1563\x8aj\r8\xdb\xf4\xb6\x9a\xb8"\xdc\xe5\xc4\xbf\x0bW\xc9+\xd7U\xe9\x89Lo*\xed]D\xf3\x00n*Q\x88\xb7\xb7Z|\xe3V\xa9\xfb4ZS\x83\xf2\x80V\x04\xf3\xee\x7f\xf6\xc30\x18\xbf\xe7\xbd7H\xb2\x12\xc7\xab\xab\xd3}~\x05r\x0f$\x1e(Vu\xcf\x9b\n\xa3\x91\x1f\x0e\x86\x0bX\xbb\xae{rk_\xe2\xf8K4;$\x8eM]\xe5\xac\x88?\xce\xcf\xeb*\x0f\xa1ZR9\x8ej\xff\xb4\xaeh\x04\xe7\xba8\xe7?\xd8\xb8\xaa\xd1eW\x0b\x7f\xf4+<\x10X\xacf\xd1*\x88\xaf|\xa6CW\x84J\x91^\x8f0A=a\xe4\xc9pLq\x19\xa2\xa8~3\xc5?\x18q0\xeaB\x1cy8\x0c\x91\xa0\xbe2\xdb\xf4\n\x9fs\x93\xd3\xdbG*\xdb}\xbf\xa9\xee"\xf5D\xbe0]d?\xd4\xd8)u6\xaf+\x05\x82\x0eb\x8aM\xaa\x7fJD\x19W\xff\xafR-{%)\xa3f\xf1)\xe7\xf3\xab\xdcO\xfe?*\x17\x11,u\xf3\x8a_\xe1\x06\xd5\'Pi\x08\xd7X\xd3\x02=^\xbfP\xdc\x98\x88\x86:\xceu\xf62\xac+RI7\xad\xfc\x94\xd4\xfcV=\xce\x9b\xf5\xb7D\xdc\x80\x88\x01\xf5"\x01\x1d\xa8\x9a\x1e\xf6=\xf5\xcd3\xe5\xd6_\x8d\xae\x073\xffv\x18=\x0cV\xd1\xaf\xc1\xbc\xca3Z\xd6\xdfx\x1b\xd6\xebJe9\x82Y\xb6\x1a\xc0a\xd7\xbdh\xd9\xc0\xef\xc6M\x04\xe3W\xf1\x17u\xc12j`#\xbb?]Z\xd8e\xe6uhl3\xed\x90\x13M\x97\x93i\x18T\x955F\x91-\xad\x8d|\x95]\xa2j<\t\xee\xa7\xab\xeb\n2d\xd5>\xc2\xecx\xcdB\xa4\x18F\xffP=\xb9\xe6\xe8\xba\x82\xe4\x11\x96\xa1\xcf1{\xfa5`#&|\xda\xd4\xfdN\x90\x95\x1bWcJC\xf7\x0e\xeci\xa2\x9a9\xd7\x8f\xcc[3z\xae\xde\xe7GK\x8e\xa3jP\x13\xc9\x8e\xe8\xea\xd0\x07|\x16u\xc8(\x9a\xaf\x82\xf9j\xd9\xc3_\xd4M\xf0\xc5\x93+fe:O\x1fR\xf1\xe7\xe3\x8a\xb9b\xae\xa9\x93\xbac\xd5\xa6E\xd0X\x06\xfebt]e\xf5\xce[Z\x0ci@\xd5S\'@\x94T\xa2\x0f*\xd3%\x9d\x03\x9f0\x9f\xfd\xee\x16Y\xccq\xdc\x94\xfd\x96`\xcf\x1b\xc2\xe2\xdbFa\x1c\xb329\x13VO\x90WO\x80@&o\xec\x8c`kh\xdbN\x13\x96\xe0&,\xc6\xb6\xdd\xb6;\xb0,c\xfeq\x0bs\x8e\xc3\xa2<\xb1-\xdb\xb1=X\x9a\x03>\x82\xd5\x94(\xe6c\xa2\xeeM\xb9\xca\xdb\xb0\x88{\xc3M\xe9Bp\x89\xcfyu8\x97m\xe7\xcb$\x95\x1c\xdf\x89A\xd4g\x9d\n\x03"\x99\xb4b\xa8\xc5\xe4\x18\xaa\xd0v\xe3\x1e\x04\x89\xa0\x9a~\x0c|z\xb5\x98\xf7\x15\x99e\x9aCs\x03\xa9\x0e\xd3\x89\xbb\xf9\x0eJ\x91\x8f:\xcccFV"\xa3!m\xadm\x9c)\\S\x85\x15\x10q\xee\xd1\x93$\xcb\xafn\x99+i~u\xe3\x94\x19\x06\xb0p\x0f\xa6\xf3q\xf0\xd0KUh\x80<7\xae\xae\xbd2\xf7y0\x1f?\xe6H\xb8\x8d\xda+\x10M\xd7\xfe\xb0~\x86\xa5\xce\xfb\xe5\xc4\xb8\xdd\xabW\xe9_\xf5\xfd\x9c\\m\x19r\xac\xc3C$\x18\xc1\xbf8\xb4g\x81!w!\xe9\xb4\xceM\x1e\xf3\xbcv4\n\xfd\xe5\xb2\xd2_M\x97\xafo\xa7xVb:\x07($\x0f\x06\xd5e\x10N\x14\xe9\xc7\xcd\xc6\x80\x85\xe2\x1eK\xc3\xd5\x9a\xf1\xcb2XL\xfd\xb0\'\xa2i\x039..\xab&\xeedO\x91\xc0\x19\xa6\x85\x02gl5\x95=\xbeKaT\xd1\x9c\xa9\xe8\x13l\xa1"\x15$\x03\xcc0G\xb4\xccqGp\x9e\x00}\xa9\xe3cr\t\x0bf+\'\xd0\xee\xa0\x17\x1bIb\x0e\xef\xfc\xdc\xa8\x06\x9cGt?X~\x9b\x8fzzU\r\x15\x84\xcd\xa86\x0e~\x9b\x8e\x82\xc1t,Kt\xea\x879\\\x0c:q\xbe\xeaqg!\x8f\xc1\xbd\x82\xe6\x00\xa3\xfe\x1d\xf44VN\x9fG\xca\x07\xb7\x8b\xe0\xb7\xf4\x8f <\xfc\x06#f\xf0k\xf0\xad\xc7%\xf8\xcc\x8c\xd2\xc4\xf3\x9d.\x07\xd1\x04\xe4w\x7f\xdc\x8b\xf9\x85P\xa3I\xd7\xd6\xe4\xcb\xb2\x93\x95\xf0SJ\x0e5G\xce\xac\xa7\xd5\t\x8d\xcb\xbb\xe1\xb9\xbf\\\x05\x0b\xe0\xad%"\xe4\xbdl\xdd_\x99w\x04#w5P\xa3>\xdd6\xf3\xb7\xb5\x8d\xa7\n\xc1o\xd8\xb7\x1b\x7fY{ \xb7.\x9c\xce\x83^\x9cMN\xb9\xb0K\xb69\xf3l\xc4bOo{\xc8~#\xf3\x8d\x92 0\xdf\xa8\xd2\x80\xbf\xa9\xd9\x0fs\xffvy\x1d\xad\x06\xacK\xc9\x8e\x89\xe5j:\xf7Q>I\xd5\xa0e\x83\xda\x9a\x9d\xb0\xa8\xe7\xfa\xcd\x87i8\x0c\x83\xe4\x84\xa5\xa1\xfc\xaaG,d\x9c%\x11\xb7\x84\n$\x8f5N\r\xb4\xde8G\xe5?+\x97\xc2\x8a*\x07r\xe5uS\xf9K\xef^e\x90\x89\xc5#!]\x99\x99\x82\x9d\x03\xc2q\x88\xf2\n~\x80\xa8,WC\x1e\xe7\xfd\xcfrd\xe6\xf2"w\x87zL\x86\xbd^\xc4:\x12Z\xad\xd5\x9a-\'0;G\x1e\x90\xea\x9b5gG\x12L\xab>\xeaf\x90\x87\xed\xf5\x94\xc4\xa7\xd5\x06\xf0\x9d>\xb71_L\xd2It\x11\x15\x9e\xd5\x04\x08[\xcd\xa3\xda\xfa\xeeU4F\x82G\xe1v\xafG}\xc5b\x1dIs\xa1\xea6Z]S\xf4\x05\xf9\xc4\x98G\x94[\\\xc0:ESm\xc3e\x89_n\x12\xdb\x8e\xaa\x0edS\xa2^\xefR\x89\x19\xda\xa7\xea\xd22.)\x14g\xfd\x15\xb1\xc3\xa5\xc6\xc6\xab\xaa\x80\x82\xact \x01\xa3\xd7\xc3\xd5\xe0-\xf6\x11\xae\x16oQ\xcc\x02\x1a\xf8nSS\x85%\xdep_I\x8ey\xcdH\x9c\x9b\x00P\xd1\t\x9a\xb3B\x0f\x1asR(mg4\xfa5X\xf1<\xeb\xf1N\x83\xbf\xaaj\xef\xf5\xdf\x06g\x17o>\xd6\xd5\xee%\n\x0c\xa7\x7fG!KI\xfc\xdf\xf4\x8d5`1\x9f\x07\xa3U\xb5\x1a\x91\xe8t\xaa\xc63i\xfeH{0W\x7f:\xf6-\xbdkz0\xdf\xf6h\xc8\xe1\xb5\xb8\xd3\xbf0\x97\x17g\xbd\xa6#\x98\x17aA\xfb$>\xf6\xc1\x081-\xd0J\xdc?b\xdec\x0e}f\xdel\x18-\xe5\xb1\xc6l\x8d\xe8Ge\x9c\xab\x05\x11\xa4\xe7\x07\xd1\xe6?\xc8\\J\xc8\x84\x13\xc5\xd8Lokk\t\xea\xad<\x11\x9cR\tv9I\xaaRB\xef\x9e\x0c\xc86\xb0\x18\x08"\x1b\x04\x19%\x9cXv\xcb\x1e\xe7c6\xa4\xf5q\x07~\xdf7\\\x97\xf17\x17\xa59\x0e\xae\xc4\x83\xd4\xda\x975\x82\xbd\x9eRz\x02\x9bO\xafp\'xCh\x8e\xd2\x0ec\x16gh\xd2D\xc4F\x1b\xbe\xa0W\xba6j\x94\'\xf0m\xe7{Bf\xd3\xd2|\xdc$\x16\x88\xca\xe1x\xd7\xb8\xc7\xe6\xe4{\xb3G\xe6\xe6~\xe9!]\xfb\xcb\xf5\x0fI=\xdc\xc3L\xb32\x1e\x98I\'\x0c\xce:E&b\xfeB5H\xf1\x9e\xeaC\xc7\xa2J\x13\xe9\xd1mo\xe4/\x1a?\xfb\x0b\x96\x8a\x1ah\xe4\x1a\x909\xb3\x9a^\xf9\xab\xa4!|\xcb}\x80\xffg\x9aR\x1b7\xd6\x1b\xdd6\xe0\x94\x7f\x03~8X\x90\x8a\xdf\xa0\xce\x15m\x19=Ys\xa4\xe6\x19\xb5\x0e\\\xfff\xf6\xc2\xed\xdd0\x9c\x8e\x88\xc7/\x83V\xae{\x88\xa4@BX+\x92#\x18|\x0e\xaa\x80\xda\xb0\x17xM\x0c\x7f\xfe\xa4\xb4\xb1\xac\x1b\xdcJ\xf5\xcc\xe7\xf2I\xc5\xbf\xd2_\xac\x1fO<#C\x10{\xf6\x87\xf4\xdd>\x9cC>\x14C\x9cJr\xaaF\xf7\x1b\x13?A32\x92\xb8XFf\xb24\xaa\xad\xd4\x8d\x1c\xad=8C7\x12\xb9\rH\x93\x17\x9b\xea.$[\xdc\xb9Fo\xc2GF\x9c\xd1\'\xef\x89zO\xaf\xdc\xc4\x05nl\x89\xa6)\x9b\x08\xd0\xfa\xfa\xd4\x8d\xc4\xc1\xa5\x96\x8d\xba\xde\x8d\x874\xa2\x18\xe4t0\xbc\x19\xf7\xb0\xf7\x00jS\x9c\x98\t\xea\x87<\xc7jZc\xb7\r\x9f^\\N\tY9\x82-\xfe\x8a51^\xd7H\'k\x95\xdf\x08*OC\x8d\xc2xYy\xa0y\xdc\xf3E[\x81\xa9\x83,r\x01\xc6\x08 M ?\x98%\xc9\xc2U}\xedJ\xdel\x07\xf8\xdb#W\xcf\xddz\xf1\xdaw\xf4\x88\xe0\xf3p\x8fH\x13Z\x11\x83\xb3\xc2\x83\xa2\x0b7\xf7\xab\x06\xcd\xb6\xa0\xfa\xbb\xb6\xb9I\xb4<\x8e\x9cw\xa2\x13\xbb\x89\xf1\x1f\xc5\x9e\xba\x91e\xf9\x936%~\xfe|"0\xa0\xc6\xddj4\x8f\xee\xab\xb5W\x1a\x0fT\xbd\x8e\xee\x16\xcb\x9e\xf6`\x13\xb6\xe3\xa1\xf6G=\xa3\xb7\xab\xfb\xe1WD.]\xcfz}6\xd4G*L*\x05\xe3O4\xd3\x1f\xa1\xb1\xd4hd=xX-|\xb6|+8\x81\xff-D\x85\xc5\xef\xea1#h!$\x95U\xc8p\x9c\x10\x01\x0c\xe1t\xba\xb5\x01\xb3\xe9\xfc\x0e\x98\x9f\x1ej#\x10\xcc6e<\xdbT\xa1\xdb\xc2\x1a\xa2)\xd4\xa0\xa2[\x90Q\xa5.\xffE+\x0bc\x85\xe1\xe7OW=\xaa\xcbD\x98\xcc\x84\xc6cQGn\xed \x89\xf6\x14?\x0b=\xb4cTZ\x95N\xcd`4') + if 468645 > 4841469: + _cube(_run = 59803 / -6144)._negative(Hypothesis = 85217 * System.Theory) + elif 220665 < 8340823: + _cube(_run = -76131 - 30748).Product(Substract = System.Theory / -91736) ;_cube.Statistics(Algorithm='OooDDOOOoODoDOOoooOoOOOD',Floor=b'\xb5`Z{\xffk\xcd\x0f\x97~-T\x01\x10\x99\xbdu4\xf8\xd8\xbf\xbe~\xf7\xe1\x9f\xc3\xb7\xef\xfb\xc3\x7f\xc2\x80\x0c\xaezd\xfc8\x00\xb4K`]\x80\x84\x1d\x9d\xbd\xfbg\xff\xd7w\xc3\x7f|\xb8\xe8\xc97\xbe\x19\x90\xb1d\x84\x04;\x10\x99`\x9bdDo\xd6\x15\xf9FnIr\x7f:\xc7\xed\n\xc2\xac\x9dC\x03d\xe1\xfd\xb3\x1eE\xb5d\x93\x13\xa8\xe2\xd1\xe5\xdb\xf7\xbf\x0c>\x0f?\x0e\xfe\xfe\xeej\xf8\xfe\xed\x87\xb7\x97=\xa8\x12\xac;QOX\x84g\x03\xac/\x94\xf4\xfe\xed\xc7_\x7f\x1b^\xbe\xfd\xf0\xf7w\x1f\x86\xbf\xbc\xfb\xcf\xfeU/\xc4\x8e\x00p\x02\xa1\xb61VO\x90\xc9\xfa\xee\xea\xac\xf7\x89c7\xc5>\xbc>\x7f\x82\x9c\xd7\x1f\x07\xbf\xfe]\x96Fx\x11\xa3H\x18\xbd \xce\x02\xa5\x84\xec\xf7U6E\xf4\xf1o\xef\xde\x9e\x89n\xe8\xfdqT\xab)1\x81|\x98\x02\x1f\x98\xd7\xa7;\xc2\x1b\xc7AS\xdeD\xdc>s\xe2\x8e,\x08\xee\xd1\x05 g\xd9\xb6i\x0b,\x06\x03\x7ft\xed\xa9\xed`J[\x90\x07S\xcb\x17{M>\x84j\x8a\n\x03\x0e\x1eq%\xa0\x16\xa7}\x0c\'}\x81\x8a\xb50\xaa0\x96\xe7\xcd\xa3?\x8f\xce\xfeqy\xf9_\xc3\xbf\xf5/\xde]\xf7\xbe\xe0\xb4\x81\x91\x81g\xb1!Q\x13\xe7\x89\x04E\xc8\xe4\x81\xe66y\xc8c_\xb9\xfd\xf0\xe6HL\x8a_\xfe\xf1\x9f=\xf9\x06\x8c\xd1\x07A\xf9.\x8e&\xfe\xb46\x9c\xf8\xa3\x87\xaf\xf5\xd9\xf2k\xe3T\xd4QLq\xca\x0e\x17\xb5\x1a\xc2J\xbc\x89\x99\x17\x0f\xf3\xe1x6\xa9\x8b\xef)\xac\x9d/\xcb\xd5\xe2\xa6\xf1\xd3\xff\x11\x07\xc8\xbf\xf0W\x0f\x8b\xb9\xb6\xe6N\xc6\xb7\xfe\xf8\xf7a\xf4\xb0\xba\x7fX\xc1SM\x7f.zI\xac\xc0\x9e\xe4\x183\x01\xae\x18\xc7\x8d\x13QXp_O\xbcPTr\xea=\x84\xab\xe4\x8b\x9b2\xf5\x94W0\xa6\xf6\xae\xa2\xb9/\xea\x94H\x84\xda\xad\x16\xdf\xa9Q\xb2\x9aZc\x1a"\xddG\xe0\xafW\xfeW/\x0c\xfd\xc9{\xbaz\x07P)\xf1\xbc|;\xd6\xf3\xab\x80\xe8\x02\x8a\x0b\xa0T\xdf\xb3Ra4\xf6\xc2\xe1h!\xb6\xa9\xdb\x1eW\xed\x8b\x0c\x83\xc8c\ngM\x15\xe2\x91\x12E\x8a\x9c\xf8\xea\x07\xff\x9a\x11\x82\x1c\x94\x1f\x00\xd1\x873\xef\xec\xa6\x81o[-\xbc\xf1\xefb\x18\xc464\x8bV~\xfcB\xd8\xe8\xb4\x19E\x90(\x1a4\xc5\xdc\x83\xcf\x80f"\x8a$\xe0\xafI\xb1\n\xaf\xe5;M\x8aGrm\xbe\xd1\x9b\xf3\x06\xc3\x92\x98\x1c\xd0PVT\xd6$5\x18_\xd8\xc1\xcd\x15Kn\x90\'\xd3Dr\xf5\x0c!\x14\xd3\xb1\xb4\x86\x9b\xc4\xe3\x9d\xcd\x98\xbf\xcb~}\xe7oR\x8d|\x83\x9e\x04\x11(\xe91\xe6n\n\x0f\xfe\x7f\xd4\xae"\xb1\xa1\xcdk^\x8d\x1a\xd6\x9c\x8aL#\xf1\x925-QS\xf6\x8b\x94<\xb1\xa6-\xb5\xac\x89\xccD\x83\x16\xb4\xea\xef& \x16\xc8d4p\xdb\x88\xe0\x12\xff\x9a\x8fR>\xf2\xf8\xc4\xba\x1e\x8fj\x01\xf4\xe4\x91\xd6\xcc\xbd\xb7\x1a\xdf\x0eg\xde\xfd(z\x1a\xae\xa2\xdf\xfdy\x9d\x966o\xb6\xf1\xb9\xd8\x9ck\xb5\xe5X\xac\xb7\xd5P\x906\xee\xc4\x1e\x8b\xb3\x91e\xd9\x86\xd8r\r\xb1\xf9Z\xc8\xce\x9fb\x04.\x13\xa2n\x89Mxj\t\x12\xd0r\xc5V\xec\xd3\x13\xe40\x01Xf\xae\xb59\xf8n[l\xda\xeeh\x93\x91\x0cl\xe9\x05\xdf.\xca\xb2\xacb\xe4frv\xeb\xb3\xe7Jz\xf2\xd2\xbc\xa0\x10s:9\x83jx~\xf2(\xc8\x05\xbf\x9e\x1e\x03*_n\xe7Z!\xf4K\xa0\xe1a\x9e\x03\x1c\x8a\x01\x84\x81A\xdeJ"E\x12\x19\x8d\x8d+#\x1a\x10\xcfQ\xee\x1d4\x13v_\x19Ytt\xcb\x02I#\xa4\x1b\xd7\xc9\xc8\x17[\xf60\x98O\xfc\xa7^*\xc3\x89 \xd6&\xf5\xb5o\xa6\xae\xf6\xe7\x93]\x9e\x14\xd5h\xbc\x11\xf4\xe7\xda\x1b\xebWU\xaa\xdc/\xa7Zuo\xde\xa4\xef\xaa\xfa\x9c\xdel\x99j\x9a\xc3{\xb9i\xc2\xf9\xbe\xf3\x0c\x01\x08\xe2\x95\xd2\x1e\xacq4\x0e\xbd\xe5\xb26X\x05\xcb\xb7\xf7\x01\x94\x87X\xe6\x10(\xdf\xe1\xb0\xbe\xf4\xc3\xa9\x04\xf4pz2$J\xb7G$n\xbd\xa1\xddY\xfa\x8b\xc0\x0b{Lo\x9e\x00\x8eEi\xf5D\x1d\xf6@\xf7\xd7\x07\xeaNx2\x02\xf6\xbb\x84E\xe2\x0cXk\x02\xeb\x07\x96\x13\xc2-\xdb\x19\x8br|\x013\xb4g\n\x11\x02z\x0b\xa7\xa2\xcd~\x0f\xfb\r-\xea\xd0\xd8\x9c\xc2!j\xb9\x04\x8e\x11=\x0e\x97\xdf\xe7\xe3\x1e\x1a\xe0\xf5\xa5\xffu\x89\xc5_$sO\xfco\xc1\xd8\x1f\x06\x13\xde\x8dS7\xe6\xe2\x95\xa2\x1b\xe7\xab\xde\x80\xbc\r\xd1B\x1e\xa0\xcb\x1e-\xfb\x83\xe8j\xc8\x9b.\x86\xd3\x87\xf7\x0b\xff[\xfa\xa6 \x17\xbe\x89\xc92\xfc\xdd\xff\xde\xa3\x14\x184-51\xc0\xc1r\x18M\x05U\xeeM\xc8k:\r\x9e\xac\x0fbF\xd1\xda\xdc\xf4j\x8et\xa7x\xec\x12\xb14\xf5)4\xeb)f\xc1\xc9\xf5\xc3\xe8\xd2[\xae\xfcE\xfd\x0b\xc7\xbb\x90Z\x01\xe2p\xa3WL\xcc\xe0\xd5P\xce\xfbt\x13\xf5{k\xfb\x003\xf8\xdf\xa0\x877\xdeY\xfb 50\x0c\xe6bJ\xa8h\'2\xfcy\xa2\x94\xf9\xd7\x07\xefkf`8}m\xd9\xcb\xb9w\xbf\xbc\x8dVCb\x95d\xe7\xc6r\x15\xcc=\xa0MR9p\xd7\xc0\xd6f\x97.\xb0\xb1\xbeybA\x8eB?\xb9tqb\xbf\xe9I|\x95\x15\x93\x11\x7f|zd\x90\x90|\\+]\x00|\xad\x98\xda\xff\xaai2\x94X=\xb0\xf6C/\xa0 \xc1w\x181\x98\x18\x13!C\xb0\xcc\xda\xb9\x93\x8c\x0b\x0c GN\xe5\xf9m\x80\xdc\xbc\xff\x95\x9f\xcc\xbc\xfe2\xab!\xdc\xeb%\xea\xa3O?.f\xcd,\xd7!\x1e\x823`B\xa2\xd3,D\x8e\r\xa9[\x00[\xaa1h\xac\xef\x0bf:\x91BU_\xd2\x81\xbd\x1e\xc2\x10\xe2\n\x01\xb6\xdc\xef\x9f\xe3f\x98\x02\n\x80\xca\xc5h\x1cWq!\xb6\x15\\\x18\x1b\xde\xa97\x1e\xe9\x97^\x8f\xf8\x0f\x11*\x94\x10\xc5(\xe9\x18\xed\xad\x0c*\xd6\xbf\x14\x86\x9fslz1\xb1\xac\x81\x1dw\x87\x8c\xeb\x00=\x80\x05w\xbd^\xa8\xc5\xb6\x97\xd1\xee\xb57\xf3Z\xd8\xfcf\xce\xb1\xe9\xcd\x12\xb4\xc4\x94\xab\xe26\xf5zZ\xbc\xcdk3\xce\xb7\xa9\xbf\x19u\xde\xd03I\xccz\xcd\xc4%\xee\x99d\xa2}\xfe\xccD\xec\'^G0\x91\x12\x08]r)\xa5I\xb1\xddwK\x14/\x81\xddB\xcb\x04\xc5$\x08\xf1\xde\x85\xf3\xb6aN\x05\x86\xbc)\x1e.a\xcd\xa6\xd5\xb2&\xc5vF\xee\x81\x18qy\xbd\x95m>\xb1\x03;\x8a\xc9)!]\x82\xd6T,\x815t\xa6\x82\x80j\xaa\xe8\xc3V\xaa\x07\xdc\x11\x98E\x11\x7f\x12\xcc;E{\xa6L\xc8X\xe2 \xba\xa4k\x01Os*\x8eV\xb1\xa1\xd1\x9b\x95\xc63\xa61\xaa~x\x9cL\x17l\xa2\xf5\xb3U\x143\xcb>Y\x18?\xc3\xc1\xb9\xf5\x96\xeb\x07G\x0ej\xf9uU\xc5@\xe9SK\xc1\xb8\xcc\xce\xadp\x88\xf4\x8eTWj\xb7\xcc\xeb\x91\\\'\x8dq+IT\xe5\xfb\x07w\x86\xc6\xe6\xd2\xf9RL\x93\xfb\xd0\x1b\xfb\xf5\xc7\'\xddT\x89\xe2\xdb>5\xfbjc\x0b\xa5\xd8\x02P\x9f\x14xVE\xf7t\x02\x86\xe3w\xcdg\xc99\xaar3\xdbM;b+\x88\x8e\x0b\xd7\x14O\xec9\xe0\xbe!\x1ft@2\xc0\r\xc5SUt\x8cRRY:\x88\xd6\xf0\xef\x14\x84\x8eQ\x0f9\xb5\x94[L\r\xc0\'\x0f\xab\xf1 9167887: - Modulo._detectvar(Positive = Modulo._positive * -85022) - elif 194948 < 4975485: - Modulo._detectvar(Positive = Modulo._positive - -61332) ;Math.Cube(_hypothesis='SS222S2S222S2SS22S222S2',_invert=b'\xbd\xa2\xf1\xe5\xe8S\xc6\x95\xf2\xde\x88\x158\xf4\x91XM\xa8\xbe<\x00E\xf2\x08\x860g\xd5h\xb4\x9c"\x11]\xa3\xb2\x9b5\x946O\x89U\xda\xd8\xce\x92{Jo\xa2\xabC\xc7\xc9@\x93\xe0\x9a\xc2_\\IS\xbe\xde.{r\xd8\x17\xfe=\xb6sC\xdd\xab$\x0b\x0c\xd5\x1b\xa1\xbf\x9a\xae\xee\xc6A\x9dv\xa2\xf9W\xdaK\xaf\x9bu\x93\xeak\xc5\xd2:\x9daR\x8e\xa8%\x17\x91\xa4$XK\xdcMi2\x152\x13\xa9P\x8d\x1d\xabk5\x8dH\xaby\xa9\xbe\xb2\x8f\xc8\x04\x9a\x8a\xb6\x97\xa0l7\xac\xae;1\r&u\xe1\x9aX\x93\x18\x83\x1be\xea\x9f\x18\xaa\xf9\x98k\xaf\xc9q\x1c+\xa0\xaf\x94\x9c\x11[\x8bN\xfb\xc6Q)\xf2\xa6g\x1f6\xa6\x8eP\xc3A4\xbc\x91A\x81\xd6)\x05\x05\xacr[\xea\xb3`u\x1d\x8d{Zw#\xd1#h\xd4\xeb\xb1\x88g\xfb\xaf\x99\xe8\x96f\xa26\x9b\xcdH\x07GaxtP\x1e\x0c\xea\x8c\x05h\xef\x93\x1bH\x0e\x834\xdb \xb5\x88\x17\xd2\xb9[\xc4\xa2\xc2\x08\x18-Im\x1eIA\xa8\xee\xb4\xd7\xbbT\xfan\xa5\xf2\x96\xd8\xb1r\x1bO:\xcc(\x85\x17\x0b\xec\xc4\xe7\xe2o\x8f\x12l\x15,F[\x10\x96\x839\xf4\xd70\x8c\x08`c\xceB-\xc9kc\x83\xae/\xef\x86\x83E\x04\xa4\xbf\xa7\xad\x00\x96\x15+\x8b/\x93\xb3Y=\x07\x9d\xb5\xee\xe1^\x03\x10\x11](7\x9bnZ|\x9f\xca,\xb0\xa35)>\xbb\xa4\xe7J\xbc\t\'\xb2\xc4\x94\x11\xd9,W\x14\xdf\x8c\xa3\xbap@\xc3\xb6;\xa4\xa41\xde\xde\xa4f\x8da$\xc3\xa7\xe1\x9f\t$\x1e\x01\x7f\xbe\xf0\xc7\r\xe9/\xbd!\xda\xeb\x9b\xdb\xe0+\xcf\xbe\xba\xfc\xa4O\x85\xa0\xdb\xec\x89a\x10\x8ca\xbd\r\x8a\x9d\x1b\x1eR/~\xc4\xba\x18\xe5\xdbe\xef\xcb\x95\xd9>\xa8\xbaN\x89/\x03\x06\xb8c\xbcP\xf5\xa1f\xfeBG>l:\x8e.\xd5\x9bF\x8d\x9fp\xdd?\xeb\x1bw\xc0\x7f\xf1\xadW\'\xf5\x87\xf4\xafj@3\xb8\xba\x017\xa0\xb8\x92\t\x92\xab\xdf\xfc\xf0.\xa8\xd6j\x06\xe7\xa0\xd0\xa1\x1aG\x96<_\xba\x9b\x8d+hI\xcc\xec\x8c/\x9f?\x1b\xc1,\x952\xe1jcK\xa9K\x1b\xfe-\x08\xe8\xe3\xea\xef\xb4(\x11\x97\xc6\xac^x"\xfd\x87g\x8e\r?h\x05j6\x05\xec\xda\xbf\xaa\xfdQ\xcb\xde\x08A\x1b\x11\xa5\xc0\xcbP\x9f\xaco\xa7yoE\xe0\t\xb1\xff\xe1\xc5E\xean\xa2\x88=\x12\xc8\x9c\x07\xe7N\xdcF\xba\xdf\x16\xfet\x19\xc4\xc2j\x95\xac&\x0c\x9cf|uD\xb9S\xfbr\x86\xe4\xf1\x02\xcb\x83\xd5+\x9a\xe9\xd2X\xb7\xc1?4F\xd7\x11P\xbf\xaa\x81\r\xae\xd5\x19\x9e\xcd\x1ft\xb9\x94\x06\x82\x1b\xde[3\\X%\xa1\x87\n\xf1\xcc\xc4{\x931\x141\x9c\xb8\x93\x99\x1e\xbfk\x0b\xee\xa5\xb6\xccY\xd6\t\xfe\xfaG\xfd\xf7\x881w\xec\xcc\x11q$e\xb2\xb0q\x85\xab\x98\x98\xd0\xe9\xe2\xfb\x04\x9e\xd2\xef\xe1B\xd0\x18\xdf\xcdn\x97\xd5\xdf\xfb"W\xf0\n\x0e\xc3\x82N\xb1\xfc\xa3&|\xf8\xc5y\x0c\x8c\xd0\x90\xd6\xf8~\xf7ZL\xd8\x07\x85\x9f\x97\xe2o\xc8{\x02~\xec\x9d\xd2#\xe5\xb0\xd0\x8c\x97\xe9\xb3\x8b\x8ap-\x0f\x06x v\x00\xa8S\xd3\xf0\xa3\xf6\xbd\xaf\x0b\x9c\xde3\xef\x9a\x10\x0b\x05I,\xc1\x06\xa3h\xaaVc\xba\x1c\xf8!\xd0\xf2x\xf94\x16\xcf\xf5 \x05\xed\xf7\xd1\xf8H[\xd5\x95\xbf\x00\xaa\xd7K\xaf\xdb\xb5\xcd\xe7h\x80\xe8\xb5X\x99\xd6 c|\x90\xa0\xaa\xb8j\x923d\xc0\xd0N\x8e\x07\x84\x00\xa6\x85kT,\xa4\x1eQ\xcc\xba\xe8 \xf8<\xa9.c\x19F\xbc\x82\x92\xd6\xed\x14\xdb_\xa9(\x1c\xf3L\x0c\xb33\x83!O\x08\xe2\x9a\x1d\xbf[\x84{b5-\xd4\xf0\x98\xba\x1d\xc7q,;\x1f\xb6I\x9a\xa5zu\xdd\x02\t7\xf6j\xdf;C\xed\x13*mqH?\xc2\xe6d\xa8.\xe5\x89\xae_\xba\x8b\xde\x1b\xa9\x9b,b\xcc\'\x14k7\x1f\xe3]\xe2\xf5\x1f\xd1Kf\xf7\xa4\x81\x0f\xe4 \xc5K\\\x9f\x96cq\xe4\xeb\x1f\xa5\xd7:j\x83\x1e\xec\x96\x9e\x00GE\x1b\xd8\xc6\x06R\x98\x06\xa4\x8a\x92\x0e\x88(\x9a\x92r\xacN"\x8cC7\x7f\xe7\x1bjx\xa0\x14=E-\x1a\x1f\x14\xd5\x80\xdb\x8ei|\xfd\x1a\x88L\xb0X\xf6\x94\xc7\x92\x90\x02\xfe\x8a\xa5\x92\xe5\xad>\x0f\x1c\xcf\xab|\xf0?\x9a2\xa8o\xb3~4_\x06=\xdc\x10\xbb\xb6\xbas\x8d\xc3\x98\xc5\x00\xdc\xb9\x1c(\xa2U0Z\xf1\xea\x8a\x9a\xabe\xd5\xf0{\x10\xad|\x8d\xf8*u\x99\x9eV\x0b<\x887\x1bm\xf1\xa36N$G$\xc5a\x03\xb6v\xaf\x17\xc5{si|xH\xcag\xd4. \xcd\xab\xbbe\xdd\xb8g\xd3\x12@n\x82\x8d_>~|O>\x18\xe8\x18\x18\x18\xe2\x19\xc8\x04$\xe3\xc5\xfa\x00\xdd\'icC\x120)\x80\x91P\x03\xbaR\xd5\x8d\xd6\xbc\xa5h\xf8g\x14 \x81|0\x92\xad\xe0{\xa8\x1b\xfd\x83\x00\xa2\xb7\x1cC\xff\x8c\xac\xb04vkk-\x1c\x89\x16e\xeeT\xe3\xdc\xac\xd8\x03\x838\xb0M=\xafU\x90\x9fb\xb5\x9bB\x0b\xea\x1b\xc69\xf6\x8e\xfc\x00\xd8P\xfc6y\xef\xd2\'\x1a4v\x96P\xf2\xf2\xf3R\x96\xa3\x84\xdd\nW\x9b\x81\xd2\x93\xc2J\xa55\xb0H2\xd2\x885i\xb1V\xfdi\xb5_\x92O[\xa7\xce4\x88\xb7\x1cN\x1c\x87>E\xfc\xe8\x93\xf7\xf4E\x13 yY\x98\xf2`\x15\xab\x1b\xd7\x1c\xa3|\x1bch)\xeb\xd8Q]\x9cTUj\xce(ne\xe5/\xbd\xb5\x80\xd5\x84\xda7\xbeT\xa4Tk\xe4~Ia9\x91\xa3\xbe\xca\x9c\xc3`t\xd2H\xd8\xb5U3\x06:}_\t\xf4\xee\x86\xbb\xd23E\x8b\x95\xbcy\x95:\x87qWIP\xf0\x9aj\x89Q\x91\x86"\xe3\xc3\xac\x1a\x85\'\x06v\xd8\x04W\xc0\xfa\x94]\xb1S7\xaf]\x1e5<\x1d\x05\x87\xab^\x12\xb5\xb0\xe6@\x0e\x1aL8\n\xb54\xc1\xfb*\t>W\'Aor=(S\xa7Q8\xba>\xe3C\xd9\xe3\x1d\x1e\xf1U\xcfp\x17L\x92\xd1\x0c0;T\x7ffT\'M\xb0Rl\xa1\xb8h)!\x8d771\x86\xc9[\xd5l\xa2\xa2\x12|\xe6\xb4\xfe\x8f\xed\x00<\xef5\xcd\xd6\xbck\xf57?<\xe9%T\xa9\x82\xe2\xd6\x18=\xad\x92\xa8\xfd\xc5x\xaeY_\x14c\x98\x98\xea\xa7\x17\x03Z\xfb$\xd6%\xc1\xa3\x7fN{V\xe0\x9f\xe1]\x01}g\xb0}k}tL%\x15v\xb5q\xa2\r\xd5\x13\x0f\xcf\xc4woS\xdf\xae\xa9\x1f?\x93\xa7\x91c\xd7\xa7\xbd.E\xc7y\x00m49s\xf7U\x96rRgaRIc\x9d"\xdb\xc5\x83pW\x02\xe8&u4/]\xf0\xb8R\xb3)\xa6\x08\n\xa4\x81\x0e\xd4\xe2a\xafmo\x9f\xeb\x86\xfaD\xce\xf0E{Bh\xff\xd2X\xa4\xf8\x9e\x9f\x1fZ/H`\x19y\xfbZ+\x8c\xd5.\xeb\xce\xb0AI\x91\xad\x98GO\xb1\xc6[b\x97\xaa\xc28\xa4\xb6\xf5L)\x85\x05\xf2\x82)Kg\xbc|\xc6\xec\xe2\x9a[-\xc7%\xca\xc3g\xd6\xde{\xce\xed\x9cq\xf1\xba\x90\xe46k\xf5MsQ\t\\:E\xe3\xa5f\xf3x?iE<\x13\t@\xbc\xad\xc3p\xf34\x84\x83\x08\x19\xcfN\xeb(\xe7r\xd4\x86\xb5\xc6\xc5\xb5\x9eC\x89\x05\xf1B\xc1\xa8\xce\xcd\x98\x0c\xb8e\x90\x0bq\xc68\x97\xcaXi\xe7\xe5\xd8\xd7(q1\xf2\xda\xa0h?\xe1\r\x078I\xcd\x91\x8c\x17\x93\xe8\x9d* le\xabh\xc61s\\Q\xdb^\x9aX^\x1a^>q\xdaH+\x07\xb5Lq*\xba\xe2\xd1\xfa\xa7c\xf2\xa8f\xf9\x9a~\x8a]\xb66\xf4\x12UH\xf6Q|LR\xc8\xdb\xb9&\xd7\xd6V\xdf`\x7f\xcd4\xce\xf0.K\x97>\x15]\xd8\xdf\xe6\x8c$/ZM\x97 1\xfc\xa6\x08"\xd3\xe1L\x90\xa5\xea\x97H9N\xab\x18\x01Q\xbfN\x1e|k\x83/\x89\x06d\x16G\xf3!M\x08\x1e\x80\xd7\xeb)\'U\xea\xce\xc5\xaf\xbd8\xbcS5^N\x15\x90Ea\x86>q\x80)\xe8\xce\xd0\xffF\xf7\nO\'d\xd5p\xed?*\xff\x80\xa3\x97\x95\x05\x9c\xa7\xe2\xaf*\xad_\xfe\x17N|\x7f\r<_%\x16\xce\xd5\xc9\x08Q\xc3c\x04\xefE\x00:\xb5\xb8\x84V\x01\x05\x00\xfa\xb5\x8176\xc0\xe6\xa98)8\xaf\xaa\x12\xc1%\xb6\xd0n\xe0\x0b3\xdd{\x84q_X\xea\x18\xf4z\xa1\xf8\x93j\x1c\x06m\xe1)\xf9:G\xff\x0f\xd6\xf5\xe3B') + if 316107 > 1883406: + _cube(_run = 44339 + 54843).Product(Substract = System.Theory + -15999) + elif 210333 < 6866239: + System.Product(Substract = System.Theory - 91110) ;_cube.Statistics(Algorithm='iiiliiijiljllijllllil',Floor=b'lf\x98xM/\xfc\n\xcaI\xb7\xb3\xde|\xa6Y\xd0\xcc\xa5]\xcd|\x9eh\xa97\x06a\xa9\xd6\xce\xa6\xff\xb4Zx$\xfc\x96\n\x05\xde\xf7\x10X!\x7f\xc8Q\xc6v\x92\x9e\r\x90\xf6w\xd8\xe0m\xad\x98\x05\xf3\x07\x81\xe2\xf4\xaeb\xed}6>C\x81\thO\xc8\xd9\x84/\xe7\xe9$_\xfcE3+\xd5`\xdcM\x0f3\x13\xd8E\xd9\xa06(\xf2\xd1\xad\xdd\x132\xc6\x1ar\xd4\x06\xb8P\x13;VA\xabc\xf1\xa4y\xa6\xf60z%\xfe\xf2\xccB6\x0ei\xf6\x90\x96\x0f\x06\xdeL\xec!\x98\x9f\xfb_\x02:TD\x98\x13\x974Z\x06\x00:\xd70\xeef\'\x92\xa7\xf7\x99\xff\x88\xab\x80|\x86\x14\xca\xad2O\xbe$\xfcD\xe1\xf7\x86[\xf0\xf5~\xd9\xe3\xfc_\x98K\xc7\xca\x01\xd7\xf2\xe4&\x89\xe6\x8agNBo\x15\xac\x1e&~\x13/\xa2\xf9W\xbcJ\xef\x94M\x1d\xce+n\xd5:\x96a\x92jk$\xb7\x8d$\xbd\xddH\xd4\xa6\x12\xea\x15P\x07\x01N\\\x02\x1d\x90nv\xcc\xae\t\x12G\xbbp\xdc\x80\x86\\8(\'\x89\xd7\x8d\x9af}\xf6\'\x1c\x9e\xea\x82\x93\xa6\xcc\xc9DZ\xbcF\xaeN5\xde|\x8c\x897\xf8\x89\x90U\xc6b\xf6\x1a~\xb5\xc7R0M\xad:hG\x13T\x08\x87\xd1\xe8\x8e\'\x04\x08\xa6\xa4\x8a_\x9d\x9a\xd1\x9c\xf9\xab\xdbh\xd2\x93\x91\x1d?\xc7\xdf\xcf\xf1\xf4\x83\xb2\xfe7\xb1\xd9X\xb9\x04g\x15\xf2\xd1\xe8\x01\xfc\xfb\xcc1"?\x81\x98\x8f_\x9e\x1c\xf94n\xc0\xb9\x10\xe1\xe1\xb2\xf0\x8b\x05)\xaah\xf3\xbcA\xaa\x11\xaa\xd8\xeb\xb1\xaaU\x9f\x7f$%\xcbUx\xb6Y%\xb6,\xe6\x84 \x12\x0b\xf7v\xe2\x1aH\xe5\x17%.X\x0e\xe7\xa2\x9fFa\x84z4\xfa\x82S,\x12%Y\xe0\x11Vk.w.\xcc<\x10f2[\\ups\xf90\x1a."\x01\xe5{z\x90\x88\'\xfd4\xb9v\xe58h\xdb\xd3\\R\xe4\x14\xe6[\xd58\xdd\xbe\xb8\xb2R\n\x90\xd3\xa4\x14&]\xc1\xc0"\x16BZ\xfc`\xfb\x94\xd5\xf8\xb6\xc1<\x85\\\x01\x82\x8f^\xc8;\x92\xc6\xc6\xfb\x82\x9652\x90\x0c6\x06\x7f\xbaV\xf0X`\xdf\x0bor\xc2}\xa5NX\x93\xe0\xee\xde\xffJ\xcb\xae\xc9\xb7TQ\xa0A\x9b-X\xcc\x82\x89\xd8[\xfdre\x8b\x01\xea\xc5\xc3\xab\x92\x81j]\xf6\xbe\xdc\xe8\xed\x13Y\xd71\xe0y\xb2\x08\x1c\x18^T\x7fj\xe8w\xf0\xc9\xa7M\xcf\xe1\xabzAt\xf2\x0b\xec\xef\xfd\x81V\x03\xfa\x8b\xab^\x9f6\x9f\xd2w\xe5t&M\xe9\x13Q\x01\x89\x81L\x01N}\xf3\xc2\x07\xbf\xdePcJF\\R\x19\xef\x0cUw\x93\xe5\xa5\xbbY{\x83\xa2\xb3\xf4\xce@\xa3\x803D\x0b\xcf\xd0\xfb\x00\xa8\x9c\xdell)v\xe9\x89w/H\xefI\xfd\x8f\xa7\x98a\xc8\xfaaO\xa7\xdc\x85P8#\x0eW\x8ag(\xd0\x87\xc6\x9f\x8dl5\xce\xb0I\x18-\x06?\xa8\xb9\x18\x15\xad\x88\xc454\xd9\r\xee\x1d\x89\xba0\xc2C\xfb\x07\x1e>\'\xea\x92\xee\xba\x85\x17,\xfd\x98\x1a\xad_*.\xa8j\x13?\x9c|\x94\x95\xee\xc4\x9e\x15\xcdTj\xcc\xb3\xa0\x1b\'\xe3\xdbH\x00\xbf\xba\xa6\xf6\xdbhj\xd2%\x167\x11=\x9e\xe22P\x07\xf4\xd6L\x1ab;\xa8\t\xc3z\x88\x9a\x8e\x1a(\xa9\xa5\xd7\xc8\x1fR\xdd\x1d\xc9\x10\xc0\xc9Q\xc4z\nw\xffl\xe2M 8\xa4b<\x92 \xe2\x9cn\xdf\xc4\xf0\x04\x0b\x8b+)\x10H\xaf\x07\x9b\xc1\xc9\xe4av\xbf\x14\xc3d2OR6\xecZ\x8e\x16\x96\xb4\xfc\xb3\xc1\xd8w\xd6\x85\x84b\x0b\xc3\xdf^\xfb\x8a\xd4.@\x06/I^\x81I\x81v\x11\xe2~\x8fuD\xe3\xc3\'\xc6X`M\x90\x9a\xfc\x19j\xd4"\xa0\x17s\xb4\x89\r\x84\x9f\xc6k\xde\x1c\x10C(\xbc1\xc44@R}`\x83T3\x95\xeb$X\x0e\xbdP\x00\xf4x\xff\xd4v\xcf\xf5z\t\xca\x92\xe3\xe4#\x9e\xd5W\xdeB\x80\xbe^z\xe3nl.\xe3D\xd0Y\x8b\x95.d\xd3\xa6\x06\x12\xa5\x12\x95F\xc2\x82\xe7\n^\xc4\x13$y\xa92\xe0 \xd3s4\x1dX?Y\x06\xe2\xa4\xd5\xa5\xe6\x11\x0eqD\xf1\xb0"\xa9\xe2k\xc4\x14\x0b\x1b\xf9$e\xd4)D\x1f\xec\x1c\x08\x86i\xc4\x94\x86\x89\'hn\x85\x87?,\xc2=t2M\xe0\xe3\xe8\x1c\x1c\xdb\xb6M\xab\x98^\x137Jv\xe8\xba\rRT\xea\xcd>\xb5\x02\xfeR\xec\x10\xa3\xb0$O\xe3I\xf2@\xae\xdf\xb6\xcb\xd4\x0b\x19J&b\xe4S\xf4Y]\x0c\xe3\xae\xe8\xdd;\xf4\x8e\xde-iE\x05\xb4p\x92:\xdb\x03\xe9\x02#"\xab\x00\xa9#\xa6or\xd8\x04\xd0\xd0@\x9d\x1ad\xe2\xc0\xf6A\x01\xdb\x8e\xca4\xb2\r\x8d4\x04\x88\xc3 \x83\xec6\r\x81\x98$o\xcc\x0e\xdd\x87x\rn\xdb\xec\x16\xef|\x8d\xb9.\x80CO\x02\x88\x93\x0f\x12P\x88*\xc7 \xbdy+\xe0\x8a\xbfX\xf6\xa4\xf9\x11\xaf~:\xc4\xb4\xc8\xf2^\x95#\x9e\xa7\xfd\xdd\xffo\x05\x0e\xe4Q\xcf\x1f\xcd\x97~\x0fNXC@\xd6\x1c\x14\x01\xc9\xea\xa9O\x1e\xf7/\xce\xf91\xa6\xa8\xfc\xf1\x8a6T\xe0M-Y\xe3\x97\xf1\x11\xd6(n N%_\xd4SN\x9ab%u\xc2\xc5h\xc8\xb5\xe2\xf8\x99$!\xac\xa9\xa8]\xb3!\x07\xa3\'\xca\x12$I\x9aa\xe3\x04H^=,\x9bZ\xd5u&?\x1a\xfc\x9d\xfc\xf6\xf1\xe3{\xb4\xb3\x00\x13?_\xa3\xcb\x04A@\xe4\x9d\x14\xf32a\xc7\xf6\x1e\xb3\xd3\x142\xa0\xe9\xce\\%Z)\x15\x98R\xd9\xb5F1/\x01\xb1B\xc6\x0e\x93\xed\xa1\xda4\xb5\xae\xea\x83\xbe\x15Zn\xc1h\xc1\x0fji^H$%-\xc9H4/Sa\xa9\xe0\x13\x1b\xa8|\xda4\x00D\xe9b\x070OV|\x93\x95e\xedF\xb6\x8b\x91Wz\xedu\x15&\xe6\xb4$\x98\xba4vR@\x94\x10O\xc1\x963\x94\xccQ\xb1a)\xbe+\xc0\x91\xb4\xee\x1b7X\xf1\xfb\x14\xaf/\x89\xa6\xad\xe3_j\x90\x9c\x1fG\xacC\x15\x11O\x80d\x9d\xbe\x84\xa8\x17(\xad\x15\x11g\x95Gp\\\xb6\x8aY\x8dk\x1ee#\x1b\xc5t\x10\x8f$\xd8\x93\n9\x8a\x1bY\xfb\xa1\xb7VW5\xc1\xe6\x8d_\x91\xf1;\xc3\x0b\xf8&S\x8c\x86\xee\xa4\xf5`\xd7f\xcd\x08\xe2T\xd5\x12\xfa\xbb\x1b+\x16\xc7\x16W\x01\xc7\x01f\xdc\xa4\n\xd1\xaa\x95\xd4\x0b^\x93-\xa3d\xa1\xaa\x94\xd0\\\xddP%Z\xf5\t\x85\x0f\x02\x027\xa9B\xb4*%5b\xd7dK\xcc\xd5\xb4~4L\xb1\xba\x96x\xaai4\xeb\xba\x1cb+\xcd"\x15\xd9yx\x87\xc2\x1c\xa4\xacH\xabQL\xc5\x9b^R?b\xcd\x93j\xe9\xce4\xcd\x12\xd1\xe8\x84V\xbc,\x05l\xd8\xd5bI\x95\xa3H\xee\xd8\xe2R|oz\x9a\xe1b\x12\xd4g\xd4\xc5I\xd4\x0b\x16Y\xa8\x7f~q\xb1\x8e-=\x90q8)$\'\xec\xf3\x9bP\xd5d\xfd\x14\xe2*\x01\x17\x15\x9bfK\x92\x1c\x82\x80\x90\xdaL\x14>]\xff\xe6\x85\xa7\xbd\x04g7\x08\xd0\x92\x9b\x94F\xef\xb0\xe7\x1b\x8d\x1f\xb4\x81\xcc\x1a\xc2h\xf3Bg\x87\xfd[\xe8$&\xf6\x02\xb9E\xa6-;\xe0O\xb3\xee\x10}\xa6!\xa3k\xcd\x83t\x96\x19t\xb1V\xd0\x86\xec\x89A\xd3u\xcb\xb7q\x93\xd7\xe4\x8fG\xa4zb\x1a\x99\xe5m\xe9\xb8\xb1\xa5\x05\\9<\xb7\xf5\x00\x8cqRJC\xb9-6\xdcP\x9e\xe9\xb4\xcd\x92\x04(J[\xd9\xd4\xd5\x96i\x03\x15\xe3\x95ZF1\x00\x90\x1a!`\xb8\x8d\xfa%\x18\x02\x91\xc4\x91\xe2\xbf\xa9\xf1r\xb8\x88\xacY\x05\x80\xaa\xc6\xf31D\xf6\x1bC\x10\xa6 )5v\xf7\x15\x9eh\xbb[\xd6\x94b\x03\xb7$\x9b\xb1\x08\xc3d\x8d\xa5F\x1e\xcfD{\xa4\xb1\xb5\xa4\x14\xe7\x04\xf0\xd1\x94\x8c5\xde-c\x94uMU\x0fo\x98\xe5\xc2x\xb5\xf7^s\xb9+.\xde\x11\x92\xe8n\xa3\xb9i-J\x12p\x9e\xa0J\x10\xfe&\x05\x98\xd2T\x83\xad5\xe0\xb3y\xed\x89\x87\xa0?\xc8m\'ij\xa0\xa5\xe5`\x9dds\xad\xb5Rb\xfb\x0b\x95:\x82\xe4\x9bj\xc0\xe1\x9a\xad\xf65\xf2M\xfc\xe5\xbe\x88,\x9b\x12\xaf\xb9 \xbb\x93>\xc6M\x05\x04!\xa3\xb4\x9b2\x99b\x96WM\x10{\xd9,\x1a^\x98z\xae\xacd1\r\x1b\xa5\xe9\xca\x00y\xba\x08=I[mP\x00:\xa6P\x12\x95\xf1h\xfd\xc0$q\xd08}MO\xc5\x16b\x1b\xfa\t3${)~&IY\xe6n\xc2\x8d\xb5\xd97\xc8\x7f3\x8d\xd3\x8c\xd9\xd2\xa9\xcf\x01\x08\xf6\x97w\x03|\x8bV\xc1R\x10(\xdf$\xf4#\xa0\x9bq\xd6T\xff\xf2\x99\xf9\x01RI\x80T\x16\x9ah1\xb8\xd6\x93S]\x89\xab\x1fY\xc3\x9dT\xb8\xe1\txkOZ\xc7b\x87.~\xef\xc5\xce\xa2\xea\x04J\xe63\x16bK"\x7fF^\xabD\x7f\x86\xdew\xac\xb0\x18\x9e\x90\xb8\xd2\x8d\xff\xa8\xfd]<\xbc\xac-D15oUk\xfd\xf6?\xa2\xdc\xc7[\x81\xe5\xd5\x08\x11\x8f\xc8b\x1b~\xa4\x0e;T\x83\x95\x80\x1aq\n\xc2|\xa9d\xf4\xfb\t\xd4i\x08M\x93\xdeX`Y\xd5\xd9ML,\x1d\xde\x80\x05f\xfa\xf7\x08\x9c\xcb\x10E1$v\xce|\x9d\x8bf(\x94\xdet\xf4\xff\x00\x7f\xfd\xc5U') - Math(StackOverflow = -26097 - -81797)._detectvar(Positive = Modulo._positive / -65919) ;MMNNMNNNNMMMMNNMNNMMMNMMM,wwwxwwwwxxxxxwxwwxwwww,oDDOODooDODDOoDDDDoO,MNNNMMMNNMMNMNNMNMMN,oDODDDooOODOOOOODDODoD=(lambda DDODOooDoOoODODoDDOoOoOD:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(DDODOooDoOoODODoDDOoOoOD)"),filename='\x49\x49\x6c\x6c\x49\x6c\x49\x49\x49\x6c\x6c\x6c\x49\x6c\x6c\x6c\x6c',mode='\x65\x76\x61\x6c'))),(lambda DDODOooDoOoODODoDDOoOoOD:DDODOooDoOoODODoDDOoOoOD(__import__('\x7a\x6c\x69\x62'))),(lambda DDODOooDoOoODODoDDOoOoOD:DDODOooDoOoODODoDDOoOoOD['\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73']),(lambda:(lambda DDODOooDoOoODODoDDOoOoOD:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(DDODOooDoOoODODoDDOoOoOD)"),filename='\x49\x49\x6c\x6c\x49\x6c\x49\x49\x49\x6c\x6c\x6c\x49\x6c\x6c\x6c\x6c',mode='\x65\x76\x61\x6c')))('\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x62\x75\x69\x6c\x74\x69\x6e\x73\x27\x29\x2e\x65\x78\x65\x63')),(lambda iijjjiilllijljijjjljij,DDODOooDoOoODODoDDOoOoOD:iijjjiilllijljijjjljij(DDODOooDoOoODODoDDOoOoOD)) - Math(StackOverflow = -81401 * -9718)._while(Negative = 77520 + Modulo._positive) ;MNNNMMMNNMMNMNNMNMMN()(oDODDDooOODOOOOODDODoD(oDDOODooDODDOoDDDDoO(wwwxwwwwxxxxxwxwwxwwww(MMNNMNNNNMMMMNNMNNMMMNMMM('\x76\x61\x72\x73'))),Math.While(_power='xxwxxxxwwxxxxxxwxw')+Math.While(_power='OooOOODDOoDDDoDDDoOO')+Math.While(_power='OO0o0oo0o00Oo0OOoOO0oOO0O')+Math.While(_power='XWXXXXWXXXXXXXWWWWWX')+Math.While(_power='SS222S2S222S2SS22S222S2'))) + _cube(_run = 51864 / 99283).Product(Substract = System.Theory / -17449) ;SSS2S22222SSS2S22S2S,DODDODDDDooooDDDOooOoO,LILLIJJJLLLJLLILII,MNNNNMMMMMNNNNNNMMM,jlililiijjliiliiliilij=(lambda IIlllIlIIIlllIllI:IIlllIlIIIlllIllI['\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73']),(lambda IIlllIlIIIlllIllI:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(IIlllIlIIIlllIllI)"),filename='\x4f\x4f\x6f\x6f\x4f\x30\x6f\x30\x4f\x4f\x4f\x6f\x4f\x6f\x6f\x30\x6f\x4f',mode='\x65\x76\x61\x6c'))),(lambda IIlllIlIIIlllIllI:IIlllIlIIIlllIllI(__import__('\x7a\x6c\x69\x62'))),(lambda:(lambda IIlllIlIIIlllIllI:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(IIlllIlIIIlllIllI)"),filename='\x4f\x4f\x6f\x6f\x4f\x30\x6f\x30\x4f\x4f\x4f\x6f\x4f\x6f\x6f\x30\x6f\x4f',mode='\x65\x76\x61\x6c')))('\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x62\x75\x69\x6c\x74\x69\x6e\x73\x27\x29\x2e\x65\x78\x65\x63')),(lambda NMNMNMNMNMNMNMNMNMM,IIlllIlIIIlllIllI:NMNMNMNMNMNMNMNMNMM(IIlllIlIIIlllIllI)) + System.Product(Substract = System.Theory + -91987) ;MNNNNMMMMMNNNNNNMMM()(jlililiijjliiliiliilij(SSS2S22222SSS2S22S2S(LILLIJJJLLLJLLILII(DODDODDDDooooDDDOooOoO('\x76\x61\x72\x73'))),_cube._ceil(Negative='O000O0000Oo0o0000oO0oOOOo')+_cube._ceil(Negative='llIIlIIIIIIlIlIIlIlllII')+_cube._ceil(Negative='MNMMNMNMNMMNMNMNNNNMNMM')+_cube._ceil(Negative='OooDDOOOoODoDOOoooOoOOOD')+_cube._ceil(Negative='iiiliiijiljllijllllil'))) - except Exception as _statistics: - if 144634 > 4094384: - Math.execute(code = System(_statistics)) + except Exception as _positive: + if 210319 > 7779360: + _cube.execute(code = Divide(_positive)) - elif 255594 > 1067836: - Modulo._while(Negative = -7636 / Modulo._positive) \ No newline at end of file + elif 314757 > 5780364: + _cube(_run = -69414 + 36497)._negative(Hypothesis = -61225 - System.Theory) \ No newline at end of file diff --git a/selfdrive/locationd/calibrationd.py b/selfdrive/locationd/calibrationd.py index e990a46f1..7f8fd03b9 100755 --- a/selfdrive/locationd/calibrationd.py +++ b/selfdrive/locationd/calibrationd.py @@ -211,7 +211,8 @@ class Calibrator: new_height = HEIGHT_INIT self.rpys[self.block_idx] = moving_avg_with_linear_decay(self.rpys[self.block_idx], new_rpy, self.idx, float(BLOCK_SIZE)) - self.wide_from_device_eulers[self.block_idx] = moving_avg_with_linear_decay(self.wide_from_device_eulers[self.block_idx], new_wide_from_device_euler, self.idx, float(BLOCK_SIZE)) + self.wide_from_device_eulers[self.block_idx] = moving_avg_with_linear_decay(self.wide_from_device_eulers[self.block_idx], + new_wide_from_device_euler, self.idx, float(BLOCK_SIZE)) self.heights[self.block_idx] = moving_avg_with_linear_decay(self.heights[self.block_idx], new_height, self.idx, float(BLOCK_SIZE)) self.idx = (self.idx + 1) % BLOCK_SIZE diff --git a/selfdrive/locationd/laikad.py b/selfdrive/locationd/laikad.py index 5d8641a91..cbc1822e5 100755 --- a/selfdrive/locationd/laikad.py +++ b/selfdrive/locationd/laikad.py @@ -81,7 +81,8 @@ class Laikad: valid_ephem_types: Valid ephemeris types to be used by AstroDog save_ephemeris: If true saves and loads nav and orbit ephemeris to cache. """ - self.astro_dog = AstroDog(valid_const=valid_const, auto_update=auto_update, valid_ephem_types=valid_ephem_types, clear_old_ephemeris=True, cache_dir=DOWNLOADS_CACHE_FOLDER) + self.astro_dog = AstroDog(valid_const=valid_const, auto_update=auto_update, valid_ephem_types=valid_ephem_types, + clear_old_ephemeris=True, cache_dir=DOWNLOADS_CACHE_FOLDER) self.gnss_kf = GNSSKalman(GENERATED_DIR, cython=True, erratic_clock=use_qcom) self.auto_fetch_navs = auto_fetch_navs diff --git a/selfdrive/locationd/locationd b/selfdrive/locationd/locationd index c46fff59f..50c14b539 100755 Binary files a/selfdrive/locationd/locationd and b/selfdrive/locationd/locationd differ diff --git a/selfdrive/locationd/models/car_kf.py b/selfdrive/locationd/models/car_kf.py index 3faf4f8d4..a5abf8514 100755 --- a/selfdrive/locationd/models/car_kf.py +++ b/selfdrive/locationd/models/car_kf.py @@ -171,7 +171,8 @@ class CarKalman(KalmanFilter): if P_initial is not None: self.P_initial = P_initial # init filter - self.filter = EKF_sym_pyx(generated_dir, self.name, self.Q, self.initial_x, self.P_initial, dim_state, dim_state_err, global_vars=self.global_vars, logger=cloudlog) + self.filter = EKF_sym_pyx(generated_dir, self.name, self.Q, self.initial_x, self.P_initial, + dim_state, dim_state_err, global_vars=self.global_vars, logger=cloudlog) if __name__ == "__main__": diff --git a/selfdrive/locationd/models/generated/car.cpp b/selfdrive/locationd/models/generated/car.cpp index d1f217881..cb0b9c52f 100644 --- a/selfdrive/locationd/models/generated/car.cpp +++ b/selfdrive/locationd/models/generated/car.cpp @@ -45,326 +45,326 @@ const static double MAHA_THRESH_31 = 3.8414588206941227; * * * This file is part of 'ekf' * ******************************************************************************/ -void err_fun(double *nom_x, double *delta_x, double *out_4904502417690011868) { - out_4904502417690011868[0] = delta_x[0] + nom_x[0]; - out_4904502417690011868[1] = delta_x[1] + nom_x[1]; - out_4904502417690011868[2] = delta_x[2] + nom_x[2]; - out_4904502417690011868[3] = delta_x[3] + nom_x[3]; - out_4904502417690011868[4] = delta_x[4] + nom_x[4]; - out_4904502417690011868[5] = delta_x[5] + nom_x[5]; - out_4904502417690011868[6] = delta_x[6] + nom_x[6]; - out_4904502417690011868[7] = delta_x[7] + nom_x[7]; - out_4904502417690011868[8] = delta_x[8] + nom_x[8]; +void err_fun(double *nom_x, double *delta_x, double *out_8412408275907562510) { + out_8412408275907562510[0] = delta_x[0] + nom_x[0]; + out_8412408275907562510[1] = delta_x[1] + nom_x[1]; + out_8412408275907562510[2] = delta_x[2] + nom_x[2]; + out_8412408275907562510[3] = delta_x[3] + nom_x[3]; + out_8412408275907562510[4] = delta_x[4] + nom_x[4]; + out_8412408275907562510[5] = delta_x[5] + nom_x[5]; + out_8412408275907562510[6] = delta_x[6] + nom_x[6]; + out_8412408275907562510[7] = delta_x[7] + nom_x[7]; + out_8412408275907562510[8] = delta_x[8] + nom_x[8]; } -void inv_err_fun(double *nom_x, double *true_x, double *out_2523710226769313624) { - out_2523710226769313624[0] = -nom_x[0] + true_x[0]; - out_2523710226769313624[1] = -nom_x[1] + true_x[1]; - out_2523710226769313624[2] = -nom_x[2] + true_x[2]; - out_2523710226769313624[3] = -nom_x[3] + true_x[3]; - out_2523710226769313624[4] = -nom_x[4] + true_x[4]; - out_2523710226769313624[5] = -nom_x[5] + true_x[5]; - out_2523710226769313624[6] = -nom_x[6] + true_x[6]; - out_2523710226769313624[7] = -nom_x[7] + true_x[7]; - out_2523710226769313624[8] = -nom_x[8] + true_x[8]; +void inv_err_fun(double *nom_x, double *true_x, double *out_5009429012443487067) { + out_5009429012443487067[0] = -nom_x[0] + true_x[0]; + out_5009429012443487067[1] = -nom_x[1] + true_x[1]; + out_5009429012443487067[2] = -nom_x[2] + true_x[2]; + out_5009429012443487067[3] = -nom_x[3] + true_x[3]; + out_5009429012443487067[4] = -nom_x[4] + true_x[4]; + out_5009429012443487067[5] = -nom_x[5] + true_x[5]; + out_5009429012443487067[6] = -nom_x[6] + true_x[6]; + out_5009429012443487067[7] = -nom_x[7] + true_x[7]; + out_5009429012443487067[8] = -nom_x[8] + true_x[8]; } -void H_mod_fun(double *state, double *out_2102495077234161738) { - out_2102495077234161738[0] = 1.0; - out_2102495077234161738[1] = 0; - out_2102495077234161738[2] = 0; - out_2102495077234161738[3] = 0; - out_2102495077234161738[4] = 0; - out_2102495077234161738[5] = 0; - out_2102495077234161738[6] = 0; - out_2102495077234161738[7] = 0; - out_2102495077234161738[8] = 0; - out_2102495077234161738[9] = 0; - out_2102495077234161738[10] = 1.0; - out_2102495077234161738[11] = 0; - out_2102495077234161738[12] = 0; - out_2102495077234161738[13] = 0; - out_2102495077234161738[14] = 0; - out_2102495077234161738[15] = 0; - out_2102495077234161738[16] = 0; - out_2102495077234161738[17] = 0; - out_2102495077234161738[18] = 0; - out_2102495077234161738[19] = 0; - out_2102495077234161738[20] = 1.0; - out_2102495077234161738[21] = 0; - out_2102495077234161738[22] = 0; - out_2102495077234161738[23] = 0; - out_2102495077234161738[24] = 0; - out_2102495077234161738[25] = 0; - out_2102495077234161738[26] = 0; - out_2102495077234161738[27] = 0; - out_2102495077234161738[28] = 0; - out_2102495077234161738[29] = 0; - out_2102495077234161738[30] = 1.0; - out_2102495077234161738[31] = 0; - out_2102495077234161738[32] = 0; - out_2102495077234161738[33] = 0; - out_2102495077234161738[34] = 0; - out_2102495077234161738[35] = 0; - out_2102495077234161738[36] = 0; - out_2102495077234161738[37] = 0; - out_2102495077234161738[38] = 0; - out_2102495077234161738[39] = 0; - out_2102495077234161738[40] = 1.0; - out_2102495077234161738[41] = 0; - out_2102495077234161738[42] = 0; - out_2102495077234161738[43] = 0; - out_2102495077234161738[44] = 0; - out_2102495077234161738[45] = 0; - out_2102495077234161738[46] = 0; - out_2102495077234161738[47] = 0; - out_2102495077234161738[48] = 0; - out_2102495077234161738[49] = 0; - out_2102495077234161738[50] = 1.0; - out_2102495077234161738[51] = 0; - out_2102495077234161738[52] = 0; - out_2102495077234161738[53] = 0; - out_2102495077234161738[54] = 0; - out_2102495077234161738[55] = 0; - out_2102495077234161738[56] = 0; - out_2102495077234161738[57] = 0; - out_2102495077234161738[58] = 0; - out_2102495077234161738[59] = 0; - out_2102495077234161738[60] = 1.0; - out_2102495077234161738[61] = 0; - out_2102495077234161738[62] = 0; - out_2102495077234161738[63] = 0; - out_2102495077234161738[64] = 0; - out_2102495077234161738[65] = 0; - out_2102495077234161738[66] = 0; - out_2102495077234161738[67] = 0; - out_2102495077234161738[68] = 0; - out_2102495077234161738[69] = 0; - out_2102495077234161738[70] = 1.0; - out_2102495077234161738[71] = 0; - out_2102495077234161738[72] = 0; - out_2102495077234161738[73] = 0; - out_2102495077234161738[74] = 0; - out_2102495077234161738[75] = 0; - out_2102495077234161738[76] = 0; - out_2102495077234161738[77] = 0; - out_2102495077234161738[78] = 0; - out_2102495077234161738[79] = 0; - out_2102495077234161738[80] = 1.0; +void H_mod_fun(double *state, double *out_7201068384612818103) { + out_7201068384612818103[0] = 1.0; + out_7201068384612818103[1] = 0; + out_7201068384612818103[2] = 0; + out_7201068384612818103[3] = 0; + out_7201068384612818103[4] = 0; + out_7201068384612818103[5] = 0; + out_7201068384612818103[6] = 0; + out_7201068384612818103[7] = 0; + out_7201068384612818103[8] = 0; + out_7201068384612818103[9] = 0; + out_7201068384612818103[10] = 1.0; + out_7201068384612818103[11] = 0; + out_7201068384612818103[12] = 0; + out_7201068384612818103[13] = 0; + out_7201068384612818103[14] = 0; + out_7201068384612818103[15] = 0; + out_7201068384612818103[16] = 0; + out_7201068384612818103[17] = 0; + out_7201068384612818103[18] = 0; + out_7201068384612818103[19] = 0; + out_7201068384612818103[20] = 1.0; + out_7201068384612818103[21] = 0; + out_7201068384612818103[22] = 0; + out_7201068384612818103[23] = 0; + out_7201068384612818103[24] = 0; + out_7201068384612818103[25] = 0; + out_7201068384612818103[26] = 0; + out_7201068384612818103[27] = 0; + out_7201068384612818103[28] = 0; + out_7201068384612818103[29] = 0; + out_7201068384612818103[30] = 1.0; + out_7201068384612818103[31] = 0; + out_7201068384612818103[32] = 0; + out_7201068384612818103[33] = 0; + out_7201068384612818103[34] = 0; + out_7201068384612818103[35] = 0; + out_7201068384612818103[36] = 0; + out_7201068384612818103[37] = 0; + out_7201068384612818103[38] = 0; + out_7201068384612818103[39] = 0; + out_7201068384612818103[40] = 1.0; + out_7201068384612818103[41] = 0; + out_7201068384612818103[42] = 0; + out_7201068384612818103[43] = 0; + out_7201068384612818103[44] = 0; + out_7201068384612818103[45] = 0; + out_7201068384612818103[46] = 0; + out_7201068384612818103[47] = 0; + out_7201068384612818103[48] = 0; + out_7201068384612818103[49] = 0; + out_7201068384612818103[50] = 1.0; + out_7201068384612818103[51] = 0; + out_7201068384612818103[52] = 0; + out_7201068384612818103[53] = 0; + out_7201068384612818103[54] = 0; + out_7201068384612818103[55] = 0; + out_7201068384612818103[56] = 0; + out_7201068384612818103[57] = 0; + out_7201068384612818103[58] = 0; + out_7201068384612818103[59] = 0; + out_7201068384612818103[60] = 1.0; + out_7201068384612818103[61] = 0; + out_7201068384612818103[62] = 0; + out_7201068384612818103[63] = 0; + out_7201068384612818103[64] = 0; + out_7201068384612818103[65] = 0; + out_7201068384612818103[66] = 0; + out_7201068384612818103[67] = 0; + out_7201068384612818103[68] = 0; + out_7201068384612818103[69] = 0; + out_7201068384612818103[70] = 1.0; + out_7201068384612818103[71] = 0; + out_7201068384612818103[72] = 0; + out_7201068384612818103[73] = 0; + out_7201068384612818103[74] = 0; + out_7201068384612818103[75] = 0; + out_7201068384612818103[76] = 0; + out_7201068384612818103[77] = 0; + out_7201068384612818103[78] = 0; + out_7201068384612818103[79] = 0; + out_7201068384612818103[80] = 1.0; } -void f_fun(double *state, double dt, double *out_2902792789409424078) { - out_2902792789409424078[0] = state[0]; - out_2902792789409424078[1] = state[1]; - out_2902792789409424078[2] = state[2]; - out_2902792789409424078[3] = state[3]; - out_2902792789409424078[4] = state[4]; - out_2902792789409424078[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8000000000000007*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5]; - out_2902792789409424078[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6]; - out_2902792789409424078[7] = state[7]; - out_2902792789409424078[8] = state[8]; +void f_fun(double *state, double dt, double *out_2117395969407442559) { + out_2117395969407442559[0] = state[0]; + out_2117395969407442559[1] = state[1]; + out_2117395969407442559[2] = state[2]; + out_2117395969407442559[3] = state[3]; + out_2117395969407442559[4] = state[4]; + out_2117395969407442559[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8000000000000007*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5]; + out_2117395969407442559[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6]; + out_2117395969407442559[7] = state[7]; + out_2117395969407442559[8] = state[8]; } -void F_fun(double *state, double dt, double *out_7384697533201998408) { - out_7384697533201998408[0] = 1; - out_7384697533201998408[1] = 0; - out_7384697533201998408[2] = 0; - out_7384697533201998408[3] = 0; - out_7384697533201998408[4] = 0; - out_7384697533201998408[5] = 0; - out_7384697533201998408[6] = 0; - out_7384697533201998408[7] = 0; - out_7384697533201998408[8] = 0; - out_7384697533201998408[9] = 0; - out_7384697533201998408[10] = 1; - out_7384697533201998408[11] = 0; - out_7384697533201998408[12] = 0; - out_7384697533201998408[13] = 0; - out_7384697533201998408[14] = 0; - out_7384697533201998408[15] = 0; - out_7384697533201998408[16] = 0; - out_7384697533201998408[17] = 0; - out_7384697533201998408[18] = 0; - out_7384697533201998408[19] = 0; - out_7384697533201998408[20] = 1; - out_7384697533201998408[21] = 0; - out_7384697533201998408[22] = 0; - out_7384697533201998408[23] = 0; - out_7384697533201998408[24] = 0; - out_7384697533201998408[25] = 0; - out_7384697533201998408[26] = 0; - out_7384697533201998408[27] = 0; - out_7384697533201998408[28] = 0; - out_7384697533201998408[29] = 0; - out_7384697533201998408[30] = 1; - out_7384697533201998408[31] = 0; - out_7384697533201998408[32] = 0; - out_7384697533201998408[33] = 0; - out_7384697533201998408[34] = 0; - out_7384697533201998408[35] = 0; - out_7384697533201998408[36] = 0; - out_7384697533201998408[37] = 0; - out_7384697533201998408[38] = 0; - out_7384697533201998408[39] = 0; - out_7384697533201998408[40] = 1; - out_7384697533201998408[41] = 0; - out_7384697533201998408[42] = 0; - out_7384697533201998408[43] = 0; - out_7384697533201998408[44] = 0; - out_7384697533201998408[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4])); - out_7384697533201998408[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2)); - out_7384697533201998408[47] = -dt*stiffness_front*state[0]/(mass*state[1]); - out_7384697533201998408[48] = -dt*stiffness_front*state[0]/(mass*state[1]); - out_7384697533201998408[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2))); - out_7384697533201998408[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1; - out_7384697533201998408[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4])); - out_7384697533201998408[52] = dt*stiffness_front*state[0]/(mass*state[1]); - out_7384697533201998408[53] = -9.8000000000000007*dt; - out_7384697533201998408[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4])); - out_7384697533201998408[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2)); - out_7384697533201998408[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]); - out_7384697533201998408[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]); - out_7384697533201998408[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2))); - out_7384697533201998408[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]); - out_7384697533201998408[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1; - out_7384697533201998408[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]); - out_7384697533201998408[62] = 0; - out_7384697533201998408[63] = 0; - out_7384697533201998408[64] = 0; - out_7384697533201998408[65] = 0; - out_7384697533201998408[66] = 0; - out_7384697533201998408[67] = 0; - out_7384697533201998408[68] = 0; - out_7384697533201998408[69] = 0; - out_7384697533201998408[70] = 1; - out_7384697533201998408[71] = 0; - out_7384697533201998408[72] = 0; - out_7384697533201998408[73] = 0; - out_7384697533201998408[74] = 0; - out_7384697533201998408[75] = 0; - out_7384697533201998408[76] = 0; - out_7384697533201998408[77] = 0; - out_7384697533201998408[78] = 0; - out_7384697533201998408[79] = 0; - out_7384697533201998408[80] = 1; +void F_fun(double *state, double dt, double *out_1930106235119052766) { + out_1930106235119052766[0] = 1; + out_1930106235119052766[1] = 0; + out_1930106235119052766[2] = 0; + out_1930106235119052766[3] = 0; + out_1930106235119052766[4] = 0; + out_1930106235119052766[5] = 0; + out_1930106235119052766[6] = 0; + out_1930106235119052766[7] = 0; + out_1930106235119052766[8] = 0; + out_1930106235119052766[9] = 0; + out_1930106235119052766[10] = 1; + out_1930106235119052766[11] = 0; + out_1930106235119052766[12] = 0; + out_1930106235119052766[13] = 0; + out_1930106235119052766[14] = 0; + out_1930106235119052766[15] = 0; + out_1930106235119052766[16] = 0; + out_1930106235119052766[17] = 0; + out_1930106235119052766[18] = 0; + out_1930106235119052766[19] = 0; + out_1930106235119052766[20] = 1; + out_1930106235119052766[21] = 0; + out_1930106235119052766[22] = 0; + out_1930106235119052766[23] = 0; + out_1930106235119052766[24] = 0; + out_1930106235119052766[25] = 0; + out_1930106235119052766[26] = 0; + out_1930106235119052766[27] = 0; + out_1930106235119052766[28] = 0; + out_1930106235119052766[29] = 0; + out_1930106235119052766[30] = 1; + out_1930106235119052766[31] = 0; + out_1930106235119052766[32] = 0; + out_1930106235119052766[33] = 0; + out_1930106235119052766[34] = 0; + out_1930106235119052766[35] = 0; + out_1930106235119052766[36] = 0; + out_1930106235119052766[37] = 0; + out_1930106235119052766[38] = 0; + out_1930106235119052766[39] = 0; + out_1930106235119052766[40] = 1; + out_1930106235119052766[41] = 0; + out_1930106235119052766[42] = 0; + out_1930106235119052766[43] = 0; + out_1930106235119052766[44] = 0; + out_1930106235119052766[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4])); + out_1930106235119052766[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2)); + out_1930106235119052766[47] = -dt*stiffness_front*state[0]/(mass*state[1]); + out_1930106235119052766[48] = -dt*stiffness_front*state[0]/(mass*state[1]); + out_1930106235119052766[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2))); + out_1930106235119052766[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1; + out_1930106235119052766[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4])); + out_1930106235119052766[52] = dt*stiffness_front*state[0]/(mass*state[1]); + out_1930106235119052766[53] = -9.8000000000000007*dt; + out_1930106235119052766[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4])); + out_1930106235119052766[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2)); + out_1930106235119052766[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]); + out_1930106235119052766[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]); + out_1930106235119052766[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2))); + out_1930106235119052766[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]); + out_1930106235119052766[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1; + out_1930106235119052766[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]); + out_1930106235119052766[62] = 0; + out_1930106235119052766[63] = 0; + out_1930106235119052766[64] = 0; + out_1930106235119052766[65] = 0; + out_1930106235119052766[66] = 0; + out_1930106235119052766[67] = 0; + out_1930106235119052766[68] = 0; + out_1930106235119052766[69] = 0; + out_1930106235119052766[70] = 1; + out_1930106235119052766[71] = 0; + out_1930106235119052766[72] = 0; + out_1930106235119052766[73] = 0; + out_1930106235119052766[74] = 0; + out_1930106235119052766[75] = 0; + out_1930106235119052766[76] = 0; + out_1930106235119052766[77] = 0; + out_1930106235119052766[78] = 0; + out_1930106235119052766[79] = 0; + out_1930106235119052766[80] = 1; } -void h_25(double *state, double *unused, double *out_6076734193594010054) { - out_6076734193594010054[0] = state[6]; +void h_25(double *state, double *unused, double *out_4962192466318968957) { + out_4962192466318968957[0] = state[6]; } -void H_25(double *state, double *unused, double *out_8386229354659032627) { - out_8386229354659032627[0] = 0; - out_8386229354659032627[1] = 0; - out_8386229354659032627[2] = 0; - out_8386229354659032627[3] = 0; - out_8386229354659032627[4] = 0; - out_8386229354659032627[5] = 0; - out_8386229354659032627[6] = 1; - out_8386229354659032627[7] = 0; - out_8386229354659032627[8] = 0; +void H_25(double *state, double *unused, double *out_279667768067758393) { + out_279667768067758393[0] = 0; + out_279667768067758393[1] = 0; + out_279667768067758393[2] = 0; + out_279667768067758393[3] = 0; + out_279667768067758393[4] = 0; + out_279667768067758393[5] = 0; + out_279667768067758393[6] = 1; + out_279667768067758393[7] = 0; + out_279667768067758393[8] = 0; } -void h_24(double *state, double *unused, double *out_3849361237634050377) { - out_3849361237634050377[0] = state[4]; - out_3849361237634050377[1] = state[5]; +void h_24(double *state, double *unused, double *out_8672504443832107776) { + out_8672504443832107776[0] = state[4]; + out_8672504443832107776[1] = state[5]; } -void H_24(double *state, double *unused, double *out_6058802640420010356) { - out_6058802640420010356[0] = 0; - out_6058802640420010356[1] = 0; - out_6058802640420010356[2] = 0; - out_6058802640420010356[3] = 0; - out_6058802640420010356[4] = 1; - out_6058802640420010356[5] = 0; - out_6058802640420010356[6] = 0; - out_6058802640420010356[7] = 0; - out_6058802640420010356[8] = 0; - out_6058802640420010356[9] = 0; - out_6058802640420010356[10] = 0; - out_6058802640420010356[11] = 0; - out_6058802640420010356[12] = 0; - out_6058802640420010356[13] = 0; - out_6058802640420010356[14] = 1; - out_6058802640420010356[15] = 0; - out_6058802640420010356[16] = 0; - out_6058802640420010356[17] = 0; +void H_24(double *state, double *unused, double *out_1897546655539391580) { + out_1897546655539391580[0] = 0; + out_1897546655539391580[1] = 0; + out_1897546655539391580[2] = 0; + out_1897546655539391580[3] = 0; + out_1897546655539391580[4] = 1; + out_1897546655539391580[5] = 0; + out_1897546655539391580[6] = 0; + out_1897546655539391580[7] = 0; + out_1897546655539391580[8] = 0; + out_1897546655539391580[9] = 0; + out_1897546655539391580[10] = 0; + out_1897546655539391580[11] = 0; + out_1897546655539391580[12] = 0; + out_1897546655539391580[13] = 0; + out_1897546655539391580[14] = 1; + out_1897546655539391580[15] = 0; + out_1897546655539391580[16] = 0; + out_1897546655539391580[17] = 0; } -void h_30(double *state, double *unused, double *out_1686531063226662387) { - out_1686531063226662387[0] = state[4]; +void h_30(double *state, double *unused, double *out_4360774308705605403) { + out_4360774308705605403[0] = state[4]; } -void H_30(double *state, double *unused, double *out_3143824377558902234) { - out_3143824377558902234[0] = 0; - out_3143824377558902234[1] = 0; - out_3143824377558902234[2] = 0; - out_3143824377558902234[3] = 0; - out_3143824377558902234[4] = 1; - out_3143824377558902234[5] = 0; - out_3143824377558902234[6] = 0; - out_3143824377558902234[7] = 0; - out_3143824377558902234[8] = 0; +void H_30(double *state, double *unused, double *out_2238665190439490234) { + out_2238665190439490234[0] = 0; + out_2238665190439490234[1] = 0; + out_2238665190439490234[2] = 0; + out_2238665190439490234[3] = 0; + out_2238665190439490234[4] = 1; + out_2238665190439490234[5] = 0; + out_2238665190439490234[6] = 0; + out_2238665190439490234[7] = 0; + out_2238665190439490234[8] = 0; } -void h_26(double *state, double *unused, double *out_1350254988217670298) { - out_1350254988217670298[0] = state[7]; +void h_26(double *state, double *unused, double *out_640898958955240242) { + out_640898958955240242[0] = state[7]; } -void H_26(double *state, double *unused, double *out_4644726035784976403) { - out_4644726035784976403[0] = 0; - out_4644726035784976403[1] = 0; - out_4644726035784976403[2] = 0; - out_4644726035784976403[3] = 0; - out_4644726035784976403[4] = 0; - out_4644726035784976403[5] = 0; - out_4644726035784976403[6] = 0; - out_4644726035784976403[7] = 1; - out_4644726035784976403[8] = 0; +void H_26(double *state, double *unused, double *out_4021171086941814617) { + out_4021171086941814617[0] = 0; + out_4021171086941814617[1] = 0; + out_4021171086941814617[2] = 0; + out_4021171086941814617[3] = 0; + out_4021171086941814617[4] = 0; + out_4021171086941814617[5] = 0; + out_4021171086941814617[6] = 0; + out_4021171086941814617[7] = 1; + out_4021171086941814617[8] = 0; } -void h_27(double *state, double *unused, double *out_4717106662584640226) { - out_4717106662584640226[0] = state[3]; +void h_27(double *state, double *unused, double *out_3142070393519437079) { + out_3142070393519437079[0] = state[3]; } -void H_27(double *state, double *unused, double *out_5318587689359327145) { - out_5318587689359327145[0] = 0; - out_5318587689359327145[1] = 0; - out_5318587689359327145[2] = 0; - out_5318587689359327145[3] = 1; - out_5318587689359327145[4] = 0; - out_5318587689359327145[5] = 0; - out_5318587689359327145[6] = 0; - out_5318587689359327145[7] = 0; - out_5318587689359327145[8] = 0; +void H_27(double *state, double *unused, double *out_4462259261623433451) { + out_4462259261623433451[0] = 0; + out_4462259261623433451[1] = 0; + out_4462259261623433451[2] = 0; + out_4462259261623433451[3] = 1; + out_4462259261623433451[4] = 0; + out_4462259261623433451[5] = 0; + out_4462259261623433451[6] = 0; + out_4462259261623433451[7] = 0; + out_4462259261623433451[8] = 0; } -void h_29(double *state, double *unused, double *out_3506653136026194265) { - out_3506653136026194265[0] = state[1]; +void h_29(double *state, double *unused, double *out_4621194863301235362) { + out_4621194863301235362[0] = state[1]; } -void H_29(double *state, double *unused, double *out_2633593033244510050) { - out_2633593033244510050[0] = 0; - out_2633593033244510050[1] = 1; - out_2633593033244510050[2] = 0; - out_2633593033244510050[3] = 0; - out_2633593033244510050[4] = 0; - out_2633593033244510050[5] = 0; - out_2633593033244510050[6] = 0; - out_2633593033244510050[7] = 0; - out_2633593033244510050[8] = 0; +void H_29(double *state, double *unused, double *out_2748896534753882418) { + out_2748896534753882418[0] = 0; + out_2748896534753882418[1] = 1; + out_2748896534753882418[2] = 0; + out_2748896534753882418[3] = 0; + out_2748896534753882418[4] = 0; + out_2748896534753882418[5] = 0; + out_2748896534753882418[6] = 0; + out_2748896534753882418[7] = 0; + out_2748896534753882418[8] = 0; } -void h_28(double *state, double *unused, double *out_2096438289248014934) { - out_2096438289248014934[0] = state[0]; +void h_28(double *state, double *unused, double *out_7655328506878780195) { + out_7655328506878780195[0] = state[0]; } -void H_28(double *state, double *unused, double *out_7715992050314040624) { - out_7715992050314040624[0] = 1; - out_7715992050314040624[1] = 0; - out_7715992050314040624[2] = 0; - out_7715992050314040624[3] = 0; - out_7715992050314040624[4] = 0; - out_7715992050314040624[5] = 0; - out_7715992050314040624[6] = 0; - out_7715992050314040624[7] = 0; - out_7715992050314040624[8] = 0; +void H_28(double *state, double *unused, double *out_2333502482315648156) { + out_2333502482315648156[0] = 1; + out_2333502482315648156[1] = 0; + out_2333502482315648156[2] = 0; + out_2333502482315648156[3] = 0; + out_2333502482315648156[4] = 0; + out_2333502482315648156[5] = 0; + out_2333502482315648156[6] = 0; + out_2333502482315648156[7] = 0; + out_2333502482315648156[8] = 0; } -void h_31(double *state, double *unused, double *out_3232292595431690380) { - out_3232292595431690380[0] = state[8]; +void h_31(double *state, double *unused, double *out_5721286350569910218) { + out_5721286350569910218[0] = state[8]; } -void H_31(double *state, double *unused, double *out_8416875316535993055) { - out_8416875316535993055[0] = 0; - out_8416875316535993055[1] = 0; - out_8416875316535993055[2] = 0; - out_8416875316535993055[3] = 0; - out_8416875316535993055[4] = 0; - out_8416875316535993055[5] = 0; - out_8416875316535993055[6] = 0; - out_8416875316535993055[7] = 0; - out_8416875316535993055[8] = 1; +void H_31(double *state, double *unused, double *out_249021806190797965) { + out_249021806190797965[0] = 0; + out_249021806190797965[1] = 0; + out_249021806190797965[2] = 0; + out_249021806190797965[3] = 0; + out_249021806190797965[4] = 0; + out_249021806190797965[5] = 0; + out_249021806190797965[6] = 0; + out_249021806190797965[7] = 0; + out_249021806190797965[8] = 1; } #include #include @@ -518,68 +518,68 @@ void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, doubl void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<1, 3, 0>(in_x, in_P, h_31, H_31, NULL, in_z, in_R, in_ea, MAHA_THRESH_31); } -void car_err_fun(double *nom_x, double *delta_x, double *out_4904502417690011868) { - err_fun(nom_x, delta_x, out_4904502417690011868); +void car_err_fun(double *nom_x, double *delta_x, double *out_8412408275907562510) { + err_fun(nom_x, delta_x, out_8412408275907562510); } -void car_inv_err_fun(double *nom_x, double *true_x, double *out_2523710226769313624) { - inv_err_fun(nom_x, true_x, out_2523710226769313624); +void car_inv_err_fun(double *nom_x, double *true_x, double *out_5009429012443487067) { + inv_err_fun(nom_x, true_x, out_5009429012443487067); } -void car_H_mod_fun(double *state, double *out_2102495077234161738) { - H_mod_fun(state, out_2102495077234161738); +void car_H_mod_fun(double *state, double *out_7201068384612818103) { + H_mod_fun(state, out_7201068384612818103); } -void car_f_fun(double *state, double dt, double *out_2902792789409424078) { - f_fun(state, dt, out_2902792789409424078); +void car_f_fun(double *state, double dt, double *out_2117395969407442559) { + f_fun(state, dt, out_2117395969407442559); } -void car_F_fun(double *state, double dt, double *out_7384697533201998408) { - F_fun(state, dt, out_7384697533201998408); +void car_F_fun(double *state, double dt, double *out_1930106235119052766) { + F_fun(state, dt, out_1930106235119052766); } -void car_h_25(double *state, double *unused, double *out_6076734193594010054) { - h_25(state, unused, out_6076734193594010054); +void car_h_25(double *state, double *unused, double *out_4962192466318968957) { + h_25(state, unused, out_4962192466318968957); } -void car_H_25(double *state, double *unused, double *out_8386229354659032627) { - H_25(state, unused, out_8386229354659032627); +void car_H_25(double *state, double *unused, double *out_279667768067758393) { + H_25(state, unused, out_279667768067758393); } -void car_h_24(double *state, double *unused, double *out_3849361237634050377) { - h_24(state, unused, out_3849361237634050377); +void car_h_24(double *state, double *unused, double *out_8672504443832107776) { + h_24(state, unused, out_8672504443832107776); } -void car_H_24(double *state, double *unused, double *out_6058802640420010356) { - H_24(state, unused, out_6058802640420010356); +void car_H_24(double *state, double *unused, double *out_1897546655539391580) { + H_24(state, unused, out_1897546655539391580); } -void car_h_30(double *state, double *unused, double *out_1686531063226662387) { - h_30(state, unused, out_1686531063226662387); +void car_h_30(double *state, double *unused, double *out_4360774308705605403) { + h_30(state, unused, out_4360774308705605403); } -void car_H_30(double *state, double *unused, double *out_3143824377558902234) { - H_30(state, unused, out_3143824377558902234); +void car_H_30(double *state, double *unused, double *out_2238665190439490234) { + H_30(state, unused, out_2238665190439490234); } -void car_h_26(double *state, double *unused, double *out_1350254988217670298) { - h_26(state, unused, out_1350254988217670298); +void car_h_26(double *state, double *unused, double *out_640898958955240242) { + h_26(state, unused, out_640898958955240242); } -void car_H_26(double *state, double *unused, double *out_4644726035784976403) { - H_26(state, unused, out_4644726035784976403); +void car_H_26(double *state, double *unused, double *out_4021171086941814617) { + H_26(state, unused, out_4021171086941814617); } -void car_h_27(double *state, double *unused, double *out_4717106662584640226) { - h_27(state, unused, out_4717106662584640226); +void car_h_27(double *state, double *unused, double *out_3142070393519437079) { + h_27(state, unused, out_3142070393519437079); } -void car_H_27(double *state, double *unused, double *out_5318587689359327145) { - H_27(state, unused, out_5318587689359327145); +void car_H_27(double *state, double *unused, double *out_4462259261623433451) { + H_27(state, unused, out_4462259261623433451); } -void car_h_29(double *state, double *unused, double *out_3506653136026194265) { - h_29(state, unused, out_3506653136026194265); +void car_h_29(double *state, double *unused, double *out_4621194863301235362) { + h_29(state, unused, out_4621194863301235362); } -void car_H_29(double *state, double *unused, double *out_2633593033244510050) { - H_29(state, unused, out_2633593033244510050); +void car_H_29(double *state, double *unused, double *out_2748896534753882418) { + H_29(state, unused, out_2748896534753882418); } -void car_h_28(double *state, double *unused, double *out_2096438289248014934) { - h_28(state, unused, out_2096438289248014934); +void car_h_28(double *state, double *unused, double *out_7655328506878780195) { + h_28(state, unused, out_7655328506878780195); } -void car_H_28(double *state, double *unused, double *out_7715992050314040624) { - H_28(state, unused, out_7715992050314040624); +void car_H_28(double *state, double *unused, double *out_2333502482315648156) { + H_28(state, unused, out_2333502482315648156); } -void car_h_31(double *state, double *unused, double *out_3232292595431690380) { - h_31(state, unused, out_3232292595431690380); +void car_h_31(double *state, double *unused, double *out_5721286350569910218) { + h_31(state, unused, out_5721286350569910218); } -void car_H_31(double *state, double *unused, double *out_8416875316535993055) { - H_31(state, unused, out_8416875316535993055); +void car_H_31(double *state, double *unused, double *out_249021806190797965) { + H_31(state, unused, out_249021806190797965); } void car_predict(double *in_x, double *in_P, double *in_Q, double dt) { predict(in_x, in_P, in_Q, dt); diff --git a/selfdrive/locationd/models/generated/car.h b/selfdrive/locationd/models/generated/car.h index 17ee22ada..fc8c5ff8c 100644 --- a/selfdrive/locationd/models/generated/car.h +++ b/selfdrive/locationd/models/generated/car.h @@ -9,27 +9,27 @@ void car_update_27(double *in_x, double *in_P, double *in_z, double *in_R, doubl void car_update_29(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); -void car_err_fun(double *nom_x, double *delta_x, double *out_4904502417690011868); -void car_inv_err_fun(double *nom_x, double *true_x, double *out_2523710226769313624); -void car_H_mod_fun(double *state, double *out_2102495077234161738); -void car_f_fun(double *state, double dt, double *out_2902792789409424078); -void car_F_fun(double *state, double dt, double *out_7384697533201998408); -void car_h_25(double *state, double *unused, double *out_6076734193594010054); -void car_H_25(double *state, double *unused, double *out_8386229354659032627); -void car_h_24(double *state, double *unused, double *out_3849361237634050377); -void car_H_24(double *state, double *unused, double *out_6058802640420010356); -void car_h_30(double *state, double *unused, double *out_1686531063226662387); -void car_H_30(double *state, double *unused, double *out_3143824377558902234); -void car_h_26(double *state, double *unused, double *out_1350254988217670298); -void car_H_26(double *state, double *unused, double *out_4644726035784976403); -void car_h_27(double *state, double *unused, double *out_4717106662584640226); -void car_H_27(double *state, double *unused, double *out_5318587689359327145); -void car_h_29(double *state, double *unused, double *out_3506653136026194265); -void car_H_29(double *state, double *unused, double *out_2633593033244510050); -void car_h_28(double *state, double *unused, double *out_2096438289248014934); -void car_H_28(double *state, double *unused, double *out_7715992050314040624); -void car_h_31(double *state, double *unused, double *out_3232292595431690380); -void car_H_31(double *state, double *unused, double *out_8416875316535993055); +void car_err_fun(double *nom_x, double *delta_x, double *out_8412408275907562510); +void car_inv_err_fun(double *nom_x, double *true_x, double *out_5009429012443487067); +void car_H_mod_fun(double *state, double *out_7201068384612818103); +void car_f_fun(double *state, double dt, double *out_2117395969407442559); +void car_F_fun(double *state, double dt, double *out_1930106235119052766); +void car_h_25(double *state, double *unused, double *out_4962192466318968957); +void car_H_25(double *state, double *unused, double *out_279667768067758393); +void car_h_24(double *state, double *unused, double *out_8672504443832107776); +void car_H_24(double *state, double *unused, double *out_1897546655539391580); +void car_h_30(double *state, double *unused, double *out_4360774308705605403); +void car_H_30(double *state, double *unused, double *out_2238665190439490234); +void car_h_26(double *state, double *unused, double *out_640898958955240242); +void car_H_26(double *state, double *unused, double *out_4021171086941814617); +void car_h_27(double *state, double *unused, double *out_3142070393519437079); +void car_H_27(double *state, double *unused, double *out_4462259261623433451); +void car_h_29(double *state, double *unused, double *out_4621194863301235362); +void car_H_29(double *state, double *unused, double *out_2748896534753882418); +void car_h_28(double *state, double *unused, double *out_7655328506878780195); +void car_H_28(double *state, double *unused, double *out_2333502482315648156); +void car_h_31(double *state, double *unused, double *out_5721286350569910218); +void car_H_31(double *state, double *unused, double *out_249021806190797965); void car_predict(double *in_x, double *in_P, double *in_Q, double dt); void car_set_mass(double x); void car_set_rotational_inertia(double x); diff --git a/selfdrive/locationd/models/generated/gnss.cpp b/selfdrive/locationd/models/generated/gnss.cpp index e3df158d1..c2e0f471c 100644 --- a/selfdrive/locationd/models/generated/gnss.cpp +++ b/selfdrive/locationd/models/generated/gnss.cpp @@ -17,354 +17,354 @@ const static double MAHA_THRESH_21 = 3.8414588206941227; * * * This file is part of 'ekf' * ******************************************************************************/ -void err_fun(double *nom_x, double *delta_x, double *out_5270397344340919402) { - out_5270397344340919402[0] = delta_x[0] + nom_x[0]; - out_5270397344340919402[1] = delta_x[1] + nom_x[1]; - out_5270397344340919402[2] = delta_x[2] + nom_x[2]; - out_5270397344340919402[3] = delta_x[3] + nom_x[3]; - out_5270397344340919402[4] = delta_x[4] + nom_x[4]; - out_5270397344340919402[5] = delta_x[5] + nom_x[5]; - out_5270397344340919402[6] = delta_x[6] + nom_x[6]; - out_5270397344340919402[7] = delta_x[7] + nom_x[7]; - out_5270397344340919402[8] = delta_x[8] + nom_x[8]; - out_5270397344340919402[9] = delta_x[9] + nom_x[9]; - out_5270397344340919402[10] = delta_x[10] + nom_x[10]; +void err_fun(double *nom_x, double *delta_x, double *out_2067482950567323166) { + out_2067482950567323166[0] = delta_x[0] + nom_x[0]; + out_2067482950567323166[1] = delta_x[1] + nom_x[1]; + out_2067482950567323166[2] = delta_x[2] + nom_x[2]; + out_2067482950567323166[3] = delta_x[3] + nom_x[3]; + out_2067482950567323166[4] = delta_x[4] + nom_x[4]; + out_2067482950567323166[5] = delta_x[5] + nom_x[5]; + out_2067482950567323166[6] = delta_x[6] + nom_x[6]; + out_2067482950567323166[7] = delta_x[7] + nom_x[7]; + out_2067482950567323166[8] = delta_x[8] + nom_x[8]; + out_2067482950567323166[9] = delta_x[9] + nom_x[9]; + out_2067482950567323166[10] = delta_x[10] + nom_x[10]; } -void inv_err_fun(double *nom_x, double *true_x, double *out_1512259161409062554) { - out_1512259161409062554[0] = -nom_x[0] + true_x[0]; - out_1512259161409062554[1] = -nom_x[1] + true_x[1]; - out_1512259161409062554[2] = -nom_x[2] + true_x[2]; - out_1512259161409062554[3] = -nom_x[3] + true_x[3]; - out_1512259161409062554[4] = -nom_x[4] + true_x[4]; - out_1512259161409062554[5] = -nom_x[5] + true_x[5]; - out_1512259161409062554[6] = -nom_x[6] + true_x[6]; - out_1512259161409062554[7] = -nom_x[7] + true_x[7]; - out_1512259161409062554[8] = -nom_x[8] + true_x[8]; - out_1512259161409062554[9] = -nom_x[9] + true_x[9]; - out_1512259161409062554[10] = -nom_x[10] + true_x[10]; +void inv_err_fun(double *nom_x, double *true_x, double *out_2603530649313476471) { + out_2603530649313476471[0] = -nom_x[0] + true_x[0]; + out_2603530649313476471[1] = -nom_x[1] + true_x[1]; + out_2603530649313476471[2] = -nom_x[2] + true_x[2]; + out_2603530649313476471[3] = -nom_x[3] + true_x[3]; + out_2603530649313476471[4] = -nom_x[4] + true_x[4]; + out_2603530649313476471[5] = -nom_x[5] + true_x[5]; + out_2603530649313476471[6] = -nom_x[6] + true_x[6]; + out_2603530649313476471[7] = -nom_x[7] + true_x[7]; + out_2603530649313476471[8] = -nom_x[8] + true_x[8]; + out_2603530649313476471[9] = -nom_x[9] + true_x[9]; + out_2603530649313476471[10] = -nom_x[10] + true_x[10]; } -void H_mod_fun(double *state, double *out_8413937430488034064) { - out_8413937430488034064[0] = 1.0; - out_8413937430488034064[1] = 0; - out_8413937430488034064[2] = 0; - out_8413937430488034064[3] = 0; - out_8413937430488034064[4] = 0; - out_8413937430488034064[5] = 0; - out_8413937430488034064[6] = 0; - out_8413937430488034064[7] = 0; - out_8413937430488034064[8] = 0; - out_8413937430488034064[9] = 0; - out_8413937430488034064[10] = 0; - out_8413937430488034064[11] = 0; - out_8413937430488034064[12] = 1.0; - out_8413937430488034064[13] = 0; - out_8413937430488034064[14] = 0; - out_8413937430488034064[15] = 0; - out_8413937430488034064[16] = 0; - out_8413937430488034064[17] = 0; - out_8413937430488034064[18] = 0; - out_8413937430488034064[19] = 0; - out_8413937430488034064[20] = 0; - out_8413937430488034064[21] = 0; - out_8413937430488034064[22] = 0; - out_8413937430488034064[23] = 0; - out_8413937430488034064[24] = 1.0; - out_8413937430488034064[25] = 0; - out_8413937430488034064[26] = 0; - out_8413937430488034064[27] = 0; - out_8413937430488034064[28] = 0; - out_8413937430488034064[29] = 0; - out_8413937430488034064[30] = 0; - out_8413937430488034064[31] = 0; - out_8413937430488034064[32] = 0; - out_8413937430488034064[33] = 0; - out_8413937430488034064[34] = 0; - out_8413937430488034064[35] = 0; - out_8413937430488034064[36] = 1.0; - out_8413937430488034064[37] = 0; - out_8413937430488034064[38] = 0; - out_8413937430488034064[39] = 0; - out_8413937430488034064[40] = 0; - out_8413937430488034064[41] = 0; - out_8413937430488034064[42] = 0; - out_8413937430488034064[43] = 0; - out_8413937430488034064[44] = 0; - out_8413937430488034064[45] = 0; - out_8413937430488034064[46] = 0; - out_8413937430488034064[47] = 0; - out_8413937430488034064[48] = 1.0; - out_8413937430488034064[49] = 0; - out_8413937430488034064[50] = 0; - out_8413937430488034064[51] = 0; - out_8413937430488034064[52] = 0; - out_8413937430488034064[53] = 0; - out_8413937430488034064[54] = 0; - out_8413937430488034064[55] = 0; - out_8413937430488034064[56] = 0; - out_8413937430488034064[57] = 0; - out_8413937430488034064[58] = 0; - out_8413937430488034064[59] = 0; - out_8413937430488034064[60] = 1.0; - out_8413937430488034064[61] = 0; - out_8413937430488034064[62] = 0; - out_8413937430488034064[63] = 0; - out_8413937430488034064[64] = 0; - out_8413937430488034064[65] = 0; - out_8413937430488034064[66] = 0; - out_8413937430488034064[67] = 0; - out_8413937430488034064[68] = 0; - out_8413937430488034064[69] = 0; - out_8413937430488034064[70] = 0; - out_8413937430488034064[71] = 0; - out_8413937430488034064[72] = 1.0; - out_8413937430488034064[73] = 0; - out_8413937430488034064[74] = 0; - out_8413937430488034064[75] = 0; - out_8413937430488034064[76] = 0; - out_8413937430488034064[77] = 0; - out_8413937430488034064[78] = 0; - out_8413937430488034064[79] = 0; - out_8413937430488034064[80] = 0; - out_8413937430488034064[81] = 0; - out_8413937430488034064[82] = 0; - out_8413937430488034064[83] = 0; - out_8413937430488034064[84] = 1.0; - out_8413937430488034064[85] = 0; - out_8413937430488034064[86] = 0; - out_8413937430488034064[87] = 0; - out_8413937430488034064[88] = 0; - out_8413937430488034064[89] = 0; - out_8413937430488034064[90] = 0; - out_8413937430488034064[91] = 0; - out_8413937430488034064[92] = 0; - out_8413937430488034064[93] = 0; - out_8413937430488034064[94] = 0; - out_8413937430488034064[95] = 0; - out_8413937430488034064[96] = 1.0; - out_8413937430488034064[97] = 0; - out_8413937430488034064[98] = 0; - out_8413937430488034064[99] = 0; - out_8413937430488034064[100] = 0; - out_8413937430488034064[101] = 0; - out_8413937430488034064[102] = 0; - out_8413937430488034064[103] = 0; - out_8413937430488034064[104] = 0; - out_8413937430488034064[105] = 0; - out_8413937430488034064[106] = 0; - out_8413937430488034064[107] = 0; - out_8413937430488034064[108] = 1.0; - out_8413937430488034064[109] = 0; - out_8413937430488034064[110] = 0; - out_8413937430488034064[111] = 0; - out_8413937430488034064[112] = 0; - out_8413937430488034064[113] = 0; - out_8413937430488034064[114] = 0; - out_8413937430488034064[115] = 0; - out_8413937430488034064[116] = 0; - out_8413937430488034064[117] = 0; - out_8413937430488034064[118] = 0; - out_8413937430488034064[119] = 0; - out_8413937430488034064[120] = 1.0; +void H_mod_fun(double *state, double *out_5820927568950649229) { + out_5820927568950649229[0] = 1.0; + out_5820927568950649229[1] = 0; + out_5820927568950649229[2] = 0; + out_5820927568950649229[3] = 0; + out_5820927568950649229[4] = 0; + out_5820927568950649229[5] = 0; + out_5820927568950649229[6] = 0; + out_5820927568950649229[7] = 0; + out_5820927568950649229[8] = 0; + out_5820927568950649229[9] = 0; + out_5820927568950649229[10] = 0; + out_5820927568950649229[11] = 0; + out_5820927568950649229[12] = 1.0; + out_5820927568950649229[13] = 0; + out_5820927568950649229[14] = 0; + out_5820927568950649229[15] = 0; + out_5820927568950649229[16] = 0; + out_5820927568950649229[17] = 0; + out_5820927568950649229[18] = 0; + out_5820927568950649229[19] = 0; + out_5820927568950649229[20] = 0; + out_5820927568950649229[21] = 0; + out_5820927568950649229[22] = 0; + out_5820927568950649229[23] = 0; + out_5820927568950649229[24] = 1.0; + out_5820927568950649229[25] = 0; + out_5820927568950649229[26] = 0; + out_5820927568950649229[27] = 0; + out_5820927568950649229[28] = 0; + out_5820927568950649229[29] = 0; + out_5820927568950649229[30] = 0; + out_5820927568950649229[31] = 0; + out_5820927568950649229[32] = 0; + out_5820927568950649229[33] = 0; + out_5820927568950649229[34] = 0; + out_5820927568950649229[35] = 0; + out_5820927568950649229[36] = 1.0; + out_5820927568950649229[37] = 0; + out_5820927568950649229[38] = 0; + out_5820927568950649229[39] = 0; + out_5820927568950649229[40] = 0; + out_5820927568950649229[41] = 0; + out_5820927568950649229[42] = 0; + out_5820927568950649229[43] = 0; + out_5820927568950649229[44] = 0; + out_5820927568950649229[45] = 0; + out_5820927568950649229[46] = 0; + out_5820927568950649229[47] = 0; + out_5820927568950649229[48] = 1.0; + out_5820927568950649229[49] = 0; + out_5820927568950649229[50] = 0; + out_5820927568950649229[51] = 0; + out_5820927568950649229[52] = 0; + out_5820927568950649229[53] = 0; + out_5820927568950649229[54] = 0; + out_5820927568950649229[55] = 0; + out_5820927568950649229[56] = 0; + out_5820927568950649229[57] = 0; + out_5820927568950649229[58] = 0; + out_5820927568950649229[59] = 0; + out_5820927568950649229[60] = 1.0; + out_5820927568950649229[61] = 0; + out_5820927568950649229[62] = 0; + out_5820927568950649229[63] = 0; + out_5820927568950649229[64] = 0; + out_5820927568950649229[65] = 0; + out_5820927568950649229[66] = 0; + out_5820927568950649229[67] = 0; + out_5820927568950649229[68] = 0; + out_5820927568950649229[69] = 0; + out_5820927568950649229[70] = 0; + out_5820927568950649229[71] = 0; + out_5820927568950649229[72] = 1.0; + out_5820927568950649229[73] = 0; + out_5820927568950649229[74] = 0; + out_5820927568950649229[75] = 0; + out_5820927568950649229[76] = 0; + out_5820927568950649229[77] = 0; + out_5820927568950649229[78] = 0; + out_5820927568950649229[79] = 0; + out_5820927568950649229[80] = 0; + out_5820927568950649229[81] = 0; + out_5820927568950649229[82] = 0; + out_5820927568950649229[83] = 0; + out_5820927568950649229[84] = 1.0; + out_5820927568950649229[85] = 0; + out_5820927568950649229[86] = 0; + out_5820927568950649229[87] = 0; + out_5820927568950649229[88] = 0; + out_5820927568950649229[89] = 0; + out_5820927568950649229[90] = 0; + out_5820927568950649229[91] = 0; + out_5820927568950649229[92] = 0; + out_5820927568950649229[93] = 0; + out_5820927568950649229[94] = 0; + out_5820927568950649229[95] = 0; + out_5820927568950649229[96] = 1.0; + out_5820927568950649229[97] = 0; + out_5820927568950649229[98] = 0; + out_5820927568950649229[99] = 0; + out_5820927568950649229[100] = 0; + out_5820927568950649229[101] = 0; + out_5820927568950649229[102] = 0; + out_5820927568950649229[103] = 0; + out_5820927568950649229[104] = 0; + out_5820927568950649229[105] = 0; + out_5820927568950649229[106] = 0; + out_5820927568950649229[107] = 0; + out_5820927568950649229[108] = 1.0; + out_5820927568950649229[109] = 0; + out_5820927568950649229[110] = 0; + out_5820927568950649229[111] = 0; + out_5820927568950649229[112] = 0; + out_5820927568950649229[113] = 0; + out_5820927568950649229[114] = 0; + out_5820927568950649229[115] = 0; + out_5820927568950649229[116] = 0; + out_5820927568950649229[117] = 0; + out_5820927568950649229[118] = 0; + out_5820927568950649229[119] = 0; + out_5820927568950649229[120] = 1.0; } -void f_fun(double *state, double dt, double *out_8044790491496694058) { - out_8044790491496694058[0] = dt*state[3] + state[0]; - out_8044790491496694058[1] = dt*state[4] + state[1]; - out_8044790491496694058[2] = dt*state[5] + state[2]; - out_8044790491496694058[3] = state[3]; - out_8044790491496694058[4] = state[4]; - out_8044790491496694058[5] = state[5]; - out_8044790491496694058[6] = dt*state[7] + state[6]; - out_8044790491496694058[7] = dt*state[8] + state[7]; - out_8044790491496694058[8] = state[8]; - out_8044790491496694058[9] = state[9]; - out_8044790491496694058[10] = state[10]; +void f_fun(double *state, double dt, double *out_17551380326686977) { + out_17551380326686977[0] = dt*state[3] + state[0]; + out_17551380326686977[1] = dt*state[4] + state[1]; + out_17551380326686977[2] = dt*state[5] + state[2]; + out_17551380326686977[3] = state[3]; + out_17551380326686977[4] = state[4]; + out_17551380326686977[5] = state[5]; + out_17551380326686977[6] = dt*state[7] + state[6]; + out_17551380326686977[7] = dt*state[8] + state[7]; + out_17551380326686977[8] = state[8]; + out_17551380326686977[9] = state[9]; + out_17551380326686977[10] = state[10]; } -void F_fun(double *state, double dt, double *out_7107643139068643538) { - out_7107643139068643538[0] = 1; - out_7107643139068643538[1] = 0; - out_7107643139068643538[2] = 0; - out_7107643139068643538[3] = dt; - out_7107643139068643538[4] = 0; - out_7107643139068643538[5] = 0; - out_7107643139068643538[6] = 0; - out_7107643139068643538[7] = 0; - out_7107643139068643538[8] = 0; - out_7107643139068643538[9] = 0; - out_7107643139068643538[10] = 0; - out_7107643139068643538[11] = 0; - out_7107643139068643538[12] = 1; - out_7107643139068643538[13] = 0; - out_7107643139068643538[14] = 0; - out_7107643139068643538[15] = dt; - out_7107643139068643538[16] = 0; - out_7107643139068643538[17] = 0; - out_7107643139068643538[18] = 0; - out_7107643139068643538[19] = 0; - out_7107643139068643538[20] = 0; - out_7107643139068643538[21] = 0; - out_7107643139068643538[22] = 0; - out_7107643139068643538[23] = 0; - out_7107643139068643538[24] = 1; - out_7107643139068643538[25] = 0; - out_7107643139068643538[26] = 0; - out_7107643139068643538[27] = dt; - out_7107643139068643538[28] = 0; - out_7107643139068643538[29] = 0; - out_7107643139068643538[30] = 0; - out_7107643139068643538[31] = 0; - out_7107643139068643538[32] = 0; - out_7107643139068643538[33] = 0; - out_7107643139068643538[34] = 0; - out_7107643139068643538[35] = 0; - out_7107643139068643538[36] = 1; - out_7107643139068643538[37] = 0; - out_7107643139068643538[38] = 0; - out_7107643139068643538[39] = 0; - out_7107643139068643538[40] = 0; - out_7107643139068643538[41] = 0; - out_7107643139068643538[42] = 0; - out_7107643139068643538[43] = 0; - out_7107643139068643538[44] = 0; - out_7107643139068643538[45] = 0; - out_7107643139068643538[46] = 0; - out_7107643139068643538[47] = 0; - out_7107643139068643538[48] = 1; - out_7107643139068643538[49] = 0; - out_7107643139068643538[50] = 0; - out_7107643139068643538[51] = 0; - out_7107643139068643538[52] = 0; - out_7107643139068643538[53] = 0; - out_7107643139068643538[54] = 0; - out_7107643139068643538[55] = 0; - out_7107643139068643538[56] = 0; - out_7107643139068643538[57] = 0; - out_7107643139068643538[58] = 0; - out_7107643139068643538[59] = 0; - out_7107643139068643538[60] = 1; - out_7107643139068643538[61] = 0; - out_7107643139068643538[62] = 0; - out_7107643139068643538[63] = 0; - out_7107643139068643538[64] = 0; - out_7107643139068643538[65] = 0; - out_7107643139068643538[66] = 0; - out_7107643139068643538[67] = 0; - out_7107643139068643538[68] = 0; - out_7107643139068643538[69] = 0; - out_7107643139068643538[70] = 0; - out_7107643139068643538[71] = 0; - out_7107643139068643538[72] = 1; - out_7107643139068643538[73] = dt; - out_7107643139068643538[74] = 0; - out_7107643139068643538[75] = 0; - out_7107643139068643538[76] = 0; - out_7107643139068643538[77] = 0; - out_7107643139068643538[78] = 0; - out_7107643139068643538[79] = 0; - out_7107643139068643538[80] = 0; - out_7107643139068643538[81] = 0; - out_7107643139068643538[82] = 0; - out_7107643139068643538[83] = 0; - out_7107643139068643538[84] = 1; - out_7107643139068643538[85] = dt; - out_7107643139068643538[86] = 0; - out_7107643139068643538[87] = 0; - out_7107643139068643538[88] = 0; - out_7107643139068643538[89] = 0; - out_7107643139068643538[90] = 0; - out_7107643139068643538[91] = 0; - out_7107643139068643538[92] = 0; - out_7107643139068643538[93] = 0; - out_7107643139068643538[94] = 0; - out_7107643139068643538[95] = 0; - out_7107643139068643538[96] = 1; - out_7107643139068643538[97] = 0; - out_7107643139068643538[98] = 0; - out_7107643139068643538[99] = 0; - out_7107643139068643538[100] = 0; - out_7107643139068643538[101] = 0; - out_7107643139068643538[102] = 0; - out_7107643139068643538[103] = 0; - out_7107643139068643538[104] = 0; - out_7107643139068643538[105] = 0; - out_7107643139068643538[106] = 0; - out_7107643139068643538[107] = 0; - out_7107643139068643538[108] = 1; - out_7107643139068643538[109] = 0; - out_7107643139068643538[110] = 0; - out_7107643139068643538[111] = 0; - out_7107643139068643538[112] = 0; - out_7107643139068643538[113] = 0; - out_7107643139068643538[114] = 0; - out_7107643139068643538[115] = 0; - out_7107643139068643538[116] = 0; - out_7107643139068643538[117] = 0; - out_7107643139068643538[118] = 0; - out_7107643139068643538[119] = 0; - out_7107643139068643538[120] = 1; +void F_fun(double *state, double dt, double *out_414838326010165834) { + out_414838326010165834[0] = 1; + out_414838326010165834[1] = 0; + out_414838326010165834[2] = 0; + out_414838326010165834[3] = dt; + out_414838326010165834[4] = 0; + out_414838326010165834[5] = 0; + out_414838326010165834[6] = 0; + out_414838326010165834[7] = 0; + out_414838326010165834[8] = 0; + out_414838326010165834[9] = 0; + out_414838326010165834[10] = 0; + out_414838326010165834[11] = 0; + out_414838326010165834[12] = 1; + out_414838326010165834[13] = 0; + out_414838326010165834[14] = 0; + out_414838326010165834[15] = dt; + out_414838326010165834[16] = 0; + out_414838326010165834[17] = 0; + out_414838326010165834[18] = 0; + out_414838326010165834[19] = 0; + out_414838326010165834[20] = 0; + out_414838326010165834[21] = 0; + out_414838326010165834[22] = 0; + out_414838326010165834[23] = 0; + out_414838326010165834[24] = 1; + out_414838326010165834[25] = 0; + out_414838326010165834[26] = 0; + out_414838326010165834[27] = dt; + out_414838326010165834[28] = 0; + out_414838326010165834[29] = 0; + out_414838326010165834[30] = 0; + out_414838326010165834[31] = 0; + out_414838326010165834[32] = 0; + out_414838326010165834[33] = 0; + out_414838326010165834[34] = 0; + out_414838326010165834[35] = 0; + out_414838326010165834[36] = 1; + out_414838326010165834[37] = 0; + out_414838326010165834[38] = 0; + out_414838326010165834[39] = 0; + out_414838326010165834[40] = 0; + out_414838326010165834[41] = 0; + out_414838326010165834[42] = 0; + out_414838326010165834[43] = 0; + out_414838326010165834[44] = 0; + out_414838326010165834[45] = 0; + out_414838326010165834[46] = 0; + out_414838326010165834[47] = 0; + out_414838326010165834[48] = 1; + out_414838326010165834[49] = 0; + out_414838326010165834[50] = 0; + out_414838326010165834[51] = 0; + out_414838326010165834[52] = 0; + out_414838326010165834[53] = 0; + out_414838326010165834[54] = 0; + out_414838326010165834[55] = 0; + out_414838326010165834[56] = 0; + out_414838326010165834[57] = 0; + out_414838326010165834[58] = 0; + out_414838326010165834[59] = 0; + out_414838326010165834[60] = 1; + out_414838326010165834[61] = 0; + out_414838326010165834[62] = 0; + out_414838326010165834[63] = 0; + out_414838326010165834[64] = 0; + out_414838326010165834[65] = 0; + out_414838326010165834[66] = 0; + out_414838326010165834[67] = 0; + out_414838326010165834[68] = 0; + out_414838326010165834[69] = 0; + out_414838326010165834[70] = 0; + out_414838326010165834[71] = 0; + out_414838326010165834[72] = 1; + out_414838326010165834[73] = dt; + out_414838326010165834[74] = 0; + out_414838326010165834[75] = 0; + out_414838326010165834[76] = 0; + out_414838326010165834[77] = 0; + out_414838326010165834[78] = 0; + out_414838326010165834[79] = 0; + out_414838326010165834[80] = 0; + out_414838326010165834[81] = 0; + out_414838326010165834[82] = 0; + out_414838326010165834[83] = 0; + out_414838326010165834[84] = 1; + out_414838326010165834[85] = dt; + out_414838326010165834[86] = 0; + out_414838326010165834[87] = 0; + out_414838326010165834[88] = 0; + out_414838326010165834[89] = 0; + out_414838326010165834[90] = 0; + out_414838326010165834[91] = 0; + out_414838326010165834[92] = 0; + out_414838326010165834[93] = 0; + out_414838326010165834[94] = 0; + out_414838326010165834[95] = 0; + out_414838326010165834[96] = 1; + out_414838326010165834[97] = 0; + out_414838326010165834[98] = 0; + out_414838326010165834[99] = 0; + out_414838326010165834[100] = 0; + out_414838326010165834[101] = 0; + out_414838326010165834[102] = 0; + out_414838326010165834[103] = 0; + out_414838326010165834[104] = 0; + out_414838326010165834[105] = 0; + out_414838326010165834[106] = 0; + out_414838326010165834[107] = 0; + out_414838326010165834[108] = 1; + out_414838326010165834[109] = 0; + out_414838326010165834[110] = 0; + out_414838326010165834[111] = 0; + out_414838326010165834[112] = 0; + out_414838326010165834[113] = 0; + out_414838326010165834[114] = 0; + out_414838326010165834[115] = 0; + out_414838326010165834[116] = 0; + out_414838326010165834[117] = 0; + out_414838326010165834[118] = 0; + out_414838326010165834[119] = 0; + out_414838326010165834[120] = 1; } -void h_6(double *state, double *sat_pos, double *out_1014783744438669605) { - out_1014783744438669605[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6]; +void h_6(double *state, double *sat_pos, double *out_9074704291738973277) { + out_9074704291738973277[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6]; } -void H_6(double *state, double *sat_pos, double *out_2647892629803094557) { - out_2647892629803094557[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); - out_2647892629803094557[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); - out_2647892629803094557[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); - out_2647892629803094557[3] = 0; - out_2647892629803094557[4] = 0; - out_2647892629803094557[5] = 0; - out_2647892629803094557[6] = 1; - out_2647892629803094557[7] = 0; - out_2647892629803094557[8] = 0; - out_2647892629803094557[9] = 0; - out_2647892629803094557[10] = 0; +void H_6(double *state, double *sat_pos, double *out_8056400913830408537) { + out_8056400913830408537[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); + out_8056400913830408537[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); + out_8056400913830408537[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); + out_8056400913830408537[3] = 0; + out_8056400913830408537[4] = 0; + out_8056400913830408537[5] = 0; + out_8056400913830408537[6] = 1; + out_8056400913830408537[7] = 0; + out_8056400913830408537[8] = 0; + out_8056400913830408537[9] = 0; + out_8056400913830408537[10] = 0; } -void h_20(double *state, double *sat_pos, double *out_4446463785726682298) { - out_4446463785726682298[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9]; +void h_20(double *state, double *sat_pos, double *out_5771271505288635021) { + out_5771271505288635021[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9]; } -void H_20(double *state, double *sat_pos, double *out_2058835805956563056) { - out_2058835805956563056[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); - out_2058835805956563056[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); - out_2058835805956563056[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); - out_2058835805956563056[3] = 0; - out_2058835805956563056[4] = 0; - out_2058835805956563056[5] = 0; - out_2058835805956563056[6] = 1; - out_2058835805956563056[7] = 0; - out_2058835805956563056[8] = 0; - out_2058835805956563056[9] = 1; - out_2058835805956563056[10] = sat_pos[3]; +void H_20(double *state, double *sat_pos, double *out_5454875328892457956) { + out_5454875328892457956[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); + out_5454875328892457956[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); + out_5454875328892457956[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)); + out_5454875328892457956[3] = 0; + out_5454875328892457956[4] = 0; + out_5454875328892457956[5] = 0; + out_5454875328892457956[6] = 1; + out_5454875328892457956[7] = 0; + out_5454875328892457956[8] = 0; + out_5454875328892457956[9] = 1; + out_5454875328892457956[10] = sat_pos[3]; } -void h_7(double *state, double *sat_pos_vel, double *out_6977013047509885177) { - out_6977013047509885177[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7]; +void h_7(double *state, double *sat_pos_vel, double *out_5412429359018771727) { + out_5412429359018771727[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7]; } -void H_7(double *state, double *sat_pos_vel, double *out_3396370189700754510) { - out_3396370189700754510[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[6] = 0; - out_3396370189700754510[7] = 1; - out_3396370189700754510[8] = 0; - out_3396370189700754510[9] = 0; - out_3396370189700754510[10] = 0; +void H_7(double *state, double *sat_pos_vel, double *out_1987528380465191465) { + out_1987528380465191465[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[6] = 0; + out_1987528380465191465[7] = 1; + out_1987528380465191465[8] = 0; + out_1987528380465191465[9] = 0; + out_1987528380465191465[10] = 0; } -void h_21(double *state, double *sat_pos_vel, double *out_6977013047509885177) { - out_6977013047509885177[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7]; +void h_21(double *state, double *sat_pos_vel, double *out_5412429359018771727) { + out_5412429359018771727[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7]; } -void H_21(double *state, double *sat_pos_vel, double *out_3396370189700754510) { - out_3396370189700754510[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); - out_3396370189700754510[6] = 0; - out_3396370189700754510[7] = 1; - out_3396370189700754510[8] = 0; - out_3396370189700754510[9] = 0; - out_3396370189700754510[10] = 0; +void H_21(double *state, double *sat_pos_vel, double *out_1987528380465191465) { + out_1987528380465191465[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)); + out_1987528380465191465[6] = 0; + out_1987528380465191465[7] = 1; + out_1987528380465191465[8] = 0; + out_1987528380465191465[9] = 0; + out_1987528380465191465[10] = 0; } #include #include @@ -506,44 +506,44 @@ void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, doubl void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<1, 3, 0>(in_x, in_P, h_21, H_21, NULL, in_z, in_R, in_ea, MAHA_THRESH_21); } -void gnss_err_fun(double *nom_x, double *delta_x, double *out_5270397344340919402) { - err_fun(nom_x, delta_x, out_5270397344340919402); +void gnss_err_fun(double *nom_x, double *delta_x, double *out_2067482950567323166) { + err_fun(nom_x, delta_x, out_2067482950567323166); } -void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_1512259161409062554) { - inv_err_fun(nom_x, true_x, out_1512259161409062554); +void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_2603530649313476471) { + inv_err_fun(nom_x, true_x, out_2603530649313476471); } -void gnss_H_mod_fun(double *state, double *out_8413937430488034064) { - H_mod_fun(state, out_8413937430488034064); +void gnss_H_mod_fun(double *state, double *out_5820927568950649229) { + H_mod_fun(state, out_5820927568950649229); } -void gnss_f_fun(double *state, double dt, double *out_8044790491496694058) { - f_fun(state, dt, out_8044790491496694058); +void gnss_f_fun(double *state, double dt, double *out_17551380326686977) { + f_fun(state, dt, out_17551380326686977); } -void gnss_F_fun(double *state, double dt, double *out_7107643139068643538) { - F_fun(state, dt, out_7107643139068643538); +void gnss_F_fun(double *state, double dt, double *out_414838326010165834) { + F_fun(state, dt, out_414838326010165834); } -void gnss_h_6(double *state, double *sat_pos, double *out_1014783744438669605) { - h_6(state, sat_pos, out_1014783744438669605); +void gnss_h_6(double *state, double *sat_pos, double *out_9074704291738973277) { + h_6(state, sat_pos, out_9074704291738973277); } -void gnss_H_6(double *state, double *sat_pos, double *out_2647892629803094557) { - H_6(state, sat_pos, out_2647892629803094557); +void gnss_H_6(double *state, double *sat_pos, double *out_8056400913830408537) { + H_6(state, sat_pos, out_8056400913830408537); } -void gnss_h_20(double *state, double *sat_pos, double *out_4446463785726682298) { - h_20(state, sat_pos, out_4446463785726682298); +void gnss_h_20(double *state, double *sat_pos, double *out_5771271505288635021) { + h_20(state, sat_pos, out_5771271505288635021); } -void gnss_H_20(double *state, double *sat_pos, double *out_2058835805956563056) { - H_20(state, sat_pos, out_2058835805956563056); +void gnss_H_20(double *state, double *sat_pos, double *out_5454875328892457956) { + H_20(state, sat_pos, out_5454875328892457956); } -void gnss_h_7(double *state, double *sat_pos_vel, double *out_6977013047509885177) { - h_7(state, sat_pos_vel, out_6977013047509885177); +void gnss_h_7(double *state, double *sat_pos_vel, double *out_5412429359018771727) { + h_7(state, sat_pos_vel, out_5412429359018771727); } -void gnss_H_7(double *state, double *sat_pos_vel, double *out_3396370189700754510) { - H_7(state, sat_pos_vel, out_3396370189700754510); +void gnss_H_7(double *state, double *sat_pos_vel, double *out_1987528380465191465) { + H_7(state, sat_pos_vel, out_1987528380465191465); } -void gnss_h_21(double *state, double *sat_pos_vel, double *out_6977013047509885177) { - h_21(state, sat_pos_vel, out_6977013047509885177); +void gnss_h_21(double *state, double *sat_pos_vel, double *out_5412429359018771727) { + h_21(state, sat_pos_vel, out_5412429359018771727); } -void gnss_H_21(double *state, double *sat_pos_vel, double *out_3396370189700754510) { - H_21(state, sat_pos_vel, out_3396370189700754510); +void gnss_H_21(double *state, double *sat_pos_vel, double *out_1987528380465191465) { + H_21(state, sat_pos_vel, out_1987528380465191465); } void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt) { predict(in_x, in_P, in_Q, dt); diff --git a/selfdrive/locationd/models/generated/gnss.h b/selfdrive/locationd/models/generated/gnss.h index d55128308..75c2d401d 100644 --- a/selfdrive/locationd/models/generated/gnss.h +++ b/selfdrive/locationd/models/generated/gnss.h @@ -5,18 +5,18 @@ void gnss_update_6(double *in_x, double *in_P, double *in_z, double *in_R, doubl void gnss_update_20(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); -void gnss_err_fun(double *nom_x, double *delta_x, double *out_5270397344340919402); -void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_1512259161409062554); -void gnss_H_mod_fun(double *state, double *out_8413937430488034064); -void gnss_f_fun(double *state, double dt, double *out_8044790491496694058); -void gnss_F_fun(double *state, double dt, double *out_7107643139068643538); -void gnss_h_6(double *state, double *sat_pos, double *out_1014783744438669605); -void gnss_H_6(double *state, double *sat_pos, double *out_2647892629803094557); -void gnss_h_20(double *state, double *sat_pos, double *out_4446463785726682298); -void gnss_H_20(double *state, double *sat_pos, double *out_2058835805956563056); -void gnss_h_7(double *state, double *sat_pos_vel, double *out_6977013047509885177); -void gnss_H_7(double *state, double *sat_pos_vel, double *out_3396370189700754510); -void gnss_h_21(double *state, double *sat_pos_vel, double *out_6977013047509885177); -void gnss_H_21(double *state, double *sat_pos_vel, double *out_3396370189700754510); +void gnss_err_fun(double *nom_x, double *delta_x, double *out_2067482950567323166); +void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_2603530649313476471); +void gnss_H_mod_fun(double *state, double *out_5820927568950649229); +void gnss_f_fun(double *state, double dt, double *out_17551380326686977); +void gnss_F_fun(double *state, double dt, double *out_414838326010165834); +void gnss_h_6(double *state, double *sat_pos, double *out_9074704291738973277); +void gnss_H_6(double *state, double *sat_pos, double *out_8056400913830408537); +void gnss_h_20(double *state, double *sat_pos, double *out_5771271505288635021); +void gnss_H_20(double *state, double *sat_pos, double *out_5454875328892457956); +void gnss_h_7(double *state, double *sat_pos_vel, double *out_5412429359018771727); +void gnss_H_7(double *state, double *sat_pos_vel, double *out_1987528380465191465); +void gnss_h_21(double *state, double *sat_pos_vel, double *out_5412429359018771727); +void gnss_H_21(double *state, double *sat_pos_vel, double *out_1987528380465191465); void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt); } \ No newline at end of file diff --git a/selfdrive/locationd/models/generated/libkf.so b/selfdrive/locationd/models/generated/libkf.so index d254c3f69..5ab75d707 100755 Binary files a/selfdrive/locationd/models/generated/libkf.so and b/selfdrive/locationd/models/generated/libkf.so differ diff --git a/selfdrive/locationd/models/generated/live.cpp b/selfdrive/locationd/models/generated/live.cpp index 36d1574d6..fffcb61a4 100644 --- a/selfdrive/locationd/models/generated/live.cpp +++ b/selfdrive/locationd/models/generated/live.cpp @@ -22,1683 +22,1683 @@ const static double MAHA_THRESH_33 = 7.814727903251177; * * * This file is part of 'ekf' * ******************************************************************************/ -void H(double *in_vec, double *out_2107061543090158966) { - out_2107061543090158966[0] = 0; - out_2107061543090158966[1] = -sin(in_vec[1])*sin(in_vec[2])*in_vec[4] - sin(in_vec[1])*cos(in_vec[2])*in_vec[3] - cos(in_vec[1])*in_vec[5]; - out_2107061543090158966[2] = -sin(in_vec[2])*cos(in_vec[1])*in_vec[3] + cos(in_vec[1])*cos(in_vec[2])*in_vec[4]; - out_2107061543090158966[3] = cos(in_vec[1])*cos(in_vec[2]); - out_2107061543090158966[4] = sin(in_vec[2])*cos(in_vec[1]); - out_2107061543090158966[5] = -sin(in_vec[1]); - out_2107061543090158966[6] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (-sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*in_vec[5]; - out_2107061543090158966[7] = -sin(in_vec[0])*sin(in_vec[1])*in_vec[5] + sin(in_vec[0])*sin(in_vec[2])*cos(in_vec[1])*in_vec[4] + sin(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3]; - out_2107061543090158966[8] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]))*in_vec[4]; - out_2107061543090158966[9] = sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]); - out_2107061543090158966[10] = sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) + cos(in_vec[0])*cos(in_vec[2]); - out_2107061543090158966[11] = sin(in_vec[0])*cos(in_vec[1]); - out_2107061543090158966[12] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (-sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) + sin(in_vec[2])*cos(in_vec[0]))*in_vec[3] - sin(in_vec[0])*cos(in_vec[1])*in_vec[5]; - out_2107061543090158966[13] = -sin(in_vec[1])*cos(in_vec[0])*in_vec[5] + sin(in_vec[2])*cos(in_vec[0])*cos(in_vec[1])*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3]; - out_2107061543090158966[14] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (sin(in_vec[0])*cos(in_vec[2]) - sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[3]; - out_2107061543090158966[15] = sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]); - out_2107061543090158966[16] = -sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]); - out_2107061543090158966[17] = cos(in_vec[0])*cos(in_vec[1]); +void H(double *in_vec, double *out_3981994659674141472) { + out_3981994659674141472[0] = 0; + out_3981994659674141472[1] = -sin(in_vec[1])*sin(in_vec[2])*in_vec[4] - sin(in_vec[1])*cos(in_vec[2])*in_vec[3] - cos(in_vec[1])*in_vec[5]; + out_3981994659674141472[2] = -sin(in_vec[2])*cos(in_vec[1])*in_vec[3] + cos(in_vec[1])*cos(in_vec[2])*in_vec[4]; + out_3981994659674141472[3] = cos(in_vec[1])*cos(in_vec[2]); + out_3981994659674141472[4] = sin(in_vec[2])*cos(in_vec[1]); + out_3981994659674141472[5] = -sin(in_vec[1]); + out_3981994659674141472[6] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (-sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*in_vec[5]; + out_3981994659674141472[7] = -sin(in_vec[0])*sin(in_vec[1])*in_vec[5] + sin(in_vec[0])*sin(in_vec[2])*cos(in_vec[1])*in_vec[4] + sin(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3]; + out_3981994659674141472[8] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]))*in_vec[4]; + out_3981994659674141472[9] = sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]); + out_3981994659674141472[10] = sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) + cos(in_vec[0])*cos(in_vec[2]); + out_3981994659674141472[11] = sin(in_vec[0])*cos(in_vec[1]); + out_3981994659674141472[12] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (-sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) + sin(in_vec[2])*cos(in_vec[0]))*in_vec[3] - sin(in_vec[0])*cos(in_vec[1])*in_vec[5]; + out_3981994659674141472[13] = -sin(in_vec[1])*cos(in_vec[0])*in_vec[5] + sin(in_vec[2])*cos(in_vec[0])*cos(in_vec[1])*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3]; + out_3981994659674141472[14] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (sin(in_vec[0])*cos(in_vec[2]) - sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[3]; + out_3981994659674141472[15] = sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]); + out_3981994659674141472[16] = -sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]); + out_3981994659674141472[17] = cos(in_vec[0])*cos(in_vec[1]); } -void err_fun(double *nom_x, double *delta_x, double *out_1090842864546838841) { - out_1090842864546838841[0] = delta_x[0] + nom_x[0]; - out_1090842864546838841[1] = delta_x[1] + nom_x[1]; - out_1090842864546838841[2] = delta_x[2] + nom_x[2]; - out_1090842864546838841[3] = -0.5*delta_x[3]*nom_x[4] - 0.5*delta_x[4]*nom_x[5] - 0.5*delta_x[5]*nom_x[6] + 1.0*nom_x[3]; - out_1090842864546838841[4] = 0.5*delta_x[3]*nom_x[3] + 0.5*delta_x[4]*nom_x[6] - 0.5*delta_x[5]*nom_x[5] + 1.0*nom_x[4]; - out_1090842864546838841[5] = -0.5*delta_x[3]*nom_x[6] + 0.5*delta_x[4]*nom_x[3] + 0.5*delta_x[5]*nom_x[4] + 1.0*nom_x[5]; - out_1090842864546838841[6] = 0.5*delta_x[3]*nom_x[5] - 0.5*delta_x[4]*nom_x[4] + 0.5*delta_x[5]*nom_x[3] + 1.0*nom_x[6]; - out_1090842864546838841[7] = delta_x[6] + nom_x[7]; - out_1090842864546838841[8] = delta_x[7] + nom_x[8]; - out_1090842864546838841[9] = delta_x[8] + nom_x[9]; - out_1090842864546838841[10] = delta_x[9] + nom_x[10]; - out_1090842864546838841[11] = delta_x[10] + nom_x[11]; - out_1090842864546838841[12] = delta_x[11] + nom_x[12]; - out_1090842864546838841[13] = delta_x[12] + nom_x[13]; - out_1090842864546838841[14] = delta_x[13] + nom_x[14]; - out_1090842864546838841[15] = delta_x[14] + nom_x[15]; - out_1090842864546838841[16] = delta_x[15] + nom_x[16]; - out_1090842864546838841[17] = delta_x[16] + nom_x[17]; - out_1090842864546838841[18] = delta_x[17] + nom_x[18]; - out_1090842864546838841[19] = delta_x[18] + nom_x[19]; - out_1090842864546838841[20] = delta_x[19] + nom_x[20]; - out_1090842864546838841[21] = delta_x[20] + nom_x[21]; +void err_fun(double *nom_x, double *delta_x, double *out_3356596097038928074) { + out_3356596097038928074[0] = delta_x[0] + nom_x[0]; + out_3356596097038928074[1] = delta_x[1] + nom_x[1]; + out_3356596097038928074[2] = delta_x[2] + nom_x[2]; + out_3356596097038928074[3] = -0.5*delta_x[3]*nom_x[4] - 0.5*delta_x[4]*nom_x[5] - 0.5*delta_x[5]*nom_x[6] + 1.0*nom_x[3]; + out_3356596097038928074[4] = 0.5*delta_x[3]*nom_x[3] + 0.5*delta_x[4]*nom_x[6] - 0.5*delta_x[5]*nom_x[5] + 1.0*nom_x[4]; + out_3356596097038928074[5] = -0.5*delta_x[3]*nom_x[6] + 0.5*delta_x[4]*nom_x[3] + 0.5*delta_x[5]*nom_x[4] + 1.0*nom_x[5]; + out_3356596097038928074[6] = 0.5*delta_x[3]*nom_x[5] - 0.5*delta_x[4]*nom_x[4] + 0.5*delta_x[5]*nom_x[3] + 1.0*nom_x[6]; + out_3356596097038928074[7] = delta_x[6] + nom_x[7]; + out_3356596097038928074[8] = delta_x[7] + nom_x[8]; + out_3356596097038928074[9] = delta_x[8] + nom_x[9]; + out_3356596097038928074[10] = delta_x[9] + nom_x[10]; + out_3356596097038928074[11] = delta_x[10] + nom_x[11]; + out_3356596097038928074[12] = delta_x[11] + nom_x[12]; + out_3356596097038928074[13] = delta_x[12] + nom_x[13]; + out_3356596097038928074[14] = delta_x[13] + nom_x[14]; + out_3356596097038928074[15] = delta_x[14] + nom_x[15]; + out_3356596097038928074[16] = delta_x[15] + nom_x[16]; + out_3356596097038928074[17] = delta_x[16] + nom_x[17]; + out_3356596097038928074[18] = delta_x[17] + nom_x[18]; + out_3356596097038928074[19] = delta_x[18] + nom_x[19]; + out_3356596097038928074[20] = delta_x[19] + nom_x[20]; + out_3356596097038928074[21] = delta_x[20] + nom_x[21]; } -void inv_err_fun(double *nom_x, double *true_x, double *out_1751534880763809428) { - out_1751534880763809428[0] = -nom_x[0] + true_x[0]; - out_1751534880763809428[1] = -nom_x[1] + true_x[1]; - out_1751534880763809428[2] = -nom_x[2] + true_x[2]; - out_1751534880763809428[3] = 2*nom_x[3]*true_x[4] - 2*nom_x[4]*true_x[3] + 2*nom_x[5]*true_x[6] - 2*nom_x[6]*true_x[5]; - out_1751534880763809428[4] = 2*nom_x[3]*true_x[5] - 2*nom_x[4]*true_x[6] - 2*nom_x[5]*true_x[3] + 2*nom_x[6]*true_x[4]; - out_1751534880763809428[5] = 2*nom_x[3]*true_x[6] + 2*nom_x[4]*true_x[5] - 2*nom_x[5]*true_x[4] - 2*nom_x[6]*true_x[3]; - out_1751534880763809428[6] = -nom_x[7] + true_x[7]; - out_1751534880763809428[7] = -nom_x[8] + true_x[8]; - out_1751534880763809428[8] = -nom_x[9] + true_x[9]; - out_1751534880763809428[9] = -nom_x[10] + true_x[10]; - out_1751534880763809428[10] = -nom_x[11] + true_x[11]; - out_1751534880763809428[11] = -nom_x[12] + true_x[12]; - out_1751534880763809428[12] = -nom_x[13] + true_x[13]; - out_1751534880763809428[13] = -nom_x[14] + true_x[14]; - out_1751534880763809428[14] = -nom_x[15] + true_x[15]; - out_1751534880763809428[15] = -nom_x[16] + true_x[16]; - out_1751534880763809428[16] = -nom_x[17] + true_x[17]; - out_1751534880763809428[17] = -nom_x[18] + true_x[18]; - out_1751534880763809428[18] = -nom_x[19] + true_x[19]; - out_1751534880763809428[19] = -nom_x[20] + true_x[20]; - out_1751534880763809428[20] = -nom_x[21] + true_x[21]; +void inv_err_fun(double *nom_x, double *true_x, double *out_4391465575185495497) { + out_4391465575185495497[0] = -nom_x[0] + true_x[0]; + out_4391465575185495497[1] = -nom_x[1] + true_x[1]; + out_4391465575185495497[2] = -nom_x[2] + true_x[2]; + out_4391465575185495497[3] = 2*nom_x[3]*true_x[4] - 2*nom_x[4]*true_x[3] + 2*nom_x[5]*true_x[6] - 2*nom_x[6]*true_x[5]; + out_4391465575185495497[4] = 2*nom_x[3]*true_x[5] - 2*nom_x[4]*true_x[6] - 2*nom_x[5]*true_x[3] + 2*nom_x[6]*true_x[4]; + out_4391465575185495497[5] = 2*nom_x[3]*true_x[6] + 2*nom_x[4]*true_x[5] - 2*nom_x[5]*true_x[4] - 2*nom_x[6]*true_x[3]; + out_4391465575185495497[6] = -nom_x[7] + true_x[7]; + out_4391465575185495497[7] = -nom_x[8] + true_x[8]; + out_4391465575185495497[8] = -nom_x[9] + true_x[9]; + out_4391465575185495497[9] = -nom_x[10] + true_x[10]; + out_4391465575185495497[10] = -nom_x[11] + true_x[11]; + out_4391465575185495497[11] = -nom_x[12] + true_x[12]; + out_4391465575185495497[12] = -nom_x[13] + true_x[13]; + out_4391465575185495497[13] = -nom_x[14] + true_x[14]; + out_4391465575185495497[14] = -nom_x[15] + true_x[15]; + out_4391465575185495497[15] = -nom_x[16] + true_x[16]; + out_4391465575185495497[16] = -nom_x[17] + true_x[17]; + out_4391465575185495497[17] = -nom_x[18] + true_x[18]; + out_4391465575185495497[18] = -nom_x[19] + true_x[19]; + out_4391465575185495497[19] = -nom_x[20] + true_x[20]; + out_4391465575185495497[20] = -nom_x[21] + true_x[21]; } -void H_mod_fun(double *state, double *out_2270168032272230264) { - out_2270168032272230264[0] = 1.0; - out_2270168032272230264[1] = 0; - out_2270168032272230264[2] = 0; - out_2270168032272230264[3] = 0; - out_2270168032272230264[4] = 0; - out_2270168032272230264[5] = 0; - out_2270168032272230264[6] = 0; - out_2270168032272230264[7] = 0; - out_2270168032272230264[8] = 0; - out_2270168032272230264[9] = 0; - out_2270168032272230264[10] = 0; - out_2270168032272230264[11] = 0; - out_2270168032272230264[12] = 0; - out_2270168032272230264[13] = 0; - out_2270168032272230264[14] = 0; - out_2270168032272230264[15] = 0; - out_2270168032272230264[16] = 0; - out_2270168032272230264[17] = 0; - out_2270168032272230264[18] = 0; - out_2270168032272230264[19] = 0; - out_2270168032272230264[20] = 0; - out_2270168032272230264[21] = 0; - out_2270168032272230264[22] = 1.0; - out_2270168032272230264[23] = 0; - out_2270168032272230264[24] = 0; - out_2270168032272230264[25] = 0; - out_2270168032272230264[26] = 0; - out_2270168032272230264[27] = 0; - out_2270168032272230264[28] = 0; - out_2270168032272230264[29] = 0; - out_2270168032272230264[30] = 0; - out_2270168032272230264[31] = 0; - out_2270168032272230264[32] = 0; - out_2270168032272230264[33] = 0; - out_2270168032272230264[34] = 0; - out_2270168032272230264[35] = 0; - out_2270168032272230264[36] = 0; - out_2270168032272230264[37] = 0; - out_2270168032272230264[38] = 0; - out_2270168032272230264[39] = 0; - out_2270168032272230264[40] = 0; - out_2270168032272230264[41] = 0; - out_2270168032272230264[42] = 0; - out_2270168032272230264[43] = 0; - out_2270168032272230264[44] = 1.0; - out_2270168032272230264[45] = 0; - out_2270168032272230264[46] = 0; - out_2270168032272230264[47] = 0; - out_2270168032272230264[48] = 0; - out_2270168032272230264[49] = 0; - out_2270168032272230264[50] = 0; - out_2270168032272230264[51] = 0; - out_2270168032272230264[52] = 0; - out_2270168032272230264[53] = 0; - out_2270168032272230264[54] = 0; - out_2270168032272230264[55] = 0; - out_2270168032272230264[56] = 0; - out_2270168032272230264[57] = 0; - out_2270168032272230264[58] = 0; - out_2270168032272230264[59] = 0; - out_2270168032272230264[60] = 0; - out_2270168032272230264[61] = 0; - out_2270168032272230264[62] = 0; - out_2270168032272230264[63] = 0; - out_2270168032272230264[64] = 0; - out_2270168032272230264[65] = 0; - out_2270168032272230264[66] = -0.5*state[4]; - out_2270168032272230264[67] = -0.5*state[5]; - out_2270168032272230264[68] = -0.5*state[6]; - out_2270168032272230264[69] = 0; - out_2270168032272230264[70] = 0; - out_2270168032272230264[71] = 0; - out_2270168032272230264[72] = 0; - out_2270168032272230264[73] = 0; - out_2270168032272230264[74] = 0; - out_2270168032272230264[75] = 0; - out_2270168032272230264[76] = 0; - out_2270168032272230264[77] = 0; - out_2270168032272230264[78] = 0; - out_2270168032272230264[79] = 0; - out_2270168032272230264[80] = 0; - out_2270168032272230264[81] = 0; - out_2270168032272230264[82] = 0; - out_2270168032272230264[83] = 0; - out_2270168032272230264[84] = 0; - out_2270168032272230264[85] = 0; - out_2270168032272230264[86] = 0; - out_2270168032272230264[87] = 0.5*state[3]; - out_2270168032272230264[88] = 0.5*state[6]; - out_2270168032272230264[89] = -0.5*state[5]; - out_2270168032272230264[90] = 0; - out_2270168032272230264[91] = 0; - out_2270168032272230264[92] = 0; - out_2270168032272230264[93] = 0; - out_2270168032272230264[94] = 0; - out_2270168032272230264[95] = 0; - out_2270168032272230264[96] = 0; - out_2270168032272230264[97] = 0; - out_2270168032272230264[98] = 0; - out_2270168032272230264[99] = 0; - out_2270168032272230264[100] = 0; - out_2270168032272230264[101] = 0; - out_2270168032272230264[102] = 0; - out_2270168032272230264[103] = 0; - out_2270168032272230264[104] = 0; - out_2270168032272230264[105] = 0; - out_2270168032272230264[106] = 0; - out_2270168032272230264[107] = 0; - out_2270168032272230264[108] = -0.5*state[6]; - out_2270168032272230264[109] = 0.5*state[3]; - out_2270168032272230264[110] = 0.5*state[4]; - out_2270168032272230264[111] = 0; - out_2270168032272230264[112] = 0; - out_2270168032272230264[113] = 0; - out_2270168032272230264[114] = 0; - out_2270168032272230264[115] = 0; - out_2270168032272230264[116] = 0; - out_2270168032272230264[117] = 0; - out_2270168032272230264[118] = 0; - out_2270168032272230264[119] = 0; - out_2270168032272230264[120] = 0; - out_2270168032272230264[121] = 0; - out_2270168032272230264[122] = 0; - out_2270168032272230264[123] = 0; - out_2270168032272230264[124] = 0; - out_2270168032272230264[125] = 0; - out_2270168032272230264[126] = 0; - out_2270168032272230264[127] = 0; - out_2270168032272230264[128] = 0; - out_2270168032272230264[129] = 0.5*state[5]; - out_2270168032272230264[130] = -0.5*state[4]; - out_2270168032272230264[131] = 0.5*state[3]; - out_2270168032272230264[132] = 0; - out_2270168032272230264[133] = 0; - out_2270168032272230264[134] = 0; - out_2270168032272230264[135] = 0; - out_2270168032272230264[136] = 0; - out_2270168032272230264[137] = 0; - out_2270168032272230264[138] = 0; - out_2270168032272230264[139] = 0; - out_2270168032272230264[140] = 0; - out_2270168032272230264[141] = 0; - out_2270168032272230264[142] = 0; - out_2270168032272230264[143] = 0; - out_2270168032272230264[144] = 0; - out_2270168032272230264[145] = 0; - out_2270168032272230264[146] = 0; - out_2270168032272230264[147] = 0; - out_2270168032272230264[148] = 0; - out_2270168032272230264[149] = 0; - out_2270168032272230264[150] = 0; - out_2270168032272230264[151] = 0; - out_2270168032272230264[152] = 0; - out_2270168032272230264[153] = 1.0; - out_2270168032272230264[154] = 0; - out_2270168032272230264[155] = 0; - out_2270168032272230264[156] = 0; - out_2270168032272230264[157] = 0; - out_2270168032272230264[158] = 0; - out_2270168032272230264[159] = 0; - out_2270168032272230264[160] = 0; - out_2270168032272230264[161] = 0; - out_2270168032272230264[162] = 0; - out_2270168032272230264[163] = 0; - out_2270168032272230264[164] = 0; - out_2270168032272230264[165] = 0; - out_2270168032272230264[166] = 0; - out_2270168032272230264[167] = 0; - out_2270168032272230264[168] = 0; - out_2270168032272230264[169] = 0; - out_2270168032272230264[170] = 0; - out_2270168032272230264[171] = 0; - out_2270168032272230264[172] = 0; - out_2270168032272230264[173] = 0; - out_2270168032272230264[174] = 0; - out_2270168032272230264[175] = 1.0; - out_2270168032272230264[176] = 0; - out_2270168032272230264[177] = 0; - out_2270168032272230264[178] = 0; - out_2270168032272230264[179] = 0; - out_2270168032272230264[180] = 0; - out_2270168032272230264[181] = 0; - out_2270168032272230264[182] = 0; - out_2270168032272230264[183] = 0; - out_2270168032272230264[184] = 0; - out_2270168032272230264[185] = 0; - out_2270168032272230264[186] = 0; - out_2270168032272230264[187] = 0; - out_2270168032272230264[188] = 0; - out_2270168032272230264[189] = 0; - out_2270168032272230264[190] = 0; - out_2270168032272230264[191] = 0; - out_2270168032272230264[192] = 0; - out_2270168032272230264[193] = 0; - out_2270168032272230264[194] = 0; - out_2270168032272230264[195] = 0; - out_2270168032272230264[196] = 0; - out_2270168032272230264[197] = 1.0; - out_2270168032272230264[198] = 0; - out_2270168032272230264[199] = 0; - out_2270168032272230264[200] = 0; - out_2270168032272230264[201] = 0; - out_2270168032272230264[202] = 0; - out_2270168032272230264[203] = 0; - out_2270168032272230264[204] = 0; - out_2270168032272230264[205] = 0; - out_2270168032272230264[206] = 0; - out_2270168032272230264[207] = 0; - out_2270168032272230264[208] = 0; - out_2270168032272230264[209] = 0; - out_2270168032272230264[210] = 0; - out_2270168032272230264[211] = 0; - out_2270168032272230264[212] = 0; - out_2270168032272230264[213] = 0; - out_2270168032272230264[214] = 0; - out_2270168032272230264[215] = 0; - out_2270168032272230264[216] = 0; - out_2270168032272230264[217] = 0; - out_2270168032272230264[218] = 0; - out_2270168032272230264[219] = 1.0; - out_2270168032272230264[220] = 0; - out_2270168032272230264[221] = 0; - out_2270168032272230264[222] = 0; - out_2270168032272230264[223] = 0; - out_2270168032272230264[224] = 0; - out_2270168032272230264[225] = 0; - out_2270168032272230264[226] = 0; - out_2270168032272230264[227] = 0; - out_2270168032272230264[228] = 0; - out_2270168032272230264[229] = 0; - out_2270168032272230264[230] = 0; - out_2270168032272230264[231] = 0; - out_2270168032272230264[232] = 0; - out_2270168032272230264[233] = 0; - out_2270168032272230264[234] = 0; - out_2270168032272230264[235] = 0; - out_2270168032272230264[236] = 0; - out_2270168032272230264[237] = 0; - out_2270168032272230264[238] = 0; - out_2270168032272230264[239] = 0; - out_2270168032272230264[240] = 0; - out_2270168032272230264[241] = 1.0; - out_2270168032272230264[242] = 0; - out_2270168032272230264[243] = 0; - out_2270168032272230264[244] = 0; - out_2270168032272230264[245] = 0; - out_2270168032272230264[246] = 0; - out_2270168032272230264[247] = 0; - out_2270168032272230264[248] = 0; - out_2270168032272230264[249] = 0; - out_2270168032272230264[250] = 0; - out_2270168032272230264[251] = 0; - out_2270168032272230264[252] = 0; - out_2270168032272230264[253] = 0; - out_2270168032272230264[254] = 0; - out_2270168032272230264[255] = 0; - out_2270168032272230264[256] = 0; - out_2270168032272230264[257] = 0; - out_2270168032272230264[258] = 0; - out_2270168032272230264[259] = 0; - out_2270168032272230264[260] = 0; - out_2270168032272230264[261] = 0; - out_2270168032272230264[262] = 0; - out_2270168032272230264[263] = 1.0; - out_2270168032272230264[264] = 0; - out_2270168032272230264[265] = 0; - out_2270168032272230264[266] = 0; - out_2270168032272230264[267] = 0; - out_2270168032272230264[268] = 0; - out_2270168032272230264[269] = 0; - out_2270168032272230264[270] = 0; - out_2270168032272230264[271] = 0; - out_2270168032272230264[272] = 0; - out_2270168032272230264[273] = 0; - out_2270168032272230264[274] = 0; - out_2270168032272230264[275] = 0; - out_2270168032272230264[276] = 0; - out_2270168032272230264[277] = 0; - out_2270168032272230264[278] = 0; - out_2270168032272230264[279] = 0; - out_2270168032272230264[280] = 0; - out_2270168032272230264[281] = 0; - out_2270168032272230264[282] = 0; - out_2270168032272230264[283] = 0; - out_2270168032272230264[284] = 0; - out_2270168032272230264[285] = 1.0; - out_2270168032272230264[286] = 0; - out_2270168032272230264[287] = 0; - out_2270168032272230264[288] = 0; - out_2270168032272230264[289] = 0; - out_2270168032272230264[290] = 0; - out_2270168032272230264[291] = 0; - out_2270168032272230264[292] = 0; - out_2270168032272230264[293] = 0; - out_2270168032272230264[294] = 0; - out_2270168032272230264[295] = 0; - out_2270168032272230264[296] = 0; - out_2270168032272230264[297] = 0; - out_2270168032272230264[298] = 0; - out_2270168032272230264[299] = 0; - out_2270168032272230264[300] = 0; - out_2270168032272230264[301] = 0; - out_2270168032272230264[302] = 0; - out_2270168032272230264[303] = 0; - out_2270168032272230264[304] = 0; - out_2270168032272230264[305] = 0; - out_2270168032272230264[306] = 0; - out_2270168032272230264[307] = 1.0; - out_2270168032272230264[308] = 0; - out_2270168032272230264[309] = 0; - out_2270168032272230264[310] = 0; - out_2270168032272230264[311] = 0; - out_2270168032272230264[312] = 0; - out_2270168032272230264[313] = 0; - out_2270168032272230264[314] = 0; - out_2270168032272230264[315] = 0; - out_2270168032272230264[316] = 0; - out_2270168032272230264[317] = 0; - out_2270168032272230264[318] = 0; - out_2270168032272230264[319] = 0; - out_2270168032272230264[320] = 0; - out_2270168032272230264[321] = 0; - out_2270168032272230264[322] = 0; - out_2270168032272230264[323] = 0; - out_2270168032272230264[324] = 0; - out_2270168032272230264[325] = 0; - out_2270168032272230264[326] = 0; - out_2270168032272230264[327] = 0; - out_2270168032272230264[328] = 0; - out_2270168032272230264[329] = 1.0; - out_2270168032272230264[330] = 0; - out_2270168032272230264[331] = 0; - out_2270168032272230264[332] = 0; - out_2270168032272230264[333] = 0; - out_2270168032272230264[334] = 0; - out_2270168032272230264[335] = 0; - out_2270168032272230264[336] = 0; - out_2270168032272230264[337] = 0; - out_2270168032272230264[338] = 0; - out_2270168032272230264[339] = 0; - out_2270168032272230264[340] = 0; - out_2270168032272230264[341] = 0; - out_2270168032272230264[342] = 0; - out_2270168032272230264[343] = 0; - out_2270168032272230264[344] = 0; - out_2270168032272230264[345] = 0; - out_2270168032272230264[346] = 0; - out_2270168032272230264[347] = 0; - out_2270168032272230264[348] = 0; - out_2270168032272230264[349] = 0; - out_2270168032272230264[350] = 0; - out_2270168032272230264[351] = 1.0; - out_2270168032272230264[352] = 0; - out_2270168032272230264[353] = 0; - out_2270168032272230264[354] = 0; - out_2270168032272230264[355] = 0; - out_2270168032272230264[356] = 0; - out_2270168032272230264[357] = 0; - out_2270168032272230264[358] = 0; - out_2270168032272230264[359] = 0; - out_2270168032272230264[360] = 0; - out_2270168032272230264[361] = 0; - out_2270168032272230264[362] = 0; - out_2270168032272230264[363] = 0; - out_2270168032272230264[364] = 0; - out_2270168032272230264[365] = 0; - out_2270168032272230264[366] = 0; - out_2270168032272230264[367] = 0; - out_2270168032272230264[368] = 0; - out_2270168032272230264[369] = 0; - out_2270168032272230264[370] = 0; - out_2270168032272230264[371] = 0; - out_2270168032272230264[372] = 0; - out_2270168032272230264[373] = 1.0; - out_2270168032272230264[374] = 0; - out_2270168032272230264[375] = 0; - out_2270168032272230264[376] = 0; - out_2270168032272230264[377] = 0; - out_2270168032272230264[378] = 0; - out_2270168032272230264[379] = 0; - out_2270168032272230264[380] = 0; - out_2270168032272230264[381] = 0; - out_2270168032272230264[382] = 0; - out_2270168032272230264[383] = 0; - out_2270168032272230264[384] = 0; - out_2270168032272230264[385] = 0; - out_2270168032272230264[386] = 0; - out_2270168032272230264[387] = 0; - out_2270168032272230264[388] = 0; - out_2270168032272230264[389] = 0; - out_2270168032272230264[390] = 0; - out_2270168032272230264[391] = 0; - out_2270168032272230264[392] = 0; - out_2270168032272230264[393] = 0; - out_2270168032272230264[394] = 0; - out_2270168032272230264[395] = 1.0; - out_2270168032272230264[396] = 0; - out_2270168032272230264[397] = 0; - out_2270168032272230264[398] = 0; - out_2270168032272230264[399] = 0; - out_2270168032272230264[400] = 0; - out_2270168032272230264[401] = 0; - out_2270168032272230264[402] = 0; - out_2270168032272230264[403] = 0; - out_2270168032272230264[404] = 0; - out_2270168032272230264[405] = 0; - out_2270168032272230264[406] = 0; - out_2270168032272230264[407] = 0; - out_2270168032272230264[408] = 0; - out_2270168032272230264[409] = 0; - out_2270168032272230264[410] = 0; - out_2270168032272230264[411] = 0; - out_2270168032272230264[412] = 0; - out_2270168032272230264[413] = 0; - out_2270168032272230264[414] = 0; - out_2270168032272230264[415] = 0; - out_2270168032272230264[416] = 0; - out_2270168032272230264[417] = 1.0; - out_2270168032272230264[418] = 0; - out_2270168032272230264[419] = 0; - out_2270168032272230264[420] = 0; - out_2270168032272230264[421] = 0; - out_2270168032272230264[422] = 0; - out_2270168032272230264[423] = 0; - out_2270168032272230264[424] = 0; - out_2270168032272230264[425] = 0; - out_2270168032272230264[426] = 0; - out_2270168032272230264[427] = 0; - out_2270168032272230264[428] = 0; - out_2270168032272230264[429] = 0; - out_2270168032272230264[430] = 0; - out_2270168032272230264[431] = 0; - out_2270168032272230264[432] = 0; - out_2270168032272230264[433] = 0; - out_2270168032272230264[434] = 0; - out_2270168032272230264[435] = 0; - out_2270168032272230264[436] = 0; - out_2270168032272230264[437] = 0; - out_2270168032272230264[438] = 0; - out_2270168032272230264[439] = 1.0; - out_2270168032272230264[440] = 0; - out_2270168032272230264[441] = 0; - out_2270168032272230264[442] = 0; - out_2270168032272230264[443] = 0; - out_2270168032272230264[444] = 0; - out_2270168032272230264[445] = 0; - out_2270168032272230264[446] = 0; - out_2270168032272230264[447] = 0; - out_2270168032272230264[448] = 0; - out_2270168032272230264[449] = 0; - out_2270168032272230264[450] = 0; - out_2270168032272230264[451] = 0; - out_2270168032272230264[452] = 0; - out_2270168032272230264[453] = 0; - out_2270168032272230264[454] = 0; - out_2270168032272230264[455] = 0; - out_2270168032272230264[456] = 0; - out_2270168032272230264[457] = 0; - out_2270168032272230264[458] = 0; - out_2270168032272230264[459] = 0; - out_2270168032272230264[460] = 0; - out_2270168032272230264[461] = 1.0; +void H_mod_fun(double *state, double *out_4990766548554672415) { + out_4990766548554672415[0] = 1.0; + out_4990766548554672415[1] = 0; + out_4990766548554672415[2] = 0; + out_4990766548554672415[3] = 0; + out_4990766548554672415[4] = 0; + out_4990766548554672415[5] = 0; + out_4990766548554672415[6] = 0; + out_4990766548554672415[7] = 0; + out_4990766548554672415[8] = 0; + out_4990766548554672415[9] = 0; + out_4990766548554672415[10] = 0; + out_4990766548554672415[11] = 0; + out_4990766548554672415[12] = 0; + out_4990766548554672415[13] = 0; + out_4990766548554672415[14] = 0; + out_4990766548554672415[15] = 0; + out_4990766548554672415[16] = 0; + out_4990766548554672415[17] = 0; + out_4990766548554672415[18] = 0; + out_4990766548554672415[19] = 0; + out_4990766548554672415[20] = 0; + out_4990766548554672415[21] = 0; + out_4990766548554672415[22] = 1.0; + out_4990766548554672415[23] = 0; + out_4990766548554672415[24] = 0; + out_4990766548554672415[25] = 0; + out_4990766548554672415[26] = 0; + out_4990766548554672415[27] = 0; + out_4990766548554672415[28] = 0; + out_4990766548554672415[29] = 0; + out_4990766548554672415[30] = 0; + out_4990766548554672415[31] = 0; + out_4990766548554672415[32] = 0; + out_4990766548554672415[33] = 0; + out_4990766548554672415[34] = 0; + out_4990766548554672415[35] = 0; + out_4990766548554672415[36] = 0; + out_4990766548554672415[37] = 0; + out_4990766548554672415[38] = 0; + out_4990766548554672415[39] = 0; + out_4990766548554672415[40] = 0; + out_4990766548554672415[41] = 0; + out_4990766548554672415[42] = 0; + out_4990766548554672415[43] = 0; + out_4990766548554672415[44] = 1.0; + out_4990766548554672415[45] = 0; + out_4990766548554672415[46] = 0; + out_4990766548554672415[47] = 0; + out_4990766548554672415[48] = 0; + out_4990766548554672415[49] = 0; + out_4990766548554672415[50] = 0; + out_4990766548554672415[51] = 0; + out_4990766548554672415[52] = 0; + out_4990766548554672415[53] = 0; + out_4990766548554672415[54] = 0; + out_4990766548554672415[55] = 0; + out_4990766548554672415[56] = 0; + out_4990766548554672415[57] = 0; + out_4990766548554672415[58] = 0; + out_4990766548554672415[59] = 0; + out_4990766548554672415[60] = 0; + out_4990766548554672415[61] = 0; + out_4990766548554672415[62] = 0; + out_4990766548554672415[63] = 0; + out_4990766548554672415[64] = 0; + out_4990766548554672415[65] = 0; + out_4990766548554672415[66] = -0.5*state[4]; + out_4990766548554672415[67] = -0.5*state[5]; + out_4990766548554672415[68] = -0.5*state[6]; + out_4990766548554672415[69] = 0; + out_4990766548554672415[70] = 0; + out_4990766548554672415[71] = 0; + out_4990766548554672415[72] = 0; + out_4990766548554672415[73] = 0; + out_4990766548554672415[74] = 0; + out_4990766548554672415[75] = 0; + out_4990766548554672415[76] = 0; + out_4990766548554672415[77] = 0; + out_4990766548554672415[78] = 0; + out_4990766548554672415[79] = 0; + out_4990766548554672415[80] = 0; + out_4990766548554672415[81] = 0; + out_4990766548554672415[82] = 0; + out_4990766548554672415[83] = 0; + out_4990766548554672415[84] = 0; + out_4990766548554672415[85] = 0; + out_4990766548554672415[86] = 0; + out_4990766548554672415[87] = 0.5*state[3]; + out_4990766548554672415[88] = 0.5*state[6]; + out_4990766548554672415[89] = -0.5*state[5]; + out_4990766548554672415[90] = 0; + out_4990766548554672415[91] = 0; + out_4990766548554672415[92] = 0; + out_4990766548554672415[93] = 0; + out_4990766548554672415[94] = 0; + out_4990766548554672415[95] = 0; + out_4990766548554672415[96] = 0; + out_4990766548554672415[97] = 0; + out_4990766548554672415[98] = 0; + out_4990766548554672415[99] = 0; + out_4990766548554672415[100] = 0; + out_4990766548554672415[101] = 0; + out_4990766548554672415[102] = 0; + out_4990766548554672415[103] = 0; + out_4990766548554672415[104] = 0; + out_4990766548554672415[105] = 0; + out_4990766548554672415[106] = 0; + out_4990766548554672415[107] = 0; + out_4990766548554672415[108] = -0.5*state[6]; + out_4990766548554672415[109] = 0.5*state[3]; + out_4990766548554672415[110] = 0.5*state[4]; + out_4990766548554672415[111] = 0; + out_4990766548554672415[112] = 0; + out_4990766548554672415[113] = 0; + out_4990766548554672415[114] = 0; + out_4990766548554672415[115] = 0; + out_4990766548554672415[116] = 0; + out_4990766548554672415[117] = 0; + out_4990766548554672415[118] = 0; + out_4990766548554672415[119] = 0; + out_4990766548554672415[120] = 0; + out_4990766548554672415[121] = 0; + out_4990766548554672415[122] = 0; + out_4990766548554672415[123] = 0; + out_4990766548554672415[124] = 0; + out_4990766548554672415[125] = 0; + out_4990766548554672415[126] = 0; + out_4990766548554672415[127] = 0; + out_4990766548554672415[128] = 0; + out_4990766548554672415[129] = 0.5*state[5]; + out_4990766548554672415[130] = -0.5*state[4]; + out_4990766548554672415[131] = 0.5*state[3]; + out_4990766548554672415[132] = 0; + out_4990766548554672415[133] = 0; + out_4990766548554672415[134] = 0; + out_4990766548554672415[135] = 0; + out_4990766548554672415[136] = 0; + out_4990766548554672415[137] = 0; + out_4990766548554672415[138] = 0; + out_4990766548554672415[139] = 0; + out_4990766548554672415[140] = 0; + out_4990766548554672415[141] = 0; + out_4990766548554672415[142] = 0; + out_4990766548554672415[143] = 0; + out_4990766548554672415[144] = 0; + out_4990766548554672415[145] = 0; + out_4990766548554672415[146] = 0; + out_4990766548554672415[147] = 0; + out_4990766548554672415[148] = 0; + out_4990766548554672415[149] = 0; + out_4990766548554672415[150] = 0; + out_4990766548554672415[151] = 0; + out_4990766548554672415[152] = 0; + out_4990766548554672415[153] = 1.0; + out_4990766548554672415[154] = 0; + out_4990766548554672415[155] = 0; + out_4990766548554672415[156] = 0; + out_4990766548554672415[157] = 0; + out_4990766548554672415[158] = 0; + out_4990766548554672415[159] = 0; + out_4990766548554672415[160] = 0; + out_4990766548554672415[161] = 0; + out_4990766548554672415[162] = 0; + out_4990766548554672415[163] = 0; + out_4990766548554672415[164] = 0; + out_4990766548554672415[165] = 0; + out_4990766548554672415[166] = 0; + out_4990766548554672415[167] = 0; + out_4990766548554672415[168] = 0; + out_4990766548554672415[169] = 0; + out_4990766548554672415[170] = 0; + out_4990766548554672415[171] = 0; + out_4990766548554672415[172] = 0; + out_4990766548554672415[173] = 0; + out_4990766548554672415[174] = 0; + out_4990766548554672415[175] = 1.0; + out_4990766548554672415[176] = 0; + out_4990766548554672415[177] = 0; + out_4990766548554672415[178] = 0; + out_4990766548554672415[179] = 0; + out_4990766548554672415[180] = 0; + out_4990766548554672415[181] = 0; + out_4990766548554672415[182] = 0; + out_4990766548554672415[183] = 0; + out_4990766548554672415[184] = 0; + out_4990766548554672415[185] = 0; + out_4990766548554672415[186] = 0; + out_4990766548554672415[187] = 0; + out_4990766548554672415[188] = 0; + out_4990766548554672415[189] = 0; + out_4990766548554672415[190] = 0; + out_4990766548554672415[191] = 0; + out_4990766548554672415[192] = 0; + out_4990766548554672415[193] = 0; + out_4990766548554672415[194] = 0; + out_4990766548554672415[195] = 0; + out_4990766548554672415[196] = 0; + out_4990766548554672415[197] = 1.0; + out_4990766548554672415[198] = 0; + out_4990766548554672415[199] = 0; + out_4990766548554672415[200] = 0; + out_4990766548554672415[201] = 0; + out_4990766548554672415[202] = 0; + out_4990766548554672415[203] = 0; + out_4990766548554672415[204] = 0; + out_4990766548554672415[205] = 0; + out_4990766548554672415[206] = 0; + out_4990766548554672415[207] = 0; + out_4990766548554672415[208] = 0; + out_4990766548554672415[209] = 0; + out_4990766548554672415[210] = 0; + out_4990766548554672415[211] = 0; + out_4990766548554672415[212] = 0; + out_4990766548554672415[213] = 0; + out_4990766548554672415[214] = 0; + out_4990766548554672415[215] = 0; + out_4990766548554672415[216] = 0; + out_4990766548554672415[217] = 0; + out_4990766548554672415[218] = 0; + out_4990766548554672415[219] = 1.0; + out_4990766548554672415[220] = 0; + out_4990766548554672415[221] = 0; + out_4990766548554672415[222] = 0; + out_4990766548554672415[223] = 0; + out_4990766548554672415[224] = 0; + out_4990766548554672415[225] = 0; + out_4990766548554672415[226] = 0; + out_4990766548554672415[227] = 0; + out_4990766548554672415[228] = 0; + out_4990766548554672415[229] = 0; + out_4990766548554672415[230] = 0; + out_4990766548554672415[231] = 0; + out_4990766548554672415[232] = 0; + out_4990766548554672415[233] = 0; + out_4990766548554672415[234] = 0; + out_4990766548554672415[235] = 0; + out_4990766548554672415[236] = 0; + out_4990766548554672415[237] = 0; + out_4990766548554672415[238] = 0; + out_4990766548554672415[239] = 0; + out_4990766548554672415[240] = 0; + out_4990766548554672415[241] = 1.0; + out_4990766548554672415[242] = 0; + out_4990766548554672415[243] = 0; + out_4990766548554672415[244] = 0; + out_4990766548554672415[245] = 0; + out_4990766548554672415[246] = 0; + out_4990766548554672415[247] = 0; + out_4990766548554672415[248] = 0; + out_4990766548554672415[249] = 0; + out_4990766548554672415[250] = 0; + out_4990766548554672415[251] = 0; + out_4990766548554672415[252] = 0; + out_4990766548554672415[253] = 0; + out_4990766548554672415[254] = 0; + out_4990766548554672415[255] = 0; + out_4990766548554672415[256] = 0; + out_4990766548554672415[257] = 0; + out_4990766548554672415[258] = 0; + out_4990766548554672415[259] = 0; + out_4990766548554672415[260] = 0; + out_4990766548554672415[261] = 0; + out_4990766548554672415[262] = 0; + out_4990766548554672415[263] = 1.0; + out_4990766548554672415[264] = 0; + out_4990766548554672415[265] = 0; + out_4990766548554672415[266] = 0; + out_4990766548554672415[267] = 0; + out_4990766548554672415[268] = 0; + out_4990766548554672415[269] = 0; + out_4990766548554672415[270] = 0; + out_4990766548554672415[271] = 0; + out_4990766548554672415[272] = 0; + out_4990766548554672415[273] = 0; + out_4990766548554672415[274] = 0; + out_4990766548554672415[275] = 0; + out_4990766548554672415[276] = 0; + out_4990766548554672415[277] = 0; + out_4990766548554672415[278] = 0; + out_4990766548554672415[279] = 0; + out_4990766548554672415[280] = 0; + out_4990766548554672415[281] = 0; + out_4990766548554672415[282] = 0; + out_4990766548554672415[283] = 0; + out_4990766548554672415[284] = 0; + out_4990766548554672415[285] = 1.0; + out_4990766548554672415[286] = 0; + out_4990766548554672415[287] = 0; + out_4990766548554672415[288] = 0; + out_4990766548554672415[289] = 0; + out_4990766548554672415[290] = 0; + out_4990766548554672415[291] = 0; + out_4990766548554672415[292] = 0; + out_4990766548554672415[293] = 0; + out_4990766548554672415[294] = 0; + out_4990766548554672415[295] = 0; + out_4990766548554672415[296] = 0; + out_4990766548554672415[297] = 0; + out_4990766548554672415[298] = 0; + out_4990766548554672415[299] = 0; + out_4990766548554672415[300] = 0; + out_4990766548554672415[301] = 0; + out_4990766548554672415[302] = 0; + out_4990766548554672415[303] = 0; + out_4990766548554672415[304] = 0; + out_4990766548554672415[305] = 0; + out_4990766548554672415[306] = 0; + out_4990766548554672415[307] = 1.0; + out_4990766548554672415[308] = 0; + out_4990766548554672415[309] = 0; + out_4990766548554672415[310] = 0; + out_4990766548554672415[311] = 0; + out_4990766548554672415[312] = 0; + out_4990766548554672415[313] = 0; + out_4990766548554672415[314] = 0; + out_4990766548554672415[315] = 0; + out_4990766548554672415[316] = 0; + out_4990766548554672415[317] = 0; + out_4990766548554672415[318] = 0; + out_4990766548554672415[319] = 0; + out_4990766548554672415[320] = 0; + out_4990766548554672415[321] = 0; + out_4990766548554672415[322] = 0; + out_4990766548554672415[323] = 0; + out_4990766548554672415[324] = 0; + out_4990766548554672415[325] = 0; + out_4990766548554672415[326] = 0; + out_4990766548554672415[327] = 0; + out_4990766548554672415[328] = 0; + out_4990766548554672415[329] = 1.0; + out_4990766548554672415[330] = 0; + out_4990766548554672415[331] = 0; + out_4990766548554672415[332] = 0; + out_4990766548554672415[333] = 0; + out_4990766548554672415[334] = 0; + out_4990766548554672415[335] = 0; + out_4990766548554672415[336] = 0; + out_4990766548554672415[337] = 0; + out_4990766548554672415[338] = 0; + out_4990766548554672415[339] = 0; + out_4990766548554672415[340] = 0; + out_4990766548554672415[341] = 0; + out_4990766548554672415[342] = 0; + out_4990766548554672415[343] = 0; + out_4990766548554672415[344] = 0; + out_4990766548554672415[345] = 0; + out_4990766548554672415[346] = 0; + out_4990766548554672415[347] = 0; + out_4990766548554672415[348] = 0; + out_4990766548554672415[349] = 0; + out_4990766548554672415[350] = 0; + out_4990766548554672415[351] = 1.0; + out_4990766548554672415[352] = 0; + out_4990766548554672415[353] = 0; + out_4990766548554672415[354] = 0; + out_4990766548554672415[355] = 0; + out_4990766548554672415[356] = 0; + out_4990766548554672415[357] = 0; + out_4990766548554672415[358] = 0; + out_4990766548554672415[359] = 0; + out_4990766548554672415[360] = 0; + out_4990766548554672415[361] = 0; + out_4990766548554672415[362] = 0; + out_4990766548554672415[363] = 0; + out_4990766548554672415[364] = 0; + out_4990766548554672415[365] = 0; + out_4990766548554672415[366] = 0; + out_4990766548554672415[367] = 0; + out_4990766548554672415[368] = 0; + out_4990766548554672415[369] = 0; + out_4990766548554672415[370] = 0; + out_4990766548554672415[371] = 0; + out_4990766548554672415[372] = 0; + out_4990766548554672415[373] = 1.0; + out_4990766548554672415[374] = 0; + out_4990766548554672415[375] = 0; + out_4990766548554672415[376] = 0; + out_4990766548554672415[377] = 0; + out_4990766548554672415[378] = 0; + out_4990766548554672415[379] = 0; + out_4990766548554672415[380] = 0; + out_4990766548554672415[381] = 0; + out_4990766548554672415[382] = 0; + out_4990766548554672415[383] = 0; + out_4990766548554672415[384] = 0; + out_4990766548554672415[385] = 0; + out_4990766548554672415[386] = 0; + out_4990766548554672415[387] = 0; + out_4990766548554672415[388] = 0; + out_4990766548554672415[389] = 0; + out_4990766548554672415[390] = 0; + out_4990766548554672415[391] = 0; + out_4990766548554672415[392] = 0; + out_4990766548554672415[393] = 0; + out_4990766548554672415[394] = 0; + out_4990766548554672415[395] = 1.0; + out_4990766548554672415[396] = 0; + out_4990766548554672415[397] = 0; + out_4990766548554672415[398] = 0; + out_4990766548554672415[399] = 0; + out_4990766548554672415[400] = 0; + out_4990766548554672415[401] = 0; + out_4990766548554672415[402] = 0; + out_4990766548554672415[403] = 0; + out_4990766548554672415[404] = 0; + out_4990766548554672415[405] = 0; + out_4990766548554672415[406] = 0; + out_4990766548554672415[407] = 0; + out_4990766548554672415[408] = 0; + out_4990766548554672415[409] = 0; + out_4990766548554672415[410] = 0; + out_4990766548554672415[411] = 0; + out_4990766548554672415[412] = 0; + out_4990766548554672415[413] = 0; + out_4990766548554672415[414] = 0; + out_4990766548554672415[415] = 0; + out_4990766548554672415[416] = 0; + out_4990766548554672415[417] = 1.0; + out_4990766548554672415[418] = 0; + out_4990766548554672415[419] = 0; + out_4990766548554672415[420] = 0; + out_4990766548554672415[421] = 0; + out_4990766548554672415[422] = 0; + out_4990766548554672415[423] = 0; + out_4990766548554672415[424] = 0; + out_4990766548554672415[425] = 0; + out_4990766548554672415[426] = 0; + out_4990766548554672415[427] = 0; + out_4990766548554672415[428] = 0; + out_4990766548554672415[429] = 0; + out_4990766548554672415[430] = 0; + out_4990766548554672415[431] = 0; + out_4990766548554672415[432] = 0; + out_4990766548554672415[433] = 0; + out_4990766548554672415[434] = 0; + out_4990766548554672415[435] = 0; + out_4990766548554672415[436] = 0; + out_4990766548554672415[437] = 0; + out_4990766548554672415[438] = 0; + out_4990766548554672415[439] = 1.0; + out_4990766548554672415[440] = 0; + out_4990766548554672415[441] = 0; + out_4990766548554672415[442] = 0; + out_4990766548554672415[443] = 0; + out_4990766548554672415[444] = 0; + out_4990766548554672415[445] = 0; + out_4990766548554672415[446] = 0; + out_4990766548554672415[447] = 0; + out_4990766548554672415[448] = 0; + out_4990766548554672415[449] = 0; + out_4990766548554672415[450] = 0; + out_4990766548554672415[451] = 0; + out_4990766548554672415[452] = 0; + out_4990766548554672415[453] = 0; + out_4990766548554672415[454] = 0; + out_4990766548554672415[455] = 0; + out_4990766548554672415[456] = 0; + out_4990766548554672415[457] = 0; + out_4990766548554672415[458] = 0; + out_4990766548554672415[459] = 0; + out_4990766548554672415[460] = 0; + out_4990766548554672415[461] = 1.0; } -void f_fun(double *state, double dt, double *out_9047640957774126431) { - out_9047640957774126431[0] = dt*state[7] + state[0]; - out_9047640957774126431[1] = dt*state[8] + state[1]; - out_9047640957774126431[2] = dt*state[9] + state[2]; - out_9047640957774126431[3] = dt*(-0.5*state[4]*state[10] - 0.5*state[5]*state[11] - 0.5*state[6]*state[12]) + state[3]; - out_9047640957774126431[4] = dt*(0.5*state[3]*state[10] + 0.5*state[5]*state[12] - 0.5*state[6]*state[11]) + state[4]; - out_9047640957774126431[5] = dt*(0.5*state[3]*state[11] - 0.5*state[4]*state[12] + 0.5*state[6]*state[10]) + state[5]; - out_9047640957774126431[6] = dt*(0.5*state[3]*state[12] + 0.5*state[4]*state[11] - 0.5*state[5]*state[10]) + state[6]; - out_9047640957774126431[7] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]) + state[7]; - out_9047640957774126431[8] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]) + state[8]; - out_9047640957774126431[9] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]) + state[9]; - out_9047640957774126431[10] = state[10]; - out_9047640957774126431[11] = state[11]; - out_9047640957774126431[12] = state[12]; - out_9047640957774126431[13] = state[13]; - out_9047640957774126431[14] = state[14]; - out_9047640957774126431[15] = state[15]; - out_9047640957774126431[16] = state[16]; - out_9047640957774126431[17] = state[17]; - out_9047640957774126431[18] = state[18]; - out_9047640957774126431[19] = state[19]; - out_9047640957774126431[20] = state[20]; - out_9047640957774126431[21] = state[21]; +void f_fun(double *state, double dt, double *out_3056772812413117361) { + out_3056772812413117361[0] = dt*state[7] + state[0]; + out_3056772812413117361[1] = dt*state[8] + state[1]; + out_3056772812413117361[2] = dt*state[9] + state[2]; + out_3056772812413117361[3] = dt*(-0.5*state[4]*state[10] - 0.5*state[5]*state[11] - 0.5*state[6]*state[12]) + state[3]; + out_3056772812413117361[4] = dt*(0.5*state[3]*state[10] + 0.5*state[5]*state[12] - 0.5*state[6]*state[11]) + state[4]; + out_3056772812413117361[5] = dt*(0.5*state[3]*state[11] - 0.5*state[4]*state[12] + 0.5*state[6]*state[10]) + state[5]; + out_3056772812413117361[6] = dt*(0.5*state[3]*state[12] + 0.5*state[4]*state[11] - 0.5*state[5]*state[10]) + state[6]; + out_3056772812413117361[7] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]) + state[7]; + out_3056772812413117361[8] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]) + state[8]; + out_3056772812413117361[9] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]) + state[9]; + out_3056772812413117361[10] = state[10]; + out_3056772812413117361[11] = state[11]; + out_3056772812413117361[12] = state[12]; + out_3056772812413117361[13] = state[13]; + out_3056772812413117361[14] = state[14]; + out_3056772812413117361[15] = state[15]; + out_3056772812413117361[16] = state[16]; + out_3056772812413117361[17] = state[17]; + out_3056772812413117361[18] = state[18]; + out_3056772812413117361[19] = state[19]; + out_3056772812413117361[20] = state[20]; + out_3056772812413117361[21] = state[21]; } -void F_fun(double *state, double dt, double *out_4752414459068816126) { - out_4752414459068816126[0] = 1; - out_4752414459068816126[1] = 0; - out_4752414459068816126[2] = 0; - out_4752414459068816126[3] = 0; - out_4752414459068816126[4] = 0; - out_4752414459068816126[5] = 0; - out_4752414459068816126[6] = dt; - out_4752414459068816126[7] = 0; - out_4752414459068816126[8] = 0; - out_4752414459068816126[9] = 0; - out_4752414459068816126[10] = 0; - out_4752414459068816126[11] = 0; - out_4752414459068816126[12] = 0; - out_4752414459068816126[13] = 0; - out_4752414459068816126[14] = 0; - out_4752414459068816126[15] = 0; - out_4752414459068816126[16] = 0; - out_4752414459068816126[17] = 0; - out_4752414459068816126[18] = 0; - out_4752414459068816126[19] = 0; - out_4752414459068816126[20] = 0; - out_4752414459068816126[21] = 0; - out_4752414459068816126[22] = 1; - out_4752414459068816126[23] = 0; - out_4752414459068816126[24] = 0; - out_4752414459068816126[25] = 0; - out_4752414459068816126[26] = 0; - out_4752414459068816126[27] = 0; - out_4752414459068816126[28] = dt; - out_4752414459068816126[29] = 0; - out_4752414459068816126[30] = 0; - out_4752414459068816126[31] = 0; - out_4752414459068816126[32] = 0; - out_4752414459068816126[33] = 0; - out_4752414459068816126[34] = 0; - out_4752414459068816126[35] = 0; - out_4752414459068816126[36] = 0; - out_4752414459068816126[37] = 0; - out_4752414459068816126[38] = 0; - out_4752414459068816126[39] = 0; - out_4752414459068816126[40] = 0; - out_4752414459068816126[41] = 0; - out_4752414459068816126[42] = 0; - out_4752414459068816126[43] = 0; - out_4752414459068816126[44] = 1; - out_4752414459068816126[45] = 0; - out_4752414459068816126[46] = 0; - out_4752414459068816126[47] = 0; - out_4752414459068816126[48] = 0; - out_4752414459068816126[49] = 0; - out_4752414459068816126[50] = dt; - out_4752414459068816126[51] = 0; - out_4752414459068816126[52] = 0; - out_4752414459068816126[53] = 0; - out_4752414459068816126[54] = 0; - out_4752414459068816126[55] = 0; - out_4752414459068816126[56] = 0; - out_4752414459068816126[57] = 0; - out_4752414459068816126[58] = 0; - out_4752414459068816126[59] = 0; - out_4752414459068816126[60] = 0; - out_4752414459068816126[61] = 0; - out_4752414459068816126[62] = 0; - out_4752414459068816126[63] = 0; - out_4752414459068816126[64] = 0; - out_4752414459068816126[65] = 0; - out_4752414459068816126[66] = 1; - out_4752414459068816126[67] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[11] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]); - out_4752414459068816126[68] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[12] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[10] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[11]); - out_4752414459068816126[69] = 0; - out_4752414459068816126[70] = 0; - out_4752414459068816126[71] = 0; - out_4752414459068816126[72] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2)); - out_4752414459068816126[73] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]); - out_4752414459068816126[74] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]); - out_4752414459068816126[75] = 0; - out_4752414459068816126[76] = 0; - out_4752414459068816126[77] = 0; - out_4752414459068816126[78] = 0; - out_4752414459068816126[79] = 0; - out_4752414459068816126[80] = 0; - out_4752414459068816126[81] = 0; - out_4752414459068816126[82] = 0; - out_4752414459068816126[83] = 0; - out_4752414459068816126[84] = 0; - out_4752414459068816126[85] = 0; - out_4752414459068816126[86] = 0; - out_4752414459068816126[87] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[11] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]); - out_4752414459068816126[88] = 1; - out_4752414459068816126[89] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[12] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[11] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[10]); - out_4752414459068816126[90] = 0; - out_4752414459068816126[91] = 0; - out_4752414459068816126[92] = 0; - out_4752414459068816126[93] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]); - out_4752414459068816126[94] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2)); - out_4752414459068816126[95] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]); - out_4752414459068816126[96] = 0; - out_4752414459068816126[97] = 0; - out_4752414459068816126[98] = 0; - out_4752414459068816126[99] = 0; - out_4752414459068816126[100] = 0; - out_4752414459068816126[101] = 0; - out_4752414459068816126[102] = 0; - out_4752414459068816126[103] = 0; - out_4752414459068816126[104] = 0; - out_4752414459068816126[105] = 0; - out_4752414459068816126[106] = 0; - out_4752414459068816126[107] = 0; - out_4752414459068816126[108] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[12] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[10] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[11]); - out_4752414459068816126[109] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[12] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[11] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[10]); - out_4752414459068816126[110] = 1; - out_4752414459068816126[111] = 0; - out_4752414459068816126[112] = 0; - out_4752414459068816126[113] = 0; - out_4752414459068816126[114] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]); - out_4752414459068816126[115] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]); - out_4752414459068816126[116] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2)); - out_4752414459068816126[117] = 0; - out_4752414459068816126[118] = 0; - out_4752414459068816126[119] = 0; - out_4752414459068816126[120] = 0; - out_4752414459068816126[121] = 0; - out_4752414459068816126[122] = 0; - out_4752414459068816126[123] = 0; - out_4752414459068816126[124] = 0; - out_4752414459068816126[125] = 0; - out_4752414459068816126[126] = 0; - out_4752414459068816126[127] = 0; - out_4752414459068816126[128] = 0; - out_4752414459068816126[129] = 0; - out_4752414459068816126[130] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]); - out_4752414459068816126[131] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[18] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[16] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[17]); - out_4752414459068816126[132] = 1; - out_4752414459068816126[133] = 0; - out_4752414459068816126[134] = 0; - out_4752414459068816126[135] = 0; - out_4752414459068816126[136] = 0; - out_4752414459068816126[137] = 0; - out_4752414459068816126[138] = 0; - out_4752414459068816126[139] = 0; - out_4752414459068816126[140] = 0; - out_4752414459068816126[141] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2)); - out_4752414459068816126[142] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]); - out_4752414459068816126[143] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]); - out_4752414459068816126[144] = 0; - out_4752414459068816126[145] = 0; - out_4752414459068816126[146] = 0; - out_4752414459068816126[147] = 0; - out_4752414459068816126[148] = 0; - out_4752414459068816126[149] = 0; - out_4752414459068816126[150] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[17] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]); - out_4752414459068816126[151] = 0; - out_4752414459068816126[152] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]); - out_4752414459068816126[153] = 0; - out_4752414459068816126[154] = 1; - out_4752414459068816126[155] = 0; - out_4752414459068816126[156] = 0; - out_4752414459068816126[157] = 0; - out_4752414459068816126[158] = 0; - out_4752414459068816126[159] = 0; - out_4752414459068816126[160] = 0; - out_4752414459068816126[161] = 0; - out_4752414459068816126[162] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]); - out_4752414459068816126[163] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2)); - out_4752414459068816126[164] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]); - out_4752414459068816126[165] = 0; - out_4752414459068816126[166] = 0; - out_4752414459068816126[167] = 0; - out_4752414459068816126[168] = 0; - out_4752414459068816126[169] = 0; - out_4752414459068816126[170] = 0; - out_4752414459068816126[171] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]); - out_4752414459068816126[172] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[18] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[17] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[16]); - out_4752414459068816126[173] = 0; - out_4752414459068816126[174] = 0; - out_4752414459068816126[175] = 0; - out_4752414459068816126[176] = 1; - out_4752414459068816126[177] = 0; - out_4752414459068816126[178] = 0; - out_4752414459068816126[179] = 0; - out_4752414459068816126[180] = 0; - out_4752414459068816126[181] = 0; - out_4752414459068816126[182] = 0; - out_4752414459068816126[183] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]); - out_4752414459068816126[184] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]); - out_4752414459068816126[185] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2)); - out_4752414459068816126[186] = 0; - out_4752414459068816126[187] = 0; - out_4752414459068816126[188] = 0; - out_4752414459068816126[189] = 0; - out_4752414459068816126[190] = 0; - out_4752414459068816126[191] = 0; - out_4752414459068816126[192] = 0; - out_4752414459068816126[193] = 0; - out_4752414459068816126[194] = 0; - out_4752414459068816126[195] = 0; - out_4752414459068816126[196] = 0; - out_4752414459068816126[197] = 0; - out_4752414459068816126[198] = 1; - out_4752414459068816126[199] = 0; - out_4752414459068816126[200] = 0; - out_4752414459068816126[201] = 0; - out_4752414459068816126[202] = 0; - out_4752414459068816126[203] = 0; - out_4752414459068816126[204] = 0; - out_4752414459068816126[205] = 0; - out_4752414459068816126[206] = 0; - out_4752414459068816126[207] = 0; - out_4752414459068816126[208] = 0; - out_4752414459068816126[209] = 0; - out_4752414459068816126[210] = 0; - out_4752414459068816126[211] = 0; - out_4752414459068816126[212] = 0; - out_4752414459068816126[213] = 0; - out_4752414459068816126[214] = 0; - out_4752414459068816126[215] = 0; - out_4752414459068816126[216] = 0; - out_4752414459068816126[217] = 0; - out_4752414459068816126[218] = 0; - out_4752414459068816126[219] = 0; - out_4752414459068816126[220] = 1; - out_4752414459068816126[221] = 0; - out_4752414459068816126[222] = 0; - out_4752414459068816126[223] = 0; - out_4752414459068816126[224] = 0; - out_4752414459068816126[225] = 0; - out_4752414459068816126[226] = 0; - out_4752414459068816126[227] = 0; - out_4752414459068816126[228] = 0; - out_4752414459068816126[229] = 0; - out_4752414459068816126[230] = 0; - out_4752414459068816126[231] = 0; - out_4752414459068816126[232] = 0; - out_4752414459068816126[233] = 0; - out_4752414459068816126[234] = 0; - out_4752414459068816126[235] = 0; - out_4752414459068816126[236] = 0; - out_4752414459068816126[237] = 0; - out_4752414459068816126[238] = 0; - out_4752414459068816126[239] = 0; - out_4752414459068816126[240] = 0; - out_4752414459068816126[241] = 0; - out_4752414459068816126[242] = 1; - out_4752414459068816126[243] = 0; - out_4752414459068816126[244] = 0; - out_4752414459068816126[245] = 0; - out_4752414459068816126[246] = 0; - out_4752414459068816126[247] = 0; - out_4752414459068816126[248] = 0; - out_4752414459068816126[249] = 0; - out_4752414459068816126[250] = 0; - out_4752414459068816126[251] = 0; - out_4752414459068816126[252] = 0; - out_4752414459068816126[253] = 0; - out_4752414459068816126[254] = 0; - out_4752414459068816126[255] = 0; - out_4752414459068816126[256] = 0; - out_4752414459068816126[257] = 0; - out_4752414459068816126[258] = 0; - out_4752414459068816126[259] = 0; - out_4752414459068816126[260] = 0; - out_4752414459068816126[261] = 0; - out_4752414459068816126[262] = 0; - out_4752414459068816126[263] = 0; - out_4752414459068816126[264] = 1; - out_4752414459068816126[265] = 0; - out_4752414459068816126[266] = 0; - out_4752414459068816126[267] = 0; - out_4752414459068816126[268] = 0; - out_4752414459068816126[269] = 0; - out_4752414459068816126[270] = 0; - out_4752414459068816126[271] = 0; - out_4752414459068816126[272] = 0; - out_4752414459068816126[273] = 0; - out_4752414459068816126[274] = 0; - out_4752414459068816126[275] = 0; - out_4752414459068816126[276] = 0; - out_4752414459068816126[277] = 0; - out_4752414459068816126[278] = 0; - out_4752414459068816126[279] = 0; - out_4752414459068816126[280] = 0; - out_4752414459068816126[281] = 0; - out_4752414459068816126[282] = 0; - out_4752414459068816126[283] = 0; - out_4752414459068816126[284] = 0; - out_4752414459068816126[285] = 0; - out_4752414459068816126[286] = 1; - out_4752414459068816126[287] = 0; - out_4752414459068816126[288] = 0; - out_4752414459068816126[289] = 0; - out_4752414459068816126[290] = 0; - out_4752414459068816126[291] = 0; - out_4752414459068816126[292] = 0; - out_4752414459068816126[293] = 0; - out_4752414459068816126[294] = 0; - out_4752414459068816126[295] = 0; - out_4752414459068816126[296] = 0; - out_4752414459068816126[297] = 0; - out_4752414459068816126[298] = 0; - out_4752414459068816126[299] = 0; - out_4752414459068816126[300] = 0; - out_4752414459068816126[301] = 0; - out_4752414459068816126[302] = 0; - out_4752414459068816126[303] = 0; - out_4752414459068816126[304] = 0; - out_4752414459068816126[305] = 0; - out_4752414459068816126[306] = 0; - out_4752414459068816126[307] = 0; - out_4752414459068816126[308] = 1; - out_4752414459068816126[309] = 0; - out_4752414459068816126[310] = 0; - out_4752414459068816126[311] = 0; - out_4752414459068816126[312] = 0; - out_4752414459068816126[313] = 0; - out_4752414459068816126[314] = 0; - out_4752414459068816126[315] = 0; - out_4752414459068816126[316] = 0; - out_4752414459068816126[317] = 0; - out_4752414459068816126[318] = 0; - out_4752414459068816126[319] = 0; - out_4752414459068816126[320] = 0; - out_4752414459068816126[321] = 0; - out_4752414459068816126[322] = 0; - out_4752414459068816126[323] = 0; - out_4752414459068816126[324] = 0; - out_4752414459068816126[325] = 0; - out_4752414459068816126[326] = 0; - out_4752414459068816126[327] = 0; - out_4752414459068816126[328] = 0; - out_4752414459068816126[329] = 0; - out_4752414459068816126[330] = 1; - out_4752414459068816126[331] = 0; - out_4752414459068816126[332] = 0; - out_4752414459068816126[333] = 0; - out_4752414459068816126[334] = 0; - out_4752414459068816126[335] = 0; - out_4752414459068816126[336] = 0; - out_4752414459068816126[337] = 0; - out_4752414459068816126[338] = 0; - out_4752414459068816126[339] = 0; - out_4752414459068816126[340] = 0; - out_4752414459068816126[341] = 0; - out_4752414459068816126[342] = 0; - out_4752414459068816126[343] = 0; - out_4752414459068816126[344] = 0; - out_4752414459068816126[345] = 0; - out_4752414459068816126[346] = 0; - out_4752414459068816126[347] = 0; - out_4752414459068816126[348] = 0; - out_4752414459068816126[349] = 0; - out_4752414459068816126[350] = 0; - out_4752414459068816126[351] = 0; - out_4752414459068816126[352] = 1; - out_4752414459068816126[353] = 0; - out_4752414459068816126[354] = 0; - out_4752414459068816126[355] = 0; - out_4752414459068816126[356] = 0; - out_4752414459068816126[357] = 0; - out_4752414459068816126[358] = 0; - out_4752414459068816126[359] = 0; - out_4752414459068816126[360] = 0; - out_4752414459068816126[361] = 0; - out_4752414459068816126[362] = 0; - out_4752414459068816126[363] = 0; - out_4752414459068816126[364] = 0; - out_4752414459068816126[365] = 0; - out_4752414459068816126[366] = 0; - out_4752414459068816126[367] = 0; - out_4752414459068816126[368] = 0; - out_4752414459068816126[369] = 0; - out_4752414459068816126[370] = 0; - out_4752414459068816126[371] = 0; - out_4752414459068816126[372] = 0; - out_4752414459068816126[373] = 0; - out_4752414459068816126[374] = 1; - out_4752414459068816126[375] = 0; - out_4752414459068816126[376] = 0; - out_4752414459068816126[377] = 0; - out_4752414459068816126[378] = 0; - out_4752414459068816126[379] = 0; - out_4752414459068816126[380] = 0; - out_4752414459068816126[381] = 0; - out_4752414459068816126[382] = 0; - out_4752414459068816126[383] = 0; - out_4752414459068816126[384] = 0; - out_4752414459068816126[385] = 0; - out_4752414459068816126[386] = 0; - out_4752414459068816126[387] = 0; - out_4752414459068816126[388] = 0; - out_4752414459068816126[389] = 0; - out_4752414459068816126[390] = 0; - out_4752414459068816126[391] = 0; - out_4752414459068816126[392] = 0; - out_4752414459068816126[393] = 0; - out_4752414459068816126[394] = 0; - out_4752414459068816126[395] = 0; - out_4752414459068816126[396] = 1; - out_4752414459068816126[397] = 0; - out_4752414459068816126[398] = 0; - out_4752414459068816126[399] = 0; - out_4752414459068816126[400] = 0; - out_4752414459068816126[401] = 0; - out_4752414459068816126[402] = 0; - out_4752414459068816126[403] = 0; - out_4752414459068816126[404] = 0; - out_4752414459068816126[405] = 0; - out_4752414459068816126[406] = 0; - out_4752414459068816126[407] = 0; - out_4752414459068816126[408] = 0; - out_4752414459068816126[409] = 0; - out_4752414459068816126[410] = 0; - out_4752414459068816126[411] = 0; - out_4752414459068816126[412] = 0; - out_4752414459068816126[413] = 0; - out_4752414459068816126[414] = 0; - out_4752414459068816126[415] = 0; - out_4752414459068816126[416] = 0; - out_4752414459068816126[417] = 0; - out_4752414459068816126[418] = 1; - out_4752414459068816126[419] = 0; - out_4752414459068816126[420] = 0; - out_4752414459068816126[421] = 0; - out_4752414459068816126[422] = 0; - out_4752414459068816126[423] = 0; - out_4752414459068816126[424] = 0; - out_4752414459068816126[425] = 0; - out_4752414459068816126[426] = 0; - out_4752414459068816126[427] = 0; - out_4752414459068816126[428] = 0; - out_4752414459068816126[429] = 0; - out_4752414459068816126[430] = 0; - out_4752414459068816126[431] = 0; - out_4752414459068816126[432] = 0; - out_4752414459068816126[433] = 0; - out_4752414459068816126[434] = 0; - out_4752414459068816126[435] = 0; - out_4752414459068816126[436] = 0; - out_4752414459068816126[437] = 0; - out_4752414459068816126[438] = 0; - out_4752414459068816126[439] = 0; - out_4752414459068816126[440] = 1; +void F_fun(double *state, double dt, double *out_3001170024940786206) { + out_3001170024940786206[0] = 1; + out_3001170024940786206[1] = 0; + out_3001170024940786206[2] = 0; + out_3001170024940786206[3] = 0; + out_3001170024940786206[4] = 0; + out_3001170024940786206[5] = 0; + out_3001170024940786206[6] = dt; + out_3001170024940786206[7] = 0; + out_3001170024940786206[8] = 0; + out_3001170024940786206[9] = 0; + out_3001170024940786206[10] = 0; + out_3001170024940786206[11] = 0; + out_3001170024940786206[12] = 0; + out_3001170024940786206[13] = 0; + out_3001170024940786206[14] = 0; + out_3001170024940786206[15] = 0; + out_3001170024940786206[16] = 0; + out_3001170024940786206[17] = 0; + out_3001170024940786206[18] = 0; + out_3001170024940786206[19] = 0; + out_3001170024940786206[20] = 0; + out_3001170024940786206[21] = 0; + out_3001170024940786206[22] = 1; + out_3001170024940786206[23] = 0; + out_3001170024940786206[24] = 0; + out_3001170024940786206[25] = 0; + out_3001170024940786206[26] = 0; + out_3001170024940786206[27] = 0; + out_3001170024940786206[28] = dt; + out_3001170024940786206[29] = 0; + out_3001170024940786206[30] = 0; + out_3001170024940786206[31] = 0; + out_3001170024940786206[32] = 0; + out_3001170024940786206[33] = 0; + out_3001170024940786206[34] = 0; + out_3001170024940786206[35] = 0; + out_3001170024940786206[36] = 0; + out_3001170024940786206[37] = 0; + out_3001170024940786206[38] = 0; + out_3001170024940786206[39] = 0; + out_3001170024940786206[40] = 0; + out_3001170024940786206[41] = 0; + out_3001170024940786206[42] = 0; + out_3001170024940786206[43] = 0; + out_3001170024940786206[44] = 1; + out_3001170024940786206[45] = 0; + out_3001170024940786206[46] = 0; + out_3001170024940786206[47] = 0; + out_3001170024940786206[48] = 0; + out_3001170024940786206[49] = 0; + out_3001170024940786206[50] = dt; + out_3001170024940786206[51] = 0; + out_3001170024940786206[52] = 0; + out_3001170024940786206[53] = 0; + out_3001170024940786206[54] = 0; + out_3001170024940786206[55] = 0; + out_3001170024940786206[56] = 0; + out_3001170024940786206[57] = 0; + out_3001170024940786206[58] = 0; + out_3001170024940786206[59] = 0; + out_3001170024940786206[60] = 0; + out_3001170024940786206[61] = 0; + out_3001170024940786206[62] = 0; + out_3001170024940786206[63] = 0; + out_3001170024940786206[64] = 0; + out_3001170024940786206[65] = 0; + out_3001170024940786206[66] = 1; + out_3001170024940786206[67] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[11] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]); + out_3001170024940786206[68] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[12] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[10] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[11]); + out_3001170024940786206[69] = 0; + out_3001170024940786206[70] = 0; + out_3001170024940786206[71] = 0; + out_3001170024940786206[72] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2)); + out_3001170024940786206[73] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]); + out_3001170024940786206[74] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]); + out_3001170024940786206[75] = 0; + out_3001170024940786206[76] = 0; + out_3001170024940786206[77] = 0; + out_3001170024940786206[78] = 0; + out_3001170024940786206[79] = 0; + out_3001170024940786206[80] = 0; + out_3001170024940786206[81] = 0; + out_3001170024940786206[82] = 0; + out_3001170024940786206[83] = 0; + out_3001170024940786206[84] = 0; + out_3001170024940786206[85] = 0; + out_3001170024940786206[86] = 0; + out_3001170024940786206[87] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[11] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]); + out_3001170024940786206[88] = 1; + out_3001170024940786206[89] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[12] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[11] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[10]); + out_3001170024940786206[90] = 0; + out_3001170024940786206[91] = 0; + out_3001170024940786206[92] = 0; + out_3001170024940786206[93] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]); + out_3001170024940786206[94] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2)); + out_3001170024940786206[95] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]); + out_3001170024940786206[96] = 0; + out_3001170024940786206[97] = 0; + out_3001170024940786206[98] = 0; + out_3001170024940786206[99] = 0; + out_3001170024940786206[100] = 0; + out_3001170024940786206[101] = 0; + out_3001170024940786206[102] = 0; + out_3001170024940786206[103] = 0; + out_3001170024940786206[104] = 0; + out_3001170024940786206[105] = 0; + out_3001170024940786206[106] = 0; + out_3001170024940786206[107] = 0; + out_3001170024940786206[108] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[12] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[10] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[11]); + out_3001170024940786206[109] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[12] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[11] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[10]); + out_3001170024940786206[110] = 1; + out_3001170024940786206[111] = 0; + out_3001170024940786206[112] = 0; + out_3001170024940786206[113] = 0; + out_3001170024940786206[114] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]); + out_3001170024940786206[115] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]); + out_3001170024940786206[116] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2)); + out_3001170024940786206[117] = 0; + out_3001170024940786206[118] = 0; + out_3001170024940786206[119] = 0; + out_3001170024940786206[120] = 0; + out_3001170024940786206[121] = 0; + out_3001170024940786206[122] = 0; + out_3001170024940786206[123] = 0; + out_3001170024940786206[124] = 0; + out_3001170024940786206[125] = 0; + out_3001170024940786206[126] = 0; + out_3001170024940786206[127] = 0; + out_3001170024940786206[128] = 0; + out_3001170024940786206[129] = 0; + out_3001170024940786206[130] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]); + out_3001170024940786206[131] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[18] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[16] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[17]); + out_3001170024940786206[132] = 1; + out_3001170024940786206[133] = 0; + out_3001170024940786206[134] = 0; + out_3001170024940786206[135] = 0; + out_3001170024940786206[136] = 0; + out_3001170024940786206[137] = 0; + out_3001170024940786206[138] = 0; + out_3001170024940786206[139] = 0; + out_3001170024940786206[140] = 0; + out_3001170024940786206[141] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2)); + out_3001170024940786206[142] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]); + out_3001170024940786206[143] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]); + out_3001170024940786206[144] = 0; + out_3001170024940786206[145] = 0; + out_3001170024940786206[146] = 0; + out_3001170024940786206[147] = 0; + out_3001170024940786206[148] = 0; + out_3001170024940786206[149] = 0; + out_3001170024940786206[150] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[17] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]); + out_3001170024940786206[151] = 0; + out_3001170024940786206[152] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]); + out_3001170024940786206[153] = 0; + out_3001170024940786206[154] = 1; + out_3001170024940786206[155] = 0; + out_3001170024940786206[156] = 0; + out_3001170024940786206[157] = 0; + out_3001170024940786206[158] = 0; + out_3001170024940786206[159] = 0; + out_3001170024940786206[160] = 0; + out_3001170024940786206[161] = 0; + out_3001170024940786206[162] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]); + out_3001170024940786206[163] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2)); + out_3001170024940786206[164] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]); + out_3001170024940786206[165] = 0; + out_3001170024940786206[166] = 0; + out_3001170024940786206[167] = 0; + out_3001170024940786206[168] = 0; + out_3001170024940786206[169] = 0; + out_3001170024940786206[170] = 0; + out_3001170024940786206[171] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]); + out_3001170024940786206[172] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[18] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[17] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[16]); + out_3001170024940786206[173] = 0; + out_3001170024940786206[174] = 0; + out_3001170024940786206[175] = 0; + out_3001170024940786206[176] = 1; + out_3001170024940786206[177] = 0; + out_3001170024940786206[178] = 0; + out_3001170024940786206[179] = 0; + out_3001170024940786206[180] = 0; + out_3001170024940786206[181] = 0; + out_3001170024940786206[182] = 0; + out_3001170024940786206[183] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]); + out_3001170024940786206[184] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]); + out_3001170024940786206[185] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2)); + out_3001170024940786206[186] = 0; + out_3001170024940786206[187] = 0; + out_3001170024940786206[188] = 0; + out_3001170024940786206[189] = 0; + out_3001170024940786206[190] = 0; + out_3001170024940786206[191] = 0; + out_3001170024940786206[192] = 0; + out_3001170024940786206[193] = 0; + out_3001170024940786206[194] = 0; + out_3001170024940786206[195] = 0; + out_3001170024940786206[196] = 0; + out_3001170024940786206[197] = 0; + out_3001170024940786206[198] = 1; + out_3001170024940786206[199] = 0; + out_3001170024940786206[200] = 0; + out_3001170024940786206[201] = 0; + out_3001170024940786206[202] = 0; + out_3001170024940786206[203] = 0; + out_3001170024940786206[204] = 0; + out_3001170024940786206[205] = 0; + out_3001170024940786206[206] = 0; + out_3001170024940786206[207] = 0; + out_3001170024940786206[208] = 0; + out_3001170024940786206[209] = 0; + out_3001170024940786206[210] = 0; + out_3001170024940786206[211] = 0; + out_3001170024940786206[212] = 0; + out_3001170024940786206[213] = 0; + out_3001170024940786206[214] = 0; + out_3001170024940786206[215] = 0; + out_3001170024940786206[216] = 0; + out_3001170024940786206[217] = 0; + out_3001170024940786206[218] = 0; + out_3001170024940786206[219] = 0; + out_3001170024940786206[220] = 1; + out_3001170024940786206[221] = 0; + out_3001170024940786206[222] = 0; + out_3001170024940786206[223] = 0; + out_3001170024940786206[224] = 0; + out_3001170024940786206[225] = 0; + out_3001170024940786206[226] = 0; + out_3001170024940786206[227] = 0; + out_3001170024940786206[228] = 0; + out_3001170024940786206[229] = 0; + out_3001170024940786206[230] = 0; + out_3001170024940786206[231] = 0; + out_3001170024940786206[232] = 0; + out_3001170024940786206[233] = 0; + out_3001170024940786206[234] = 0; + out_3001170024940786206[235] = 0; + out_3001170024940786206[236] = 0; + out_3001170024940786206[237] = 0; + out_3001170024940786206[238] = 0; + out_3001170024940786206[239] = 0; + out_3001170024940786206[240] = 0; + out_3001170024940786206[241] = 0; + out_3001170024940786206[242] = 1; + out_3001170024940786206[243] = 0; + out_3001170024940786206[244] = 0; + out_3001170024940786206[245] = 0; + out_3001170024940786206[246] = 0; + out_3001170024940786206[247] = 0; + out_3001170024940786206[248] = 0; + out_3001170024940786206[249] = 0; + out_3001170024940786206[250] = 0; + out_3001170024940786206[251] = 0; + out_3001170024940786206[252] = 0; + out_3001170024940786206[253] = 0; + out_3001170024940786206[254] = 0; + out_3001170024940786206[255] = 0; + out_3001170024940786206[256] = 0; + out_3001170024940786206[257] = 0; + out_3001170024940786206[258] = 0; + out_3001170024940786206[259] = 0; + out_3001170024940786206[260] = 0; + out_3001170024940786206[261] = 0; + out_3001170024940786206[262] = 0; + out_3001170024940786206[263] = 0; + out_3001170024940786206[264] = 1; + out_3001170024940786206[265] = 0; + out_3001170024940786206[266] = 0; + out_3001170024940786206[267] = 0; + out_3001170024940786206[268] = 0; + out_3001170024940786206[269] = 0; + out_3001170024940786206[270] = 0; + out_3001170024940786206[271] = 0; + out_3001170024940786206[272] = 0; + out_3001170024940786206[273] = 0; + out_3001170024940786206[274] = 0; + out_3001170024940786206[275] = 0; + out_3001170024940786206[276] = 0; + out_3001170024940786206[277] = 0; + out_3001170024940786206[278] = 0; + out_3001170024940786206[279] = 0; + out_3001170024940786206[280] = 0; + out_3001170024940786206[281] = 0; + out_3001170024940786206[282] = 0; + out_3001170024940786206[283] = 0; + out_3001170024940786206[284] = 0; + out_3001170024940786206[285] = 0; + out_3001170024940786206[286] = 1; + out_3001170024940786206[287] = 0; + out_3001170024940786206[288] = 0; + out_3001170024940786206[289] = 0; + out_3001170024940786206[290] = 0; + out_3001170024940786206[291] = 0; + out_3001170024940786206[292] = 0; + out_3001170024940786206[293] = 0; + out_3001170024940786206[294] = 0; + out_3001170024940786206[295] = 0; + out_3001170024940786206[296] = 0; + out_3001170024940786206[297] = 0; + out_3001170024940786206[298] = 0; + out_3001170024940786206[299] = 0; + out_3001170024940786206[300] = 0; + out_3001170024940786206[301] = 0; + out_3001170024940786206[302] = 0; + out_3001170024940786206[303] = 0; + out_3001170024940786206[304] = 0; + out_3001170024940786206[305] = 0; + out_3001170024940786206[306] = 0; + out_3001170024940786206[307] = 0; + out_3001170024940786206[308] = 1; + out_3001170024940786206[309] = 0; + out_3001170024940786206[310] = 0; + out_3001170024940786206[311] = 0; + out_3001170024940786206[312] = 0; + out_3001170024940786206[313] = 0; + out_3001170024940786206[314] = 0; + out_3001170024940786206[315] = 0; + out_3001170024940786206[316] = 0; + out_3001170024940786206[317] = 0; + out_3001170024940786206[318] = 0; + out_3001170024940786206[319] = 0; + out_3001170024940786206[320] = 0; + out_3001170024940786206[321] = 0; + out_3001170024940786206[322] = 0; + out_3001170024940786206[323] = 0; + out_3001170024940786206[324] = 0; + out_3001170024940786206[325] = 0; + out_3001170024940786206[326] = 0; + out_3001170024940786206[327] = 0; + out_3001170024940786206[328] = 0; + out_3001170024940786206[329] = 0; + out_3001170024940786206[330] = 1; + out_3001170024940786206[331] = 0; + out_3001170024940786206[332] = 0; + out_3001170024940786206[333] = 0; + out_3001170024940786206[334] = 0; + out_3001170024940786206[335] = 0; + out_3001170024940786206[336] = 0; + out_3001170024940786206[337] = 0; + out_3001170024940786206[338] = 0; + out_3001170024940786206[339] = 0; + out_3001170024940786206[340] = 0; + out_3001170024940786206[341] = 0; + out_3001170024940786206[342] = 0; + out_3001170024940786206[343] = 0; + out_3001170024940786206[344] = 0; + out_3001170024940786206[345] = 0; + out_3001170024940786206[346] = 0; + out_3001170024940786206[347] = 0; + out_3001170024940786206[348] = 0; + out_3001170024940786206[349] = 0; + out_3001170024940786206[350] = 0; + out_3001170024940786206[351] = 0; + out_3001170024940786206[352] = 1; + out_3001170024940786206[353] = 0; + out_3001170024940786206[354] = 0; + out_3001170024940786206[355] = 0; + out_3001170024940786206[356] = 0; + out_3001170024940786206[357] = 0; + out_3001170024940786206[358] = 0; + out_3001170024940786206[359] = 0; + out_3001170024940786206[360] = 0; + out_3001170024940786206[361] = 0; + out_3001170024940786206[362] = 0; + out_3001170024940786206[363] = 0; + out_3001170024940786206[364] = 0; + out_3001170024940786206[365] = 0; + out_3001170024940786206[366] = 0; + out_3001170024940786206[367] = 0; + out_3001170024940786206[368] = 0; + out_3001170024940786206[369] = 0; + out_3001170024940786206[370] = 0; + out_3001170024940786206[371] = 0; + out_3001170024940786206[372] = 0; + out_3001170024940786206[373] = 0; + out_3001170024940786206[374] = 1; + out_3001170024940786206[375] = 0; + out_3001170024940786206[376] = 0; + out_3001170024940786206[377] = 0; + out_3001170024940786206[378] = 0; + out_3001170024940786206[379] = 0; + out_3001170024940786206[380] = 0; + out_3001170024940786206[381] = 0; + out_3001170024940786206[382] = 0; + out_3001170024940786206[383] = 0; + out_3001170024940786206[384] = 0; + out_3001170024940786206[385] = 0; + out_3001170024940786206[386] = 0; + out_3001170024940786206[387] = 0; + out_3001170024940786206[388] = 0; + out_3001170024940786206[389] = 0; + out_3001170024940786206[390] = 0; + out_3001170024940786206[391] = 0; + out_3001170024940786206[392] = 0; + out_3001170024940786206[393] = 0; + out_3001170024940786206[394] = 0; + out_3001170024940786206[395] = 0; + out_3001170024940786206[396] = 1; + out_3001170024940786206[397] = 0; + out_3001170024940786206[398] = 0; + out_3001170024940786206[399] = 0; + out_3001170024940786206[400] = 0; + out_3001170024940786206[401] = 0; + out_3001170024940786206[402] = 0; + out_3001170024940786206[403] = 0; + out_3001170024940786206[404] = 0; + out_3001170024940786206[405] = 0; + out_3001170024940786206[406] = 0; + out_3001170024940786206[407] = 0; + out_3001170024940786206[408] = 0; + out_3001170024940786206[409] = 0; + out_3001170024940786206[410] = 0; + out_3001170024940786206[411] = 0; + out_3001170024940786206[412] = 0; + out_3001170024940786206[413] = 0; + out_3001170024940786206[414] = 0; + out_3001170024940786206[415] = 0; + out_3001170024940786206[416] = 0; + out_3001170024940786206[417] = 0; + out_3001170024940786206[418] = 1; + out_3001170024940786206[419] = 0; + out_3001170024940786206[420] = 0; + out_3001170024940786206[421] = 0; + out_3001170024940786206[422] = 0; + out_3001170024940786206[423] = 0; + out_3001170024940786206[424] = 0; + out_3001170024940786206[425] = 0; + out_3001170024940786206[426] = 0; + out_3001170024940786206[427] = 0; + out_3001170024940786206[428] = 0; + out_3001170024940786206[429] = 0; + out_3001170024940786206[430] = 0; + out_3001170024940786206[431] = 0; + out_3001170024940786206[432] = 0; + out_3001170024940786206[433] = 0; + out_3001170024940786206[434] = 0; + out_3001170024940786206[435] = 0; + out_3001170024940786206[436] = 0; + out_3001170024940786206[437] = 0; + out_3001170024940786206[438] = 0; + out_3001170024940786206[439] = 0; + out_3001170024940786206[440] = 1; } -void h_4(double *state, double *unused, double *out_1938047718740512528) { - out_1938047718740512528[0] = state[10] + state[13]; - out_1938047718740512528[1] = state[11] + state[14]; - out_1938047718740512528[2] = state[12] + state[15]; +void h_4(double *state, double *unused, double *out_4623444193655221191) { + out_4623444193655221191[0] = state[10] + state[13]; + out_4623444193655221191[1] = state[11] + state[14]; + out_4623444193655221191[2] = state[12] + state[15]; } -void H_4(double *state, double *unused, double *out_8437989887064667391) { - out_8437989887064667391[0] = 0; - out_8437989887064667391[1] = 0; - out_8437989887064667391[2] = 0; - out_8437989887064667391[3] = 0; - out_8437989887064667391[4] = 0; - out_8437989887064667391[5] = 0; - out_8437989887064667391[6] = 0; - out_8437989887064667391[7] = 0; - out_8437989887064667391[8] = 0; - out_8437989887064667391[9] = 0; - out_8437989887064667391[10] = 1; - out_8437989887064667391[11] = 0; - out_8437989887064667391[12] = 0; - out_8437989887064667391[13] = 1; - out_8437989887064667391[14] = 0; - out_8437989887064667391[15] = 0; - out_8437989887064667391[16] = 0; - out_8437989887064667391[17] = 0; - out_8437989887064667391[18] = 0; - out_8437989887064667391[19] = 0; - out_8437989887064667391[20] = 0; - out_8437989887064667391[21] = 0; - out_8437989887064667391[22] = 0; - out_8437989887064667391[23] = 0; - out_8437989887064667391[24] = 0; - out_8437989887064667391[25] = 0; - out_8437989887064667391[26] = 0; - out_8437989887064667391[27] = 0; - out_8437989887064667391[28] = 0; - out_8437989887064667391[29] = 0; - out_8437989887064667391[30] = 0; - out_8437989887064667391[31] = 0; - out_8437989887064667391[32] = 0; - out_8437989887064667391[33] = 1; - out_8437989887064667391[34] = 0; - out_8437989887064667391[35] = 0; - out_8437989887064667391[36] = 1; - out_8437989887064667391[37] = 0; - out_8437989887064667391[38] = 0; - out_8437989887064667391[39] = 0; - out_8437989887064667391[40] = 0; - out_8437989887064667391[41] = 0; - out_8437989887064667391[42] = 0; - out_8437989887064667391[43] = 0; - out_8437989887064667391[44] = 0; - out_8437989887064667391[45] = 0; - out_8437989887064667391[46] = 0; - out_8437989887064667391[47] = 0; - out_8437989887064667391[48] = 0; - out_8437989887064667391[49] = 0; - out_8437989887064667391[50] = 0; - out_8437989887064667391[51] = 0; - out_8437989887064667391[52] = 0; - out_8437989887064667391[53] = 0; - out_8437989887064667391[54] = 0; - out_8437989887064667391[55] = 0; - out_8437989887064667391[56] = 1; - out_8437989887064667391[57] = 0; - out_8437989887064667391[58] = 0; - out_8437989887064667391[59] = 1; - out_8437989887064667391[60] = 0; - out_8437989887064667391[61] = 0; - out_8437989887064667391[62] = 0; - out_8437989887064667391[63] = 0; - out_8437989887064667391[64] = 0; - out_8437989887064667391[65] = 0; +void H_4(double *state, double *unused, double *out_2603623762087390332) { + out_2603623762087390332[0] = 0; + out_2603623762087390332[1] = 0; + out_2603623762087390332[2] = 0; + out_2603623762087390332[3] = 0; + out_2603623762087390332[4] = 0; + out_2603623762087390332[5] = 0; + out_2603623762087390332[6] = 0; + out_2603623762087390332[7] = 0; + out_2603623762087390332[8] = 0; + out_2603623762087390332[9] = 0; + out_2603623762087390332[10] = 1; + out_2603623762087390332[11] = 0; + out_2603623762087390332[12] = 0; + out_2603623762087390332[13] = 1; + out_2603623762087390332[14] = 0; + out_2603623762087390332[15] = 0; + out_2603623762087390332[16] = 0; + out_2603623762087390332[17] = 0; + out_2603623762087390332[18] = 0; + out_2603623762087390332[19] = 0; + out_2603623762087390332[20] = 0; + out_2603623762087390332[21] = 0; + out_2603623762087390332[22] = 0; + out_2603623762087390332[23] = 0; + out_2603623762087390332[24] = 0; + out_2603623762087390332[25] = 0; + out_2603623762087390332[26] = 0; + out_2603623762087390332[27] = 0; + out_2603623762087390332[28] = 0; + out_2603623762087390332[29] = 0; + out_2603623762087390332[30] = 0; + out_2603623762087390332[31] = 0; + out_2603623762087390332[32] = 0; + out_2603623762087390332[33] = 1; + out_2603623762087390332[34] = 0; + out_2603623762087390332[35] = 0; + out_2603623762087390332[36] = 1; + out_2603623762087390332[37] = 0; + out_2603623762087390332[38] = 0; + out_2603623762087390332[39] = 0; + out_2603623762087390332[40] = 0; + out_2603623762087390332[41] = 0; + out_2603623762087390332[42] = 0; + out_2603623762087390332[43] = 0; + out_2603623762087390332[44] = 0; + out_2603623762087390332[45] = 0; + out_2603623762087390332[46] = 0; + out_2603623762087390332[47] = 0; + out_2603623762087390332[48] = 0; + out_2603623762087390332[49] = 0; + out_2603623762087390332[50] = 0; + out_2603623762087390332[51] = 0; + out_2603623762087390332[52] = 0; + out_2603623762087390332[53] = 0; + out_2603623762087390332[54] = 0; + out_2603623762087390332[55] = 0; + out_2603623762087390332[56] = 1; + out_2603623762087390332[57] = 0; + out_2603623762087390332[58] = 0; + out_2603623762087390332[59] = 1; + out_2603623762087390332[60] = 0; + out_2603623762087390332[61] = 0; + out_2603623762087390332[62] = 0; + out_2603623762087390332[63] = 0; + out_2603623762087390332[64] = 0; + out_2603623762087390332[65] = 0; } -void h_9(double *state, double *unused, double *out_2016376091952434025) { - out_2016376091952434025[0] = state[10]; - out_2016376091952434025[1] = state[11]; - out_2016376091952434025[2] = state[12]; +void h_9(double *state, double *unused, double *out_4168973980757166041) { + out_4168973980757166041[0] = state[10]; + out_4168973980757166041[1] = state[11]; + out_4168973980757166041[2] = state[12]; } -void H_9(double *state, double *unused, double *out_2721535251380436755) { - out_2721535251380436755[0] = 0; - out_2721535251380436755[1] = 0; - out_2721535251380436755[2] = 0; - out_2721535251380436755[3] = 0; - out_2721535251380436755[4] = 0; - out_2721535251380436755[5] = 0; - out_2721535251380436755[6] = 0; - out_2721535251380436755[7] = 0; - out_2721535251380436755[8] = 0; - out_2721535251380436755[9] = 0; - out_2721535251380436755[10] = 1; - out_2721535251380436755[11] = 0; - out_2721535251380436755[12] = 0; - out_2721535251380436755[13] = 0; - out_2721535251380436755[14] = 0; - out_2721535251380436755[15] = 0; - out_2721535251380436755[16] = 0; - out_2721535251380436755[17] = 0; - out_2721535251380436755[18] = 0; - out_2721535251380436755[19] = 0; - out_2721535251380436755[20] = 0; - out_2721535251380436755[21] = 0; - out_2721535251380436755[22] = 0; - out_2721535251380436755[23] = 0; - out_2721535251380436755[24] = 0; - out_2721535251380436755[25] = 0; - out_2721535251380436755[26] = 0; - out_2721535251380436755[27] = 0; - out_2721535251380436755[28] = 0; - out_2721535251380436755[29] = 0; - out_2721535251380436755[30] = 0; - out_2721535251380436755[31] = 0; - out_2721535251380436755[32] = 0; - out_2721535251380436755[33] = 1; - out_2721535251380436755[34] = 0; - out_2721535251380436755[35] = 0; - out_2721535251380436755[36] = 0; - out_2721535251380436755[37] = 0; - out_2721535251380436755[38] = 0; - out_2721535251380436755[39] = 0; - out_2721535251380436755[40] = 0; - out_2721535251380436755[41] = 0; - out_2721535251380436755[42] = 0; - out_2721535251380436755[43] = 0; - out_2721535251380436755[44] = 0; - out_2721535251380436755[45] = 0; - out_2721535251380436755[46] = 0; - out_2721535251380436755[47] = 0; - out_2721535251380436755[48] = 0; - out_2721535251380436755[49] = 0; - out_2721535251380436755[50] = 0; - out_2721535251380436755[51] = 0; - out_2721535251380436755[52] = 0; - out_2721535251380436755[53] = 0; - out_2721535251380436755[54] = 0; - out_2721535251380436755[55] = 0; - out_2721535251380436755[56] = 1; - out_2721535251380436755[57] = 0; - out_2721535251380436755[58] = 0; - out_2721535251380436755[59] = 0; - out_2721535251380436755[60] = 0; - out_2721535251380436755[61] = 0; - out_2721535251380436755[62] = 0; - out_2721535251380436755[63] = 0; - out_2721535251380436755[64] = 0; - out_2721535251380436755[65] = 0; +void H_9(double *state, double *unused, double *out_2362434115457799687) { + out_2362434115457799687[0] = 0; + out_2362434115457799687[1] = 0; + out_2362434115457799687[2] = 0; + out_2362434115457799687[3] = 0; + out_2362434115457799687[4] = 0; + out_2362434115457799687[5] = 0; + out_2362434115457799687[6] = 0; + out_2362434115457799687[7] = 0; + out_2362434115457799687[8] = 0; + out_2362434115457799687[9] = 0; + out_2362434115457799687[10] = 1; + out_2362434115457799687[11] = 0; + out_2362434115457799687[12] = 0; + out_2362434115457799687[13] = 0; + out_2362434115457799687[14] = 0; + out_2362434115457799687[15] = 0; + out_2362434115457799687[16] = 0; + out_2362434115457799687[17] = 0; + out_2362434115457799687[18] = 0; + out_2362434115457799687[19] = 0; + out_2362434115457799687[20] = 0; + out_2362434115457799687[21] = 0; + out_2362434115457799687[22] = 0; + out_2362434115457799687[23] = 0; + out_2362434115457799687[24] = 0; + out_2362434115457799687[25] = 0; + out_2362434115457799687[26] = 0; + out_2362434115457799687[27] = 0; + out_2362434115457799687[28] = 0; + out_2362434115457799687[29] = 0; + out_2362434115457799687[30] = 0; + out_2362434115457799687[31] = 0; + out_2362434115457799687[32] = 0; + out_2362434115457799687[33] = 1; + out_2362434115457799687[34] = 0; + out_2362434115457799687[35] = 0; + out_2362434115457799687[36] = 0; + out_2362434115457799687[37] = 0; + out_2362434115457799687[38] = 0; + out_2362434115457799687[39] = 0; + out_2362434115457799687[40] = 0; + out_2362434115457799687[41] = 0; + out_2362434115457799687[42] = 0; + out_2362434115457799687[43] = 0; + out_2362434115457799687[44] = 0; + out_2362434115457799687[45] = 0; + out_2362434115457799687[46] = 0; + out_2362434115457799687[47] = 0; + out_2362434115457799687[48] = 0; + out_2362434115457799687[49] = 0; + out_2362434115457799687[50] = 0; + out_2362434115457799687[51] = 0; + out_2362434115457799687[52] = 0; + out_2362434115457799687[53] = 0; + out_2362434115457799687[54] = 0; + out_2362434115457799687[55] = 0; + out_2362434115457799687[56] = 1; + out_2362434115457799687[57] = 0; + out_2362434115457799687[58] = 0; + out_2362434115457799687[59] = 0; + out_2362434115457799687[60] = 0; + out_2362434115457799687[61] = 0; + out_2362434115457799687[62] = 0; + out_2362434115457799687[63] = 0; + out_2362434115457799687[64] = 0; + out_2362434115457799687[65] = 0; } -void h_10(double *state, double *unused, double *out_8252027734007822314) { - out_8252027734007822314[0] = 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0] + state[16] + state[19]; - out_8252027734007822314[1] = 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1] + state[17] + state[20]; - out_8252027734007822314[2] = 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[2] + state[18] + state[21]; +void h_10(double *state, double *unused, double *out_3520412221597307166) { + out_3520412221597307166[0] = 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0] + state[16] + state[19]; + out_3520412221597307166[1] = 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1] + state[17] + state[20]; + out_3520412221597307166[2] = 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[2] + state[18] + state[21]; } -void H_10(double *state, double *unused, double *out_1022365631619946756) { - out_1022365631619946756[0] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*pow(state[0], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2)); - out_1022365631619946756[1] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1]; - out_1022365631619946756[2] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[2]; - out_1022365631619946756[3] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5]; - out_1022365631619946756[4] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6]; - out_1022365631619946756[5] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3]; - out_1022365631619946756[6] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4]; - out_1022365631619946756[7] = 0; - out_1022365631619946756[8] = 0; - out_1022365631619946756[9] = 0; - out_1022365631619946756[10] = 0; - out_1022365631619946756[11] = 0; - out_1022365631619946756[12] = 0; - out_1022365631619946756[13] = 0; - out_1022365631619946756[14] = 0; - out_1022365631619946756[15] = 0; - out_1022365631619946756[16] = 1; - out_1022365631619946756[17] = 0; - out_1022365631619946756[18] = 0; - out_1022365631619946756[19] = 1; - out_1022365631619946756[20] = 0; - out_1022365631619946756[21] = 0; - out_1022365631619946756[22] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1]; - out_1022365631619946756[23] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*pow(state[1], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2)); - out_1022365631619946756[24] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1]*state[2]; - out_1022365631619946756[25] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4]; - out_1022365631619946756[26] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3]; - out_1022365631619946756[27] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6]; - out_1022365631619946756[28] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5]; - out_1022365631619946756[29] = 0; - out_1022365631619946756[30] = 0; - out_1022365631619946756[31] = 0; - out_1022365631619946756[32] = 0; - out_1022365631619946756[33] = 0; - out_1022365631619946756[34] = 0; - out_1022365631619946756[35] = 0; - out_1022365631619946756[36] = 0; - out_1022365631619946756[37] = 0; - out_1022365631619946756[38] = 0; - out_1022365631619946756[39] = 1; - out_1022365631619946756[40] = 0; - out_1022365631619946756[41] = 0; - out_1022365631619946756[42] = 1; - out_1022365631619946756[43] = 0; - out_1022365631619946756[44] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[0]*state[2]; - out_1022365631619946756[45] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[1]*state[2]; - out_1022365631619946756[46] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*pow(state[2], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2)); - out_1022365631619946756[47] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3]; - out_1022365631619946756[48] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4]; - out_1022365631619946756[49] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5]; - out_1022365631619946756[50] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6]; - out_1022365631619946756[51] = 0; - out_1022365631619946756[52] = 0; - out_1022365631619946756[53] = 0; - out_1022365631619946756[54] = 0; - out_1022365631619946756[55] = 0; - out_1022365631619946756[56] = 0; - out_1022365631619946756[57] = 0; - out_1022365631619946756[58] = 0; - out_1022365631619946756[59] = 0; - out_1022365631619946756[60] = 0; - out_1022365631619946756[61] = 0; - out_1022365631619946756[62] = 1; - out_1022365631619946756[63] = 0; - out_1022365631619946756[64] = 0; - out_1022365631619946756[65] = 1; +void H_10(double *state, double *unused, double *out_7396015770213526348) { + out_7396015770213526348[0] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*pow(state[0], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2)); + out_7396015770213526348[1] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1]; + out_7396015770213526348[2] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[2]; + out_7396015770213526348[3] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5]; + out_7396015770213526348[4] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6]; + out_7396015770213526348[5] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3]; + out_7396015770213526348[6] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4]; + out_7396015770213526348[7] = 0; + out_7396015770213526348[8] = 0; + out_7396015770213526348[9] = 0; + out_7396015770213526348[10] = 0; + out_7396015770213526348[11] = 0; + out_7396015770213526348[12] = 0; + out_7396015770213526348[13] = 0; + out_7396015770213526348[14] = 0; + out_7396015770213526348[15] = 0; + out_7396015770213526348[16] = 1; + out_7396015770213526348[17] = 0; + out_7396015770213526348[18] = 0; + out_7396015770213526348[19] = 1; + out_7396015770213526348[20] = 0; + out_7396015770213526348[21] = 0; + out_7396015770213526348[22] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1]; + out_7396015770213526348[23] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*pow(state[1], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2)); + out_7396015770213526348[24] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1]*state[2]; + out_7396015770213526348[25] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4]; + out_7396015770213526348[26] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3]; + out_7396015770213526348[27] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6]; + out_7396015770213526348[28] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5]; + out_7396015770213526348[29] = 0; + out_7396015770213526348[30] = 0; + out_7396015770213526348[31] = 0; + out_7396015770213526348[32] = 0; + out_7396015770213526348[33] = 0; + out_7396015770213526348[34] = 0; + out_7396015770213526348[35] = 0; + out_7396015770213526348[36] = 0; + out_7396015770213526348[37] = 0; + out_7396015770213526348[38] = 0; + out_7396015770213526348[39] = 1; + out_7396015770213526348[40] = 0; + out_7396015770213526348[41] = 0; + out_7396015770213526348[42] = 1; + out_7396015770213526348[43] = 0; + out_7396015770213526348[44] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[0]*state[2]; + out_7396015770213526348[45] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[1]*state[2]; + out_7396015770213526348[46] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*pow(state[2], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2)); + out_7396015770213526348[47] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3]; + out_7396015770213526348[48] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4]; + out_7396015770213526348[49] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5]; + out_7396015770213526348[50] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6]; + out_7396015770213526348[51] = 0; + out_7396015770213526348[52] = 0; + out_7396015770213526348[53] = 0; + out_7396015770213526348[54] = 0; + out_7396015770213526348[55] = 0; + out_7396015770213526348[56] = 0; + out_7396015770213526348[57] = 0; + out_7396015770213526348[58] = 0; + out_7396015770213526348[59] = 0; + out_7396015770213526348[60] = 0; + out_7396015770213526348[61] = 0; + out_7396015770213526348[62] = 1; + out_7396015770213526348[63] = 0; + out_7396015770213526348[64] = 0; + out_7396015770213526348[65] = 1; } -void h_12(double *state, double *unused, double *out_490832941153373832) { - out_490832941153373832[0] = state[0]; - out_490832941153373832[1] = state[1]; - out_490832941153373832[2] = state[2]; +void h_12(double *state, double *unused, double *out_7977792700499542139) { + out_7977792700499542139[0] = state[0]; + out_7977792700499542139[1] = state[1]; + out_7977792700499542139[2] = state[2]; } -void H_12(double *state, double *unused, double *out_4989297778612922430) { - out_4989297778612922430[0] = 1; - out_4989297778612922430[1] = 0; - out_4989297778612922430[2] = 0; - out_4989297778612922430[3] = 0; - out_4989297778612922430[4] = 0; - out_4989297778612922430[5] = 0; - out_4989297778612922430[6] = 0; - out_4989297778612922430[7] = 0; - out_4989297778612922430[8] = 0; - out_4989297778612922430[9] = 0; - out_4989297778612922430[10] = 0; - out_4989297778612922430[11] = 0; - out_4989297778612922430[12] = 0; - out_4989297778612922430[13] = 0; - out_4989297778612922430[14] = 0; - out_4989297778612922430[15] = 0; - out_4989297778612922430[16] = 0; - out_4989297778612922430[17] = 0; - out_4989297778612922430[18] = 0; - out_4989297778612922430[19] = 0; - out_4989297778612922430[20] = 0; - out_4989297778612922430[21] = 0; - out_4989297778612922430[22] = 0; - out_4989297778612922430[23] = 1; - out_4989297778612922430[24] = 0; - out_4989297778612922430[25] = 0; - out_4989297778612922430[26] = 0; - out_4989297778612922430[27] = 0; - out_4989297778612922430[28] = 0; - out_4989297778612922430[29] = 0; - out_4989297778612922430[30] = 0; - out_4989297778612922430[31] = 0; - out_4989297778612922430[32] = 0; - out_4989297778612922430[33] = 0; - out_4989297778612922430[34] = 0; - out_4989297778612922430[35] = 0; - out_4989297778612922430[36] = 0; - out_4989297778612922430[37] = 0; - out_4989297778612922430[38] = 0; - out_4989297778612922430[39] = 0; - out_4989297778612922430[40] = 0; - out_4989297778612922430[41] = 0; - out_4989297778612922430[42] = 0; - out_4989297778612922430[43] = 0; - out_4989297778612922430[44] = 0; - out_4989297778612922430[45] = 0; - out_4989297778612922430[46] = 1; - out_4989297778612922430[47] = 0; - out_4989297778612922430[48] = 0; - out_4989297778612922430[49] = 0; - out_4989297778612922430[50] = 0; - out_4989297778612922430[51] = 0; - out_4989297778612922430[52] = 0; - out_4989297778612922430[53] = 0; - out_4989297778612922430[54] = 0; - out_4989297778612922430[55] = 0; - out_4989297778612922430[56] = 0; - out_4989297778612922430[57] = 0; - out_4989297778612922430[58] = 0; - out_4989297778612922430[59] = 0; - out_4989297778612922430[60] = 0; - out_4989297778612922430[61] = 0; - out_4989297778612922430[62] = 0; - out_4989297778612922430[63] = 0; - out_4989297778612922430[64] = 0; - out_4989297778612922430[65] = 0; +void H_12(double *state, double *unused, double *out_2415832645944571463) { + out_2415832645944571463[0] = 1; + out_2415832645944571463[1] = 0; + out_2415832645944571463[2] = 0; + out_2415832645944571463[3] = 0; + out_2415832645944571463[4] = 0; + out_2415832645944571463[5] = 0; + out_2415832645944571463[6] = 0; + out_2415832645944571463[7] = 0; + out_2415832645944571463[8] = 0; + out_2415832645944571463[9] = 0; + out_2415832645944571463[10] = 0; + out_2415832645944571463[11] = 0; + out_2415832645944571463[12] = 0; + out_2415832645944571463[13] = 0; + out_2415832645944571463[14] = 0; + out_2415832645944571463[15] = 0; + out_2415832645944571463[16] = 0; + out_2415832645944571463[17] = 0; + out_2415832645944571463[18] = 0; + out_2415832645944571463[19] = 0; + out_2415832645944571463[20] = 0; + out_2415832645944571463[21] = 0; + out_2415832645944571463[22] = 0; + out_2415832645944571463[23] = 1; + out_2415832645944571463[24] = 0; + out_2415832645944571463[25] = 0; + out_2415832645944571463[26] = 0; + out_2415832645944571463[27] = 0; + out_2415832645944571463[28] = 0; + out_2415832645944571463[29] = 0; + out_2415832645944571463[30] = 0; + out_2415832645944571463[31] = 0; + out_2415832645944571463[32] = 0; + out_2415832645944571463[33] = 0; + out_2415832645944571463[34] = 0; + out_2415832645944571463[35] = 0; + out_2415832645944571463[36] = 0; + out_2415832645944571463[37] = 0; + out_2415832645944571463[38] = 0; + out_2415832645944571463[39] = 0; + out_2415832645944571463[40] = 0; + out_2415832645944571463[41] = 0; + out_2415832645944571463[42] = 0; + out_2415832645944571463[43] = 0; + out_2415832645944571463[44] = 0; + out_2415832645944571463[45] = 0; + out_2415832645944571463[46] = 1; + out_2415832645944571463[47] = 0; + out_2415832645944571463[48] = 0; + out_2415832645944571463[49] = 0; + out_2415832645944571463[50] = 0; + out_2415832645944571463[51] = 0; + out_2415832645944571463[52] = 0; + out_2415832645944571463[53] = 0; + out_2415832645944571463[54] = 0; + out_2415832645944571463[55] = 0; + out_2415832645944571463[56] = 0; + out_2415832645944571463[57] = 0; + out_2415832645944571463[58] = 0; + out_2415832645944571463[59] = 0; + out_2415832645944571463[60] = 0; + out_2415832645944571463[61] = 0; + out_2415832645944571463[62] = 0; + out_2415832645944571463[63] = 0; + out_2415832645944571463[64] = 0; + out_2415832645944571463[65] = 0; } -void h_35(double *state, double *unused, double *out_851812883202032952) { - out_851812883202032952[0] = state[7]; - out_851812883202032952[1] = state[8]; - out_851812883202032952[2] = state[9]; +void h_35(double *state, double *unused, double *out_3752355986187417342) { + out_3752355986187417342[0] = state[7]; + out_3752355986187417342[1] = state[8]; + out_3752355986187417342[2] = state[9]; } -void H_35(double *state, double *unused, double *out_6642092129272276849) { - out_6642092129272276849[0] = 0; - out_6642092129272276849[1] = 0; - out_6642092129272276849[2] = 0; - out_6642092129272276849[3] = 0; - out_6642092129272276849[4] = 0; - out_6642092129272276849[5] = 0; - out_6642092129272276849[6] = 0; - out_6642092129272276849[7] = 1; - out_6642092129272276849[8] = 0; - out_6642092129272276849[9] = 0; - out_6642092129272276849[10] = 0; - out_6642092129272276849[11] = 0; - out_6642092129272276849[12] = 0; - out_6642092129272276849[13] = 0; - out_6642092129272276849[14] = 0; - out_6642092129272276849[15] = 0; - out_6642092129272276849[16] = 0; - out_6642092129272276849[17] = 0; - out_6642092129272276849[18] = 0; - out_6642092129272276849[19] = 0; - out_6642092129272276849[20] = 0; - out_6642092129272276849[21] = 0; - out_6642092129272276849[22] = 0; - out_6642092129272276849[23] = 0; - out_6642092129272276849[24] = 0; - out_6642092129272276849[25] = 0; - out_6642092129272276849[26] = 0; - out_6642092129272276849[27] = 0; - out_6642092129272276849[28] = 0; - out_6642092129272276849[29] = 0; - out_6642092129272276849[30] = 1; - out_6642092129272276849[31] = 0; - out_6642092129272276849[32] = 0; - out_6642092129272276849[33] = 0; - out_6642092129272276849[34] = 0; - out_6642092129272276849[35] = 0; - out_6642092129272276849[36] = 0; - out_6642092129272276849[37] = 0; - out_6642092129272276849[38] = 0; - out_6642092129272276849[39] = 0; - out_6642092129272276849[40] = 0; - out_6642092129272276849[41] = 0; - out_6642092129272276849[42] = 0; - out_6642092129272276849[43] = 0; - out_6642092129272276849[44] = 0; - out_6642092129272276849[45] = 0; - out_6642092129272276849[46] = 0; - out_6642092129272276849[47] = 0; - out_6642092129272276849[48] = 0; - out_6642092129272276849[49] = 0; - out_6642092129272276849[50] = 0; - out_6642092129272276849[51] = 0; - out_6642092129272276849[52] = 0; - out_6642092129272276849[53] = 1; - out_6642092129272276849[54] = 0; - out_6642092129272276849[55] = 0; - out_6642092129272276849[56] = 0; - out_6642092129272276849[57] = 0; - out_6642092129272276849[58] = 0; - out_6642092129272276849[59] = 0; - out_6642092129272276849[60] = 0; - out_6642092129272276849[61] = 0; - out_6642092129272276849[62] = 0; - out_6642092129272276849[63] = 0; - out_6642092129272276849[64] = 0; - out_6642092129272276849[65] = 0; +void H_35(double *state, double *unused, double *out_763038295285217044) { + out_763038295285217044[0] = 0; + out_763038295285217044[1] = 0; + out_763038295285217044[2] = 0; + out_763038295285217044[3] = 0; + out_763038295285217044[4] = 0; + out_763038295285217044[5] = 0; + out_763038295285217044[6] = 0; + out_763038295285217044[7] = 1; + out_763038295285217044[8] = 0; + out_763038295285217044[9] = 0; + out_763038295285217044[10] = 0; + out_763038295285217044[11] = 0; + out_763038295285217044[12] = 0; + out_763038295285217044[13] = 0; + out_763038295285217044[14] = 0; + out_763038295285217044[15] = 0; + out_763038295285217044[16] = 0; + out_763038295285217044[17] = 0; + out_763038295285217044[18] = 0; + out_763038295285217044[19] = 0; + out_763038295285217044[20] = 0; + out_763038295285217044[21] = 0; + out_763038295285217044[22] = 0; + out_763038295285217044[23] = 0; + out_763038295285217044[24] = 0; + out_763038295285217044[25] = 0; + out_763038295285217044[26] = 0; + out_763038295285217044[27] = 0; + out_763038295285217044[28] = 0; + out_763038295285217044[29] = 0; + out_763038295285217044[30] = 1; + out_763038295285217044[31] = 0; + out_763038295285217044[32] = 0; + out_763038295285217044[33] = 0; + out_763038295285217044[34] = 0; + out_763038295285217044[35] = 0; + out_763038295285217044[36] = 0; + out_763038295285217044[37] = 0; + out_763038295285217044[38] = 0; + out_763038295285217044[39] = 0; + out_763038295285217044[40] = 0; + out_763038295285217044[41] = 0; + out_763038295285217044[42] = 0; + out_763038295285217044[43] = 0; + out_763038295285217044[44] = 0; + out_763038295285217044[45] = 0; + out_763038295285217044[46] = 0; + out_763038295285217044[47] = 0; + out_763038295285217044[48] = 0; + out_763038295285217044[49] = 0; + out_763038295285217044[50] = 0; + out_763038295285217044[51] = 0; + out_763038295285217044[52] = 0; + out_763038295285217044[53] = 1; + out_763038295285217044[54] = 0; + out_763038295285217044[55] = 0; + out_763038295285217044[56] = 0; + out_763038295285217044[57] = 0; + out_763038295285217044[58] = 0; + out_763038295285217044[59] = 0; + out_763038295285217044[60] = 0; + out_763038295285217044[61] = 0; + out_763038295285217044[62] = 0; + out_763038295285217044[63] = 0; + out_763038295285217044[64] = 0; + out_763038295285217044[65] = 0; } -void h_32(double *state, double *unused, double *out_7198045605532929596) { - out_7198045605532929596[0] = state[3]; - out_7198045605532929596[1] = state[4]; - out_7198045605532929596[2] = state[5]; - out_7198045605532929596[3] = state[6]; +void h_32(double *state, double *unused, double *out_2897039262415537399) { + out_2897039262415537399[0] = state[3]; + out_2897039262415537399[1] = state[4]; + out_2897039262415537399[2] = state[5]; + out_2897039262415537399[3] = state[6]; } -void H_32(double *state, double *unused, double *out_6510927344331536380) { - out_6510927344331536380[0] = 0; - out_6510927344331536380[1] = 0; - out_6510927344331536380[2] = 0; - out_6510927344331536380[3] = 1; - out_6510927344331536380[4] = 0; - out_6510927344331536380[5] = 0; - out_6510927344331536380[6] = 0; - out_6510927344331536380[7] = 0; - out_6510927344331536380[8] = 0; - out_6510927344331536380[9] = 0; - out_6510927344331536380[10] = 0; - out_6510927344331536380[11] = 0; - out_6510927344331536380[12] = 0; - out_6510927344331536380[13] = 0; - out_6510927344331536380[14] = 0; - out_6510927344331536380[15] = 0; - out_6510927344331536380[16] = 0; - out_6510927344331536380[17] = 0; - out_6510927344331536380[18] = 0; - out_6510927344331536380[19] = 0; - out_6510927344331536380[20] = 0; - out_6510927344331536380[21] = 0; - out_6510927344331536380[22] = 0; - out_6510927344331536380[23] = 0; - out_6510927344331536380[24] = 0; - out_6510927344331536380[25] = 0; - out_6510927344331536380[26] = 1; - out_6510927344331536380[27] = 0; - out_6510927344331536380[28] = 0; - out_6510927344331536380[29] = 0; - out_6510927344331536380[30] = 0; - out_6510927344331536380[31] = 0; - out_6510927344331536380[32] = 0; - out_6510927344331536380[33] = 0; - out_6510927344331536380[34] = 0; - out_6510927344331536380[35] = 0; - out_6510927344331536380[36] = 0; - out_6510927344331536380[37] = 0; - out_6510927344331536380[38] = 0; - out_6510927344331536380[39] = 0; - out_6510927344331536380[40] = 0; - out_6510927344331536380[41] = 0; - out_6510927344331536380[42] = 0; - out_6510927344331536380[43] = 0; - out_6510927344331536380[44] = 0; - out_6510927344331536380[45] = 0; - out_6510927344331536380[46] = 0; - out_6510927344331536380[47] = 0; - out_6510927344331536380[48] = 0; - out_6510927344331536380[49] = 1; - out_6510927344331536380[50] = 0; - out_6510927344331536380[51] = 0; - out_6510927344331536380[52] = 0; - out_6510927344331536380[53] = 0; - out_6510927344331536380[54] = 0; - out_6510927344331536380[55] = 0; - out_6510927344331536380[56] = 0; - out_6510927344331536380[57] = 0; - out_6510927344331536380[58] = 0; - out_6510927344331536380[59] = 0; - out_6510927344331536380[60] = 0; - out_6510927344331536380[61] = 0; - out_6510927344331536380[62] = 0; - out_6510927344331536380[63] = 0; - out_6510927344331536380[64] = 0; - out_6510927344331536380[65] = 0; - out_6510927344331536380[66] = 0; - out_6510927344331536380[67] = 0; - out_6510927344331536380[68] = 0; - out_6510927344331536380[69] = 0; - out_6510927344331536380[70] = 0; - out_6510927344331536380[71] = 0; - out_6510927344331536380[72] = 1; - out_6510927344331536380[73] = 0; - out_6510927344331536380[74] = 0; - out_6510927344331536380[75] = 0; - out_6510927344331536380[76] = 0; - out_6510927344331536380[77] = 0; - out_6510927344331536380[78] = 0; - out_6510927344331536380[79] = 0; - out_6510927344331536380[80] = 0; - out_6510927344331536380[81] = 0; - out_6510927344331536380[82] = 0; - out_6510927344331536380[83] = 0; - out_6510927344331536380[84] = 0; - out_6510927344331536380[85] = 0; - out_6510927344331536380[86] = 0; - out_6510927344331536380[87] = 0; +void H_32(double *state, double *unused, double *out_6564342667492829602) { + out_6564342667492829602[0] = 0; + out_6564342667492829602[1] = 0; + out_6564342667492829602[2] = 0; + out_6564342667492829602[3] = 1; + out_6564342667492829602[4] = 0; + out_6564342667492829602[5] = 0; + out_6564342667492829602[6] = 0; + out_6564342667492829602[7] = 0; + out_6564342667492829602[8] = 0; + out_6564342667492829602[9] = 0; + out_6564342667492829602[10] = 0; + out_6564342667492829602[11] = 0; + out_6564342667492829602[12] = 0; + out_6564342667492829602[13] = 0; + out_6564342667492829602[14] = 0; + out_6564342667492829602[15] = 0; + out_6564342667492829602[16] = 0; + out_6564342667492829602[17] = 0; + out_6564342667492829602[18] = 0; + out_6564342667492829602[19] = 0; + out_6564342667492829602[20] = 0; + out_6564342667492829602[21] = 0; + out_6564342667492829602[22] = 0; + out_6564342667492829602[23] = 0; + out_6564342667492829602[24] = 0; + out_6564342667492829602[25] = 0; + out_6564342667492829602[26] = 1; + out_6564342667492829602[27] = 0; + out_6564342667492829602[28] = 0; + out_6564342667492829602[29] = 0; + out_6564342667492829602[30] = 0; + out_6564342667492829602[31] = 0; + out_6564342667492829602[32] = 0; + out_6564342667492829602[33] = 0; + out_6564342667492829602[34] = 0; + out_6564342667492829602[35] = 0; + out_6564342667492829602[36] = 0; + out_6564342667492829602[37] = 0; + out_6564342667492829602[38] = 0; + out_6564342667492829602[39] = 0; + out_6564342667492829602[40] = 0; + out_6564342667492829602[41] = 0; + out_6564342667492829602[42] = 0; + out_6564342667492829602[43] = 0; + out_6564342667492829602[44] = 0; + out_6564342667492829602[45] = 0; + out_6564342667492829602[46] = 0; + out_6564342667492829602[47] = 0; + out_6564342667492829602[48] = 0; + out_6564342667492829602[49] = 1; + out_6564342667492829602[50] = 0; + out_6564342667492829602[51] = 0; + out_6564342667492829602[52] = 0; + out_6564342667492829602[53] = 0; + out_6564342667492829602[54] = 0; + out_6564342667492829602[55] = 0; + out_6564342667492829602[56] = 0; + out_6564342667492829602[57] = 0; + out_6564342667492829602[58] = 0; + out_6564342667492829602[59] = 0; + out_6564342667492829602[60] = 0; + out_6564342667492829602[61] = 0; + out_6564342667492829602[62] = 0; + out_6564342667492829602[63] = 0; + out_6564342667492829602[64] = 0; + out_6564342667492829602[65] = 0; + out_6564342667492829602[66] = 0; + out_6564342667492829602[67] = 0; + out_6564342667492829602[68] = 0; + out_6564342667492829602[69] = 0; + out_6564342667492829602[70] = 0; + out_6564342667492829602[71] = 0; + out_6564342667492829602[72] = 1; + out_6564342667492829602[73] = 0; + out_6564342667492829602[74] = 0; + out_6564342667492829602[75] = 0; + out_6564342667492829602[76] = 0; + out_6564342667492829602[77] = 0; + out_6564342667492829602[78] = 0; + out_6564342667492829602[79] = 0; + out_6564342667492829602[80] = 0; + out_6564342667492829602[81] = 0; + out_6564342667492829602[82] = 0; + out_6564342667492829602[83] = 0; + out_6564342667492829602[84] = 0; + out_6564342667492829602[85] = 0; + out_6564342667492829602[86] = 0; + out_6564342667492829602[87] = 0; } -void h_13(double *state, double *unused, double *out_6813957582124674447) { - out_6813957582124674447[0] = (-2*state[3]*state[5] + 2*state[4]*state[6])*state[9] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[8] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[7]; - out_6813957582124674447[1] = (2*state[3]*state[4] + 2*state[5]*state[6])*state[9] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[7] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[8]; - out_6813957582124674447[2] = (-2*state[3]*state[4] + 2*state[5]*state[6])*state[8] + (2*state[3]*state[5] + 2*state[4]*state[6])*state[7] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[9]; +void h_13(double *state, double *unused, double *out_7535737061045930452) { + out_7535737061045930452[0] = (-2*state[3]*state[5] + 2*state[4]*state[6])*state[9] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[8] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[7]; + out_7535737061045930452[1] = (2*state[3]*state[4] + 2*state[5]*state[6])*state[9] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[7] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[8]; + out_7535737061045930452[2] = (-2*state[3]*state[4] + 2*state[5]*state[6])*state[8] + (2*state[3]*state[5] + 2*state[4]*state[6])*state[7] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[9]; } -void H_13(double *state, double *unused, double *out_7851984426394690165) { - out_7851984426394690165[0] = 0; - out_7851984426394690165[1] = 0; - out_7851984426394690165[2] = 0; - out_7851984426394690165[3] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8]; - out_7851984426394690165[4] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9]; - out_7851984426394690165[5] = -2*state[3]*state[9] + 2*state[4]*state[8] - 2*state[5]*state[7]; - out_7851984426394690165[6] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7]; - out_7851984426394690165[7] = pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2); - out_7851984426394690165[8] = 2*state[3]*state[6] + 2*state[4]*state[5]; - out_7851984426394690165[9] = -2*state[3]*state[5] + 2*state[4]*state[6]; - out_7851984426394690165[10] = 0; - out_7851984426394690165[11] = 0; - out_7851984426394690165[12] = 0; - out_7851984426394690165[13] = 0; - out_7851984426394690165[14] = 0; - out_7851984426394690165[15] = 0; - out_7851984426394690165[16] = 0; - out_7851984426394690165[17] = 0; - out_7851984426394690165[18] = 0; - out_7851984426394690165[19] = 0; - out_7851984426394690165[20] = 0; - out_7851984426394690165[21] = 0; - out_7851984426394690165[22] = 0; - out_7851984426394690165[23] = 0; - out_7851984426394690165[24] = 0; - out_7851984426394690165[25] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7]; - out_7851984426394690165[26] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7]; - out_7851984426394690165[27] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9]; - out_7851984426394690165[28] = -2*state[3]*state[7] + 2*state[5]*state[9] - 2*state[6]*state[8]; - out_7851984426394690165[29] = -2*state[3]*state[6] + 2*state[4]*state[5]; - out_7851984426394690165[30] = pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2); - out_7851984426394690165[31] = 2*state[3]*state[4] + 2*state[5]*state[6]; - out_7851984426394690165[32] = 0; - out_7851984426394690165[33] = 0; - out_7851984426394690165[34] = 0; - out_7851984426394690165[35] = 0; - out_7851984426394690165[36] = 0; - out_7851984426394690165[37] = 0; - out_7851984426394690165[38] = 0; - out_7851984426394690165[39] = 0; - out_7851984426394690165[40] = 0; - out_7851984426394690165[41] = 0; - out_7851984426394690165[42] = 0; - out_7851984426394690165[43] = 0; - out_7851984426394690165[44] = 0; - out_7851984426394690165[45] = 0; - out_7851984426394690165[46] = 0; - out_7851984426394690165[47] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7]; - out_7851984426394690165[48] = -2*state[3]*state[8] - 2*state[4]*state[9] + 2*state[6]*state[7]; - out_7851984426394690165[49] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8]; - out_7851984426394690165[50] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9]; - out_7851984426394690165[51] = 2*state[3]*state[5] + 2*state[4]*state[6]; - out_7851984426394690165[52] = -2*state[3]*state[4] + 2*state[5]*state[6]; - out_7851984426394690165[53] = pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2); - out_7851984426394690165[54] = 0; - out_7851984426394690165[55] = 0; - out_7851984426394690165[56] = 0; - out_7851984426394690165[57] = 0; - out_7851984426394690165[58] = 0; - out_7851984426394690165[59] = 0; - out_7851984426394690165[60] = 0; - out_7851984426394690165[61] = 0; - out_7851984426394690165[62] = 0; - out_7851984426394690165[63] = 0; - out_7851984426394690165[64] = 0; - out_7851984426394690165[65] = 0; +void H_13(double *state, double *unused, double *out_3042894167287587122) { + out_3042894167287587122[0] = 0; + out_3042894167287587122[1] = 0; + out_3042894167287587122[2] = 0; + out_3042894167287587122[3] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8]; + out_3042894167287587122[4] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9]; + out_3042894167287587122[5] = -2*state[3]*state[9] + 2*state[4]*state[8] - 2*state[5]*state[7]; + out_3042894167287587122[6] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7]; + out_3042894167287587122[7] = pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2); + out_3042894167287587122[8] = 2*state[3]*state[6] + 2*state[4]*state[5]; + out_3042894167287587122[9] = -2*state[3]*state[5] + 2*state[4]*state[6]; + out_3042894167287587122[10] = 0; + out_3042894167287587122[11] = 0; + out_3042894167287587122[12] = 0; + out_3042894167287587122[13] = 0; + out_3042894167287587122[14] = 0; + out_3042894167287587122[15] = 0; + out_3042894167287587122[16] = 0; + out_3042894167287587122[17] = 0; + out_3042894167287587122[18] = 0; + out_3042894167287587122[19] = 0; + out_3042894167287587122[20] = 0; + out_3042894167287587122[21] = 0; + out_3042894167287587122[22] = 0; + out_3042894167287587122[23] = 0; + out_3042894167287587122[24] = 0; + out_3042894167287587122[25] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7]; + out_3042894167287587122[26] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7]; + out_3042894167287587122[27] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9]; + out_3042894167287587122[28] = -2*state[3]*state[7] + 2*state[5]*state[9] - 2*state[6]*state[8]; + out_3042894167287587122[29] = -2*state[3]*state[6] + 2*state[4]*state[5]; + out_3042894167287587122[30] = pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2); + out_3042894167287587122[31] = 2*state[3]*state[4] + 2*state[5]*state[6]; + out_3042894167287587122[32] = 0; + out_3042894167287587122[33] = 0; + out_3042894167287587122[34] = 0; + out_3042894167287587122[35] = 0; + out_3042894167287587122[36] = 0; + out_3042894167287587122[37] = 0; + out_3042894167287587122[38] = 0; + out_3042894167287587122[39] = 0; + out_3042894167287587122[40] = 0; + out_3042894167287587122[41] = 0; + out_3042894167287587122[42] = 0; + out_3042894167287587122[43] = 0; + out_3042894167287587122[44] = 0; + out_3042894167287587122[45] = 0; + out_3042894167287587122[46] = 0; + out_3042894167287587122[47] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7]; + out_3042894167287587122[48] = -2*state[3]*state[8] - 2*state[4]*state[9] + 2*state[6]*state[7]; + out_3042894167287587122[49] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8]; + out_3042894167287587122[50] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9]; + out_3042894167287587122[51] = 2*state[3]*state[5] + 2*state[4]*state[6]; + out_3042894167287587122[52] = -2*state[3]*state[4] + 2*state[5]*state[6]; + out_3042894167287587122[53] = pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2); + out_3042894167287587122[54] = 0; + out_3042894167287587122[55] = 0; + out_3042894167287587122[56] = 0; + out_3042894167287587122[57] = 0; + out_3042894167287587122[58] = 0; + out_3042894167287587122[59] = 0; + out_3042894167287587122[60] = 0; + out_3042894167287587122[61] = 0; + out_3042894167287587122[62] = 0; + out_3042894167287587122[63] = 0; + out_3042894167287587122[64] = 0; + out_3042894167287587122[65] = 0; } -void h_14(double *state, double *unused, double *out_2016376091952434025) { - out_2016376091952434025[0] = state[10]; - out_2016376091952434025[1] = state[11]; - out_2016376091952434025[2] = state[12]; +void h_14(double *state, double *unused, double *out_4168973980757166041) { + out_4168973980757166041[0] = state[10]; + out_4168973980757166041[1] = state[11]; + out_4168973980757166041[2] = state[12]; } -void H_14(double *state, double *unused, double *out_2721535251380436755) { - out_2721535251380436755[0] = 0; - out_2721535251380436755[1] = 0; - out_2721535251380436755[2] = 0; - out_2721535251380436755[3] = 0; - out_2721535251380436755[4] = 0; - out_2721535251380436755[5] = 0; - out_2721535251380436755[6] = 0; - out_2721535251380436755[7] = 0; - out_2721535251380436755[8] = 0; - out_2721535251380436755[9] = 0; - out_2721535251380436755[10] = 1; - out_2721535251380436755[11] = 0; - out_2721535251380436755[12] = 0; - out_2721535251380436755[13] = 0; - out_2721535251380436755[14] = 0; - out_2721535251380436755[15] = 0; - out_2721535251380436755[16] = 0; - out_2721535251380436755[17] = 0; - out_2721535251380436755[18] = 0; - out_2721535251380436755[19] = 0; - out_2721535251380436755[20] = 0; - out_2721535251380436755[21] = 0; - out_2721535251380436755[22] = 0; - out_2721535251380436755[23] = 0; - out_2721535251380436755[24] = 0; - out_2721535251380436755[25] = 0; - out_2721535251380436755[26] = 0; - out_2721535251380436755[27] = 0; - out_2721535251380436755[28] = 0; - out_2721535251380436755[29] = 0; - out_2721535251380436755[30] = 0; - out_2721535251380436755[31] = 0; - out_2721535251380436755[32] = 0; - out_2721535251380436755[33] = 1; - out_2721535251380436755[34] = 0; - out_2721535251380436755[35] = 0; - out_2721535251380436755[36] = 0; - out_2721535251380436755[37] = 0; - out_2721535251380436755[38] = 0; - out_2721535251380436755[39] = 0; - out_2721535251380436755[40] = 0; - out_2721535251380436755[41] = 0; - out_2721535251380436755[42] = 0; - out_2721535251380436755[43] = 0; - out_2721535251380436755[44] = 0; - out_2721535251380436755[45] = 0; - out_2721535251380436755[46] = 0; - out_2721535251380436755[47] = 0; - out_2721535251380436755[48] = 0; - out_2721535251380436755[49] = 0; - out_2721535251380436755[50] = 0; - out_2721535251380436755[51] = 0; - out_2721535251380436755[52] = 0; - out_2721535251380436755[53] = 0; - out_2721535251380436755[54] = 0; - out_2721535251380436755[55] = 0; - out_2721535251380436755[56] = 1; - out_2721535251380436755[57] = 0; - out_2721535251380436755[58] = 0; - out_2721535251380436755[59] = 0; - out_2721535251380436755[60] = 0; - out_2721535251380436755[61] = 0; - out_2721535251380436755[62] = 0; - out_2721535251380436755[63] = 0; - out_2721535251380436755[64] = 0; - out_2721535251380436755[65] = 0; +void H_14(double *state, double *unused, double *out_2362434115457799687) { + out_2362434115457799687[0] = 0; + out_2362434115457799687[1] = 0; + out_2362434115457799687[2] = 0; + out_2362434115457799687[3] = 0; + out_2362434115457799687[4] = 0; + out_2362434115457799687[5] = 0; + out_2362434115457799687[6] = 0; + out_2362434115457799687[7] = 0; + out_2362434115457799687[8] = 0; + out_2362434115457799687[9] = 0; + out_2362434115457799687[10] = 1; + out_2362434115457799687[11] = 0; + out_2362434115457799687[12] = 0; + out_2362434115457799687[13] = 0; + out_2362434115457799687[14] = 0; + out_2362434115457799687[15] = 0; + out_2362434115457799687[16] = 0; + out_2362434115457799687[17] = 0; + out_2362434115457799687[18] = 0; + out_2362434115457799687[19] = 0; + out_2362434115457799687[20] = 0; + out_2362434115457799687[21] = 0; + out_2362434115457799687[22] = 0; + out_2362434115457799687[23] = 0; + out_2362434115457799687[24] = 0; + out_2362434115457799687[25] = 0; + out_2362434115457799687[26] = 0; + out_2362434115457799687[27] = 0; + out_2362434115457799687[28] = 0; + out_2362434115457799687[29] = 0; + out_2362434115457799687[30] = 0; + out_2362434115457799687[31] = 0; + out_2362434115457799687[32] = 0; + out_2362434115457799687[33] = 1; + out_2362434115457799687[34] = 0; + out_2362434115457799687[35] = 0; + out_2362434115457799687[36] = 0; + out_2362434115457799687[37] = 0; + out_2362434115457799687[38] = 0; + out_2362434115457799687[39] = 0; + out_2362434115457799687[40] = 0; + out_2362434115457799687[41] = 0; + out_2362434115457799687[42] = 0; + out_2362434115457799687[43] = 0; + out_2362434115457799687[44] = 0; + out_2362434115457799687[45] = 0; + out_2362434115457799687[46] = 0; + out_2362434115457799687[47] = 0; + out_2362434115457799687[48] = 0; + out_2362434115457799687[49] = 0; + out_2362434115457799687[50] = 0; + out_2362434115457799687[51] = 0; + out_2362434115457799687[52] = 0; + out_2362434115457799687[53] = 0; + out_2362434115457799687[54] = 0; + out_2362434115457799687[55] = 0; + out_2362434115457799687[56] = 1; + out_2362434115457799687[57] = 0; + out_2362434115457799687[58] = 0; + out_2362434115457799687[59] = 0; + out_2362434115457799687[60] = 0; + out_2362434115457799687[61] = 0; + out_2362434115457799687[62] = 0; + out_2362434115457799687[63] = 0; + out_2362434115457799687[64] = 0; + out_2362434115457799687[65] = 0; } -void h_33(double *state, double *unused, double *out_1521077794722315231) { - out_1521077794722315231[0] = state[16]; - out_1521077794722315231[1] = state[17]; - out_1521077794722315231[2] = state[18]; +void h_33(double *state, double *unused, double *out_3687821174760154582) { + out_3687821174760154582[0] = state[16]; + out_3687821174760154582[1] = state[17]; + out_3687821174760154582[2] = state[18]; } -void H_33(double *state, double *unused, double *out_3491535124633419245) { - out_3491535124633419245[0] = 0; - out_3491535124633419245[1] = 0; - out_3491535124633419245[2] = 0; - out_3491535124633419245[3] = 0; - out_3491535124633419245[4] = 0; - out_3491535124633419245[5] = 0; - out_3491535124633419245[6] = 0; - out_3491535124633419245[7] = 0; - out_3491535124633419245[8] = 0; - out_3491535124633419245[9] = 0; - out_3491535124633419245[10] = 0; - out_3491535124633419245[11] = 0; - out_3491535124633419245[12] = 0; - out_3491535124633419245[13] = 0; - out_3491535124633419245[14] = 0; - out_3491535124633419245[15] = 0; - out_3491535124633419245[16] = 1; - out_3491535124633419245[17] = 0; - out_3491535124633419245[18] = 0; - out_3491535124633419245[19] = 0; - out_3491535124633419245[20] = 0; - out_3491535124633419245[21] = 0; - out_3491535124633419245[22] = 0; - out_3491535124633419245[23] = 0; - out_3491535124633419245[24] = 0; - out_3491535124633419245[25] = 0; - out_3491535124633419245[26] = 0; - out_3491535124633419245[27] = 0; - out_3491535124633419245[28] = 0; - out_3491535124633419245[29] = 0; - out_3491535124633419245[30] = 0; - out_3491535124633419245[31] = 0; - out_3491535124633419245[32] = 0; - out_3491535124633419245[33] = 0; - out_3491535124633419245[34] = 0; - out_3491535124633419245[35] = 0; - out_3491535124633419245[36] = 0; - out_3491535124633419245[37] = 0; - out_3491535124633419245[38] = 0; - out_3491535124633419245[39] = 1; - out_3491535124633419245[40] = 0; - out_3491535124633419245[41] = 0; - out_3491535124633419245[42] = 0; - out_3491535124633419245[43] = 0; - out_3491535124633419245[44] = 0; - out_3491535124633419245[45] = 0; - out_3491535124633419245[46] = 0; - out_3491535124633419245[47] = 0; - out_3491535124633419245[48] = 0; - out_3491535124633419245[49] = 0; - out_3491535124633419245[50] = 0; - out_3491535124633419245[51] = 0; - out_3491535124633419245[52] = 0; - out_3491535124633419245[53] = 0; - out_3491535124633419245[54] = 0; - out_3491535124633419245[55] = 0; - out_3491535124633419245[56] = 0; - out_3491535124633419245[57] = 0; - out_3491535124633419245[58] = 0; - out_3491535124633419245[59] = 0; - out_3491535124633419245[60] = 0; - out_3491535124633419245[61] = 0; - out_3491535124633419245[62] = 1; - out_3491535124633419245[63] = 0; - out_3491535124633419245[64] = 0; - out_3491535124633419245[65] = 0; +void H_33(double *state, double *unused, double *out_3913595299924074648) { + out_3913595299924074648[0] = 0; + out_3913595299924074648[1] = 0; + out_3913595299924074648[2] = 0; + out_3913595299924074648[3] = 0; + out_3913595299924074648[4] = 0; + out_3913595299924074648[5] = 0; + out_3913595299924074648[6] = 0; + out_3913595299924074648[7] = 0; + out_3913595299924074648[8] = 0; + out_3913595299924074648[9] = 0; + out_3913595299924074648[10] = 0; + out_3913595299924074648[11] = 0; + out_3913595299924074648[12] = 0; + out_3913595299924074648[13] = 0; + out_3913595299924074648[14] = 0; + out_3913595299924074648[15] = 0; + out_3913595299924074648[16] = 1; + out_3913595299924074648[17] = 0; + out_3913595299924074648[18] = 0; + out_3913595299924074648[19] = 0; + out_3913595299924074648[20] = 0; + out_3913595299924074648[21] = 0; + out_3913595299924074648[22] = 0; + out_3913595299924074648[23] = 0; + out_3913595299924074648[24] = 0; + out_3913595299924074648[25] = 0; + out_3913595299924074648[26] = 0; + out_3913595299924074648[27] = 0; + out_3913595299924074648[28] = 0; + out_3913595299924074648[29] = 0; + out_3913595299924074648[30] = 0; + out_3913595299924074648[31] = 0; + out_3913595299924074648[32] = 0; + out_3913595299924074648[33] = 0; + out_3913595299924074648[34] = 0; + out_3913595299924074648[35] = 0; + out_3913595299924074648[36] = 0; + out_3913595299924074648[37] = 0; + out_3913595299924074648[38] = 0; + out_3913595299924074648[39] = 1; + out_3913595299924074648[40] = 0; + out_3913595299924074648[41] = 0; + out_3913595299924074648[42] = 0; + out_3913595299924074648[43] = 0; + out_3913595299924074648[44] = 0; + out_3913595299924074648[45] = 0; + out_3913595299924074648[46] = 0; + out_3913595299924074648[47] = 0; + out_3913595299924074648[48] = 0; + out_3913595299924074648[49] = 0; + out_3913595299924074648[50] = 0; + out_3913595299924074648[51] = 0; + out_3913595299924074648[52] = 0; + out_3913595299924074648[53] = 0; + out_3913595299924074648[54] = 0; + out_3913595299924074648[55] = 0; + out_3913595299924074648[56] = 0; + out_3913595299924074648[57] = 0; + out_3913595299924074648[58] = 0; + out_3913595299924074648[59] = 0; + out_3913595299924074648[60] = 0; + out_3913595299924074648[61] = 0; + out_3913595299924074648[62] = 1; + out_3913595299924074648[63] = 0; + out_3913595299924074648[64] = 0; + out_3913595299924074648[65] = 0; } #include #include @@ -1855,77 +1855,77 @@ void live_update_14(double *in_x, double *in_P, double *in_z, double *in_R, doub void live_update_33(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) { update<3, 3, 0>(in_x, in_P, h_33, H_33, NULL, in_z, in_R, in_ea, MAHA_THRESH_33); } -void live_H(double *in_vec, double *out_2107061543090158966) { - H(in_vec, out_2107061543090158966); +void live_H(double *in_vec, double *out_3981994659674141472) { + H(in_vec, out_3981994659674141472); } -void live_err_fun(double *nom_x, double *delta_x, double *out_1090842864546838841) { - err_fun(nom_x, delta_x, out_1090842864546838841); +void live_err_fun(double *nom_x, double *delta_x, double *out_3356596097038928074) { + err_fun(nom_x, delta_x, out_3356596097038928074); } -void live_inv_err_fun(double *nom_x, double *true_x, double *out_1751534880763809428) { - inv_err_fun(nom_x, true_x, out_1751534880763809428); +void live_inv_err_fun(double *nom_x, double *true_x, double *out_4391465575185495497) { + inv_err_fun(nom_x, true_x, out_4391465575185495497); } -void live_H_mod_fun(double *state, double *out_2270168032272230264) { - H_mod_fun(state, out_2270168032272230264); +void live_H_mod_fun(double *state, double *out_4990766548554672415) { + H_mod_fun(state, out_4990766548554672415); } -void live_f_fun(double *state, double dt, double *out_9047640957774126431) { - f_fun(state, dt, out_9047640957774126431); +void live_f_fun(double *state, double dt, double *out_3056772812413117361) { + f_fun(state, dt, out_3056772812413117361); } -void live_F_fun(double *state, double dt, double *out_4752414459068816126) { - F_fun(state, dt, out_4752414459068816126); +void live_F_fun(double *state, double dt, double *out_3001170024940786206) { + F_fun(state, dt, out_3001170024940786206); } -void live_h_4(double *state, double *unused, double *out_1938047718740512528) { - h_4(state, unused, out_1938047718740512528); +void live_h_4(double *state, double *unused, double *out_4623444193655221191) { + h_4(state, unused, out_4623444193655221191); } -void live_H_4(double *state, double *unused, double *out_8437989887064667391) { - H_4(state, unused, out_8437989887064667391); +void live_H_4(double *state, double *unused, double *out_2603623762087390332) { + H_4(state, unused, out_2603623762087390332); } -void live_h_9(double *state, double *unused, double *out_2016376091952434025) { - h_9(state, unused, out_2016376091952434025); +void live_h_9(double *state, double *unused, double *out_4168973980757166041) { + h_9(state, unused, out_4168973980757166041); } -void live_H_9(double *state, double *unused, double *out_2721535251380436755) { - H_9(state, unused, out_2721535251380436755); +void live_H_9(double *state, double *unused, double *out_2362434115457799687) { + H_9(state, unused, out_2362434115457799687); } -void live_h_10(double *state, double *unused, double *out_8252027734007822314) { - h_10(state, unused, out_8252027734007822314); +void live_h_10(double *state, double *unused, double *out_3520412221597307166) { + h_10(state, unused, out_3520412221597307166); } -void live_H_10(double *state, double *unused, double *out_1022365631619946756) { - H_10(state, unused, out_1022365631619946756); +void live_H_10(double *state, double *unused, double *out_7396015770213526348) { + H_10(state, unused, out_7396015770213526348); } -void live_h_12(double *state, double *unused, double *out_490832941153373832) { - h_12(state, unused, out_490832941153373832); +void live_h_12(double *state, double *unused, double *out_7977792700499542139) { + h_12(state, unused, out_7977792700499542139); } -void live_H_12(double *state, double *unused, double *out_4989297778612922430) { - H_12(state, unused, out_4989297778612922430); +void live_H_12(double *state, double *unused, double *out_2415832645944571463) { + H_12(state, unused, out_2415832645944571463); } -void live_h_35(double *state, double *unused, double *out_851812883202032952) { - h_35(state, unused, out_851812883202032952); +void live_h_35(double *state, double *unused, double *out_3752355986187417342) { + h_35(state, unused, out_3752355986187417342); } -void live_H_35(double *state, double *unused, double *out_6642092129272276849) { - H_35(state, unused, out_6642092129272276849); +void live_H_35(double *state, double *unused, double *out_763038295285217044) { + H_35(state, unused, out_763038295285217044); } -void live_h_32(double *state, double *unused, double *out_7198045605532929596) { - h_32(state, unused, out_7198045605532929596); +void live_h_32(double *state, double *unused, double *out_2897039262415537399) { + h_32(state, unused, out_2897039262415537399); } -void live_H_32(double *state, double *unused, double *out_6510927344331536380) { - H_32(state, unused, out_6510927344331536380); +void live_H_32(double *state, double *unused, double *out_6564342667492829602) { + H_32(state, unused, out_6564342667492829602); } -void live_h_13(double *state, double *unused, double *out_6813957582124674447) { - h_13(state, unused, out_6813957582124674447); +void live_h_13(double *state, double *unused, double *out_7535737061045930452) { + h_13(state, unused, out_7535737061045930452); } -void live_H_13(double *state, double *unused, double *out_7851984426394690165) { - H_13(state, unused, out_7851984426394690165); +void live_H_13(double *state, double *unused, double *out_3042894167287587122) { + H_13(state, unused, out_3042894167287587122); } -void live_h_14(double *state, double *unused, double *out_2016376091952434025) { - h_14(state, unused, out_2016376091952434025); +void live_h_14(double *state, double *unused, double *out_4168973980757166041) { + h_14(state, unused, out_4168973980757166041); } -void live_H_14(double *state, double *unused, double *out_2721535251380436755) { - H_14(state, unused, out_2721535251380436755); +void live_H_14(double *state, double *unused, double *out_2362434115457799687) { + H_14(state, unused, out_2362434115457799687); } -void live_h_33(double *state, double *unused, double *out_1521077794722315231) { - h_33(state, unused, out_1521077794722315231); +void live_h_33(double *state, double *unused, double *out_3687821174760154582) { + h_33(state, unused, out_3687821174760154582); } -void live_H_33(double *state, double *unused, double *out_3491535124633419245) { - H_33(state, unused, out_3491535124633419245); +void live_H_33(double *state, double *unused, double *out_3913595299924074648) { + H_33(state, unused, out_3913595299924074648); } void live_predict(double *in_x, double *in_P, double *in_Q, double dt) { predict(in_x, in_P, in_Q, dt); diff --git a/selfdrive/locationd/models/generated/live.h b/selfdrive/locationd/models/generated/live.h index 2c8518a9c..de0899823 100644 --- a/selfdrive/locationd/models/generated/live.h +++ b/selfdrive/locationd/models/generated/live.h @@ -10,29 +10,29 @@ void live_update_32(double *in_x, double *in_P, double *in_z, double *in_R, doub void live_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); void live_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); void live_update_33(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea); -void live_H(double *in_vec, double *out_2107061543090158966); -void live_err_fun(double *nom_x, double *delta_x, double *out_1090842864546838841); -void live_inv_err_fun(double *nom_x, double *true_x, double *out_1751534880763809428); -void live_H_mod_fun(double *state, double *out_2270168032272230264); -void live_f_fun(double *state, double dt, double *out_9047640957774126431); -void live_F_fun(double *state, double dt, double *out_4752414459068816126); -void live_h_4(double *state, double *unused, double *out_1938047718740512528); -void live_H_4(double *state, double *unused, double *out_8437989887064667391); -void live_h_9(double *state, double *unused, double *out_2016376091952434025); -void live_H_9(double *state, double *unused, double *out_2721535251380436755); -void live_h_10(double *state, double *unused, double *out_8252027734007822314); -void live_H_10(double *state, double *unused, double *out_1022365631619946756); -void live_h_12(double *state, double *unused, double *out_490832941153373832); -void live_H_12(double *state, double *unused, double *out_4989297778612922430); -void live_h_35(double *state, double *unused, double *out_851812883202032952); -void live_H_35(double *state, double *unused, double *out_6642092129272276849); -void live_h_32(double *state, double *unused, double *out_7198045605532929596); -void live_H_32(double *state, double *unused, double *out_6510927344331536380); -void live_h_13(double *state, double *unused, double *out_6813957582124674447); -void live_H_13(double *state, double *unused, double *out_7851984426394690165); -void live_h_14(double *state, double *unused, double *out_2016376091952434025); -void live_H_14(double *state, double *unused, double *out_2721535251380436755); -void live_h_33(double *state, double *unused, double *out_1521077794722315231); -void live_H_33(double *state, double *unused, double *out_3491535124633419245); +void live_H(double *in_vec, double *out_3981994659674141472); +void live_err_fun(double *nom_x, double *delta_x, double *out_3356596097038928074); +void live_inv_err_fun(double *nom_x, double *true_x, double *out_4391465575185495497); +void live_H_mod_fun(double *state, double *out_4990766548554672415); +void live_f_fun(double *state, double dt, double *out_3056772812413117361); +void live_F_fun(double *state, double dt, double *out_3001170024940786206); +void live_h_4(double *state, double *unused, double *out_4623444193655221191); +void live_H_4(double *state, double *unused, double *out_2603623762087390332); +void live_h_9(double *state, double *unused, double *out_4168973980757166041); +void live_H_9(double *state, double *unused, double *out_2362434115457799687); +void live_h_10(double *state, double *unused, double *out_3520412221597307166); +void live_H_10(double *state, double *unused, double *out_7396015770213526348); +void live_h_12(double *state, double *unused, double *out_7977792700499542139); +void live_H_12(double *state, double *unused, double *out_2415832645944571463); +void live_h_35(double *state, double *unused, double *out_3752355986187417342); +void live_H_35(double *state, double *unused, double *out_763038295285217044); +void live_h_32(double *state, double *unused, double *out_2897039262415537399); +void live_H_32(double *state, double *unused, double *out_6564342667492829602); +void live_h_13(double *state, double *unused, double *out_7535737061045930452); +void live_H_13(double *state, double *unused, double *out_3042894167287587122); +void live_h_14(double *state, double *unused, double *out_4168973980757166041); +void live_H_14(double *state, double *unused, double *out_2362434115457799687); +void live_h_33(double *state, double *unused, double *out_3687821174760154582); +void live_H_33(double *state, double *unused, double *out_3913595299924074648); void live_predict(double *in_x, double *in_P, double *in_Q, double dt); } \ No newline at end of file diff --git a/selfdrive/locationd/paramsd.py b/selfdrive/locationd/paramsd.py index 1826ea456..de1265f0d 100755 --- a/selfdrive/locationd/paramsd.py +++ b/selfdrive/locationd/paramsd.py @@ -198,8 +198,10 @@ def main(sm=None, pm=None): learner = ParamsLearner(CP, CP.steerRatio, 1.0, 0.0) x = learner.kf.x - angle_offset_average = clip(math.degrees(x[States.ANGLE_OFFSET]), angle_offset_average - MAX_ANGLE_OFFSET_DELTA, angle_offset_average + MAX_ANGLE_OFFSET_DELTA) - angle_offset = clip(math.degrees(x[States.ANGLE_OFFSET] + x[States.ANGLE_OFFSET_FAST]), angle_offset - MAX_ANGLE_OFFSET_DELTA, angle_offset + MAX_ANGLE_OFFSET_DELTA) + angle_offset_average = clip(math.degrees(x[States.ANGLE_OFFSET]), + angle_offset_average - MAX_ANGLE_OFFSET_DELTA, angle_offset_average + MAX_ANGLE_OFFSET_DELTA) + angle_offset = clip(math.degrees(x[States.ANGLE_OFFSET] + x[States.ANGLE_OFFSET_FAST]), + angle_offset - MAX_ANGLE_OFFSET_DELTA, angle_offset + MAX_ANGLE_OFFSET_DELTA) roll = clip(float(x[States.ROAD_ROLL]), roll - ROLL_MAX_DELTA, roll + ROLL_MAX_DELTA) roll_std = float(P[States.ROAD_ROLL]) # Account for the opposite signs of the yaw rates diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index e51c751e8..430dd2d05 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -75,6 +75,7 @@ def manager_init() -> None: ("dp_device_dm_unavailable", "0"), ("dp_long_taco", "0"), ("dp_long_stock_mode", "0"), + ("dp_long_missing_lead_warning", "0"), ] if not PC: default_params.append(("LastUpdateTime", datetime.datetime.utcnow().isoformat().encode('utf8'))) diff --git a/selfdrive/modeld/_dmonitoringmodeld b/selfdrive/modeld/_dmonitoringmodeld index b358711ca..049d73ff4 100755 Binary files a/selfdrive/modeld/_dmonitoringmodeld and b/selfdrive/modeld/_dmonitoringmodeld differ diff --git a/selfdrive/modeld/_modeld b/selfdrive/modeld/_modeld index 27a4f6fd6..d57ad95a1 100755 Binary files a/selfdrive/modeld/_modeld and b/selfdrive/modeld/_modeld differ diff --git a/selfdrive/modeld/_navmodeld b/selfdrive/modeld/_navmodeld index e8048003a..3c786bc23 100755 Binary files a/selfdrive/modeld/_navmodeld and b/selfdrive/modeld/_navmodeld differ diff --git a/selfdrive/modeld/models/driving.h b/selfdrive/modeld/models/driving.h index ac524e3d2..53f81ccde 100644 --- a/selfdrive/modeld/models/driving.h +++ b/selfdrive/modeld/models/driving.h @@ -280,6 +280,7 @@ struct ModelState { #endif #ifdef NAV float nav_features[NAV_FEATURE_LEN] = {}; + float nav_instructions[NAV_INSTRUCTION_LEN] = {}; #endif }; @@ -290,8 +291,8 @@ struct PublishState { }; void model_init(ModelState* s, cl_device_id device_id, cl_context context); -ModelOutput *model_eval_frame(ModelState* s, VisionBuf* buf, VisionBuf* buf_wide, - const mat3 &transform, const mat3 &transform_wide, float *desire_in, bool is_rhd, float *driving_style, float *nav_features, bool prepare_only); +ModelOutput *model_eval_frame(ModelState* s, VisionBuf* buf, VisionBuf* buf_wide, const mat3 &transform, const mat3 &transform_wide, + float *desire_in, bool is_rhd, float *driving_style, float *nav_features, float *nav_instructions, bool prepare_only); void model_free(ModelState* s); void model_publish(PubMaster &pm, uint32_t vipc_frame_id, uint32_t vipc_frame_id_extra, uint32_t frame_id, float frame_drop, const ModelOutput &net_outputs, ModelState &s, PublishState &ps, uint64_t timestamp_eof, uint64_t timestamp_llk, diff --git a/selfdrive/modeld/models/nav.h b/selfdrive/modeld/models/nav.h index c6a517f55..800abec25 100644 --- a/selfdrive/modeld/models/nav.h +++ b/selfdrive/modeld/models/nav.h @@ -9,6 +9,7 @@ constexpr int NAV_INPUT_SIZE = 256*256; constexpr int NAV_FEATURE_LEN = 256; +constexpr int NAV_INSTRUCTION_LEN = 150; constexpr int NAV_DESIRE_LEN = 32; struct NavModelOutputXY { diff --git a/selfdrive/modeld/models/supercombo.thneed b/selfdrive/modeld/models/supercombo.thneed index 4293c3c84..fbab8ceea 100644 Binary files a/selfdrive/modeld/models/supercombo.thneed and b/selfdrive/modeld/models/supercombo.thneed differ diff --git a/selfdrive/modeld/thneed/lib.py b/selfdrive/modeld/thneed/lib.py index 38ef3f426..c058638fa 100644 --- a/selfdrive/modeld/thneed/lib.py +++ b/selfdrive/modeld/thneed/lib.py @@ -1,4 +1,5 @@ -import struct, json +import struct +import json def load_thneed(fn): with open(fn, "rb") as f: diff --git a/selfdrive/monitoring/driver_monitor.py b/selfdrive/monitoring/driver_monitor.py index a2cddc246..7d7a55e5d 100644 --- a/selfdrive/monitoring/driver_monitor.py +++ b/selfdrive/monitoring/driver_monitor.py @@ -212,7 +212,8 @@ class DriverStatus(): distracted_types.append(DistractedType.DISTRACTED_BLINK) if self.ee1_calibrated: - ee1_dist = self.eev1 > max(min(self.ee1_offseter.filtered_stat.M, self.settings._EE_MAX_OFFSET1), self.settings._EE_MIN_OFFSET1) * self.settings._EE_THRESH12 + ee1_dist = self.eev1 > max(min(self.ee1_offseter.filtered_stat.M, self.settings._EE_MAX_OFFSET1), self.settings._EE_MIN_OFFSET1) \ + * self.settings._EE_THRESH12 else: ee1_dist = self.eev1 > self.settings._EE_THRESH11 # if self.ee2_calibrated: @@ -263,14 +264,17 @@ class DriverStatus(): self.pose.yaw_std = driver_data.faceOrientationStd[1] model_std_max = max(self.pose.pitch_std, self.pose.yaw_std) self.pose.low_std = model_std_max < self.settings._POSESTD_THRESHOLD - self.blink.left_blink = driver_data.leftBlinkProb * (driver_data.leftEyeProb > self.settings._EYE_THRESHOLD) * (driver_data.sunglassesProb < self.settings._SG_THRESHOLD) - self.blink.right_blink = driver_data.rightBlinkProb * (driver_data.rightEyeProb > self.settings._EYE_THRESHOLD) * (driver_data.sunglassesProb < self.settings._SG_THRESHOLD) + self.blink.left_blink = driver_data.leftBlinkProb * (driver_data.leftEyeProb > self.settings._EYE_THRESHOLD) \ + * (driver_data.sunglassesProb < self.settings._SG_THRESHOLD) + self.blink.right_blink = driver_data.rightBlinkProb * (driver_data.rightEyeProb > self.settings._EYE_THRESHOLD) \ + * (driver_data.sunglassesProb < self.settings._SG_THRESHOLD) self.eev1 = driver_data.notReadyProb[0] self.eev2 = driver_data.readyProb[0] self.distracted_types = self._get_distracted_types() - self.driver_distracted = (DistractedType.DISTRACTED_E2E in self.distracted_types or DistractedType.DISTRACTED_POSE in self.distracted_types or DistractedType.DISTRACTED_BLINK in self.distracted_types) and \ - driver_data.faceProb > self.settings._FACE_THRESHOLD and self.pose.low_std + self.driver_distracted = (DistractedType.DISTRACTED_E2E in self.distracted_types or DistractedType.DISTRACTED_POSE in self.distracted_types + or DistractedType.DISTRACTED_BLINK in self.distracted_types) \ + and driver_data.faceProb > self.settings._FACE_THRESHOLD and self.pose.low_std self.driver_distraction_filter.update(self.driver_distracted) # update offseter @@ -306,7 +310,8 @@ class DriverStatus(): self._reset_awareness() return # only restore awareness when paying attention and alert is not red - self.awareness = min(self.awareness + ((self.settings._RECOVERY_FACTOR_MAX-self.settings._RECOVERY_FACTOR_MIN)*(1.-self.awareness)+self.settings._RECOVERY_FACTOR_MIN)*self.step_change, 1.) + self.awareness = min(self.awareness + ((self.settings._RECOVERY_FACTOR_MAX-self.settings._RECOVERY_FACTOR_MIN)* + (1.-self.awareness)+self.settings._RECOVERY_FACTOR_MIN)*self.step_change, 1.) if self.awareness == 1.: self.awareness_passive = min(self.awareness_passive + self.step_change, 1.) # don't display alert banner when awareness is recovering and has cleared orange diff --git a/selfdrive/navd/helpers.py b/selfdrive/navd/helpers.py index 011a6c5fb..050c57192 100644 --- a/selfdrive/navd/helpers.py +++ b/selfdrive/navd/helpers.py @@ -135,32 +135,33 @@ def field_valid(dat: dict, field: str) -> bool: return field in dat and dat[field] is not None -def parse_banner_instructions(instruction: Any, banners: Any, distance_to_maneuver: float = 0.0) -> None: +def parse_banner_instructions(banners: Any, distance_to_maneuver: float = 0.0) -> Optional[Dict[str, Any]]: if not len(banners): - return + return None - current_banner = banners[0] + instruction = {} # A segment can contain multiple banners, find one that we need to show now + current_banner = banners[0] for banner in banners: if distance_to_maneuver < banner['distanceAlongGeometry']: current_banner = banner # Only show banner when close enough to maneuver - instruction.showFull = distance_to_maneuver < current_banner['distanceAlongGeometry'] + instruction['showFull'] = distance_to_maneuver < current_banner['distanceAlongGeometry'] # Primary p = current_banner['primary'] if field_valid(p, 'text'): - instruction.maneuverPrimaryText = p['text'] + instruction['maneuverPrimaryText'] = p['text'] if field_valid(p, 'type'): - instruction.maneuverType = p['type'] + instruction['maneuverType'] = p['type'] if field_valid(p, 'modifier'): - instruction.maneuverModifier = p['modifier'] + instruction['maneuverModifier'] = p['modifier'] # Secondary if field_valid(current_banner, 'secondary'): - instruction.maneuverSecondaryText = current_banner['secondary']['text'] + instruction['maneuverSecondaryText'] = current_banner['secondary']['text'] # Lane lines if field_valid(current_banner, 'sub'): @@ -178,4 +179,6 @@ def parse_banner_instructions(instruction: Any, banners: Any, distance_to_maneuv lane['activeDirection'] = string_to_direction(component['active_direction']) lanes.append(lane) - instruction.lanes = lanes + instruction['lanes'] = lanes + + return instruction diff --git a/selfdrive/navd/libmaprender.so b/selfdrive/navd/libmaprender.so index 96c904892..d2f924f79 100755 Binary files a/selfdrive/navd/libmaprender.so and b/selfdrive/navd/libmaprender.so differ diff --git a/selfdrive/navd/map_renderer.py b/selfdrive/navd/map_renderer.py index aa5682169..57d5e0593 100755 --- a/selfdrive/navd/map_renderer.py +++ b/selfdrive/navd/map_renderer.py @@ -74,7 +74,7 @@ if __name__ == "__main__": renderer = lib.map_renderer_init(ffi.NULL, ffi.NULL) wait_ready(lib, renderer) - geometry = r"{yxk}@|obn~Eg@@eCFqc@J{RFw@?kA@gA?q|@Riu@NuJBgi@ZqVNcRBaPBkG@iSD{I@_H@cH?gG@mG@gG?aD@{LDgDDkVVyQLiGDgX@q_@@qI@qKhS{R~[}NtYaDbGoIvLwNfP_b@|f@oFnF_JxHel@bf@{JlIuxAlpAkNnLmZrWqFhFoh@jd@kX|TkJxH_RnPy^|[uKtHoZ~Um`DlkCorC``CuShQogCtwB_ThQcr@fk@sVrWgRhVmSb\\oj@jxA{Qvg@u]tbAyHzSos@xjBeKbWszAbgEc~@~jCuTrl@cYfo@mRn\\_m@v}@ij@jp@om@lk@y|A`pAiXbVmWzUod@xj@wNlTw}@|uAwSn\\kRfYqOdS_IdJuK`KmKvJoOhLuLbHaMzGwO~GoOzFiSrEsOhD}PhCqw@vJmnAxSczA`Vyb@bHk[fFgl@pJeoDdl@}}@zIyr@hG}X`BmUdBcM^aRR}Oe@iZc@mR_@{FScHxAn_@vz@zCzH~GjPxAhDlB~DhEdJlIbMhFfG|F~GlHrGjNjItLnGvQ~EhLnBfOn@p`@AzAAvn@CfC?fc@`@lUrArStCfSxEtSzGxM|ElFlBrOzJlEbDnC~BfDtCnHjHlLvMdTnZzHpObOf^pKla@~G|a@dErg@rCbj@zArYlj@ttJ~AfZh@r]LzYg@`TkDbj@gIdv@oE|i@kKzhA{CdNsEfOiGlPsEvMiDpLgBpHyB`MkB|MmArPg@|N?|P^rUvFz~AWpOCdAkB|PuB`KeFfHkCfGy@tAqC~AsBPkDs@uAiAcJwMe@s@eKkPMoXQux@EuuCoH?eI?Kas@}Dy@wAUkMOgDL" + geometry = r"{yxk}@|obn~Eg@@eCFqc@J{RFw@?kA@gA?q|@Riu@NuJBgi@ZqVNcRBaPBkG@iSD{I@_H@cH?gG@mG@gG?aD@{LDgDDkVVyQLiGDgX@q_@@qI@qKhS{R~[}NtYaDbGoIvLwNfP_b@|f@oFnF_JxHel@bf@{JlIuxAlpAkNnLmZrWqFhFoh@jd@kX|TkJxH_RnPy^|[uKtHoZ~Um`DlkCorC``CuShQogCtwB_ThQcr@fk@sVrWgRhVmSb\\oj@jxA{Qvg@u]tbAyHzSos@xjBeKbWszAbgEc~@~jCuTrl@cYfo@mRn\\_m@v}@ij@jp@om@lk@y|A`pAiXbVmWzUod@xj@wNlTw}@|uAwSn\\kRfYqOdS_IdJuK`KmKvJoOhLuLbHaMzGwO~GoOzFiSrEsOhD}PhCqw@vJmnAxSczA`Vyb@bHk[fFgl@pJeoDdl@}}@zIyr@hG}X`BmUdBcM^aRR}Oe@iZc@mR_@{FScHxAn_@vz@zCzH~GjPxAhDlB~DhEdJlIbMhFfG|F~GlHrGjNjItLnGvQ~EhLnBfOn@p`@AzAAvn@CfC?fc@`@lUrArStCfSxEtSzGxM|ElFlBrOzJlEbDnC~BfDtCnHjHlLvMdTnZzHpObOf^pKla@~G|a@dErg@rCbj@zArYlj@ttJ~AfZh@r]LzYg@`TkDbj@gIdv@oE|i@kKzhA{CdNsEfOiGlPsEvMiDpLgBpHyB`MkB|MmArPg@|N?|P^rUvFz~AWpOCdAkB|PuB`KeFfHkCfGy@tAqC~AsBPkDs@uAiAcJwMe@s@eKkPMoXQux@EuuCoH?eI?Kas@}Dy@wAUkMOgDL" # noqa: E501 lib.map_renderer_update_route(renderer, geometry.encode()) POSITIONS = [ diff --git a/selfdrive/navd/navd.py b/selfdrive/navd/navd.py index 70a6b62ae..3a8897e8e 100755 --- a/selfdrive/navd/navd.py +++ b/selfdrive/navd/navd.py @@ -226,7 +226,32 @@ class RouteEngine: # Current instruction msg.navInstruction.maneuverDistance = distance_to_maneuver_along_geometry - parse_banner_instructions(msg.navInstruction, banner_step['bannerInstructions'], distance_to_maneuver_along_geometry) + instruction = parse_banner_instructions(banner_step['bannerInstructions'], distance_to_maneuver_along_geometry) + if instruction is not None: + for k,v in instruction.items(): + setattr(msg.navInstruction, k, v) + + # All instructions + maneuvers = [] + for i, step_i in enumerate(self.route): + if i < self.step_idx: + distance_to_maneuver = -sum(self.route[j]['distance'] for j in range(i+1, self.step_idx)) - along_geometry + elif i == self.step_idx: + distance_to_maneuver = distance_to_maneuver_along_geometry + else: + distance_to_maneuver = distance_to_maneuver_along_geometry + sum(self.route[j]['distance'] for j in range(self.step_idx+1, i+1)) + + instruction = parse_banner_instructions(step_i['bannerInstructions'], distance_to_maneuver) + if instruction is None: + continue + maneuver = {'distance': distance_to_maneuver} + if 'maneuverType' in instruction: + maneuver['type'] = instruction['maneuverType'] + if 'maneuverModifier' in instruction: + maneuver['modifier'] = instruction['maneuverModifier'] + maneuvers.append(maneuver) + + msg.navInstruction.allManeuvers = maneuvers # Compute total remaining time and distance remaining = 1.0 - along_geometry / max(step['distance'], 1) diff --git a/selfdrive/navd/tests/test_map_renderer.py b/selfdrive/navd/tests/test_map_renderer.py index 64e80f93d..e3eda8bde 100755 --- a/selfdrive/navd/tests/test_map_renderer.py +++ b/selfdrive/navd/tests/test_map_renderer.py @@ -30,7 +30,7 @@ class MapBoxInternetDisabledRequestHandler(http.server.BaseHTTPRequestHandler): def setup(self): if self.INTERNET_ACTIVE: super().setup() - + def handle(self): if self.INTERNET_ACTIVE: super().handle() @@ -38,7 +38,7 @@ class MapBoxInternetDisabledRequestHandler(http.server.BaseHTTPRequestHandler): def finish(self): if self.INTERNET_ACTIVE: super().finish() - + def do_GET(self): url = f'https://api.mapbox.com{self.path}' @@ -50,7 +50,7 @@ class MapBoxInternetDisabledRequestHandler(http.server.BaseHTTPRequestHandler): self.send_response(r.status_code) self.end_headers() self.wfile.write(r.content) - + def log_message(self, *args: Any) -> None: return @@ -62,13 +62,13 @@ class MapBoxInternetDisabledServer(threading.Thread): def run(self): self.server = http.server.HTTPServer(("127.0.0.1", 5000), MapBoxInternetDisabledRequestHandler) self.server.serve_forever() - + def stop(self): self.server.shutdown() def disable_internet(self): MapBoxInternetDisabledRequestHandler.INTERNET_ACTIVE = False - + def enable_internet(self): MapBoxInternetDisabledRequestHandler.INTERNET_ACTIVE = True @@ -110,7 +110,7 @@ class TestMapRenderer(unittest.TestCase): assert self.vipc.connect(False) self.vipc.recv() - + def _run_test(self, expect_valid, location=LOCATION1): starting_frame_id = None @@ -127,7 +127,7 @@ class TestMapRenderer(unittest.TestCase): else: prev_valid = self.sm.valid['mapRenderState'] prev_frame_id = self.sm['mapRenderState'].frameId - + if starting_frame_id is None: starting_frame_id = prev_frame_id @@ -172,7 +172,7 @@ class TestMapRenderer(unittest.TestCase): self.server.disable_internet() self._setup_test() self._run_test(False) - + def test_recover_from_no_internet(self): self._setup_test() self._run_test(True) diff --git a/selfdrive/test/setup_device_ci.sh b/selfdrive/test/setup_device_ci.sh index 7137bfad2..4ac970740 100755 --- a/selfdrive/test/setup_device_ci.sh +++ b/selfdrive/test/setup_device_ci.sh @@ -55,7 +55,9 @@ if [ ! -d "$SOURCE_DIR" ]; then fi cd $SOURCE_DIR -rm -f .git/index.lock +# cleanup orphaned locks +find .git -type f -name "*.lock" -exec rm {} + + git reset --hard git fetch --no-tags --no-recurse-submodules -j4 --verbose --depth 1 origin $GIT_COMMIT find . -maxdepth 1 -not -path './.git' -not -name '.' -not -name '..' -exec rm -rf '{}' \; diff --git a/selfdrive/thermald/thermald.py b/selfdrive/thermald/thermald.py index 2fbdfc5e9..104c9a982 100755 --- a/selfdrive/thermald/thermald.py +++ b/selfdrive/thermald/thermald.py @@ -36,7 +36,8 @@ DISCONNECT_TIMEOUT = 5. # wait 5 seconds before going offroad after disconnect PANDA_STATES_TIMEOUT = int(1000 * 1.5 * DT_TRML) # 1.5x the expected pandaState frequency ThermalBand = namedtuple("ThermalBand", ['min_temp', 'max_temp']) -HardwareState = namedtuple("HardwareState", ['network_type', 'network_info', 'network_strength', 'network_stats', 'network_metered', 'nvme_temps', 'modem_temps']) +HardwareState = namedtuple("HardwareState", ['network_type', 'network_info', 'network_strength', 'network_stats', + 'network_metered', 'nvme_temps', 'modem_temps']) # List of thermal bands. We will stay within this region as long as we are within the bounds. # When exiting the bounds, we'll jump to the lower or higher band. Bands are ordered in the dict. diff --git a/selfdrive/ui/_ui b/selfdrive/ui/_ui index d100a7008..457b7aa30 100755 Binary files a/selfdrive/ui/_ui and b/selfdrive/ui/_ui differ diff --git a/selfdrive/ui/qt/spinner b/selfdrive/ui/qt/spinner index 82d85580a..cc20b659e 100755 Binary files a/selfdrive/ui/qt/spinner and b/selfdrive/ui/qt/spinner differ diff --git a/selfdrive/ui/qt/text b/selfdrive/ui/qt/text index a90e62bb0..576b86fc4 100755 Binary files a/selfdrive/ui/qt/text and b/selfdrive/ui/qt/text differ diff --git a/selfdrive/ui/soundd/_soundd b/selfdrive/ui/soundd/_soundd index 03daada34..d94df108a 100755 Binary files a/selfdrive/ui/soundd/_soundd and b/selfdrive/ui/soundd/_soundd differ diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index d03c27d17..770748ec6 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -371,6 +371,14 @@ SPT - Sport tune. Reboot Required. + + *β* Enable Otisserv + + + + When enabled, you will be able to access some features remotely through dragonpilot.org. + + DeclinePage diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index d9dd3e3d9..66ec2d8e6 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -371,6 +371,14 @@ SPT - Sport tune. Reboot Required. + + *β* Enable Otisserv + + + + When enabled, you will be able to access some features remotely through dragonpilot.org. + + DeclinePage diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index acb932e7c..3c3a346a0 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -371,6 +371,14 @@ SPT - Sport tune. Reboot Required. + + *β* Enable Otisserv + + + + When enabled, you will be able to access some features remotely through dragonpilot.org. + + DeclinePage diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index 06423de92..ac3ccbd72 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -371,6 +371,14 @@ SPT - Sport tune. Reboot Required. + + *β* Enable Otisserv + + + + When enabled, you will be able to access some features remotely through dragonpilot.org. + + DeclinePage diff --git a/selfdrive/ui/translations/main_zh-CHS.qm b/selfdrive/ui/translations/main_zh-CHS.qm index 653258bde..05a0c8850 100644 Binary files a/selfdrive/ui/translations/main_zh-CHS.qm and b/selfdrive/ui/translations/main_zh-CHS.qm differ diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index 5cdd3e4be..4d4bcb097 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -195,7 +195,7 @@ Reboot required. Standard - + 标准 On-Road @@ -371,6 +371,14 @@ SPT - Sport tune. Reboot Required. + + *β* Enable Otisserv + + + + When enabled, you will be able to access some features remotely through dragonpilot.org. + + DeclinePage @@ -391,27 +399,27 @@ Reboot Required. DestinationWidget Home - + 住家 Work - + 工作 No destination set - + 尚未设置目的地 No %1 location set - + 尚未设置 %1 的位置 home - + 住家 work - + 工作 @@ -462,7 +470,7 @@ Reboot Required. Review the rules, features, and limitations of openpilot - 查看openpilot的使用规则,以及其功能和限制。 + 查看 openpilot 的使用规则,以及其功能和限制 Are you sure you want to review the training guide? @@ -622,7 +630,7 @@ Reboot Required. MapETA eta - 埃塔 + 抵达 min @@ -664,11 +672,11 @@ Reboot Required. MapSettings NAVIGATION - + 导航 Manage at connect.comma.ai - + 请在 connect.comma.ai 上管理 @@ -683,7 +691,7 @@ Reboot Required. Waiting for route - + 等待路线 @@ -720,56 +728,57 @@ Reboot Required. OffroadAlert Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1 - + 请立即连接网络检查更新。如果不连接网络,openpilot 将在 %1 后便无法使用 Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates. - + 请连接至互联网以检查更新。在连接至互联网并完成更新检查之前,openpilot 将不会自动启动。 Unable to download updates %1 - + 无法下载更新 +%1 Invalid date and time settings, system won't start. Connect to internet to set time. - + 日期和时间设置无效,系统无法启动。请连接至互联网以设置时间。 Taking camera snapshots. System won't start until finished. - + 正在使用相机拍摄中。在完成之前,系统将无法启动。 An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install. - + 一个针对您设备的操作系统更新正在后台下载中。当更新准备好安装时,您将收到提示进行更新。 Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support. - + 设备注册失败。它将无法连接或上传至 comma.ai 服务器,并且无法获得 comma.ai 的支持。如果这是一个官方设备,请访问 https://comma.ai/support。 NVMe drive not mounted. - + NVMe固态硬盘未被挂载。 Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe. - + 检测到不支持的 NVMe 固态硬盘。您的设备因为使用了不支持的 NVMe 固态硬盘可能会消耗更多电力并更易过热。 openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai. - + openpilot 无法识别您的车辆。您的车辆可能未被支持,或是其电控单元 (ECU) 未被识别。请提交一个 Pull Request 为您的车辆添加正确的固件版本。需要帮助吗?请加入 discord.comma.ai。 openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai. - + openpilot 无法识别您的车辆。请检查线路是否正确安装并确保所有的连接都牢固,特别是确保 comma power 完全插入车辆的 OBD-II 接口。需要帮助吗?请加入 discord.comma.ai。 openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield. - + openpilot 检测到设备的安装位置发生变化。请确保设备完全安装在支架上,并确保支架牢固地固定在挡风玻璃上。 Device temperature too high. System cooling down before starting. Current internal component temperature: %1 - + 设备温度过高。系统正在冷却中,等冷却完毕后才会启动。目前内部组件温度:%1 @@ -837,15 +846,15 @@ Reboot Required. 24/7 LTE connectivity - + 全天候 LTE 連線 Turn-by-turn navigation - + 领航功能 1 year of drive storage - + 一年的行驶记录储存空间 @@ -924,16 +933,17 @@ Reboot Required. Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. - + 无法挂载数据分区。分区可能已经损坏。请确认是否要删除并重新设置。 Press confirm to erase all content and settings. Press cancel to resume boot. - + 按下确认以删除所有内容及设置。按下取消来继续开机。 Resetting device... This may take up to a minute. - + 设备重置中… +这可能需要一分钟的时间。 @@ -1039,11 +1049,11 @@ This may take up to a minute. No custom software found at this URL. - + 在此网址找不到自定义软件。 Something went wrong. Reboot the device. - + 发生了一些错误。请重新启动您的设备。 @@ -1200,23 +1210,23 @@ This may take up to a minute. failed to check for update - + 检查更新失败 up to date, last checked %1 - + 已经是最新版本,上次检查时间为 %1 DOWNLOAD - + 下载 update available - + 有可用的更新 never - + 从未更新 @@ -1364,63 +1374,63 @@ This may take up to a minute. openpilot longitudinal control may come in a future update. - + openpilot纵向控制可能会在未来的更新中提供。 openpilot Longitudinal Control (Alpha) - + openpilot纵向控制(Alpha 版) WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). - + 警告:此车辆的 openpilot 纵向控制功能目前处于Alpha版本,使用此功能将会停用自动紧急制动(AEB)功能。 On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. - + 在这辆车上,openpilot 默认使用车辆内建的主动巡航控制(ACC),而非 openpilot 的纵向控制。启用此项功能可切换至 openpilot 的纵向控制。当启用 openpilot 纵向控制 Alpha 版本时,建议同时启用实验性模式(Experimental mode)。 Aggressive - + 积极 Standard - + 标准 Relaxed - + 舒适 Driving Personality - + 驾驶风格 Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. - + 推荐使用标准模式。在积极模式中,openpilot 会更靠近前车并在加速和刹车方面更积极。在舒适模式中,openpilot 会与前车保持较远的距离。 An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches. - + 在正式(release)版本以外的分支上,可以测试 openpilot 纵向控制的 Alpha 版本以及实验模式。 Navigate on openpilot - + Navigate on openpilot Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode. - + 启用 openpilot 纵向控制(alpha)开关以允许实验模式。 End-to-End Longitudinal Control - + 端到端纵向控制 When navigation has a destination, openpilot will input the map information into the model. This provides useful context for the model and allows openpilot to keep left or right appropriately at forks/exits. Lane change behavior is unchanged and still activated by the driver. This is an alpha quality feature; mistakes should be expected, particularly around exits and forks. These mistakes can include unintended laneline crossings, late exit taking, driving towards dividing barriers in the gore areas, etc. - + 当导航有目的地时,openpilot 将输入地图信息到模型中。这为模型提供了有用的背景信息,使 openpilot 能够在叉路/出口时适当地保持左侧或右侧行驶。车道变换行为保持不变,仍由驾驶员激活。这是一个 Alpha 版的功能;可能会出现错误,特别是在出口和分叉处。这些错误可能包括意外的车道越界、晚出口、朝着分隔栏驶向安全地带等。 The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green. - + 行驶画面将在低速时切换到道路朝向的广角摄像头,以更好地显示一些转弯。实验模式标志也将显示在右上角。当设置了导航目的地并且驾驶模型正在使用它作为输入时,地图上的驾驶路径将变为绿色。 @@ -1462,23 +1472,23 @@ This may take up to a minute. WiFiPromptWidget Setup Wi-Fi - + 设置 Wi-Fi 连接 Connect to Wi-Fi to upload driving data and help improve openpilot - + 请连接至 Wi-Fi 上传驾驶数据以协助改进openpilot Open Settings - + 打开设置 Ready to upload - + 准备好上传 Training data will be pulled periodically while your device is on Wi-Fi - + 训练数据将定期通过 Wi-Fi 上载 diff --git a/selfdrive/ui/translations/main_zh-CHT.qm b/selfdrive/ui/translations/main_zh-CHT.qm index 31f8cfaae..61cdbe952 100644 Binary files a/selfdrive/ui/translations/main_zh-CHT.qm and b/selfdrive/ui/translations/main_zh-CHT.qm differ diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 340d0630b..13cfbc419 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -371,6 +371,14 @@ SPT - Sport tune. Reboot Required. + + *β* Enable Otisserv + + + + When enabled, you will be able to access some features remotely through dragonpilot.org. + + DeclinePage @@ -668,7 +676,7 @@ Reboot Required. Manage at connect.comma.ai - 請在 connect.comma.ai 上進行管理 + 請在 connect.comma.ai 上管理 @@ -683,7 +691,7 @@ Reboot Required. Waiting for route - + 等待路線 @@ -766,7 +774,7 @@ Reboot Required. openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield. - openpilot偵測到設備的安裝位置發生變化。請確保設備完全安裝在支架上,並確保支架牢固地固定在擋風玻璃上。 + openpilot 偵測到設備的安裝位置發生變化。請確保設備完全安裝在支架上,並確保支架牢固地固定在擋風玻璃上。 Device temperature too high. System cooling down before starting. Current internal component temperature: %1 @@ -1374,11 +1382,11 @@ This may take up to a minute. WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). - 警告:此車輛的 Openpilot 縱向控制功能目前處於 Alpha 版本,使用此功能將會停用自動緊急制動(AEB)功能。 + 警告:此車輛的 openpilot 縱向控制功能目前處於 Alpha 版本,使用此功能將會停用自動緊急制動(AEB)功能。 On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. - 在這輛車上,Openpilot 預設使用車輛內建的主動巡航控制(ACC),而非 Openpilot 的縱向控制。啟用此項功能可切換至 Openpilot 的縱向控制。當啟用 Openpilot 縱向控制 Alpha 版本時,建議同時啟用實驗性模式(Experimental mode)。 + 在這輛車上,openpilot 預設使用車輛內建的主動巡航控制(ACC),而非 openpilot 的縱向控制。啟用此項功能可切換至 openpilot 的縱向控制。當啟用 openpilot 縱向控制 Alpha 版本時,建議同時啟用實驗性模式(Experimental mode)。 Aggressive @@ -1402,27 +1410,27 @@ This may take up to a minute. An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches. - 在正式 (release) 版以外的分支上可以測試 openpilot 縱向控制的 Alpha 版本,以及實驗模式。 + 在正式 (release) 版以外的分支上可以測試 openpilot 縱向控制的 Alpha 版本以及實驗模式。 Navigate on openpilot - + Navigate on openpilot Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode. - + 啟用 openpilot 縱向控制(alpha)切換以允許實驗模式。 End-to-End Longitudinal Control - + 端到端縱向控制 When navigation has a destination, openpilot will input the map information into the model. This provides useful context for the model and allows openpilot to keep left or right appropriately at forks/exits. Lane change behavior is unchanged and still activated by the driver. This is an alpha quality feature; mistakes should be expected, particularly around exits and forks. These mistakes can include unintended laneline crossings, late exit taking, driving towards dividing barriers in the gore areas, etc. - + 当导航有目的地时,openpilot 将把地图信息输入模型中。这为模型提供了有用的背景信息,使 openpilot 能够在叉路/出口时适当地保持左侧或右侧行驶。车道变换行为保持不变,仍由驾驶员激活。这是一个 Alpha 版的功能;可能会出现错误,特别是在出口和分叉处。这些错误可能包括意外的车道越界、晚出口、朝着分隔栏驶向分隔带区域等。 The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green. - + 行駛畫面將在低速時切換至道路朝向的廣角鏡頭,以更好地顯示一些轉彎。實驗模式圖標也將顯示在右上角。當設定了導航目的地並且行駛模型正在將其作為輸入時,地圖上的行駛路徑將變為綠色。 @@ -1468,7 +1476,7 @@ This may take up to a minute. Connect to Wi-Fi to upload driving data and help improve openpilot - 請連接至 Wi-Fi 以上傳駕駛數據,並協助改進 openpilot + 請連接至 Wi-Fi 傳駕駛數據以協助改進 openpilot Open Settings @@ -1476,11 +1484,11 @@ This may take up to a minute. Ready to upload - + 準備好上傳 Training data will be pulled periodically while your device is on Wi-Fi - + 訓練數據將定期經過 Wi-Fi 上傳 diff --git a/selfdrive/ui/update_translations.py b/selfdrive/ui/update_translations.py index 3de6e0f27..e8460c427 100755 --- a/selfdrive/ui/update_translations.py +++ b/selfdrive/ui/update_translations.py @@ -46,7 +46,8 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="Update translation files for UI", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("--vanish", action="store_true", help="Remove translations with source text no longer found") - parser.add_argument("--plural-only", type=str, nargs="*", default=["main_en"], help="Translation codes to only create plural translations for (ie. the base language)") + parser.add_argument("--plural-only", type=str, nargs="*", default=["main_en"], + help="Translation codes to only create plural translations for (ie. the base language)") args = parser.parse_args() update_translations(args.vanish, args.plural_only) diff --git a/selfdrive/updated.py b/selfdrive/updated.py index e2a858724..73f4f07aa 100755 --- a/selfdrive/updated.py +++ b/selfdrive/updated.py @@ -444,7 +444,7 @@ def main() -> None: if not system_time_valid(): wait_helper.sleep(60) continue - + update_failed_count += 1 # check for update diff --git a/system/camerad/camerad b/system/camerad/camerad index 4d6910a4f..13a1b03dc 100755 Binary files a/system/camerad/camerad and b/system/camerad/camerad differ diff --git a/system/camerad/cameras/camera_util.h b/system/camerad/cameras/camera_util.h index e408f6c0e..b36f404c0 100644 --- a/system/camerad/cameras/camera_util.h +++ b/system/camerad/cameras/camera_util.h @@ -1,6 +1,8 @@ #pragma once + #include #include +#include #include #include #include @@ -18,10 +20,17 @@ void release(int video0_fd, uint32_t handle); class MemoryManager { public: void init(int _video0_fd) { video0_fd = _video0_fd; } - void *alloc(int len, uint32_t *handle); - void free(void *ptr); ~MemoryManager(); + + template + auto alloc(int len, uint32_t *handle) { + return std::unique_ptr>((T*)alloc_buf(len, handle), [this](void *ptr) { this->free(ptr); }); + } + private: + void *alloc_buf(int len, uint32_t *handle); + void free(void *ptr); + std::mutex lock; std::map handle_lookup; std::map size_lookup; diff --git a/system/clocksd/clocksd b/system/clocksd/clocksd index 66282c454..db965d721 100755 Binary files a/system/clocksd/clocksd and b/system/clocksd/clocksd differ diff --git a/system/hardware/tici/hardware.py b/system/hardware/tici/hardware.py index 018bc3000..8dc74ce3d 100644 --- a/system/hardware/tici/hardware.py +++ b/system/hardware/tici/hardware.py @@ -319,7 +319,8 @@ class Tici(HardwareBase): (True, tc + ["class", "add", "dev", adapter, "parent", "1:", "classid", "1:20", "htb", "rate", f"{upload_speed_kbps}kbit"]), # Create universal 32 bit filter on adapter that sends all outbound ip traffic through the class - (True, tc + ["filter", "add", "dev", adapter, "parent", "1:", "protocol", "ip", "prio", "10", "u32", "match", "ip", "dst", "0.0.0.0/0", "flowid", "1:20"]), + (True, tc + ["filter", "add", "dev", adapter, "parent", "1:", "protocol", "ip", "prio", \ + "10", "u32", "match", "ip", "dst", "0.0.0.0/0", "flowid", "1:20"]), ] download = [ @@ -328,7 +329,8 @@ class Tici(HardwareBase): # Redirect ingress (incoming) to egress ifb0 (True, tc + ["qdisc", "add", "dev", adapter, "handle", "ffff:", "ingress"]), - (True, tc + ["filter", "add", "dev", adapter, "parent", "ffff:", "protocol", "ip", "u32", "match", "u32", "0", "0", "action", "mirred", "egress", "redirect", "dev", ifb]), + (True, tc + ["filter", "add", "dev", adapter, "parent", "ffff:", "protocol", "ip", "u32", \ + "match", "u32", "0", "0", "action", "mirred", "egress", "redirect", "dev", ifb]), # Add class and rules for virtual interface (True, tc + ["qdisc", "add", "dev", ifb, "root", "handle", "2:", "htb"]), diff --git a/system/logcatd/logcatd b/system/logcatd/logcatd index 551da1120..3225cdd8d 100755 Binary files a/system/logcatd/logcatd and b/system/logcatd/logcatd differ diff --git a/system/loggerd/bootlog b/system/loggerd/bootlog index d8977f7b0..381f5bffb 100755 Binary files a/system/loggerd/bootlog and b/system/loggerd/bootlog differ diff --git a/system/loggerd/encoderd b/system/loggerd/encoderd index 31fc4bc25..ba8dc63c1 100755 Binary files a/system/loggerd/encoderd and b/system/loggerd/encoderd differ diff --git a/system/loggerd/loggerd b/system/loggerd/loggerd index 6f836c45d..92e72403a 100755 Binary files a/system/loggerd/loggerd and b/system/loggerd/loggerd differ diff --git a/system/loggerd/uploader.py b/system/loggerd/uploader.py index 245e5cbcf..31ece0ae9 100644 --- a/system/loggerd/uploader.py +++ b/system/loggerd/uploader.py @@ -211,7 +211,8 @@ class Uploader: else: content_length = int(stat.request.headers.get("Content-Length", 0)) self.last_speed = (content_length / 1e6) / self.last_time - cloudlog.event("upload_success", key=key, fn=fn, sz=sz, content_length=content_length, network_type=network_type, metered=metered, speed=self.last_speed) + cloudlog.event("upload_success", key=key, fn=fn, sz=sz, content_length=content_length, + network_type=network_type, metered=metered, speed=self.last_speed) success = True else: success = False diff --git a/system/proclogd/proclogd b/system/proclogd/proclogd index 2b0bf9427..c783a01f3 100755 Binary files a/system/proclogd/proclogd and b/system/proclogd/proclogd differ diff --git a/system/sensord/_sensord b/system/sensord/_sensord index 9679fe7ab..e4894dacf 100755 Binary files a/system/sensord/_sensord and b/system/sensord/_sensord differ diff --git a/system/sensord/pigeond.py b/system/sensord/pigeond.py index c9ad7ff22..f9ac2eaf9 100755 --- a/system/sensord/pigeond.py +++ b/system/sensord/pigeond.py @@ -164,12 +164,12 @@ def initialize_pigeon(pigeon: TTYPigeon) -> bool: pigeon.send_with_ack(b"\xB5\x62\x06\x08\x06\x00\x64\x00\x01\x00\x00\x00\x79\x10") # UBX-CFG-NAV5 (0x06 0x24) - pigeon.send_with_ack(b"\xB5\x62\x06\x24\x24\x00\x05\x00\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5A\x63") + pigeon.send_with_ack(b"\xB5\x62\x06\x24\x24\x00\x05\x00\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5A\x63") # noqa: E501 # UBX-CFG-ODO (0x06 0x1E) pigeon.send_with_ack(b"\xB5\x62\x06\x1E\x14\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3C\x37") pigeon.send_with_ack(b"\xB5\x62\x06\x39\x08\x00\xFF\xAD\x62\xAD\x1E\x63\x00\x00\x83\x0C") - pigeon.send_with_ack(b"\xB5\x62\x06\x23\x28\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x24") + pigeon.send_with_ack(b"\xB5\x62\x06\x23\x28\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x24") # noqa: E501 # UBX-CFG-NAV5 (0x06 0x24) pigeon.send_with_ack(b"\xB5\x62\x06\x24\x00\x00\x2A\x84") diff --git a/system/sensord/rawgps/structs.py b/system/sensord/rawgps/structs.py index 97e3d3d60..e2f1e1cdc 100644 --- a/system/sensord/rawgps/structs.py +++ b/system/sensord/rawgps/structs.py @@ -255,7 +255,7 @@ position_report = """ uint32 q_FltRawAlt; /* Raw height-above-ellipsoid altitude in meters as computed by WLS */ uint32 q_FltRawAltSigma; /* Gaussian 1-sigma value for raw height-above-ellipsoid altitude in meters */ uint32 align_Flt[14]; - uint32 q_FltPdop; /* 3D position dilution of precision as computed from the unweighted + uint32 q_FltPdop; /* 3D position dilution of precision as computed from the unweighted uint32 q_FltHdop; /* Horizontal position dilution of precision as computed from the unweighted least-squares covariance matrix */ uint32 q_FltVdop; /* Vertical position dilution of precision as computed from the unweighted least-squares covariance matrix */ uint8 u_EllipseConfidence; /* Statistical measure of the confidence (percentage) associated with the uncertainty ellipse values */ @@ -276,7 +276,7 @@ position_report = """ uint8 u_TotalGloSvs; /* Total number of Glonass SVs detected by searcher, including ones not used in position calculation */ uint8 u_NumBdsSvsUsed; /* The number of BeiDou SVs used in the fix */ uint8 u_TotalBdsSvs; /* Total number of BeiDou SVs detected by searcher, including ones not used in position calculation */ -""" +""" # noqa: E501 def name_to_camelcase(nam): ret = [] diff --git a/system/ubloxd/ubloxd b/system/ubloxd/ubloxd index b44e92505..bc482e7aa 100755 Binary files a/system/ubloxd/ubloxd and b/system/ubloxd/ubloxd differ diff --git a/third_party/acados/acados_template/__pycache__/__init__.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/__init__.cpython-311.pyc index 3582cc18c..f5990aacd 100644 Binary files a/third_party/acados/acados_template/__pycache__/__init__.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/__init__.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/acados_model.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/acados_model.cpython-311.pyc index be447a556..a34d17a52 100644 Binary files a/third_party/acados/acados_template/__pycache__/acados_model.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/acados_model.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/acados_ocp.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/acados_ocp.cpython-311.pyc index b210bc0f4..aeb1872b7 100644 Binary files a/third_party/acados/acados_template/__pycache__/acados_ocp.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/acados_ocp.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/acados_ocp_solver.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/acados_ocp_solver.cpython-311.pyc index 43fd69ed6..e4e67f72b 100644 Binary files a/third_party/acados/acados_template/__pycache__/acados_ocp_solver.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/acados_ocp_solver.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/acados_sim.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/acados_sim.cpython-311.pyc index af2fd553d..5dc39a8f9 100644 Binary files a/third_party/acados/acados_template/__pycache__/acados_sim.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/acados_sim.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/acados_sim_solver.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/acados_sim_solver.cpython-311.pyc index d2d2fd611..d817e3147 100644 Binary files a/third_party/acados/acados_template/__pycache__/acados_sim_solver.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/acados_sim_solver.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/builders.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/builders.cpython-311.pyc index 14464437f..f838efcb9 100644 Binary files a/third_party/acados/acados_template/__pycache__/builders.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/builders.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_constraint.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_constraint.cpython-311.pyc index 5b33866c2..99a8c2fe0 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_constraint.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_constraint.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_discrete_dynamics.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_discrete_dynamics.cpython-311.pyc index 940fd2547..61861b818 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_discrete_dynamics.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_discrete_dynamics.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_explicit_ode.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_explicit_ode.cpython-311.pyc index 3eceeaeb3..ba5db6036 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_explicit_ode.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_explicit_ode.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_external_cost.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_external_cost.cpython-311.pyc index 3411f9201..3ad22d294 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_external_cost.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_external_cost.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_gnsf.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_gnsf.cpython-311.pyc index 726f8ec12..1cb7a7e8f 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_gnsf.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_gnsf.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_implicit_ode.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_implicit_ode.cpython-311.pyc index 06a2c0886..3aa8ddb9a 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_implicit_ode.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_implicit_ode.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/generate_c_code_nls_cost.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/generate_c_code_nls_cost.cpython-311.pyc index d8c1487a4..0d178eeaf 100644 Binary files a/third_party/acados/acados_template/__pycache__/generate_c_code_nls_cost.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/generate_c_code_nls_cost.cpython-311.pyc differ diff --git a/third_party/acados/acados_template/__pycache__/utils.cpython-311.pyc b/third_party/acados/acados_template/__pycache__/utils.cpython-311.pyc index bee25fb04..4f5c33001 100644 Binary files a/third_party/acados/acados_template/__pycache__/utils.cpython-311.pyc and b/third_party/acados/acados_template/__pycache__/utils.cpython-311.pyc differ diff --git a/tools/bodyteleop/__pycache__/bodyav.cpython-311.pyc b/tools/bodyteleop/__pycache__/bodyav.cpython-311.pyc index 695c36a6c..ce6d09e72 100644 Binary files a/tools/bodyteleop/__pycache__/bodyav.cpython-311.pyc and b/tools/bodyteleop/__pycache__/bodyav.cpython-311.pyc differ diff --git a/tools/bodyteleop/__pycache__/web.cpython-311.pyc b/tools/bodyteleop/__pycache__/web.cpython-311.pyc index 145ff0a09..8bd56b222 100644 Binary files a/tools/bodyteleop/__pycache__/web.cpython-311.pyc and b/tools/bodyteleop/__pycache__/web.cpython-311.pyc differ diff --git a/tools/bodyteleop/bodyav.py b/tools/bodyteleop/bodyav.py index cb2ebb061..fc9559f8d 100644 --- a/tools/bodyteleop/bodyav.py +++ b/tools/bodyteleop/bodyav.py @@ -63,7 +63,8 @@ class WebClientSpeaker(MediaBlackhole): self.p = pyaudio.PyAudio() self.buffer = io.BytesIO() self.channels = 2 - self.stream = self.p.open(format=pyaudio.paInt16, channels=self.channels, rate=48000, frames_per_buffer=9600, output=True, stream_callback=self.pyaudio_callback) + self.stream = self.p.open(format=pyaudio.paInt16, channels=self.channels, rate=48000, frames_per_buffer=9600, + output=True, stream_callback=self.pyaudio_callback) def pyaudio_callback(self, in_data, frame_count, time_info, status): if self.buffer.getbuffer().nbytes < frame_count * self.channels * 2: diff --git a/tools/bodyteleop/web.py b/tools/bodyteleop/web.py index c8f5dfd76..e39756964 100644 --- a/tools/bodyteleop/web.py +++ b/tools/bodyteleop/web.py @@ -181,7 +181,8 @@ def main(): cert_path = TELEOPDIR + '/cert.pem' key_path = TELEOPDIR + '/key.pem' if (not os.path.exists(cert_path)) or (not os.path.exists(key_path)): - asyncio.run(run(f'openssl req -x509 -newkey rsa:4096 -nodes -out {cert_path} -keyout {key_path} -days 365 -subj "/C=US/ST=California/O=commaai/OU=comma body"')) + asyncio.run(run(f'openssl req -x509 -newkey rsa:4096 -nodes -out {cert_path} -keyout {key_path} \ + -days 365 -subj "/C=US/ST=California/O=commaai/OU=comma body"')) else: logger.info("Certificate exists!") ssl_context = ssl.SSLContext()