- switchy (QUIT: Ping timeout: 276 seconds) (~switchy@mechboards/switchy) | 00:02 | |
+ theesm (~theesm@static.134.243.21.65.clients.your-server.de) | 00:16 | |
- cow321 (QUIT: Ping timeout: 245 seconds) (~deflated8@user/meow/deflated8837) | 00:19 | |
sevan | when kernels are removed as they're found to have issues e.g the 6.10 one, is it possible to remove it from the repo meta data too? not a biggy but I just found that 'apt upgrade' is broken because it tries to fetch those .deb files from the reform debian repo | 00:21 |
---|---|---|
josch | sevan: yes, it's possible but a bit more work :) | 00:22 |
+ cow321 (~deflated8@user/meow/deflated8837) | 00:22 | |
sevan | josch: thanks :D | 00:23 |
josch | theoretically, minute could also "revert" the repo to the last known-good state using the most recent pipeline run which produced the 6.9 kernel but that's also a bit dangerous because this also affects packages like reform-tools | 00:23 |
sevan | ahh | 00:24 |
sevan | so just ignore the reform repo when such things happen in the future to sidestep things? | 00:26 |
sevan | luckily I'd installed just the reform-tools earlier so I got the lpc driver & reform-check utility | 00:26 |
- mjw (QUIT: Ping timeout: 255 seconds) (~mjw@gnu.wildebeest.org) | 01:15 | |
+ switchy (~switchy@mechboards/switchy) | 01:15 | |
+ bkeys1 (~Thunderbi@45.134.140.153) | 02:46 | |
- bkeys (QUIT: Ping timeout: 260 seconds) (~Thunderbi@45.134.140.153) | 02:47 | |
+ bkeys (~Thunderbi@45.134.140.153) | 02:48 | |
- bkeys1 (QUIT: Ping timeout: 260 seconds) (~Thunderbi@45.134.140.153) | 02:50 | |
- bkeys (QUIT: Ping timeout: 252 seconds) (~Thunderbi@45.134.140.153) | 03:07 | |
+ bkeys (~Thunderbi@45.134.140.153) | 03:08 | |
- colinsane (QUIT: Quit: bye) (~colinunin@97-113-70-61.tukw.qwest.net) | 03:26 | |
- cobra (QUIT: Ping timeout: 272 seconds) (~cobra@user/Cobra) | 03:28 | |
kop316 | sevan: you can also do "apt --fix-missing upgrade" and it ignores the missing packages | 03:29 |
+ colinsane (~colinunin@97-113-70-61.tukw.qwest.net) | 03:30 | |
- nsc (QUIT: Ping timeout: 265 seconds) (~nicolas@61-97-142-46.pool.kielnet.net) | 03:31 | |
+ nsc (~nicolas@34-99-142-46.pool.kielnet.net) | 03:33 | |
- aloo_shu (QUIT: Ping timeout: 272 seconds) (~aloo_shu@85.51.17.53) | 03:39 | |
- cow321 (QUIT: Ping timeout: 258 seconds) (~deflated8@user/meow/deflated8837) | 03:46 | |
+ aloo_shu (~aloo_shu@85.51.17.53) | 03:50 | |
+ cow321 (~deflated8@user/meow/deflated8837) | 04:00 | |
- colinsane (QUIT: Quit: bye) (~colinunin@97-113-70-61.tukw.qwest.net) | 04:09 | |
+ colinsane (~colinunin@97-113-70-61.tukw.qwest.net) | 04:12 | |
+ cobra (~cobra@user/Cobra) | 04:46 | |
- cobra (QUIT: Quit: ZNC 1.8.2 - https://znc.in) (~cobra@user/Cobra) | 05:02 | |
+ cobra (~cobra@user/Cobra) | 05:06 | |
- bkeys (QUIT: Ping timeout: 252 seconds) (~Thunderbi@45.134.140.153) | 06:37 | |
- _alice (QUIT: Ping timeout: 260 seconds) (sid544964@id-544964.ilkley.irccloud.com) | 08:56 | |
- svp (QUIT: Ping timeout: 260 seconds) (sid537750@id-537750.uxbridge.irccloud.com) | 08:58 | |
- jfred-linode (QUIT: Ping timeout: 260 seconds) (quassel@libera/sponsor/jfred) | 08:59 | |
+ jfred-linode_ (quassel@libera/sponsor/jfred) | 08:59 | |
+ svp (sid537750@id-537750.uxbridge.irccloud.com) | 09:00 | |
+ _alice (sid544964@ilkley.irccloud.com) | 09:12 | |
+ gustav28 (~gustav@c-df53205c.019-141-67626730.bbcust.telenor.se) | 10:32 | |
grimmware | morning | 10:46 |
josch | _o/ | 10:47 |
grimmware | josch: how's life? | 11:00 |
minute | mornin' | 11:01 |
grimmware | hey minute, how you doing? | 11:01 |
josch | grimmware: big todo list and too litte time -- so things are as usual :) | 11:02 |
josch | regarding the reform, there is this very interesting boot problem which puzzles me: https://community.mnt.re/t/debugging-boot-failures/2375/13 | 11:03 |
- jacobk (QUIT: Ping timeout: 276 seconds) (~quassel@47-186-105-237.dlls.tx.frontiernet.net) | 11:04 | |
grimmware | josch: no danger of running out of things to do :) | 11:04 |
+ jacobk (~quassel@47-186-105-237.dlls.tx.frontiernet.net) | 11:04 | |
josch | grimmware: as long as people keep changing their software, we will be kept busy :) | 11:05 |
josch | for example, is this normal for the pocket? | 11:05 |
josch | *** Warning - bad CRC, using default environment | 11:05 |
grimmware | under what context? | 11:06 |
[tj] | it is normal for imx8mp u-boot | 11:06 |
josch | uboot is: | 11:06 |
josch | U-Boot SPL 2022.04-gb0e908b1-dirty (May 02 2024 - 19:18:25 +0000) | 11:06 |
josch | [tj]: thank you | 11:06 |
[tj] | well, my olimex board says that too | 11:06 |
minute | josch: yes, bad crc is normal | 11:06 |
josch | but why would the printenv output be empty? | 11:06 |
minute | it just means there is no environment saved on disk | 11:06 |
grimmware | "bad crc is normal" tells you a lot about the state of computing | 11:06 |
minute | well, about the design of uboot maybe :D | 11:06 |
josch | oh then maybe i'm mistaken about what command to run? | 11:07 |
josch | i thought printenv printed you everything in the current environment | 11:07 |
minute | so, default environment should not be empty hm | 11:07 |
josch | i was particularly interested in the value of ${fdtfile} | 11:07 |
Zaba | bad crc just means you have for example empty flash where u-boot is reading the environment from, because you’ve never actually written it there | 11:07 |
minute | normally the default env is compiled into uboot | 11:07 |
Zaba | well, obviously it might indicate an actual data corruption too, but that’s less common | 11:08 |
josch | but that thread has a few oddities in it | 11:09 |
josch | sure, our sysimages were broken too but that should be fixed now | 11:09 |
josch | and "script exited: continuing..." should not happen | 11:09 |
josch | and i also never saw "EFI boot manager: Cannot load any image" in my own logs on imx8mq or a311d | 11:10 |
josch | and if ${dtbfile} is set, then " | 11:10 |
josch | Failed to load '/dtb-6.10.3-mnt-reform-arm64'" should also not be happening | 11:10 |
josch | or is imx8mplus u-boot just very different? | 11:10 |
minute | now testing this kernel on imx8mp https://source.mnt.re/reform/reform-debian-packages/-/jobs/5389/artifacts/file/repo/pool/main/l/linux/linux-image-6.10.3-mnt-reform-arm64_6.10.3-1+reform20240810T210530Z_arm64.deb | 11:11 |
minute | josch: maybe they somehow have the wrong uboot? | 11:11 |
minute | aha, immediate crash in [ 6.201779] clk_imx8mp_audiomix_runtime_resume+0x38/0x50 | 11:16 |
minute | at least i can reproduce that | 11:17 |
josch | minute: yes, which is why i was wondering whether everybody else with a pocket also has u-boot 2022.04-gb0e908b1-dirty or not | 11:18 |
ch | stating the obvious, but having an overview of shipped version strings and printenvs seems useful *hides* | 11:18 |
josch | commit b0e908b1 does not exist in reform-imx8mp-uboot.git | 11:18 |
minute | josch: no, normally i flash uboot | 11:18 |
minute | will get back to you | 11:19 |
josch | ch: you know what? lets start to collect this: https://source.mnt.re/reform/reform-debian-packages/-/wikis/u-boot | 11:21 |
ch | +1 | 11:22 |
+ mjw (~mjw@gnu.wildebeest.org) | 11:24 | |
grimmware | josch: could you add information on how to collect it? | 11:27 |
josch | grimmware: i'm about to write a forum post, stay tuned :) | 11:27 |
grimmware | noice | 11:27 |
josch | grimmware: https://community.mnt.re/t/collecting-known-good-u-boot-output-for-debugging-purposes/2381 | 11:32 |
[tj] | the bsd community collects dmesg output and I've never understood why the linux world doesn't like having plain text logs of things that work | 11:34 |
josch | they don't? | 11:35 |
[tj] | not in the way that dmesgd.nycbug.org does | 11:37 |
josch | [tj]: do you have a link? maybe we can get inspired by how they present the logs and improve this on our end | 11:37 |
josch | oh great! | 11:37 |
josch | that's a good point -- dmesg output is useful as well | 11:37 |
josch | there are regularly people showing up here who ask "i saw this in my dmesg -- is that bad?" | 11:38 |
grimmware | `NetBSD/vax 10.0 on VAXstation 4000 VLC (netboot)` is almost the best possible most recent entry there could have been | 11:38 |
[tj] | I push a dmesg for all of my machines, it is easier than turning them on to figure out how much ram they have | 11:39 |
- mjw (QUIT: Ping timeout: 244 seconds) (~mjw@gnu.wildebeest.org) | 11:50 | |
* Guest6824 -> mjw | 11:59 | |
- mjw (QUIT: Quit: Leaving) (~mjw@2001:1c06:2488:1400:4fd:39a7:74ac:7bae) | 12:05 | |
minute | asiaRF wifi cards are here :0 | 12:34 |
josch | didn't you only order them last wednesday? o0 that was fast | 12:40 |
minute | yes megafast | 12:48 |
minute | also, it works!!! | 12:48 |
minute | 120mbit down without antenna | 12:48 |
minute | mega improvement over the onboard wifi of bpi cm4 | 12:48 |
josch | grimmware: since you were wondering, my current occupation: running reform-setup-wizard on s390x ;) | 12:55 |
josch | i also learned: gtk4 renders slightly differently on riscv64... | 12:56 |
minute | ok, antenna setup is very tricky | 12:57 |
minute | chip is mediatek mt7612u | 13:01 |
grimmware | grimmware: hahah, amazing | 13:14 |
minute | ok, it looks like this kernel works https://source.mnt.re/reform/reform-debian-packages/-/commit/39b9f760ef1ac8f55c1873348a6e273cb6d7342b | 13:16 |
minute | (for imx8mp) | 13:16 |
minute | ok, laird mimo antenna gives around 10x the bandwidth of the dualband (but separate) 2.4/5ghz molex antenna with mt7612u | 13:19 |
josch | minute: the only change i'm wary of is https://source.mnt.re/reform/reform-debian-packages/-/merge_requests/53/diffs?commit_id=0e760e331017793700d384cc4c9784b130838625 because ideally we want the diff to the Debian kernel to be small | 13:19 |
josch | do all the CONFIG_CPU_FREQ* configs need to be baked-in to keep things stable? | 13:20 |
minute | josch: CONFIG_CPU_FREQ_GOV_USERSPACE at lesat | 13:20 |
minute | at least | 13:20 |
josch | oh interesting | 13:20 |
josch | can you leave a comment in that file as a rationale? | 13:20 |
josch | otherwise in a few years we'll wonder why things were changed | 13:21 |
josch | as in: when i speak to linux kernel maintainers in Debian i want to be able to argue why some changes are needed | 13:21 |
minute | it is somehow required by imx8mp power management stuff | 13:21 |
minute | and that is required to get display working | 13:26 |
minute | and i want display as early as possible, otherwise other errors might be invisible | 13:27 |
minute | that's my rationale | 13:27 |
+ mjw (~mjw@2001:1c06:2488:1400:4fd:39a7:74ac:7bae) | 13:29 | |
minute | ok, we need some more people willing to test that build | 13:32 |
minute | amospalla: you around? | 13:32 |
amospalla | minute: yep | 13:32 |
amospalla | need a kernel tester? | 13:33 |
minute | amospalla: yess | 13:34 |
amospalla | I eat kernels, give me a kernel. | 13:35 |
minute | amospalla: https://source.mnt.re/reform/reform-debian-packages/-/jobs/5407/artifacts/file/repo/pool/main/l/linux/linux-image-6.10.3-mnt-reform-arm64_6.10.3-1+reform20240812T100643Z_arm64.deb | 13:36 |
minute | amospalla: nomz | 13:36 |
minute | interesting, using 2 separate antennas seems to work even better | 13:36 |
amospalla | minute: booted 5/5 times, something imposible before this new kernel. | 13:44 |
amospalla | :D | 13:44 |
amospalla | no wireless though, but I guess it is expected because I would need the qcald-* corresponding package (just being informative here). | 13:46 |
minute | amospalla: thaaanks, that's extremely good news | 13:46 |
minute | amospalla: and yeah, you're correct about wifi | 13:46 |
amospalla | thank you very much minute ! | 13:47 |
amospalla | to me, you do black magic like | 13:47 |
minute | josch: could we release this and then minimize the module config in another branch? | 13:48 |
minute | that way, people could continue updating etc | 13:48 |
+ mrdaught (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 14:02 | |
minute | ok, firstly i'm gonna merge this now | 14:05 |
+ mark_ (~mjw@gnu.wildebeest.org) | 14:14 | |
- mrdaught (QUIT: Read error: Connection reset by peer) (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 14:29 | |
+ mrdaught (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 14:30 | |
- mrdaught (QUIT: Read error: Connection reset by peer) (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 14:33 | |
+ mrdaught (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 14:35 | |
+ bkeys (~Thunderbi@45.134.140.153) | 14:41 | |
- mrdaught (QUIT: Read error: Connection reset by peer) (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 14:42 | |
- mark_ (QUIT: Ping timeout: 260 seconds) (~mjw@gnu.wildebeest.org) | 14:43 | |
+ murphnj (~murph@user/murphnj) | 14:43 | |
sevan | kop316: thanks for the pointer, I'll use that in the future, ended up commenting out of the one line in /etc/apt/sources.list and finishing the upgrade. | 14:46 |
josch | oh absolutely! people being able to update their systems again naturally has priority :) | 15:02 |
josch | ah i see you already pressed the merge button, good | 15:02 |
+ mrdaught (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 15:07 | |
+ mark_ (~mjw@gnu.wildebeest.org) | 15:16 | |
minute | josch: thanks! :3 | 15:20 |
minute | i will reenable the repo sync | 15:21 |
minute | done | 15:25 |
- mark_ (QUIT: Ping timeout: 248 seconds) (~mjw@gnu.wildebeest.org) | 15:42 | |
minute | amospalla: you should now be able to update and (re)install that kernel package cleanly via apt | 15:52 |
amospalla | minute: thank you, I just did :D | 15:52 |
minute | great | 15:53 |
josch | minute: if you slab a new git tag like 2024-08-12 to https://source.mnt.re/reform/reform-rk3588-uboot/ then we can also start producing system images for rk3588-mnt-pocket-reform | 15:59 |
minute | josch: alright, just a moment | 16:06 |
minute | josch: tag pushed | 16:07 |
josch | thank you! | 16:07 |
josch | i'm surprised there is only a single u-boot binary independent of the mainboard -- is this only a short-term solution and will there need to be different u-boot blobs in the future? | 16:09 |
minute | josch: that's yet unclear. | 16:10 |
josch | oka | 16:11 |
josch | anything else for the next reform-tools release? | 16:11 |
josch | is anybody with an imx8mq around who can test something for me? | 16:13 |
minute | josch: maybe! we do have an imx8mq laptop here. but it hasn't been updated in ages (it's very very slow to do that on sd card) | 16:15 |
amospalla | josch: the u-boot serial log? | 16:15 |
josch | amospalla: you have an imx8mq? i thought you only had a pocket? | 16:15 |
josch | minute: thank you for your offer but this is not important i think and we'll find somebody from the community who can help :) | 16:16 |
minute | josch: ok, phew :D | 16:16 |
amospalla | josch: oh, yes, you are right, mine is plus. | 16:16 |
minute | i'm happy that two major headaches got solved on one day... 6.10.3 for imx8mp and wifi for a311d (and maybe others!) | 16:17 |
amospalla | I'll try to get the u-boot serial log on my pocket, if I'm able to. | 16:17 |
josch | amospalla: that would be useful! | 16:18 |
josch | minute: but with a311d in the big reform i'm still stuck, no? | 16:19 |
amospalla | I bought weeks ago a usb-serial adapter, and later I found one somewhere at home I didn't knew I had. | 16:19 |
minute | josch: true ;/ you could bodge a mediatek usb wifi in there...... | 16:19 |
minute | josch: but maybe you'll be on rk3588 soon? | 16:19 |
josch | depends... a311d does everything i want right now :) | 16:20 |
amospalla | Do you know of any trick for not having to open each time wanting to connect to serial? | 16:20 |
josch | minute: you could probably tempt me if rk3588 had suspend support ;) | 16:22 |
minute | haha that's like the biggest possible challenge :D | 16:27 |
minute | amospalla: feeding serial cable out on one side ;) | 16:27 |
amospalla | yeah, that would be a good mod | 16:32 |
- mrdaught (QUIT: Read error: Connection reset by peer) (~mrdaught@2607:fb91:eae:d30b:3cec:ed86:c2ea:8502) | 16:38 | |
- colinsane (QUIT: Quit: bye) (~colinunin@97-113-70-61.tukw.qwest.net) | 16:49 | |
+ colinsane (~colinunin@97-113-70-61.tukw.qwest.net) | 16:55 | |
^alex | amospalla, we were thinking of modding the UART onto one of the USB sideband pins, but we don't have sufficient SMT skill to touch the usb-c port >.> | 17:14 |
^alex | also our power-save changes seem to have cut down on the percentage that it takes off the battery gauge overnight \o/ | 17:16 |
amospalla | this power save sound great | 17:19 |
^alex | it's mostly "cut off clocking to various parts of the keyboard and system controllers" | 17:22 |
^alex | also our perennial brainbug of "rewrite the firmware in forth" hasn't hit yet, waiting for it | 17:28 |
+ mrdaught (~mrdaught@2607:fb91:bd14:1f65:8489:7da7:f8b8:258) | 17:33 | |
- mrdaught (QUIT: Read error: Connection reset by peer) (~mrdaught@2607:fb91:bd14:1f65:8489:7da7:f8b8:258) | 17:36 | |
+ mark_ (~mjw@gnu.wildebeest.org) | 18:33 | |
josch | haha :D | 18:47 |
* mjw -> Guest3131 | 19:25 | |
- Guest3131 (QUIT: Killed (calcium.libera.chat (Nickname regained by services))) (~mjw@2001:1c06:2488:1400:4fd:39a7:74ac:7bae) | 19:25 | |
* mark_ -> mjw | 19:25 | |
+ Guest3131 (~mjw@2001:1c06:2488:1400:4fd:39a7:74ac:7bae) | 19:26 | |
chartreuse | josch: But if you get the rk3588 then maybe you or someone else will get suspend working :P | 19:51 |
chartreuse | ^alex: For the full reform my keyboard code put the controller to sleep only to be woken up by the WDT ever second or so to poll the keyboard. If on on the pocket the circle key is on a pin that can trigger interrupts you can go even lower power there by just setting up the keyboard and sleeping till an interrupt | 19:52 |
^alex | chartreuse, thats the general plan, but going dormant on the rp2040 is Fun With Clock Trees | 19:55 |
josch | chartreuse: there is absolutely zero chance that i will be that person though :) | 19:55 |
^alex | we also want to, like, shut down the USB hardware when the system is off, and that takes a bit more tinkering | 19:56 |
josch | chartreuse: plain lack of skill on my part :) | 19:56 |
chartreuse | I thought the USB hardware would already be off? On the main reform the LPC controls the power rails and shuts off them when the system is off, only the 5v standby supply goes to the keyboard and LPC | 19:58 |
^alex | the pocket keyboard continues to power its device-end hardware while the main board is off | 20:01 |
^alex | continues to call tud_task, etc | 20:01 |
^alex | anyway our basic experiments with `__wfi()` end up freezing the keyboard, jacking up its other timings, or making it not enumerate | 20:02 |
chartreuse | Ah okay it's solely over USB then, the keyboard on the reform2 has a second serial bus to talk with the LPC without using USB | 20:06 |
chartreuse | You probably have to find some lower level commands on the RP2040 to temporarilly disable the USB stack running on it before entering sleep | 20:07 |
^alex | it isn't solely over usb, there is a uart to the system controller, but the tinyusb stack remains running even with the system off | 20:10 |
^alex | similarly the syscon firmware polls the charger when it can instead be woken on interrupt | 20:11 |
^alex | and yeah, we've been spending a lot of free time reading the 2040 datasheet and sdk | 20:11 |
^alex | and i'm pretty sure the example code for gpio wakeup is just flat out wrong | 20:12 |
^alex | we really ought to tack some magnet wire to the test pads so we can picoprobe things >.> | 20:12 |
chartreuse | Other possibility is that the gpio is being used by a PIO, they can't entirely be shared as I found out | 20:12 |
+ bkeys1 (~Thunderbi@45.134.140.153) | 20:17 | |
- bkeys (QUIT: Ping timeout: 248 seconds) (~Thunderbi@45.134.140.153) | 20:17 | |
+ bkeys (~Thunderbi@45.134.140.153) | 20:18 | |
- bkeys1 (QUIT: Ping timeout: 252 seconds) (~Thunderbi@45.134.140.153) | 20:21 | |
- dodo (QUIT: Quit: dodo) (~dodo@user/dodo) | 20:35 | |
+ dodo (~dodo@user/dodo) | 20:37 | |
^alex | nah i'm pretty sure the PIO pins on the keyboard are dedicated to the thing they're PIOing | 20:55 |
Twodisbetter | anyone know if it is possible to get waybar to autohide like a normal taskbar? That is that it is normally hidden, but if you move the mouse cursor to the top of the screen it will slide down. When you move the mouse away from it, it then again hides. | 21:50 |
Twodisbetter | something like that possible? | 21:50 |
jfred | Just installed the replacement battery cells I ordered for my big Reform, fingers crossed that solves the issues I've been having. I think most of the old cells had been over discharged before I got the protected battery boards | 21:57 |
josch | Twodisbetter: people are achieving this by making waybar conditionally transparent: https://github.com/Alexays/Waybar/discussions/3225 | 21:57 |
Twodisbetter | thanks Josch, I'll dig into it and see if I can that to work as well | 22:00 |
Twodisbetter | do you know how the stuff for the sway config would be used in the wayfire.ini? | 22:01 |
Twodisbetter | stuff is escaped and qeued differently and I'm not sure where to begin there | 22:04 |
- gustav28 (QUIT: Quit: Quit) (~gustav@c-df53205c.019-141-67626730.bbcust.telenor.se) | 22:15 | |
- jacobk (QUIT: Ping timeout: 248 seconds) (~quassel@47-186-105-237.dlls.tx.frontiernet.net) | 22:35 | |
- chrcav (QUIT: Ping timeout: 252 seconds) (~chrcav@user/chrcav) | 23:08 | |
+ chrcav (~chrcav@user/chrcav) | 23:10 | |
- sir-photch (QUIT: Remote host closed the connection) (~m-hy5poy@static.93.70.235.167.clients.your-server.de) | 23:15 | |
+ sir-photch (~m-hy5poy@static.93.70.235.167.clients.your-server.de) | 23:17 | |
+ mrdaught (~mrdaught@2607:fb90:df83:d4d9:711f:2acb:7f48:fc79) | 23:34 | |
- mrdaught (QUIT: Read error: Connection reset by peer) (~mrdaught@2607:fb90:df83:d4d9:711f:2acb:7f48:fc79) | 23:36 |
Generated by irclog2html.py 2.17.3 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!