Skip to main content

epics-base compliant macro tools

Project description

https://img.shields.io/travis/pcdshub/epicsmacrolib.svg https://img.shields.io/pypi/v/epicsmacrolib.svg

epics-base compliant macro tools.

What?

Do you want epics-base compliant macro expansion, with all of its idiosyncracies?

No? I didn’t think so. This is a really boring project and you probably don’t need it.

Then why?

This will be the future of the macro and IOC shell splitting tools in whatrecord, removing its reliance on Cython and epicscorelibs.

Examples

macros_from_string

from epicsmacrolib import macros_from_string

macros_from_string("A=5,  B=$(A=3)")
# -> {'A': '5', 'B': '$(A=3)'}

MacroContext

from epicsmacrolib import MacroContext

ctx = MacroContext(use_environment=True)
ctx.define(TEST="A")
print(ctx.expand("TEST=$(TEST) SHELL=$(SHELL)"))
# TEST=A SHELL=/bin/bash

ctx = MacroContext(use_environment=False)
ctx.define_from_string("A=5,B=6")
ctx.define(C="7")
print(ctx.expand("$(A) $(B) ${C} ${D=5} ${E}"))
# -> 5 6 7 5 $(E)

ctx = MacroContext(use_environment=False, show_warnings=True)
ctx.define_from_string("A=5,B=6")
ctx.define(C="7")
print(ctx.expand("$(A) $(B) ${C} ${D=5} ${E}"))
# -> 5 6 7 5 $(E,undefined)

ctx.define_from_string("A=5,B=$(B)")
print(ctx.expand("$(A) $(B)"))
# -> 5 $(B,recursive)

with ctx.scoped(A="10", B="0"):
    print(ctx.expand("$(A)"))
    # -> 10
    with ctx.scoped(A="0"):
        print(ctx.expand("$(A)"))
        # -> 0
    print(ctx.expand("$(A)"))
    # -> 10

split_iocsh_line (like shlex.split)

from epicsmacrolib import split_iocsh_line
split_iocsh_line("dbLoadRecords > output_filename")
# -> IocshSplit(
#     argv=["dbLoadRecords"],
#     redirects={1: IocshRedirect(fileno=1, name="output_filename", mode="w")},
#     error=None,
# )

License

The Python portions of this code is under a BSD-3 clause license (LicenseRef-BSD-3-Clause-SLAC, see LICENSE). Portions of epics-base have been vendored in src under its original license (see src/LICENSE).

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

epicsmacrolib-0.6.0.tar.gz (153.3 kB view details)

Uploaded Source

Built Distributions

epicsmacrolib-0.6.0-pp39-pypy39_pp73-win_amd64.whl (175.8 kB view details)

Uploaded PyPy Windows x86-64

epicsmacrolib-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (191.0 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

epicsmacrolib-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (193.5 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

epicsmacrolib-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (176.7 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

epicsmacrolib-0.6.0-cp311-cp311-win_amd64.whl (184.3 kB view details)

Uploaded CPython 3.11 Windows x86-64

epicsmacrolib-0.6.0-cp311-cp311-win32.whl (177.4 kB view details)

Uploaded CPython 3.11 Windows x86

epicsmacrolib-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl (511.2 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

epicsmacrolib-0.6.0-cp311-cp311-musllinux_1_1_i686.whl (492.5 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

epicsmacrolib-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (514.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

epicsmacrolib-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (494.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

epicsmacrolib-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl (193.3 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

epicsmacrolib-0.6.0-cp310-cp310-win_amd64.whl (184.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

epicsmacrolib-0.6.0-cp310-cp310-win32.whl (178.2 kB view details)

Uploaded CPython 3.10 Windows x86

epicsmacrolib-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl (495.8 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

epicsmacrolib-0.6.0-cp310-cp310-musllinux_1_1_i686.whl (484.1 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

epicsmacrolib-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (493.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

epicsmacrolib-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (479.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

epicsmacrolib-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl (195.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

epicsmacrolib-0.6.0-cp39-cp39-win_amd64.whl (187.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

epicsmacrolib-0.6.0-cp39-cp39-win32.whl (179.6 kB view details)

Uploaded CPython 3.9 Windows x86

epicsmacrolib-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl (515.4 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

epicsmacrolib-0.6.0-cp39-cp39-musllinux_1_1_i686.whl (502.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

epicsmacrolib-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (511.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

epicsmacrolib-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (498.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

epicsmacrolib-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl (195.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

File details

Details for the file epicsmacrolib-0.6.0.tar.gz.

File metadata

  • Download URL: epicsmacrolib-0.6.0.tar.gz
  • Upload date:
  • Size: 153.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for epicsmacrolib-0.6.0.tar.gz
Algorithm Hash digest
SHA256 d230bcdede543479e66db4e890d92b8cc087fa6f6c4effbe4591d0e563a2b20a
MD5 7445bd174ee74073253f13b4bc091d5f
BLAKE2b-256 e22f6417f96ee3cc16b49536e9f469afc94459245dde1c3db33cb3913078625f

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 479d40a49f2ee81e923211944ce2d176a9ebc5525f1a29b3122a6e6742c8f1db
MD5 44a6624ff42236ffc24667dec0659d6d
BLAKE2b-256 7aabceee747c2eb60226cb39eb9c3d0d68e07b1d828729d9a4ee02ab851d1de3

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b3b88625412b472481e1a810bb605e51d4a160677659e28543e5cfb0190b86e5
MD5 5c75317d033441bde0b467b8ece43297
BLAKE2b-256 4d1eeb1c74feb0de1d03f1607607770a6fed6d5e655aff25cf386e0f5087bb40

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 77b5fbbbe617a0a3319e487d04f32c62a1c81d7f4b811590542378db5017f791
MD5 896372e963f87a62c9201fc91ba88cee
BLAKE2b-256 e1df6fe7144a951626d869663a829e1cc57adc1ec76f29d289e7c796e52d67bc

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3ae5ac879f80b80c60f15f782644eeb558dc780c7c8f7e43bf538c5d0ee205f1
MD5 79fd5b6bbddbb83013f5afff951732b2
BLAKE2b-256 81f9f0fb968e047226b1a7c7973c8734eb2069ef910598dac0b82532a60391d7

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 327478ea4d5416be4dc70d4e939672b77394223f011b35ae8be2c79e0fe4e98e
MD5 3455ba6fd9fc8b48303675e32a7a4ed5
BLAKE2b-256 6a4322cd7765ad696a7a5f9ae67deb83534be3dc704186dc54600c899356bad6

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 3a274fe8505aa55a087513a2d991803eaa2ed37bcef4412b2cc72913bd84af71
MD5 5abf452cd5388c1ed350e9a07717e4bc
BLAKE2b-256 a5b9ac6ae5c223c3ec449c7ca53f7eba5c0a49f9a7f00b94cf753b8717c79ff7

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c3d5722efe046d759d8fa9624561a8d781209e5cdb402c86be2fc212c06192af
MD5 a4bc09b014b70b0a9ddbcab84a993160
BLAKE2b-256 a4ef4df39f20a8ad503c971f2244d8de1ef0ace2c5ed409214a98d6fda0f8f60

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a1eb01ec527a5a11f0e34757718544aa907459d6ab14e5eb6eacb7e7f1ee3aa6
MD5 dd31685436795a91930adf429aa6f1a5
BLAKE2b-256 646190629ca76fa4bb8e42d2d45ab4ae323da5fe53746d331a4f4e151073eecd

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c11c9d9bb87c0589f93a94a3a9efe2cab98a4df86827fe0524f62e5724026ce0
MD5 dfe6c0ecc90a30ded1f0ed8a2e719b32
BLAKE2b-256 00d948a507c35f8c4df12a19fa00193be3160b8a69ba357cad0eabf2a8742ea2

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 909b87a86d0c275a6c5ea516e34382393796d35fcab2f7a4738b16be5fbca226
MD5 5b73da9aa67e6947a6e69e799b4cd3be
BLAKE2b-256 e85a90fe2823259eaf4bd6379b14bc9f87aec2f394f8002c4972655561c0a087

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cf0d06d5c309dc24332d14c1fc36c791d485e7658c6d15285e5becf044e33757
MD5 c90459f82abeb05f0ca0b60fb66a17ae
BLAKE2b-256 14cbf12bc377d5ee55bfff7271b10699ce277962f0b6cd15feee448d5df5bd07

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f214ae1c8316db3581ac6291024b32f25adfa87f4040e9996753c5e7a0f81ce6
MD5 62822849a0f0d0bb46c082339e49dce9
BLAKE2b-256 4727206fd2fc6272a545a33e4fbdccd84210cb487ffb45a97ec43da63ca4341f

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 f7e8ec78c1df1d09d587810d9701437038c7569b29e5dc93ba51ab1105cc2c34
MD5 22bf0f23a6f4b76b9e651321cfccf977
BLAKE2b-256 3b267734710a0f0228ada729e8bb6dc4eef5db746a77d1079afe76a93c9725ce

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3241586ac7b9a2e9fc2a5f53c6bd5116872d9c3cd4382c05f908f03db8762f2b
MD5 ac34dfd49dfde8220788ff3f1b8c302c
BLAKE2b-256 cde21ffe88fbd917889644e2f7bc3aa687a84a8296f5c92d2951397c2c0e7774

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 760c3de9e1385c05e1fcdcdbcee2ce29c3f3b52e080d4cb64bf0560e9d27e4f2
MD5 f8acd523853e6449f71540907454a62a
BLAKE2b-256 b2a62fca8e1d5ab36b98470f4bc93ff58dbaffb432c4b6a9f94e6c101442e27a

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 274c52086ca96847cc67a870397e6e7723cf9c76330466316d1341b5873cce9e
MD5 b43bd2a7f0edef5b0e049e7938532d71
BLAKE2b-256 ca0cec3a474d42166474ed096d1836e3cc405974b4517dc97fb97cc712c4d389

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 47bb1aefe3f5d648657797417c0cc4cf7cf6d0dc928c93bd995fb6841a2ebd6f
MD5 0a9331c72a0de8b175f58692592ce3d4
BLAKE2b-256 274bf373b77a111769cc7ce174d035285da17e2cb7bac1eae8cbcc77146e06ce

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c0084d985f3f9f43a949d845bdeb19a0fe722a1061fb4e532670de4cf3377ccf
MD5 5121407f2df0419e7227983b52f31a0c
BLAKE2b-256 426fc41ee434379d77d0b8498d8efbaba258dbcce0b52871d703708b6f174526

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 409b553bb10cd7d59705ce5305befdd49b7ead63286093db9954cc15bb7651e0
MD5 6591f9af9c572518ac0b969cd4a53deb
BLAKE2b-256 fdb76d4d0d0b1d4a82e7823cce3769ee45b1a1bef17c2cbaa1cc65bcf58535f1

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: epicsmacrolib-0.6.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 179.6 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 f5b67b26d34eb34b0ef1c708078beda8f3b084dd353648a9549f2f0480bb7403
MD5 994305df70a312fa78e26db29eb01ebf
BLAKE2b-256 691be3220d42fecb27b76213a8e3d7430b3e668343e36ed8804cb294abaf96d5

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 91aa0746060e98af43803f5d8d64f896e1eb2c52230aebd21aa1b45d70aa44a5
MD5 e71d6a002398ad9157145a33f013d5a4
BLAKE2b-256 05ce93aa79cf88d8e368f6c46d030f287db7fa9d713c8ad2be5c634a5366e83e

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 d8a31b4959bd0b932c1ee79e99612ca875b4ad0a9371e32e27c6320c3a02800e
MD5 1db28b464542b1c4acf3cff5e4609af1
BLAKE2b-256 47c0b7927e08abbe89ddc1498214689ce9883c20923010187710395d6d827383

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9aab779769965bb8b882cf1c128d635ba194ce4df3d062f296ab939723f5a4ca
MD5 6d95d1eaa01b1ac05f74966d4e329c76
BLAKE2b-256 a36802d1258bf7033f14a3a4d4a93be5a1cf7be414bd983fa983618394b67c4c

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 182442f59bdb2542df514cdb09bc340e24970545034975cd07a2e8d82d564c72
MD5 53c250318f893976a68b25306a4e276e
BLAKE2b-256 2aae936b10facb5aa55e3a7bbdbd176617f27f7102dcd2b2ec849d289ef242af

See more details on using hashes here.

Provenance

File details

Details for the file epicsmacrolib-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for epicsmacrolib-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c6f77177dd74aec859cf48f46534060746ba75216779c06cf0a2d74bf322f6fb
MD5 56b2d8f72bef4e852b6983c22fe018c7
BLAKE2b-256 b36f17d0a5f586bcbad0d6b0545c5e91341a0b9eac9a9692b59de93fef1bb910

See more details on using hashes here.

Provenance

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