Commit Graph

3012 Commits

Author SHA1 Message Date
Matthew Kennedy a718f3a30a
Remove fsio part 1 (#3871)
* dead includes

* move last logic out of fsio

* dead functions
2022-02-01 15:42:04 -05:00
rusefillc ca98e270e1
safer file name (#3861)
* safer file name

* safer file name

Co-authored-by: rusefillc <sdfsdfqsf2334234234>
2022-01-31 21:51:32 -05:00
Matthew Kennedy c6f45c5022
warnings fixes (#3851)
* unused things

* !!! actual bug !!!

* dead

* unused

* unused

* multi-bus lua RX was just broken

* make the compiler angry about it

* dead config

* alphax 2

* just call, no store

* compiler too angry
2022-01-31 18:37:42 -05:00
GitHub build-firmware Action 10b18f086a Auto-generated configs and docs 2022-01-31 23:26:47 +00:00
rusefillc 1d64929f33 Remove Miata MX5 NB1 trigger fix #3488 2022-01-31 18:20:43 -05:00
GitHub build-firmware Action 2cd4dede4f Auto-generated configs and docs 2022-01-30 14:01:11 +00:00
Matthew Kennedy 40e96a03d5
table for tcharge interpolation (#3855)
* extract getTChargeCoefficient

* new table
2022-01-30 08:45:11 -05:00
Matthew Kennedy 28950acf3e
disable fuel trim shortly after DFCO (#3847)
* vss based dfco

* fix digits while we're here

* fix some other digits for fun

* don't use custom assert

* simplify test

* less than or equal, test vss behavior

* disable closed loop fuel after dfco1

* I can't type

* correct comparison helps

* poke
2022-01-28 21:35:23 -05:00
rusefillc acc6bb6e0b this stuff is dead 2022-01-28 19:52:12 -05:00
Matthew Kennedy 62794ba105
complex wall wetting model (#3849)
* extract logic

* extract interface

* explicitly test wall fuel

* complex wall model tables

* fix unused chunk

* defaults

* doesn't like constexpr scaled_channel
2022-01-28 00:32:36 -05:00
GitHub build-firmware Action de947d2c64 Auto-generated configs and docs 2022-01-27 23:44:58 +00:00
rusefillc d567f2f852 reducing magic constants & pedal calibration 2022-01-27 18:28:42 -05:00
GitHub build-firmware Action 1f664d8b5b Auto-generated configs and docs 2022-01-27 22:59:57 +00:00
rusefillc 1cf898e6e2 reducing magic constants 2022-01-27 17:39:46 -05:00
Matthew Kennedy 2444090933
vss based dfco (#3845)
* vss based dfco

* fix digits while we're here

* fix some other digits for fun

* don't use custom assert

* simplify test

* less than or equal, test vss behavior

* even better than comments are tooltips
2022-01-27 14:05:18 -05:00
Matthew Kennedy 966e51cbc6
more tps accel data (#3844) 2022-01-27 07:46:13 -05:00
Matthew Kennedy eb14d74846
extract logic from wall wetting AE (#3848)
* extract logic

* extract interface

* explicitly test wall fuel
2022-01-27 07:45:50 -05:00
GitHub build-firmware Action c59cde8be1 Auto-generated configs and docs 2022-01-25 02:04:47 +00:00
rusefillc 32c1cd09da https://www.rusefi.com/forum/viewtopic.php?p=44166#p44166
launch control live data
2022-01-24 20:58:21 -05:00
Matthew Kennedy df1635b5a0
dfco checks driver throttle intent (#3832) 2022-01-24 14:26:39 -05:00
GitHub build-firmware Action e584ef198c Auto-generated configs and docs 2022-01-24 02:55:57 +00:00
Matthew Kennedy 717d931e78
refactor decel fuel cut (#3830)
* refactor dfco

* s

* output channel logs dfco

* slightly cheeky comment
2022-01-23 19:44:41 -05:00
rusefillc 304b45e039 https://www.rusefi.com/forum/viewtopic.php?p=44166#p44166 2022-01-23 19:44:14 -05:00
Matthew Kennedy b5232ab5e6
decouple TPS accel enrichment from trigger (#3825)
* move call site

* move thresholding out of fast path

* adjust config

* test
2022-01-23 15:31:39 -05:00
rusefi bb54fb346d but we need valid default 2022-01-21 15:22:11 -05:00
Andrey 1bd71e4b2e migrating to SensorType::Rpm API 2022-01-20 23:54:52 -05:00
Andrey 4ebb3c94d3 migrating to SensorType::Rpm API 2022-01-20 23:43:18 -05:00
Andrey cda2b711cf migrating to SensorType::Rpm API 2022-01-20 23:32:59 -05:00
Andrey e55eb28086 migrating to SensorType::Rpm API 2022-01-20 22:42:13 -05:00
Andrey 3bc59bfbb6 migrating to SensorType::Rpm API 2022-01-20 22:27:48 -05:00
Andrey 3183a123cd migrating to SensorType::Rpm API 2022-01-20 22:26:05 -05:00
Andrey 9f08db256b migrating to SensorType::Rpm API 2022-01-20 22:12:04 -05:00
Matthew Kennedy 76fdb4063e
XY Idle VE Table (#3781)
* config & ui

* implement

* test idle VE switching behavior

* use the interface where we can

* s

* re-bump flash version
2022-01-20 14:08:54 -05:00
rusefillc bc66096574 Better handling of RPM during stop of cranking #3803
refactoring: reusing existing method
2022-01-17 21:00:49 -05:00
rusefillc 1c5ad3d153 AlphaX 2022-01-17 20:22:51 -05:00
rusefillc 5a9a563e63 https://github.com/rusefi/alphax-2chan/issues/16 2022-01-15 10:36:49 -05:00
rusefillc 71b2dc762a https://en.wikipedia.org/wiki/Pi 2022-01-14 21:23:27 -05:00
Matthew Kennedy c9350fc3cb
Revert "forced 4 byte thing is actually no longer needed so much" (#3785)
* Revert "forced 4 byte thing is actually no longer needed so much"

This reverts commit 364783f658.

* bump flash version to force a re-write
2022-01-12 21:59:21 -05:00
Matthew Kennedy 7d341cfc9d
improve maf output channels and logging (#3743)
* maf channels

* s

* binary log

* if only I could type

* can

* instant RPM too

* s

* test

* graceful zero rpm

* test works

* float near
2022-01-12 15:41:35 -05:00
rusefillc 240c6fe8b6 GDI red FATAL led on cranking fix #3766 2022-01-12 01:01:33 -05:00
rusefillc dcc7080ce1 logging of live data structs #3614 2022-01-11 22:54:57 -05:00
rusefillc 963c168788 Code style for methods with zero arguments #3535 2022-01-11 22:26:24 -05:00
rusefillc 6ee0a55eaf RE usability: live data for idle controller 2022-01-10 19:48:58 -05:00
rusefillc 0d8e4d5222 AlphaX few bytes of progress 2022-01-10 01:47:06 -05:00
Andreika 1b9037314a
Hellen mcu module detector (experimental) (#3756)
* Hellen mcu module detector (experimental)

* make unit-tests happy

* make unit-tests even more happy

* move Hellen-specific stuff to hellen_common.cpp

* fix other hellen config builds

* helping non-Hellen builds too

* helping alpha2ch build

* helping build

* cleanup

* help unit-tests

Co-authored-by: Andrei <andreikagit@users.noreply.github.com>
2022-01-09 17:40:08 -05:00
rusefillc 212687dd10 extracting common hellen to it's own file 2022-01-08 20:16:01 -05:00
rusefillc a13a0a2cc9 mk files refactoring 2022-01-06 20:32:39 -05:00
rusefillc 25ca48c408 Live Data progress 2022-01-06 17:58:59 -05:00
GitHub build-firmware Action 2208947bb3 Auto-generated configs and docs 2022-01-05 06:49:51 +00:00
rusefillc 364783f658 forced 4 byte thing is actually no longer needed so much 2022-01-05 00:24:17 -05:00
GitHub build-firmware Action 38b17f5859 Auto-generated configs and docs 2022-01-05 05:09:04 +00:00
GitHub build-firmware Action 7b131dc5c7 Auto-generated configs and docs 2022-01-04 03:39:23 +00:00
rusefillc c7ea8c6e03 helping build: sharing same brain_pin_diag_e 2022-01-03 22:33:38 -05:00
rusefillc 914deedb0f TLE8888 diag says OK on disconnected pins and bench test #3737 2022-01-03 20:33:51 -05:00
rusefillc 21f3f26506 benchTest flexibility 2022-01-03 03:35:26 -05:00
rusefillc e9498f64db GDI/HPFP: Set HPFP current/timing params on MC33816 #3736 follow-up 2022-01-03 02:13:47 -05:00
rusefillc d8de52d325 live data progress 2022-01-02 13:57:58 -05:00
rusefillc 6eb438acd6 why so many channels are hidden in debug ? #3614 2022-01-02 02:04:25 -05:00
Matthew Kennedy 338c14c3a8
cylinder ignition trim (#3709)
* cylinder ignition trim

* changelog

* changelog

* test

* move UI
2022-01-01 15:47:47 -05:00
rusefillc 9dc4efe993 reducing potential confusion with "NO PIN" in engine sniffer
https://rusefi.com/forum/viewtopic.php?p=43812#p43812
2022-01-01 12:10:55 -05:00
Matthew Kennedy ab3e3ac83f
hook up fuel trims (#3715)
* hook up fuel trims

* pass all the params

* store per-cylinder fuel mass directly

* main trigger callback only touches per-cylinder, no banks!

* test test test test

* move UI to happy land

* changelog
2022-01-01 02:19:59 -05:00
Matthew Kennedy d5c4b79b1a
Nb2 crank sync special case (#3727)
* extract isSyncPoint

* test because why not

* check vvt resync nb2

* custom nb decoder

* test only resyncs once!

* good job valgrind, you found a bug!
2021-12-31 15:47:25 -05:00
rusefillc f715210b39 GDI Epic #1448
live view
2021-12-31 15:28:24 -05:00
GitHub build-firmware Action 35655b2186 Auto-generated configs and docs 2021-12-30 02:53:30 +00:00
rusefillc d83b7f19af HellenNA8_96 config folder #3724 2021-12-29 21:23:47 -05:00
rusefillc 1856ff7ac0 reviving Passat 2021-12-29 20:24:04 -05:00
GitHub build-firmware Action 7118f8d5b7 Auto-generated configs and docs 2021-12-27 17:15:43 +00:00
Matthew Kennedy 95ad75318d
improved noFiringUntilVvtSync logic (#3696)
* s

* poke

* poke again for science

* kick for science

* kick

* kick

* comment kick

* s

* don't try to compare the array decay pointer to 0 (!)

* collateral damage

* adjust miata sync

* reset trigger states correctly on engine stop

* s

* nissan MR too
2021-12-27 12:09:38 -05:00
rusefillc 8f68e8e646 refactoring - enum has more usages now 2021-12-26 14:53:27 -05:00
rusefillc 6665c4fb34 docs 2021-12-26 13:41:10 -05:00
rusefillc b337fed520 live data 2021-12-26 13:00:17 -05:00
rusefillc 7cb3eb4c9a live data 2021-12-26 13:00:17 -05:00
rusefillc 9f8ccececd docs & refactoring 2021-12-26 12:35:41 -05:00
rusefillc 63c6621dd0 E65 2021-12-23 16:59:30 -05:00
GitHub build-firmware Action 2c645bd130 Auto-generated configs and docs 2021-12-23 21:46:59 +00:00
rusefillc 713e9133b5 E65 2021-12-23 16:41:06 -05:00
Matthew Kennedy a4871c703c
Autoscale all the things! (#3713)
* Map3D accepts any scaled_channel type

* consistency

* reinstate test

* fix ratio

* throttle, boost, gppwm

* scale ignition and VE

* tests
2021-12-22 08:09:41 -05:00
Matthew Kennedy 3a4a0ba18d
simplify some table lookups (#3692)
* simplify

* expand interpolation test
2021-12-20 08:14:30 -05:00
Matthew Kennedy 0810198185
clean up timing table defaults (#3705)
* less crazy configs

* cleanup

* make that test happy
2021-12-20 08:02:38 -05:00
rusefillc 66f82a0cdb 2 byte table axis #3045 2021-12-19 22:43:10 -05:00
rusefillc 8bc542b40b https://github.com/rusefi/hellen154hyundai/issues/49 2021-12-17 16:39:12 -05:00
rusefillc 4292c2fb1d MAP phase sensing fix #3544
removing dead implementation
2021-12-16 21:28:27 -05:00
rusefillc 06ccf524dd MAP phase sensing #3544
removing dead implementation
2021-12-16 21:13:55 -05:00
rusefillc f27b4dbd95 dead code? 2021-12-16 21:06:23 -05:00
GitHub build-firmware Action 1de1809074 Auto-generated configs and docs 2021-12-16 21:24:43 +00:00
rusefillc f685bab9eb live data for wastegate and launch control #3588 2021-12-16 16:19:33 -05:00
rusefillc 6542533946 live data for wastegate and launch control #3588 2021-12-16 15:17:35 -05:00
rusefillc 81759802d0 live data for wastegate and launch control #3588 2021-12-16 14:47:00 -05:00
rusefillc 655f12b45d live data for wastegate and launch control #3588 2021-12-16 14:29:39 -05:00
rusefillc 804d396fd6 live data for wastegate and launch control #3588 2021-12-16 14:28:01 -05:00
rusefillc 31ed18fe84 clutch input via CAN #3605 2021-12-15 19:20:07 -05:00
rusefillc b3a240f893 clutch input via CAN #3605 2021-12-15 17:48:21 -05:00
Matthew Kennedy 4148ee76bf
smarter priming logic (#3674)
* ignition controller detects rising edge on voltage

* update test

* comment

* ignore negative transients

* tweak

* test

* priming happens on ignition-on

* priming has its own scheduling

* config & UI

* dead config

* implementation

* look, the test caught a bug

* keep the watchdog happy

* bad merge

* changelog

* easier to read the test

* test naming
2021-12-08 16:20:19 -05:00
Matthew Kennedy 2050580a16
prime upon ignition voltage, not on power on (#3662)
* ignition controller detects rising edge on voltage

* update test

* comment

* ignore negative transients

* tweak

* test

* priming happens on ignition-on

* priming has its own scheduling

* test

* dead adjacent line of code
2021-12-08 07:26:49 -05:00
GitHub build-firmware Action 161d75197d Auto-generated configs and docs 2021-12-08 12:10:47 +00:00
Matthew Kennedy c83e8ae5a5
AiM dash (#3673)
* aim dash

* enum
2021-12-08 07:04:59 -05:00
Matthew Kennedy 91ec135cf8
ignition controller detects rising edge on voltage (#3636)
* ignition controller detects rising edge on voltage

* update test

* comment

* ignore negative transients

* tweak

* test
2021-12-07 21:28:04 -05:00
Andrey 50038167d8 MAP phase sensing #3544
new implementation seems complete?
2021-12-07 21:08:25 -05:00
Andrey 940b04ab24 Let's always have TS structure so that unit tests can check values in outputChannels, kind of making outputChannels a god dump for state but whatever since Live View is coming 2021-12-07 20:18:47 -05:00
Andrey e9d16bfa13 MAP phase sensing #3544
new implementation
2021-12-07 20:00:50 -05:00
Matthew Kennedy 2d05d51cf8
consolidate tps accel (#3671) 2021-12-07 18:49:21 -05:00
rusefillc b778aa7173 Pause CAN broadcast on engine stop #3665 2021-12-07 10:35:52 -05:00
rusefillc b4c07798b5 MAP phase sensing #3544 2021-12-07 08:57:23 -05:00
rusefillc 1dd3370b56 https://rusefi.com/forum/viewtopic.php?f=18&t=2236 2021-12-06 21:31:49 -05:00
Matthew Kennedy 3a95e86112
calculate per-cylinder ignition timing (#3652)
* simplify cylinder phasing

* per cylinder timing

* s

* s

* s

* why was there a divide by 2?
2021-12-06 21:19:37 -05:00
rusefillc f826fe13aa MAP phase sensing #3544
trigger sync better gauges/logging
2021-12-06 17:04:05 -05:00
rusefillc dbb3de3618 tune via CAN #3361
pauseCANdueToSerial
2021-12-05 21:21:36 -05:00
Matthew Kennedy 7dc20b368a
Alternator controller is engine module (#3663)
* alternator is engine module

* user can't set pid period
2021-12-05 18:33:50 -05:00
Matthew Kennedy 555a8d5f43
simplify cylinder phasing (#3650) 2021-12-05 10:46:35 -05:00
Andrei 99daecb7c7 better ignition_voltage_detected message 2021-12-04 01:41:25 -05:00
rusefillc 168a899ba9 how many more spelling mistakes?! 2021-12-02 01:06:40 -05:00
rusefillc f4ab23eb2b Requesting LUA Torque intervention #3638 2021-12-02 01:02:56 -05:00
GitHub build-firmware Action 4392161ac9 Auto-generated configs and docs 2021-12-02 05:04:17 +00:00
rusefillc 0ce025b1f5 fix vBatt false-detection 2021-12-01 11:22:13 -05:00
Matthew Kennedy a37c9bca9e
Remove the EFI_NO_CONFIG_WORKING_COPY option (#3630)
* no working copy

* oops
2021-11-29 16:44:45 -05:00
rusefillc e75590fd45 why so many channels are hidden in debug ? #3614 2021-11-29 14:11:19 -05:00
rusefillc 89f92e1694 why so many channels are hidden in debug ? #3614 2021-11-29 11:54:55 -05:00
rusefillc 11e81cfb57 why so many channels are hidden in debug ? #3614 2021-11-29 10:44:41 -05:00
rusefillc 818d12f68e why so many channels are hidden in debug ? #3614 2021-11-29 10:16:45 -05:00
rusefillc 26997ab9e3 why so many channels are hidden in debug ? #3614 2021-11-29 01:02:40 -05:00
Matthew Kennedy d5363b814a
better VSS configuration (#3542)
* vss uses real values

* some defaults

* test and correct math

* km, not miles!

* comment

* tooltip

* that macro went away

* 100hz and default settings gives 9kph

* changelog

* order of operations safety

* make the test like the pwm test

* housekeeping

* this is why we need sensor automation

Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
2021-11-27 08:49:07 -05:00
rusefillc bdde177e04 skipspark script kills ECU fix #3611 2021-11-25 22:40:19 -05:00
GitHub build-firmware Action c0d3de4128 Auto-generated configs and docs 2021-11-26 02:06:11 +00:00
Andrey 0ec8b8d46c reliable 32/2 trigger shape 2021-11-25 20:45:58 -05:00
Matthew Kennedy f8403543d6
wall fuel tweaks (#3617) 2021-11-25 18:45:44 -05:00
Matthew Kennedy 0badb6b2ff
AC is EngineModule (#3604)
* AC is engine module

* missed a spot with main relay while we're at it

* TS
2021-11-25 07:59:31 -05:00
Andrey 12d5106614 isCylinderCleanupEnabled would be nice by default 2021-11-24 23:32:55 -05:00
Andrey e2fa1af527 MAP phase sensing #3544 2021-11-24 22:36:36 -05:00
Andrey f1b8acb1fd MAP phase sensing #3544 2021-11-24 22:35:56 -05:00
Matthew Kennedy 992689ced5
bye (#3609) 2021-11-24 22:03:17 -05:00
rusefillc 3077f795c4 live data for wastegate #3588 2021-11-24 12:59:57 -05:00
Matthew Kennedy 81fffe87b7
main relay doesn't use fsio (#3580)
* fuel pump

* s

* call correct callback

* more dead

* test adjustment

* don't overflow

* don't need separate function

* java

* give it a name

* generated

* generated

* add to generate script

* import *

* this is so cheap we don't need a flag

* main relay

* plumbing

* dead fsio stuff

* test it

* by 100%, we mean 99.98%
2021-11-24 07:47:51 -05:00
rusefillc 794ec5e2b8 well Lua wants to be BIG 2021-11-23 16:40:04 -05:00
GitHub build-firmware Action 174b03e8be Auto-generated configs and docs 2021-11-22 23:12:52 +00:00
Matthew Kennedy 3334a6963c
oh my god we've had no asserts (#3595) 2021-11-22 17:52:03 -05:00
rusefillc a369e7e3d3 unusedLogFormat 2021-11-22 13:37:06 -05:00
Matthew Kennedy a342bee57e
rpm calculator refactoring, gm 24x test (#3585)
* data

* stub test

* use getTimeSinceSyncPoint

* s

* s

* no

* test

* stray ;

* those were 1/10 what they were supposed to be

* actually check something

* dead log line?
2021-11-20 14:59:02 +03:00
Scott Smith cbc7c61b3e
Fix potential buffer overrun in cyclic_buffer. (#3583)
This exposed a buffer overrun, so double the size of the buffer (to account for 720 degree engine
cycle vs 360 degree crank events).

Also use proper numeric limits when computing min/max.
Finally, add a lock around the call to cyclic_buffer that actually caused the contention.
2021-11-20 03:01:11 -05:00
Matthew Kennedy bb57a4b084
detect more overflows with asan (#3582)
* overflow detector

* type list dynamic allocate

* fix the buffer length

* comment

* pr fb

* sanitize sim

* fix sim sanitizer bug

* didn't mean to turn off optimization for sim

* asan can do that, if you turn it on!

* cleaning
2021-11-20 01:38:39 -05:00
Scott Smith 5bc1949aef
Basic framework for high pressure fuel pump control (#3476)
* Basic framework for high pressure fuel pump control

* Many changes

Move calculations to fast callback
Move main object into Engine
Respond to pin changes without requiring a reboot

* Use EngineModule for HpfpController
Schedule pin off after executing pin on so we are sure it ends, even if the motor stops.
Test scheduling.
Less RAM use by only having one event and reordering fields.

* Make scheduling test actually useful - need non-0 activation angle.

Co-authored-by: rusefillc <48498823+rusefillc@users.noreply.github.com>
2021-11-19 23:06:51 -05:00
Matthew Kennedy d40ca0f581
fuel pump doesn't use fsio (#3576)
* fuel pump

* s

* call correct callback

* more dead

* test adjustment

* don't overflow

* don't need separate function

* java

* give it a name

* generated

* generated

* add to generate script

* import *

* this is so cheap we don't need a flag
2021-11-19 22:23:12 -05:00
rusefillc 684622e476 debug mode for skipped count for 4 cylinders #3570 2021-11-19 07:02:21 -05:00
Matthew Kennedy caee2a5439
delimeter is not comma (#3533)
* delimeter is not comma

* do it in config txt

* use txt

* s

* string

* compat

* also, spelling is hard

* use new name

* use new name

* generate enough for happy console

* use an even less common character

Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
2021-11-19 12:01:45 +03:00
Scott Smith 18c27a6e9c
Separate out scheduleOrQueue into it's own standalone scheduler. (#3573)
It's a large enough entity that it shouldn't be buried in ignition logic.
2021-11-18 14:27:21 -05:00
rusefillc 877535b8ff proportional spark cut #3427 2021-11-17 23:35:26 -05:00
Scott Smith 98040ad9af
Make the module API more concise. (#3571)
engineModules.get<FOO>(). becomes modules<FOO>()->

I believe the new API is more conducive to supporting arrays, by doing std::array<T, N> or
std::array<Mockable<T>, N>, with the support of a helper class.
2021-11-17 21:50:00 -05:00
Scott Smith 69d36dad6e
Final cleanup of ENGINE macros (#3567)
Fix some uses of ENGINE() not detected by regex due to parenthesis.
Remove now empty engine_ptr.h
Don't worry about EFI_* not being defined, the compiler defaults to 0 if they aren't.
2021-11-17 13:45:10 -05:00
Scott Smith 988aacdd91
Create a base class EngineModule for that contains various useful callbacks. (#3548)
* Create a base class EngineModule for that contains various useful callbacks.

This cleans up the API by not requiring the notifiers to know about who wants callbacks.  The only
place you need to update to add a module is in one place.

* Add mockability.

* Convert InjectorModel to a Mockable EngineModule
2021-11-17 20:13:19 +03:00
Scott Smith 823d9a07e0
Programmatically replace ENGINE() and CONFIG() with engine-> etc (#3565)
git grep -l -w ENGINE | xargs sed -i -r "s/ENGINE\(([]a-zA-Z_0-9.[]+)\)/engine->\1/g"

git grep -l -w CONFIG | xargs sed -i -r "s/([^a-zA-Z_])CONFIG\(([]a-zA-Z_0-9.[]+)\)/\1engineConfiguration->\2/g"
2021-11-17 03:54:21 -05:00
Scott Smith 70ad9724c0
Make engine* and friends be const pointers in production. (#3564)
This allows the compiler to see through the pointer and make accesses faster.
It saves 1336 bytes of text.
2021-11-17 03:53:17 -05:00