A ty fork with semantic extension support.
Project description
ty-extended
A fork of ty with semantic extension support for framework-aware type checking.
Type checking the home-assistant project without caching.
ty-extended builds on Astral's ty and keeps the command-line
executable named ty. The fork adds a semantic extension protocol, a Rust SDK for extension
authors, and live WASM extension execution.
ty-extended tracks ty's beta checker and language server while the extension protocol stabilizes.
Highlights
- 10x - 100x faster than mypy and Pyright
- Comprehensive diagnostics with rich contextual information
- Configurable rule levels, per-file overrides, suppression comments, and first-class project support
- Designed for adoption, with support for redeclarations and partially typed code
- Language server with code navigation, completions, code actions, auto-import, inlay hints, on-hover help, etc.
- Fine-grained incremental analysis designed for fast updates when editing files in an IDE
- Editor integrations for VS Code, PyCharm, Neovim and more
- Advanced typing features like first-class intersection types, advanced type narrowing, and sophisticated reachability analysis
Getting started
Run ty with uvx to get started quickly:
uvx --from ty-extended ty check
Or, check out the ty playground to try it out in your browser.
To learn more about using ty-extended, see the documentation.
Extension SDK
ty-extended also publishes the Rust crates extension authors use to build semantic extensions:
ty_plugin_protocol: the stable JSON wire protocol for manifests, requests, responses, claims, and patches.ty_plugin_sdk: the author-facing SDK withManifestBuilder, thePlugintrait, typed DSL helpers, JSON dispatch, and WASM exports.
Start with the extension authoring guide for a working crate layout, manifest claims, hook methods, and packaging guidance.
Installation
To install ty-extended, see the installation documentation.
To add the ty language server to your editor, see the editor integration guide.
Getting help
If you have questions or want to report a bug, please open an issue in this repository.
Contributing
Most of the implementation lives in the ruff submodule, which points at
regularkevvv/ruff-extended for this fork.
See the contributing guide for more details.
Version policy
ty-extended uses SemVer-compatible fork versioning that records the upstream ty base:
- upstream
0.0.58maps toty-extended 0.58.0; - a second fork release on the same upstream base maps to
ty-extended 0.58.1; - upstream
0.1.50maps toty-extended 0.150.0; - once upstream reaches
1.0.0, ty-extended follows that shape directly as1.0.x.
The semantic extension protocol and SDK crates are versioned independently. They are pre-1.0;
breaking changes may occur between any two 0.0.x releases.
FAQ
Which Python versions does ty support?
ty officially supports type checking code that targets Python 3.10 and later. Earlier versions (Python 3.7 through 3.9) can still be selected, but may result in false negatives or false positives due to a lack of bundled standard library stubs.
The target version is independent of the Python version used to install ty. For example, ty installed from PyPI using Python 3.8 or later can type check code targeting Python 3.7; the standalone installer does not require Python at all.
Why is ty doing _____?
See our typing FAQ.
How do you pronounce ty?
It's pronounced as "tee - why" (/tiː waɪ/)
How should I stylize ty?
Just "ty", please.
License
ty is licensed under the MIT license (LICENSE or https://opensource.org/licenses/MIT).
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in ty by you, as defined in the MIT license, shall be licensed as above, without any additional terms or conditions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ty_extended-0.58.0.tar.gz.
File metadata
- Download URL: ty_extended-0.58.0.tar.gz
- Upload date:
- Size: 6.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38161dd8fc58493db2ddb48808c6b1e71dad6b865061baa6e7014cd4e7df8402
|
|
| MD5 |
7e0161b47df0f6c8ce666074478b8e95
|
|
| BLAKE2b-256 |
94d5b4078aa903ec5b32092a413759054773ba5b6311e0c8e2ee587c0b1c84fd
|
File details
Details for the file ty_extended-0.58.0-py3-none-win_arm64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-win_arm64.whl
- Upload date:
- Size: 12.1 MB
- Tags: Python 3, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f9a2e6e8fc31bca18a5b320c12563bc1e6d2624751ba4050e07fe4c03cded2c
|
|
| MD5 |
8448c5c9af5455511e8d3e5367bd65d1
|
|
| BLAKE2b-256 |
f2e522ad54253215d9ce8f29cfbd5f0b3b44676a9a839d2d96225bcf73b263d4
|
File details
Details for the file ty_extended-0.58.0-py3-none-win_amd64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-win_amd64.whl
- Upload date:
- Size: 12.8 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57adf1f74a7a9076974e69b5943a5960ab34c34a319f1526d54d433c66528542
|
|
| MD5 |
33bfcb2a084b5ca617223fa0aed5e1b5
|
|
| BLAKE2b-256 |
fba8ccb5af2f9a17b36a14bfa6afaebeab11f05ac9aac073b57e07cc03635198
|
File details
Details for the file ty_extended-0.58.0-py3-none-win32.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-win32.whl
- Upload date:
- Size: 11.6 MB
- Tags: Python 3, Windows x86
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a7bdbeadb040342edbc229abb9314d79e8420c8d569a61d6ff66a0bbf9e9a6f
|
|
| MD5 |
924978cfe72f37306f7877f80fef932e
|
|
| BLAKE2b-256 |
fcbce1be80592ac4c56371253394d95df1210e3102af37a0912bae47e2190c7b
|
File details
Details for the file ty_extended-0.58.0-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 12.5 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0afd171f8759d1105f6dd33d365e80b5501535d2f51780fea42a24d4ce2331d
|
|
| MD5 |
fb5bb0f4ce178e4842bce6016636beef
|
|
| BLAKE2b-256 |
0881b33cc5ef10d3d8988f8e55fc89ea98f3dc4ff16be1866a319cdf93c0e220
|
File details
Details for the file ty_extended-0.58.0-py3-none-musllinux_1_2_i686.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-musllinux_1_2_i686.whl
- Upload date:
- Size: 12.2 MB
- Tags: Python 3, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
baeff3b953cd684faebddfe7569cbd248c9f2a051d3ab2cb6f8cfe60152476cf
|
|
| MD5 |
f182acfd358724dcddcd6d5f191d3de9
|
|
| BLAKE2b-256 |
d5c1600d2986aaec78d6a2066ef36bb40dea0a13ec66d31f5754eff19b06cff2
|
File details
Details for the file ty_extended-0.58.0-py3-none-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 11.9 MB
- Tags: Python 3, musllinux: musl 1.2+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4f1d40972f606e5639469fc13f2c1b96b4fc0eca971df1bbd4f2e45d58eee6c
|
|
| MD5 |
08cc240c55ada4c66b6c89d208d6f14c
|
|
| BLAKE2b-256 |
ccc360d9ce52b411d5700e1dbb72d3561c254af426d3adc5cdc40ab7a99db43d
|
File details
Details for the file ty_extended-0.58.0-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 11.8 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b7bc49b09dc7136222c1225e979e9df7cacdf6b3f51e29f901feaa4017a6ed9
|
|
| MD5 |
44257a3e8c988d36c0cfb3892cdec9ac
|
|
| BLAKE2b-256 |
a4e3752c1a24641601828847ec69c75618214acb955ec8c1e2c98e135c4fde49
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_31_riscv64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_31_riscv64.whl
- Upload date:
- Size: 12.8 MB
- Tags: Python 3, manylinux: glibc 2.31+ riscv64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
199de99e80a9f261e6474b036c31e3a06de1e0f7be456a0d33bd762f5e400aa8
|
|
| MD5 |
b45499673abb528bb54ddb7536b147ef
|
|
| BLAKE2b-256 |
f12931805670e072e1176b3e9995dbde7d2717df8bab26e31027fbe27f381fb4
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 12.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8905c323b39ae0edb0d396b34c54644f66bafde24ee492e3d128bc4b9bf3dc70
|
|
| MD5 |
34a2f5eeb6bff7fd258369345890cd58
|
|
| BLAKE2b-256 |
9e6b1b9cab9ee8eea6d62a1727b12bc4960f0bab41b3cf467623819318822f9d
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
- Upload date:
- Size: 12.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ s390x
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bce51d1740d7ee309530c0dfc255c465a41d654e0b7a6c839310e7a7a82030a8
|
|
| MD5 |
296b2337876a672c95dc7dd8e605e3b0
|
|
| BLAKE2b-256 |
4a7de823a1d94352aa311f4a6e80b74d75fb29416379e50023b56864bcbd7024
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 13.2 MB
- Tags: Python 3, manylinux: glibc 2.17+ ppc64le
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0ed9a753eee89468620218909830fcd2290c0999391d29ee2d6226be12a0e48
|
|
| MD5 |
26f3a6f1ccd2b4fbea6f833a1b77e6d0
|
|
| BLAKE2b-256 |
b3a8c183ca3e42e6cbf88390a30772fa0879935442d544cbb07292c5295665a1
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 12.5 MB
- Tags: Python 3, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
977ce7cff3440119cac1f129f4f98bd31ca41525973fe1009f8c86b9e402fc58
|
|
| MD5 |
140cf65af71416c6d7e799abfc09328a
|
|
| BLAKE2b-256 |
209f5397b8df66be0f72b8a6127ce9832a48fe9eacfaadd49ac724d93bec0add
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 11.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
549730d84009b1daf5fb08b73c6302d40073d9d67f51c7f475df47cb9cfbf751
|
|
| MD5 |
935a1cc5acde1ee71c5a8ce2dca4637e
|
|
| BLAKE2b-256 |
ec7cd3bd7b2af4859ddccfdc6ef64c4da1da42a85759b4b4443b3610f5ff9479
|
File details
Details for the file ty_extended-0.58.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 11.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de148a157153e288cc684242853a3354ddeaaf70e7f3c66e488bc6323a409354
|
|
| MD5 |
6eac64bb94d44c2fd16ce9a1f2bcd60e
|
|
| BLAKE2b-256 |
5f9f9455f1437be145c33fcf242fa926ec43855b30e0620310d32d38ca4aa4f9
|
File details
Details for the file ty_extended-0.58.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 11.4 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20574b66a3de20fa9ddd1376d146203d6463454f01291354a761100f14eaeb08
|
|
| MD5 |
610c7ed2edc26b36c59623f5e65c3ae5
|
|
| BLAKE2b-256 |
ecdf2cda5939775d13f3cc912d4550f4d078496c137cf809a1b62a3affdd3ddd
|
File details
Details for the file ty_extended-0.58.0-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 11.9 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b4db5015613e8d7dcda99d0a18368740c05847823ddc829a2c8712f01f047af
|
|
| MD5 |
3c547acb6f4a5415ee08e7615f01f728
|
|
| BLAKE2b-256 |
a3eacdfa51498054db35e98d2d138ffd71f8fc6f6c4de653d3cf56040893487f
|
File details
Details for the file ty_extended-0.58.0-py3-none-linux_armv6l.whl.
File metadata
- Download URL: ty_extended-0.58.0-py3-none-linux_armv6l.whl
- Upload date:
- Size: 12.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cb6b6c761b9fe649bd7bc0423978f03d71b190d0785f960955014b8001b9036
|
|
| MD5 |
aa37f074ff8d472fd8bb1bb597cb4f32
|
|
| BLAKE2b-256 |
e3b5cdb2d03e33f1883c9445d326d3f19d75bb0d93fd0e1a1f0c3b71f4bac253
|