Commit Graph

45243 Commits

Author SHA1 Message Date
Ava Chow
c461d15287 Merge bitcoin/bitcoin#32511: refactor: bdb removals
fafee85358 remove unused GetDestinationForKey (MarcoFalke)
fac72fef27 remove unused GetAllDestinationsForKey (MarcoFalke)
fa91d57de3 remove unused AddrToPubKey (MarcoFalke)
faecf158d9 remove unused Import* function signatures (MarcoFalke)

Pull request description:

  remove dead code

ACKs for top commit:
  davidgumberg:
    crACK fafee85358
  achow101:
    ACK fafee85358
  rkrux:
    crACK fafee85358

Tree-SHA512: e48d4bf5f50b97dbd11260efdaf88277bd6a2478665b84353637d63e783003e90d29718836ffdc2e251ac9b77b22e616a0983a59d1b6658b3645a5575b871eae
2025-05-16 13:28:31 -07:00
furszy
86e1111239 test: verify node skips loading legacy wallets during startup 2025-05-16 15:36:27 -04:00
Matthew Zipkin
12ff4be9c7 test: ensure -rpcallowip is compatible with RFC4193 2025-05-16 15:25:30 -04:00
Matthew Zipkin
c02bd3c187 config: Explain RFC4193 and CJDNS interaction in help and init error 2025-05-16 15:10:18 -04:00
Matthew Zipkin
f728b6b111 init: Configure reachable networks before we start the RPC server
We need to determine if CJDNS is reachable before we parse any IPv6
addresses (for example, by the -rpcallowip setting) or an RFC4193
address might get flipped to CJDNS, which can not be used with subnets
2025-05-16 15:10:13 -04:00
merge-script
b15c386933 Merge bitcoin/bitcoin#32519: ci: Enable feature_init and wallet_reorgsrestore in valgrind task
fa2be605fe ci: Enable feature_init and wallet_reorgsrestore in valgrind task (MarcoFalke)

Pull request description:

  The `fork()` isn't needed and in fact makes the forked process not react to signals (like kill or terminate), so just avoid it and run the valgrind process directly in the CI task.

  Can be tested with something like:

  `env -i HOME="$HOME" PATH="$PATH" USER="$USER" MAKEJOBS="-j$(nproc)" FILE_ENV="./ci/test/00_setup_env_native_valgrind.sh" ./ci/test_run_all.sh`

ACKs for top commit:
  fanquake:
    ACK fa2be605fe - x86_64, aarch64

Tree-SHA512: 6293447d501191598c08f0cb9fcb4ed91e4cfec11255e702a926346ef8011d6ebc0ca12e9a1c14fa53541318c4e05dee5c96dfe965dcf4cf833c9392158ab883
2025-05-16 18:01:07 +01:00
fanquake
7015052eba build: remove Wsuggest-override suppression from leveldb build 2025-05-16 16:08:40 +01:00
Sebastian Falbesoner
7bc64a8859 test: properly check for per-tx sigops limit
Currently the per-tx sigops limit standardness check (bounded by
`MAX_STANDARD_TX_SIGOPS_COST`, throwing "bad-txns-too-many-sigops"
if exceeded) is only indirectly tested with the much higher per-block
consensus limit (`MAX_BLOCK_SIGOPS_COST`), i.e. an increase in the
limit would still pass all tests. Refine that by splitting up the invalid
tx template `TooManySigops` in a per-block and a per-tx one.

The involved functional tests taking use of these templates are
`feature_block.py` and `p2p_invalid_txs.py`.
2025-05-16 16:35:42 +02:00
merge-script
3f83c744ac Merge bitcoin/bitcoin#32526: fuzz: Delete wallet_notifications
fad2faf6c5 fuzz: Delete wallet_notifications (MarcoFalke)

Pull request description:

  The fuzz target has many issues:

  * It has never found a meaningful issue.
  * It is still slow, despite https://github.com/bitcoin/bitcoin/pull/28933 and https://github.com/bitcoin/bitcoin/pull/31238.
  * It is unmaintained, see https://github.com/bitcoin/bitcoin/pull/28882#issuecomment-1814654792 (missing meaningful coverage) or https://github.com/bitcoin/bitcoin/pull/31238#issuecomment-2460821784 (unstable) or https://github.com/bitcoin/bitcoin/pull/31467#issuecomment-2672649759 (fix slowness), etc ...

  So remove it for now. It can be added back once one or all of the issues have been addressed.

ACKs for top commit:
  fanquake:
    ACK fad2faf6c5
  brunoerg:
    ACK fad2faf6c5

Tree-SHA512: e48c08352688c0eead5793ee1c7513ddd37459bc665e914a770a3f69772674ed0e14c05e5d07b333ca0ab03bb35d7d9d32561311af569958e19dc4607c11fade
2025-05-16 13:43:01 +01:00
MarcoFalke
fa1f10a49e doc: Fix minor typos in rpc help 2025-05-16 14:17:55 +02:00
fanquake
e2c84b896f Squashed 'src/leveldb/' changes from 4188247086..113db4962b
113db4962b Merge bitcoin-core/leveldb-subtree#51: refactor: add missing overrides
9defe8494a refactor: add missing overrides

git-subtree-dir: src/leveldb
git-subtree-split: 113db4962b8be416c17ad2b4bdcc5514c51d7181
2025-05-16 12:39:59 +01:00
fanquake
0769c8fc99 Update leveldb subtree to latest upstream 2025-05-16 12:39:59 +01:00
merge-script
04c6c961b6 Merge bitcoin/bitcoin#32527: test: Remove unused verify_flags suppression
fab5a3c803 test: Remove unused verify_flags suppression (MarcoFalke)

Pull request description:

  `static bool verify_flags(unsigned)` was removed in commit 80f8b92f4f

ACKs for top commit:
  fanquake:
    ACK fab5a3c803
  hebasto:
    ACK fab5a3c803, I have reviewed the code and it looks OK.

Tree-SHA512: da0cfc6ee253419c0aef316cd9c8366b744231261b755a95618ca0e777c1d95cecba8199db5486fd35079ded89c64c1a9f5b056f01dada4176b815b0d97261b7
2025-05-16 11:55:03 +01:00
merge-script
742b30549f Merge bitcoin/bitcoin#32491: build: document why we check for std::system
8f4ba90b8f build: document why we check for std::system (fanquake)

Pull request description:

  It's probably debatable if we support targets like iOS, but for now, document why we are checking for this standard library feature.

  Trying to use `std::system` for a `aarch64-darwin-ios` target results in:
  ```bash
  test.cpp:7:10: error: 'system' is unavailable: not available on iOS
      7 |     std::system("some_command");
        |          ^
  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_stdlib.h:203:6: note: 'system' has been explicitly marked unavailable here
    203 | int      system(const char *) __DARWIN_ALIAS_C(system);
        |          ^
  1 error generated.
  ```

ACKs for top commit:
  Sjors:
    ACK 8f4ba90b8f

Tree-SHA512: 219cac205b36004c607194f6956c2ce6153f192bd4349e505b52c4e511e403e195ce0f462ae10c515e67f1e95d4b1636d526c8e4376004044853b574a84df427
2025-05-16 11:46:55 +01:00
MarcoFalke
fab5a3c803 test: Remove unused verify_flags suppression 2025-05-16 11:17:49 +02:00
merge-script
c521192d8b Merge bitcoin/bitcoin#32485: Update minisketch subtree
bf25a0918f Squashed 'src/minisketch/' changes from d1e6bb8bbf..ea8f66b1ea (fanquake)

Pull request description:

  Includes:
  * https://github.com/bitcoin-core/minisketch/pull/89
  * https://github.com/bitcoin-core/minisketch/pull/94 (in #32482)

ACKs for top commit:
  maflcko:
    lgtm ACK 46b533dfe6
  willcl-ark:
    ACK 46b533dfe6

Tree-SHA512: 7655aa480381c711fd3397fc7031be4619d5bd67f9d68f7e69f5f903734e776b97f7a2384257b365fc4e1f504b9c97acfd4a355840d1064d4c2c2f259070f4ef
2025-05-16 10:04:19 +01:00
merge-script
3afde679c3 Merge bitcoin/bitcoin#32296: refactor: reenable implicit-integer-sign-change check for serialize.h
516f0689b5 refactor: re-enable UBSan implicit-sign-change in serialize.h (Lőrinc)
5827e93507 refactor: use consistent size type for serialization template parameters (Lőrinc)

Pull request description:

  Inspired by https://github.com/bitcoin/bitcoin/pull/32154, the main goal of this PR is to reenable sanitizer checks for `serialize.h` since it's modified in a few other PRs.

ACKs for top commit:
  maflcko:
    review ACK 516f0689b5 🎈
  stickies-v:
    ACK 516f0689b5, nice cleanup!

Tree-SHA512: 63da9bf1988a5b68e3c053b0ed786b8735f8f75b05763511522d1601b728b55798006e063137447615c266582622642d3226318fa83e488bd363f1756f8811e8
2025-05-16 09:51:30 +01:00
merge-script
5af757bb78 Merge bitcoin/bitcoin#32505: depends: bump to latest config.guess and config.sub
486bc91790 depends: bump to latest config.sub (Sebastian Falbesoner)
6880383427 depends: bump to latest config.guess (Sebastian Falbesoner)

Pull request description:

  Noticed that these files were last updated from [upstream](https://git.savannah.gnu.org/gitweb/?p=config.git) quite a while ago (in 2023, see #28781), so bump them again.

  Can be verified via e.g.
  ```
  $ git clone https://git.savannah.gnu.org/git/config.git /tmp/config.git
  $ diff /tmp/config.git/config.guess ./depends/config.guess
  $ diff /tmp/config.git/config.sub ./depends/config.sub
  ```

ACKs for top commit:
  fanquake:
    ACK 486bc91790

Tree-SHA512: cbfd21a351a2404e5821610b6ef84d1050ea1a8045da8bfb535ef1ed49b5ad3f4140e8332d1eed545332f96d3117adc531d73aa83e19e7154fe382d041102c93
2025-05-16 09:35:19 +01:00
merge-script
c60455a645 Merge bitcoin/bitcoin#32500: init: drop -upnp
301993ebf7 init: drop -upnp (fanquake)

Pull request description:

  This was slated for removal in `30.0`, so remove it.

ACKs for top commit:
  i-am-yuvi:
    ACK 301993ebf7
  maflcko:
    review ACK 301993ebf7
  darosior:
    tACK 301993ebf7

Tree-SHA512: 635e374c013fa08c4cda7caadc465c89bb376d3ee2c66f67a27e3ed9031844674d3e996169aaffb9b65a67b0d44d92aaec000aaf69abe3dd10fce2f4138f3e27
2025-05-16 09:31:45 +01:00
merge-script
e230affaa3 Merge bitcoin/bitcoin#32396: cmake: Add application manifests when cross-compiling for Windows
8f4fed7ec7 symbol-check: Add check for application manifest in Windows binaries (Hennadii Stepanov)
2bb6ab8f1b ci: Add "Get bitcoind manifest" steps to Windows CI jobs (Hennadii Stepanov)
282b4913c7 cmake: Add application manifests when cross-compiling for Windows (Hennadii Stepanov)

Pull request description:

  Windows [application manifests ](https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests) provide several benefits—such as enhanced security settings, and the ability to set a process-wide code page (required for https://github.com/bitcoin/bitcoin/pull/32380), as well as granular control over supported Windows versions. Most of these benefits lie beyond the scope of this PR and will be evaluated separately.

  On the current master branch @ fc6346dbc8, the linker generates and embeds a manifest only when building with MSVC:
  ```xml
  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
        </requestedPrivileges>
      </security>
    </trustInfo>
  </assembly>
  ```

  However, this manifest fails validation:
  ```
  > mt.exe -nologo -inputresource:build\bin\Release\bitcoind.exe -validate_manifest

  mt.exe : general error 10100ba: The manifest is missing the definition identity.
  ```

  This PR unifies manifest embedding for both native and cross-compilation builds.

  Here is the change in the manifest on Windows:
  ```diff
  --- bitcoind-master.manifest
  +++ bitcoind-pr.manifest
  @@ -1,5 +1,6 @@
   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  +  <assemblyIdentity type="win32" name="org.bitcoincore.bitcoind" version="29.99.0.0"></assemblyIdentity>
     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
       <security>
         <requestedPrivileges>
  ```

  which effectively resolves the "missing the definition identity" error.

  Finally, “Get bitcoind manifest” steps have been added to the Windows CI jobs to ensure the manifest is embedded and validated.

ACKs for top commit:
  sipsorcery:
    re-tACK 8f4fed7ec7.
  hodlinator:
    re-ACK 8f4fed7ec7
  davidgumberg:
    Reviewed and tested ACK 8f4fed7ec7

Tree-SHA512: 6e2dbdc77083eafdc242410eb89a6678e37b11efd786505dcd7844f0bac8f44d68625e62924a03b26549bdb4aaec5330dc608e6b4d66789f0255092e23aef6cb
2025-05-16 09:19:13 +01:00
merge-script
51be79c42b Merge bitcoin/bitcoin#32238: qt, wallet: Convert uint256 to Txid
0671d66a8e wallet, refactor: Convert uint256 to Txid in wallet (marcofleon)
c8ed51e62b wallet, refactor: Convert uint256 to Txid in wallet interfaces (marcofleon)
b3214cefe6 qt, refactor: Convert uint256 to Txid in the GUI (marcofleon)

Pull request description:

  This is part of https://github.com/bitcoin/bitcoin/pull/32189.

  Converts all instances of transactions from `uint256` to `Txid` in the wallet, GUI, and related interfaces.

ACKs for top commit:
  stickies-v:
    re-ACK 0671d66a8e, no changes since 65fcfbb2b38bef20a58daa6c828c51890180611d except rebase.
  achow101:
    ACK 0671d66a8e
  furszy:
    Code review ACK 0671d66a8e

Tree-SHA512: 9fd4675db63195c4eed2d14c25015a1821fb597f51404674e4879a44a9cf18f475021a97c5f62f3926b7783ade5a38567386f663acba9f5861f1f59c1309ed60
2025-05-16 08:54:45 +01:00
merge-script
f96ae941a1 Merge bitcoin/bitcoin#32525: build: Revert "Temporarily disable compiling fuzz/utxo_snapshot.cpp with MSVC
fa2c662362 build: Revert "Temporarily disable compiling `fuzz/utxo_snapshot.cpp` with MSVC" (MarcoFalke)

Pull request description:

  Now that GitHub Actions has a fixed version and the Windows developers have updated their compiler, the workaround is no longer needed.

ACKs for top commit:
  davidgumberg:
    reACK fa2c662362
  hodlinator:
    ACK fa2c662362

Tree-SHA512: 952b36c917c91d78d82b5013e1df338b23f860fad7be43327150581f403050e61f748fc75557ec96fb2b115a2cc0246a506bc2ddc25e05f5a41339bd466c4b1a
2025-05-16 08:48:50 +01:00
MarcoFalke
fad2faf6c5 fuzz: Delete wallet_notifications 2025-05-16 09:26:42 +02:00
Hodlinator
bf950c4544 qa: Improve suppressed errors output
Original discussion: https://github.com/bitcoin/bitcoin/pull/30660#discussion_r2080132673
2025-05-16 09:20:51 +02:00
Hodlinator
075352ec8e qa: assert_raises_message() - search in str(e)
repr() is annoying because it requires escaping special characters, use str() instead.

Original discussion: https://github.com/bitcoin/bitcoin/pull/30660#discussion_r2080292165
2025-05-16 09:20:51 +02:00
Hodlinator
bd8ebbc4ab qa: Make --timeout-factor=0 result in a smaller factor
Would otherwise cause an OverflowError in feature_framework_startup_failures.py when calling subprocess.run() with 60 * factor.

Fixes #32506

Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
2025-05-16 09:20:51 +02:00
MarcoFalke
fa2c662362 build: Revert "Temporarily disable compiling fuzz/utxo_snapshot.cpp with MSVC"
This reverts commit b2d5361002.

Also, adjust the doc to reflect the new minimum version. Versions 17.6
or 17.11 (or anything in between) may still work on a best-effor basis,
but it is not checked by CI or by developers.
2025-05-16 09:12:00 +02:00
MarcoFalke
8888bb499d rest: Reject + sign in /blockhashbyheight/ 2025-05-15 22:51:15 +02:00
MarcoFalke
fafd43c691 test: Reject + sign when parsing regtest deployment params
The + sign does not make sense for times or heights.
2025-05-15 22:12:24 +02:00
MarcoFalke
fa123afa0e Reject + sign when checking -ipcfd 2025-05-15 22:12:15 +02:00
MarcoFalke
fa479857ed Reject + sign in SplitHostPort
It is better to reject it with an error. For example,

$ bitcoin-cli -rpcconnect=127.0.0.1:+23501 -getinfo
error: Invalid port provided in -rpcconnect: 127.0.0.1:+23501
2025-05-15 22:12:14 +02:00
MarcoFalke
fab4c2967d net: Reject + sign when parsing subnet mask
It does not make sense and it is rejected by other parsers as well:

>>> ipaddress.ip_network("1.2.3.0/+24")
ValueError: '1.2.3.0/+24' does not appear to be an IPv4 or IPv6 network
2025-05-15 22:11:52 +02:00
MarcoFalke
fa89652e68 init: Reject + sign in -*port parsing
It would be confusing to specify the sign for an unsigned value here, so
reject it.
2025-05-15 22:11:46 +02:00
furszy
9f94de5bb5 wallet: init, don't error out when loading legacy wallets
Instead of failing during initialization when encountering a legacy wallet, skip
loading the wallet and notify the user accordingly.

This allows users to access migration functionalities without needing to manually
remove the wallet from settings.json or resort to using the bitcoin-wallet utility.

This means that GUI users will be able to use the migration button, and bitcoin-cli
users will be able to call the migratewallet RPC directly after init.
2025-05-15 15:14:29 -04:00
MarcoFalke
fa9c45577d cli: Reject + sign in -netinfo level parsing
It would be confusing to specify the sign for an unsigned value here, so
reject it.
2025-05-15 19:48:38 +02:00
MarcoFalke
fa98041325 refactor: Use ToIntegral in CreateFromDump
The unsigned version is never serialized with a `+` prefix, so the
stricter ToIntegral can be used.
2025-05-15 19:34:08 +02:00
MarcoFalke
fa23ed7fc2 refactor: Use ToIntegral in ParseHDKeypath
ToIntegral<uint32_t> only accepts numbers, so just use that to replace
the equivalent but more verbose way with find_first_not_of+ParseUInt32.
2025-05-15 19:33:58 +02:00
MarcoFalke
fa2be605fe ci: Enable feature_init and wallet_reorgsrestore in valgrind task 2025-05-15 17:59:50 +02:00
merge-script
725c9f7780 Merge bitcoin/bitcoin#31895: doc: Improve dependencies.md
e62423d6f1 doc: Improve dependencies.md documentation (Nicola Leonardo Susca)
a3520f9d56 doc: Add dependency self-compilation info (Nicola Leonardo Susca)
d1fdc84c54 doc: Remove Linux Kernel from dep. table (Nicola Leonardo Susca)

Pull request description:

  Small improvements to the `dependencies.md` documentation as a follow-up for #31634.

  **Linux Kernel** does not need to be in the dependencies as it is not required for cross-compiling from other systems, and users building on Linux should not expect they can build using any EOL kernel, see: https://github.com/bitcoin/bitcoin/pull/31634#discussion_r1957123270

  **Runtime dependencies** can be in a separate table to improve readability. See: https://github.com/bitcoin/bitcoin/pull/31634#issuecomment-2589412550

  **Version used** is redundant as the depends package definition is already linked in the table and can thus be removed, see: https://github.com/bitcoin/bitcoin/pull/31895#discussion_r2063356972

ACKs for top commit:
  maflcko:
    lgtm ACK e62423d6f1 🛄
  hebasto:
    ACK e62423d6f1.
  jonatack:
    ACK e62423d6f1

Tree-SHA512: 586c450aec7ece5d543bcb12796a2bb7ff459e15c8813a7b5104a38d09fc51e7e902363ff023be48273ae2b1a1b0807a439c8523b4ea2e398b76b7c9a48d0dfb
2025-05-15 16:58:35 +01:00
merge-script
bdc1cef1de Merge bitcoin/bitcoin#32507: ci: Exclude failing wallet_reorgsrestore.py from valgrind task for now
fa981b90f5 ci: Exclude failing wallet_reorgsrestore.py from valgrind task for now (MarcoFalke)

Pull request description:

  Fixes https://github.com/bitcoin/bitcoin/issues/32493

  For some reason terminate or kill do not work inside the CI system under valgrind.

  So disable the test for now, until a solution is found.

ACKs for top commit:
  fanquake:
    ACK fa981b90f5
  mzumsande:
    utACK fa981b90f5

Tree-SHA512: ce591fa7ffffbf757e2c15744e36a9e57300edf743400938e49fd02291f3977c551a3af1635bc7a6ccc1900d5ea150a64ee2ace46c1d765019ab11bd51035139
2025-05-15 16:24:42 +01:00
MarcoFalke
fae840e94b rpc: Reject beginning newline in RPC docs
It is harmless, but a bit confusing and not needed for new code.

Also, update the remaining instances that were not found by the
scripted-diff.
2025-05-15 16:34:27 +02:00
Nicola Leonardo Susca
e62423d6f1 doc: Improve dependencies.md documentation
- Remove the "Version used" column from the dependencies tables as the
  depends package definition which defines the version used is already
  linked. In case a developer is interested in which PR introduced this
  file/version they can use `git blame` on the package definition as
  usual. This removes doc. maintenance overhead and eliminates the risk
  of stale information about the "Version used", see comment:
  https://github.com/bitcoin/bitcoin/pull/31895#discussion_r2063356972

- Separate dependency tables into build-time and run-time tables for
  easier distinction of the two and to avoid repeating the same
  information ("No"/"Yes") for better readability.

- Order dependencies alphabetically
2025-05-15 16:08:47 +02:00
Nicola Leonardo Susca
a3520f9d56 doc: Add dependency self-compilation info
The `dependencies.md` should mention that it is possible to self-compile
the dependencies and reference `depends/README.md` for instructions.
Also mention full path to `/doc/build-*.md` for clarity.
2025-05-15 16:08:39 +02:00
Nicola Leonardo Susca
d1fdc84c54 doc: Remove Linux Kernel from dep. table
Linux Kernel is neither an optional nor a required dependency for
Bitcoin Core.
2025-05-15 16:08:33 +02:00
nervana21
135a0f0aa7 doc: Add missing top-level description to pruneblockchain RPC
Previously, the `pruneblockchain` RPC help output included only the method signature and arguments, with no top-level description explaining its purpose or constraints.

This PR adds a concise top-level description, improving documentation consistency and alerting users to the potential impacts of using the command.
2025-05-15 09:42:40 -04:00
MarcoFalke
fa414eda08 scripted-diff: Remove unused leading newline in RPC docs
-BEGIN VERIFY SCRIPT-
 perl -0777 -pi -e 's/RPCHelpMan{\s*("[^"]+"),\s*"\\n/RPCHelpMan{\n        \1,\n        "/g' $( git grep -l 'RPCHelpMan{' )
-END VERIFY SCRIPT-
2025-05-15 15:28:11 +02:00
MarcoFalke
fafee85358 remove unused GetDestinationForKey
It is only used in test. There it is problematic, because it sometimes
relies on m_default_address_type. If the default were changed to
BECH32M, those tests would fail the assert(false).

So just use PKHash{} in all tests and remove GetDestinationForKey.
2025-05-15 14:59:03 +02:00
MarcoFalke
fac72fef27 remove unused GetAllDestinationsForKey 2025-05-15 14:58:39 +02:00
MarcoFalke
fa91d57de3 remove unused AddrToPubKey 2025-05-15 14:58:17 +02:00
Hennadii Stepanov
8f4fed7ec7 symbol-check: Add check for application manifest in Windows binaries
Check that the application manifest is present in all binaries.

Co-authored-by: laanwj <126646+laanwj@users.noreply.github.com>
2025-05-15 13:58:13 +01:00