Skip to main content

Decision Diagrams

Project description

OxiDD

Matrix

These are the Python bindings for OxiDD, a highly modular decision diagram framework written in Rust. The most prominent instance of decision diagrams is provided by (reduced ordered) binary decision diagrams (BDDs), which are succinct representations of Boolean functions 𝔹n → 𝔹. Such BDD representations are canonical and thus, deciding equality of Boolean functions—in general a co-NP-complete problem—can be done in constant time. Further, many Boolean operations on two BDDs f,g are possible in 𝒪(|f| · |g|) (where |f| denotes the node count in f). There are various other kinds of decision diagrams for which OxiDD aims to be a framework enabling high-performance implementations with low effort.

Features

  • Several kinds of (reduced ordered) decision diagrams are already implemented:
    • Binary decision diagrams (BDDs)
    • BDDs with complement edges (BCDDs)
    • Zero-suppressed BDDs (ZBDDs, aka ZDDs/ZSDDs)
    • Not yet exposed via the Python API: Multi-terminal BDDs (MTBDDs, aka ADDs) and Ternary decision diagrams (TDDs)
  • Extensibility: Due to OxiDD’s modular design, one can implement new kinds of decision diagrams without having to reimplement core data structures.
  • Concurrency: Functions represented by DDs can safely be used in multi-threaded contexts. Furthermore, apply algorithms can be executed on multiple CPU cores in parallel.
  • Performance: Compared to other popular BDD libraries (e.g., BuDDy, CUDD, and Sylvan), OxiDD is already competitive or even outperforms them.
  • Support for Reordering: OxiDD can reorder a decision diagram to a given variable order. Support for dynamic reordering, e.g., via sifting, is about to come.

Licensing

OxiDD is licensed under either MIT or Apache 2.0 at your opinion.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache 2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Publications

The seminal paper presenting OxiDD was published at TACAS'24. If you use OxiDD, please cite us as:

Nils Husung, Clemens Dubslaff, Holger Hermanns, and Maximilian A. Köhl: OxiDD: A safe, concurrent, modular, and performant decision diagram framework in Rust. In: Proceedings of the 30th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS’24) (accepted for publication 2024)

@inproceedings{oxidd24,
  author        = {Husung, Nils and Dubslaff, Clemens and Hermanns, Holger and K{\"o}hl, Maximilian A.},
  booktitle     = {Proceedings of the 30th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'24)},
  title         = {{OxiDD}: A Safe, Concurrent, Modular, and Performant Decision Diagram Framework in {Rust}},
  year          = {2024},
  doi           = {10.1007/978-3-031-57256-2_13}
}

Acknowledgements

This work is partially supported by the German Research Foundation (DFG) under the projects TRR 248 (see https://perspicuous-computing.science, project ID 389792660) and EXC 2050/1 (CeTI, project ID 390696704, as part of Germany’s Excellence Strategy).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oxidd-0.7.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distributions

oxidd-0.7.0-pp310-pypy310_pp73-win_amd64.whl (228.5 kB view details)

Uploaded PyPy Windows x86-64

oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

oxidd-0.7.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (768.2 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

oxidd-0.7.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (788.7 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

oxidd-0.7.0-pp39-pypy39_pp73-win_amd64.whl (228.5 kB view details)

Uploaded PyPy Windows x86-64

oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

oxidd-0.7.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (768.2 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

oxidd-0.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (788.7 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

oxidd-0.7.0-cp39-abi3-win_arm64.whl (218.1 kB view details)

Uploaded CPython 3.9+ Windows ARM64

oxidd-0.7.0-cp39-abi3-win_amd64.whl (237.3 kB view details)

Uploaded CPython 3.9+ Windows x86-64

oxidd-0.7.0-cp39-abi3-win32.whl (234.8 kB view details)

Uploaded CPython 3.9+ Windows x86

oxidd-0.7.0-cp39-abi3-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ x86-64

oxidd-0.7.0-cp39-abi3-musllinux_1_2_i686.whl (1.9 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ i686

oxidd-0.7.0-cp39-abi3-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.9+ musllinux: musl 1.2+ ARM64

oxidd-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ x86-64

oxidd-0.7.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.1 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ s390x

oxidd-0.7.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ppc64le

oxidd-0.7.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ i686

oxidd-0.7.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.9+ manylinux: glibc 2.17+ ARM64

oxidd-0.7.0-cp39-abi3-macosx_11_0_arm64.whl (775.8 kB view details)

Uploaded CPython 3.9+ macOS 11.0+ ARM64

oxidd-0.7.0-cp39-abi3-macosx_10_9_x86_64.whl (796.4 kB view details)

Uploaded CPython 3.9+ macOS 10.9+ x86-64

File details

Details for the file oxidd-0.7.0.tar.gz.

File metadata

  • Download URL: oxidd-0.7.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for oxidd-0.7.0.tar.gz
Algorithm Hash digest
SHA256 599f84f6a40bcad55deeec023273ccea9b6a83cbe11d94bfb8cb406fbf1f24ad
MD5 8e98413f5991cbccb373a2b8087ef992
BLAKE2b-256 c5103d89c67b8a04979723a5b0eaf6df5f142233d79389e5467a75d3e9c9dc65

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 60c05e07cc6d864b8c636c1e94c7523b6798b0afbf07077f606e4a174fd4e32b
MD5 1ebf52c28f1bf4342ddb55294b9d6b80
BLAKE2b-256 9e7365f6e1ff1a2fdcf2608b9811696af01e9c446bc5d9866d301e8b600c646f

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b3e3aca343808a62c419337d7ea6ba03715166b446d6328b43112262ffbe8a4
MD5 e292db5c53d2741e67bf24c905d6ac48
BLAKE2b-256 2a80c5c657a277f61f1748244e56fa82dfa38c34b2888f2515e81c89459ea3b8

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4a354c69070a708413861b4e33cdeddf0e814b6416e05378f13adffb549ebb82
MD5 0501170d87197a36c9f46b029d70d339
BLAKE2b-256 93c2ad32b88c76a7b849614a0700af83206e92db064514d2b302cb2c02fff230

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c98b684cde40953dc52061f8b0f190f25f19cc4e9469ccc3e3a6d1f1b7400bfa
MD5 4263493f0169b9385c8caf56d221e04d
BLAKE2b-256 27d9e19dfec50bd44a4055d6ba9ea45ab89dc36c227fd12c696ca20e05eae52c

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd8d5708dbaac74976c8b0d70335e2e178d3443b5d1a148d85060844e906e671
MD5 80a0959d7ccaf39e1dca276739b8f5e9
BLAKE2b-256 f5054ef34e23f3910fe94bdbad405e7d0161bc91a9bc98eee5a668bc01e2ffde

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 45501e44298774bcaee7789972826269899e05efecb72a4da9f8c77b3dd12227
MD5 b8ffc0238d6c9d84888002069b6b9396
BLAKE2b-256 ecad833461c2e2edb7eca20fc60478ccb95de9e3df4ca08c2ae7855a6017585e

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 c0625db84d85a6f3ddaa39e18b900322c4d6b2e1ee1e1e17b29ecf9e38524396
MD5 8a3b1f0801eb31ef313d80700c0fa5ef
BLAKE2b-256 ea9b13aec636ca912b17cf6225f6f5dfe02e666297a3f115847fd3734f967c09

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ab756155ebb9df1300eb0cb31edfdfb9727c92aba42ad99f6118ea884daa5b71
MD5 91f6316d2ce540f24e606d59ac4e9975
BLAKE2b-256 faf087eb97b43f697d90e1162d7a94904acd661f5a33e842e19928d34d846555

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1ee13d197f73b43f654eaa3a10022aeb157440f9d77c75b5d5b39e655a9e3881
MD5 08bd5ee86268a58e70300c55bd3b8e63
BLAKE2b-256 a00b062fea759774edb2e2675a81a86083649379f0ba3052b5ea33f2502f4d35

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 76313ae4b302e4280e160d5cfc9e294b2626eb91658a959bf52de0ec37ac74ac
MD5 fc3073516365b2ca2536255b8c56be8c
BLAKE2b-256 33f8f3796a84f717a7bde45ecccd5711e04b17b729a439720fb32b4a84b1eb81

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 357cc0fa6e95b00f62cf878711f79908531cdfceaabe1786806d2c3032b56fe8
MD5 57bb88c946a15dd14515f4d42c4226dd
BLAKE2b-256 0d793206ad0df1b9d3ed81db2abd74b00f26dd52f0eaf3af6ecc0b79e2fce193

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f828cab4b0e7bb850b804ef42a4dd43c8d4f6bded041b1efae86c0067bcef0b9
MD5 7fe4c3b165eb9ba8164b813b3591121b
BLAKE2b-256 f99f18717a029c5aa735433868fae3603625b436d368f6bf33fdf9d234f3e14a

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-win_arm64.whl.

File metadata

  • Download URL: oxidd-0.7.0-cp39-abi3-win_arm64.whl
  • Upload date:
  • Size: 218.1 kB
  • Tags: CPython 3.9+, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 92e35bdf63060bf94b331d279f53ff93838d769a552e17a3fcbd311b8b72b20b
MD5 357bb36b0b0c7610f89f64ec99d351e7
BLAKE2b-256 3c69ed8431a783e75d8e9480f878d0ea73e3002da9b80a2d2cf89bdb303bc876

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: oxidd-0.7.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 237.3 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2a98243f80ebc3492e42a10637c978e99f64b332e74505759c2b1789c10ba220
MD5 6316f6b030229d5cb05fb043649be8c9
BLAKE2b-256 3191f8d13dcad4f0427a7d7cf842b92e6e938503e37a35b69bdcf5aaefd583fb

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-win32.whl.

File metadata

  • Download URL: oxidd-0.7.0-cp39-abi3-win32.whl
  • Upload date:
  • Size: 234.8 kB
  • Tags: CPython 3.9+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-win32.whl
Algorithm Hash digest
SHA256 ca8dc6c1936e7cc2e82244b0e885b02ab94a478795c8be95902b9a0173553e3f
MD5 04eb3ee2e9d312df7537276b3455bf2a
BLAKE2b-256 21353df22cf39ff4c865a14188750965292e049916ede4ce1add211c42ee93e9

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8c712202a193cdb56f257cabb4c924c8f160b65b4ddfc458575ba279b7dd8094
MD5 9e75b84b43c0238047c1c870495ae9bb
BLAKE2b-256 6a343f017b2f31d86732c3f9189c847af34668d1ded58590e99783614d98407d

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 9f7473b4559f128400710286054f4a9fc71dbfda6e2e2a651540bc89ac19c073
MD5 59a8ab5cd00364d6356cc2b8913b4608
BLAKE2b-256 2d28ddb1784c9516ffd299e01d872a09456de8bc4fdba3eca3c4fe55aec416a2

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 474adc2e4693a94ad4f26871789f197386b8bb6e109dc29e46cb64a2c73753de
MD5 05b42d0b9f91dc36f5ddc995d8aa63fe
BLAKE2b-256 8b92f49b08868331f303372c706d1968abb06c8de8cd49dea91f346699e0527f

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bdf67e0049a61c151117fe79b6f308392eb7c24f2b459124100f619f3f609316
MD5 d3f8e506e5e573f5c6e2bb990a182432
BLAKE2b-256 a8ceb870f1eca34310e532faa4a9ed321970af4c5817797472227ff9605bc780

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 68df6e400bfb25554475fcae159d9334911bfc4e6bf0f3683e6d9b76df89d102
MD5 f9b8a45db45b7de32ae61fa9a7fec827
BLAKE2b-256 4703476ef8e6b212790b149b1e1b8890fb66111781982caa8772dbb9e01f229c

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 477bd5fa19449e21c6e7f7ef2003c2dc8794cf841d4890bb92f445825f72bcd6
MD5 11c1b8faaa503573cf9eefc7c4128ed0
BLAKE2b-256 73308b41b8f362ca932349606d97acdc7b46f54152c09158c0cc0bfadb562631

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b985478fd664638b00be46339ec2ecdc8b647616a52962fc9d893e6b2f295845
MD5 b9e55e3e54620247da4bb5f202f034dd
BLAKE2b-256 1b5bfb9df5d331f652da9a79f64f349093ca7dbcbaf7c04e8dc69b4287304623

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 470d20b1108b0c70003e821b1b7269723b3a6396523e571bef494fa0357e39a9
MD5 788d77b3b7cc39aed385cdd9cb1b29d6
BLAKE2b-256 83a5e0346ea23b905ffb92018c5c931c462f2c1c0506dadb496d4a0057ace2be

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad20477bc4540a16752dfc3a8265c1d0d2ef1d25be403ce64e95ab35754b2da7
MD5 77797ef7bb38b92a98aeec3ed2c0eafd
BLAKE2b-256 5faf32fb35e3941900e313e9cb12b5fc7266179008f444a7133e500e4a297e35

See more details on using hashes here.

File details

Details for the file oxidd-0.7.0-cp39-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for oxidd-0.7.0-cp39-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4cdd83b484ffceaef1b1c526c599235df1dc118078f8fde9a23cc65b6d28a934
MD5 a9179416bb0dfa5b477cfcedeb51dd4d
BLAKE2b-256 47a1318f4dde4f9ff3bc91d39ecdc4aa08f3702aa2172b133d85ad28d2d19bce

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page