Skip to main content

No project description provided

Project description

farm-ng-core

farm-ng-core

Foundational library for robotics and machine sensing application under active development


for c++, python and soon rust - under active development


👟Getting Started

Check out the getting-started docs:

here

or

here

Core layer

Convenient macros such as FARM_ENUM, FARM_ASSERT_* and FARM_UNWRAP.

Standard Library-like genera purpose utilities.

farm-ng-core only has a small set of dependencies: libfmt, expected (both being targeted for c++ standardization) and Protocol Buffers / GRPC.

Sophus 2: Building Blocks for 2D and 3D Geometry

Sophus started as a c++ implementation of Lie Groups / Manifolds. It evolved to a collection of types and functions commonly used or 2d and 3d geometric problems especially in the domain of robotics, computer vision annd graphics.

🌐Lie Groups

tldr: rotations, translations and scaling in 2d and 3d

Lie groups are generalizations of the Euclidean vector spaces R^N. A little more formally, a Manifold which is also an abstract group.

Okay, and what is a Manifold?

Manifold are generalizations of the Euclidean vector spaces R^N. In particular, they behave locally like a Euclidean vector space, but globally can have a very different structures. In particular there can be wrap-around. The circle group SO(2) is the simplest example for such wrap around. Assume, we have a dial pointing North. If you turn the dial 90 degree to the left, it points West. If you turn it another 90 degrees it turns South. Now, if you turn it again 90 degrees is points East. And you turn it left again for 90 degrees it points North again. It wrapped around: 90 "+" 90 "+" 90 "+" 90 = 0.

3d rotation example using the SO(3) type

  // The following demonstrates the group multiplication of rotation matrices

  // Create rotation matrices from rotations around the x and y and z axes:
  double const kPi = sophus::kPi<double>;
  sophus::Rotation3F64 R1 = sophus::Rotation3F64::fromRx(kPi / 4);
  sophus::Rotation3F64 R2 = sophus::Rotation3F64::fromRy(kPi / 6);
  sophus::Rotation3F64 R3 = sophus::Rotation3F64::fromRz(-kPi / 3);

  std::cout << "The rotation matrices are" << std::endl;
  std::cout << "R1:\n" << R1.matrix() << std::endl;
  std::cout << "R2:\n" << R2.matrix() << std::endl;
  std::cout << "R3:\n" << R3.matrix() << std::endl;
  std::cout << "Their product R1*R2*R3:\n"
            << (R1 * R2 * R3).matrix() << std::endl;
  std::cout << std::endl;

  // Rotation matrices can act on vectors
  Eigen::Vector3d x;
  x << 0.0, 0.0, 1.0;
  std::cout << "Rotation matrices can act on 3-vectors" << std::endl;
  std::cout << "x\n" << x << std::endl;
  std::cout << "R2*x\n" << R2 * x << std::endl;
  std::cout << "R1*(R2*x)\n" << R1 * (R2 * x) << std::endl;
  std::cout << "(R1*R2)*x\n" << (R1 * R2) * x << std::endl;
  std::cout << std::endl;

  // SO(3) are internally represented as unit quaternions.
  std::cout << "R1 in matrix form:\n" << R1.matrix() << std::endl;
  std::cout << "R1 in unit quaternion form:\n"
            << R1.unitQuaternion().coeffs() << std::endl;
  // Note that the order of coefficients of Eigen's quaternion class is
  // (imag0, imag1, imag2, real)
  std::cout << std::endl;

3d rotation + translation example using the SE(3) type

  // Example of create a rigid transformation from an SO(3) = 3D rotation and a
  // translation 3-vector:

  // Let use assume there is a camera in the world. First we describe its
  // orientation in the world reference frame.
  sophus::Rotation3F64 world_from_camera_rotation =
      sophus::Rotation3F64::fromRx(sophus::kPi<double> / 4);
  // Then the position of the camera in the world.
  Eigen::Vector3d camera_in_world(0.0, 0.0, 1.0);

  // The pose (position and orientation) of the camera in the world is
  // constructed by its orientation ``world_from_camera_rotation`` as well as
  // its position ``camera_in_world``.
  sophus::Isometry3F64 world_anchored_camera_pose(
      world_from_camera_rotation, camera_in_world);

  // SE(3) naturally representation is a 4x4 matrix which can be accessed using
  // the .matrix() method:
  std::cout << "world_anchored_camera_pose:\n"
            << world_anchored_camera_pose.matrix() << std::endl;

Table of Lie Groups

The following table gives an overview of all Lie Groups in Sophus.

c++ type Lie group name Description
Rotation2<T> Special Orthogonal Group in 2D, SO(2) rotations in 2d, also called Circle Group, or just "angle"
Rotation3<T> Special Orthogonal Group in 3D, SO(3) rotations in 3d, 3D orientations
Isometry2<T> Special Euclidean Group in 2D, SE(3) rotations and translations in 2D, also called 2D rigid body transformations, 2d poses, plane isometries
Isometry3<T> Special Euclidean Group in 3D, SE(3) rotations and translations in 3D, also called rigid body transformations,6 DoF poses, Euclidean isometries
RxSo2<T> Direct product of SO(3) and scalar matrix, R x SO(2) scaling and rotations in 2D
RxSo3<T> Direct product of SO(3) and scalar matrix R x SO(3) scaling and rotations in 3D
Similarity2<T> Similarity Group in 2D, Sim(2) scaling, rotations and translation in 2D
Similarity3<T> Similarity Group in 3D, Sim(3) scaling, rotations and translation in 3D
Cartesian2<T> 2D Euclidean Vector Space, R^2 all vector spaces are trivial Lie groups, also called 2d translation group, the translation part of SE(2)
Cartesian3<T> 3D Euclidean Vector Space, R^3 all vector spaces are trivial Lie groups, also called 3d translation group, the translation part of SE(2)

Supported advanced features on Lie groups:

  • ✅ (linear) interpolation
  • ✅ Spline interpolation
  • ✅ Averaging (of more than two elements)

🌁Image classes, Sensor Models and more

Image Classes: Image, MutImage, DynImage, MutDynImage and view classes.

Collection of camera models (pinhole, brown-conrady aka opencv, kannala-brandt and orthographic), IMU mode and more.

Component Pipeline

C++ Component pipeline (aka actor framework) for easy parallelization of data processing pipelines.

Logging/Serialization Infrastructure

  • Text Logging

  • Protobuf Logging

  • RPCs

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

farm_ng_core-2.2.0.tar.gz (56.4 kB view details)

Uploaded Source

Built Distributions

farm_ng_core-2.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (413.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

farm_ng_core-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (551.4 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

farm_ng_core-2.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (583.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

farm_ng_core-2.2.0-cp312-cp312-macosx_11_0_x86_64.whl (339.2 kB view details)

Uploaded CPython 3.12 macOS 11.0+ x86-64

farm_ng_core-2.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (414.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

farm_ng_core-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

farm_ng_core-2.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (579.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

farm_ng_core-2.2.0-cp311-cp311-macosx_11_0_x86_64.whl (337.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ x86-64

farm_ng_core-2.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (412.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

farm_ng_core-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

farm_ng_core-2.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (578.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

farm_ng_core-2.2.0-cp310-cp310-macosx_11_0_x86_64.whl (336.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

farm_ng_core-2.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (412.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

farm_ng_core-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (548.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

farm_ng_core-2.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (578.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

farm_ng_core-2.2.0-cp39-cp39-macosx_11_0_x86_64.whl (336.1 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

farm_ng_core-2.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (412.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.27+ ARM64 manylinux: glibc 2.28+ ARM64

farm_ng_core-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

farm_ng_core-2.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (578.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

farm_ng_core-2.2.0-cp38-cp38-macosx_11_0_x86_64.whl (335.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ x86-64

File details

Details for the file farm_ng_core-2.2.0.tar.gz.

File metadata

  • Download URL: farm_ng_core-2.2.0.tar.gz
  • Upload date:
  • Size: 56.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for farm_ng_core-2.2.0.tar.gz
Algorithm Hash digest
SHA256 9769cf5904257db0c1cf910bb3ab4f605e3bba81c77992574203a5f8db680875
MD5 e262fc129d4d42591750a1031049922d
BLAKE2b-256 0eedd6f49b82b1d6745e4f2dfdd71131dfb5d08e7e32cb08f220ef3c99729732

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6522b28768d865f7c950782d3594d5442fef6c22a2a77c0be8e919ef407925e2
MD5 ad835e32e3707fb9437266c22a327171
BLAKE2b-256 e3111789fb4db25c096463ba231ec50129227a75384f9b8e49ecc46a6319d9b5

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b98aab3d16b917fbe5e561fd61af785412c8302b10c2600ecbf6d874ff4984ea
MD5 ae1252ae30e17b8408dcb69c1cfffd8a
BLAKE2b-256 9d2b31a0f10e7a82d372fa82e85e3a04e7a74673c7ff603c8acb07af8c4270ea

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0c47b80dba065374cc2eeb83566ba12a71a8fa96e06075f773e9a99f632daa0b
MD5 5372fa9d4f6bc7eee61da531590e5c47
BLAKE2b-256 cc9f2daac00dc7b8cb191fa6513e3a0604819bd550fee0ac7aad33a69b0808f8

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 aa0416dc77608fff619ce70424dadf493626670aed397e23de0eb671895ce74f
MD5 7f3db1deb34d447aa52b045224abf89f
BLAKE2b-256 507922e7819ba6d0c198d0798ded653ae0bc9a5f8aed49190497639f3f443f53

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b8f6867598fb1cdcaed6cd8266de15ea372ae3f7b4d790f7879c52e6b7a98cf7
MD5 31370f05af8ed24641839e927bad8027
BLAKE2b-256 7933395909c1caed158ea596ca7aafaabe37e87967bf6b3d12c787cc80dc55b2

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8663d8aaecf05e9db92138f4dfc985df29c23e311e0ff3995f7e92f2d18bb226
MD5 40abe5d1ac075299cd39845119137804
BLAKE2b-256 2a386a09d5882eadaeeaf0b9bcf662847350beb6149021a092c56524a1a9ceca

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 12795651a2873648a61d17c7ef21fef246e79bad8e8f46a5b541442f00c6863a
MD5 fa5d263a98469f9ff75f5a4623b59471
BLAKE2b-256 c945482d3ac30c44529f0e0ed2c98a9901603fe2cbecefe79f141e33c2f59529

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 beb65ec3dc442a46dbaff79739e6ebe52d3acc78891b602a5fbf7465d6a72362
MD5 a2779796afe0aa89574448fdd76a16ae
BLAKE2b-256 fac5049f4bf2ac5e52072b57440927f008fe1ca17eab55e071e048a23d7fc577

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 034026c5c89a083f548dfeff9b8001d4249c9c054a80a997e5e6c709bc192569
MD5 515b9746c357070ed79e2e0460e5dd6a
BLAKE2b-256 2614fa201e3da081864142a68e61b0e52d42aa0907bc8b9e4eb207cbbce655ce

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e71d80b733aac80ce97c7dffafdd78d4b9236202ae82f73b112c93592b06b273
MD5 a7f05460a74cc230ad914e3be8611ce5
BLAKE2b-256 6ad65c1ce0278e7ef1ca03a70db1021f26f1ab95f99d3981e811794546b782e6

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b2089efe6940a9f45d03ad331e068b2e674ab5126aa853fc9b2b4f69ef969526
MD5 bb47a32cebe3f15437ba43a6ebcebcb2
BLAKE2b-256 c812b689b576a93d2f504efbcaf47927fe49a1f43a92f2f9db1547ee0fcfb4d3

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 46ed1223937c0b1bfcbf6cdb0a1d7499d9d8e13d9da32f648e897b762ee0b92e
MD5 37ee876ccbc3f7e9d653169ea914482e
BLAKE2b-256 cdbfc7fc5ecd599845c8e7065b66216eb8dd2c5ec44e763ddc682f243c724646

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a667c8cc14f011a9d16b38c04f1f76ed17b28eb8d38bf867ec6ef7ee11a261c7
MD5 9a46acaea5b53cc8f104be53ffb82ec4
BLAKE2b-256 3854b8824954d7d091e818ccecca0918e8b3b083075f2d1ef54de1e50fbf0cdd

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a23e1cbbdac5771c2fd2c72a7e1cbf1d1c0815f7626b43526b3bca54ee72bbed
MD5 4a0ff3e4da155148f7d040cfd9288148
BLAKE2b-256 eaa4938404291827fac7ecee5e5c18a0f0c9c00da6340fca1fafbe39f4f35e09

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d9cef8a8cf08194500b81eb39220faf863c95b9ded26cdaa6e88f3541bae7a29
MD5 c0e204a9a1f19b7de639130512fbd251
BLAKE2b-256 26b1f74c8c3deab576e41d12e2d28cdf31e6c3435ce43ff717f492d5e25af80c

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 965d1ce4bda487676c92d0b5f110fede0aeff13b04e9f6944b9f2afd20543363
MD5 686c8731658b4ecd3caf5be5d1e20c76
BLAKE2b-256 b47ab114f10a7d173010f82806a68d4be188e118f0409b27db0ba5cd855778be

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cfe1cf518e1379929764451e88971954ea38c815f953d508c79d02a9ad6db7e8
MD5 be44cf7426a3e81aba2783f163f2b289
BLAKE2b-256 e0482fdcdda9d2c42106080e33a5e79463a2328743b1e3a9d099b4e18cc08bb3

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 239d3ef3a53fa584500b63e074a020cd5a6b927acb5c7c70439f9126d23b9b1d
MD5 1208d5262ebdb66cb6444790a1920679
BLAKE2b-256 060fa5b948b953b06a38bdf0514bee61be53ac62322a50fa521443437ef80a59

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f934987783cb5225efe41ae4678627cb3b2fbce9e9e6c6009c2f4d7415044265
MD5 1a8d979543c60e686595f4b9d135fcc8
BLAKE2b-256 14418ecde8b05f52b9eeb54316ecc0bd77286f68176b89c24e2c2ee400b00137

See more details on using hashes here.

Provenance

File details

Details for the file farm_ng_core-2.2.0-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.2.0-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4aa740f3ebfeb9fd2a355e1105f703ceb3697294df4501e6a6147d54bde5001c
MD5 50632289cb42fdd90258d6f76cc7abec
BLAKE2b-256 f122b715cf573a5925a1326d1b9b75eb78960f336d840ff69093819d8cba3b1c

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