git-annex.git
6 years agoprove this optimisation would not be safe, so close
Joey Hess [Mon, 4 May 2020 18:35:11 +0000 (14:35 -0400)]
prove this optimisation would not be safe, so close

6 years agocomment
Joey Hess [Mon, 4 May 2020 17:25:10 +0000 (13:25 -0400)]
comment

6 years agoclose too old version
Joey Hess [Mon, 4 May 2020 17:05:41 +0000 (13:05 -0400)]
close too old version

6 years agoavoid beware of the leopard situation
Joey Hess [Mon, 4 May 2020 17:01:11 +0000 (13:01 -0400)]
avoid beware of the leopard situation

* Display a warning message when a remote uses a protocol, such as
  git://, that git-annex does not support. Silently skipping such a
  remote was confusing behavior.

  It sets annex-ignore, so the warning is only displayed once.

* Also display a warning message when a remote, without a known uuid,
  is located in a directory that does not currently exist, to avoid
  silently skipping such a remote.

  This is a bit more debatable, since git-annex get will say,
  try making repository available. And since it does not set annex-ignore,
  the warning will be displayed repeatedly. It's also an extreme edge case,
  I don't think I've ever seen it happen in real life.

6 years agoresponse
Joey Hess [Mon, 4 May 2020 16:55:41 +0000 (12:55 -0400)]
response

6 years agofix some build warnings
Joey Hess [Mon, 4 May 2020 16:44:26 +0000 (12:44 -0400)]
fix some build warnings

6 years agoAdded a comment: Still fails with git-annex 8.20200330 via backports
beryllium@5bc3c32eb8156390f96e363e4ba38976567425ec [Mon, 4 May 2020 09:02:03 +0000 (09:02 +0000)]
Added a comment: Still fails with git-annex 8.20200330 via backports

6 years ago(no commit message)
beryllium@5bc3c32eb8156390f96e363e4ba38976567425ec [Sun, 3 May 2020 02:39:31 +0000 (02:39 +0000)]

6 years agofix build
Joey Hess [Fri, 1 May 2020 23:05:35 +0000 (19:05 -0400)]
fix build

6 years agoadd news item for git-annex 8.20200501
Joey Hess [Fri, 1 May 2020 21:42:32 +0000 (17:42 -0400)]
add news item for git-annex 8.20200501

6 years agoreleasing package git-annex version 8.20200501
Joey Hess [Fri, 1 May 2020 21:41:36 +0000 (17:41 -0400)]
releasing package git-annex version 8.20200501

6 years agoreproduced and some analysis
Joey Hess [Fri, 1 May 2020 18:58:24 +0000 (14:58 -0400)]
reproduced and some analysis

6 years agofix extension
Joey Hess [Fri, 1 May 2020 18:18:57 +0000 (14:18 -0400)]
fix extension

6 years agofix format
Joey Hess [Fri, 1 May 2020 16:30:58 +0000 (12:30 -0400)]
fix format

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Thu, 30 Apr 2020 17:54:45 +0000 (13:54 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agoadded remote variants
Joey Hess [Thu, 30 Apr 2020 17:49:22 +0000 (13:49 -0400)]
added remote variants

Todo item is done at last.

Might later want to think about testing some other types of remotes that
can be tested locally. The git remote itself is probably already well
enough tested by the test suite that testremote is not needed. Could
test things like bup, or rsync to a local directory. Or even external,
although that would require embedding an external special remote program
into the test suite..

6 years agoadded export remote tests
Joey Hess [Thu, 30 Apr 2020 17:13:08 +0000 (13:13 -0400)]
added export remote tests

6 years agotestremote in test is working
Joey Hess [Thu, 30 Apr 2020 16:59:20 +0000 (12:59 -0400)]
testremote in test is working

Not yet testing export, or remote variants, but it already adds several
hundred test cases, so big win.

6 years agowip
Joey Hess [Wed, 29 Apr 2020 19:48:09 +0000 (15:48 -0400)]
wip

This does not compile, and I hit a bad dead end. Wah.

6 years agogroundwork for adding testremote to git-annex test
Joey Hess [Wed, 29 Apr 2020 17:16:43 +0000 (13:16 -0400)]
groundwork for adding testremote to git-annex test

Factored out a mkTestTree, which can be used to get a TestTree,
w/o needing to first run any annex actions, which the main test suite
cannot do because it does not operate in an annex repo to start with,
and it needs to start testing before a repo is available.

6 years agoAdded a comment: thanks!
kyle [Tue, 28 Apr 2020 21:41:30 +0000 (21:41 +0000)]
Added a comment: thanks!

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Tue, 28 Apr 2020 21:25:25 +0000 (17:25 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agotodo
Joey Hess [Tue, 28 Apr 2020 21:24:53 +0000 (17:24 -0400)]
todo

6 years agofix testremote to not throw away annex state
Joey Hess [Tue, 28 Apr 2020 21:19:07 +0000 (17:19 -0400)]
fix testremote to not throw away annex state

aeca7c2207a652c8a72f044204a5c0edb4782aac exposed this problem, but it
was never a good idea to have a series of test cases, some of which depend on
prior ones, and throw away annex state after each.

6 years agoAdded a comment
kyle [Tue, 28 Apr 2020 20:48:18 +0000 (20:48 +0000)]
Added a comment

6 years agocomment
Joey Hess [Tue, 28 Apr 2020 20:45:34 +0000 (16:45 -0400)]
comment

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Tue, 28 Apr 2020 19:55:33 +0000 (15:55 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agomake the git-annex-snapshot a link to the log
Joey Hess [Tue, 28 Apr 2020 19:54:34 +0000 (15:54 -0400)]
make the git-annex-snapshot a link to the log

6 years agotestremote failures (regression)
kyle [Tue, 28 Apr 2020 19:51:51 +0000 (19:51 +0000)]
testremote failures (regression)

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Tue, 28 Apr 2020 19:48:11 +0000 (15:48 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agoAvoid a test suite failure when the environment does not let gpg be tested
Joey Hess [Tue, 28 Apr 2020 19:47:23 +0000 (15:47 -0400)]
Avoid a test suite failure when the environment does not let gpg be tested

Due to eg, too long a path to the agent socket, caused by running gpg in a
container where /run is not mounted, and/or some other gpg behavior like
unnecessarily making relative paths to its home directory absolute.

6 years agofollowup
Joey Hess [Tue, 28 Apr 2020 19:15:20 +0000 (15:15 -0400)]
followup

6 years agosupport required groupwanted
Joey Hess [Tue, 28 Apr 2020 17:31:26 +0000 (13:31 -0400)]
support required groupwanted

When the required content is set to "groupwanted", use whatever expression
has been set in groupwanted as the required content of the repo, similar to
how setting required content to "standard" already worked.

6 years agoAdded a comment
yarikoptic [Mon, 27 Apr 2020 19:46:22 +0000 (19:46 +0000)]
Added a comment

6 years ago(no commit message)
xloem [Mon, 27 Apr 2020 18:53:17 +0000 (18:53 +0000)]

6 years agocomment
Joey Hess [Mon, 27 Apr 2020 18:15:06 +0000 (14:15 -0400)]
comment

6 years agoaddurl --fast error message improvement
Joey Hess [Mon, 27 Apr 2020 17:48:14 +0000 (13:48 -0400)]
addurl --fast error message improvement

addurl: When run with --fast on an url that
annex.security.allowed-ip-addresses prevents accessing, display a more
useful message.

(Also importfeed --fast potentially.)

6 years agoresponse
Joey Hess [Mon, 27 Apr 2020 16:32:08 +0000 (12:32 -0400)]
response

6 years agoresponse
Joey Hess [Mon, 27 Apr 2020 16:23:27 +0000 (12:23 -0400)]
response

6 years agocomment
Joey Hess [Mon, 27 Apr 2020 16:20:07 +0000 (12:20 -0400)]
comment

6 years agoclose not really a bug, and improve fsck man page
Joey Hess [Mon, 27 Apr 2020 16:13:35 +0000 (12:13 -0400)]
close not really a bug, and improve fsck man page

6 years agoAdded a comment: Pusher crashed: fd:56: hPutStr: illegal operation (handle is closed)
jgeerds [Mon, 27 Apr 2020 08:52:11 +0000 (08:52 +0000)]
Added a comment: Pusher crashed: fd:56: hPutStr: illegal operation (handle is closed)

6 years agoAdded a comment
ct.git-annex@230092d9bd3cf09ced2b9605cdb14ad0a3db265d [Sun, 26 Apr 2020 20:18:48 +0000 (20:18 +0000)]
Added a comment

6 years agoAdded a comment: Delete duplicates and specify preferred locations
thk [Sun, 26 Apr 2020 11:18:39 +0000 (11:18 +0000)]
Added a comment: Delete duplicates and specify preferred locations

6 years agocomment
Joey Hess [Thu, 23 Apr 2020 20:21:18 +0000 (16:21 -0400)]
comment

6 years agoadd comment
Joey Hess [Thu, 23 Apr 2020 20:21:11 +0000 (16:21 -0400)]
add comment

6 years agosync: When some remotes to sync with are specified, and --fast is too, pick the lowes...
Joey Hess [Thu, 23 Apr 2020 20:08:45 +0000 (16:08 -0400)]
sync: When some remotes to sync with are specified, and --fast is too, pick the lowest cost of the specified remotes

Do not sync with a faster remote that was not specified.

That old behavior was only documented in the changelog, and was certianly
surprising. It also meant adding --fast made it slower..

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Thu, 23 Apr 2020 19:21:40 +0000 (15:21 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agoexternal: stop storing readonly=true in remote.log
Joey Hess [Thu, 23 Apr 2020 18:59:38 +0000 (14:59 -0400)]
external: stop storing readonly=true in remote.log

readonly=true is used to make an external special remote that does not
need the external program to be installed. It was stored in the
remote.log by default, and so every time it was specified in an
enableremote or initremote, whatever value was used became the new
default for subsequent enableremotes of that remote.

That was surprising, and I consider it to be a bug.

It does not make much sense to pass it to initremote because then how
would you populate that remote with anything? You would have to
enableremote elsewhere, and store content there. I'm assuming nobody
used it that way.

Someone might rely on passing it to enableremote once, and then that
being inherited in other clones. But that is not how it's documented to
be used. It is barely documented in git-annex at all, only in the
external special remote protocol, and the documentation there says to
"Document that this external special remote can be used in readonly
mode." (by the user of it passing readonly=true to enableremote). The
one external special remote that I know of that does document that is
<https://github.com/bgilbert/gcsannex> (the one that motivated adding
it). That one's docs do say to pass it to enableremote.

So, it seemed safe to make this behavior change. If someone was in fact
relying on one of those behaviors, all their current repos will still
work as they configured them (although they will need to deal
with the related change in 9f3c2dfedae7ec840365f9578763209abae1005c).
In new clones, they will find enableremote fails, complaining the
external program is not in path. An easy enough problem to recover from.

6 years agostop using remote.name.annex-readonly for two distinct things
Joey Hess [Thu, 23 Apr 2020 18:56:03 +0000 (14:56 -0400)]
stop using remote.name.annex-readonly for two distinct things

6 years ago(no commit message)
thk [Thu, 23 Apr 2020 15:57:17 +0000 (15:57 +0000)]

6 years agoremove spam
kyle [Wed, 22 Apr 2020 13:53:20 +0000 (13:53 +0000)]
remove spam

6 years ago(no commit message)
harimau [Tue, 21 Apr 2020 20:54:48 +0000 (20:54 +0000)]

6 years agoAdded a comment: "dry run" option
Ilya_Shlyakhter [Tue, 21 Apr 2020 19:04:07 +0000 (19:04 +0000)]
Added a comment: "dry run" option

6 years agofix bug involving local git remote and out of date location log
Joey Hess [Tue, 21 Apr 2020 16:36:58 +0000 (12:36 -0400)]
fix bug involving local git remote and out of date location log

get --from, move --from: When used with a local git remote, these used to
silently skip files that the location log thought were present on the
remote, when the remote actually no longer contained them. Since that
behavior could be surprising, now instead display a warning.

I got very confused when I encountered this behavior, since it was silently
skipping a file I needed that whereis said was on the remote.

get without --from already displayed a "unable to access these remotes"
message, which while a bit misleading in that the remote is likely
accessible, but just doesn't contain the file, at least indicated something
went wrong.

Having get --from display a warning makes it in line with get
w/o --from, so seems certianly ok. It might be there are situations where
move --from is used, on eg a whole directory, and the user only wants to
move whatever is present in the remote, and is perfectly ok with files
that are not present being skipped. So I'm less sure about the new warning
being ok there. OTOH, only local git remotes avoiding displaying a warning
in that case too, so this just brings them into line with other remotes.

(Also note that this makes it a little bit faster when dealing with a lot of
files, since it avoids a redundant stat of the file.)

6 years agodone
Joey Hess [Tue, 21 Apr 2020 15:30:49 +0000 (11:30 -0400)]
done

6 years agoclose
Joey Hess [Tue, 21 Apr 2020 15:29:51 +0000 (11:29 -0400)]
close

6 years agocheck-ignore resource pool
Joey Hess [Tue, 21 Apr 2020 15:20:10 +0000 (11:20 -0400)]
check-ignore resource pool

Much like check-attr before.

6 years agocheck-attr resource pool
Joey Hess [Tue, 21 Apr 2020 14:38:44 +0000 (10:38 -0400)]
check-attr resource pool

Limited to min of -JN or number of CPU cores, because it will often be
CPU bound, once it's read the gitignore file for a directory.

In some situations it's more disk bound, but in any case it's unlikely
to be the main bottleneck that -J is used to avoid. Eg, when dropping,
this is used for numcopies checks, but the main bottleneck will be
accessing the remotes to verify presence. So the user might decide to
-J32 that, but having 32 check-attr processes would just waste however
many filehandles they open, and probably worsen their performance due to
CPU contention.

Note that, I first tried just letting up to the -JN be started. However,
even when it's no bottleneck at all, that still results in all of them
being started. Why? Well, all the worker threads start up nearly
simulantaneously, so there's a thundering herd..

6 years agocat-file resource pool
Joey Hess [Mon, 20 Apr 2020 17:53:27 +0000 (13:53 -0400)]
cat-file resource pool

Avoid running a large number of git cat-file child processes when run with
a large -J value.

This implementation takes care to avoid adding any overhead to git-annex
when run without -J. When run with -J, there is a small bit of added
overhead, to manipulate the resource pool. That optimisation added a
fair bit of complexity.

6 years agocomment
Joey Hess [Mon, 20 Apr 2020 16:06:14 +0000 (12:06 -0400)]
comment

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Mon, 20 Apr 2020 14:03:38 +0000 (10:03 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years ago(no commit message)
thk [Sun, 19 Apr 2020 08:15:47 +0000 (08:15 +0000)]

6 years agobug
Joey Hess [Sun, 19 Apr 2020 03:57:48 +0000 (23:57 -0400)]
bug

6 years agoAdded a comment
yarikoptic [Sat, 18 Apr 2020 02:14:32 +0000 (02:14 +0000)]
Added a comment

6 years agoAdded a comment
yarikoptic [Sat, 18 Apr 2020 02:05:52 +0000 (02:05 +0000)]
Added a comment

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Fri, 17 Apr 2020 21:47:59 +0000 (17:47 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agocomment
Joey Hess [Fri, 17 Apr 2020 21:32:49 +0000 (17:32 -0400)]
comment

6 years agofix a thundering herd problem
Joey Hess [Fri, 17 Apr 2020 21:09:29 +0000 (17:09 -0400)]
fix a thundering herd problem

Avoid repeatedly opening keys db when accessing a local git remote and -J
is used.

What was happening was that Remote.Git.onLocal created a new annex state
as each thread started up. The way the MVar was used did not prevent that.
And that, in turn, led to repeated opening of the keys db, as well as
probably other extra work or resource use.

Also managed to get rid of Annex.remoteannexstate, and it turned out there
was an unncessary Maybe in the keysdbhandle, since the handle starts out
closed.

6 years agoAdded a comment: quick follow up
yarikoptic [Fri, 17 Apr 2020 20:34:55 +0000 (20:34 +0000)]
Added a comment: quick follow up

6 years agoremove unused import
Joey Hess [Fri, 17 Apr 2020 19:19:49 +0000 (15:19 -0400)]
remove unused import

6 years agomove remoteList into dupState
Joey Hess [Fri, 17 Apr 2020 18:36:45 +0000 (14:36 -0400)]
move remoteList into dupState

This does mean that RemoteDaemon.Transport.Tor's call runs it, otherwise
no change, but this is groundwork for doing more such expensive actions
in dupState.

6 years agocomment
Joey Hess [Fri, 17 Apr 2020 18:11:17 +0000 (14:11 -0400)]
comment

6 years agocomment
Joey Hess [Fri, 17 Apr 2020 16:37:28 +0000 (12:37 -0400)]
comment

6 years agoAdded a comment: find wanted on remote?
Dan [Thu, 16 Apr 2020 21:19:44 +0000 (21:19 +0000)]
Added a comment: find wanted on remote?

6 years agoAdded a comment
yarikoptic [Thu, 16 Apr 2020 03:43:13 +0000 (03:43 +0000)]
Added a comment

6 years agoAdded a comment: it is many more "open files" in reality
yarikoptic [Thu, 16 Apr 2020 03:41:07 +0000 (03:41 +0000)]
Added a comment: it is many more "open files" in reality

6 years agoimprove programPath
Joey Hess [Wed, 15 Apr 2020 20:46:34 +0000 (16:46 -0400)]
improve programPath

Fixes a failure mode where git-annex sync would try to run git-annex and
complain that it failed to find it in ~/.config/git-annex/program or PATH,
when there was a git-annex in /usr/bin/, but the original one was run
from elsewhere (eg, ~/bin) and happened not to be present any longer.

Now, it will fall back to using git-annex from PATH in such a case.
Which might fail due to some version incompatability, but still better
than a misleading error message.

Also made readProgramFile only read the file, not look for git-annex in
PATH as a fallback. That fallback may have confused Assistant.Upgrade,
which really wants the value from the file.

6 years agofix absolute filenames fed into --batch and git-annex info
Joey Hess [Wed, 15 Apr 2020 20:04:05 +0000 (16:04 -0400)]
fix absolute filenames fed into --batch and git-annex info

6 years agoreproduced
Joey Hess [Wed, 15 Apr 2020 19:06:53 +0000 (15:06 -0400)]
reproduced

6 years agoremove warning about git gc for annex.alwayscommit=false
Joey Hess [Wed, 15 Apr 2020 18:25:33 +0000 (14:25 -0400)]
remove warning about git gc for annex.alwayscommit=false

I doubt that warning has ever been right, but I'm sure it is not right
now.

For there to be a risk of git gc deleting objects that are in the annex
index, journal files would have to be staged into it, and deleted, but
the index not committed to the git-annex branch. And AFAICS, there is no
code path where that actually happens. I considered adding one recently,
but didn't.

The way it actually works is, as long as the user has annex.alwayscommit=false
the data lives in the journal, where it's safe from git gc. Then when
git-annex is run w/o that config, the journal is staged into the index,
which is immediately committed to the branch. There's no window where
git gc could delete the objects, because git gc only deletes objects
after some time (2 weeks by default).

Now, if git-annex gets suspended at just the wrong time, or interrupted,
then yes, it's possible. But doesn't matter whether that config was ever
set or not. And many uses of git-annex also recover from that situation
by committing to the git-annex branch.

6 years agoMerge branch 'master' of ssh://git-annex.branchable.com
Joey Hess [Wed, 15 Apr 2020 18:20:06 +0000 (14:20 -0400)]
Merge branch 'master' of ssh://git-annex.branchable.com

6 years agoclose bug that was apparently fixed satisfactorally
Joey Hess [Wed, 15 Apr 2020 18:17:21 +0000 (14:17 -0400)]
close bug that was apparently fixed satisfactorally

6 years agoclose
Joey Hess [Wed, 15 Apr 2020 18:15:41 +0000 (14:15 -0400)]
close

6 years agoclose old bug since git-annex no longer uses rsync like it used to
Joey Hess [Wed, 15 Apr 2020 18:08:48 +0000 (14:08 -0400)]
close old bug since git-annex no longer uses rsync like it used to

6 years agoAdded a comment
kyle [Wed, 15 Apr 2020 18:02:29 +0000 (18:02 +0000)]
Added a comment

6 years agofix all remaining -Wincomplete-uni-patterns warnings
Joey Hess [Wed, 15 Apr 2020 17:55:08 +0000 (13:55 -0400)]
fix all remaining -Wincomplete-uni-patterns warnings

A couple of these were probably actual bugs in edge cases. Most of the
changes I'm fine with. The fact that aeson's object returns sometihng
that we know will be an Object, but the type checker does not know is
kind of annoying.

6 years agodisable journal read optimisation when alwayscommit=false
Joey Hess [Wed, 15 Apr 2020 17:04:34 +0000 (13:04 -0400)]
disable journal read optimisation when alwayscommit=false

The journal read optimisation in aeca7c220 later got fixed in eedd73b84
to stage and commit any files that were left in the journal by a
previous git-annex run. That's necessary for the optimisation to work
correctly. But it also meant that alwayscommit=false started committing
the previous git-annex processes journalled changes, which defeated the
purpose of the config setting entirely.

So, disable the optimisation when alwayscommit=false, leaving the
files in the journal and not committing them. See my comments on the bug
report for why this seemed the best approach.

Also fixes a problem when annex.merge-annex-branches=false and there
are changes in the journal. That config indirectly prevents committing
the journal. (Which seems a bit odd given its name, but it always has..)
So, when there were changes in the journal, perhaps left there due to
alwayscommit=false being set before, the optimisation would prevent
git-annex from reading the journal files, and it would operate with out
of date information.

6 years agofix warning
Joey Hess [Wed, 15 Apr 2020 17:04:00 +0000 (13:04 -0400)]
fix warning

I don't think the NoConfigValue case ever actually occurs here.

6 years agocomment
Joey Hess [Wed, 15 Apr 2020 16:48:55 +0000 (12:48 -0400)]
comment

6 years agocomment
Joey Hess [Wed, 15 Apr 2020 16:43:22 +0000 (12:43 -0400)]
comment

6 years agobetter response
Joey Hess [Wed, 15 Apr 2020 16:17:57 +0000 (12:17 -0400)]
better response

6 years agohm
Joey Hess [Wed, 15 Apr 2020 16:14:39 +0000 (12:14 -0400)]
hm

6 years agocorrection
Joey Hess [Wed, 15 Apr 2020 16:12:11 +0000 (12:12 -0400)]
correction

6 years agocomment
Joey Hess [Wed, 15 Apr 2020 16:10:51 +0000 (12:10 -0400)]
comment

6 years ago(no commit message)
Christoph.Schmidpeter@d3e5d124c7d5459315c2a9f983ab9a70b88e1d03 [Wed, 15 Apr 2020 13:06:14 +0000 (13:06 +0000)]

6 years agoremoved
Christoph.Schmidpeter@d3e5d124c7d5459315c2a9f983ab9a70b88e1d03 [Wed, 15 Apr 2020 13:00:12 +0000 (13:00 +0000)]
removed

6 years agoAdded a comment: Problems with Assistant and Android
Christoph.Schmidpeter@d3e5d124c7d5459315c2a9f983ab9a70b88e1d03 [Wed, 15 Apr 2020 12:59:44 +0000 (12:59 +0000)]
Added a comment: Problems with Assistant and Android

6 years ago(no commit message)
Christoph.Schmidpeter@d3e5d124c7d5459315c2a9f983ab9a70b88e1d03 [Wed, 15 Apr 2020 12:59:04 +0000 (12:59 +0000)]

6 years ago(no commit message)
Christoph.Schmidpeter@d3e5d124c7d5459315c2a9f983ab9a70b88e1d03 [Wed, 15 Apr 2020 12:09:08 +0000 (12:09 +0000)]