Compare commits

...

43 Commits

Author SHA1 Message Date
Vivian Plasencia
5dcba7fb2e chore: v4.13.0 2025-08-27 11:09:58 +02:00
Vivian Plasencia
0394caf2f7 feat: add production semaphore v4 zk artifacts (#1037) 2025-08-27 11:00:09 +02:00
Galoretka
820f34ac90 fix: improve error handling in toBigInt function (#1025)
* fix: improve error handling in toBigInt function

* Update packages/proof/src/to-bigint.ts

Co-authored-by: John Guilding <54913924+JohnGuilding@users.noreply.github.com>

---------

Co-authored-by: John Guilding <54913924+JohnGuilding@users.noreply.github.com>
2025-08-07 14:47:56 +02:00
Micke
81dbf8631c fix: optimize BigInt usage in hash function (#1003) 2025-08-06 23:13:58 +02:00
Vivian Plasencia
4e084b0589 docs(website): add noircon2 presentation video 2025-08-05 18:03:39 -05:00
Vivian Plasencia
210fed4a50 docs: update ceremony end date 2025-08-05 18:01:58 -05:00
Ocenka
53f41879d1 Fix invalid components in Chakra UI (#964)
* Update page.tsx

* Update page.tsx

* Update SectionBlock.tsx

* Update InfoCard.tsx

* Update ProjectsList.tsx

* Update Carousel.tsx

* Update InfoCard.tsx

* Update InfoCard.tsx
2025-08-05 22:26:25 +02:00
Vivian Plasencia
4089bbedc7 docs(docs): update ceremony closing time (#1021) 2025-08-04 23:37:12 +02:00
Vivian Plasencia
6a2b28c34e docs(docs): update deploy contracts command (#1019)
re #1018
2025-07-28 14:21:29 +02:00
Vivian Plasencia
dce9813c8e feat(docs): add trusted setup ceremony to docs (#1016)
* feat(docs): add trusted setup ceremony announcement to banner and new page with contribution steps

re #1014

* docs(docs): update ceremony settings section in trusted-setup file
2025-07-23 10:33:11 -05:00
Vivian Plasencia
aba32d83b1 feat(website): add trusted setup ceremony to website (#1015)
* feat(website): add trusted setup ceremony announcement to banner and events

re #1014

* docs(docs): update trusted setup ceremomy year in events

* docs(website): add exclamation mark to the banner
2025-07-23 10:08:51 -05:00
Vivian Plasencia
520a02698f chore: v4.13.0-beta.1 2025-07-23 14:07:30 +02:00
Vivian Plasencia
128cbcee13 refactor(contracts): update solidity version in contracts (#1013) 2025-07-23 12:55:00 +02:00
Wesley
a224f95d77 docs(docs): add llm setup docs (#993)
* docs(docs): add llm setup docs

* docs(docs): updated llms.txt to v4

updated llms.txt to only include Semaphore v4

---------

Co-authored-by: wslyvh <wslyvh@users.noreply.github.com>
2025-07-23 11:09:06 +02:00
Vivian Plasencia
bb089c5544 chore: v4.13.0-beta.0 2025-07-22 23:06:14 +02:00
Vivian Plasencia
88004d9092 fix: under constrained bug binary merkle root (#1012)
* Fix/update binary merkle root circuit version (#1000)

* fix(circuits)!: update binary merkle root circuit version

re #999

* chore: update snarkjs version from 0.7.4 to 0.7.5

* refactor: update the proof package and smart contracts  (#1011)

refactor: update the proof package and smart contracts with new zk artifacts
2025-07-22 23:02:00 +02:00
Vivian Plasencia
e7ca1d9487 chore: v4.12.1 2025-07-21 23:45:40 +02:00
Vivian Plasencia
1b82dcdded chore(group): update lean-imt version 2.2.3 -> 2.2.4 (#1010) 2025-07-21 16:36:43 -05:00
Vivian Plasencia
cd04b0c5c7 chore: v4.12.0 2025-07-17 16:38:26 +02:00
aritra
b6a7a9883b refactor: transport selection logic (#1007) 2025-07-17 16:30:04 +02:00
aritra
fc1fe4d086 Allow injecting existing PublicClient into SemaphoreViem (#1006)
* refactor: allow injecting existing PublicClient into SemaphoreViem

* fix: remove comment
2025-07-17 13:48:13 +02:00
Vivian Plasencia
feb8c9c97d docs(website): add ethdam video recording (#996) 2025-06-09 15:50:00 +02:00
César Henrique
b56e9690a8 Test(data): add test coverage for getEvents utility (#989)
test(data): add test coverage for getEvents utility

re #986
2025-05-26 19:10:24 +02:00
Vivian Plasencia
c973bab503 cocs: add new issue link (#988)
* docs: update contributing file

* docs: update pull request template

* docs: add new issue link to contributing
2025-05-25 23:14:11 +02:00
Vivian Plasencia
27aee4bf43 Docs/update contributing (#987)
* docs: update contributing file

* docs: update pull request template
2025-05-25 22:54:29 +02:00
Vivian Plasencia
ea62310df6 chore: v4.11.1 2025-05-21 16:49:07 +02:00
Vivian Plasencia
6bc415f4d5 fix(data): fix semaphore viem class (#985)
re #984
2025-05-21 16:44:38 +02:00
Vivian Plasencia
18f77ac0bb chore: v4.11.0 2025-05-20 14:00:27 +02:00
Sarkazein
f3c4cf27e2 feat(data): implement Viem lib alternative to SemaphoreEthers (#966)
* feat(data): implement Viem lib alternative to Ethers for @semaphore-protocol/data package class

This adds a Viem-based alternative to SemaphoreEthers, allowing
developers to choose their preferred Ethereum library.

Closes #343

* chore(data): update yarn.lock for viem dependency

* chore(data): improve test coverage for SemaphoreViem class

* chore(data): improve test coverage for SemaphoreViem class
2025-05-20 13:51:34 +02:00
Sri Hari S
57132a38df Added warning to the Semaphore docs (#983)
Update identities.mdx

Added warning to the Semaphore docs
2025-05-19 13:54:36 +02:00
Vivian Plasencia
6ef16976f7 docs(website): update semaphore roadmap (#981) 2025-05-07 14:42:59 +02:00
Vivian Plasencia
2849ca1d24 chore: v4.10.0 2025-05-06 22:36:52 +02:00
Vivian Plasencia
d05d783852 chore:deploy contracts (#980)
* chore: update semaphore contract address

re #978

* feat: add ethereum as a supported network

re #977

* feat: add ethereum subgraph and deploy subgraphs

re #978, #977
2025-05-06 22:28:08 +02:00
Vivian Plasencia
993e46a427 docs(website): update events (#979) 2025-05-05 19:03:45 +02:00
Jimmy Chu
f984c1e864 chore(website): add a new project in project page (#972) 2025-04-03 00:11:54 +02:00
Vivian Plasencia
5c9d1737d3 chore: v4.9.2 2025-03-31 12:50:00 +02:00
Vivian Plasencia
1318b0e74b docs: update releases section in readme file 2025-03-31 12:44:51 +02:00
Vivian Plasencia
c0fcc94e82 docs: add more info to the readme file about the release of the packages (#971) 2025-03-31 12:41:49 +02:00
Vivian Plasencia
e70ae1151b chore: update leanimt sol version (#970) 2025-03-31 12:30:58 +02:00
Vivian Plasencia
fd38539908 docs(website): add scaling semaphore with pir to the roadmap (#969) 2025-03-18 01:03:24 +01:00
Vivian Plasencia
8bd45d8c46 docs: add specification document link to website and docs (#965) 2025-03-06 13:55:29 +01:00
Vivian Plasencia
534e69683a docs(website): update roadmap to add semaphore noir implementation (#962) 2025-03-04 12:35:58 +01:00
Vivian Plasencia
a0a3b9380b docs(website): update spec status to true on roadmap (#959) 2025-03-03 11:02:33 +01:00
75 changed files with 3562 additions and 1212 deletions

View File

@@ -37,4 +37,4 @@
- [ ] New and existing unit tests pass locally with my changes
> [!IMPORTANT]
> We do not accept minor grammatical fixes (e.g., correcting typos, rewording sentences) unless they significantly improve clarity in technical documentation. These contributions, while appreciated, are not a priority for merging. If there is a grammatical error feel free to message the team.
> We do not accept pull requests for minor grammatical fixes (e.g., correcting typos, rewording sentences) or for fixing broken links, unless they significantly improve clarity or functionality. These contributions, while appreciated, are not a priority for merging. If you notice any of these issues, please create a [GitHub Issue](https://github.com/semaphore-protocol/semaphore/issues/new?template=BLANK_ISSUE) to report them so they can be properly tracked and addressed.

View File

@@ -31,7 +31,7 @@ Pull requests are great if you want to add a feature or fix a bug. Here's a quic
7. Push to your fork and submit a pull request on our `main` branch. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.
> [!IMPORTANT]
> We do not accept minor grammatical fixes (e.g., correcting typos, rewording sentences) unless they significantly improve clarity in technical documentation. These contributions, while appreciated, are not a priority for merging. If there is a grammatical error feel free to message the team.
> We do not accept pull requests for minor grammatical fixes (e.g., correcting typos, rewording sentences) or for fixing broken links, unless they significantly improve clarity or functionality. These contributions, while appreciated, are not a priority for merging. If you notice any of these issues, please create a [GitHub Issue](https://github.com/semaphore-protocol/semaphore/issues/new?template=BLANK_ISSUE) to report them so they can be properly tracked and addressed.
## CI (Github Actions) Tests

View File

@@ -373,12 +373,28 @@ The output will be placed on the `docs` folder.
### Releases
Bump a new version with:
Steps:
1. Bump a new version with:
```bash
yarn version:bump <version>
# e.g. yarn version:bump 2.0.0
```
It will create a commit and a git tag that will need to be pushed on the main branch. A workflow will be triggered and will
publish the Semaphore packages on [npm](https://www.npmjs.com/) and release a new version on Github with its changelogs automatically.
This step creates a commit and a git tag.
2. Push the changes to main:
```bash
git push origin main
```
3. Push the new git tag:
```bash
git push origin <version>
# e.g. git push origin v2.0.0
```
After pushing the new git tag, a workflow will be triggered to publish the Semaphore packages on [npm](https://www.npmjs.com/) and release a new version on GitHub with its changelogs automatically.

View File

@@ -67,7 +67,7 @@ const config: Config = {
announcementBar: {
id: "semaphore-v4-beta",
content:
'<b><a href="https://github.com/semaphore-protocol/semaphore/releases/tag/v4.0.0" target="_blank">Semaphore V4</a> is out 🎉 <a href="/getting-started">Try it out</a> and let us know if you have any feedback on <a href="https://semaphore.pse.dev/telegram" target="_blank">Telegram</a> or <a href="https://github.com/orgs/semaphore-protocol/discussions" target="_blank">Github</a>!</b>',
'<b>New Semaphore V4 <a href="https://ceremony.pse.dev/projects/Semaphore%20Binary%20Merkle%20Root%20Fix" target="_blank">Trusted Setup Ceremony</a> is open for contributions until August 20!</b>',
backgroundColor: "#dde6fc",
textColor: "#000000"
},

View File

@@ -19,7 +19,7 @@
"@docusaurus/core": "3.5.2",
"@docusaurus/preset-classic": "3.5.2",
"@mdx-js/react": "^3.0.0",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/utils": "4.13.0",
"@svgr/webpack": "^5.5.0",
"clsx": "^1.2.1",
"docusaurus-plugin-sass": "^0.2.5",

196
apps/docs/static/llms.txt vendored Normal file
View File

@@ -0,0 +1,196 @@
# Semaphore V4 - llms.txt
> Zero-knowledge protocol for anonymous group membership and signaling
## Quick Reference
### Core Concept
Semaphore allows users to cast messages (votes, endorsements) as provable group members without revealing identity, with built-in double-signaling prevention.
**Key Components:**
- **Identity**: User's cryptographic identity (private key, public key, commitment)
- **Group**: Merkle tree of identity commitments
- **Proof**: Zero-knowledge proof of group membership + message
- **Nullifier**: Unique identifier preventing double-signaling
- **Scope**: Topic/context that limits one proof per user
### Essential Packages
```bash
# Core functionality
npm install @semaphore-protocol/core
# Individual packages
npm install @semaphore-protocol/identity
npm install @semaphore-protocol/group
npm install @semaphore-protocol/proof
npm install @semaphore-protocol/contracts
```
## Common Patterns
### 1. Identity Management
```javascript
import { Identity } from "@semaphore-protocol/identity"
// Random identity
const identity = new Identity()
const { privateKey, publicKey, commitment } = identity
// Deterministic identity (from secret)
const deterministicIdentity = new Identity("secret-value")
// Sign/verify messages
const message = "Hello World"
const signature = identity.signMessage(message)
const isValid = Identity.verifySignature(message, signature, identity.publicKey)
// Export/import
const exported = identity.export() // base64 private key
const imported = Identity.import(exported)
```
### 2. Group Operations
```javascript
import { Group } from "@semaphore-protocol/group"
// Create group
const group = new Group()
const groupWithMembers = new Group([commitment1, commitment2])
// Manage members
group.addMember(identity.commitment)
group.addMembers([commitment1, commitment2])
group.removeMember(0) // sets to 0, doesn't change size
group.updateMember(0, newCommitment)
// Generate Merkle proof
const merkleProof = group.generateMerkleProof(0)
```
### 3. Proof Generation & Verification
```javascript
import { generateProof, verifyProof } from "@semaphore-protocol/proof"
// Generate proof
const scope = group.root // or any unique scope
const message = 1
const proof = await generateProof(identity, group, message, scope)
// Verify proof
const isValid = await verifyProof(proof)
```
### 4. On-Chain Integration
```solidity
// Contract setup
import "@semaphore-protocol/contracts/interfaces/ISemaphore.sol";
contract YourContract {
ISemaphore public semaphore;
uint256 public groupId;
constructor(ISemaphore _semaphore) {
semaphore = _semaphore;
groupId = semaphore.createGroup();
}
// Validate proof on-chain
function validateProof(ISemaphore.SemaphoreProof calldata proof) external {
semaphore.validateProof(groupId, proof);
}
}
```
## Configuration Reference
### Circuit Parameters
- **MAX_DEPTH**: 1-32 (Merkle tree depth)
- **Default proof validity**: 1 hour for old Merkle roots
### Key Security Settings
- **Identity reuse warning**: Same identity across groups compromises all groups
- **Nullifier uniqueness**: Prevents double-signaling within same scope
- **Message tampering**: Circuit calculates dummy square to prevent tampering
## Troubleshooting
### Common Issues
**"Proof verification failed"**
- Check group contains identity commitment
- Verify scope matches between generation and verification
- Ensure Merkle proof is current (within validity window)
**"Nullifier already exists"**
- User already submitted proof with this scope
- Use different scope or implement nullifier tracking
**"Identity commitment not found"**
- Add identity to group before generating proof
- Verify correct group is being used
## Architecture Overview
### Circuit Structure
The Semaphore circuit proves three things:
1. **Membership**: User belongs to group (Merkle proof verification)
2. **Authorization**: Same user created message and proof (nullifier check)
3. **Message integrity**: Message hasn't been tampered with
### Contract Architecture
- **SemaphoreVerifier.sol**: Groth16 proof verification
- **SemaphoreGroups.sol**: Group management (abstract)
- **Semaphore.sol**: Complete implementation with proof validation
## Extended Resources
### 📚 Complete Guides
- [Getting Started Tutorial](https://docs.semaphore.pse.dev/getting-started) - Full project setup with CLI
- [Identities Deep Dive](https://docs.semaphore.pse.dev/guides/identities) - Advanced identity management
- [Groups Management](https://docs.semaphore.pse.dev/guides/groups) - Comprehensive group operations
- [Proof Generation](https://docs.semaphore.pse.dev/guides/proofs) - Detailed proof workflows
### 🔧 Technical References
- [Semaphore V4 Specification](https://github.com/zkspecs/zkspecs/blob/main/specs/3/README.md) - Protocol specification
- [Circuit Documentation](https://docs.semaphore.pse.dev/technical-reference/circuits) - Circuit internals
- [Contract Reference](https://docs.semaphore.pse.dev/technical-reference/contracts) - Solidity implementation details
- [Deployed Contracts](https://docs.semaphore.pse.dev/deployed-contracts) - Network addresses
### 🛠️ Development Tools
- [GitHub Repository](https://github.com/semaphore-protocol/semaphore) - Source code and examples
- [CLI Templates](https://github.com/semaphore-protocol/semaphore/tree/main/packages/cli) - Project boilerplates
- [Boilerplate App](https://github.com/semaphore-protocol/boilerplate) - Complete example application
### 🔐 Security & Audits
- [Trusted Setup Ceremony](https://ceremony.pse.dev/projects/Semaphore%20V4%20Ceremony) - 400+ participants, July 2024
- [Security Audits](https://docs.semaphore.pse.dev/#audits) - PSE and Veridise audit reports
- [Best Practices Guide](https://docs.semaphore.pse.dev/) - Security considerations section
### 🌐 Community & Support
- [Documentation](https://docs.semaphore.pse.dev/) - Complete documentation
- [GitHub Discussions](https://github.com/semaphore-protocol/semaphore/discussions) - Community support
- [PSE Website](https://pse.dev/) - Privacy & Scaling Explorations team
### 📊 Data & Indexing
- [@semaphore-protocol/data](https://github.com/semaphore-protocol/semaphore/tree/main/packages/data) - On-chain data fetching
- [Subgraph Templates](https://github.com/semaphore-protocol/semaphore/tree/main/packages/cli-template-monorepo-subgraph) - Graph Protocol integration
## Quick Start Commands
```bash
# Create new project
npx @semaphore-protocol/cli create my-app --template monorepo-ethers
# Get on-chain groups
semaphore get-groups --network sepolia
# Deploy contract
yarn deploy --semaphore <address> --group <id> --network sepolia
```
## Use Cases
- **Private Voting**: Anonymous ballots with double-vote prevention
- **Whistleblowing**: Anonymous reporting with verified membership
- **Anonymous DAOs**: Governance without identity disclosure
- **Mixers**: Privacy-preserving value transfers
- **Anonymous Authentication**: Prove membership without revealing identity

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 13
sidebar_position: 14
---
# Credits

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 12
sidebar_position: 13
---
# FAQ

View File

@@ -118,7 +118,7 @@ In the project root folder:
2. Go to the `apps/contracts` folder and deploy your contract.
```bash
yarn deploy --semaphore <semaphore-address> --group <group-id> --network sepolia
yarn deploy --semaphore <semaphore-address> --network sepolia
```
:::note

View File

@@ -87,6 +87,11 @@ You may choose to delegate such functionality to existing wallets such as Metama
3. The user can now recreate their Semaphore identity whenever they want by signing the same message with their Ethereum account in Metamask.
:::
:::warning Privacy risk
If a user signs the **same message** on multiple websites using MetaMask, all those websites will be able to **generate the same Semaphore identity**. This undermines anonymity and may allow third parties to **link identities across platforms** or even **gain control over a user's identity**.\
To mitigate this, encourage users to sign **unique messages per application** or implement safeguards that detect and warn about reuse.
:::
## Sign and verify messages
Semaphore V4 uses asymmetric cryptography and in particular EdDSA to generate the identity keys. It is therefore also possible to sign messages and verify their signatures.

View File

@@ -0,0 +1,55 @@
---
sidebar_position: 11
---
# Code editors and LLM setup
LLMs often rely on outdated or generic information. Use this guide to help set up your code editor to pull in more accurate, up-to-date documentation and examples. It will help provide better answers and generate more accurate Semaphore code using LLMs (large language models) and MCP (Model Context Protocol) servers.
## Quick use
[llms.txt](https://docs.semaphore.pse.dev/llms.txt) is a compact, text version of the Semaphore docs.
Add this link directly to your chat window for enhanced context.
## Permanent setup
Depending on your IDE, you can add custom docs to VS Code, Cursor or others.
Example for Cursor...
1. Press `CMD + Shift + P` (unix), `Ctrl + Shift + P` (Windows)
1. Type `Add new custom docs`.
1. Add https://docs.semaphore.pse.dev/llms.txt
1. In chat you can know `@docs` and choose `semaphore` to provide additional context.
Refer to the documentation of your IDE to properly set it up.
## MCP Server
Depending on your IDE, you can add a MCP server to communicate your docs to the AI model.
- [Context7 MCP server](https://github.com/upstash/context7) is a server that provides many libraries, incl. Semaphore.
Example for Cursor...
1. Press `CMD + Shift + J` (unix), `Ctrl + Shift + J` (Windows)
1. Click on `MCP` on the sidebar
1. Click `Add new global MCP server`
1. Add the following code to `mcp.json`
```
{
"mcpServers": {
"Context7": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@upstash/context7-mcp@latest"]
}
}
}
```
You can now prompt anything about Semaphore and write `use context7` at the end of your prompt. E.g. `create a new Semaphore identity in TypeScript. use context`. This will call the MCP tool and automatically fetch the latest documentation.
Refer to the documentation of your IDE to properly set it up.

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 11
sidebar_position: 12
---
import Tabs from "@theme/Tabs"

View File

@@ -0,0 +1,50 @@
---
sidebar_position: 6
---
# Trusted Setup
We are excited to announce the upcoming Multi-Party Computation (MPC) Phase 2 Trusted Setup ceremony for the Semaphore V4 circuit, following a [bug fix in the BinaryMerkleRoot circuit](https://pse.dev/blog/under-constrained-bug-in-binary-merkle-root-circuit-fixed-in-v200) in ZK-Kit. This is crucial for establishing a robust security foundation for the cryptographic protocol.
The ceremony will take place from **July 23** to **August 20**. If all goes to plan, finalization should take place on **August 22** with the announcement of the final beacon on **August 21**.
## Securing Semaphore V4
To contribute to this ceremony, you will just need your browser!
1. Visit [ceremony.pse.dev](https://ceremony.pse.dev/projects/Semaphore%20Binary%20Merkle%20Root%20Fix).
2. Login and associate your **Github** account.
3. Hit the `contribute` button and wait for your turn.
Please note: You will find your contribution certificate on your GitHub gists - and, if all goes wrong or you feel lost, there are instructions on site or post a message on [Semaphore Telegram](https://semaphore.pse.dev/telegram) chat or [PSE discord](https://discord.com/invite/sF5CT5rzrR).
## What You Need to Know About the Ceremony
### Your Role
Many zero-knowledge proof systems, including those based on the Groth16 scheme, require this layer of randomness, often referred to as "toxic waste” which must remain unknown to anyone to maintain the integrity of the zero-knowledge proof system. Trusted setups rely on a 1 of N honest participant assumption. As long as just one participant actually discards their “toxic waste”, the proof system will be secure. You can be that one participant by providing your unique entropy with your contribution, making the ceremony unpredictable and unbiased, safeguarding the entire process against potential vulnerabilities.
### Why It Matters
Trusted setups are crucial as they generate a set of parameters necessary to initiate SNARK-based systems. Through a series of computations performed by various participants. This sequence involves downloading previous contributions, adding generated randomness, and uploading the results of your contribution. These contributions are then integrated into the final artifacts crucial for proof generation/verification.
### Semaphore Circuit
The [Semaphore circuit](https://github.com/semaphore-protocol/semaphore/blob/main/packages/circuits/src/semaphore.circom) centered around the creation of the _Semaphore identity_ and _identity commitment_, includes verification processes, and facilitates the generation of the _nullifier_. We are going to support `MAX_DEPTH` from 1 to 32 - therefore you will have to contribute to 32 variants of the same circuit. Since the constraints will range from 2k to less than 10k with very small artifacts size (< 6mb x contribution), the waiting and contribution time shouldn't be much!
### Transparency and Fairness
We are committed to transparency on ceremony setup, execution, finalization, and later verification. Our primary goal is to **engage as many contributors as possible** to ensure the circuit is **secure** and **production-ready**. To this end, the ceremony is designed to _maximize contributor inclusion_, monitor & troubleshoot whenever is needed, _lower the entry barriers_, _making contributiong as effortless as possible_. A key step towards achieving these goals is running the ceremony w/ [p0tion](https://github.com/privacy-scaling-explorations/p0tion): an in-house developed, open-source, battle-tested tool that is fully equipped to meet our needs.
### Ceremony Settings
To protect the ceremony from sybils, in order to contribute you must have a GitHub account such that you have: 1 public repository, at least 1 follower, following at least 5 other accounts and, your account is at least 1 month old. While to protect from fake contributors or people hanging due to connection/machine resources, we are going to set a 10 minutes time-window on contributions (+ 1 hour verification) - after this amount of time, you will be kicked out and will have to wait **10 minutes** before you can contribute again.
## Troubleshooting
- If you have been idle longer than expected, it may be that the current contributor has been blocked for some reason. Do not worry, the maximum wait in this case is one hour, after which you will be able to continue contributing.
### Learn more about Trusted Setups
- [How Do Trusted Setups Work? - Vitalik](https://vitalik.eth.limo/general/2022/03/14/trustedsetup.html)
- [p0tion FAQs](https://p0tion.super.site/faqs#block-cebca23ebb514c2ea096ad44d4833356)

View File

@@ -11,6 +11,8 @@ slug: /
Additionally, it provides a simple mechanism to prevent double-signaling.
Use cases include private voting, whistleblowing, anonymous DAOs and mixers.
For in-depth technical details about Semaphore, refer to the [Semaphore V4 Specification](https://github.com/zkspecs/zkspecs/blob/main/specs/3/README.md).
## Features
With Semaphore, you can allow your users to do the following:

View File

@@ -47,6 +47,7 @@ You can access any subgraph supported by Semaphore with the following URL: `http
Supported networks:
- `sepolia`
- `ethereum`
- `optimism`
- `optimism-sepolia`
- `arbitrum`

View File

@@ -9,8 +9,8 @@
"codegen:sepolia": "yarn codegen sepolia",
"build": "graph build",
"build:sepolia": "yarn codegen:sepolia && graph build",
"auth": "graph auth --studio",
"deploy": "graph deploy --studio ${0}",
"auth": "graph auth",
"deploy": "graph deploy ${0}",
"start-ipfs": "node scripts/start-ipfs.js",
"create-local": "graph create --node http://localhost:8020/ semaphore",
"remove-local": "graph remove --node http://localhost:8020/ semaphore",

View File

@@ -15,6 +15,10 @@ function mapNetwork(n) {
return "arbitrum-one"
}
if (n === "ethereum") {
return "mainnet"
}
return network
}

View File

@@ -32,18 +32,20 @@ export default function RootLayout({ children }: { children: React.ReactNode })
<body suppressHydrationWarning>
<Providers>
<Banner>
Semaphore V4
<Link
_hover={{
textDecoration: "underline",
textDecorationColor: "primary.600"
}}
href="https://github.com/semaphore-protocol/semaphore/releases/tag/v4.0.0"
href="https://ceremony.pse.dev/projects/Semaphore%20Binary%20Merkle%20Root%20Fix"
ml="1"
isExternal
color="primary.500"
>
<b>Semaphore V4</b>
<b>Trusted Setup Ceremony</b>
</Link>{" "}
has been released 🚀
is open for contributions until <b>August 20</b>!
</Banner>
<Navbar />
<Container maxW="1440px" px={{ base: "5", md: "10" }}>

View File

@@ -131,7 +131,7 @@ export default function Home() {
>
1
</Heading>
<VStack align="left">
<VStack align="start">
<Text
fontSize={{ base: "18px", md: "20px" }}
fontFamily={sora.style.fontFamily}
@@ -152,7 +152,7 @@ export default function Home() {
>
3
</Heading>
<VStack align="left">
<VStack align="start">
<Text
fontSize={{ base: "18px", md: "20px" }}
fontFamily={sora.style.fontFamily}
@@ -181,7 +181,7 @@ export default function Home() {
>
2
</Heading>
<VStack align="left">
<VStack align="start">
<Text
fontSize={{ base: "18px", md: "20px" }}
fontFamily={sora.style.fontFamily}
@@ -203,7 +203,7 @@ export default function Home() {
>
4
</Heading>
<VStack align="left">
<VStack align="start">
<Text
fontSize={{ base: "18px", md: "20px" }}
fontFamily={sora.style.fontFamily}
@@ -287,10 +287,10 @@ export default function Home() {
Upcoming Events
</Heading>
<VStack align="left" spacing="10" maxH="600px" overflowY="auto">
<VStack align="start" spacing="10" maxH="600px" overflowY="auto">
{events.map((event) => (
<Link href={event.link} key={event.name} isExternal>
<VStack align="left">
<VStack align="start">
<Heading fontSize={{ base: "20px", md: "24px" }}>
{event.date} | {event.name}
</Heading>

View File

@@ -5,7 +5,7 @@ import ProjectsList from "../../components/ProjectsList"
export default function Projects() {
return (
<>
<VStack pt="170px" pb="56px" w="100%" justify="end" align="left" spacing="40" position="relative">
<VStack pt="170px" pb="56px" w="100%" justify="end" align="start" spacing="40" position="relative">
<Box
zIndex="-1"
top="0"
@@ -25,7 +25,7 @@ export default function Projects() {
/>
</Box>
<VStack align="left" spacing="4" pb="16">
<VStack align="start" spacing="4" pb="16">
<Heading fontSize={{ base: "40px", sm: "46px", md: "72px" }}>Built with Semaphore</Heading>
<Text fontSize={{ base: "16px", sm: "18px", md: "20px" }}>
@@ -35,7 +35,7 @@ export default function Projects() {
</VStack>
</VStack>
<ProjectsList w="100%" align="left" pt="16" spacing="14" />
<ProjectsList w="100%" align="start" pt="16" spacing="14" />
<VStack my="128px">
<ActionCard

View File

@@ -46,7 +46,7 @@ export default function Carousel({ title, sizes, type, ...props }: CarouselProps
}, [index, size])
return (
<VStack align="left" w="full" spacing="16" {...props}>
<VStack align="start" w="full" spacing="16" {...props}>
<HStack justify={type === "projects" ? "center" : "space-between"}>
<Heading fontSize={{ base: "30px", md: "44px" }}>{title}</Heading>

View File

@@ -23,9 +23,9 @@ export default function InfoCard({ texts }: InfoCardProps) {
height={{ base: "auto", md: "474px" }}
>
<CardBody padding="0">
<VStack align="left" spacing="10" maxH="500" overflowY="auto">
<VStack align="start" spacing="10" maxH="500" overflowY="auto">
{texts.map((text) => (
<VStack key={text.title} align="left">
<VStack key={text.title} align="start">
<Heading textAlign="left" fontSize={{ base: "20px", md: "24px" }}>
{text.title}
</Heading>

View File

@@ -52,7 +52,7 @@ export default function ProjectsList(props: any) {
return (
<VStack {...props}>
<VStack align="left" spacing="6">
<VStack align="start" spacing="6">
<Text fontSize="20">Projects created by</Text>
<HStack spacing="4" flexWrap="wrap">
@@ -83,7 +83,7 @@ export default function ProjectsList(props: any) {
</HStack>
</VStack>
<VStack align="left" spacing="6" ref={viewToScrollRef}>
<VStack align="start" spacing="6" ref={viewToScrollRef}>
<Text fontSize="20">Category</Text>
<HStack spacing="3" flexWrap="wrap">
{getProjectCategories(sortedProjects).map((category) => (

View File

@@ -23,7 +23,7 @@ export default function SectionBlock({ title, description, linkText, linkUrl, co
return (
<VStack w="full">
<Flex flexDir={{ base: "column", lg: "row" }} gap="52px" w="full">
<VStack align="left" gap="32px" flex="1">
<VStack align="start" gap="32px" flex="1">
<Text fontSize={{ base: "40px", md: "44px" }} fontWeight={{ base: "400", md: "500" }}>
{title}
</Text>

View File

@@ -47,5 +47,12 @@
"date": "2024-12-09",
"authors": ["glasswing"],
"url": "https://mirror.xyz/0xBE98D44c29D179588b7E717Db8898529e5cD770F/5Xlv1jzwJKfKgP-m257kjivBlUIM_cwTzsmpf9F0Su8"
},
{
"title": "Semaphore V4 Specification",
"minRead": 10,
"date": "2025-03-01",
"authors": ["Semaphore Team"],
"url": "https://github.com/zkspecs/zkspecs/blob/main/specs/3/README.md"
}
]

View File

@@ -1,20 +1,26 @@
[
{
"name": "DIF - Decentralized Identity Foundation",
"date": "Oct 1 - Nov 4, 2024",
"description": "Semaphore team will deliver a talk and sponsor prizes for the online hackathon.",
"link": "https://identity.foundation/"
"name": "ETHDam",
"date": "May 9-11, 2025",
"description": "Semaphore team will deliver an in-person talk.",
"link": "https://www.ethdam.com/"
},
{
"name": "Devcon",
"date": "Nov 12-15, 2024",
"name": "ZuBerlin",
"date": "June 14-22, 2025",
"description": "Semaphore team will deliver an in-person talk.",
"link": "https://zuberlin.city/"
},
{
"name": "Trusted Setup Ceremony",
"date": "Jul 23 - Aug 6, 2025",
"description": "The Semaphore team will perform the Phase 2 MPC Trusted Setup Ceremony to secure V4 circuit variants from 1 to 32 tree depths, following a bug fix in the BinaryMerkleRoot circuit in ZK-Kit.",
"link": "https://docs.semaphore.pse.dev/trusted-setup"
},
{
"name": "Devconnect",
"date": "Nov 17-22, 2025",
"description": "Semaphore team will deliver an in-person talk and run workshops.",
"link": "https://devcon.org/en/"
},
{
"name": "ETHIndia",
"date": "Dec 6-8, 2024",
"description": "Semaphore team will deliver an in-person talk on Semaphore and Bandada.",
"link": "https://ethindia.co"
"link": "https://devconnect.org/"
}
]

View File

@@ -575,5 +575,16 @@
"links": {
"github": "https://github.com/quartz-technology/obscurus"
}
},
{
"name": "Semaphore Modular Smart Account Modules",
"categories": ["Wallet", "Privacy"],
"tagline": "Anonymous multi-sig wallet with Semaphore",
"pse": false,
"icon": "",
"links": {
"github": "https://github.com/jimmychu0807/semaphore-msa-modules",
"website": "https://semaphore-msa-modules.jimmychu0807.hk"
}
}
]

View File

@@ -28,11 +28,19 @@
"done": true
},
{
"name": "Semaphore Spec",
"done": false
"name": "Semaphore V4 Specification",
"done": true
},
{
"name": "Semaphore Rust Implementation",
"done": true
},
{
"name": "Semaphore Noir Implementation",
"done": false
},
{
"name": "Scaling Semaphore with PIR",
"done": false
}
]

View File

@@ -118,5 +118,21 @@
"speakers": ["Vivian Plasencia"],
"url": "https://youtu.be/ux5Xy_lpiYk",
"thumbnail": "https://img.youtube.com/vi/ux5Xy_lpiYk/0.jpg"
},
{
"title": "Scaling Semaphore",
"eventName": "ETHDam",
"date": "2025-05-10",
"speakers": ["Vivian Plasencia"],
"url": "https://youtu.be/IkYtKSQLR-A",
"thumbnail": "https://img.youtube.com/vi/IkYtKSQLR-A/0.jpg"
},
{
"title": "Scaling Semaphore: Noir in Action",
"eventName": "NoirCon2",
"date": "2025-06-19",
"speakers": ["Vivian Plasencia"],
"url": "https://youtu.be/vfL7z74jGyU",
"thumbnail": "https://img.youtube.com/vi/vfL7z74jGyU/0.jpg"
}
]

View File

@@ -80,7 +80,7 @@
"prettier": "^3.2.5",
"rimraf": "^5.0.5",
"semver": "^7.6.2",
"snarkjs": "0.7.4",
"snarkjs": "0.7.5",
"ts-jest": "^29.1.2",
"ts-node": "^10.9.2",
"tslib": "^2.6.2",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/circuits",
"version": "4.9.1",
"version": "4.13.0",
"description": "Semaphore Circom circuits to generate zero-knowledge proofs.",
"license": "MIT",
"files": [
@@ -24,14 +24,14 @@
"access": "public"
},
"dependencies": {
"@zk-kit/binary-merkle-root.circom": "1.0.0",
"@zk-kit/binary-merkle-root.circom": "2.0.0",
"circomlib": "2.0.5"
},
"devDependencies": {
"@semaphore-protocol/core": "workspace:^",
"@types/mocha": "^10.0.6",
"@zk-kit/baby-jubjub": "1.0.3",
"circomkit": "0.0.19",
"circomkit": "0.3.3",
"mocha": "^10.2.0",
"poseidon-lite": "^0.3.0"
}

View File

@@ -27,7 +27,7 @@ template Semaphore(MAX_DEPTH) {
// See the Semaphore identity package to know more about how the identity is generated:
// https://github.com/semaphore-protocol/semaphore/tree/main/packages/identity.
signal input secret;
signal input merkleProofLength, merkleProofIndices[MAX_DEPTH], merkleProofSiblings[MAX_DEPTH];
signal input merkleProofLength, merkleProofIndex, merkleProofSiblings[MAX_DEPTH];
signal input message;
signal input scope;
@@ -56,9 +56,9 @@ template Semaphore(MAX_DEPTH) {
// Proof of membership verification.
// The Merkle root passed as output must be equal to that calculated within
// the circuit through the inputs of the Merkle proof.
// See https://github.com/privacy-scaling-explorations/zk-kit/blob/main/packages/circuits/circom/binary-merkle-root.circom
// See https://github.com/privacy-scaling-explorations/zk-kit.circom/blob/main/packages/binary-merkle-root/src/binary-merkle-root.circom
// to know more about how the 'BinaryMerkleRoot' template works.
merkleRoot <== BinaryMerkleRoot(MAX_DEPTH)(identityCommitment, merkleProofLength, merkleProofIndices, merkleProofSiblings);
merkleRoot <== BinaryMerkleRoot(MAX_DEPTH)(identityCommitment, merkleProofLength, merkleProofIndex, merkleProofSiblings);
// Nullifier generation.
// The nullifier is a value that essentially identifies the proof generated in a specific scope

View File

@@ -12,21 +12,18 @@ export const circomkit = new Circomkit({
})
export function generateMerkleProof(group: Group, _index: number, maxDepth: number) {
const { siblings: merkleProofSiblings, index } = group.generateMerkleProof(_index)
const { siblings: merkleProofSiblings, index: merkleProofIndex } = group.generateMerkleProof(_index)
// The index must be converted to a list of indices, 1 for each tree level.
// The circuit tree depth is 20, so the number of siblings must be 20, even if
// the tree depth is actually 3. The missing siblings can be set to 0, as they
// won't be used to calculate the root in the circuit.
const merkleProofIndices: number[] = []
// For example, if the circuit expects a Merkle tree of depth 20,
// the input must always include 20 sibling nodes, even if the actual
// tree depth is smaller (e.g., 3). The unused sibling positions can be
// filled with 0, as they won't affect the root calculation in the circuit.
for (let i = 0; i < maxDepth; i += 1) {
merkleProofIndices.push((index >> i) & 1)
if (merkleProofSiblings[i] === undefined) {
merkleProofSiblings[i] = BigInt(0)
}
}
return { merkleProofSiblings, merkleProofIndices }
return { merkleProofSiblings, merkleProofIndex }
}

View File

@@ -12,7 +12,7 @@ const r = 2188824287183927522224640574525727508854836440041603434369820418657580
describe("semaphore", () => {
let circuit: WitnessTester<
["secret", "merkleProofLength", "merkleProofIndices", "merkleProofSiblings", "scope", "message"],
["secret", "merkleProofLength", "merkleProofIndex", "merkleProofSiblings", "scope", "message"],
["nullifier", "merkleRoot"]
>
@@ -36,12 +36,12 @@ describe("semaphore", () => {
const group = new Group([commitment, 2n, 3n])
const { merkleProofSiblings, merkleProofIndices } = generateMerkleProof(group, 0, MAX_DEPTH)
const { merkleProofSiblings, merkleProofIndex } = generateMerkleProof(group, 0, MAX_DEPTH)
const INPUT = {
secret,
merkleProofLength: group.depth,
merkleProofIndices,
merkleProofIndex,
merkleProofSiblings,
scope,
message
@@ -61,12 +61,12 @@ describe("semaphore", () => {
const commitment = poseidon2(mulPointEscalar(Base8, secret))
const group = new Group([commitment, 2n, 3n])
const { merkleProofSiblings, merkleProofIndices } = generateMerkleProof(group, 0, MAX_DEPTH)
const { merkleProofSiblings, merkleProofIndex } = generateMerkleProof(group, 0, MAX_DEPTH)
const INPUT = {
secret,
merkleProofLength: group.depth,
merkleProofIndices,
merkleProofIndex,
merkleProofSiblings,
scope,
message
@@ -81,12 +81,12 @@ describe("semaphore", () => {
const commitment = poseidon2(mulPointEscalar(Base8, secret))
const group = new Group([commitment, 2n, 3n])
const { merkleProofSiblings, merkleProofIndices } = generateMerkleProof(group, 0, MAX_DEPTH)
const { merkleProofSiblings, merkleProofIndex } = generateMerkleProof(group, 0, MAX_DEPTH)
const INPUT = {
secret,
merkleProofLength: group.depth,
merkleProofIndices,
merkleProofIndex,
merkleProofSiblings,
scope,
message
@@ -100,12 +100,12 @@ describe("semaphore", () => {
const group = new Group([commitment, 2n, 3n])
const { merkleProofSiblings, merkleProofIndices } = generateMerkleProof(group, 0, MAX_DEPTH)
const { merkleProofSiblings, merkleProofIndex } = generateMerkleProof(group, 0, MAX_DEPTH)
const INPUT = {
secret,
merkleProofLength: group.depth,
merkleProofIndices,
merkleProofIndex,
merkleProofSiblings,
scope,
message

View File

@@ -1,11 +1,11 @@
{
"name": "@semaphore-protocol/cli-template-contracts-foundry",
"version": "4.9.1",
"version": "4.13.0",
"description": "Semaphore Foundry template.",
"license": "Unlicense",
"devDependencies": {
"@semaphore-protocol/contracts": "4.9.1",
"@zk-kit/lean-imt.sol": "2.0.0",
"@semaphore-protocol/contracts": "4.13.0",
"@zk-kit/lean-imt.sol": "2.0.1",
"forge-std": "github:foundry-rs/forge-std#v1.9.4",
"poseidon-solidity": "0.0.5",
"prettier": "^3.2.5",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/cli-template-contracts-hardhat",
"version": "4.9.1",
"version": "4.13.0",
"description": "Semaphore Hardhat template.",
"license": "Unlicense",
"files": [
@@ -42,9 +42,9 @@
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
"@nomicfoundation/hardhat-verify": "^2.0.0",
"@semaphore-protocol/core": "4.9.1",
"@semaphore-protocol/hardhat": "4.9.1",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/core": "4.13.0",
"@semaphore-protocol/hardhat": "4.13.0",
"@semaphore-protocol/utils": "4.13.0",
"@typechain/ethers-v6": "^0.5.0",
"@typechain/hardhat": "^9.0.0",
"@types/chai": "^4.2.0",
@@ -72,7 +72,7 @@
"typescript": "^5.3.3"
},
"dependencies": {
"@semaphore-protocol/contracts": "4.9.1"
"@semaphore-protocol/contracts": "4.13.0"
},
"packageManager": "yarn@4.1.0"
}

View File

@@ -20,9 +20,9 @@
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
"@nomicfoundation/hardhat-verify": "^2.0.0",
"@semaphore-protocol/core": "4.9.1",
"@semaphore-protocol/hardhat": "4.9.1",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/core": "4.13.0",
"@semaphore-protocol/hardhat": "4.13.0",
"@semaphore-protocol/utils": "4.13.0",
"@typechain/ethers-v6": "^0.5.0",
"@typechain/hardhat": "^9.0.0",
"@types/chai": "^4.2.0",
@@ -50,7 +50,7 @@
"typescript": "^5.3.3"
},
"dependencies": {
"@semaphore-protocol/contracts": "4.9.1"
"@semaphore-protocol/contracts": "4.13.0"
},
"packageManager": "yarn@4.1.0"
}

View File

@@ -9,9 +9,9 @@
"lint": "next lint"
},
"dependencies": {
"@semaphore-protocol/core": "4.9.1",
"@semaphore-protocol/data": "4.9.1",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/core": "4.13.0",
"@semaphore-protocol/data": "4.13.0",
"@semaphore-protocol/utils": "4.13.0",
"ethers": "^6.13.4",
"next": "14.1.0",
"next-pwa": "^5.6.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/cli-template-monorepo-ethers",
"version": "4.9.1",
"version": "4.13.0",
"description": "Semaphore Hardhat + Next.js + SemaphoreEthers template.",
"license": "Unlicense",
"files": [

View File

@@ -20,9 +20,9 @@
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
"@nomicfoundation/hardhat-verify": "^2.0.0",
"@semaphore-protocol/core": "4.9.1",
"@semaphore-protocol/hardhat": "4.9.1",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/core": "4.13.0",
"@semaphore-protocol/hardhat": "4.13.0",
"@semaphore-protocol/utils": "4.13.0",
"@typechain/ethers-v6": "^0.5.0",
"@typechain/hardhat": "^9.0.0",
"@types/chai": "^4.2.0",
@@ -50,7 +50,7 @@
"typescript": "^5.3.3"
},
"dependencies": {
"@semaphore-protocol/contracts": "4.9.1"
"@semaphore-protocol/contracts": "4.13.0"
},
"packageManager": "yarn@4.1.0"
}

View File

@@ -9,9 +9,9 @@
"lint": "next lint"
},
"dependencies": {
"@semaphore-protocol/core": "4.9.1",
"@semaphore-protocol/data": "4.9.1",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/core": "4.13.0",
"@semaphore-protocol/data": "4.13.0",
"@semaphore-protocol/utils": "4.13.0",
"ethers": "^6.13.4",
"next": "14.1.0",
"next-pwa": "^5.6.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/cli-template-monorepo-subgraph",
"version": "4.9.1",
"version": "4.13.0",
"description": "Semaphore Hardhat + Next.js + SemaphoreSubgraph template.",
"license": "Unlicense",
"files": [

View File

@@ -1,7 +1,7 @@
{
"name": "@semaphore-protocol/cli",
"type": "module",
"version": "4.9.1",
"version": "4.13.0",
"description": "A command line tool to set up your Semaphore project and get group data.",
"license": "MIT",
"bin": {
@@ -41,8 +41,8 @@
"rollup-plugin-cleanup": "^3.2.1"
},
"dependencies": {
"@semaphore-protocol/data": "4.9.1",
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/data": "4.13.0",
"@semaphore-protocol/utils": "4.13.0",
"axios": "^1.6.7",
"boxen": "^7.1.1",
"chalk": "^5.3.0",

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
import {ISemaphore} from "./interfaces/ISemaphore.sol";
import {ISemaphoreVerifier} from "./interfaces/ISemaphoreVerifier.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
/// @dev Minimum supported tree depth.
uint8 constant MIN_DEPTH = 1;

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
import {ISemaphoreGroups} from "../interfaces/ISemaphoreGroups.sol";
import {InternalLeanIMT, LeanIMTData} from "@zk-kit/lean-imt.sol/InternalLeanIMT.sol";

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs).
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
import {MAX_DEPTH} from "./Constants.sol";
import {SemaphoreVerifierKeyPts} from "./SemaphoreVerifierKeyPts.sol";

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: MIT
// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs).
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
library SemaphoreVerifierKeyPts {
error Semaphore__VKPtBytesMaxDepthInvariantViolated(uint256 actual, uint256 expected);
@@ -10,454 +10,454 @@ library SemaphoreVerifierKeyPts {
// It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore.
uint256 private constant SET_SIZE = 14;
bytes private constant VK_POINT_BYTES =
hex"289691d7705934b5504ae4bd7be283f3465af66f62fc7f1e66f03876b445efdd"
hex"22a0bebada6ba60c3e190e9e8c2b1420244a14c9e02868b862c7945667416f9a"
hex"036ab5249fee75e0644ed259d45fbbd0142b638e421b948f5dc00cf3ff14a530"
hex"1bcf8d4f8bf886d2c7960badc94b3abf6beb4e43571d2b4b0f14928c10e0d594"
hex"2d8c51b7fa4ea9ea16765377aaae4ae0a416a89b600fc0b8ec35e9e6e5621976"
hex"1f2c636b4954a865946d69fed3ecd2bb60a61af38fa31f2a290ae28915d1f6e1"
hex"0b412b14d9dddf3f9031ffb51eb3f73602b9e49cfa9bec4a02ec9c0e3020ccc3"
hex"0ae9889ae5f4f6021af9e16dd1f2c445ed863fd6a374b329337f2fef4715350d"
hex"07f75b300b401d2435b96459d2b64f6f848411f246d8478199dd2351a35c1b5e"
hex"195a26806d907b6d9a9a9c235e09a48e94f8eb8da80f0d40bc4143e3d006e6d2"
hex"2d0006337513747c51f8f3e87364d2852113a83e586ef629c88cee6d4cbd422f"
hex"257aeaec24103ea15e4592c32d0ad9846ff1a2f3a836e0c19947980912b9006b"
hex"294bead7a3378f80183af735f6bc8529ddc73d9e0a35d594dcf93524403c9e3e"
hex"0cf84e9163744a9a65520f4b8cbb4ca35c428d1c4a5789e11f42636c6d197473"
hex"21f43b1ffa301d565dbc37ef1eb2ef669b8a1876e3754b79657b26fe43c845ce"
hex"1e558b2ca618dfa02f0d640fdd45f56492a577154989cd09523829b5e15f2d62"
hex"04db437b7b4fa0f6eea95403dd25c6a674b3e81be98ad4532affe8507ec05380"
hex"20376c16b97ad98b8dfaa6f10d42a3c5e264c56018d32b0e8af528db157eb60d"
hex"234219fd49f941520883c13c1f01ff7b2f7f512a3046f91d33cdc3900ffb9de9"
hex"1d754d84438f79e6b701f7d665d59755a7bcd0b63f7c2da94b737606c16de1d3"
hex"287a08af195521f756271ec64bdc4ca8a7a95fae892c0fd2cf0c148d6c0cb653"
hex"0e16af35936b356d5974b385528f6d9a873568eda614ed0e54be4494c2acdefd"
hex"0fae7f745efa5884dc82f1595b5c10d931ed6da07b5dc4bd6f99dd5318c7c2a8"
hex"21f41494c6685503d748b45672c65d059260bb205113882458c86f6da7ea3813"
hex"1ec11e919c80981c8a905161c48caab360994e8f31cfe88536c5ad8b2c360039"
hex"14f32ba1f584bafc3aa283f79d5d65e97a6a280c7c51cec192ee9e48d593a2be"
hex"0cec3b3618ebb60152be2987b910940e79a421d666a71764f25ded99159de90f"
hex"075a80d650b5c6f8a0b3261ae5ec4c5a1b53762f30c559aaa6c501e207c2514f"
hex"026c5d81cf4e6cbade3622323c4ee3b4568333e79504044d2ad4d2ba01abefc5"
hex"286bacad6fb92895c85483e837d7c821d3f7bd612ddd932c16d618455ee62a45"
hex"11a11b68cb7aa85f42325a3d0fa45e0887719f05c9cd472183b1c7c78eabd0ef"
hex"0674f14710e453bc1f9255babc8d2aeb3b2e321c68e6871b54c285e71456be4d"
hex"11bf8be1878d5dee6820ec405b079360da81da7b79f29aa54096ae195ea1108d"
hex"2a02d0a645dcfcafb2235e7f9ed37df27c3f7cbd5ad11ee831fa17cb36881d3f"
hex"1e2338342dcdeec5d3ebd82d4b767ed93989d9147ac711dd07d8aebac0962c20"
hex"174c21361611783b0dc90d87a6128cd4d7e427cca10db1d713495d8281ce3dac"
hex"22654673d8af40026294acb3c0e51f0f367576d83a554bd9ad72de06a796095e"
hex"08f410159146e32feb7a585ad437c4a48ff2109d7f74f58e709b66c292e1c690"
hex"160928e9343db00c99255a53ea3948b547d0bb68332069c2d5ca632156a53ac8"
hex"1b8e0ca895ea976f5d42029c964ea52d622388e90f947cba08b3924b470d84a0"
hex"2f21e5bcc52e6d794afbf44a0dcb938554c7c94fbde66c1b7965ebb2d266d6be"
hex"106d51a9231260949c37fcb7c8296c246566259829e98ef52683900a433ad7d7"
hex"1f0691902d412d4afe6e49f546ad03d739f42a159af9530d717c01a3e9bc86b7"
hex"26c15552cf455e161693ea7f01601fed166f79653153fb5beec9e8393c1efde5"
hex"0223f9fa8192ae6be752d29b47e8b8a75e2172fbd4c89cfec400a9766e1430a8"
hex"100341a4e94a5cfffa3c6cfa1be6ac3bf6b0c4fe578f8c99cc4f67e4d7bf4886"
hex"1a9194b8c654ebf4f3cbb607c8bff2ddebaff87b8bdec06745ad4ed802728a6f"
hex"0a7e869e75859fe47e51b3b79ad155670af4e6780d3edd3c13812db0197854d3"
hex"0ef4a576b0bef4d037549aa24282378e13b438fc9bf49efcfd65cf3aa8935d28"
hex"199af24c0e98e72c37d87bfb9386003c2a0192ccf015be777c4305d5eaaf0e81"
hex"06e7f2d897f05617580ccc132040f3b83f3fe1a496354b33f39d27b15fb2a5fe"
hex"07968d5b67877cf32da7858c85479a891164a19b1ddc26fdb2772d294addf3b6"
hex"1b4dc215f06081e276803f1650d67324801c0a4f48d4b4fac9f6650d2fcd901c"
hex"0c5a5f0969147d312118768cd73a762e53d3984088be93e46d8433d129939427"
hex"1a948b5fcbf5918fad1f3c69d9d58c2df72cd9a15ff57a35c86c9e5082ee4090"
hex"0532f7499522ad56592a815a303b33b648fe170e0c2f47d831255298200cd775"
hex"22cce52f921a79b56993baaa1854b37ea74caf7e6f2d957048fe5e5d1e536ce2"
hex"1ca9ca03dcd6b6539118fc036663b6deae0bdb0df258f18e23613f4e80bd5bca"
hex"2f7a2d324bace30583592592d82bb970ed33f9753d03dcd3b54a44af04a0f1c0"
hex"0f6008b6f13bcf8f2663e7392e2538406a7cdf15ad387e2eda92bb1de03f74f0"
hex"06e30762808351c935656ddd7ac3499a2b497991d02f54c178277fce024ce89b"
hex"1a087e883f78b0e1ecbc92dbe9d82258e4c91baac53d71836902953f8e5a6961"
hex"0d35fd011b125ac12fd1d7c655fbb7b1ebc9eb47008676c750907f7768f6d644"
hex"183a077e1a0a2dba1ffcf7e2a490859a5f60d5d04b3599506249b6d534848ba2"
hex"24230c1864237bf6dc8d6b3e40bb277c02dab92e86aa515aaa62b1ad496b8290"
hex"075a995ae152c5f9737f6848a2d5ef93a8e7809981a06834ef8b684390456011"
hex"2dcfb2766574efd57331146186055ee967cdd14d5efac43389a29605d13d561c"
hex"05a4a1353e53e1b5622a2200ee1fb2e1a8e224a8ec5554bb670bb377505cb615"
hex"064cb205829acdaf1af3d45060ffa3433c02d3a7ae61b66ece50967b97e1f04a"
hex"1af278018cfd4d2edc11dd77454ed0cc4ef3ca1dba5b0ba96bb2bdc43f1e8ef0"
hex"23e7488f10d910e129d466443a7adb99fad7ac0b0bb37a51c9d0f1b7c527a98d"
hex"29594b068af04ce6fe6b248aeb06051d6f66a39d9f3d13cdde5b343f31ec16ea"
hex"1e63fabe17ec748ba86bf78cd84029d23ca6c543ee800179dad25964fae41cca"
hex"2acc46fb9f4ba2abecc49ddb33c0314c7a940bfa021c07d44a73614599995ea1"
hex"0d520400f15c87d18376ebfc03c8ed06b9ed713a654a0024cf310b64175d1064"
hex"188ef3fd8a2134f2d4237dd7657f410ba5172ae081a6ca117dc21c7ffe71d6bf"
hex"06a71b093737f1ebae5924f2d5f47b8b14526c4831c50f9e9c7c032dc011e511"
hex"175921f58fb9fd90e2a1d2cf951ad606104a1676c9d2e6fc8fee6ea105239035"
hex"236859cb45dff68ffa2524619936a9cb457d2c0defe59b5863607e439369f316"
hex"28e0e101f6b62767f587d7dd8e0a4d4e32fbed3fc65c940d8aa8509bd826e33f"
hex"0158d4f5cd5085c6e4ae2fd1330a52435eb0745d54c7c8a6ad5b7a3cf5333a7a"
hex"05dfca18855acba1a5409f714a77297952277658af5e7d5e3a05bacd0b8005d1"
hex"1edb9f2871655c1418f9c7b5851dd8b1713d1f9d7d78c9b915b2d3ecb62e7569"
hex"10d33c3349ddff796b66b2c800a9fdf51d44235d14d74def1b2c112bf88647d0"
hex"0e55341297ed43dfa1312685a260ec51b42ed6c24e46b79900549fd023441282"
hex"0a1654efc1b702b4ffbcd21a9e0e3323a40e4a136bfa0cf81cf01bd89d433c56"
hex"148f5bd214818a2b59ed67a8d79e54a048f357989e2046b3e7b587dc4893896b"
hex"24d21716ac3c7fa8d8945b7b04479a0b397b8fe46e3424c0db7e1d7d824e40de"
hex"2830e9e432e9bc3e8dc48c98c12ee9081273f5be246347769d0a34e2f0e7ec3f"
hex"012e850e98e970f096522ef6f4f537529f296f7f3ec9ade921780c45fca74e57"
hex"1eb45ad2eccb950133aec7d4da6d03c301cebe782ba71e3533d5a0879bd6d0c7"
hex"1ce082f6108befc4c6133865cdf1b35a587868b99c36f59811bd3771a75c3753"
hex"21d1d3327b86bcb2514eac6f11a77867856f5a2cb24ff4f72f65742854baa0a3"
hex"072a1c2e8d55ba7a49807bbf09ad71e000d67b09bba8ea2ec6009086342753a7"
hex"1c9b7142435f0c29a9ad5549dcb9ac289104f48d39d4e196025268dfa1b6a255"
hex"00e7f5e830053d6bd9dbd5a2546f2b38820b7ec18b55b638f189c2cb86598288"
hex"0ab8a2d0b81f7a40ac8a6a8bed4df0643df2a4dd4606194c8508595e116f39f3"
hex"166b4f313145815f8ab8a09e6fac91e3cfa404438c8c430dda4d121eef70a9bc"
hex"0937ff264a4c22904c66b8466165d9302052f5687326970486277a54f458717b"
hex"23d014ce251eb044d74105355f1ae0b5dcdf0ef73fece10777328b86b0bb4d07"
hex"276c1c219fdc62892dd095536db3525c18d0409121171197c99bdd8a95eb2f5a"
hex"235d6ab6cef9830493b2c71bacd3782d67eeffacf4aed5bc07c2524203344cd3"
hex"1ad0bb296be4e478c61149c736ad66168c2d0ba4410e05513c1af1ebe644b076"
hex"0360722094dd4a26a16d8f12264b25accafdc6a3f55736f0de1e55dbdb28d02a"
hex"088b276813522c901c6ac134a1ffa00cd61276e1221bbd7ff377d1dba5e1beb1"
hex"243cd531b8f9fcb0cd9e8d9418c6e9306b89d96e0136eeaa66ebdb248bfd08f4"
hex"02a12915178a6e7d4a612dbc3a878db9ce7153bdc9130d3df7308c13b2e97fb0"
hex"05819bfdd569b0009e9bd1f9a41c7eb23ec33d8cd37d5d05b705b4511dc09f0e"
hex"05d2260582a4a391c8180a17189b98a53b831ebced724333194f2f6809571401"
hex"185017332cad227b54dca48915a4a78875967f8ed352fd96d5446946a64b4297"
hex"08192db4386fcba811f000733a6f28b929be4f9aa1d2140ccc3f9616f82f34cc"
hex"1281dc4a2838c70842102a997a6bc26a737209d42266e815738ec3943516e150"
hex"279e9dd39bd768a08ad9ceca41993b8e8408d025affd64237b5985ed9a37d52a"
hex"11bee6efbee9ff1ffe2f060d79bd751d43bfdec4d5fa5e323582f8d735f44c7b"
hex"1bb75e2ad0bf3e1f255a9e983428b9baa96cfae8bf71d1aa4d3a786235e21065"
hex"28941f264db478bce46c697bc574a5dc0b956d033eb29194de103a9a70bccdeb"
hex"19d5cfb9c2ace7ec529ea27438d22668f09c2acbdc9c099bbd5554a6f3ae145a"
hex"29fbde88fcb5e46ca563fad42cc7e26ddbdc0e655f88057a8a8f6e51354f74db"
hex"1dd99423b0d860b8ee34e292b4616f7c870094c265f52cc450f98a575323872e"
hex"2400a80de9d38f539c9b0b9580ccb9ae2e382f3092a657ff50a83ea03a4ba7d6"
hex"20a5b9553d48bdf8ff66139e723e6a1655823b62add790b62e605d90044bec0e"
hex"196df524c0987fe4b832add37f546b835dd259e7c03de7226a43a6a062b4e61c"
hex"2ea4e4d02236497c570aeac4ea1896e1e3a19343f6e50eadb273cb5a7becdad2"
hex"0800ed797700c5e269e0c1edf4947c65348976d4a67e16ee547c6c870c36e3d7"
hex"09df4796e7cc0d89f1fc722c7d967d4c0baa823f93f9c4d6c7913edd185bc11c"
hex"23442bab611ff64c7eb49ab07f32f52008673d80ba54e04bbc5c61ca1f0c3836"
hex"2f5baea6ca93f7a41762a2b4f5b6c31c4e0d140e422fbe379f2686522dccb035"
hex"288e0e05b537a48d5470921b9d724c26fb8d2900dc7d6f0741ba2c1a35138c17"
hex"24584003a84247aeb78b30e2d8fb4cf7147785647ddeb68a7df6a79ff84fb008"
hex"219b35214df5048253b823fcaf329a45a2ae7f959af6539ae7753e3554d28996"
hex"21795fa4312815b80472036b9f35c1495378f172c7157a9440e62ee46692ace6"
hex"1052d93c57b9902620b22e1c29b9106ad076f25f69fed4106736de133d72ecb7"
hex"1948cc83425a81e7f7c6486e0f08b4b412724759ce41f950d65fa5283c31a4c2"
hex"26769518d0ab71ba583b0022557cddceec3566637a6c1c519999523b44d953ba"
hex"13a68997032013798fc580d466367a6a04502f500f7dcf4c2e6e03e777484908"
hex"2668cc07461b1088861db6bf4c03528227a20d2b473e088aff34daa78be83800"
hex"0bed18cab0f02716c9ee5e68f2434a241e6784ba03ca69df0edd97dd72038b6c"
hex"2e04d93cc4f54309390fe572d6affd4cbb1989ddcf410fb476e3a8681656efaf"
hex"18b0b7c0a137e1454dd3ca510d220987b5aaa51124e157fa372ec6099a03a714"
hex"0354150d34ffc1b4ea2bcc2d705f72e2bfac4619f6ba35de7a5c08d5d7ec34b7"
hex"12c1195df5fc75284ebe217430760ab4862de0255f75dbe24f4fe60f90c3419d"
hex"03630b0da0e292c1088354c075dd1e00694fc14db1878a5cfacf2b7b797742e5"
hex"16d451a52d64de482f4bf60beb30fa565a4e29904042fe36288002bb84325d5a"
hex"0664003075b0ef9bfd1573f70b84f7b75ce76563169be92df533d5aeb47ffbe7"
hex"0b41ef4deb720d4d2fe7dc11b4483b3d0b226ef5cfd8ba9a4e46bea1018fbb64"
hex"298c7227e27ecf7291ff64ebbab81169202697e8e76afbe9fe1504243b4077b3"
hex"0cddb62d67cbb120c38a93a9d10466381bcc71a202ee0a75f1bf952ac1c61a00"
hex"1f251e0231fb968a4b39bd089704ca99438b645cfc29920e0f8f4988f77e9597"
hex"0ec2e8e1aa9376bd31702a93e024f654ed26a324bf744d53271e510a1f7cc2ff"
hex"1155f64822affa2c0d2fcd555aa5dad8698731fca61bd3a3d072cf33c1a8d9f8"
hex"15699cea496017d4bf9fcf96e5a384e7c105d2ac074571e600afd0e9b4e7e8b2"
hex"1e85323381cf7d3ba3431e64e894ce4d693f0c463b6d104dd33dedd7f1b9f081"
hex"004b64f1d7c848aa7c28d6a815b7ec34ff2bb76d2d8c25f93265ad8b20b7140b"
hex"0dd34779b2145df8b131bfb71ffed5c835d2b696299ed813bb472be2f3a880ea"
hex"0e1abda56faf0df6daf6b166c95c5edc97bac1f73d539a4e419e36cae7ee1d92"
hex"11c1659cf668bedf75fe21edb2ff2b1fc695bbd538c1331845f24839897b6200"
hex"21bdf685c361d30014b4396b358599cefdc9d5f3b464d67a54c9cb2978925710"
hex"1b7153446f1040fd153236c214b0b502ccb8c202c54ddfa527132962133d3988"
hex"19a23ee53b40796801a094627b87364921ae981e57f9f478ddb3fe9e3050dbf3"
hex"0c3793885e6423402d09a54736d9a0fab9f8e5edf858b7be1710b5ee2a46c8ae"
hex"1dad8846162762182f95a6360199cd0ccad756cea2e4fbb6f17bf7bb643cc6ea"
hex"0185b530295447254ce398130e4f1bac6a4135c8b9be462422bb6ed88d7d8156"
hex"0cc09061f82989f499b935c855c6446ee4c02f2b5ec74205bb2681a3d39cae95"
hex"1e785e3c3ce8c5a93d9a16f466e1df548f855d70d18613fe8dd861f3e4f486c6"
hex"04715136d512b998cab28f4cada627caf8da082e1b11e2438ae4f8ed17b259ec"
hex"16b21b75881cfd9f0ae30c2ebb472bcfafd4c09ff390f3a381e2098d9b057cf1"
hex"1ce1a91c61b317ca6f871105d6034a1ae73832671555965c2deeb24c5da51ce2"
hex"1382891a3df8d5ba54ddcbd4a9061a4574b0a4813c7d5fd49797bcd8ebbda4b6"
hex"28b1699345f2327ed7e3a35dbcac11e9704a2d019568e273b2ddbbdda61b96f1"
hex"1875cf03eaefd3c4a503d2499a9524ba9c8e8b1906511a4a85800ee21ad424b3"
hex"2d1b12c661616bf91e9616cf0dd1823f5e33799035dd1bcb92bbb8bd7b9fb5cd"
hex"1764a79b21973a65541bb9bf58bae57a63de6e20a207369f85b0ece77b1da388"
hex"22852209e2034dac637154e40c26004c7d2f8d6b0f2f649fe920d916a0b9608b"
hex"19bad11fd19291c1d7aba146796c8bc076303184293b05257a2e95aa1b35be93"
hex"017ede6c3a4fadb0c3b384fc1bb3ba2515ede2ddf470bbc5279817dccba8486f"
hex"20dc05e84fe2b3674dbf6cfbc4ea1888a95c385a682b198665ea24fe875f9182"
hex"0c6eb30738c6c686153cef7a45b97d5da153ed62a67f725af666c8f545414326"
hex"1b2e0303ea261450c0505cdcf6d8c5a1fe7c840287ff532d632de4cd4b899b07"
hex"25d247a3eaf394fba18917bc67089efdf773445090ab333538b9db6dd2aa34bc"
hex"0189a235ce7315920cc9633d5dc1c072cad0ebe0e95a07a0a7f6152bb14345c5"
hex"118ec9dfcdb51980db3cdbc0b4917ecc57a03dd0c8586ed23145fb8af86e64f9"
hex"2af16757fe4fb59efbf68b60493d51df19d06df73ff34828b9b0805b3a12512c"
hex"0649e85e611b0ea226cd5195e88f479ca348748e3aceb994208fdeca397d1c93"
hex"0d13a131ca0eb5a309eed385c046002c368bc570ea227bb02cc92be5e30820fd"
hex"2444558ba0ba9ab3e990299dc09f450bae4c4c92829a42c6943c451cc858e346"
hex"24e06233837107b33fc5cb27ac7baf78d48735d71cabebf68bbe8437ec15e57a"
hex"1f5903dfda34ef89110f00cc07959025cf325ee02f81046cc48105d3e5930bfc"
hex"20093ac8cbfca0030d78cc010018beb1b3e689d52956baa0c54ceaf858488e22"
hex"2ee9cc8d4c5e47162bf7386e4325e3a513e6d4f4458f5e01fc343e340124c0fd"
hex"1e2f5897ab3f2279bc761e37a8c20cf48a6bb27fb6da5bf0a5f67fca6ad93e1a"
hex"0e9ae19d75c9f500b45f68de80244090eb66f42dab81886a78645cb1bfb27931"
hex"0f78e982ab46a572920bb2e18383e1427da1df92db1f3665498c719a7af869d2"
hex"22c0107166bb0aa5b0885983712566f8e0b4471e69d88ebdb7d0173345a2cee8"
hex"0d8d1c4837d9de3b2d429fe96aa4f29fce440e52141ae4571cb1f1d7735af86c"
hex"07240e3b2aa1472c3c81dbc49bfb3e866b43f778158a3fd6641a773da5241474"
hex"037cb0fc644b2a88c90ee66cc4ddb962336347ccaecd1f4fa8eb567c04544655"
hex"11badee113262abf691cc75f28c0236812d76537940e970f4488fbce2ccb46e7"
hex"0e0fec7749cda728fb17b5b1ff968bd3b6433dd6dd6cc619e8ab2eae099ffb48"
hex"28f906c82568287d2256b56129e8b83944f9ee180627afbc9d510fdb7b392458"
hex"129e691ecb7b6fe77c01d70bf2628fe69e5f6e962f1029ce626a0d1888624145"
hex"2f8d1c3dddbd8cb59cbec15b623aa1309d12221f7c62d956815c924114ec8677"
hex"27db4f836bee8aa950940cc1732aa52d0e741ae355a8c3621ad068c043f77cff"
hex"2005b28ce7c5532ebf6b7e51d10c344c9a9b00836e4fc37f7eb1176d640c1906"
hex"0aa65efff54d1d497ece96910f6661001fb199d24c3cf997ce1e401788a382ac"
hex"17dbdc878bd81276bd23b35fe31d93f4d7cb65b722e65d58fe039d126524bb4b"
hex"26dadd32b90572e617c96576afcb2fcd9605b1d898b2366fd9a7cd0c23769da9"
hex"2e46b7b8c48234c4466b0be922a9525a8896b2d6cc9651b2f6f291cf2bd72b85"
hex"04523ff71405a30800020b61ac9a1e6b61ca68f9859f6bf1106f2a0fb66d5da3"
hex"05a3e48cdcb56d89222f017078cf35af105ab2b2e2cdb7adc3d71de732d2f220"
hex"08d6aec49dcb622b4b6033438a7b990f6e08a2d41909392a890d6ab2970c4fcb"
hex"2de53850b4466695b93e50172ffcc6ff47c882aa9444bb09652ee9f5a4f43e82"
hex"19963fd677971a8f8f1fe5d09bd27ad0676c59c6b99cc2c46d8a886716e16a0a"
hex"2b0e85311370de1c8442d4216cb8ccff3d36a6765addb8a188408eff04a488a6"
hex"30620acc22c938e923607f077ab953afc8412ab4cd325b812e18b36db9ea03c2"
hex"1a2fd212df4bf20f8e47cfe5c5285a3706f8ab9863ea128054bafa1fe192afc2"
hex"28dad5eeef0e864876e671e4a960e451d5cb11204eb0f7dedb1d1bea322aeaad"
hex"09ce122c5b6d149f0192436aeccf959f73db3968cbe69f6c2dc955c1a8644eff"
hex"00b33c6fe57db259f1f62f8df50692e8d8c36a22c77234e0d81dea745254adbf"
hex"2b5b16738d4e4e8f30d8073c01e34d8a784bc6b41ec8e2afa5c8d2347b145ed4"
hex"0ce970cfdbc28f9bb3195dd2fb274f9895a29a996aadbdaa4cee11b546cfdfdb"
hex"0822416fe28cab89c713f9ab14d28a3d22a7033c1ada634ce7928681369e9b61"
hex"15d6ee8f939ad0609d6eb842084c6ca07a055e83ae2d1a0109498f8b7ee9bbf0"
hex"24cd8f5ffaa9da4f482d9efec43b3e1c77e8eab2f44007269b14614c932ebdd0"
hex"2093e404029042625197d41362d07884031eb192890e18ac0b1e4237afe74020"
hex"06c7641b87a6aff30a7828f5a61b6b79949489013a23ae8f138bb6458a727980"
hex"11945363118e8c1728e09565b5ba8e9c322b281d50c81d9ff94a18612ac41f7e"
hex"1e0557a57f3b98074694b3bc37edf005f0129ba8ab7aeef1346dc1b94cc283ef"
hex"2be1c91a0c0747ed6b472d5a6103ca79844f6fac466e756e51599951b0ad1c8b"
hex"0f4dca5aaa01292e52a8a19a994dfb8ae96163872353ec485ccf1a2c6bf2b0a3"
hex"16be623636b1118ec0511c5c0aa630833c542c80ca87898c8d8a0c9c6432f920"
hex"0dfe1f87f83f760e4779993ebb87b600763a78a1e0022f2a3c083730c09930e2"
hex"185bb62bd0f1e1ec17991ed4246cbcadc9d17af7f85d2583b555b293b85cb3ba"
hex"103959d3005c53566ecf636f2d99b94266ae10f20d7941d94ab52b1e66c99a2a"
hex"24903de01d4c24236f18e0a72f1485b8e8e0eba5385dd2ccf3da36f42f29f29c"
hex"0b5c24e7cd6e5d92ca2e92b79c3cd608a0cbfe8b2940aca50db477bbbf676188"
hex"191656e0acf10df4d56c25255747160742762fc2d37e507e563b9c2b2158231c"
hex"24fda5b8762d28c2cb390432cce54693def5c5d8cf3f1a820bff33763673116e"
hex"0bb80254eea5b1630deb61300db47c2e3e9d43c0ae79ac6d8d8e5dacb30b421c"
hex"0e88460520595dd83aefc1ea925bc7b76faabbd79339a6862c8b8ae500e61ad9"
hex"244cffc3946a184f713d5239638a2e1d795aeee5ee445c9f9aab6409e735b88f"
hex"021554cd4ee080447d929f96556906a5504df942919385bc5e64cedbf2ae394d"
hex"27ace9d675fc4a5fbaa1418f1420ae54e57c8343a69843ac97c5ebcc81782032"
hex"0e5d6c9eda47e171d3f5a2edb52448f00acda78580b066fc588b39aa09638a85"
hex"0a2a0dcb9dd824a85d72255623c47308a71ac9c4b4f6bda9d273b1c1f88b629c"
hex"2d80cf2b46f3ac5285aad169e96b067b01de824253f4156311196ba6e4bc2104"
hex"0cf1b3cc75b68e63af37eb275714561af525bfbb82497cd4730215975d8a3cd6"
hex"1df43394141f318ee9571c1ed93198d282288da8bcb5b33e3c6f1e9269a76304"
hex"1064a0d92da154a1b43895e1833b6bac67e096996e0db5bc1447c30bbdcb5bc3"
hex"0253f837b9e9f89777891e37357c8654e1a5d5ea0262afd58136f1c1c969d395"
hex"0173e90b1dc6b589a510c7364be31128cacd0baf495fbb9161024b880c18e97e"
hex"2a3395c5515973f8ebbdf18b8fb573eb46a4e8fc88c2f159cc6be94c7aa35e0d"
hex"1be4bfc35f47cd93bee0e1adc16a0957f824a9e24f31a32c372e97b6a2f9a71d"
hex"147f33857a0febcfe896dc770f9a2a86a7089b55a396afffe4bb21d5321e1d7a"
hex"1230faf580d4ac8a0a7d8f3fcf457f63ab27cc54c5820739bf6437bc43eaecbb"
hex"2cbf7af588268ced22cad9f5a9254d95c5f47127387655ee36dc94d70d139296"
hex"0825e78b37cc551183bcb25b98363522c0a801206000c6ded60985718b46ab24"
hex"00ad0b22c9addd5f71d90a7578913c0da692d7bb9230c78d6f6273114df69d73"
hex"210957b327089cd3495ba001efc730c8f84d824fdf9448c277d02379b694d0bd"
hex"1a4012ba18c18efb60b94d7fb0fb750ba948a5c73e55ffe464ebf7acbd04fb81"
hex"24a0432f67e42bc4409433b85588fa6d16dc93432fb633ec1170e1de3d258e7e"
hex"287d7479896cec61832a3e7e5e257209609c6af97c315bb08473de27be705f83"
hex"1301c5336b7f37607888212f40b73bd0aea535cc7148be0f9cddeef1f397b8dc"
hex"1c1bd11368695d776b6d4f51d8b9a3ff091dc23b438ad3a8e00f435768543c95"
hex"20ed4fde81fe5b8cde1b1b005cc5a470003b8a12d74d4178d03351cfd620c9a4"
hex"1861979a4209de561feab4faa20b540fafe14a2f47815d1d6f756882735645e3"
hex"0f50fe0714b48545aad0aa47edf4cf85b77edef8420cadbb2ab055537896841d"
hex"009bb5d21aeb5bf32e1a0a2c6d2f7a0044c7bae33fa95f6264135534b5aa1a17"
hex"10398fce470a822d6e5bf4a572fc5aa091e664335a8f0e5f4b82ba80dbd25d8d"
hex"050d8d517b496e2067860366e267a33cceafe24e53584565511927952e43f160"
hex"218634834c0bd7a41a100548c68c54d6d47e30ba6841925ce0afeb3aea683856"
hex"00156ed62144c5a67173008b02d76e28126ca00a2819c0bb3eb4cc92c196f893"
hex"2b0efd5fccfbbd5f77198a0d800e01d63679db7ee5dc4213c4a1e82b47ce07ca"
hex"040540c023f617d52c1ccbd2d9e825d8f60a2f6cc6c7e0230f8c259659cdc082"
hex"11739844b03202e6faab271c897dfa7bef337a5b0672ab13ebe547f572a089fe"
hex"304aeed0c9d0c871f87128dbbb634322c5449164a13028e7f8e46ea7eaf5861a"
hex"1eb1cdadf95c5ae983ef642bfb86f103558afc4571483cb7585a00715580fdd8"
hex"06c4f741b7246e5655a575e85661422ec7b71e79535db2ab86ca6105124a2f14"
hex"28d9f82f7cf626d8bf29d5a074bf2e8a64a11e8b415465ec3366cc0e4af15eb0"
hex"0af3afb40024843ffe9126a492594cff90682e2c4afa7237bc901e70a081e68a"
hex"01e0d9ee7d4bfb5b07b2d9102409de25c281bbbdd10f2bbdb04adf4a2e467df3"
hex"108a7206cd0ab67ebc298481ce73bbff082a5434b01e26d8ec53ea69f7dddf6b"
hex"08619279b0aa0c5e4f7e0ba18b37dfcb3ab7762debd778e1675539e2023fe000"
hex"26df8a6518857f2cf15a8dd27eb05fd4854710b80ae479cc3dbb4963dbb61401"
hex"29ebe07739ab8b1f23d828751d533ea3630788c03835c7ade9de2fc725639be6"
hex"27448ecbcaa51b958aee7c6415c041b815de8940e427fe2152c77639f3c5e7db"
hex"0699e2a03a056f4a0323541d174c4d8c1d71a7b04c664aeea06aaf2f97849623"
hex"1f2c0d82e6d3dbd8f29d81dcba037666a0567564fed3a90a34f4c2a0864fe6a1"
hex"18678798666318a2f6c93fc93d788c258f01c5aa450b65f4927ba6308f7a99ab"
hex"0fae315f1aa96516b51b9a35b0bf04a303290f7a4b0f107434e88c9b897d8ef3"
hex"2dbea8b90191f27ec6c6a71c3b576ccc10b6945a2d651b526b36c86929d7dab3"
hex"195b1cd7777a95a1dccfab7ad95d9815d143fc6d86f974cd07417038811e143f"
hex"157f37337b54b492a344d0bdd2d2dfd3f27a74d529898ae3243bd532983b58d2"
hex"2337c69e87af024d6cb0d8f29c96ee48114d2e7b2c1535ad6b00e178977380bb"
hex"17569028d04252e77d46764676068c2e1d43bee814688c6881424210bee531ef"
hex"156682b6b037656dd8a82fd83ca1924074f752a207b2585ae4c9ea6f4c78c75d"
hex"1ed96542fc65f19260e0a755919c2e24659105c4c9df00ded15f93f442f6887c"
hex"12fadbd7a3c4fe425a3f30f0ddb2f375e471a373f27e43c8a494d9678e8e6093"
hex"1292950805f2f6b9f28b3182436c2a975dd365a59195dc4df585e87395c7c3a4"
hex"236a0085c40b7af8c4448e830057b33fe8df95a33647c37c55b225bd5f8b1c59"
hex"1db855703240e2f49d63e43c62f8c30b2a39b67bea6e9a9481146c046af276d6"
hex"11b6ed9c39e7cc8f66dc7f9b386ba00528af573aea6d008433d39881470fb564"
hex"29fde8616fbc9e483e1222d447832cb7bc58170c7ec86e8f4de9070e07eacaf6"
hex"08aaaf73c42c827990cd0c64687ae8cfa0b373da849a767ef3b63ca08327663a"
hex"0c85a554dd2ecef748e891cbd90386b5737d945603b56c887986f9a306d7de4b"
hex"18564645c2a77acd8cde744455ead6f28819282b59f662f7da89dec13b7623df"
hex"1b44633048278c6435e1449517b0235bc9f4c2cf39aaf34908726c3dd3a07a1b"
hex"29aa41f4a0e91cec6a4481c3280a94398f6ff1b0b07b39ab0e6668dde4383082"
hex"09a6e0f5ddbfbb30481e978e215f67468f31eaf930dca350f0fc53bee83f988b"
hex"04310eb11496a8955d0a91b51aead8dcd1703cdc4b0e7f2f4674ae3e588b595b"
hex"2a10a00f88b3abcfdb5d1c8dc9f8727d16373ae7fd05b239f7e5bc22909682d9"
hex"0901653987feda97752895523e956cffbcaa8d3f088d280cb19cf4d71f010a67"
hex"1d8b1d6227e7d72dbea884042ee1324bd31a5fbb7ed49b79f04e834245a552b5"
hex"157fdd0e905e98e890291c69bdcdf6307771876bb8288809b44e63bdc934710e"
hex"039909b2ef090b39137e7420aa7ef195656037f3482b4fc10e554341d68ec93d"
hex"2294fcb6a8d69542b31f9942a59c4f4503e188912dd1cff39640cc2217e1cc87"
hex"1865202fa3c02e817f2fcf395c446a3eecac5d97950a44ffe1e8d299e064e551"
hex"2aab2c1581a7dde08e01d9efd6c7fdc561b8c7e6fa75020b9534f2d3b35afc0b"
hex"0e550b117eb8b4be6223be3b32b3367819c099e5cee581ef44a2cc483073514b"
hex"0c317541eccfeb5a470e62a4a7183b1b22839e1a1c23bf58b6ee43d1fe87fa10"
hex"0c1bba8cab5dc7f68592841c2f9cee4e068d6791e55f4dd54edf7ecf336cef35"
hex"10f331f64e0bfe4a9226e772e395f992634eeb6219cc239dd5d8e03cbe1f4581"
hex"0bd16714d1d83b871586d6c721608db6150796aa7d942a7d6b7f37e1fe54d591"
hex"0ff184c75453103ce3e832ab21e3f16110827890bdeaef035641417fcb9b2c3c"
hex"142549f5302f25b6f4fd1abb1b586555dec7abb108c3d988222356f8845157a9"
hex"1a934f239cf4d919aa5a54e5706f63ccaedaa2a523aa75b6cb425fccd9b30276"
hex"0f63efea5bb28d9047c8ef3d06ef698f6eb8d69cc2968256b56ba2c6b1aa3250"
hex"07ccc054bd8707ae6a7e1136a7d734ca437bc91640e819bdb1161db6285b8482"
hex"09f695c935d12262fc81ea65c312cab7c604cebf8a7a8e32199912d3fc172f2d"
hex"0c39e4c9610d79d226d090265c7f961ce63aeab2e824e029ce1b89601913496a"
hex"0dc3486866c4ae74c9f7227bb2bc821fe2ea1a265a34e961cfe8e0548f0b2ff6"
hex"29b111d35a7ba7b41a2e65e5412dcceb796b31d0d87b9f1a4d24b028f2377d52"
hex"01ebd6d03eef5c45e78c52247c3282fcf64558e43ff15e1d39533389bd7a86f4"
hex"037518906b748ee732531e22b29338f4a4f42a0f216226011632c4fc7a592872"
hex"08482ad4d100cefeb5679cb8b4f6af5aa6b87f87d0a7815aebb30da0d927d3e6"
hex"13ba71984e13a4480217ff47b1055dbef0ed7333ff8403935f10785b4d212031"
hex"267080070a80b5f94ea5c4363d2d971036e8446f2c055ca49495145eca1ae9fe"
hex"2992670c4c90a20991d63058dd4a885b9ec25f2307e6dfb364be99f0ab596b56"
hex"0e91d00167f0fcdc484e4510cea659d39a58ea6d94188082c301d82be3a5beaa"
hex"06007fd0fb2de248dbc4fe010a14285eb1c67ab1035575cfe2c4a46e7169be02"
hex"24093f309708216779d4be610fbad6c37027359a6cd9af3253023c94bab25009"
hex"27dca5e53ccf2bcfabd9f056b2381845a855bf7947d600e6f85117b69e57ab64"
hex"124efae3d5bf327ab6ba6d4526a495aa613a1c141b4ccbe97dce4d2174af4975"
hex"1a32d049a2624f7c385673c88d7fea82a5c517b7fac655774c395cdce73099b6"
hex"0602b40c9255dbac3b084808ab31e76a1f050751bb6775dbada5d84691d27653"
hex"27ca9346b73ccb979a8d2890fd43bf51eedcd0a78af072f64ee41abb954bacfb"
hex"0b59bbaf1fcc4321f763a03b112189c055a31078afd0954b7d7ccf311615d3d0"
hex"1712fa34ac64c32e7ba17168f04876190ff32077be969a20cf83be9d04ecc5ba"
hex"2287f65a7cb3a473300d133636ba395a1cfe1b9cfbe68f106f114d46d453ac6e"
hex"058d32c610ee7b8e0025aa2f8fa532b3a6a45214fd7df4c35ad5112f545fbde3"
hex"14772040257c0366286283200970b7ee56d048cf3f6725fc8d9651a8234a6594"
hex"149de5e4a643c98e7261b75a27baeb89147605258f470c0291bf22880e6a9006"
hex"12c1e251dddced6445c3dcdcfcccc1c36736068f9e1f7bbc4063895df782b115"
hex"10427a865028d998dcea094cc2f8d0fa2efbd0040d0b118e4415dae71c92cfa3"
hex"1dced774d8572bfb42107f480682ff1c5ef95f657787a06997f53061d44cee6b"
hex"2033fe9a65b025cd7e27764e34562fbc6391cf8d31623f31b68f03d6a1d1404d"
hex"04b8c60cbb003fd65b2886da9263ee92021683e1af25189631d1725df8c16357"
hex"2d5f76b195591eca401fbd5d43e2992245ea9a4009a8ed600fcb0962ea5b845a"
hex"18cd73d9f8a31eab2560b9f00b08cc4517309f7100c34df4c3aeccbb3df8eb49"
hex"244478321b4748aef75677808a6a5d92a6964f298eb5e5337621398b0c1a4355"
hex"0700ca5f97215da057c3a4a16a260471ca887e12ab3a9fbaac6a61c67c38fb9b"
hex"1c8b2eec6c0535832e1ea214b890bcc72682c5bddb39f4ddf34500a5cb9a81aa"
hex"2d3d9f09f802a02b7324b79e9681debd2833f6238b22ae6622ba1a64e744f790"
hex"29e3aef42dc679892840c82352fa28d9140106d6c2ba6ada66fae52bff965eb4"
hex"0eb54e3e94c92cd24f6ec52eab577e80d8c8e9f2d39d6b8d69503967d9809fd2"
hex"1036bd833a94dd6a85559c519bb7a2769b6486b00d34996da228c08994f285b2"
hex"2f7362c30b976680185fcb2d6c1a9fc47ce47e77d3af5b773534e2ce7c2063dc"
hex"0f148ba271ab4c9b17837d44c14d231fe85b7644462249299a68b506bff87f4d"
hex"23eee74e2f9b8ee256ebaa6e03b545afa196f22ef7e96d7255f5e79bbb786c1c"
hex"165a455c205655a47926176b91f2d2c02ac5c00ad29b467bfdbd51b0768b3529"
hex"0d4bbf22a70348d22efdd5235eb6e682385197b4e17330c46c44ca6d5dfc6791"
hex"2841ddb730006e521446f952117b78effc601d10372438c4ba4f6e2608e9a510"
hex"21960d7a065af49c4c06053d32596d990c1a43cac1658dad807ae48de098e417"
hex"2a749e9fc0fea8a55e57cdb05166ad9692c00bf103ac30881c6ea8c6b86c244a"
hex"0792663fbe195bacf4bffe700777c5fb07db9bcf94404ce90d0ed74a50febf9e"
hex"2b4d7bb4c6dae168809b1e8687e2e668d2680f40733b7d6877b27eaaa2021daa"
hex"212f5c9650237c6013810fbf50f8c160395a487a5cd535ddcc85437383d7fd40"
hex"1e42318881baf153d5c6a0f3ae7c933daff9cd10c89c0f7d9c1253e65995e7af"
hex"082ba05d83761cb163b4ca9d55e5dbb43c74bf3f456988438da2b3e62a90097a"
hex"188bb1d3cfb110267f28a328777328ee715c575923e5517216a551b7e4bca464"
hex"26c9def697692dbd245316df1b3d3ebc23d2e7f26282bb8c3c77383b633d1fee"
hex"09e269116a30414bd9701c5e0878caadf29773b5e4c010a7f519d6c8ed4ab64a"
hex"0b0dd617d9c5b993d32b538129fa4404c7371453aec2448ad60caedef2521774"
hex"2955e9b0087cc084f3750b6474cf9ccc1b91b93088093fb9b65512bb41c7fe13"
hex"25742cb05d49c540c0db2fe8cecba3202fa75c3652f8a0632c901284718de2f0"
hex"197e4469bc4e63f957318e61dfc0b47f3612c833faa62fbbc758bea7747a919c"
hex"10434862eebeac7e95316632cb2a81e786f3148d551e82d4b5f3952dac0e84a8"
hex"1a35b2d833ae99e441f064acd0efe3ec75d0180f0dc898edb2ec4e6104c43d91"
hex"21095529dcc976329670baf3bc91051208b4d62984741144c2795189811c35d4"
hex"1cb3ed4bbd682aa625880beac8855c5fea04d41e00eab4f0d06318c229f650e1"
hex"0fdb194388dbc4bbbe4e95fd302d9cf15deba158f7c686da98f0c51b56a9c3bf"
hex"2355c510225e1b58ab2af9314c08bd8adff1ada7c9a457c0c1deb47b814f2c2f"
hex"2c04d7711fd02ba586d4a50ad99a1723e5bf2916b4b5ecba863947a98fbbbb30"
hex"0bbfceff43f6717beb8ca8fcefb59c672661fb46da69df22870a4c52fa4cd0f2"
hex"2bcca13d376d46c173fc2901c265dc09ad688e67b9726845e03944ee966ec01b"
hex"285bd066f7c5357304cec840041d33e776badbda4e0007a505004e070b9520ed"
hex"0794a82f878b218f741d0cb293956b5273b429c885d893d1113d73aa26c1d423"
hex"271b72ec18a3db9d3d0e838edd70c2ce3869f8dfa7a2990839b8dd9e1172e87b"
hex"0a636a0eaaf2172cf943d025179ff1617471d89f89258b34a3bbca00641a9cd8"
hex"1a528d6c2a802448da3ad3d59f777313c16a671482e39b8cb7da9ac35c1ff2d8"
hex"18c053d772d3b5a8a648244ccc209c808ebe141ba2f9d5650d0da14819aadde1"
hex"1048336a6121c302669d43eec43639872901bf281af7a1688aa3d3928ebdd907"
hex"12c4211198d7728995d57f5bcc090cf7beca8045d513deb1b175ebb36796f0e4"
hex"1834db39abc7b5ecd1a514dcb9228530e81361aea5811ca208a650daf968e6d8"
hex"10ec1c14ddd45f0d5cc72b4bb6c9b567381cd3f8ff34d9591c48f845ea50846b"
hex"056e828c137df3632d6225d8c3c7df355ea62f2e0d113a7e36852b6764afb9f1"
hex"1759ab5b4dc7063a18dd2b491a4a3d073bfdf8f4d33df3f339a83e3ba2953d7f"
hex"09876c8f4e48e48b158ea3f41eb7f19716f44512bf7cdaaeb3915798ce22707b"
hex"1a45579944f3cb644003ac2430ac63799964bce8f0125b487e5e84f986f46a83"
hex"14921030ad6e51af6e9a654d191b8562e8acab6542844de111650de2ce37659f"
hex"29baa8a03a66a40d48856ec10f47f554e884258e4eff26ce0f15c6b5171f9581"
hex"2f14a2b03d6b68f4bf5be1acb77702105951d5f13a423c1b21960b0c129fa99d"
hex"1a8dc9e0aba8f76e0f8bf6db5523758d5ec321d0857a2df1134b5dae2faccf3b"
hex"2373925e13c17f70c80783a3664e984c082f251bbe3c4698dff5daf3c70e5fdf"
hex"14c66f792e18c3133a0ec195583065986f5d8f297f5750ed78aee7b7fb6efaa1"
hex"1546abb4feb014cf7206953bcb52e5f16ac8d232723683674bc02854efa9c811"
hex"2dd9d7b31522a6b7fb653afd18e987a926fbd5377b5b0e415cf2614bdf0c2635"
hex"0102b6d8a26892985e76fd744ab01d06b524f57d634fc0b69a5d91355398d6ac"
hex"1ec5b7588982ece0b103edde74a6f327e6ccf694bc534195fe0effc7483f13a1"
hex"2b278acb099ad84fbc96b27d36269ba06a660e2bc9093059a2acb1998cf3f1fe"
hex"129253e64f00669a4cf7480180edd5c242544581499b9a233f0ce088acf1e4db"
hex"14f35ce5d343461157dbe0adb07355d95d2cd5aa6dba222b6a702af1e325d2bc"
hex"2d106ec5d71809dff7aec68762661bdfd5dbfe456cba5a7c150c73da2510f752"
hex"16ed7e6f631af32c7e9c7884b0ab0cf71a834ddc4c825748eb5d35451d809240"
hex"2dd68235d74c633a111bd167dec9a6371b137ae89530106a928c87743b38be3d"
hex"0076cc22cae0c2544d7e6d49cb00182253dab5dfcf6cbdb378f56b0714b9d4bf"
hex"2af75f56bee1cdbf00f1a0af44ee6ca3d7f8b3b42d38f87bf1da869240dc6477"
hex"092f4b09a0af31220825e29d275eeb08977e8d3a6a934cc16a6d562b2eca001a"
hex"04cb8d5ffe9fe85b21a785e261721288e9b5b75b400545a31d0d53270608b104"
hex"08287f21c644121d27ec9aa9f50ccbce17e7ebe37a9858da78ca1d207bd9d637"
hex"08d64375d1c8b872172ed0e50612b60c4b049e807f23d6fa8f4e61e06d52047a"
hex"034d11c3fb63ed48fc75af072a1084b3d0982b796c9dbb70c295e4c938688dd6"
hex"03457e18852f8480e869f8aa0665890d85a78c5458b77f682cbde6b7954b55d8"
hex"2cdc590f35d097cd61fc65b0dbaac9cd05916c807ec0e318de09c55d6facb637"
hex"0f2b077d67767da3df753109cb25329348253b3bb8a474b8f2383d269e7af7d3"
hex"1188362ee1c47b51ae57ee87cdc133d212b205f43ad871011e82684b3251a168"
hex"17b80922192c7ef6e95042838827e749bc017d1a96c6e69f4d945f6a40c80678"
hex"09380df1270bf5638a0dd4f2c7b7af4a5798b4280a4c98abd97c99272b34488d"
hex"055c100b6e332bb5d2bf6ba8f3f5945bd877926df3eaab055c5d42be090db0bf"
hex"02cc36716e8608d8ddd908e019707e77d50ecaae8f83a61fac66303fe0d98038"
hex"1913d591367d4749326ea822b20c1f015974fcd5ec6d659aedeac7b56f6fb789"
hex"1706e619141f6b4a93840023bb2342e759da6438e07ed974a5f1e3d506144c96"
hex"0bbe067b718cb861fe927716cba85cfc466eed0e9d2c1067bc7f9e356bc5d23c"
hex"1094541933220c2bef5ec7afe91782ec245208d58f93a08ec25eb59710a73623"
hex"03daf04d7a256119a10ba5f6653564dff54f8eb78577360ac477abab5ce87bf7"
hex"0cce5000e4686fab8ca621f1c65dda94eb8b5892b1aff79a9a5eb0a2e65efd53"
hex"14e0969768884cab782cafd4b81555a818559c4835fb6821ec46fd08ea418ac6"
hex"1ff343732becbc72450b2faedef7112b951edf2ee03bebe4b71365755e6d5518"
hex"10e06fbbc2176bff93433750bcbfec05aea120f193a1e4c5bf5993e098916f96";
hex"15fd0f19bff5521edae5f6d895f4730c241ccc3d415eef6c9485d21914188c1d"
hex"2446d537b3dbf1feba740b7657dc394b17e890cc1db8c77a1df7ddbf00c956cc"
hex"0e8e971b94bc8945665a5a61d013e62406abdad7c304284ab3981bb120ddf221"
hex"2bc9b3a8075e8affb419233bae1329c8b5a36dd5849d426b61896d79e5ace369"
hex"2fad2a9783fc2ba49001eacd3a33e34c302753636d3c46357636dae6c8b2024b"
hex"19c6002888dcd3e33699c10634a806d2aae224c3d7e59cec5a9b8719b066d264"
hex"0c3bc3c927533404b7618b19082e24eb2ca334e7bf9dceb958bd3551e9fe7f57"
hex"270e9bcc58594f6192a2b99d2846f622de39b5937b2a7323cc45e25fcb2093d0"
hex"1e7d1a66aaffd026340c02261fd998650c044a8b0c7fd711e04213a1cd2cd351"
hex"2424444f3b3621df8c36b258f3554a9c5e2a21a5331717c8aba346c7ac63c976"
hex"16e036c1a88f983c82227849b01847266a1175919ac332c27799549ce18d36ee"
hex"0b0ca3b0483c8e42c91944242fc36b40ca910518f9d85a25be8e4a7ef43663ad"
hex"110cf5e0d819a05a811f7a0c166628530ba6f6d353e8e6a433c064d6fadf060c"
hex"19bce756e115841dd94ff44541d5ad78130187d67f3c560c2a590bd093765709"
hex"09257a78bf2bdbaec4a20392ebaef666111a0013e0d145e3b8538bf21c631b78"
hex"054754fba6cbe53da1b0e9c8e6694c94e5c5784962cd792416d2e2a69c666d20"
hex"1afd103f745dc8bd51a5433a7ac8419f1dedaafbcadd19048e9009d4c6241613"
hex"245cd94a309bfb79ae8f5255803fc1fbdb80bb78ac6d5f68dd031a464a87ebf4"
hex"14faebe5560369ec0b8807a88ecfa006f7f9795caf1bfcfe261555534cf4e78d"
hex"0c962615261ca9c1f65cd755e00bc013abf1533a12e81b80b32fc41b0d1fa86d"
hex"2792793df783c78305175c60e000c53fd96ee07ceb78e470a6c64a1b477c5534"
hex"2096d8bc28b6870f36fc685e6509823ed594339011cb6dde0e8f8d7cc1cc582e"
hex"109542c42e7879d5f2509059905ece1bd8860e7c820343aa1b30461df91eae95"
hex"1eea6862ae37a2a4392c5801737849adb507f0a3137699241517a3f1ebbb3a48"
hex"093d3e06748b6704617f4cffeeab1a9c5b788923f7fe09a498749dd9ac9f3253"
hex"2e5f917fa4593965b59fbd36e7644390ba01391b8379a4a204c1c29fd1d17cde"
hex"2a0dccfc2e6d40de5187062a63a944a907d0d7bb6eb30533a3454057778ed3af"
hex"1b8f89159c77020c893f3cb7a2a4cc3085dafdab413391192963d2d6f8a71b7d"
hex"241b04a42762b5922f9e96652279d739459c63ba99921d36047868be961392e4"
hex"1f9a885deeb4ea645ceddc1b496d41a8b765b09c9fa5dd267644335f50b78827"
hex"0903ca28b792a69f59d7499ed7e261840c1e20951bf0036cd34057859ea07c98"
hex"0cf286f5af05fa35173dcabd94e3c7fb591b74607d58c397469cf09759e89b56"
hex"1a465001f19b05dc38a491b248c97ec7920c03da29e69d805df6dae9ad29c6b8"
hex"0ed2c6a0818f6e04bd3aa8e1a17b0d67c6815feeb8bfe9b3a575bde437ab7114"
hex"1cb929c4998d91a32baae52fc164831ff6bd12474cd8c91189b69f1e8cdb7164"
hex"0c5be902277c48337d1db6b1fb81c89e8689cb10b7ee6af8b9fc5975a730f6eb"
hex"2dd837a46f2ba2ee8ea9442a9eebd87ed57f594f044c7860b39595eae6ce4d0e"
hex"119bc8b722e52ff60236302b2e6f4a139f15e63aa0641ae765f3e71c32fb759d"
hex"25214f618153620b583fbd2abc2eef9a26789f3b5296e90551877a37d362dc95"
hex"013c611347b3d133ed9045be2c36f8689a0120c4078d12d8cd28c006bc61dda2"
hex"2f0a9559eca7cc75db51c369b05e74c952d5a8ae39b06ed01c8698f4d74d58dc"
hex"0fee282026bc113cc251580beab7bfbddf2209056fce08c4e356b1a06f1bc944"
hex"14393956732c8d80c3f60ae0a275b3968c22c40e9054b3ad662671f4326f208e"
hex"1ce66ceaedec3b13ac33cf1dacc63e7e68e3e7fdee08e91a54075cc0758a805a"
hex"1abc1b6362a1a276f723f806d4a51d3b7ab592ac8f39e198cb5efcceaf0e48c1"
hex"23f70ead154fd51f42a3de0ac2b61621f01a8b0899f46d2d9da1a8d620b88e98"
hex"28358bc8e9b03c31481e07909d86cc8386494aa0c6b1fddb6e83911200d2d5bf"
hex"21309d93ca7e97b55d43c9396f92716ff1ad99b73dc929c566de6c6c721bd048"
hex"08666e4182c159d4cfd305e1f6f5cfe4ce9243ab5388c2a5a0ab74b600e4bd5e"
hex"28cfb007611bda022f417d399841a00e543b14076672113b21e9bdf4942eb3fc"
hex"1281dff49430dbc9d0748814312f5356a1024539516ae19e8b6eb6379421cc83"
hex"243dc2b640abc1728422276ba4ad24cab39fc7d1ef6cf3d82fe82c9f89efaa7b"
hex"005cff4d9542e3250c36bf32561e274f8fa928dd3a8d11f4f76c36a4cdeb5e64"
hex"20b886f89543b54f0403091d51cd88895fbd55aea86d19db8b89cfd55255f803"
hex"0c0aa8002fb14fb9b4feda737c210d4289d62a014e4bdbf708ad21b53ef62d96"
hex"25e79b70d1ee02eb3f6c25bfaa7b9a4e1566b0fa70c6c0ca072191897838a360"
hex"27218c7dc6af590ab65620d6f31dd4cbdf1eb86058151118bbdb80b8d96d0d80"
hex"053653ac15a867afa2931d75116318a810d5512d871b71f4654c86acabde8c91"
hex"1c48420d5581f37e60b15a6dfe652b9ce46e2de3414d252b18df5b1b8df2a818"
hex"21fbada5ab40ee0640b13756b26a7fcfeb5f81de884fbb889f3ccba3fd64cce7"
hex"0d6670f5a24582a747e1d1ae1e0e8da63d7d202210d96dd5078fa58eccd43e36"
hex"1fe26476a17c1dda8d2d1b630ccd263ecd5644529afc3e2973f6961ff3f87126"
hex"27464f05a8ebb85e8e465599614ced7bec41fcda74ec9f51ae39c392672bc724"
hex"2ab9a6d1c669a478ceb584e3bc6e1635e3202ec53cbb6f3cc42bbfd7659607c0"
hex"0dd63e17922e2e955c38d47347fd269336d27cb9b9c7a3218c3808507bbc994d"
hex"19593a3350d5604598530c93362e2836f90f7daa675f73b40bc04d67b0625e3d"
hex"1682034112be41166846a800dec3f04dc45f7878bd2c5493e443f44efc5c08af"
hex"0828e223ee37c2d4dfa133c8df747c3ddd415da67e911f2f5cb609a58df64bd0"
hex"127bfd549e5e8dcf4b22291715f2ad5668cd6c711c2a39c3ffebe93243df40b0"
hex"0dc2c61595d602f4f7b03af6a919263956b5943cb3f5f890bde70de733623387"
hex"1eecc3f4d0cf71749bb70475ee20a3d479719fcb7c7bea429059f6c1d18dd57e"
hex"2d94c63811c0f21889beeecc4d7797f0fa87f0cd40fb84ac72f5537942b5bd7a"
hex"07573806d926b6e92313c06ba464ac035746e0dc96b3d40db4020f72dbbf7153"
hex"06fdd2c03d7f271f2969d465c7e86763751e29fa622a2715694c534b5e171b25"
hex"19546a1616aca8f207e875ebf37977f96c1dfa32ddf16d7eaded9047ab15142f"
hex"1953bcaad2e145cb2a759cdd65eb7cf493b281b71b0faa6010e30a38b5127519"
hex"2fdb1ef3113503a9db688b32a0b79f3a8125d7967b3962373fb886332a135f77"
hex"06d774b685f236c190a046ec7fc6147a84260794c543230c4d3f90cc091d0e60"
hex"2cb5b76f44713c49cc24cb3e1715ba081787296b94dbe25ab57742ebf6553df4"
hex"05159d91bd6a0a9c639b0cc27cc39dae457f45225c4bb554264af8e229a52524"
hex"115001b9e8d8b1463cd86a016c3610f87fc2a10f63bdfcc00cfa99353a4c1a52"
hex"125537cf6072615205c38045b8ad31d155bdd8acf80c7dc627a7506e642a177c"
hex"2e83916c6303325ed9513361098830271102ac5dbf285e2645915eeda77a5693"
hex"1ce67dd1edcaac1b03358eb6b2ad3780bd1cd201b91d4bb2e603e01279351fd1"
hex"26e90bd7b6f903b9e517a0f77a7e4048033cb873b1da8cf190080e75cd1dfd6b"
hex"1cf426585573250eb3432a5e80fc194c307c58c814ac37bde84125a5aef222a7"
hex"10fe5c50f8fe71b1fb44251e5dcc90bd0d64844451329dcb49e241585406ef8b"
hex"0c273841cf7228666b689b24a7022bc402815f77f71b43c1862f64853b6a47ca"
hex"1255c43af69be48744c759de67f363030b809ea5be5de707545d1f29dbfcd272"
hex"110b2f7ac7d7b3f94893762fca13700b74cec691bc57d216ba04e992bd0dc947"
hex"0652c5b2ba7b972dd68bf8c271556b57ad4521c067a072d75ee09268562cea9d"
hex"1e6db4b3e0185f2add0d49d60e16168c2f3ea91e2cb05678f2c9d9abe232b340"
hex"0a96b6eed42e7041c98baa152253971225378ac4cd9589c80cea28c06b570678"
hex"2650ef83382c54ccfabafaec8096c519ab5670c7d4dea2535c64db2b7dfcb553"
hex"1664dbfaf0f45d6ce2782683f87e6c9e9b7176f08511ac1663869adf9337eef0"
hex"212ae8907761700bdea4b480f20f788dd08ca4126dcf4ea462e890f302634476"
hex"0e50a74cf13a9f5c3eac33a38c6f9e8d3c2638bee309a4180afd6097c52766e4"
hex"1377037809e690222f9afca6e1ee39ba95846bbe912379a938f6ffcb493f5cbc"
hex"094a2af179f583a4155dc7f2b191c036df4330c0eb75e1e70d2487431bb4b51f"
hex"2b1bc223925afd7f4f7cdd038d39183e1364d1665dcb17cfc2e30da2edbda339"
hex"019a6052e1c5cf66ec396956467e791a97506bb3291d1a149d863d9cc25d660d"
hex"1f709b744826f4ce03d2ae0eb2a86613bc33b2bbed5e9ac6198f7e8df1afa8b2"
hex"10cee567471a2b01cfa286f3095713ffe5855c06f17158e33e9ebfdc1c792a88"
hex"239ea34b3e8a5d1d26599fcf453537fb16a91f9520317a01c7de1bb5a768d725"
hex"09b3a1bb0c0be55876c4b91957b7e86412654bf272b7b9c52f2217e9713c7dcc"
hex"2cea70065cb1bf0b68c86a3592a5134384be8b10de004c31233b783577694dc6"
hex"13aa1864f9d5017a46cb107be441f821a85315b79f39968d6407f343a2c61998"
hex"0005f278bae49a9a15a54132c50388e69f4211ceddee99195f07736b502fadee"
hex"0302a786d79c25a2be297edd39eaee413dc553146ff7d83bbbb8bc71447b6605"
hex"2eaf36a4dae40401cfa571b55ad8b5fbced37e67860085bc6afc5412d809ce8a"
hex"166d04b67debdf8e674bd6074bf67031d3b4c558647dc4a3c5443eba23086683"
hex"232f97fa7f391323e066175feb3572aed60c343c3e3c11ed309c00ffa29cdd37"
hex"08f1791a609f8714b38f03cfeeb1a149adf524a946a397191b0986869458bb8a"
hex"20e9ad3d16db1563e84154a169db5e81d0117d4914800772d4bf624317e32b36"
hex"17a525ede8962fdfd05af9ba5ef109bd2f5de02524454aa25c696b7c6fb0757d"
hex"0d71a275a14cfaa4f987cf2d2552add13d13fc7141c544a0ab457103e4b2d502"
hex"1ff842cd59778fb6c75d197511f3158ecac8fafd21db5fa652725be434580ff9"
hex"21095e6eefdda8f7648172826e435e08a93109b1f040d88ec1b01ce3e2dfa592"
hex"02746d05612699c335d4031f388561fa2c6b3a4c224df74140c58c5dd7391459"
hex"182427fdf7ec0b8c5a7003e3ae6c19d8da47804a75d62ba4a1f8ce1835d7eb66"
hex"0dcfad648630a6037241a73af244b1612eb375d852712a10182e1339d176471f"
hex"24611b2e7aad1a1fba1f1eb3193a87a0261e98dbe77fb30944edc6ef5726acda"
hex"2df51df9c66f51695783648873bc167bc8199afdcf98a6a39dfc14933634cc25"
hex"00ba85a4d757b2bb24f2686c8fc2b20d23f68ecc5bbd889d70db8222f9c94eeb"
hex"2a615fc377bd707e1d297df70f60076d184ea30144439d2a02827ccc4b74d6d5"
hex"083ff5f9b4474040e1db95e7dd4ac08bc49f0df5e04b1601e531087a66e1a9a0"
hex"300192ff2b9358b371328362eab85f10b3b256562986b0222f90fde6285b2031"
hex"2b9b6d2f72c215474b76c58be1bc8113aed21efc4bfeb76d432fadd1a143ae55"
hex"1afc92793b1e3c7bc0fff4d51b34c751d6fd4f0b684fd36a5eb31f2e7d59bd08"
hex"27a4788df73ad8b0a3db6dd0366131faff0cf443fdbe689b1811275524fe4f5b"
hex"26e306f7f4400a8b466a46f73b1bb30628e8f53ae183179a89ea09bcab1abe8c"
hex"1903a292e81db108e9af23cd1c7249087803195ef86af9d7aef43f671bbe28d5"
hex"05c92b5167e06202018a4b1c482dde448604793a2b6d734c3a59f599b457794f"
hex"109890a7f2fcb50131c7e510faf117da23344b6e50403670b103e8b1b0fea27f"
hex"1fb6977c76473f7a1d148b69a5526768ac7032ce91f0e138973b3e4d30745fdf"
hex"22846c8fc4704252020b4a141726ef713f5eda605ded818ee69d101490d5a8b6"
hex"079b1bc515838f1ad835d87623adef3b1673ca9735ab72d8fc938e206a524e58"
hex"20d47a675b313cd4b857527f3e6ddd2b5646e5fd9f206aad5bcfaae6cb0958e6"
hex"064e79c61f6d53a00688e7f217a0c8579ba3daf9d4df5dec16f013a124413f15"
hex"2383c6f75c1a392e6e1375277f1130c2274d8668773addb783207cf58cf4c0b6"
hex"0f693e2f20b43eac0691b48a00fadf42143af8e21b080d41d1e71c8a02142da7"
hex"264fba8810c9e1c00b512aab1d355bd7ccab52089768376d8a925cf1c3f927a1"
hex"01c6986291edd61bf9888d6bbc0d0f802bbc4186a811b8107fcf306a557f0af6"
hex"26cdd05df967801d477b1c344754c15f7a30b0bd75bb98985a0c2fff9ec80c06"
hex"0c5e61cdfabe2eb8188f70cac4d7b7cdeed9b964792d7dfb6fc0b228a7270e54"
hex"2a586a34c5b50461b05614cbf3ce228c130522513793ec263f9afa96e23f4e5a"
hex"25ccf30168e9ef4fd1cb902c95ca8d67a13580dd07994094b221708f8c7d6797"
hex"107dfa97fd9047fae9cf80f48b206884949b324e4ab03212f3298c4818987696"
hex"1cff7a1fcb4f40c410ceb353cb8ab907a0f6b2821dbf82766ec762967ba23944"
hex"20b8533e0ab744d5db86e30a3e73a80bf621a2b5d8555b0fc416389d5cf53265"
hex"0c9d9b203b72e7887fbc30ac7978146860ea4aa1ff0d96dca2c65666304cacbb"
hex"1b84d4afa11231f3a4a3c62a0029a39f5ea31d907a92070494990427e7ca6f88"
hex"14107581ede64e20dce54fffbc6443cec3ca1cb0054c5142187cd21bcb166b79"
hex"16737e84151e0282876e43177c3830524e3b6ac2eab243a067de3319f8d0b8b4"
hex"2037cd61979b667fb80288588d2b095f0c4c34312d7c75a074beda537909cfa1"
hex"04afc04e3f13c2d80fcfa1aa6e946499406ce541ca84527b75dd29881c09e6a1"
hex"20a42ab93cae3bb2a7ac65c4952fcafa2b58f3d3c3b292246e292dc1d10ead44"
hex"2294e0ac633d4e59ac74082946c67653dfd3b17220d05953f214328d778d6256"
hex"019e150e3d992f5175dd609d7b7468a978428a5bbf291b77f900d1c682cba1bf"
hex"2c04f3db93c0870db5a439e9ff0f2ac65d19edda31f6bf64e9f827516b3f68e7"
hex"2e6c4ce5c33d2f1d00d4c7c691e5d39dfea1c0eb590de777e5fe64365545646f"
hex"01879179e76aed29e2392a6df0ac85ea6a285e0d3a1112e8593c23c3e33df5a2"
hex"086975bbb71f10a74a76f43bcb0035481860c6478f23fe914df449b50e56c492"
hex"2c6feb5c47ad32b1054c98e31df1659881f884939536961bedeff8cfbb6e1282"
hex"0549855c647dcdf03d05c6a490d5541098d6d83bae7da0112a822e0abcece250"
hex"20f9c4e3fcfa0d305a923e4fb0d9ef583cb141debfeb931c909ef1d4fdf6eac9"
hex"05a3b3663e889c49eb5920e769bbfe9f9dfc905554300bb2b4285c6a5889b274"
hex"1f9e528d112bd8a059eaa510cbd9a7458598d27775bcf6d851a0d359ebb81dec"
hex"15608ad6b67162915e05d6af1ba4b32eb4693f775ffc0a66485c3e5617dd37e0"
hex"1bd2e26efa4fb0a842e03142af573fa9c16623542451b3e4e0af1970cd7e2b0a"
hex"2b417cad2430c3018499a10488fedf9e5399ce6cf93819469c802bed6386d7b9"
hex"230d363d8bacdd978d08dfbc44f1c3bbd3b2bc1e2aabc5c3759db87f8f895eab"
hex"2f83002ed31eaca2531766a09552eb1667a9419192ca335b08d93693e5584abc"
hex"0feccdb53345bdae7349c42b119570c762f1f5497eaf898e4ba2d378d9d8d20d"
hex"18d01d38cb6ac78d93961c1ecbfaadd4b0cf999b972ce4900cee9faacdf8298a"
hex"1f31cefa55f5f930d149b63b7a33e385a688aa8a4ff3ff8d88e501dd7466b475"
hex"1a02607dc91fd27ebb066b51f8dca8d64dec062d3f8ea6a3e2859d139c17e9f2"
hex"25bce5f60cf5c72fe58b511983c067ecab88071786feb4f6cf83e1b5ac35878e"
hex"199ea7d2467ea66b53853f7ba20a91bb44a4a5f621404375051cbac31997a366"
hex"1641e4ce35beb44e3d00fd9b7a3bd47e118fcb21c62281b148dfe4097c147e11"
hex"227cf6075dbc7987ebce58711ed50e2b6a94c1478db414a834345cb2b5c21cb5"
hex"252bdf93e4bc24d639e1ebd80550001fa9aa1e7d6abcba326c2b2feade8fd8d9"
hex"073103523d7b0ce327314d3474aa6b77824a75862d0cbaa5af6e1d2cead16b9f"
hex"050f7090cc1ece4b5217a0419fe3066d81ea2e19dc6c5410c770740c16875066"
hex"2a4801a2483187073a17cd04890165ff19b24180cc8ed16870cfe0f2ccd82183"
hex"24e27258b0e61cf13892a8b7abb13e0cc19faff40bbdd680a389f4918f63d9e2"
hex"0f03cbd30fb82d7807479517b4e29b3da4950b96a023a331e52c721c66f5e229"
hex"2bb6d910684eb13c86f172f66f59a093f8a002333c8767bd594ceb63e9c6a2c4"
hex"1f32b4847858f72bc734df639c032604ae71ff65afbbdcf42acc7ec195f3a39c"
hex"2a0f1adf6230de3995bce023cdfc6af1e85d9121f84de4a34b9c7fc4ff920c76"
hex"17fa977e81dac861e637d8d9e4636487afa55618f35f7455af8321f8d6d50d6e"
hex"09f9221e154ad381a5b58d1c8771be1f47f3aae8a9769151cd84c1434fabcb9b"
hex"0ea204dbfbd3e404128c8252d607169ef5305bb12a59e44ac4be9147055a6f20"
hex"0d2547a25e17e027bda4423048f3c6c595d6f83124767da34e0e4b96c26f5c94"
hex"0cbd5f2d0cea7678b80aeed4b0de78259c86a2c207dc0f28fcbe22a1252e5d3c"
hex"1a9b6c59c30e6d1e3c5efae27acc27e9b7bd23af3dd7963a0aa8361b4df2f243"
hex"0cc761b549af62069ba3e0fa7ce6c75c9f6defed91e8f3314c4b1ed7a5e0c83c"
hex"30264e78dcb1adb0d7503f80507ed4bf90271624d70dfca454d1990a2f755988"
hex"28d55e9071501cbb4ae790279f996622466c1c9f131d667e8baf7bdbd5d9a455"
hex"11ff42ce9d42c89d7687d469625b18c59b883833298af76480817907af2294a7"
hex"04645153c868372f37d106c5c4bfba4e2f73309d53390894a6b2338810da3f0d"
hex"103e33717f00caddc108323574de85c6887720561ad0c9946bc510bd3954ad4d"
hex"264461fb0d2dea03b815969e1b2bbeb995d30f774fa49411323d20ea4f4f1652"
hex"161a104ad60c9b35ef38783a9f951bd969e107846affc11754708b694168ab99"
hex"22ae691abdea5ac8f12f90a1a147b5ac63088f4c3de32e81d38e79a93612d9f9"
hex"1286d17dc13dcabf49975e2a37743d997ebc56d11b71c2e430890eb9fb7c7d3b"
hex"1411153db07129358c9ebfd849d1a12de7ff39ec458b616a3e6885bee7114f7a"
hex"0a98b996681afa7f3a7ea25fc6d9f2b48af7c5d8c8db0d55892bb64461752f93"
hex"2838a60cc9aa8717f4308e6074996b7b71f077a1fd9d8353af5c086aebed16b7"
hex"0ca941047448572c947a8308b479f74524a74c384d926e4be36e8068bc635df6"
hex"10b06f989dfd1d445b6c4bbc386c1915d9c6775df42fd040826a8a95deb11561"
hex"234bc8dba2ee31ad5b1dddb6946dbf1f2d9a2f7d71bbb45d94d7f9ff47afe936"
hex"03b28511d097183cceb1250dd00dd4501789b25bb547cfe66eed09bec1871c59"
hex"2d06d2e4acc30f60e54c1bec9442b8aa70137c37b798d2dd8dbeeea514f7907b"
hex"08037905d11e86a5a9d3b03cbe3094e9468d3fb3c1a20738c08877269a69147e"
hex"1f79d21604dcfb2ca75a44e38aa87cf8f3f56f639c8501d336f2e72a87486695"
hex"20898e9f4eab7b0f918e10b9fc35a024f4d0578c0e46463cbf360606fa47ade4"
hex"09b99372d699342f4c7e3c807a133ee3be1c92422cf2f0e5492136e815061041"
hex"142ad77d8e80c9a778bc04e8a62e550908c55974693603d8670bf9205553bf7f"
hex"22f3a31aa3f9f3c040048df27710a8e485049abfabb71b51cbbd87126e83cf24"
hex"03459743b0ca82a0801415ea160bad9d326888db19ea8b86bbcfacb48ac3c412"
hex"0491b8939d07f0074c444ee02f79917f5ded067d7e0529b0437b71fe6355170e"
hex"2bcf73774c5976acfbc99b1116384b11930bca6187dac5e662bb9250487f0845"
hex"244615cb6c1b8f74aad86d9f900ceff74ee731a9dffebc26096a1e6a772680f7"
hex"23a077e52b600cefbef77eb273ea0d5d2d7b18099b4832772b56c6e822df0794"
hex"227f9d7399bc220483caa969a8892901b894de900a1a20da29328343ce7cea1a"
hex"1679302001981320168e8d8e921756f2ec22d21fd130d719eceaae1b19354bae"
hex"118d5af95d648cf620249c405d77c7743089d9d262e29860cab3c292def4ffe4"
hex"2284c84a005818061688fe45ff37d6fa24b4f99587fc5e9a1208b3edf4d060d0"
hex"0cfc0f918b739604150598b74b981255a70d772a67f23f51c34212958b45a035"
hex"2537c964c421601b62787e6eb7307b99a9d6eefd0286f927fb25f22e7e9eaf95"
hex"1e30310e4606c228e2f5c3df3eea02457bb4777af8546fb61bb1434221d99884"
hex"0f5caab9c8ada0b5a094dd9129eea5421c1320ae7a666b56c960be0dd4c1eddc"
hex"1dd1def16e2a0ffc68a449be9d160b00ca35599e7ad7cd1afdae000cbc76dea8"
hex"2ae0eb79a34fa9a3c73bd9f1eca8731aea913ca7d138958a32c09c1c521df6a2"
hex"28ff689e68fdc639c190119604c98a1845806a317af901568ec8dc47593915f1"
hex"1bd5a5860f93500e39351520da5f095ec6557f54e0d5628fe9cf1a20d52c426c"
hex"021f0968bcefd07ac634d7e6e02d45eb6afa85d28b307f5d2e3f2cd6d744fb44"
hex"1c0c5c153df6045c88bdc5d09dfc813cf8546d7344c70d194fcfd29f92f4b696"
hex"1ca6c68abb475da1475efc1300855db5fd7374a5b92b4f90f49952a05aaf92ca"
hex"2bda409f3445270ea3a6d128b46a5cd5cb245b5339a66fdf814f2b83f4c123d3"
hex"05a71c398107a0314772fcd210e0c1d3ea35d99444a378e1213a9e10e6768daf"
hex"11fdba29cb4c24bb0e770eb1d4e5c23d9a51a3cc86c7d41b35312fc5c943f965"
hex"05f0e7da79e615a61755ed4526892b42ce1e80b5b027537bf53f0b536d4bbc0b"
hex"1eb2f81535a276e50897a2baf3bbfd981468b91fccfbec6cec8bdc988f002350"
hex"15d6ce1db45302f8e286e96e26e4f64ef5534ab8a55a9ffe215f896d7ae7bffd"
hex"1315122998316a3bb389bfa1146d940d7e2718edb570f12cdcc57377f8ca2378"
hex"023f10e9f89b3f0a2c44497c8a7b705786220397dce0083335027a9ce9839f60"
hex"234a05bd730e143866824a0e9b7672adaa64b679dfdd86c8e54fb2df83438c20"
hex"2d23c1a987db7a304a2d504e5c4573592c119fcda1ccfe5a07d5643c4a9c0633"
hex"029b04e14de53677bf90dc7badde802e588fdca2b9081ba20f4712e662c12adb"
hex"263f5e4fd893704c5f229914cd8f37bdc3f9409e617507850604f2f59d390fe6"
hex"21c9780ceccc597c37b49b8742654a6d34f71cb32d1555e72c06004d06f6f5b2"
hex"011c1683c09a02f63b38549eb958115f326fdc2bf0aa81247acfb1cc8554493f"
hex"26430030fb83d387a990d785f38ef4669b2fc53ff8ebc2537009c8648232996f"
hex"1247fe42d335f9252cf1f570316ae986b553044b0c81e635f764ab9915e11294"
hex"1386af604cbb138efe8dda480060758e274bdf502d2bcf9b5210e31798b08adc"
hex"06adec496d6a730820969cfbf60ab07a2a8f7cfcfcf2020d4cac60d127fefafe"
hex"06c39f25af1748848c37d1eabbd6a84a9a735afce06a5922e8a80af1bfc7eb5f"
hex"213dbb816f4ac87aa15aef8541b1abe3fb4d11d8b0b082989a0fff41ad9bdb2c"
hex"1e41cbe348a7f3d5e2408d19b26817183d1f6d3b51f27a915274efd9598ff18a"
hex"1568510b7bb366f4387eea8fd2b20fdd95fb6a612958b5c25262c32ab3eed75c"
hex"08521336bddf41556b79cee9b90b0c1cb4d36245c25a7f8b248567fb4248313d"
hex"2d0893b893b14eaf3aed6820ae987b88da0cba5dad3c5b267c9012405514767b"
hex"01540a25e982ae7e1c98d06b14cc56241ab9b09543440957bfbeb9c384a74b65"
hex"1744fc2b7ca4e19a45031fc838edb3805964d6533a4a5583ac57d9a9f6e6da65"
hex"1230a42b5aa82168743e9817923ea3ebd1d3a55ef1bd91a89eacc55663a02640"
hex"1673e455967762f96f57b413424631198e09e7bb1bb06844068fe44f307a8d59"
hex"061d9c5b1f377adc54722ccaf3601332ebc07660fec4d89b5c8213031f0aa8b7"
hex"2e92f89b6bd8472ef679fa5d617805180e6e0605423cac37fc15f281939770a7"
hex"2d3c9778d5cb3ab0bfe4b296e2ed90ed19619b8b353c1043b40e03b568a049a4"
hex"17276cb455cc5d461db37b0b4f6b34f1bb429a76968726205617095e1d39b92d"
hex"09dae1c6d2e4114c5439c81baa28594cc0ab76e7f32c25c4f780c9e9d6e46a5a"
hex"0a23d3bedfe1b14bff3eec36492bb9329f56ddbf7f5e1f122838e96dcfe98c46"
hex"13a1149cf273a308c777146d7f4be2160aac12980d97661fad18cf682b7c5e24"
hex"2b74aaa132494d280ca444d5d2a99cd2bd426ff82d443e2b44b8441733bd450d"
hex"29b8403a3843d4a77b6c70539d8965e57af369d6f32feab13450f3fa985aed18"
hex"142569f4ef08c2a1947dcb6e99b5ac52cdd5876c50f02bd6afd62fc810a75511"
hex"0f47bd52a43c690f658374e9f7c2bc4285c641c7116a4ccd2c94f684cbeb7f2a"
hex"17a29f16b646ebe94c4b2e2c4bc375cd7b002111dd55c4d212e9360cec88c188"
hex"10416d05ee2eed34165a50f6648eb3e10f77247f711398a14fc77bd5711fc0fa"
hex"046641ee77bf1c3c58b848252da5a88038a20ab22b0723c37de4753f40a110b4"
hex"04c68b3d094b4cc491c55531f7ba1bbae0b554816f0c8bc3099061c83099f6fe"
hex"0e3661a824f5e440eaf439395c1047754ec3e22f44a0f81d73a4dae283cbdf1a"
hex"0f7226bcc9aed34857296ce6dd82b82f1d086ac24d3b9e51ec3c767a89e0e0d1"
hex"0fdee6a4513d6ec8f9e2d416c8b87b0c1deaf66702ef14b11f42f9754ae688c2"
hex"20151e7e27c0331111bf9346db0f4a36d000ac49d03c561a45e23383a0b61d27"
hex"17cf331edb43a227be4cc3ae2dd0999e07593a95e62cb170d4e11787ca9032a4"
hex"11b76e488a5eb5703a63e3c43341cd111141c3353d6c634422e63a8ee3a948e6"
hex"2aaa17be5319a2c4b81597c87a78dd744742127d8f4c942e30a6884a7c40c05a"
hex"1ceb38f341d5107f31308f3985d72707ee4cc450aeb79b3122d18ab3a811ca32"
hex"26dbf8986be11183f7bd4bcfc17db4b68fe9a92cc4921fe17aa0352f57787186"
hex"01a871c9a11ac0eac37adf26c0e380d9e4d4d4c1441bcd52438332f3ec1bce2c"
hex"1dbda7ce884258ecbf26f6e40029d770ebbe895ac8ce51007d38939c48cf3ed3"
hex"07109ce5258042b89a7e1969e498b5039080ea3912e326b5ed2cb2c484f1c873"
hex"2aad746945530cbb6595e6f4038d89e1e0c0f978532ec02e5e12bc9115174a69"
hex"01576cfa7df9b87f6b6685eaebb7ab84d90e036f352b9a3f32edc2d8fad897f6"
hex"0a7ed0f5907aa3135577a8bd38c02250ce339b3e500000a8c0bc4dbcb58fae3e"
hex"14b8a5528c397ee0565c1d305c4679583c7a2273a4263fd7c0e4c0c3cd1593d7"
hex"0f1645829fddd22d3b28fe608eba622b2dd67dc8282192da3762413ba678ab7f"
hex"0908dffa0610ac0133c5f7bdfe3469934c78bcb4177d2c1fc618bbac6c2ede6a"
hex"05c83ee4f9ca0f735c449b31ebaf60e184880a7ce6053dbe5c6abf673b02bc22"
hex"13ecf7b788d4fab17371a424493bb49447855cfb413af131de52bd75a50b706d"
hex"0602afc4587fbcbe9da6daf807c3efc632bb8fbc8a3ccadaf73b827542745fa8"
hex"28bd99e6ae097936294db584bb7eefa8dd7b63144064f7114041a88e69d6e9c6"
hex"053751ef135a8f6549527e22bfc0580a02a7dd72e9eb6b6a6e73b3f6ec269025"
hex"1c32a5e4b55b022f9cc73fd585424afedcd1ffbf7e46d2a8e3a86b52a937a629"
hex"1abff8ffde1de3add8b76c0a6f372e2b921d601c5f3128e5851706eb60ae7b28"
hex"152769798bc48f6622fdc54ec7efbe576bc6b263ade79359db0db98ee57d465d"
hex"202fc4613d2f1988d409fce47fb6bf1adba6a9e18b97aae41f82dad5632fdb9f"
hex"1c9d65765d702a6d24efe251836e629ffc2881d0c218e89cc6467cacec7b1cf7"
hex"0b0cb3219a1c4f34ef384b4b972c7b045c4b931fd84b41ad619836b6d30b00cd"
hex"2d79b8879e27e7000430adcd96d6f7c67fcf386a473752668e64c09b2f8010a3"
hex"0475cfbf8a76a0346f7df43a3eba83f47f139060103130b1a484e7814623d854"
hex"13be6b6d4ca7746460f0466a5068d54dc9378ec2e46cda7d08deb8a254260e27"
hex"01edcd7cedeaae1c11de85b2fd1e5dab42fa36e547682937ff684364921b513f"
hex"1f570a240fd09cbc6fdd1ffb9183668427b376483f723438dee5cc5a6eb961a1"
hex"2eadf23a07b9fefd2e17ee0d74db1ef80caa7745b9c9f7685fec9b02e5ebb13b"
hex"2f668953cf91fefe0b441ff07a2f2938f468bc7efd380bef43a030e5fdc41a71"
hex"118eac608ef4b794efe03a23dd034f13156c02f2762e6e8772b11c7dcf8ddff3"
hex"2b942a6404366c746c10e3065f1f7932e240446c85c3f8ee5aab85b7727506fb"
hex"03f113eb05dac7306c758fb6565545232934cfe1a99a5fc63945a4b6d1a652d0"
hex"2a6d353d3bafac324754fe1a00d57e7f020dbea17231f87d83307bf940e6d676"
hex"1e7913c116465bfcf367aa331571c24cced6a4992e39ea9c482fc56383625971"
hex"19111380fafd9f08783dd2497d64685aabb25f5acb60204fd378e0fb0e6da0da"
hex"22b45e152cd7c40740eefe2d3fec07ea31872401ecbdb762cace9e92e7cbe34e"
hex"1192d39b9a603bba160da80fda0469b41c2255ac4d0a46402a2844225ffd2539"
hex"2f46658280ce7b17e40eefb529673a2b3d8f6e25757e9a445e44c7a7149bece4"
hex"01de74823933559559239322e9363220d322cea2ddba2f6d5610fe883885986d"
hex"15c53cfddb0f8bccedaee3a4492f2ac1be55d6f0b2f1e7af5f4caff10177904f"
hex"2ba1a14949b45d15d45e07b4b3c206ed751f86b5f37d70a24a4d8a7dc389aaf7"
hex"1839769f1f11e18063e3bc10c490bc546d8b35242a93ec4d6b61cacee4f1d4b0"
hex"1800f7c3137ebc9ac731f7b4d6375c01a874f29000c1b3f4727b65c77a2d5105"
hex"1bfcdece5c62826292caa2da6ec16b9974d2eb7fd3c2c20d1863db12ef1440be"
hex"09c696e6067fa41ad890ee8388c0290186e494cbc202e7667d19b56353cece99"
hex"092b1d93eed7d26456f285906aa196059ebbbc157fbde72b8acab6be8efce28d"
hex"2fafe0589f5c826f419b1ec3ac176a42c52360e7b3edf90cd4c77c915e47ef06"
hex"282d48bd742d9e20a5b8dc88aba0744a9124930cc1cc7d692decc7f0ee8a86d5"
hex"06f42f74816d65e974086055ade94ff76a6fe5d14bd64a069b89b867989d12c8"
hex"15b575413874cb060adc4fbde9da6215b08bd3c72b9f817bd4e227b818f70235"
hex"225265caca14dccb262c43230defa44d79efbf96195b8852817b9c2a1a0cee7b"
hex"065a720651f4d30a03b23445d588a657ec81881b38a6ca7c96ae7d30a228eda7"
hex"2f8f278929640191de8b4c95a163f7b35d9fc5f38dd11499e2f3f0484fee4d4e"
hex"2e67e80ed738c79c531bb034d0e3f7703ae1cd93d0334f8cce0e6fd7bbeeb9cd"
hex"1a4ba16824f4df329914baf49fe4ae2e518d85cd88bc2a4d7511486305611aa9"
hex"01d1333f199a38fc9c772c5b6dde72d9d9ef90dbe2a7ff20cb9685c2b30ef80c"
hex"066995da220811544bd79b867d6a45c5f9d5f81246ee7bd867bae77ce1f1a5fd"
hex"1347a12ac6258ea35211b6ba1a86831915843d88896e58f458f0d5765917c35e"
hex"035fed90d06219d345c5ec7d3a0ae95883cede928acb380f8ef8b4b6859ef965"
hex"2abcbb767e6e79b2dd22e5978eed3edd65fc15f583b875d14e2dc2f2a0d8543c"
hex"2991e9e9d1214bf2bc8020c1c18d861b8fb8829af660a7dfd350321256775ca6"
hex"13561a0b30e623640fa05d8a5f9540530ec9270d46c5f6607690c93e6e82655d"
hex"295a4d3659bd1a055dd3f4bb626752a2d06759cdbbcd1bc79b83086649d106e5"
hex"0ff647b8fb279b8ec301487a755b63b15410d9583977381e2060e794dde87459"
hex"217e540739dd851a21e60d671a6dba94845f42487c32ec098a9c4c0c19819843"
hex"1b389bd1a4d6c9f88d6fbb6beb8c25a7f86151da3048fb29ce506076f3b73397"
hex"01f60ddbcde529f2adcdebd2bf02940c1a9a378e0488c29a0ac38a17a9118bc5"
hex"165cea4c3361c2b7edc485fb90f788d1b4ecf249b38701ce1ef0472003d9dba7"
hex"0bcbbc1e5599b61380fae8aa7c48f7dc2c543713ffc9a72a801e1a77f9f37c81"
hex"0cf8a31e0bb5eb4cdb46f2fc5fca97133ad03ab9cf53883b270a01260c7c534a"
hex"0e20cd40e05e747fb3bdc07b3cfc50b3ceac18f059ef4f65565f447208335fb8"
hex"28df7cb07583a984136302cd3baf3b3d9f9177ef97f584b0daab7f0493d25773"
hex"26d35e5c2e4f1092a1339918cbdbfcb5b1dda82c318103401d4a9e8fc3218159"
hex"09daf60bcb32e37020e105d8b9bc3aa31900cd3459046ab97eb228675846b691"
hex"268db848b42be0e8d96f73d79c16df5175b29d4c3e0351a24ee103d2cfe7c283"
hex"1e4edc4d7bb561c29aafc6662191bcae8aebd4d5113e331b9b537f4fa8598905"
hex"2d3c39a939554f2b9e6230e96a78c24be4d942154f765e6d4af53a8c4db9407a"
hex"188b721b564daf9ebf33a146bccea52cbbcdcbfb50740e921f91f7e5672e5e7c"
hex"2e59d3453f983dff90e45f917cd74501a646319fd22c952f3152b077d5655840"
hex"1f0bf595db464070ab32553b095f4421524c20568df7ac803a3d299b3dab568d"
hex"0b68d795eb7b68b11c333b381a2838bd9398fe371f08d48f2ded24e60e02654f"
hex"18b33a4cd6eeb86b9fafe856f33753ca1cc6756dc4f843e03039dfde879a76b7"
hex"15e0ee169afa10d37a8062aece61391764ffc6d4dc6ddcb56f35880bb13c7056"
hex"25c616a97b05678348ce1d52718bb1d8521cff5a3d2ce5b37f7c190dc4786228"
hex"26a0882f49d8c0fd3be124ef75a7a107778ff66b5be2b66c0b64c2084809ede3"
hex"070dbc7e5de51ff90466ae52b47a293b4cff6f0cb064b6dde4e00650a68b1541"
hex"29426faa9a237e4bf88eb59b094786cf49a96fdc54cf6c819e1b67e2b0d68707"
hex"0f1bd148d0b2faf46659e6db194bfdd5d037aea060737952bc30026f8547737d"
hex"1d861f4c7a0c0e5c99cd91e2869215dbde6c4fffe1ad1d8744f257aba5b503cb"
hex"004ace6be69932572926930019040107ca38207eca80735d5de083cd596395ee"
hex"154d83576e1821b8ecb4f1931ad7721cce29bc17fc237974322e248ada7c23f9"
hex"2fe852eba0f03f71cdfc34e6193561d3423087aaac643a9edfe25fa2d7f3263c"
hex"0ada5d6553e357275b59357fc2213e1faf714a22eee3d5d3d502838fcde32e54"
hex"2e73f204baf6916a3af968db423019f558a87c104c514bd8f164d03d3deba7e8"
hex"1d29d896aae409cad919a995cc8717b7a078c623bd3af80c056dc1716d043539"
hex"03644e9c312415bd756683697eb1ba4fea32c710d0f0129ae756984b52611993"
hex"255a0912167ac123d1a2c9b10380a309d7f3b067b628e9da5085d98b90b0cd85"
hex"2d54cf1e2971b4c37d511fbd55ca08e2b56ee7fb91386192555f1757dde45860"
hex"1ce287c5e5b611ff5fb58751b3eb8335a8b5cde2fd2873522cea0e9bf6f5c556"
hex"0ca0091a58ee20042ac02237bf01843886e4439d859a785362913c0cead1e469"
hex"1f47e5ac7ec132d0c7136a9487fb0c6cf292b07e5515eb2ae942d4aaef2dfc7f"
hex"29b08f57557514cdeac066d9eea594a5c5388e8f1064dcf19fe4be16d57b0d41"
hex"0f27f0132545e917cc90595e93c252a720b8d24b70bcfa0de03a6d3f5d50ef84"
hex"0404810250839299f6b794c6e9f00432b60d7ca2dc6d754029cfac5b964f09aa"
hex"0aca49db30da75f002bfb2ee498ac70a5b0f98245a1c2ee6da8c0dd3c59c0207"
hex"30231cd053a7783a3ab43400f056f622b99507f09e1e16377e2d02c0c39faae9"
hex"164f1b6eb4908f591b45bc4d4385a161cf46bc1b287369a5eecdfcfd140b62e0"
hex"188576c886eecbe7191a7406798f0fb4bfa0c7182c135ef595ef570294f7aec7"
hex"1396e7b28ab67accf1c37de37ebc942bed502f53651a61fc62a1dcfc29d1ce5e"
hex"11aa2dd7e1659029917e203cc816abc533dca943664bfe41e3d298abf64dc30d"
hex"0bd1ec3ca032b7d27b8bf71a2e76ccd0c4a313642b6aad073167b8b133ce7679"
hex"0a7414fcd29c4f31df7e37573a174b7c889dd737f94b684a8b25d89723558978"
hex"02e3d9093c471054ebfe17ab81c9b7c3ba9691693fe99c34802330498b1ed8fd"
hex"2602a9d7085929301c5121009e4b9187a06c767ef9aceab2202d20926e03c1ef"
hex"01e3862f91f2e868c1e148e0f7dc7297989c352cd6e56879888e7e21c0948f52"
hex"29075542292ff5d8f4d6bf02b27e289f82bc3934ec7bcf5d4ce5d7aa9dbf2f5f"
hex"11ea16238aa5d188eba8553b6ea4af29ca37201f1b9c9bf7ba44f78264aadabd"
hex"0504068c9c7063a776872824e1ab4b34178621279772ca089c5ba6d7d4c0d4f5"
hex"097cd8eccb72c01dc41c17197a0f4216ca4a0d3a476df762e4b3d4f87c8ff926"
hex"2ce6d1e2f8c9185bd860b2b021b44db3713b420599d990195f8fe82dfaca2fc9"
hex"305bc541a04645fb6f733b27d7950a233599ced31ad97e8d3297094dba4abd6f"
hex"295be8a9589ac33d6f04a426390f6e6cd70aec289a6d1ef3264c887280ad42a8"
hex"103c52bb2708e2a6917efb3fd9145bd1729c2c9fa67f01aba05ab47c56441cdf"
hex"0816a0b76cabc81cc9f6bae4de63668f12ae669284b5aeca54be6780354b726e"
hex"0a7bff238cb5cb4c216fcf0f507f40d3679c0acbaef83dd4b5b0db2a9e52c3a6"
hex"048f17c79c4a7abafdff1d3f955b5da5e0816d44f817b705f484c771f1bac294"
hex"28973b30874c1236177adc709f0a6b2d32745835162f5ed9ce69f36f156031e4"
hex"0b2e26c32addc2ceb297648d3fc271a548b9bf788bff4b2023cab820c4a4ee8f"
hex"201bbb92dcd070b78863668016c24160c2c053dadb24001af4042a1e51246033"
hex"07507505dd11a39d879137103f9972ad0f6d79ea24cc16610e1c9dd1984cda87"
hex"1f891703a5676db0633371eca0abacf30d3f4313fc807fbd98d613bef1b3854b"
hex"16cbd386e41f6c4a173a1312f68148cbb308289a209c213fa51dbc31874fe1ee"
hex"1e5c8047a5c0c014f7000ea5d3ca333306adef5755efff735059bc055bed75d7"
hex"1fbb39800b056717d62e76315c4d3e05185e7ee2ece00adefba77bd5b1f4d7bb"
hex"23fde2d94ad2036e9a94304bc121f6c1845a1327d89a6f55bb9ca81eb91e07cd"
hex"0f43871c3ac1f1e37bd2755613ed7b3a3ec11a3eb8fff749ab22f92446f62f85"
hex"152339e3e373c4e4ad9b657f5e665676790ca0bf8e005767aedd4269d107d4f1"
hex"1e6b4bc7a2e4217c1c3cc2e298e450d010fd622c47e2cd7880e64b2e6b2e6fdf"
hex"28958ca1ae65967871544bd1afd71c06b4b39318d5a076091a1266627ad1b40f"
hex"0ceb66234377758d63f8c56e66c0af644ead06b4e987bde957467e75938f1404"
hex"0e31fe264d2cc1f55a3fce3ce86a68196d2a06336102c14d0cc892fc871d6f42"
hex"19b29228092e58a02047d8debf48ba1442ea38aceb82605e8bfa7460c49af496"
hex"0e0528ae6d904bb6c6379fef10cb1d1bc6e867054acf978041ce99becefb2193"
hex"22efa15c26a14170452119318cb1073b15b978fd05c40a5001560edf21df4aac"
hex"2aeea52c33986c164976c52dfb73b8524b9e12650cc2e6614eb1efd1d3134f58"
hex"25ca08820ba2a38dcd2561640ae9935ef47b5da8a801641a7066f7dbc52ff365"
hex"1d8489971cf0f77a525cae847acd5056502177b00ca5b72b3f0fb32e0bb85bb8"
hex"16d389fa12477aa6c862499500c516228cd9ae7c652c3f61f641b6590b800671"
hex"16569eaf77c8ec57e85b52ee30cd6212133a17ca3a4e87bcfd7507598616214d"
hex"0e2b188f173ee86cce1a411c0d2ff80e1ead326474358dbf412f8e540c01aa91"
hex"173f752e069ecc268a7427e0935db3acd27fb7bc097e2b2c58d5a6acdd1fb4c1"
hex"0ef703b9687c4c6f9deddc9c9d3ef5ba1d9a87529d0a7387bc569c6c642913c4"
hex"25fa7538cb83e2a689d5caeac55b325d3597547ef6c8dc122a2a6d000c344eec"
hex"023e56786b482a73477d0fd36701f0eddd08298e43913144c3f7b879d0988761"
hex"2efec260abd0d45688e61558f0288cbddd8b5774e48466f164d5e522b5441314"
hex"14d6f2fe1a75dc3f898674bca43b786b3eebb0e2ac53ea6336d2d0496f23399c"
hex"133eef87007a5128b3f86d3ff94bdd1a0143b28d4b72e7b02b2022147764b03a"
hex"20a11d5fb29aa2ab37f2917d0b42ef10170b5f8614bc6e4decda4186dfafba37";
function getPts(uint256 merkleTreeDepth) internal pure returns (uint256[SET_SIZE] memory pts) {
bytes memory ptBytes = VK_POINT_BYTES;

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
/// @title Semaphore contract interface.
interface ISemaphore {

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
/// @title SemaphoreGroups contract interface.
interface ISemaphoreGroups {

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.23 <=0.8.28;
pragma solidity >=0.8.23 <0.9.0;
/// @title SemaphoreVerifier contract interface.
interface ISemaphoreVerifier {

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/contracts",
"version": "4.9.1",
"version": "4.13.0",
"description": "Semaphore contracts to manage groups and broadcast anonymous signals.",
"license": "MIT",
"files": [
@@ -30,6 +30,6 @@
"access": "public"
},
"dependencies": {
"@zk-kit/lean-imt.sol": "2.0.0"
"@zk-kit/lean-imt.sol": "2.0.1"
}
}

View File

@@ -42,6 +42,6 @@
"typescript": "^5.3.3"
},
"dependencies": {
"@zk-kit/lean-imt.sol": "2.0.0"
"@zk-kit/lean-imt.sol": "2.0.1"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/core",
"version": "4.9.1",
"version": "4.13.0",
"description": "Core library for the essential Semaphore features.",
"type": "module",
"license": "MIT",
@@ -42,8 +42,8 @@
"access": "public"
},
"dependencies": {
"@semaphore-protocol/group": "4.9.1",
"@semaphore-protocol/identity": "4.9.1",
"@semaphore-protocol/proof": "4.9.1"
"@semaphore-protocol/group": "4.13.0",
"@semaphore-protocol/identity": "4.13.0",
"@semaphore-protocol/proof": "4.13.0"
}
}

View File

@@ -49,8 +49,8 @@
</h4>
</div>
| This library provides tools for querying and interacting with the [`Semaphore.sol`](https://github.com/semaphore-protocol/semaphore/blob/main/packages/contracts/contracts/Semaphore.sol) smart contract. It supports both the Semaphore subgraph and direct Ethereum network connections via Ethers. Designed for use in both Node.js and browser environments, it facilitates the management of group data and verification processes within the Semaphore protocol. |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| This library provides tools for querying and interacting with the [`Semaphore.sol`](https://github.com/semaphore-protocol/semaphore/blob/main/packages/contracts/contracts/Semaphore.sol) smart contract. It supports the Semaphore subgraph and direct Ethereum network connections via Ethers or Viem. Designed for use in both Node.js and browser environments, it facilitates the management of group data and verification processes within the Semaphore protocol. |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
## 🛠 Install
@@ -173,10 +173,10 @@ const admin = await semaphoreEthers.getGroupAdmin("42")
const members = await semaphoreEthers.getGroupMembers("42")
```
**Fetch Verified Proofs**
**Fetch Validated Proofs**
```typescript
const verifiedProofs = await semaphoreEthers.getGroupVerifiedProofs("42")
const verifiedProofs = await semaphoreEthers.getGroupValidatedProofs("42")
```
**Check Group Membership**
@@ -187,3 +187,59 @@ const isMember = await semaphoreEthers.isGroupMember(
"16948514235341957898454876473214737047419402240398321289450170535251226167324"
)
```
### Using Viem for Direct Blockchain Interaction
**Initialize a Semaphore Viem instance**
```typescript
import { SemaphoreViem } from "@semaphore-protocol/data"
const semaphoreViem = new SemaphoreViem()
// or:
const semaphoreViemOnSepolia = new SemaphoreViem("sepolia", {
address: "semaphore-address",
startBlock: 0n
})
// or:
const localViemInstance = new SemaphoreViem("http://localhost:8545", {
address: "semaphore-address"
})
```
With your SemaphoreViem instance, you can:
**Fetch Group IDs**
```typescript
const groupIds = await semaphoreViem.getGroupIds()
```
**Fetch Group Details**
```typescript
const group = await semaphoreViem.getGroup("42")
```
**Fetch Group Members**
```typescript
const members = await semaphoreViem.getGroupMembers("42")
```
**Fetch Validated Proofs**
```typescript
const validatedProofs = await semaphoreViem.getGroupValidatedProofs("42")
```
**Check Group Membership**
```typescript
const isMember = await semaphoreViem.isGroupMember(
"42",
"16948514235341957898454876473214737047419402240398321289450170535251226167324"
)
```

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/data",
"version": "4.9.1",
"version": "4.13.0",
"description": "A library for querying Semaphore smart contract.",
"type": "module",
"license": "MIT",
@@ -37,9 +37,10 @@
"rollup-plugin-cleanup": "^3.2.1"
},
"dependencies": {
"@semaphore-protocol/utils": "4.9.1",
"@semaphore-protocol/utils": "4.13.0",
"@zk-kit/utils": "1.3.0",
"axios": "1.6.6",
"ethers": "6.13.4"
"ethers": "6.13.4",
"viem": "2.23.7"
}
}

View File

@@ -12,5 +12,5 @@ export default function getURL(supportedNetwork: SupportedNetwork): string {
throw new TypeError(`Network '${supportedNetwork}' is not supported`)
}
return `https://api.studio.thegraph.com/query/14377/semaphore-${supportedNetwork}/v4.2.0`
return `https://api.studio.thegraph.com/query/14377/semaphore-${supportedNetwork}/v4.3.0`
}

View File

@@ -1,5 +1,6 @@
import SemaphoreEthers from "./ethers"
import SemaphoreSubgraph from "./subgraph"
import SemaphoreViem from "./viem"
export * from "./types"
export { SemaphoreSubgraph, SemaphoreEthers }
export { SemaphoreSubgraph, SemaphoreEthers, SemaphoreViem }

View File

@@ -1,3 +1,5 @@
import { Chain, PublicClient, Transport } from "viem"
export type EthersNetwork =
| "mainnet"
| "sepolia"
@@ -12,6 +14,8 @@ export type EthersNetwork =
| "linea"
| "linea-sepolia"
export type ViemNetwork = EthersNetwork
export type GroupOptions = {
members?: boolean
validatedProofs?: boolean
@@ -54,3 +58,12 @@ export type EthersOptions = {
applicationId?: string // Pocket
applicationSecret?: string // Pocket
}
export type ViemOptions = {
address?: string
startBlock?: bigint | number
transport?: Transport // Transport from viem
chain?: Chain // Chain from viem
apiKey?: string
publicClient?: PublicClient
}

397
packages/data/src/viem.ts Normal file
View File

@@ -0,0 +1,397 @@
import {
SupportedNetwork,
defaultNetwork,
getDeployedContract,
isSupportedNetwork
} from "@semaphore-protocol/utils/networks"
import { SemaphoreABI } from "@semaphore-protocol/utils/constants"
import { requireString } from "@zk-kit/utils/error-handlers"
import {
Address,
createPublicClient,
http,
PublicClient,
getContract,
GetContractReturnType,
zeroAddress,
Transport,
Chain,
Log
} from "viem"
import { GroupResponse, ViemNetwork, ViemOptions } from "./types"
// Define types for the event logs to properly access args
type GroupCreatedLog = Log<bigint, number, boolean, any, any, any, "GroupCreated"> & {
args: {
groupId: bigint
}
}
type MemberRemovedLog = Log<bigint, number, boolean, any, any, any, "MemberRemoved"> & {
args: {
groupId: string
index: bigint
}
}
type MemberUpdatedLog = Log<bigint, number, boolean, any, any, any, "MemberUpdated"> & {
args: {
groupId: string
index: bigint
newIdentityCommitment: string
}
}
type MembersAddedLog = Log<bigint, number, boolean, any, any, any, "MembersAdded"> & {
args: {
groupId: string
startIndex: bigint
identityCommitments: string[]
}
}
type MemberAddedLog = Log<bigint, number, boolean, any, any, any, "MemberAdded"> & {
args: {
groupId: string
index: bigint
identityCommitment: string
}
}
type ProofValidatedLog = Log<bigint, number, boolean, any, any, any, "ProofValidated"> & {
args: {
groupId: string
message: string
merkleTreeRoot: string
merkleTreeDepth: string
scope: string
nullifier: string
x: string
y: string
}
}
/**
* The SemaphoreViem class provides a high-level interface to interact with the Semaphore smart contract
* using the {@link https://viem.sh | viem} library. It encapsulates all necessary functionalities to connect to Ethereum networks,
* manage contract instances, and perform operations such as retrieving group information or checking group memberships.
* This class simplifies the interaction with the Ethereum blockchain by abstracting the details of network connections
* and contract interactions.
*/
export default class SemaphoreViem {
private _network: ViemNetwork | string
private _options: ViemOptions
private _client: PublicClient
private _contract: GetContractReturnType<typeof SemaphoreABI, PublicClient>
/**
* Constructs a new SemaphoreViem instance, initializing it with a network or a custom Ethereum node URL,
* and optional configuration settings for the viem client and contract.
* @param networkOrEthereumURL The Ethereum network name or a custom JSON-RPC URL to connect to.
* @param options Configuration options for the viem client and the Semaphore contract.
*/
constructor(networkOrEthereumURL: ViemNetwork | string = defaultNetwork, options: ViemOptions = {}) {
requireString(networkOrEthereumURL, "networkOrEthereumURL")
if (options.apiKey) {
requireString(options.apiKey, "apiKey")
}
if (isSupportedNetwork(networkOrEthereumURL)) {
const { address, startBlock } = getDeployedContract(networkOrEthereumURL as SupportedNetwork)
options.address ??= address
options.startBlock ??= BigInt(startBlock)
} else {
options.startBlock ??= 0n
}
if (options.address === undefined) {
throw new Error(`Network '${networkOrEthereumURL}' needs a Semaphore contract address`)
}
let transport: Transport
if (options.transport) {
transport = options.transport
} else if (!networkOrEthereumURL.startsWith("http")) {
transport = http()
} else {
transport = http(networkOrEthereumURL)
}
this._network = networkOrEthereumURL
this._options = options
// Create the public client
this._client =
options.publicClient ??
createPublicClient({
transport,
chain: options.chain as Chain
})
// Create the contract instance
this._contract = getContract({
address: options.address as Address,
abi: SemaphoreABI,
client: this._client
})
}
/**
* Retrieves the Ethereum network or custom URL currently used by this instance.
* @returns The network or URL as a string.
*/
get network(): ViemNetwork | string {
return this._network
}
/**
* Retrieves the options used for configuring the viem client and the Semaphore contract.
* @returns The configuration options.
*/
get options(): ViemOptions {
return this._options
}
/**
* Retrieves the viem Contract instance used to interact with the Semaphore contract.
* @returns The Contract instance.
*/
get contract(): GetContractReturnType<typeof SemaphoreABI, PublicClient> {
return this._contract
}
/**
* Retrieves the viem Public Client instance used to interact with the blockchain.
* @returns The Public Client instance.
*/
get client(): PublicClient {
return this._client
}
/**
* Fetches the list of group IDs from the Semaphore contract by querying the "GroupCreated" events.
* @returns A promise that resolves to an array of group IDs as strings.
*/
async getGroupIds(): Promise<string[]> {
const logs = (await this._client.getContractEvents({
address: this._options.address as Address,
abi: SemaphoreABI,
eventName: "GroupCreated",
fromBlock: BigInt(this._options.startBlock || 0)
})) as GroupCreatedLog[]
return logs.map((log) => log.args.groupId.toString())
}
/**
* Retrieves detailed information about a specific group by its ID. This method queries the Semaphore contract
* to get the group's admin, Merkle tree root, depth, and size.
* @param groupId The unique identifier of the group.
* @returns A promise that resolves to a GroupResponse object.
*/
async getGroup(groupId: string): Promise<GroupResponse> {
requireString(groupId, "groupId")
const groupAdmin = await this._contract.read.getGroupAdmin([groupId])
if (groupAdmin === zeroAddress) {
throw new Error(`Group '${groupId}' not found`)
}
const merkleTreeRoot = await this._contract.read.getMerkleTreeRoot([groupId])
const merkleTreeDepth = await this._contract.read.getMerkleTreeDepth([groupId])
const merkleTreeSize = await this._contract.read.getMerkleTreeSize([groupId])
const group: GroupResponse = {
id: groupId,
admin: groupAdmin as string,
merkleTree: {
depth: Number(merkleTreeDepth),
size: Number(merkleTreeSize),
root: merkleTreeRoot ? merkleTreeRoot.toString() : ""
}
}
return group
}
/**
* Fetches a list of members from a specific group. This method queries the Semaphore contract for events
* related to member additions and updates, and constructs the list of current group members.
* @param groupId The unique identifier of the group.
* @returns A promise that resolves to an array of member identity commitments as strings.
*/
async getGroupMembers(groupId: string): Promise<string[]> {
requireString(groupId, "groupId")
const groupAdmin = await this._contract.read.getGroupAdmin([groupId])
if (groupAdmin === zeroAddress) {
throw new Error(`Group '${groupId}' not found`)
}
// Get member removed events
const memberRemovedEvents = (await this._client.getContractEvents({
address: this._options.address as Address,
abi: SemaphoreABI,
eventName: "MemberRemoved",
args: {
groupId: BigInt(groupId)
},
fromBlock: BigInt(this._options.startBlock || 0)
})) as MemberRemovedLog[]
// Get member updated events
const memberUpdatedEvents = (await this._client.getContractEvents({
address: this._options.address as Address,
abi: SemaphoreABI,
eventName: "MemberUpdated",
args: {
groupId: BigInt(groupId)
},
fromBlock: BigInt(this._options.startBlock || 0)
})) as MemberUpdatedLog[]
const memberUpdatedEventsMap = new Map<string, [bigint, string]>()
for (const event of memberUpdatedEvents) {
if (event.args.index && event.args.newIdentityCommitment && event.blockNumber) {
memberUpdatedEventsMap.set(event.args.index.toString(), [
event.blockNumber,
event.args.newIdentityCommitment.toString()
])
}
}
for (const event of memberRemovedEvents) {
if (event.args.index && event.blockNumber) {
const groupUpdate = memberUpdatedEventsMap.get(event.args.index.toString())
if (!groupUpdate || (groupUpdate && groupUpdate[0] < event.blockNumber)) {
memberUpdatedEventsMap.set(event.args.index.toString(), [event.blockNumber, "0"])
}
}
}
// Get members added events (batch additions)
const membersAddedEvents = (await this._client.getContractEvents({
address: this._options.address as Address,
abi: SemaphoreABI,
eventName: "MembersAdded",
args: {
groupId: BigInt(groupId)
},
fromBlock: BigInt(this._options.startBlock || 0)
})) as MembersAddedLog[]
const membersAddedEventsMap = new Map<string, string[]>()
for (const event of membersAddedEvents) {
if (event.args.startIndex && event.args.identityCommitments) {
membersAddedEventsMap.set(
event.args.startIndex.toString(),
event.args.identityCommitments.map((i) => i.toString())
)
}
}
// Get individual member added events
const memberAddedEvents = (await this._client.getContractEvents({
address: this._options.address as Address,
abi: SemaphoreABI,
eventName: "MemberAdded",
args: {
groupId: BigInt(groupId)
},
fromBlock: BigInt(this._options.startBlock || 0)
})) as MemberAddedLog[]
const members: string[] = []
const merkleTreeSize = await this._contract.read.getMerkleTreeSize([groupId])
let index = 0
while (index < Number(merkleTreeSize)) {
const identityCommitments = membersAddedEventsMap.get(index.toString())
if (identityCommitments) {
members.push(...identityCommitments)
index += identityCommitments.length
} else {
const currentIndex = index // Create a closure to capture the current index value
const event = memberAddedEvents.find((e) => Number(e.args.index) === currentIndex)
if (event && event.args.identityCommitment) {
members.push(event.args.identityCommitment.toString())
}
index += 1
}
}
// Apply updates to members
for (let j = 0; j < members.length; j += 1) {
const groupUpdate = memberUpdatedEventsMap.get(j.toString())
if (groupUpdate) {
members[j] = groupUpdate[1].toString()
}
}
return members
}
/**
* Fetches a list of validated proofs for a specific group. This method queries the Semaphore contract for events
* related to proof verification.
* @param groupId The unique identifier of the group.
* @returns A promise that resolves to an array of validated proofs.
*/
async getGroupValidatedProofs(groupId: string): Promise<any> {
requireString(groupId, "groupId")
const groupAdmin = await this._contract.read.getGroupAdmin([groupId])
if (groupAdmin === zeroAddress) {
throw new Error(`Group '${groupId}' not found`)
}
const proofValidatedEvents = (await this._client.getContractEvents({
address: this._options.address as Address,
abi: SemaphoreABI,
eventName: "ProofValidated",
args: {
groupId: BigInt(groupId)
},
fromBlock: BigInt(this._options.startBlock || 0)
})) as ProofValidatedLog[]
return proofValidatedEvents.map((event) => ({
message: event.args.message?.toString() || "",
merkleTreeRoot: event.args.merkleTreeRoot?.toString() || "",
merkleTreeDepth: event.args.merkleTreeDepth?.toString() || "",
scope: event.args.scope?.toString() || "",
nullifier: event.args.nullifier?.toString() || "",
points: [event.args.x?.toString() || "", event.args.y?.toString() || ""],
timestamp: event.blockNumber ? new Date(Number(event.blockNumber) * 1000).toISOString() : undefined
}))
}
/**
* Checks if a given identity commitment is a member of a specific group.
* @param groupId The unique identifier of the group.
* @param member The identity commitment to check.
* @returns A promise that resolves to a boolean indicating whether the member is in the group.
*/
async isGroupMember(groupId: string, member: string): Promise<boolean> {
requireString(groupId, "groupId")
requireString(member, "member")
const members = await this.getGroupMembers(groupId)
return members.includes(member)
}
}

View File

@@ -0,0 +1,108 @@
import { Contract, EventLog } from "ethers/contract"
import getEvents from "../src/getEvents"
jest.mock("ethers/contract", () => ({
__esModule: true,
Contract: jest.fn(),
EventLog: jest.fn()
}))
describe("getEvents", () => {
let mockContract: jest.Mocked<Contract>
beforeEach(() => {
mockContract = {
filters: {
TestEvent: jest.fn()
},
queryFilter: jest.fn()
} as any
})
describe("# getEvents", () => {
it("should fetch events with basic parameters", async () => {
const mockEvents = [
{
args: ["arg1", "arg2"],
blockNumber: 123
},
{
args: ["arg3", "arg4"],
blockNumber: 124
}
] as EventLog[]
mockContract.queryFilter.mockResolvedValueOnce(mockEvents)
const result = await getEvents(mockContract, "TestEvent")
expect(mockContract.filters.TestEvent).toHaveBeenCalled()
expect(mockContract.queryFilter).toHaveBeenCalled()
expect(result).toEqual([
["arg1", "arg2", 123],
["arg3", "arg4", 124]
])
})
it("should handle filter arguments", async () => {
const filterArgs = ["arg1", "arg2"]
const mockEvents = [
{
args: ["arg1", "arg2"],
blockNumber: 123
}
] as EventLog[]
mockContract.queryFilter.mockResolvedValueOnce(mockEvents)
await getEvents(mockContract, "TestEvent", filterArgs)
expect(mockContract.filters.TestEvent).toHaveBeenCalledWith(...filterArgs)
})
it("should use startBlock parameter", async () => {
const startBlock = 1000
const mockEvents = [
{
args: ["arg1"],
blockNumber: 1001
}
] as EventLog[]
mockContract.queryFilter.mockResolvedValueOnce(mockEvents)
await getEvents(mockContract, "TestEvent", [], startBlock)
expect(mockContract.queryFilter).toHaveBeenCalledWith(undefined, startBlock)
})
it("should handle empty events array", async () => {
mockContract.queryFilter.mockResolvedValueOnce([])
const result = await getEvents(mockContract, "TestEvent")
expect(result).toEqual([])
})
it("should handle undefined filterArgs gracefully", async () => {
const mockEvents = [
{
args: ["arg1"],
blockNumber: 101
}
] as EventLog[]
mockContract.queryFilter.mockResolvedValueOnce(mockEvents)
await getEvents(mockContract, "TestEvent", undefined)
expect(mockContract.filters.TestEvent).toHaveBeenCalledWith()
})
it("should handle contract errors", async () => {
mockContract.queryFilter.mockRejectedValue(new Error("Contract error"))
await expect(getEvents(mockContract, "TestEvent")).rejects.toThrow("Contract error")
})
})
})

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/group",
"version": "4.9.1",
"version": "4.13.0",
"description": "A library to create and manage Semaphore groups.",
"type": "module",
"license": "MIT",
@@ -36,7 +36,7 @@
"rollup-plugin-cleanup": "^3.2.1"
},
"dependencies": {
"@zk-kit/lean-imt": "2.2.3",
"@zk-kit/lean-imt": "2.2.4",
"@zk-kit/utils": "1.3.0",
"poseidon-lite": "0.3.0"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/hardhat",
"version": "4.9.1",
"version": "4.13.0",
"description": "A Hardhat plugin to deploy Semaphore contracts.",
"type": "module",
"license": "MIT",
@@ -41,7 +41,7 @@
},
"dependencies": {
"@nomicfoundation/hardhat-ethers": "^3.0.0",
"@semaphore-protocol/contracts": "4.9.1",
"@semaphore-protocol/contracts": "4.13.0",
"ethers": "^6.13.4",
"hardhat-dependency-compiler": "^1.1.3"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/identity",
"version": "4.9.1",
"version": "4.13.0",
"description": "A library to create Semaphore identities.",
"type": "module",
"license": "MIT",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/proof",
"version": "4.9.1",
"version": "4.13.0",
"description": "A library to generate and verify Semaphore proofs.",
"type": "module",
"license": "MIT",
@@ -47,14 +47,14 @@
"rollup-plugin-cleanup": "^3.2.1"
},
"peerDependencies": {
"@semaphore-protocol/group": "4.9.1",
"@semaphore-protocol/identity": "4.9.1"
"@semaphore-protocol/group": "4.13.0",
"@semaphore-protocol/identity": "4.13.0"
},
"dependencies": {
"@semaphore-protocol/utils": "4.9.1",
"@zk-kit/artifacts": "1.8.0",
"@semaphore-protocol/utils": "4.13.0",
"@zk-kit/artifacts": "2.0.1",
"@zk-kit/utils": "1.3.0",
"ethers": "6.13.4",
"snarkjs": "0.7.4"
"snarkjs": "0.7.5"
}
}

View File

@@ -86,18 +86,14 @@ export default async function generateProof(
// If the Snark artifacts are not defined they will be automatically downloaded.
snarkArtifacts ??= await maybeGetSnarkArtifacts(Project.SEMAPHORE, {
parameters: [merkleTreeDepth],
version: "4.0.0"
version: "4.13.0"
})
const { wasm, zkey } = snarkArtifacts
// The index must be converted to a list of indices, 1 for each tree level.
// The missing siblings can be set to 0, as they won't be used in the circuit.
const merkleProofIndices = []
const merkleProofSiblings = merkleProof.siblings
for (let i = 0; i < merkleTreeDepth; i += 1) {
merkleProofIndices.push((merkleProof.index >> i) & 1)
if (merkleProofSiblings[i] === undefined) {
merkleProofSiblings[i] = 0n
}
@@ -107,7 +103,7 @@ export default async function generateProof(
{
secret: identity.secretScalar,
merkleProofLength,
merkleProofIndices,
merkleProofIndex: merkleProof.index,
merkleProofSiblings,
scope: hash(scope),
message: hash(message)

View File

@@ -9,5 +9,5 @@ import { NumericString } from "snarkjs"
* @returns The message digest.
*/
export default function hash(message: BigNumberish): NumericString {
return (BigInt(keccak256(toBeHex(message, 32))) >> BigInt(8)).toString()
return (BigInt(keccak256(toBeHex(message, 32))) >> 8n).toString()
}

View File

@@ -15,6 +15,6 @@ export default function toBigInt(value: BigNumberish | Uint8Array | string): big
return _toBigInt(encodeBytes32String(value))
}
throw TypeError(error.message)
throw TypeError(error instanceof Error ? error.message : error.toString())
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/utils",
"version": "4.9.1",
"version": "4.13.0",
"description": "A library to provide utility functions to the other Semaphore packages.",
"type": "module",
"license": "MIT",

View File

@@ -5,17 +5,37 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 6983614
"startBlock": 8263690
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 6983614
"startBlock": 8263690
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 6983614
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 8263690
}
]
},
{
"network": "ethereum",
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 22424592
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 22424592
},
{
"name": "Semaphore",
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 22424592
}
]
},
@@ -25,17 +45,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 93258221
"startBlock": 149903019
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 93258221
"startBlock": 149903019
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 93258221
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 149903019
}
]
},
@@ -45,17 +65,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 19289434
"startBlock": 27341051
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 19289434
"startBlock": 27341051
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 19289434
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 27341051
}
]
},
@@ -65,17 +85,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 13850778
"startBlock": 21308099
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 13850778
"startBlock": 21308099
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 13850778
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 21308099
}
]
},
@@ -85,17 +105,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 269586534
"startBlock": 333645515
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 269586534
"startBlock": 333645515
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 269586534
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 333645515
}
]
},
@@ -105,17 +125,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 63715311
"startBlock": 71158898
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 63715311
"startBlock": 71158898
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 63715311
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 71158898
}
]
},
@@ -125,17 +145,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 127391657
"startBlock": 135443119
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 127391657
"startBlock": 135443119
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 127391657
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 135443119
}
]
},
@@ -145,17 +165,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 17307202
"startBlock": 25358716
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 17307202
"startBlock": 25358716
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 17307202
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 25358716
}
]
},
@@ -165,17 +185,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 5225214
"startBlock": 12757656
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 5225214
"startBlock": 12757656
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 5225214
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 12757656
}
]
},
@@ -185,17 +205,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 21796660
"startBlock": 29848242
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 21796660
"startBlock": 29848242
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 21796660
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 29848242
}
]
},
@@ -205,17 +225,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 11459722
"startBlock": 18707811
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 11459722
"startBlock": 18707811
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 11459722
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 18707811
}
]
},
@@ -225,17 +245,17 @@
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 7397758
"startBlock": 9604960
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 7397758
"startBlock": 9604960
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 7397758
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
"startBlock": 9604960
}
]
}

View File

@@ -5,6 +5,12 @@ export default {
chainId: 11155111,
explorer: "https://sepolia.etherscan.io"
},
ethereum: {
name: "Ethereum",
url: "https://eth-mainnet.g.alchemy.com/v2/<your-api-key>",
chainId: 1,
explorer: "https://etherscan.io"
},
"arbitrum-sepolia": {
name: "Arbitrum Sepolia",
url: "https://sepolia-rollup.arbitrum.io/rpc",

File diff suppressed because one or more lines are too long

506
yarn.lock
View File

@@ -12,6 +12,13 @@ __metadata:
languageName: node
linkType: hard
"@adraffy/ens-normalize@npm:^1.10.1":
version: 1.11.0
resolution: "@adraffy/ens-normalize@npm:1.11.0"
checksum: 10/abef75f21470ea43dd6071168e092d2d13e38067e349e76186c78838ae174a46c3e18ca50921d05bea6ec3203074147c9e271f8cb6531d1c2c0e146f3199ddcb
languageName: node
linkType: hard
"@algolia/autocomplete-core@npm:1.9.3":
version: 1.9.3
resolution: "@algolia/autocomplete-core@npm:1.9.3"
@@ -4081,6 +4088,15 @@ __metadata:
languageName: node
linkType: hard
"@commander-js/extra-typings@npm:^12.1.0":
version: 12.1.0
resolution: "@commander-js/extra-typings@npm:12.1.0"
peerDependencies:
commander: ~12.1.0
checksum: 10/489ef40dcf18508da5d8db288fa1536e294773b8d07e4c1edee6709972fe4310e3713819ef10bdc1d234615c5cf42df6acf9ddce0b31c6c8114be704fd626971
languageName: node
linkType: hard
"@commitlint/cli@npm:^18.6.1":
version: 18.6.1
resolution: "@commitlint/cli@npm:18.6.1"
@@ -5656,6 +5672,26 @@ __metadata:
languageName: node
linkType: hard
"@inquirer/core@npm:^9.1.0":
version: 9.2.1
resolution: "@inquirer/core@npm:9.2.1"
dependencies:
"@inquirer/figures": "npm:^1.0.6"
"@inquirer/type": "npm:^2.0.0"
"@types/mute-stream": "npm:^0.0.4"
"@types/node": "npm:^22.5.5"
"@types/wrap-ansi": "npm:^3.0.0"
ansi-escapes: "npm:^4.3.2"
cli-width: "npm:^4.1.0"
mute-stream: "npm:^1.0.0"
signal-exit: "npm:^4.1.0"
strip-ansi: "npm:^6.0.1"
wrap-ansi: "npm:^6.2.0"
yoctocolors-cjs: "npm:^2.1.2"
checksum: 10/bf35e46e70add8ffa9e9d4ae6b528ac660484afca082bca31af95ce8a145a2f8c8d0d07cc7a8627771452e68ade9849c9c9c450a004133ed10ac2d6730900452
languageName: node
linkType: hard
"@inquirer/editor@npm:^4.2.3":
version: 4.2.3
resolution: "@inquirer/editor@npm:4.2.3"
@@ -5689,6 +5725,13 @@ __metadata:
languageName: node
linkType: hard
"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6":
version: 1.0.13
resolution: "@inquirer/figures@npm:1.0.13"
checksum: 10/725bdfa08dffa69861fdca57cfccdb8573c2ea95f9803e8bb16f4789fa4290043775c9286c7d810241bd8c1ea938521649fdf8e776a96cf2a701f9d77613f807
languageName: node
linkType: hard
"@inquirer/figures@npm:^1.0.9":
version: 1.0.9
resolution: "@inquirer/figures@npm:1.0.9"
@@ -5696,6 +5739,16 @@ __metadata:
languageName: node
linkType: hard
"@inquirer/input@npm:^2.1.8":
version: 2.3.0
resolution: "@inquirer/input@npm:2.3.0"
dependencies:
"@inquirer/core": "npm:^9.1.0"
"@inquirer/type": "npm:^1.5.3"
checksum: 10/1b6291f49be4e0ba6150b1b9971676cc5aec0271a946b9115975da21c7e32ee8bea6edd7b72689ed403f79f759d12e909920cca44684c02173ad9524de143341
languageName: node
linkType: hard
"@inquirer/input@npm:^4.1.3":
version: 4.1.3
resolution: "@inquirer/input@npm:4.1.3"
@@ -5780,6 +5833,19 @@ __metadata:
languageName: node
linkType: hard
"@inquirer/select@npm:^2.3.4":
version: 2.5.0
resolution: "@inquirer/select@npm:2.5.0"
dependencies:
"@inquirer/core": "npm:^9.1.0"
"@inquirer/figures": "npm:^1.0.5"
"@inquirer/type": "npm:^1.5.3"
ansi-escapes: "npm:^4.3.2"
yoctocolors-cjs: "npm:^2.1.2"
checksum: 10/c47ec8ad1133bd7218d3c62e0fa62ecd2476ac291c87535e37956f47d12e2c1c2e4232fcc7b90de036bfe111bb9071a690d8d6d34b9839eb4c5c236bac309a6e
languageName: node
linkType: hard
"@inquirer/select@npm:^4.0.6":
version: 4.0.6
resolution: "@inquirer/select@npm:4.0.6"
@@ -5795,6 +5861,24 @@ __metadata:
languageName: node
linkType: hard
"@inquirer/type@npm:^1.5.3":
version: 1.5.5
resolution: "@inquirer/type@npm:1.5.5"
dependencies:
mute-stream: "npm:^1.0.0"
checksum: 10/bd3f3d7510785af4ad599e042e99e4be6380f52f79f3db140fe6fed0a605acf27b1a0a20fb5cc688eaf7b8aa0c36dacb1d89c7bba4586f38cbf58ba9f159e7b5
languageName: node
linkType: hard
"@inquirer/type@npm:^2.0.0":
version: 2.0.0
resolution: "@inquirer/type@npm:2.0.0"
dependencies:
mute-stream: "npm:^1.0.0"
checksum: 10/e85f359866c28cce06272d2d51cc17788a5c9de9fda7f181c27775dd26821de0dacbc947b521cfe2009cd2965ec54696799035ef3a25a9a5794e47d8e8bdf794
languageName: node
linkType: hard
"@inquirer/type@npm:^3.0.2":
version: 3.0.2
resolution: "@inquirer/type@npm:3.0.2"
@@ -6491,7 +6575,7 @@ __metadata:
languageName: node
linkType: hard
"@noble/curves@npm:^1.7.0":
"@noble/curves@npm:1.8.1, @noble/curves@npm:^1.6.0, @noble/curves@npm:^1.7.0, @noble/curves@npm:~1.8.1":
version: 1.8.1
resolution: "@noble/curves@npm:1.8.1"
dependencies:
@@ -6521,7 +6605,7 @@ __metadata:
languageName: node
linkType: hard
"@noble/hashes@npm:1.7.1, @noble/hashes@npm:^1.6.1":
"@noble/hashes@npm:1.7.1, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:^1.6.1, @noble/hashes@npm:~1.7.1":
version: 1.7.1
resolution: "@noble/hashes@npm:1.7.1"
checksum: 10/ca3120da0c3e7881d6a481e9667465cc9ebbee1329124fb0de442e56d63fef9870f8cc96f264ebdb18096e0e36cebc0e6e979a872d545deb0a6fed9353f17e05
@@ -7440,6 +7524,13 @@ __metadata:
languageName: node
linkType: hard
"@scure/base@npm:~1.2.2, @scure/base@npm:~1.2.4":
version: 1.2.4
resolution: "@scure/base@npm:1.2.4"
checksum: 10/4b61679209af40143b49ce7b7570e1d9157c19df311ea6f57cd212d764b0b82222dbe3707334f08bec181caf1f047aca31aa91193c678d6548312cb3f9c82ab1
languageName: node
linkType: hard
"@scure/bip32@npm:1.1.5":
version: 1.1.5
resolution: "@scure/bip32@npm:1.1.5"
@@ -7462,6 +7553,17 @@ __metadata:
languageName: node
linkType: hard
"@scure/bip32@npm:1.6.2, @scure/bip32@npm:^1.5.0":
version: 1.6.2
resolution: "@scure/bip32@npm:1.6.2"
dependencies:
"@noble/curves": "npm:~1.8.1"
"@noble/hashes": "npm:~1.7.1"
"@scure/base": "npm:~1.2.2"
checksum: 10/474ee315a8631aa1a7d378b0521b4494e09a231519ec53d879088cb88c8ff644a89b27a02a8bf0b5a9b1c4c0417acc70636ccdb121b800c34594ae53c723f8d7
languageName: node
linkType: hard
"@scure/bip39@npm:1.1.1":
version: 1.1.1
resolution: "@scure/bip39@npm:1.1.1"
@@ -7482,6 +7584,16 @@ __metadata:
languageName: node
linkType: hard
"@scure/bip39@npm:1.5.4, @scure/bip39@npm:^1.4.0":
version: 1.5.4
resolution: "@scure/bip39@npm:1.5.4"
dependencies:
"@noble/hashes": "npm:~1.7.1"
"@scure/base": "npm:~1.2.4"
checksum: 10/9f08b433511d7637bc48c51aa411457d5f33da5a85bd03370bf394822b0ea8c007ceb17247a3790c28237303d8fc20c4e7725765940cd47e1365a88319ad0d5c
languageName: node
linkType: hard
"@semaphore-protocol/circuits@workspace:packages/circuits":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/circuits@workspace:packages/circuits"
@@ -7489,8 +7601,8 @@ __metadata:
"@semaphore-protocol/core": "workspace:^"
"@types/mocha": "npm:^10.0.6"
"@zk-kit/baby-jubjub": "npm:1.0.3"
"@zk-kit/binary-merkle-root.circom": "npm:1.0.0"
circomkit: "npm:0.0.19"
"@zk-kit/binary-merkle-root.circom": "npm:2.0.0"
circomkit: "npm:0.3.3"
circomlib: "npm:2.0.5"
mocha: "npm:^10.2.0"
poseidon-lite: "npm:^0.3.0"
@@ -7501,8 +7613,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "@semaphore-protocol/cli-template-contracts-foundry@workspace:packages/cli-template-contracts-foundry"
dependencies:
"@semaphore-protocol/contracts": "npm:4.9.1"
"@zk-kit/lean-imt.sol": "npm:2.0.0"
"@semaphore-protocol/contracts": "npm:4.13.0"
"@zk-kit/lean-imt.sol": "npm:2.0.1"
forge-std: "github:foundry-rs/forge-std#v1.9.4"
poseidon-solidity: "npm:0.0.5"
prettier: "npm:^3.2.5"
@@ -7521,10 +7633,10 @@ __metadata:
"@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0"
"@nomicfoundation/hardhat-toolbox": "npm:^4.0.0"
"@nomicfoundation/hardhat-verify": "npm:^2.0.0"
"@semaphore-protocol/contracts": "npm:4.9.1"
"@semaphore-protocol/core": "npm:4.9.1"
"@semaphore-protocol/hardhat": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/contracts": "npm:4.13.0"
"@semaphore-protocol/core": "npm:4.13.0"
"@semaphore-protocol/hardhat": "npm:4.13.0"
"@semaphore-protocol/utils": "npm:4.13.0"
"@typechain/ethers-v6": "npm:^0.5.0"
"@typechain/hardhat": "npm:^9.0.0"
"@types/chai": "npm:^4.2.0"
@@ -7574,8 +7686,8 @@ __metadata:
resolution: "@semaphore-protocol/cli@workspace:packages/cli"
dependencies:
"@rollup/plugin-typescript": "npm:^11.1.6"
"@semaphore-protocol/data": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/data": "npm:4.13.0"
"@semaphore-protocol/utils": "npm:4.13.0"
"@types/figlet": "npm:^1.5.8"
"@types/inquirer": "npm:^9.0.7"
"@types/pacote": "npm:^11.1.8"
@@ -7599,46 +7711,47 @@ __metadata:
languageName: unknown
linkType: soft
"@semaphore-protocol/contracts@npm:4.9.1, @semaphore-protocol/contracts@workspace:packages/contracts/contracts":
"@semaphore-protocol/contracts@npm:4.13.0, @semaphore-protocol/contracts@workspace:packages/contracts/contracts":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/contracts@workspace:packages/contracts/contracts"
dependencies:
"@zk-kit/lean-imt.sol": "npm:2.0.0"
"@zk-kit/lean-imt.sol": "npm:2.0.1"
languageName: unknown
linkType: soft
"@semaphore-protocol/core@npm:4.9.1, @semaphore-protocol/core@workspace:^, @semaphore-protocol/core@workspace:packages/core":
"@semaphore-protocol/core@npm:4.13.0, @semaphore-protocol/core@workspace:^, @semaphore-protocol/core@workspace:packages/core":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/core@workspace:packages/core"
dependencies:
"@semaphore-protocol/group": "npm:4.9.1"
"@semaphore-protocol/identity": "npm:4.9.1"
"@semaphore-protocol/proof": "npm:4.9.1"
"@semaphore-protocol/group": "npm:4.13.0"
"@semaphore-protocol/identity": "npm:4.13.0"
"@semaphore-protocol/proof": "npm:4.13.0"
languageName: unknown
linkType: soft
"@semaphore-protocol/data@npm:4.9.1, @semaphore-protocol/data@workspace:packages/data":
"@semaphore-protocol/data@npm:4.13.0, @semaphore-protocol/data@workspace:packages/data":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/data@workspace:packages/data"
dependencies:
"@rollup/plugin-json": "npm:^6.1.0"
"@rollup/plugin-typescript": "npm:^11.1.6"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.13.0"
"@zk-kit/utils": "npm:1.3.0"
axios: "npm:1.6.6"
ethers: "npm:6.13.4"
rimraf: "npm:^5.0.5"
rollup: "npm:^4.12.0"
rollup-plugin-cleanup: "npm:^3.2.1"
viem: "npm:2.23.7"
languageName: unknown
linkType: soft
"@semaphore-protocol/group@npm:4.9.1, @semaphore-protocol/group@workspace:packages/group":
"@semaphore-protocol/group@npm:4.13.0, @semaphore-protocol/group@workspace:packages/group":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/group@workspace:packages/group"
dependencies:
"@rollup/plugin-typescript": "npm:^11.1.6"
"@zk-kit/lean-imt": "npm:2.2.3"
"@zk-kit/lean-imt": "npm:2.2.4"
"@zk-kit/utils": "npm:1.3.0"
poseidon-lite: "npm:0.3.0"
rimraf: "npm:^5.0.5"
@@ -7647,13 +7760,13 @@ __metadata:
languageName: unknown
linkType: soft
"@semaphore-protocol/hardhat@npm:4.9.1, @semaphore-protocol/hardhat@workspace:packages/hardhat":
"@semaphore-protocol/hardhat@npm:4.13.0, @semaphore-protocol/hardhat@workspace:packages/hardhat":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/hardhat@workspace:packages/hardhat"
dependencies:
"@nomicfoundation/hardhat-ethers": "npm:^3.0.0"
"@rollup/plugin-typescript": "npm:^11.1.6"
"@semaphore-protocol/contracts": "npm:4.9.1"
"@semaphore-protocol/contracts": "npm:4.13.0"
ethers: "npm:^6.13.4"
hardhat: "npm:^2.19.4"
hardhat-dependency-compiler: "npm:^1.1.3"
@@ -7665,7 +7778,7 @@ __metadata:
languageName: unknown
linkType: soft
"@semaphore-protocol/identity@npm:4.9.1, @semaphore-protocol/identity@workspace:packages/identity":
"@semaphore-protocol/identity@npm:4.13.0, @semaphore-protocol/identity@workspace:packages/identity":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/identity@workspace:packages/identity"
dependencies:
@@ -7681,29 +7794,29 @@ __metadata:
languageName: unknown
linkType: soft
"@semaphore-protocol/proof@npm:4.9.1, @semaphore-protocol/proof@workspace:packages/proof":
"@semaphore-protocol/proof@npm:4.13.0, @semaphore-protocol/proof@workspace:packages/proof":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/proof@workspace:packages/proof"
dependencies:
"@rollup/plugin-alias": "npm:^5.1.0"
"@rollup/plugin-json": "npm:^6.1.0"
"@rollup/plugin-typescript": "npm:^11.1.6"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.13.0"
"@types/snarkjs": "npm:^0"
"@zk-kit/artifacts": "npm:1.8.0"
"@zk-kit/artifacts": "npm:2.0.1"
"@zk-kit/utils": "npm:1.3.0"
ethers: "npm:6.13.4"
rimraf: "npm:^5.0.5"
rollup: "npm:^4.12.0"
rollup-plugin-cleanup: "npm:^3.2.1"
snarkjs: "npm:0.7.4"
snarkjs: "npm:0.7.5"
peerDependencies:
"@semaphore-protocol/group": 4.9.1
"@semaphore-protocol/identity": 4.9.1
"@semaphore-protocol/group": 4.13.0
"@semaphore-protocol/identity": 4.13.0
languageName: unknown
linkType: soft
"@semaphore-protocol/utils@npm:4.9.1, @semaphore-protocol/utils@workspace:packages/utils":
"@semaphore-protocol/utils@npm:4.13.0, @semaphore-protocol/utils@workspace:packages/utils":
version: 0.0.0-use.local
resolution: "@semaphore-protocol/utils@workspace:packages/utils"
dependencies:
@@ -8827,6 +8940,15 @@ __metadata:
languageName: node
linkType: hard
"@types/mute-stream@npm:^0.0.4":
version: 0.0.4
resolution: "@types/mute-stream@npm:0.0.4"
dependencies:
"@types/node": "npm:*"
checksum: 10/af8d83ad7b68ea05d9357985daf81b6c9b73af4feacb2f5c2693c7fd3e13e5135ef1bd083ce8d5bdc8e97acd28563b61bb32dec4e4508a8067fcd31b8a098632
languageName: node
linkType: hard
"@types/ncp@npm:^2":
version: 2.0.8
resolution: "@types/ncp@npm:2.0.8"
@@ -8893,6 +9015,15 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:^22.5.5":
version: 22.16.5
resolution: "@types/node@npm:22.16.5"
dependencies:
undici-types: "npm:~6.21.0"
checksum: 10/ba45b5c9113cbc5edb12960fcfe7e80db2c998af5c1931264240695b27d756570d92462150b95781bd67a03aa82111cc970ab0f4504eb99213edff8bf425354e
languageName: node
linkType: hard
"@types/node@npm:^8.0.0":
version: 8.10.66
resolution: "@types/node@npm:8.10.66"
@@ -9211,6 +9342,13 @@ __metadata:
languageName: node
linkType: hard
"@types/wrap-ansi@npm:^3.0.0":
version: 3.0.0
resolution: "@types/wrap-ansi@npm:3.0.0"
checksum: 10/8aa644946ca4e859668c36b8e2bcf2ac4bdee59dac760414730ea57be8a93ae9166ebd40a088f2ab714843aaea2a2a67f0e6e6ec11cfc9c8701b2466ca1c4089
languageName: node
linkType: hard
"@types/ws@npm:^7.4.4":
version: 7.4.7
resolution: "@types/ws@npm:7.4.7"
@@ -9715,10 +9853,19 @@ __metadata:
languageName: node
linkType: hard
"@zk-kit/artifacts@npm:1.8.0":
version: 1.8.0
resolution: "@zk-kit/artifacts@npm:1.8.0"
checksum: 10/f2eedd395d1662dc77780366edbbfbb9e543a82880dccfdc39dbf412010b65dabce9a64903218e64b9059fe7d9c02214e0f7817250a7ff4342836353d75d02dd
"@zk-kit/artifacts@npm:2.0.1":
version: 2.0.1
resolution: "@zk-kit/artifacts@npm:2.0.1"
dependencies:
"@commander-js/extra-typings": "npm:^12.1.0"
"@inquirer/input": "npm:^2.1.8"
"@inquirer/select": "npm:^2.3.4"
circomkit: "npm:^0.2.1"
ora: "npm:^5.4.1"
snarkjs: "npm:^0.7.4"
bin:
snarkli: dist/cli/index.js
checksum: 10/d579eefaedd178934a215e06bfbf02174f0926d96b1f0285eef652be05cde0743a56142ced8e99effb71ed63a8977c6e12d5808956c725dd499950f768cb363a
languageName: node
linkType: hard
@@ -9731,12 +9878,12 @@ __metadata:
languageName: node
linkType: hard
"@zk-kit/binary-merkle-root.circom@npm:1.0.0":
version: 1.0.0
resolution: "@zk-kit/binary-merkle-root.circom@npm:1.0.0"
"@zk-kit/binary-merkle-root.circom@npm:2.0.0":
version: 2.0.0
resolution: "@zk-kit/binary-merkle-root.circom@npm:2.0.0"
dependencies:
circomlib: "npm:^2.0.5"
checksum: 10/3b3ab45b1bdb404b47ad1aef193b96490ad795fb31c2c3532f4b28198d305dd1ad409ba243feb4fa363ef83c5dfdd372728c5be6e3a02c633d6a2e0eb4458e39
checksum: 10/e26eaf1553263475c91220124985ea82f8f57c64dd611188427d6bedaaaed14b05f44760af8bf89cd2cbbdca5b54f06108cdd9a335a6e26617887a9e2e42be43
languageName: node
linkType: hard
@@ -9752,21 +9899,21 @@ __metadata:
languageName: node
linkType: hard
"@zk-kit/lean-imt.sol@npm:2.0.0":
version: 2.0.0
resolution: "@zk-kit/lean-imt.sol@npm:2.0.0"
"@zk-kit/lean-imt.sol@npm:2.0.1":
version: 2.0.1
resolution: "@zk-kit/lean-imt.sol@npm:2.0.1"
dependencies:
poseidon-solidity: "npm:0.0.5"
checksum: 10/094a1788905c380ed5c767184938d3aa0d0b3ba8ad92e8d6efae1243e4d15103484ec1224163ae7d0c43e0095ae19f28e41a7877d37398ff60dcadbf1eb27a77
checksum: 10/debfd6caa46c6b4ff5dfa9a98d50656311ed5ba999417ae23f1b279c1c171d722de9b396bfbbf56705e7041bc3cc4f7d579f97653c97544fd160a834c1e427dd
languageName: node
linkType: hard
"@zk-kit/lean-imt@npm:2.2.3":
version: 2.2.3
resolution: "@zk-kit/lean-imt@npm:2.2.3"
"@zk-kit/lean-imt@npm:2.2.4":
version: 2.2.4
resolution: "@zk-kit/lean-imt@npm:2.2.4"
dependencies:
"@zk-kit/utils": "npm:1.3.0"
checksum: 10/a651d9d3030a91f77d9fe3d781383776f9189d2f2d8d4d27b1692e6ea5522f7b81d6baeae2fbd6c41878bc66700ab358074bbd9d5bac109d4114138066312a05
"@zk-kit/utils": "npm:1.4.1"
checksum: 10/032f30b62e561a6bd1e1bf8ad79ead6a0a4c80f0182361d8ff3d19a7818b3c2569831be3712fb9ec9f96c18bdc35c226511481f64bec57057765f7b6a87b3e9f
languageName: node
linkType: hard
@@ -9788,6 +9935,16 @@ __metadata:
languageName: node
linkType: hard
"@zk-kit/utils@npm:1.4.1":
version: 1.4.1
resolution: "@zk-kit/utils@npm:1.4.1"
dependencies:
buffer: "npm:^6.0.3"
ethers: "npm:6.13.5"
checksum: 10/8646a5fedda24d9175f1c663c3346d4d15169367134977de61035445a3122d54eb9c1521887ee4be2e1c319e4d0ba8a6b6e81c6148738099ca482b2c9b188325
languageName: node
linkType: hard
"JSONStream@npm:^1.3.5":
version: 1.3.5
resolution: "JSONStream@npm:1.3.5"
@@ -9834,6 +9991,21 @@ __metadata:
languageName: node
linkType: hard
"abitype@npm:1.0.8, abitype@npm:^1.0.6":
version: 1.0.8
resolution: "abitype@npm:1.0.8"
peerDependencies:
typescript: ">=5.0.4"
zod: ^3 >=3.22.0
peerDependenciesMeta:
typescript:
optional: true
zod:
optional: true
checksum: 10/878e74fbac6a971953649b6216950437aa5834a604e9fa833a5b275a6967cff59857c7e43594ae906387d2fb7cad9370138dec4298eb8814815a3ffb6365902c
languageName: node
linkType: hard
"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8":
version: 1.3.8
resolution: "accepts@npm:1.3.8"
@@ -11564,21 +11736,6 @@ __metadata:
languageName: node
linkType: hard
"chai@npm:^4.3.7":
version: 4.5.0
resolution: "chai@npm:4.5.0"
dependencies:
assertion-error: "npm:^1.1.0"
check-error: "npm:^1.0.3"
deep-eql: "npm:^4.1.3"
get-func-name: "npm:^2.0.2"
loupe: "npm:^2.3.6"
pathval: "npm:^1.1.1"
type-detect: "npm:^4.1.0"
checksum: 10/cde341aee15b0a51559c7cfc20788dcfb4d586a498cfb93b937bb568fd45c777b73b1461274be6092b6bf868adb4e3a63f3fec13c89f7d8fb194f84c6fa42d5f
languageName: node
linkType: hard
"chalk@npm:5.3.0, chalk@npm:^5.0.0, chalk@npm:^5.0.1, chalk@npm:^5.2.0, chalk@npm:^5.3.0":
version: 5.3.0
resolution: "chalk@npm:5.3.0"
@@ -11894,14 +12051,14 @@ __metadata:
languageName: node
linkType: hard
"circom_runtime@npm:0.1.25":
version: 0.1.25
resolution: "circom_runtime@npm:0.1.25"
"circom_runtime@npm:0.1.28":
version: 0.1.28
resolution: "circom_runtime@npm:0.1.28"
dependencies:
ffjavascript: "npm:0.3.0"
ffjavascript: "npm:0.3.1"
bin:
calcwit: calcwit.js
checksum: 10/aebb1398df621524a84b4c067661943d8d42894856f4947f61f4768954f1143c9fbba76c3a7e9d805175b94e1ac997accbe46fbf67d08ff618062dfcec2737b1
checksum: 10/c2ee10286c4e43c875ae3ba677f0f8df58016ab56ae8073fd82f382af6aa601b942036ef6f785f8614667a6323047ccac62c3e11bf41dbe56588e035233971ca
languageName: node
linkType: hard
@@ -11921,17 +12078,35 @@ __metadata:
languageName: node
linkType: hard
"circomkit@npm:0.0.19":
version: 0.0.19
resolution: "circomkit@npm:0.0.19"
"circomkit@npm:0.3.3":
version: 0.3.3
resolution: "circomkit@npm:0.3.3"
dependencies:
chai: "npm:^4.3.7"
circom_tester: "npm:^0.0.19"
loglevel: "npm:^1.8.1"
snarkjs: "npm:^0.7.0"
commander: "npm:^12.1.0"
loglevel: "npm:^1.9.2"
peerDependencies:
"@types/snarkjs": ^0.7.x
snarkjs: ^0.7.x
bin:
circomkit: dist/bin/index.js
checksum: 10/eaed7b3494d1269c4fa347e9eeef2efb8e119870e14a06b1adeca5b0d58c60d05730f23d9b5aa4bc917ee482ebb13334098b0a8d5a1ada27b3b0f18b42b2f5dc
circomkit: dist/cli.js
checksum: 10/c9509c7b64da8d05677ccd409185d0572a09117c9a43e28b0ca0d12a80847fa84db5b7e72af2d68f531b8e38446b3ade5cd16ed63af3590e5a2e759d19aae02b
languageName: node
linkType: hard
"circomkit@npm:^0.2.1":
version: 0.2.1
resolution: "circomkit@npm:0.2.1"
dependencies:
circom_tester: "npm:^0.0.19"
commander: "npm:^12.0.0"
loglevel: "npm:^1.8.1"
peerDependencies:
"@types/snarkjs": ^0.7.x
snarkjs: ^0.7.x
bin:
circomkit: dist/cli.js
checksum: 10/c5a0c50b66a3e5cdb4136234a95bbebecdc0b38cb37e669a65dd05444a5f9b4f8c77edc3b632d834d47eb1c0e08964e8e7bdbb59f880c7dd1b90893ea28cbb6a
languageName: node
linkType: hard
@@ -12326,7 +12501,7 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:^12.0.0":
"commander@npm:^12.0.0, commander@npm:^12.1.0":
version: 12.1.0
resolution: "commander@npm:12.1.0"
checksum: 10/cdaeb672d979816853a4eed7f1310a9319e8b976172485c2a6b437ed0db0a389a44cfb222bfbde772781efa9f215bdd1b936f80d6b249485b465c6cb906e1f93
@@ -15051,6 +15226,21 @@ __metadata:
languageName: node
linkType: hard
"ethers@npm:6.13.5":
version: 6.13.5
resolution: "ethers@npm:6.13.5"
dependencies:
"@adraffy/ens-normalize": "npm:1.10.1"
"@noble/curves": "npm:1.2.0"
"@noble/hashes": "npm:1.3.2"
"@types/node": "npm:22.7.5"
aes-js: "npm:4.0.0-beta.5"
tslib: "npm:2.7.0"
ws: "npm:8.17.1"
checksum: 10/ccba21a83679fb6a7c3eb9d187593501565d140064f2db28057a64d6707678bacf2adf4555882c4814688246da73173560df81fd3361fd2f227b5d3c75cb8685
languageName: node
linkType: hard
"ethers@npm:^5.7.2":
version: 5.7.2
resolution: "ethers@npm:5.7.2"
@@ -15119,6 +15309,13 @@ __metadata:
languageName: node
linkType: hard
"eventemitter3@npm:5.0.1, eventemitter3@npm:^5.0.1":
version: 5.0.1
resolution: "eventemitter3@npm:5.0.1"
checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5
languageName: node
linkType: hard
"eventemitter3@npm:^4.0.0":
version: 4.0.7
resolution: "eventemitter3@npm:4.0.7"
@@ -15126,13 +15323,6 @@ __metadata:
languageName: node
linkType: hard
"eventemitter3@npm:^5.0.1":
version: 5.0.1
resolution: "eventemitter3@npm:5.0.1"
checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5
languageName: node
linkType: hard
"events@npm:^3.2.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
@@ -15490,6 +15680,17 @@ __metadata:
languageName: node
linkType: hard
"ffjavascript@npm:0.3.1":
version: 0.3.1
resolution: "ffjavascript@npm:0.3.1"
dependencies:
wasmbuilder: "npm:0.0.16"
wasmcurves: "npm:0.2.2"
web-worker: "npm:1.2.0"
checksum: 10/6b1a82a872cc80638b5e42c167817a88599940938eec80107dc45fb07ff0407cefc6d019c533e2b544e6ebce2fb1a94709cf39228b5fe9de80b750a9cc23ac8b
languageName: node
linkType: hard
"ffjavascript@npm:^0.2.48, ffjavascript@npm:^0.2.56":
version: 0.2.63
resolution: "ffjavascript@npm:0.2.63"
@@ -18434,6 +18635,15 @@ __metadata:
languageName: node
linkType: hard
"isows@npm:1.0.6":
version: 1.0.6
resolution: "isows@npm:1.0.6"
peerDependencies:
ws: "*"
checksum: 10/ab9e85b50bcc3d70aa5ec875aa2746c5daf9321cb376ed4e5434d3c2643c5d62b1f466d93a05cd2ad0ead5297224922748c31707cb4fbd68f5d05d0479dce99c
languageName: node
linkType: hard
"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0":
version: 3.2.2
resolution: "istanbul-lib-coverage@npm:3.2.2"
@@ -19941,10 +20151,10 @@ __metadata:
languageName: node
linkType: hard
"loglevel@npm:^1.8.1":
version: 1.9.1
resolution: "loglevel@npm:1.9.1"
checksum: 10/863cbbcddf850a937482c604e2d11586574a5110b746bb49c7cc04739e01f6035f6db841d25377106dd330bca7142d74995f15a97c5f3ea0af86d9472d4a99f4
"loglevel@npm:^1.8.1, loglevel@npm:^1.9.2":
version: 1.9.2
resolution: "loglevel@npm:1.9.2"
checksum: 10/6153d8db308323f7ee20130bc40309e7a976c30a10379d8666b596d9c6441965c3e074c8d7ee3347fe5cfc059c0375b6f3e8a10b93d5b813cc5547f5aa412a29
languageName: node
linkType: hard
@@ -21511,10 +21721,10 @@ __metadata:
"@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0"
"@nomicfoundation/hardhat-toolbox": "npm:^4.0.0"
"@nomicfoundation/hardhat-verify": "npm:^2.0.0"
"@semaphore-protocol/contracts": "npm:4.9.1"
"@semaphore-protocol/core": "npm:4.9.1"
"@semaphore-protocol/hardhat": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/contracts": "npm:4.13.0"
"@semaphore-protocol/core": "npm:4.13.0"
"@semaphore-protocol/hardhat": "npm:4.13.0"
"@semaphore-protocol/utils": "npm:4.13.0"
"@typechain/ethers-v6": "npm:^0.5.0"
"@typechain/hardhat": "npm:^9.0.0"
"@types/chai": "npm:^4.2.0"
@@ -21547,9 +21757,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "monorepo-ethers-web-app@workspace:packages/cli-template-monorepo-ethers/apps/web-app"
dependencies:
"@semaphore-protocol/core": "npm:4.9.1"
"@semaphore-protocol/data": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/core": "npm:4.13.0"
"@semaphore-protocol/data": "npm:4.13.0"
"@semaphore-protocol/utils": "npm:4.13.0"
"@types/node": "npm:^20"
"@types/react": "npm:^18"
"@types/react-dom": "npm:^18"
@@ -21574,10 +21784,10 @@ __metadata:
"@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0"
"@nomicfoundation/hardhat-toolbox": "npm:^4.0.0"
"@nomicfoundation/hardhat-verify": "npm:^2.0.0"
"@semaphore-protocol/contracts": "npm:4.9.1"
"@semaphore-protocol/core": "npm:4.9.1"
"@semaphore-protocol/hardhat": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/contracts": "npm:4.13.0"
"@semaphore-protocol/core": "npm:4.13.0"
"@semaphore-protocol/hardhat": "npm:4.13.0"
"@semaphore-protocol/utils": "npm:4.13.0"
"@typechain/ethers-v6": "npm:^0.5.0"
"@typechain/hardhat": "npm:^9.0.0"
"@types/chai": "npm:^4.2.0"
@@ -21610,9 +21820,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "monorepo-subgraph-web-app@workspace:packages/cli-template-monorepo-subgraph/apps/web-app"
dependencies:
"@semaphore-protocol/core": "npm:4.9.1"
"@semaphore-protocol/data": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/core": "npm:4.13.0"
"@semaphore-protocol/data": "npm:4.13.0"
"@semaphore-protocol/utils": "npm:4.13.0"
"@types/node": "npm:^20"
"@types/react": "npm:^18"
"@types/react-dom": "npm:^18"
@@ -21705,7 +21915,7 @@ __metadata:
languageName: node
linkType: hard
"mute-stream@npm:1.0.0":
"mute-stream@npm:1.0.0, mute-stream@npm:^1.0.0":
version: 1.0.0
resolution: "mute-stream@npm:1.0.0"
checksum: 10/36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7
@@ -22571,6 +22781,26 @@ __metadata:
languageName: node
linkType: hard
"ox@npm:0.6.7":
version: 0.6.7
resolution: "ox@npm:0.6.7"
dependencies:
"@adraffy/ens-normalize": "npm:^1.10.1"
"@noble/curves": "npm:^1.6.0"
"@noble/hashes": "npm:^1.5.0"
"@scure/bip32": "npm:^1.5.0"
"@scure/bip39": "npm:^1.4.0"
abitype: "npm:^1.0.6"
eventemitter3: "npm:5.0.1"
peerDependencies:
typescript: ">=5.4.0"
peerDependenciesMeta:
typescript:
optional: true
checksum: 10/442fb31e1afb68922bf942025930d8cd6d8c677696e9a6de308008b3608669f22127cadbc0f77181e012d23d7b74318e5f85e63b06b16eecbc887d7fac32a6dc
languageName: node
linkType: hard
"p-cancelable@npm:^3.0.0":
version: 3.0.0
resolution: "p-cancelable@npm:3.0.0"
@@ -26073,7 +26303,7 @@ __metadata:
"@types/mocha": "npm:^10.0.6"
"@types/ncp": "npm:^2"
"@types/node": "npm:^20.10.7"
"@zk-kit/lean-imt.sol": "npm:2.0.0"
"@zk-kit/lean-imt.sol": "npm:2.0.1"
chai: "npm:^4.2.0"
ethers: "npm:^6.13.4"
hardhat: "npm:^2.19.4"
@@ -26098,7 +26328,7 @@ __metadata:
"@docusaurus/preset-classic": "npm:3.5.2"
"@docusaurus/tsconfig": "npm:3.5.2"
"@mdx-js/react": "npm:^3.0.0"
"@semaphore-protocol/utils": "npm:4.9.1"
"@semaphore-protocol/utils": "npm:4.13.0"
"@svgr/webpack": "npm:^5.5.0"
"@types/react": "npm:^18.2.29"
clsx: "npm:^1.2.1"
@@ -26150,7 +26380,7 @@ __metadata:
prettier: "npm:^3.2.5"
rimraf: "npm:^5.0.5"
semver: "npm:^7.6.2"
snarkjs: "npm:0.7.4"
snarkjs: "npm:0.7.5"
ts-jest: "npm:^29.1.2"
ts-node: "npm:^10.9.2"
tslib: "npm:^2.6.2"
@@ -26655,23 +26885,23 @@ __metadata:
languageName: node
linkType: hard
"snarkjs@npm:0.7.4, snarkjs@npm:^0.7.0":
version: 0.7.4
resolution: "snarkjs@npm:0.7.4"
"snarkjs@npm:0.7.5, snarkjs@npm:^0.7.4":
version: 0.7.5
resolution: "snarkjs@npm:0.7.5"
dependencies:
"@iden3/binfileutils": "npm:0.0.12"
bfj: "npm:^7.0.2"
blake2b-wasm: "npm:^2.4.0"
circom_runtime: "npm:0.1.25"
circom_runtime: "npm:0.1.28"
ejs: "npm:^3.1.6"
fastfile: "npm:0.0.20"
ffjavascript: "npm:0.3.0"
ffjavascript: "npm:0.3.1"
js-sha3: "npm:^0.8.0"
logplease: "npm:^1.2.15"
r1csfile: "npm:0.0.48"
bin:
snarkjs: build/cli.cjs
checksum: 10/aaebcf57e11a36dc1ea77742a5062d67fcaa24bad37bc6532d9aaefc71ad302c4a65bd05cabb6ac893f3329e09f193d9cbd2a20053f8d5074e3864d933323e05
checksum: 10/82f963e39ce77faa07a8d87390b38a9e709f5bd5db0f3893d97a4567870dc15dfad12a266963000d2bd4974732e666631e752492c1379eaf7796e27ea957e3db
languageName: node
linkType: hard
@@ -28195,13 +28425,6 @@ __metadata:
languageName: node
linkType: hard
"type-detect@npm:^4.1.0":
version: 4.1.0
resolution: "type-detect@npm:4.1.0"
checksum: 10/e363bf0352427a79301f26a7795a27718624c49c576965076624eb5495d87515030b207217845f7018093adcbe169b2d119bb9b7f1a31a92bfbb1ab9639ca8dd
languageName: node
linkType: hard
"type-fest@npm:^0.16.0":
version: 0.16.0
resolution: "type-fest@npm:0.16.0"
@@ -28536,6 +28759,13 @@ __metadata:
languageName: node
linkType: hard
"undici-types@npm:~6.21.0":
version: 6.21.0
resolution: "undici-types@npm:6.21.0"
checksum: 10/ec8f41aa4359d50f9b59fa61fe3efce3477cc681908c8f84354d8567bb3701fafdddf36ef6bff307024d3feb42c837cf6f670314ba37fc8145e219560e473d14
languageName: node
linkType: hard
"undici@npm:7.2.3":
version: 7.2.3
resolution: "undici@npm:7.2.3"
@@ -29125,6 +29355,27 @@ __metadata:
languageName: node
linkType: hard
"viem@npm:2.23.7":
version: 2.23.7
resolution: "viem@npm:2.23.7"
dependencies:
"@noble/curves": "npm:1.8.1"
"@noble/hashes": "npm:1.7.1"
"@scure/bip32": "npm:1.6.2"
"@scure/bip39": "npm:1.5.4"
abitype: "npm:1.0.8"
isows: "npm:1.0.6"
ox: "npm:0.6.7"
ws: "npm:8.18.0"
peerDependencies:
typescript: ">=5.0.4"
peerDependenciesMeta:
typescript:
optional: true
checksum: 10/bf1618f39ca3645082323776342c0f87fa37f60bcca0476a7db0f6fbb9d1b6db7ab1e434a57463e8486bea29f97c5ab01e95b6139190a008d6f9a30194b7b081
languageName: node
linkType: hard
"vscode-oniguruma@npm:^1.7.0":
version: 1.7.0
resolution: "vscode-oniguruma@npm:1.7.0"
@@ -30022,6 +30273,21 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:8.18.0":
version: 8.18.0
resolution: "ws@npm:8.18.0"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6
languageName: node
linkType: hard
"ws@npm:^7.3.1, ws@npm:^7.4.6":
version: 7.5.9
resolution: "ws@npm:7.5.9"