bbe6df07-a5d0-437c-95c1-fe533e32b67d
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30639 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74830 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 74831 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74832 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74833 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74834 | detector.run | complete | 1 / 3 | 1 week ago |
| 74835 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1372309] OpenAI Codex v0.77.0 (research preview)
[codex:1372309] --------
[codex:1372309] workdir: /tmp/codex-multi-tazl1dlt
[codex:1372309] model: gpt-5.2-codex
[codex:1372309] provider: openai
[codex:1372309] approval: never
[codex:1372309] sandbox: read-only
[codex:1372309] reasoning effort: xhigh
[codex:1372309] reasoning summaries: auto
[codex:1372309] session id: 019b6cbf-0043-74c3-ab71-86704f1659e6
[codex:1372309] --------
[codex:1372309] user
[codex:1372309] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1372309] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1372309] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1372309]
[codex:1372309] Scope rules:
[codex:1372309] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1372309] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1372309]
[codex:1372309] Output MUST be valid JSON matching the provided schema.
[codex:1372309] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1372309] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1372309]
[codex:1372309] Output constraints (IMPORTANT):
[codex:1372309] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1372309] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1372309] mcp startup: no servers
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Preparing to read audit bundle**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc ls in /tmp/codex-multi-tazl1dlt succeeded in 6ms:
[codex:1372309] AUDIT_BUNDLE.txt
[codex:1372309] codex-output-schema.json
[codex:1372309] contracts
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Reading AUDIT_BUNDLE.txt**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-tazl1dlt succeeded in 6ms:
[codex:1372309] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1372309]
[codex:1372309] ================================================================================
[codex:1372309] FILE: contracts/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol
[codex:1372309] ================================================================================
[codex:1372309] // SPDX-License-Identifier: MIT
[codex:1372309] // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)
[codex:1372309]
[codex:1372309] pragma solidity ^0.8.20;
[codex:1372309]
[codex:1372309] import {IERC20} from "./IERC20.sol";
[codex:1372309] import {IERC165} from "./IERC165.sol";
[codex:1372309]
[codex:1372309] /**
[codex:1372309] * @title IERC1363
[codex:1372309] * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
[codex:1372309] *
[codex:1372309] * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
[codex:1372309] * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
[codex:1372309] */
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Scanning audit bundle for first-party contracts**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc 'rg -n "''^FILE: " AUDIT_BUNDLE.txt' in /tmp/codex-multi-tazl1dlt succeeded in 7ms:
[codex:1372309] 4:FILE: contracts/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol
[codex:1372309] 94:FILE: contracts/node_modules/@openzeppelin/contracts/interfaces/IERC165.sol
[codex:1372309] 104:FILE: contracts/node_modules/@openzeppelin/contracts/interfaces/IERC20.sol
[codex:1372309] 114:FILE: contracts/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1372309] 197:FILE: contracts/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
[codex:1372309] 400:FILE: contracts/node_modules/@openzeppelin/contracts/utils/Address.sol
[codex:1372309] 554:FILE: contracts/node_modules/@openzeppelin/contracts/utils/Errors.sol
[codex:1372309] 592:FILE: contracts/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol
[codex:1372309] 621:FILE: contracts/src/contracts/PrivacyPool.sol
[codex:1372309] 811:FILE: contracts/src/contracts/State.sol
[codex:1372309] 998:FILE: contracts/src/contracts/implementations/PrivacyPoolComplex.sol
[codex:1372309] 1070:FILE: contracts/src/contracts/lib/Constants.sol
[codex:1372309] 1083:FILE: contracts/src/contracts/lib/ProofLib.sol
[codex:1372309] 1254:FILE: contracts/src/interfaces/IEntrypoint.sol
[codex:1372309] 1649:FILE: contracts/src/interfaces/IPrivacyPool.sol
[codex:1372309] 1851:FILE: contracts/src/interfaces/IState.sol
[codex:1372309] 2022:FILE: contracts/src/interfaces/IVerifier.sol
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Preparing to review key Solidity files**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc "sed -n '621,997p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-tazl1dlt succeeded in 5ms:
[codex:1372309] FILE: contracts/src/contracts/PrivacyPool.sol
[codex:1372309] ================================================================================
[codex:1372309] // SPDX-License-Identifier: Apache-2.0
[codex:1372309] pragma solidity 0.8.28;
[codex:1372309]
[codex:1372309] /*
[codex:1372309]
[codex:1372309] Made with ♥ for 0xBow by
[codex:1372309]
[codex:1372309] ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░
[codex:1372309] ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗
[codex:1372309] ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║
[codex:1372309] ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║
[codex:1372309] ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝
[codex:1372309] ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░
[codex:1372309]
[codex:1372309] https://defi.sucks/
[codex:1372309]
[codex:1372309] */
[codex:1372309]
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Continuing to review files**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc "sed -n '998,1253p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-tazl1dlt succeeded in 5ms:
[codex:1372309] FILE: contracts/src/contracts/implementations/PrivacyPoolComplex.sol
[codex:1372309] ================================================================================
[codex:1372309] // SPDX-License-Identifier: Apache-2.0
[codex:1372309] pragma solidity 0.8.28;
[codex:1372309]
[codex:1372309] /*
[codex:1372309]
[codex:1372309] Made with ♥ for 0xBow by
[codex:1372309]
[codex:1372309] ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░
[codex:1372309] ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗
[codex:1372309] ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║
[codex:1372309] ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║
[codex:1372309] ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝
[codex:1372309] ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░
[codex:1372309]
[codex:1372309] https://defi.sucks/
[codex:1372309]
[codex:1372309] */
[codex:1372309]
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Checking for IEntrypoint interface**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc "sed -n '1254,1648p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-tazl1dlt succeeded in 5ms:
[codex:1372309] FILE: contracts/src/interfaces/IEntrypoint.sol
[codex:1372309] ================================================================================
[codex:1372309] // SPDX-License-Identifier: Apache-2.0
[codex:1372309] pragma solidity 0.8.28;
[codex:1372309]
[codex:1372309] import {IERC20} from '@oz/interfaces/IERC20.sol';
[codex:1372309]
[codex:1372309] import {ProofLib} from '../contracts/lib/ProofLib.sol';
[codex:1372309] import {IPrivacyPool} from 'interfaces/IPrivacyPool.sol';
[codex:1372309]
[codex:1372309] /**
[codex:1372309] * @title IEntrypoint
[codex:1372309] * @notice Interface for the Entrypoint contract
[codex:1372309] */
[codex:1372309] interface IEntrypoint {
[codex:1372309] /*///////////////////////////////////////////////////////////////
[codex:1372309] STRUCTS
[codex:1372309] //////////////////////////////////////////////////////////////*/
[codex:1372309]
[codex:1372309] /**
[codex:1372309]
[codex:1372309]
[codex:1372309]
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Analyzing contract reentrancy and state updates**
[codex:1372309] thinking
[codex:1372309] **Examining state roots, access controls, and token transfer nuances**
[codex:1372309]
[codex:1372309] I'll explore how root history and index management handle inserts and potential overflows, consider access implications of unrestricted withdraw calls bypassing relayers, and weigh token transfer assumptions—especially around fee-on-transfer tokens—that could impact pool accounting and withdrawals. There’s also a look at potential reentrancy through external calls like proof verification and entrypoint queries. Overall, I’m checking subtle logic gaps that might allow bypasses or inconsistencies, while recognizing many safeguards depend on upstream design or trusted components.
[codex:1372309] thinking
[codex:1372309] **Analyzing token transfer reentrancy and ragequit logic**
[codex:1372309]
[codex:1372309] I'm exploring how deposit’s state update before the token transfer enables a potential reentrancy attack via a malicious token’s transferFrom that calls withdraw, allowing withdrawal against untransferred funds. Additionally, I’m checking the ragequit logic’s handling of commitment reuse and nullifier checks to confirm protections against double-spending or label collisions. The token transfer assumptions around safeTransfer and fee-on-transfer behavior also remain a key concern.
[codex:1372309] thinking
[codex:1372309] **Evaluating fee-on-transfer token risks and audit completeness**
[codex:1372309]
[codex:1372309] I'm assessing how fee-on-transfer or rebasing tokens can cause accounting mismatches in deposit and withdrawal, potentially leading to insolvency by over-crediting commitments compared to actual token balances. I’m also considering whether the audit bundle is fully reviewed, planning to verify coverage of all relevant contract files beyond earlier truncated outputs to ensure thoroughness.
[codex:1372309] exec
[codex:1372309] /bin/bash -lc "sed -n '1,620p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-tazl1dlt succeeded in 7ms:
[codex:1372309] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1372309]
[codex:1372309] ================================================================================
[codex:1372309] FILE: contracts/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol
[codex:1372309] ================================================================================
[codex:1372309] // SPDX-License-Identifier: MIT
[codex:1372309] // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)
[codex:1372309]
[codex:1372309] pragma solidity ^0.8.20;
[codex:1372309]
[codex:1372309] import {IERC20} from "./IERC20.sol";
[codex:1372309] import {IERC165} from "./IERC165.sol";
[codex:1372309]
[codex:1372309] /**
[codex:1372309] * @title IERC1363
[codex:1372309] * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
[codex:1372309] *
[codex:1372309] * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
[codex:1372309] * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
[codex:1372309] */
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Fetching final chunk of interfaces**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc "sed -n '1649,2062p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-tazl1dlt succeeded in 6ms:
[codex:1372309] FILE: contracts/src/interfaces/IPrivacyPool.sol
[codex:1372309] ================================================================================
[codex:1372309] // SPDX-License-Identifier: Apache-2.0
[codex:1372309] pragma solidity 0.8.28;
[codex:1372309]
[codex:1372309] import {ProofLib} from '../contracts/lib/ProofLib.sol';
[codex:1372309] import {IState} from 'interfaces/IState.sol';
[codex:1372309]
[codex:1372309] /**
[codex:1372309] * @title IPrivacyPool
[codex:1372309] * @notice Interface for the PrivacyPool contract
[codex:1372309] */
[codex:1372309] interface IPrivacyPool is IState {
[codex:1372309] /*///////////////////////////////////////////////////////////////
[codex:1372309] STRUCTS
[codex:1372309] //////////////////////////////////////////////////////////////*/
[codex:1372309]
[codex:1372309] /**
[codex:1372309] * @notice Struct for the withdrawal request
[codex:1372309] * @dev The integrity of this data is ensured by the `context` signal in the proof
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Drawing conclusion on vulnerabilities**
[codex:1372309]
[codex:1372309] I'm reviewing potential issues in the contract related to fee-on-transfer tokens, reentrancy, and withdrawal mechanics. The main concern seems to be how fee-on-transfer tokens can disrupt accounting, causing fund imbalances. I'm sizing up severity and appropriate categories, planning to back this with precise code locations found using line-numbered file views. This should help produce a focused, evidence-backed finding.
[codex:1372309] exec
[codex:1372309] /bin/bash -lc "nl -ba contracts/src/contracts/PrivacyPool.sol | sed -n '1,200p'" in /tmp/codex-multi-tazl1dlt succeeded in 6ms:
[codex:1372309] 1 // SPDX-License-Identifier: Apache-2.0
[codex:1372309] 2 pragma solidity 0.8.28;
[codex:1372309] 3
[codex:1372309] 4 /*
[codex:1372309] 5
[codex:1372309] 6 Made with ♥ for 0xBow by
[codex:1372309] 7
[codex:1372309] 8 ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░
[codex:1372309] 9 ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗
[codex:1372309] 10 ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║
[codex:1372309] 11 ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║
[codex:1372309] 12 ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝
[codex:1372309] 13 ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░
[codex:1372309] 14
[codex:1372309] 15 https://defi.sucks/
[codex:1372309] 16
[codex:1372309] 17 */
[codex:1372309] 18
[codex:1372309] 19 import {PoseidonT4} from 'poseidon/PoseidonT4.sol';
[codex:1372309] 20
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Reviewing specific code lines**
[codex:1372309] exec
[codex:1372309] /bin/bash -lc 'nl -ba contracts/src/contracts/implementations/PrivacyPoolComplex.sol' in /tmp/codex-multi-tazl1dlt succeeded in 5ms:
[codex:1372309] 1 // SPDX-License-Identifier: Apache-2.0
[codex:1372309] 2 pragma solidity 0.8.28;
[codex:1372309] 3
[codex:1372309] 4 /*
[codex:1372309] 5
[codex:1372309] 6 Made with ♥ for 0xBow by
[codex:1372309] 7
[codex:1372309] 8 ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░
[codex:1372309] 9 ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗
[codex:1372309] 10 ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║
[codex:1372309] 11 ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║
[codex:1372309] 12 ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝
[codex:1372309] 13 ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░
[codex:1372309] 14
[codex:1372309] 15 https://defi.sucks/
[codex:1372309] 16
[codex:1372309] 17 */
[codex:1372309] 18
[codex:1372309] 19 import {IERC20, SafeERC20} from '@oz/token/ERC20/utils/SafeERC20.sol';
[codex:1372309] 20
[codex:1372309]
[codex:1372309] thinking
[codex:1372309] **Preparing JSON for fee-on-transfer finding**
[codex:1372309] codex
[codex:1372309] {"no_findings":false,"summary":"Identified a low-severity accounting risk when fee-on-transfer/rebasing ERC20s are used; otherwise no major issues in scope.","findings":[{"severity":"low","category":"other","title":"Fee-on-transfer/rebasing ERC20s can break pool accounting","exploit_scenario":"If a pool is registered for a deflationary or fee-on-transfer token, deposits record the requested `_value` while the pool receives less. An attacker can deposit such a token and later withdraw the full recorded amount, shifting the transfer fee deficit onto other depositors or causing withdrawals to fail once the pool balance is insufficient.","recommendation":"Explicitly forbid fee-on-transfer/rebasing tokens at the registry layer, or measure actual received amounts (balance-before/after) in `_pull` and use that value for commitment generation and withdrawal accounting.","evidence":"Deposit commitments are based on `_value`, and `_pull` transfers that nominal amount without verifying the actual tokens received.","locations":["contracts/src/contracts/PrivacyPool.sol:82","contracts/src/contracts/PrivacyPool.sol:97","contracts/src/contracts/PrivacyPool.sol:103","contracts/src/contracts/implementations/PrivacyPoolComplex.sol:50","contracts/src/contracts/implementations/PrivacyPoolComplex.sol:55","contracts/src/contracts/implementations/PrivacyPoolComplex.sol:64"]}]}
[codex:1372309] tokens used
[codex:1372309] 97,082
[codex:1372309] {"no_findings":false,"summary":"Identified a low-severity accounting risk when fee-on-transfer/rebasing ERC20s are used; otherwise no major issues in scope.","findings":[{"severity":"low","category":"other","title":"Fee-on-transfer/rebasing ERC20s can break pool accounting","exploit_scenario":"If a pool is registered for a deflationary or fee-on-transfer token, deposits record the requested `_value` while the pool receives less. An attacker can deposit such a token and later withdraw the full recorded amount, shifting the transfer fee deficit onto other depositors or causing withdrawals to fail once the pool balance is insufficient.","recommendation":"Explicitly forbid fee-on-transfer/rebasing tokens at the registry layer, or measure actual received amounts (balance-before/after) in `_pull` and use that value for commitment generation and withdrawal accounting.","evidence":"Deposit commitments are based on `_value`, and `_pull` transfers that nominal amount without verifying the actual tokens received.","locations":["contracts/src/contracts/PrivacyPool.sol:82","contracts/src/contracts/PrivacyPool.sol:97","contracts/src/contracts/PrivacyPool.sol:103","contracts/src/contracts/implementations/PrivacyPoolComplex.sol:50","contracts/src/contracts/implementations/PrivacyPoolComplex.sol:55","contracts/src/contracts/implementations/PrivacyPoolComplex.sol:64"]}]}
{
"codex": {
"ran_at": "2025-12-30T00:58:53.898856+00:00",
"returncode": 0
},
"summary": "Identified a low-severity accounting risk when fee-on-transfer/rebasing ERC20s are used; otherwise no major issues in scope.",
"raw_final": {
"summary": "Identified a low-severity accounting risk when fee-on-transfer/rebasing ERC20s are used; otherwise no major issues in scope.",
"findings": [
{
"title": "Fee-on-transfer/rebasing ERC20s can break pool accounting",
"category": "other",
"evidence": "Deposit commitments are based on `_value`, and `_pull` transfers that nominal amount without verifying the actual tokens received.",
"severity": "low",
"locations": [
"contracts/src/contracts/PrivacyPool.sol:82",
"contracts/src/contracts/PrivacyPool.sol:97",
"contracts/src/contracts/PrivacyPool.sol:103",
"contracts/src/contracts/implementations/PrivacyPoolComplex.sol:50",
"contracts/src/contracts/implementations/PrivacyPoolComplex.sol:55",
"contracts/src/contracts/implementations/PrivacyPoolComplex.sol:64"
],
"recommendation": "Explicitly forbid fee-on-transfer/rebasing tokens at the registry layer, or measure actual received amounts (balance-before/after) in `_pull` and use that value for commitment generation and withdrawal accounting.",
"exploit_scenario": "If a pool is registered for a deflationary or fee-on-transfer token, deposits record the requested `_value` while the pool receives less. An attacker can deposit such a token and later withdraw the full recorded amount, shifting the transfer fee deficit onto other depositors or causing withdrawals to fail once the pool balance is insufficient."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0157 0000000c: JUMPI 0000000d: PUSH0 0000000e: CALLDATALOAD 0000000f: PUSH1 0xe0 00000011: SHR 00000012: DUP1 00000013: PUSH4 0xa8f0f95a 00000018: GT 00000019: PUSH2 0x00bb 0000001c: JUMPI 0000001d: DUP1 0000001e: PUSH4 0xda662925 00000023: GT 00000024: PUSH2 0x0071 00000027: JUMPI 00000028: DUP1 00000029: PUSH4 0xe4b2fb79 0000002e: GT 0000002f: PUSH2 0x0057 00000032: JUMPI 00000033: DUP1 00000034: PUSH4 0xe4b2fb79 00000039: EQ 0000003a: PUSH2 0x03dd 0000003d: JUMPI 0000003e: DUP1 0000003f: PUSH4 0xe8eb3cc6 00000044: EQ 00000045: PUSH2 0x041e 00000048: JUMPI 00000049: DUP1 0000004a: PUSH4 0xfdab463d 0000004f: EQ 00000050: PUSH2 0x0451 00000053: JUMPI 00000054: PUSH0 00000055: PUSH0 00000056: REVERT 00000057: JUMPDEST 00000058: DUP1 00000059: PUSH4 0xda662925 0000005e: EQ 0000005f: PUSH2 0x0396 00000062: JUMPI 00000063: DUP1 00000064: PUSH4 0xe38df5f0 00000069: EQ 0000006a: PUSH2 0x03c9 0000006d: JUMPI 0000006e: PUSH0 0000006f: PUSH0 00000070: REVERT 00000071: JUMPDEST 00000072: DUP1 00000073: PUSH4 0xb85c5145 00000078: GT 00000079: PUSH2 0x00a1 0000007c: JUMPI 0000007d: DUP1 0000007e: PUSH4 0xb85c5145 00000083: EQ 00000084: PUSH2 0x0343 00000087: JUMPI 00000088: DUP1 00000089: PUSH4 0xc2b40ae4 0000008e: EQ 0000008f: PUSH2 0x0357 00000092: JUMPI 00000093: DUP1 00000094: PUSH4 0xcd87a3b4 00000099: EQ 0000009a: PUSH2 0x0382 0000009d: JUMPI 0000009e: PUSH0 0000009f: PUSH0 000000a0: REVERT 000000a1: JUMPDEST 000000a2: DUP1 000000a3: PUSH4 0xa8f0f95a 000000a8: EQ 000000a9: PUSH2 0x031b 000000ac: JUMPI 000000ad: DUP1 000000ae: PUSH4 0xaffed0e0 000000b3: EQ 000000b4: PUSH2 0x032f 000000b7: JUMPI 000000b8: PUSH0 000000b9: PUSH0 000000ba: REVERT 000000bb: JUMPDEST 000000bc: DUP1 000000bd: PUSH4 0x4800d97f 000000c2: GT 000000c3: PUSH2 0x0110 000000c6: JUMPI 000000c7: DUP1 000000c8: PUSH4 0x71235b34 000000cd: GT 000000ce: PUSH2 0x00f6 000000d1: JUMPI 000000d2: DUP1 000000d3: PUSH4 0x71235b34 000000d8: EQ 000000d9: PUSH2 0x0298 000000dc: JUMPI 000000dd: DUP1 000000de: PUSH4 0x8735eb2b 000000e3: EQ 000000e4: PUSH2 0x02b7 000000e7: JUMPI 000000e8: DUP1 000000e9: PUSH4 0x90eeb02b 000000ee: EQ 000000ef: PUSH2 0x02ea 000000f2: JUMPI 000000f3: PUSH0 000000f4: PUSH0 000000f5: REVERT 000000f6: JUMPDEST 000000f7: DUP1 000000f8: PUSH4 0x4800d97f 000000fd: EQ 000000fe: PUSH2 0x022c 00000101: JUMPI 00000102: DUP1 00000103: PUSH4 0x4a2b75c8 00000108: EQ 00000109: PUSH2 0x0284 0000010c: JUMPI 0000010d: PUSH0 0000010e: PUSH0 0000010f: REVERT 00000110: JUMPDEST 00000111: DUP1 00000112: PUSH4 0x30c0766d 00000117: GT 00000118: PUSH2 0x0140 0000011b: JUMPI 0000011c: DUP1 0000011d: PUSH4 0x30c0766d 00000122: EQ 00000123: PUSH2 0x01bf 00000126: JUMPI 00000127: DUP1 00000128: PUSH4 0x33d09200 0000012d: EQ 0000012e: PUSH2 0x01e0 00000131: JUMPI 00000132: DUP1 00000133: PUSH4 0x36cf7c87 00000138: EQ 00000139: PUSH2 0x0213 0000013c: JUMPI 0000013d: PUSH0 0000013e: PUSH0 0000013f: REVERT 00000140: JUMPDEST 00000141: DUP1 00000142: PUSH4 0x0efe6a8b 00000147: EQ 00000148: PUSH2 0x015b 0000014b: JUMPI 0000014c: DUP1 0000014d: PUSH4 0x1f79a1e9 00000152: EQ 00000153: PUSH2 0x0181 00000156: JUMPI 00000157: JUMPDEST 00000158: PUSH0 00000159: PUSH0 0000015a: REVERT 0000015b: JUMPDEST 0000015c: PUSH2 0x016e 0000015f: PUSH2 0x0169 00000162: CALLDATASIZE 00000163: PUSH1 0x04 00000165: PUSH2 0x15af 00000168: JUMP 00000169: JUMPDEST 0000016a: PUSH2 0x0473 0000016d: JUMP 0000016e: JUMPDEST 0000016f: PUSH1 0x40 00000171: MLOAD 00000172: SWAP1 00000173: DUP2 00000174: MSTORE 00000175: PUSH1 0x20 00000177: ADD 00000178: JUMPDEST 00000179: PUSH1 0x40 0000017b: MLOAD 0000017c: DUP1 0000017d: SWAP2 0000017e: SUB 0000017f: SWAP1 00000180: RETURN 00000181: JUMPDEST 00000182: CALLVALUE 00000183: DUP1 00000184: ISZERO 00000185: PUSH2 0x018c 00000188: JUMPI 00000189: PUSH0 0000018a: PUSH0 0000018b: REVERT 0000018c: JUMPDEST 0000018d: POP 0000018e: PUSH2 0x01af 00000191: PUSH2 0x019b 00000194: CALLDATASIZE 00000195: PUSH1 0x04 00000197: PUSH2 0x15df 0000019a: JUMP 0000019b: JUMPDEST 0000019c: PUSH1 0x08 0000019e: PUSH1 0x20 000001a0: MSTORE 000001a1: PUSH0 000001a2: SWAP1 000001a3: DUP2 000001a4: MSTORE 000001a5: PUSH1 0x40 000001a7: SWAP1 000001a8: KECCAK256 000001a9: SLOAD 000001aa: PUSH1 0xff 000001ac: AND 000001ad: DUP2 000001ae: JUMP 000001af: JUMPDEST 000001b0: PUSH1 0x40 000001b2: MLOAD 000001b3: SWAP1 000001b4: ISZERO 000001b5: ISZERO 000001b6: DUP2 000001b7: MSTORE 000001b8: PUSH1 0x20 000001ba: ADD 000001bb: PUSH2 0x0178 000001be: JUMP 000001bf: JUMPDEST 000001c0: CALLVALUE 000001c1: DUP1 000001c2: ISZERO 000001c3: PUSH2 0x01ca 000001c6: JUMPI 000001c7: PUSH0 000001c8: PUSH0 000001c9: REVERT 000001ca: JUMPDEST 000001cb: POP 000001cc: PUSH2 0x01de 000001cf: PUSH2 0x01d9 000001d2: CALLDATASIZE 000001d3: PUSH1 0x04 000001d5: PUSH2 0x1818 000001d8: JUMP 000001d9: JUMPDEST 000001da: PUSH2 0x0765 000001dd: JUMP 000001de: JUMPDEST 000001df: STOP 000001e0: JUMPDEST 000001e1: CALLVALUE 000001e2: DUP1 000001e3: ISZERO 000001e4: PUSH2 0x01eb 000001e7: JUMPI 000001e8: PUSH0 000001e9: PUSH0 000001ea: REVERT 000001eb: JUMPDEST 000001ec: POP 000001ed: PUSH2 0x016e 000001f0: PUSH32 0x245f9030186ececa3173fa789283c6e5efe1dffc707d05dfa1bc54ec86664b78 00000211: DUP2 00000212: JUMP 00000213: JUMPDEST 00000214: CALLVALUE 00000215: DUP1 00000216: ISZERO 00000217: PUSH2 0x021e 0000021a: JUMPI 0000021b: PUSH0 0000021c: PUSH0 0000021d: REVERT 0000021e: JUMPDEST 0000021f: POP 00000220: PUSH1 0x01 00000222: SLOAD 00000223: PUSH2 0x01af 00000226: SWAP1 00000227: PUSH1 0xff 00000229: AND 0000022a: DUP2 0000022b: JUMP 0000022c: JUMPDEST 0000022d: CALLVALUE 0000022e: DUP1 0000022f: ISZERO 00000230: PUSH2 0x0237 00000233: JUMPI 00000234: PUSH0 00000235: PUSH0 00000236: REVERT 00000237: JUMPDEST 00000238: POP 00000239: PUSH2 0x025f 0000023c: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000025d: DUP2 0000025e: JUMP 0000025f: JUMPDEST 00000260: PUSH1 0x40 00000262: MLOAD 00000263: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000278: SWAP1 00000279: SWAP2 0000027a: AND 0000027b: DUP2 0000027c: MSTORE 0000027d: PUSH1 0x20 0000027f: ADD 00000280: PUSH2 0x0178 00000283: JUMP 00000284: JUMPDEST 00000285: CALLVALUE 00000286: DUP1 00000287: ISZERO 00000288: PUSH2 0x028f 0000028b: JUMPI 0000028c: PUSH0 0000028d: PUSH0 0000028e: REVERT 0000028f: JUMPDEST 00000290: POP 00000291: PUSH1 0x05 00000293: SLOAD 00000294: PUSH2 0x016e 00000297: JUMP 00000298: JUMPDEST 00000299: CALLVALUE 0000029a: DUP1 0000029b: ISZERO 0000029c: PUSH2 0x02a3 0000029f: JUMPI 000002a0: PUSH0 000002a1: PUSH0 000002a2: REVERT 000002a3: JUMPDEST 000002a4: POP 000002a5: PUSH2 0x01de 000002a8: PUSH2 0x02b2 000002ab: CALLDATASIZE 000002ac: PUSH1 0x04 000002ae: PUSH2 0x1925 000002b1: JUMP 000002b2: JUMPDEST 000002b3: PUSH2 0x0b82 000002b6: JUMP 000002b7: JUMPDEST 000002b8: CALLVALUE 000002b9: DUP1 000002ba: ISZERO 000002bb: PUSH2 0x02c2 000002be: JUMPI 000002bf: PUSH0 000002c0: PUSH0 000002c1: REVERT 000002c2: JUMPDEST 000002c3: POP 000002c4: PUSH2 0x025f 000002c7: PUSH32 0x000000000000000000000000022891f938ae7fdc8ab9ead0fbf50aba8c897d6d 000002e8: DUP2 000002e9: JUMP 000002ea: JUMPDEST 000002eb: CALLVALUE 000002ec: DUP1 000002ed: ISZERO 000002ee: PUSH2 0x02f5 000002f1: JUMPI 000002f2: PUSH0 000002f3: PUSH0 000002f4: REVERT 000002f5: JUMPDEST 000002f6: POP 000002f7: PUSH1 0x03 000002f9: SLOAD 000002fa: PUSH2 0x0306 000002fd: SWAP1 000002fe: PUSH4 0xffffffff 00000303: AND 00000304: DUP2 00000305: JUMP 00000306: JUMPDEST 00000307: PUSH1 0x40 00000309: MLOAD 0000030a: PUSH4 0xffffffff 0000030f: SWAP1 00000310: SWAP2 00000311: AND 00000312: DUP2 00000313: MSTORE 00000314: PUSH1 0x20 00000316: ADD 00000317: PUSH2 0x0178 0000031a: JUMP 0000031b: JUMPDEST 0000031c: CALLVALUE 0000031d: DUP1 0000031e: ISZERO 0000031f: PUSH2 0x0326 00000322: JUMPI 00000323: PUSH0 00000324: PUSH0 00000325: REVERT 00000326: JUMPDEST 00000327: POP 00000328: PUSH1 0x04 0000032a: SLOAD 0000032b: PUSH2 0x016e 0000032e: JUMP 0000032f: JUMPDEST 00000330: CALLVALUE 00000331: DUP1 00000332: ISZERO 00000333: PUSH2 0x033a 00000336: JUMPI 00000337: PUSH0 00000338: PUSH0 00000339: REVERT 0000033a: JUMPDEST 0000033b: POP 0000033c: PUSH2 0x016e 0000033f: PUSH0 00000340: SLOAD 00000341: DUP2 00000342: JUMP 00000343: JUMPDEST 00000344: CALLVALUE 00000345: DUP1 00000346: ISZERO 00000347: PUSH2 0x034e 0000034a: JUMPI 0000034b: PUSH0 0000034c: PUSH0 0000034d: REVERT 0000034e: JUMPDEST 0000034f: POP 00000350: PUSH2 0x01de 00000353: PUSH2 0x0d8e 00000356: JUMP 00000357: JUMPDEST 00000358: CALLVALUE 00000359: DUP1 0000035a: ISZERO 0000035b: PUSH2 0x0362 0000035e: JUMPI 0000035f: PUSH0 00000360: PUSH0 00000361: REVERT 00000362: JUMPDEST 00000363: POP 00000364: PUSH2 0x016e 00000367: PUSH2 0x0371 0000036a: CALLDATASIZE 0000036b: PUSH1 0x04 0000036d: PUSH2 0x15df 00000370: JUMP 00000371: JUMPDEST 00000372: PUSH1 0x02 00000374: PUSH1 0x20 00000376: MSTORE 00000377: PUSH0 00000378: SWAP1 00000379: DUP2 0000037a: MSTORE 0000037b: PUSH1 0x40 0000037d: SWAP1 0000037e: KECCAK256 0000037f: SLOAD 00000380: DUP2 00000381: JUMP 00000382: JUMPDEST 00000383: CALLVALUE 00000384: DUP1 00000385: ISZERO 00000386: PUSH2 0x038d 00000389: JUMPI 0000038a: PUSH0 0000038b: PUSH0 0000038c: REVERT 0000038d: JUMPDEST 0000038e: POP 0000038f: PUSH2 0x0306 00000392: PUSH1 0x40 00000394: DUP2 00000395: JUMP 00000396: JUMPDEST 00000397: CALLVALUE 00000398: DUP1 00000399: ISZERO 0000039a: PUSH2 0x03a1 0000039d: JUMPI 0000039e: PUSH0 0000039f: PUSH0 000003a0: REVERT 000003a1: JUMPDEST 000003a2: POP 000003a3: PUSH2 0x025f 000003a6: PUSH32 0x000000000000000000000000a45aca8604a73d80c551faad6355a5c3a5565ec6 000003c7: DUP2 000003c8: JUMP 000003c9: JUMPDEST 000003ca: CALLVALUE 000003cb: DUP1 000003cc: ISZERO 000003cd: PUSH2 0x03d4 000003d0: JUMPI 000003d1: PUSH0 000003d2: PUSH0 000003d3: REVERT 000003d4: JUMPDEST 000003d5: POP 000003d6: PUSH2 0x0306 000003d9: PUSH1 0x20 000003db: DUP2 000003dc: JUMP 000003dd: JUMPDEST 000003de: CALLVALUE 000003df: DUP1 000003e0: ISZERO 000003e1: PUSH2 0x03e8 000003e4: JUMPI 000003e5: PUSH0 000003e6: PUSH0 000003e7: REVERT 000003e8: JUMPDEST 000003e9: POP 000003ea: PUSH2 0x025f 000003ed: PUSH2 0x03f7 000003f0: CALLDATASIZE 000003f1: PUSH1 0x04 000003f3: PUSH2 0x15df 000003f6: JUMP 000003f7: JUMPDEST 000003f8: PUSH1 0x09 000003fa: PUSH1 0x20 000003fc: MSTORE 000003fd: PUSH0 000003fe: SWAP1 000003ff: DUP2 00000400: MSTORE 00000401: PUSH1 0x40 00000403: SWAP1 00000404: KECCAK256 00000405: SLOAD 00000406: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000041b: AND 0000041c: DUP2 0000041d: JUMP 0000041e: JUMPDEST 0000041f: CALLVALUE 00000420: DUP1 00000421: ISZERO 00000422: PUSH2 0x0429 00000425: JUMPI 00000426: PUSH0 00000427: PUSH0 00000428: REVERT 00000429: JUMPDEST 0000042a: POP 0000042b: PUSH2 0x025f 0000042e: PUSH32 0x0000000000000000000000006818809eefce719e480a7526d76bd3e561526b46 0000044f: DUP2 00000450: JUMP 00000451: JUMPDEST 00000452: CALLVALUE 00000453: DUP1 00000454: ISZERO 00000455: PUSH2 0x045c 00000458: JUMPI 00000459: PUSH0 0000045a: PUSH0 0000045b: REVERT 0000045c: JUMPDEST 0000045d: POP 0000045e: PUSH1 0x05 00000460: SLOAD 00000461: PUSH0 00000462: SWAP1 00000463: DUP2 00000464: MSTORE 00000465: PUSH1 0x06 00000467: PUSH1 0x20 00000469: MSTORE 0000046a: PUSH1 0x40 0000046c: SWAP1 0000046d: KECCAK256 0000046e: SLOAD 0000046f: PUSH2 0x016e 00000472: JUMP 00000473: JUMPDEST 00000474: PUSH0 00000475: CALLER 00000476: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000048b: PUSH32 0x0000000000000000000000006818809eefce719e480a7526d76bd3e561526b46 000004ac: AND 000004ad: EQ 000004ae: PUSH2 0x04e3 000004b1: JUMPI 000004b2: PUSH1 0x40 000004b4: MLOAD 000004b5: PUSH32 0x8247bd8000000000000000000000000000000000000000000000000000000000 000004d6: DUP2 000004d7: MSTORE 000004d8: PUSH1 0x04 000004da: ADD 000004db: PUSH1 0x40 000004dd: MLOAD 000004de: DUP1 000004df: SWAP2 000004e0: SUB 000004e1: SWAP1 000004e2: REVERT 000004e3: JUMPDEST 000004e4: PUSH1 0x01 000004e6: SLOAD 000004e7: PUSH1 0xff 000004e9: AND 000004ea: ISZERO 000004eb: PUSH2 0x0520 000004ee: JUMPI 000004ef: PUSH1 0x40 000004f1: MLOAD 000004f2: PUSH32 0x924b372700000000000000000000000000000000000000000000000000000000 00000513: DUP2 00000514: MSTORE 00000515: PUSH1 0x04 00000517: ADD 00000518: PUSH1 0x40 0000051a: MLOAD 0000051b: DUP1 0000051c: SWAP2 0000051d: SUB 0000051e: SWAP1 0000051f: REVERT 00000520: JUMPDEST 00000521: PUSH16 0xffffffffffffffffffffffffffffffff 00000532: DUP4 00000533: LT 00000534: PUSH2 0x0569 00000537: JUMPI 00000538: PUSH1 0x40 0000053a: MLOAD 0000053b: PUSH32 0x428243e200000000000000000000000000000000000000000000000000000000 0000055c: DUP2 0000055d: MSTORE 0000055e: PUSH1 0x04 00000560: ADD 00000561: PUSH1 0x40 00000563: MLOAD 00000564: DUP1 00000565: SWAP2 00000566: SUB 00000567: SWAP1 00000568: REVERT 00000569: JUMPDEST 0000056a: PUSH0 0000056b: PUSH32 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 0000058c: PUSH32 0x245f9030186ececa3173fa789283c6e5efe1dffc707d05dfa1bc54ec86664b78 000005ad: PUSH0 000005ae: PUSH0 000005af: DUP2 000005b0: SLOAD 000005b1: PUSH2 0x05b9 000005b4: SWAP1 000005b5: PUSH2 0x1a00 000005b8: JUMP 000005b9: JUMPDEST 000005ba: SWAP2 000005bb: DUP3 000005bc: SWAP1 000005bd: SSTORE 000005be: POP 000005bf: PUSH1 0x40 000005c1: DUP1 000005c2: MLOAD 000005c3: PUSH1 0x20 000005c5: DUP2 000005c6: ADD 000005c7: SWAP4 000005c8: SWAP1 000005c9: SWAP4 000005ca: MSTORE 000005cb: DUP3 000005cc: ADD 000005cd: MSTORE 000005ce: PUSH1 0x60 000005d0: ADD 000005d1: PUSH1 0x40 000005d3: MLOAD 000005d4: PUSH1 0x20 000005d6: DUP2 000005d7: DUP4 000005d8: SUB 000005d9: SUB 000005da: DUP2 000005db: MSTORE 000005dc: SWAP1 000005dd: PUSH1 0x40 000005df: MSTORE 000005e0: DUP1 000005e1: MLOAD 000005e2: SWAP1 000005e3: PUSH1 0x20 000005e5: ADD 000005e6: KECCAK256 000005e7: PUSH0 000005e8: SHR 000005e9: PUSH2 0x05f2 000005ec: SWAP2 000005ed: SWAP1 000005ee: PUSH2 0x1a64 000005f1: JUMP 000005f2: JUMPDEST 000005f3: PUSH0 000005f4: DUP2 000005f5: DUP2 000005f6: MSTORE 000005f7: PUSH1 0x09 000005f9: PUSH1 0x20 000005fb: SWAP1 000005fc: DUP2 000005fd: MSTORE 000005fe: PUSH1 0x40 00000600: SWAP2 00000601: DUP3 00000602: SWAP1 00000603: KECCAK256 00000604: DUP1 00000605: SLOAD 00000606: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000627: AND 00000628: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000063d: DUP11 0000063e: AND 0000063f: OR 00000640: SWAP1 00000641: SSTORE 00000642: DUP2 00000643: MLOAD 00000644: PUSH1 0x60 00000646: DUP2 00000647: ADD 00000648: DUP4 00000649: MSTORE 0000064a: DUP8 0000064b: DUP2 0000064c: MSTORE 0000064d: SWAP1 0000064e: DUP2 0000064f: ADD 00000650: DUP4 00000651: SWAP1 00000652: MSTORE 00000653: DUP1 00000654: DUP3 00000655: ADD 00000656: DUP7 00000657: SWAP1 00000658: MSTORE 00000659: SWAP1 0000065a: MLOAD 0000065b: PUSH32 0x20cf0a3700000000000000000000000000000000000000000000000000000000 0000067c: DUP2 0000067d: MSTORE 0000067e: SWAP2 0000067f: SWAP3 00000680: POP 00000681: PUSH20 0xe393dd7287db9982e6f845824854baf8b8e823af 00000696: SWAP2 00000697: PUSH4 0x20cf0a37 0000069c: SWAP2 0000069d: PUSH2 0x06a8 000006a0: SWAP2 000006a1: PUSH1 0x04 000006a3: ADD 000006a4: PUSH2 0x1a77 000006a7: JUMP 000006a8: JUMPDEST 000006a9: PUSH1 0x20 000006ab: PUSH1 0x40 000006ad: MLOAD 000006ae: DUP1 000006af: DUP4 000006b0: SUB 000006b1: DUP2 000006b2: DUP7 000006b3: GAS 000006b4: DELEGATECALL 000006b5: ISZERO 000006b6: DUP1 000006b7: ISZERO 000006b8: PUSH2 0x06c3 000006bb: JUMPI 000006bc: RETURNDATASIZE 000006bd: PUSH0 000006be: PUSH0 000006bf: RETURNDATACOPY 000006c0: RETURNDATASIZE 000006c1: PUSH0 000006c2: REVERT 000006c3: JUMPDEST 000006c4: POP 000006c5: POP 000006c6: POP 000006c7: POP 000006c8: PUSH1 0x40 000006ca: MLOAD 000006cb: RETURNDATASIZE 000006cc: PUSH1 0x1f 000006ce: NOT 000006cf: PUSH1 0x1f 000006d1: DUP3 000006d2: ADD 000006d3: AND 000006d4: DUP3 000006d5: ADD 000006d6: DUP1 000006d7: PUSH1 0x40 000006d9: MSTORE 000006da: POP 000006db: DUP2 000006dc: ADD 000006dd: SWAP1 000006de: PUSH2 0x06e7 000006e1: SWAP2 000006e2: SWAP1 000006e3: PUSH2 0x1aa7 000006e6: JUMP 000006e7: JUMPDEST 000006e8: SWAP2 000006e9: POP 000006ea: PUSH2 0x06f2 000006ed: DUP3 000006ee: PUSH2 0x0e8e 000006f1: JUMP 000006f2: JUMPDEST 000006f3: POP 000006f4: PUSH2 0x06fd 000006f7: CALLER 000006f8: DUP6 000006f9: PUSH2 0x0f8d 000006fc: JUMP 000006fd: JUMPDEST 000006fe: PUSH1 0x40 00000700: DUP1 00000701: MLOAD 00000702: DUP4 00000703: DUP2 00000704: MSTORE 00000705: PUSH1 0x20 00000707: DUP2 00000708: ADD 00000709: DUP4 0000070a: SWAP1 0000070b: MSTORE 0000070c: SWAP1 0000070d: DUP2 0000070e: ADD 0000070f: DUP6 00000710: SWAP1 00000711: MSTORE 00000712: PUSH1 0x60 00000714: DUP2 00000715: ADD 00000716: DUP5 00000717: SWAP1 00000718: MSTORE 00000719: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000072e: DUP7 0000072f: AND 00000730: SWAP1 00000731: PUSH32 0xe3b53cd1a44fbf11535e145d80b8ef1ed6d57a73bf5daa7e939b6b01657d6549 00000752: SWAP1 00000753: PUSH1 0x80 00000755: ADD 00000756: PUSH1 0x40 00000758: MLOAD 00000759: DUP1 0000075a: SWAP2 0000075b: SUB 0000075c: SWAP1 0000075d: LOG2 0000075e: POP 0000075f: SWAP4 00000760: SWAP3 00000761: POP 00000762: POP 00000763: POP 00000764: JUMP 00000765: JUMPDEST 00000766: DUP2 00000767: DUP2 00000768: DUP2 00000769: PUSH0 0000076a: ADD 0000076b: MLOAD 0000076c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000781: AND 00000782: CALLER 00000783: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000798: AND 00000799: EQ 0000079a: PUSH2 0x07cf 0000079d: JUMPI 0000079e: PUSH1 0x40 000007a0: MLOAD 000007a1: PUSH32 0x1a7c48e500000000000000000000000000000000000000000000000000000000 000007c2: DUP2 000007c3: MSTORE 000007c4: PUSH1 0x04 000007c6: ADD 000007c7: PUSH1 0x40 000007c9: MLOAD 000007ca: DUP1 000007cb: SWAP2 000007cc: SUB 000007cd: SWAP1 000007ce: REVERT 000007cf: JUMPDEST 000007d0: PUSH32 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 000007f1: DUP3 000007f2: PUSH32 0x245f9030186ececa3173fa789283c6e5efe1dffc707d05dfa1bc54ec86664b78 00000813: PUSH1 0x40 00000815: MLOAD 00000816: PUSH1 0x20 00000818: ADD 00000819: PUSH2 0x0823 0000081c: SWAP3 0000081d: SWAP2 0000081e: SWAP1 0000081f: PUSH2 0x1abe 00000822: JUMP 00000823: JUMPDEST 00000824: PUSH1 0x40 00000826: MLOAD 00000827: PUSH1 0x20 00000829: DUP2 0000082a: DUP4 0000082b: SUB 0000082c: SUB 0000082d: DUP2 0000082e: MSTORE 0000082f: SWAP1 00000830: PUSH1 0x40 00000832: MSTORE 00000833: DUP1 00000834: MLOAD 00000835: SWAP1 00000836: PUSH1 0x20 00000838: ADD 00000839: KECCAK256 0000083a: PUSH0 0000083b: SHR 0000083c: PUSH2 0x0845 0000083f: SWAP2 00000840: SWAP1 00000841: PUSH2 0x1a64 00000844: JUMP 00000845: JUMPDEST 00000846: PUSH2 0x084e 00000849: DUP3 0000084a: PUSH2 0x100b 0000084d: JUMP 0000084e: JUMPDEST 0000084f: EQ 00000850: PUSH2 0x0885 00000853: JUMPI 00000854: PUSH1 0x40 00000856: MLOAD 00000857: PUSH32 0xef6daeb000000000000000000000000000000000000000000000000000000000 00000878: DUP2 00000879: MSTORE 0000087a: PUSH1 0x04 0000087c: ADD 0000087d: PUSH1 0x40 0000087f: MLOAD 00000880: DUP1 00000881: SWAP2 00000882: SUB 00000883: SWAP1 00000884: REVERT 00000885: JUMPDEST 00000886: PUSH1 0x20 00000888: PUSH2 0x0890 0000088b: DUP3 0000088c: PUSH2 0x1020 0000088f: JUMP 00000890: JUMPDEST 00000891: GT 00000892: DUP1 00000893: PUSH2 0x08a4 00000896: JUMPI 00000897: POP 00000898: PUSH1 0x20 0000089a: PUSH2 0x08a2 0000089d: DUP3 0000089e: PUSH2 0x102e 000008a1: JUMP 000008a2: JUMPDEST 000008a3: GT 000008a4: JUMPDEST 000008a5: ISZERO 000008a6: PUSH2 0x08db 000008a9: JUMPI 000008aa: PUSH1 0x40 000008ac: MLOAD 000008ad: PUSH32 0xc21cc8e200000000000000000000000000000000000000000000000000000000 000008ce: DUP2 000008cf: MSTORE 000008d0: PUSH1 0x04 000008d2: ADD 000008d3: PUSH1 0x40 000008d5: MLOAD 000008d6: DUP1 000008d7: SWAP2 000008d8: SUB 000008d9: SWAP1 000008da: REVERT 000008db: JUMPDEST 000008dc: PUSH2 0x08ec 000008df: PUSH2 0x08e7 000008e2: DUP3 000008e3: PUSH2 0x103c 000008e6: JUMP 000008e7: JUMPDEST 000008e8: PUSH2 0x104a 000008eb: JUMP 000008ec: JUMPDEST 000008ed: PUSH2 0x0922 000008f0: JUMPI 000008f1: PUSH1 0x40 000008f3: MLOAD 000008f4: PUSH32 0xfd3d3c4c00000000000000000000000000000000000000000000000000000000 00000915: DUP2 00000916: MSTORE 00000917: PUSH1 0x04 00000919: ADD 0000091a: PUSH1 0x40 0000091c: MLOAD 0000091d: DUP1 0000091e: SWAP2 0000091f: SUB 00000920: SWAP1 00000921: REVERT 00000922: JUMPDEST 00000923: PUSH32 0x0000000000000000000000006818809eefce719e480a7526d76bd3e561526b46 00000944: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000959: AND 0000095a: PUSH4 0xd7b0fef1 0000095f: PUSH1 0x40 00000961: MLOAD 00000962: DUP2 00000963: PUSH4 0xffffffff 00000968: AND 00000969: PUSH1 0xe0 0000096b: SHL 0000096c: DUP2 0000096d: MSTORE 0000096e: PUSH1 0x04 00000970: ADD 00000971: PUSH1 0x20 00000973: PUSH1 0x40 00000975: MLOAD 00000976: DUP1 00000977: DUP4 00000978: SUB 00000979: DUP2 0000097a: DUP7 0000097b: GAS 0000097c: STATICCALL 0000097d: ISZERO 0000097e: DUP1 0000097f: ISZERO 00000980: PUSH2 0x098b 00000983: JUMPI 00000984: RETURNDATASIZE 00000985: PUSH0 00000986: PUSH0 00000987: RETURNDATACOPY 00000988: RETURNDATASIZE 00000989: PUSH0 0000098a: REVERT 0000098b: JUMPDEST 0000098c: POP 0000098d: POP 0000098e: POP 0000098f: POP 00000990: PUSH1 0x40 00000992: MLOAD 00000993: RETURNDATASIZE 00000994: PUSH1 0x1f 00000996: NOT 00000997: PUSH1 0x1f 00000999: DUP3 0000099a: ADD 0000099b: AND 0000099c: DUP3 0000099d: ADD 0000099e: DUP1 0000099f: PUSH1 0x40 000009a1: MSTORE 000009a2: POP 000009a3: DUP2 000009a4: ADD 000009a5: SWAP1 000009a6: PUSH2 0x09af 000009a9: SWAP2 000009aa: SWAP1 000009ab: PUSH2 0x1aa7 000009ae: JUMP 000009af: JUMPDEST 000009b0: PUSH2 0x09b8 000009b3: DUP3 000009b4: PUSH2 0x10cd 000009b7: JUMP 000009b8: JUMPDEST 000009b9: EQ 000009ba: PUSH2 0x09ef 000009bd: JUMPI 000009be: PUSH1 0x40 000009c0: MLOAD 000009c1: PUSH32 0xa6a7824400000000000000000000000000000000000000000000000000000000 000009e2: DUP2 000009e3: MSTORE 000009e4: PUSH1 0x04 000009e6: ADD 000009e7: PUSH1 0x40 000009e9: MLOAD 000009ea: DUP1 000009eb: SWAP2 000009ec: SUB 000009ed: SWAP1 000009ee: REVERT 000009ef: JUMPDEST 000009f0: PUSH32 0x000000000000000000000000022891f938ae7fdc8ab9ead0fbf50aba8c897d6d 00000a11: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a26: AND 00000a27: PUSH4 0xc9219a7a 00000a2c: DUP5 00000a2d: PUSH0 00000a2e: ADD 00000a2f: MLOAD 00000a30: DUP6 00000a31: PUSH1 0x20 00000a33: ADD 00000a34: MLOAD 00000a35: DUP7 00000a36: PUSH1 0x40 00000a38: ADD 00000a39: MLOAD 00000a3a: DUP8 00000a3b: PUSH1 0x60 00000a3d: ADD 00000a3e: MLOAD 00000a3f: PUSH1 0x40 00000a41: MLOAD 00000a42: DUP6 00000a43: PUSH4 0xffffffff 00000a48: AND 00000a49: PUSH1 0xe0 00000a4b: SHL 00000a4c: DUP2 00000a4d: MSTORE 00000a4e: PUSH1 0x04 00000a50: ADD 00000a51: PUSH2 0x0a5d 00000a54: SWAP5 00000a55: SWAP4 00000a56: SWAP3 00000a57: SWAP2 00000a58: SWAP1 00000a59: PUSH2 0x1b91 00000a5c: JUMP 00000a5d: JUMPDEST 00000a5e: PUSH1 0x20 00000a60: PUSH1 0x40 00000a62: MLOAD 00000a63: DUP1 00000a64: DUP4 00000a65: SUB 00000a66: DUP2 00000a67: PUSH0 00000a68: DUP8 00000a69: GAS 00000a6a: CALL 00000a6b: ISZERO 00000a6c: DUP1 00000a6d: ISZERO 00000a6e: PUSH2 0x0a79 00000a71: JUMPI 00000a72: RETURNDATASIZE 00000a73: PUSH0 00000a74: PUSH0 00000a75: RETURNDATACOPY 00000a76: RETURNDATASIZE 00000a77: PUSH0 00000a78: REVERT 00000a79: JUMPDEST 00000a7a: POP 00000a7b: POP 00000a7c: POP 00000a7d: POP 00000a7e: PUSH1 0x40 00000a80: MLOAD 00000a81: RETURNDATASIZE 00000a82: PUSH1 0x1f 00000a84: NOT 00000a85: PUSH1 0x1f 00000a87: DUP3 00000a88: ADD 00000a89: AND 00000a8a: DUP3 00000a8b: ADD 00000a8c: DUP1 00000a8d: PUSH1 0x40 00000a8f: MSTORE 00000a90: POP 00000a91: DUP2 00000a92: ADD 00000a93: SWAP1 00000a94: PUSH2 0x0a9d 00000a97: SWAP2 00000a98: SWAP1 00000a99: PUSH2 0x1bed 00000a9c: JUMP 00000a9d: JUMPDEST 00000a9e: PUSH2 0x0ad3 00000aa1: JUMPI 00000aa2: PUSH1 0x40 00000aa4: MLOAD 00000aa5: PUSH32 0x09bde33900000000000000000000000000000000000000000000000000000000 00000ac6: DUP2 00000ac7: MSTORE 00000ac8: PUSH1 0x04 00000aca: ADD 00000acb: PUSH1 0x40 00000acd: MLOAD 00000ace: DUP1 00000acf: SWAP2 00000ad0: SUB 00000ad1: SWAP1 00000ad2: REVERT 00000ad3: JUMPDEST 00000ad4: PUSH2 0x0ae4 00000ad7: PUSH2 0x0adf 00000ada: DUP5 00000adb: PUSH2 0x10db 00000ade: JUMP 00000adf: JUMPDEST 00000ae0: PUSH2 0x10e9 00000ae3: JUMP 00000ae4: JUMPDEST 00000ae5: PUSH2 0x0af5 00000ae8: PUSH2 0x0af0 00000aeb: DUP5 00000aec: PUSH2 0x1169 00000aef: JUMP 00000af0: JUMPDEST 00000af1: PUSH2 0x0e8e 00000af4: JUMP 00000af5: JUMPDEST 00000af6: POP 00000af7: DUP4 00000af8: MLOAD 00000af9: PUSH2 0x0b0a 00000afc: SWAP1 00000afd: PUSH2 0x0b05 00000b00: DUP6 00000b01: PUSH2 0x1176 00000b04: JUMP 00000b05: JUMPDEST 00000b06: PUSH2 0x1184 00000b09: JUMP 00000b0a: JUMPDEST 00000b0b: DUP4 00000b0c: MLOAD 00000b0d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b22: AND 00000b23: PUSH32 0x75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21 00000b44: PUSH2 0x0b4c 00000b47: DUP6 00000b48: PUSH2 0x1176 00000b4b: JUMP 00000b4c: JUMPDEST 00000b4d: PUSH2 0x0b55 00000b50: DUP7 00000b51: PUSH2 0x10db 00000b54: JUMP 00000b55: JUMPDEST 00000b56: PUSH2 0x0b5e 00000b59: DUP8 00000b5a: PUSH2 0x1169 00000b5d: JUMP 00000b5e: JUMPDEST 00000b5f: PUSH1 0x40 00000b61: DUP1 00000b62: MLOAD 00000b63: SWAP4 00000b64: DUP5 00000b65: MSTORE 00000b66: PUSH1 0x20 00000b68: DUP5 00000b69: ADD 00000b6a: SWAP3 00000b6b: SWAP1 00000b6c: SWAP3 00000b6d: MSTORE 00000b6e: SWAP1 00000b6f: DUP3 00000b70: ADD 00000b71: MSTORE 00000b72: PUSH1 0x60 00000b74: ADD 00000b75: PUSH1 0x40 00000b77: MLOAD 00000b78: DUP1 00000b79: SWAP2 00000b7a: SUB 00000b7b: SWAP1 00000b7c: LOG2 00000b7d: POP 00000b7e: POP 00000b7f: POP 00000b80: POP 00000b81: JUMP 00000b82: JUMPDEST 00000b83: PUSH0 00000b84: PUSH2 0x0b8c 00000b87: DUP3 00000b88: PUSH2 0x103c 00000b8b: JUMP 00000b8c: JUMPDEST 00000b8d: PUSH0 00000b8e: DUP2 00000b8f: DUP2 00000b90: MSTORE 00000b91: PUSH1 0x09 00000b93: PUSH1 0x20 00000b95: MSTORE 00000b96: PUSH1 0x40 00000b98: SWAP1 00000b99: KECCAK256 00000b9a: SLOAD 00000b9b: SWAP1 00000b9c: SWAP2 00000b9d: POP 00000b9e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bb3: AND 00000bb4: CALLER 00000bb5: EQ 00000bb6: PUSH2 0x0beb 00000bb9: JUMPI 00000bba: PUSH1 0x40 00000bbc: MLOAD 00000bbd: PUSH32 0x0fb8e27800000000000000000000000000000000000000000000000000000000 00000bde: DUP2 00000bdf: MSTORE 00000be0: PUSH1 0x04 00000be2: ADD 00000be3: PUSH1 0x40 00000be5: MLOAD 00000be6: DUP1 00000be7: SWAP2 00000be8: SUB 00000be9: SWAP1 00000bea: REVERT 00000beb: JUMPDEST 00000bec: PUSH32 0x000000000000000000000000a45aca8604a73d80c551faad6355a5c3a5565ec6 00000c0d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c22: AND 00000c23: PUSH4 0x5fe8c13b 00000c28: DUP4 00000c29: PUSH0 00000c2a: ADD 00000c2b: MLOAD 00000c2c: DUP5 00000c2d: PUSH1 0x20 00000c2f: ADD 00000c30: MLOAD 00000c31: DUP6 00000c32: PUSH1 0x40 00000c34: ADD 00000c35: MLOAD 00000c36: DUP7 00000c37: PUSH1 0x60 00000c39: ADD 00000c3a: MLOAD 00000c3b: PUSH1 0x40 00000c3d: MLOAD 00000c3e: DUP6 00000c3f: PUSH4 0xffffffff 00000c44: AND 00000c45: PUSH1 0xe0 00000c47: SHL 00000c48: DUP2 00000c49: MSTORE 00000c4a: PUSH1 0x04 00000c4c: ADD 00000c4d: PUSH2 0x0c59 00000c50: SWAP5 00000c51: SWAP4 00000c52: SWAP3 00000c53: SWAP2 00000c54: SWAP1 00000c55: PUSH2 0x1c13 00000c58: JUMP 00000c59: JUMPDEST 00000c5a: PUSH1 0x20 00000c5c: PUSH1 0x40 00000c5e: MLOAD 00000c5f: DUP1 00000c60: DUP4 00000c61: SUB 00000c62: DUP2 00000c63: PUSH0 00000c64: DUP8 00000c65: GAS 00000c66: CALL 00000c67: ISZERO 00000c68: DUP1 00000c69: ISZERO 00000c6a: PUSH2 0x0c75 00000c6d: JUMPI 00000c6e: RETURNDATASIZE 00000c6f: PUSH0 00000c70: PUSH0 00000c71: RETURNDATACOPY 00000c72: RETURNDATASIZE 00000c73: PUSH0 00000c74: REVERT 00000c75: JUMPDEST 00000c76: POP 00000c77: POP 00000c78: POP 00000c79: POP 00000c7a: PUSH1 0x40 00000c7c: MLOAD 00000c7d: RETURNDATASIZE 00000c7e: PUSH1 0x1f 00000c80: NOT 00000c81: PUSH1 0x1f 00000c83: DUP3 00000c84: ADD 00000c85: AND 00000c86: DUP3 00000c87: ADD 00000c88: DUP1 00000c89: PUSH1 0x40 00000c8b: MSTORE 00000c8c: POP 00000c8d: DUP2 00000c8e: ADD 00000c8f: SWAP1 00000c90: PUSH2 0x0c99 00000c93: SWAP2 00000c94: SWAP1 00000c95: PUSH2 0x1bed 00000c98: JUMP 00000c99: JUMPDEST 00000c9a: PUSH2 0x0ccf 00000c9d: JUMPI 00000c9e: PUSH1 0x40 00000ca0: MLOAD 00000ca1: PUSH32 0x09bde33900000000000000000000000000000000000000000000000000000000 00000cc2: DUP2 00000cc3: MSTORE 00000cc4: PUSH1 0x04 00000cc6: ADD 00000cc7: PUSH1 0x40 00000cc9: MLOAD 00000cca: DUP1 00000ccb: SWAP2 00000ccc: SUB 00000ccd: SWAP1 00000cce: REVERT 00000ccf: JUMPDEST 00000cd0: PUSH2 0x0ce0 00000cd3: PUSH2 0x0cdb 00000cd6: DUP4 00000cd7: PUSH2 0x1169 00000cda: JUMP 00000cdb: JUMPDEST 00000cdc: PUSH2 0x11c5 00000cdf: JUMP 00000ce0: JUMPDEST 00000ce1: PUSH2 0x0d16 00000ce4: JUMPI 00000ce5: PUSH1 0x40 00000ce7: MLOAD 00000ce8: PUSH32 0xc06789fa00000000000000000000000000000000000000000000000000000000 00000d09: DUP2 00000d0a: MSTORE 00000d0b: PUSH1 0x04 00000d0d: ADD 00000d0e: PUSH1 0x40 00000d10: MLOAD 00000d11: DUP1 00000d12: SWAP2 00000d13: SUB 00000d14: SWAP1 00000d15: REVERT 00000d16: JUMPDEST 00000d17: PUSH2 0x0d22 00000d1a: PUSH2 0x0adf 00000d1d: DUP4 00000d1e: PUSH2 0x10db 00000d21: JUMP 00000d22: JUMPDEST 00000d23: PUSH2 0x0d2f 00000d26: CALLER 00000d27: PUSH2 0x0b05 00000d2a: DUP5 00000d2b: PUSH2 0x1176 00000d2e: JUMP 00000d2f: JUMPDEST 00000d30: CALLER 00000d31: PUSH32 0xd2b3e868ae101106371f2bd93abc8d5a4de488b9fe47ed122c23625aa7172f13 00000d52: PUSH2 0x0d5a 00000d55: DUP5 00000d56: PUSH2 0x1169 00000d59: JUMP 00000d5a: JUMPDEST 00000d5b: PUSH2 0x0d63 00000d5e: DUP6 00000d5f: PUSH2 0x103c 00000d62: JUMP 00000d63: JUMPDEST 00000d64: PUSH2 0x0d6c 00000d67: DUP7 00000d68: PUSH2 0x1176 00000d6b: JUMP 00000d6c: JUMPDEST 00000d6d: PUSH1 0x40 00000d6f: DUP1 00000d70: MLOAD 00000d71: SWAP4 00000d72: DUP5 00000d73: MSTORE 00000d74: PUSH1 0x20 00000d76: DUP5 00000d77: ADD 00000d78: SWAP3 00000d79: SWAP1 00000d7a: SWAP3 00000d7b: MSTORE 00000d7c: SWAP1 00000d7d: DUP3 00000d7e: ADD 00000d7f: MSTORE 00000d80: PUSH1 0x60 00000d82: ADD 00000d83: PUSH1 0x40 00000d85: MLOAD 00000d86: DUP1 00000d87: SWAP2 00000d88: SUB 00000d89: SWAP1 00000d8a: LOG2 00000d8b: POP 00000d8c: POP 00000d8d: JUMP 00000d8e: JUMPDEST 00000d8f: CALLER 00000d90: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000da5: PUSH32 0x0000000000000000000000006818809eefce719e480a7526d76bd3e561526b46 00000dc6: AND 00000dc7: EQ 00000dc8: PUSH2 0x0dfd 00000dcb: JUMPI 00000dcc: PUSH1 0x40 00000dce: MLOAD 00000dcf: PUSH32 0x8247bd8000000000000000000000000000000000000000000000000000000000 00000df0: DUP2 00000df1: MSTORE 00000df2: PUSH1 0x04 00000df4: ADD 00000df5: PUSH1 0x40 00000df7: MLOAD 00000df8: DUP1 00000df9: SWAP2 00000dfa: SUB 00000dfb: SWAP1 00000dfc: REVERT 00000dfd: JUMPDEST 00000dfe: PUSH1 0x01 00000e00: SLOAD 00000e01: PUSH1 0xff 00000e03: AND 00000e04: ISZERO 00000e05: PUSH2 0x0e3a 00000e08: JUMPI 00000e09: PUSH1 0x40 00000e0b: MLOAD 00000e0c: PUSH32 0x924b372700000000000000000000000000000000000000000000000000000000 00000e2d: DUP2 00000e2e: MSTORE 00000e2f: PUSH1 0x04 00000e31: ADD 00000e32: PUSH1 0x40 00000e34: MLOAD 00000e35: DUP1 00000e36: SWAP2 00000e37: SUB 00000e38: SWAP1 00000e39: REVERT 00000e3a: JUMPDEST 00000e3b: PUSH1 0x01 00000e3d: DUP1 00000e3e: SLOAD 00000e3f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000e60: AND 00000e61: DUP2 00000e62: OR 00000e63: SWAP1 00000e64: SSTORE 00000e65: PUSH1 0x40 00000e67: MLOAD 00000e68: PUSH32 0xf9dc79d7254099fdf1f86b15c91deac3bf8883e4f340ebef6e3c6b870cc315b3 00000e89: SWAP1 00000e8a: PUSH0 00000e8b: SWAP1 00000e8c: LOG1 00000e8d: JUMP 00000e8e: JUMPDEST 00000e8f: PUSH0 00000e90: PUSH2 0x0e9a 00000e93: PUSH1 0x04 00000e95: DUP4 00000e96: PUSH2 0x11dc 00000e99: JUMP 00000e9a: JUMPDEST 00000e9b: PUSH1 0x05 00000e9d: SLOAD 00000e9e: SWAP1 00000e9f: SWAP2 00000ea0: POP 00000ea1: PUSH1 0x20 00000ea3: LT 00000ea4: ISZERO 00000ea5: PUSH2 0x0eda 00000ea8: JUMPI 00000ea9: PUSH1 0x40 00000eab: MLOAD 00000eac: PUSH32 0x221f404100000000000000000000000000000000000000000000000000000000 00000ecd: DUP2 00000ece: MSTORE 00000ecf: PUSH1 0x04 00000ed1: ADD 00000ed2: PUSH1 0x40 00000ed4: MLOAD 00000ed5: DUP1 00000ed6: SWAP2 00000ed7: SUB 00000ed8: SWAP1 00000ed9: REVERT 00000eda: JUMPDEST 00000edb: PUSH1 0x03 00000edd: SLOAD 00000ede: PUSH0 00000edf: SWAP1 00000ee0: PUSH1 0x40 00000ee2: SWAP1 00000ee3: PUSH2 0x0ef3 00000ee6: SWAP1 00000ee7: PUSH4 0xffffffff 00000eec: AND 00000eed: PUSH1 0x01 00000eef: PUSH2 0x1c63 00000ef2: JUMP 00000ef3: JUMPDEST 00000ef4: PUSH2 0x0efd 00000ef7: SWAP2 00000ef8: SWAP1 00000ef9: PUSH2 0x1c7f 00000efc: JUMP 00000efd: JUMPDEST 00000efe: PUSH4 0xffffffff 00000f03: DUP2 00000f04: AND 00000f05: PUSH0 00000f06: DUP2 00000f07: DUP2 00000f08: MSTORE 00000f09: PUSH1 0x02 00000f0b: PUSH1 0x20 00000f0d: SWAP1 00000f0e: DUP2 00000f0f: MSTORE 00000f10: PUSH1 0x40 00000f12: SWAP2 00000f13: DUP3 00000f14: SWAP1 00000f15: KECCAK256 00000f16: DUP7 00000f17: SWAP1 00000f18: SSTORE 00000f19: PUSH1 0x03 00000f1b: DUP1 00000f1c: SLOAD 00000f1d: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 00000f3e: AND 00000f3f: SWAP1 00000f40: SWAP4 00000f41: OR 00000f42: SWAP1 00000f43: SWAP3 00000f44: SSTORE 00000f45: PUSH1 0x04 00000f47: SLOAD 00000f48: DUP2 00000f49: MLOAD 00000f4a: SWAP1 00000f4b: DUP2 00000f4c: MSTORE 00000f4d: SWAP2 00000f4e: DUP3 00000f4f: ADD 00000f50: DUP7 00000f51: SWAP1 00000f52: MSTORE 00000f53: DUP2 00000f54: ADD 00000f55: DUP5 00000f56: SWAP1 00000f57: MSTORE 00000f58: SWAP1 00000f59: SWAP2 00000f5a: POP 00000f5b: PUSH32 0xcb249c8292372bd11f567786635483fca9e635030baafca55ff1a8940141d221 00000f7c: SWAP1 00000f7d: PUSH1 0x60 00000f7f: ADD 00000f80: PUSH1 0x40 00000f82: MLOAD 00000f83: DUP1 00000f84: SWAP2 00000f85: SUB 00000f86: SWAP1 00000f87: LOG1 00000f88: POP 00000f89: SWAP2 00000f8a: SWAP1 00000f8b: POP 00000f8c: JUMP 00000f8d: JUMPDEST 00000f8e: CALLVALUE 00000f8f: ISZERO 00000f90: PUSH2 0x0fc5 00000f93: JUMPI 00000f94: PUSH1 0x40 00000f96: MLOAD 00000f97: PUSH32 0x7ae9011800000000000000000000000000000000000000000000000000000000 00000fb8: DUP2 00000fb9: MSTORE 00000fba: PUSH1 0x04 00000fbc: ADD 00000fbd: PUSH1 0x40 00000fbf: MLOAD 00000fc0: DUP1 00000fc1: SWAP2 00000fc2: SUB 00000fc3: SWAP1 00000fc4: REVERT 00000fc5: JUMPDEST 00000fc6: PUSH2 0x1007 00000fc9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fde: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000fff: AND 00001000: DUP4 00001001: ADDRESS 00001002: DUP5 00001003: PUSH2 0x1412 00001006: JUMP 00001007: JUMPDEST 00001008: POP 00001009: POP 0000100a: JUMP 0000100b: JUMPDEST 0000100c: PUSH1 0x60 0000100e: DUP2 0000100f: ADD 00001010: MLOAD 00001011: PUSH0 00001012: SWAP1 00001013: PUSH1 0x07 00001015: JUMPDEST 00001016: PUSH1 0x20 00001018: MUL 00001019: ADD 0000101a: MLOAD 0000101b: SWAP3 0000101c: SWAP2 0000101d: POP 0000101e: POP 0000101f: JUMP 00001020: JUMPDEST 00001021: PUSH1 0x60 00001023: DUP2 00001024: ADD 00001025: MLOAD 00001026: PUSH0 00001027: SWAP1 00001028: PUSH1 0x04 0000102a: PUSH2 0x1015 0000102d: JUMP 0000102e: JUMPDEST 0000102f: PUSH1 0x60 00001031: DUP2 00001032: ADD 00001033: MLOAD 00001034: PUSH0 00001035: SWAP1 00001036: PUSH1 0x06 00001038: PUSH2 0x1015 0000103b: JUMP 0000103c: JUMPDEST 0000103d: PUSH1 0x60 0000103f: DUP2 00001040: ADD 00001041: MLOAD 00001042: PUSH0 00001043: SWAP1 00001044: PUSH1 0x03 00001046: PUSH2 0x1015 00001049: JUMP 0000104a: JUMPDEST 0000104b: PUSH0 0000104c: DUP2 0000104d: PUSH0 0000104e: SUB 0000104f: PUSH2 0x1059 00001052: JUMPI 00001053: POP 00001054: PUSH0 00001055: SWAP2 00001056: SWAP1 00001057: POP 00001058: JUMP 00001059: JUMPDEST 0000105a: PUSH1 0x03 0000105c: SLOAD 0000105d: PUSH4 0xffffffff 00001062: AND 00001063: PUSH0 00001064: JUMPDEST 00001065: PUSH1 0x40 00001067: PUSH4 0xffffffff 0000106c: DUP3 0000106d: AND 0000106e: LT 0000106f: ISZERO 00001070: PUSH2 0x10c4 00001073: JUMPI 00001074: PUSH4 0xffffffff 00001079: DUP3 0000107a: AND 0000107b: PUSH0 0000107c: SWAP1 0000107d: DUP2 0000107e: MSTORE 0000107f: PUSH1 0x02 00001081: PUSH1 0x20 00001083: MSTORE 00001084: PUSH1 0x40 00001086: SWAP1 00001087: KECCAK256 00001088: SLOAD 00001089: DUP5 0000108a: SUB 0000108b: PUSH2 0x1098 0000108e: JUMPI 0000108f: POP 00001090: PUSH1 0x01 00001092: SWAP4 00001093: SWAP3 00001094: POP 00001095: POP 00001096: POP 00001097: JUMP 00001098: JUMPDEST 00001099: PUSH1 0x40 0000109b: PUSH1 0x01 0000109d: PUSH2 0x10a6 000010a0: DUP3 000010a1: DUP6 000010a2: PUSH2 0x1c63 000010a5: JUMP 000010a6: JUMPDEST 000010a7: PUSH2 0x10b0 000010aa: SWAP2 000010ab: SWAP1 000010ac: PUSH2 0x1ca6 000010af: JUMP 000010b0: JUMPDEST 000010b1: PUSH2 0x10ba 000010b4: SWAP2 000010b5: SWAP1 000010b6: PUSH2 0x1c7f 000010b9: JUMP 000010ba: JUMPDEST 000010bb: SWAP2 000010bc: POP 000010bd: PUSH1 0x01 000010bf: ADD 000010c0: PUSH2 0x1064 000010c3: JUMP 000010c4: JUMPDEST 000010c5: POP 000010c6: PUSH0 000010c7: SWAP4 000010c8: SWAP3 000010c9: POP 000010ca: POP 000010cb: POP 000010cc: JUMP 000010cd: JUMPDEST 000010ce: PUSH1 0x60 000010d0: DUP2 000010d1: ADD 000010d2: MLOAD 000010d3: PUSH0 000010d4: SWAP1 000010d5: PUSH1 0x05 000010d7: PUSH2 0x1015 000010da: JUMP 000010db: JUMPDEST 000010dc: PUSH1 0x60 000010de: DUP2 000010df: ADD 000010e0: MLOAD 000010e1: PUSH0 000010e2: SWAP1 000010e3: PUSH1 0x01 000010e5: PUSH2 0x1015 000010e8: JUMP 000010e9: JUMPDEST 000010ea: PUSH0 000010eb: DUP2 000010ec: DUP2 000010ed: MSTORE 000010ee: PUSH1 0x08 000010f0: PUSH1 0x20 000010f2: MSTORE 000010f3: PUSH1 0x40 000010f5: SWAP1 000010f6: KECCAK256 000010f7: SLOAD 000010f8: PUSH1 0xff 000010fa: AND 000010fb: ISZERO 000010fc: PUSH2 0x1131 000010ff: JUMPI 00001100: PUSH1 0x40 00001102: MLOAD 00001103: PUSH32 0xb115d85700000000000000000000000000000000000000000000000000000000 00001124: DUP2 00001125: MSTORE 00001126: PUSH1 0x04 00001128: ADD 00001129: PUSH1 0x40 0000112b: MLOAD 0000112c: DUP1 0000112d: SWAP2 0000112e: SUB 0000112f: SWAP1 00001130: REVERT 00001131: JUMPDEST 00001132: PUSH0 00001133: SWAP1 00001134: DUP2 00001135: MSTORE 00001136: PUSH1 0x08 00001138: PUSH1 0x20 0000113a: MSTORE 0000113b: PUSH1 0x40 0000113d: SWAP1 0000113e: KECCAK256 0000113f: DUP1 00001140: SLOAD 00001141: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00001162: AND 00001163: PUSH1 0x01 00001165: OR 00001166: SWAP1 00001167: SSTORE 00001168: JUMP 00001169: JUMPDEST 0000116a: PUSH1 0x60 0000116c: DUP2 0000116d: ADD 0000116e: MLOAD 0000116f: PUSH0 00001170: SWAP1 00001171: DUP2 00001172: PUSH2 0x1015 00001175: JUMP 00001176: JUMPDEST 00001177: PUSH1 0x60 00001179: DUP2 0000117a: ADD 0000117b: MLOAD 0000117c: PUSH0 0000117d: SWAP1 0000117e: PUSH1 0x02 00001180: PUSH2 0x1015 00001183: JUMP 00001184: JUMPDEST 00001185: PUSH2 0x1007 00001188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119d: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 000011be: AND 000011bf: DUP4 000011c0: DUP4 000011c1: PUSH2 0x14a1 000011c4: JUMP 000011c5: JUMPDEST 000011c6: PUSH0 000011c7: DUP2 000011c8: DUP2 000011c9: MSTORE 000011ca: PUSH1 0x07 000011cc: PUSH1 0x20 000011ce: MSTORE 000011cf: PUSH1 0x40 000011d1: DUP2 000011d2: KECCAK256 000011d3: SLOAD 000011d4: ISZERO 000011d5: ISZERO 000011d6: JUMPDEST 000011d7: SWAP3 000011d8: SWAP2 000011d9: POP 000011da: POP 000011db: JUMP 000011dc: JUMPDEST 000011dd: PUSH0 000011de: PUSH32 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 000011ff: DUP3 00001200: LT 00001201: PUSH2 0x1236 00001204: JUMPI 00001205: PUSH1 0x40 00001207: MLOAD 00001208: PUSH32 0xc380a82e00000000000000000000000000000000000000000000000000000000 00001229: DUP2 0000122a: MSTORE 0000122b: PUSH1 0x04 0000122d: ADD 0000122e: PUSH1 0x40 00001230: MLOAD 00001231: DUP1 00001232: SWAP2 00001233: SUB 00001234: SWAP1 00001235: REVERT 00001236: JUMPDEST 00001237: DUP2 00001238: PUSH0 00001239: SUB 0000123a: PUSH2 0x126f 0000123d: JUMPI 0000123e: PUSH1 0x40 00001240: MLOAD 00001241: PUSH32 0x29691be200000000000000000000000000000000000000000000000000000000 00001262: DUP2 00001263: MSTORE 00001264: PUSH1 0x04 00001266: ADD 00001267: PUSH1 0x40 00001269: MLOAD 0000126a: DUP1 0000126b: SWAP2 0000126c: SUB 0000126d: SWAP1 0000126e: REVERT 0000126f: JUMPDEST 00001270: PUSH0 00001271: DUP3 00001272: DUP2 00001273: MSTORE 00001274: PUSH1 0x03 00001276: DUP5 00001277: ADD 00001278: PUSH1 0x20 0000127a: MSTORE 0000127b: PUSH1 0x40 0000127d: SWAP1 0000127e: KECCAK256 0000127f: SLOAD 00001280: ISZERO 00001281: PUSH2 0x12b6 00001284: JUMPI 00001285: PUSH1 0x40 00001287: MLOAD 00001288: PUSH32 0x258a195a00000000000000000000000000000000000000000000000000000000 000012a9: DUP2 000012aa: MSTORE 000012ab: PUSH1 0x04 000012ad: ADD 000012ae: PUSH1 0x40 000012b0: MLOAD 000012b1: DUP1 000012b2: SWAP2 000012b3: SUB 000012b4: SWAP1 000012b5: REVERT 000012b6: JUMPDEST 000012b7: DUP3 000012b8: SLOAD 000012b9: PUSH1 0x01 000012bb: DUP1 000012bc: DUP6 000012bd: ADD 000012be: SLOAD 000012bf: SWAP1 000012c0: PUSH2 0x12ca 000012c3: SWAP1 000012c4: DUP4 000012c5: SWAP1 000012c6: PUSH2 0x1cc2 000012c9: JUMP 000012ca: JUMPDEST 000012cb: PUSH2 0x12d5 000012ce: DUP3 000012cf: PUSH1 0x02 000012d1: PUSH2 0x1df6 000012d4: JUMP 000012d5: JUMPDEST 000012d6: LT 000012d7: ISZERO 000012d8: PUSH2 0x12e7 000012db: JUMPI 000012dc: PUSH2 0x12e4 000012df: DUP2 000012e0: PUSH2 0x1a00 000012e3: JUMP 000012e4: JUMPDEST 000012e5: SWAP1 000012e6: POP 000012e7: JUMPDEST 000012e8: PUSH1 0x01 000012ea: DUP6 000012eb: ADD 000012ec: DUP2 000012ed: SWAP1 000012ee: SSTORE 000012ef: DUP4 000012f0: PUSH0 000012f1: JUMPDEST 000012f2: DUP3 000012f3: DUP2 000012f4: LT 000012f5: ISZERO 000012f6: PUSH2 0x13d8 000012f9: JUMPI 000012fa: DUP1 000012fb: DUP5 000012fc: SWAP1 000012fd: SHR 000012fe: PUSH1 0x01 00001300: AND 00001301: PUSH1 0x01 00001303: SUB 00001304: PUSH2 0x13bd 00001307: JUMPI 00001308: PUSH1 0x40 0000130a: DUP1 0000130b: MLOAD 0000130c: DUP1 0000130d: DUP3 0000130e: ADD 0000130f: DUP3 00001310: MSTORE 00001311: PUSH0 00001312: DUP4 00001313: DUP2 00001314: MSTORE 00001315: PUSH1 0x02 00001317: DUP11 00001318: ADD 00001319: PUSH1 0x20 0000131b: SWAP1 0000131c: DUP2 0000131d: MSTORE 0000131e: SWAP1 0000131f: DUP4 00001320: SWAP1 00001321: KECCAK256 00001322: SLOAD 00001323: DUP3 00001324: MSTORE 00001325: DUP2 00001326: ADD 00001327: DUP5 00001328: SWAP1 00001329: MSTORE 0000132a: SWAP1 0000132b: MLOAD 0000132c: PUSH32 0x561558fe00000000000000000000000000000000000000000000000000000000 0000134d: DUP2 0000134e: MSTORE 0000134f: PUSH20 0x8ffda7ed8b4ad98c2c34f54b76821711f4a6f2c5 00001364: SWAP2 00001365: PUSH4 0x561558fe 0000136a: SWAP2 0000136b: PUSH2 0x1377 0000136e: SWAP2 0000136f: SWAP1 00001370: PUSH1 0x04 00001372: ADD 00001373: PUSH2 0x1e01 00001376: JUMP 00001377: JUMPDEST 00001378: PUSH1 0x20 0000137a: PUSH1 0x40 0000137c: MLOAD 0000137d: DUP1 0000137e: DUP4 0000137f: SUB 00001380: DUP2 00001381: DUP7 00001382: GAS 00001383: DELEGATECALL 00001384: ISZERO 00001385: DUP1 00001386: ISZERO 00001387: PUSH2 0x1392 0000138a: JUMPI 0000138b: RETURNDATASIZE 0000138c: PUSH0 0000138d: PUSH0 0000138e: RETURNDATACOPY 0000138f: RETURNDATASIZE 00001390: PUSH0 00001391: REVERT 00001392: JUMPDEST 00001393: POP 00001394: POP 00001395: POP 00001396: POP 00001397: PUSH1 0x40 00001399: MLOAD 0000139a: RETURNDATASIZE 0000139b: PUSH1 0x1f 0000139d: NOT 0000139e: PUSH1 0x1f 000013a0: DUP3 000013a1: ADD 000013a2: AND 000013a3: DUP3 000013a4: ADD 000013a5: DUP1 000013a6: PUSH1 0x40 000013a8: MSTORE 000013a9: POP 000013aa: DUP2 000013ab: ADD 000013ac: SWAP1 000013ad: PUSH2 0x13b6 000013b0: SWAP2 000013b1: SWAP1 000013b2: PUSH2 0x1aa7 000013b5: JUMP 000013b6: JUMPDEST 000013b7: SWAP2 000013b8: POP 000013b9: PUSH2 0x13d0 000013bc: JUMP 000013bd: JUMPDEST 000013be: PUSH0 000013bf: DUP2 000013c0: DUP2 000013c1: MSTORE 000013c2: PUSH1 0x02 000013c4: DUP9 000013c5: ADD 000013c6: PUSH1 0x20 000013c8: MSTORE 000013c9: PUSH1 0x40 000013cb: SWAP1 000013cc: KECCAK256 000013cd: DUP3 000013ce: SWAP1 000013cf: SSTORE 000013d0: JUMPDEST 000013d1: PUSH1 0x01 000013d3: ADD 000013d4: PUSH2 0x12f1 000013d7: JUMP 000013d8: JUMPDEST 000013d9: POP 000013da: PUSH2 0x13e2 000013dd: DUP4 000013de: PUSH2 0x1a00 000013e1: JUMP 000013e2: JUMPDEST 000013e3: DUP1 000013e4: DUP8 000013e5: SSTORE 000013e6: PUSH0 000013e7: SWAP3 000013e8: DUP4 000013e9: MSTORE 000013ea: PUSH1 0x02 000013ec: DUP8 000013ed: ADD 000013ee: PUSH1 0x20 000013f0: SWAP1 000013f1: DUP2 000013f2: MSTORE 000013f3: PUSH1 0x40 000013f5: DUP1 000013f6: DUP6 000013f7: KECCAK256 000013f8: DUP5 000013f9: SWAP1 000013fa: SSTORE 000013fb: SWAP7 000013fc: DUP5 000013fd: MSTORE 000013fe: PUSH1 0x03 00001400: SWAP1 00001401: SWAP8 00001402: ADD 00001403: SWAP1 00001404: SWAP7 00001405: MSTORE 00001406: SWAP4 00001407: SWAP1 00001408: KECCAK256 00001409: SWAP4 0000140a: SWAP1 0000140b: SWAP4 0000140c: SSTORE 0000140d: POP 0000140e: SWAP2 0000140f: SWAP1 00001410: POP 00001411: JUMP 00001412: JUMPDEST 00001413: PUSH1 0x40 00001415: MLOAD 00001416: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000142b: DUP5 0000142c: DUP2 0000142d: AND 0000142e: PUSH1 0x24 00001430: DUP4 00001431: ADD 00001432: MSTORE 00001433: DUP4 00001434: DUP2 00001435: AND 00001436: PUSH1 0x44 00001438: DUP4 00001439: ADD 0000143a: MSTORE 0000143b: PUSH1 0x64 0000143d: DUP3 0000143e: ADD 0000143f: DUP4 00001440: SWAP1 00001441: MSTORE 00001442: PUSH2 0x149b 00001445: SWAP2 00001446: DUP7 00001447: SWAP2 00001448: DUP3 00001449: AND 0000144a: SWAP1 0000144b: PUSH4 0x23b872dd 00001450: SWAP1 00001451: PUSH1 0x84 00001453: ADD 00001454: JUMPDEST 00001455: PUSH1 0x40 00001457: MLOAD 00001458: PUSH1 0x20 0000145a: DUP2 0000145b: DUP4 0000145c: SUB 0000145d: SUB 0000145e: DUP2 0000145f: MSTORE 00001460: SWAP1 00001461: PUSH1 0x40 00001463: MSTORE 00001464: SWAP2 00001465: POP 00001466: PUSH1 0xe0 00001468: SHL 00001469: PUSH1 0x20 0000146b: DUP3 0000146c: ADD 0000146d: DUP1 0000146e: MLOAD 0000146f: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000148c: DUP4 0000148d: DUP2 0000148e: DUP4 0000148f: AND 00001490: OR 00001491: DUP4 00001492: MSTORE 00001493: POP 00001494: POP 00001495: POP 00001496: POP 00001497: PUSH2 0x14e4 0000149a: JUMP 0000149b: JUMPDEST 0000149c: POP 0000149d: POP 0000149e: POP 0000149f: POP 000014a0: JUMP 000014a1: JUMPDEST 000014a2: PUSH1 0x40 000014a4: MLOAD 000014a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014ba: DUP4 000014bb: DUP2 000014bc: AND 000014bd: PUSH1 0x24 000014bf: DUP4 000014c0: ADD 000014c1: MSTORE 000014c2: PUSH1 0x44 000014c4: DUP3 000014c5: ADD 000014c6: DUP4 000014c7: SWAP1 000014c8: MSTORE 000014c9: PUSH2 0x14df 000014cc: SWAP2 000014cd: DUP6 000014ce: SWAP2 000014cf: DUP3 000014d0: AND 000014d1: SWAP1 000014d2: PUSH4 0xa9059cbb 000014d7: SWAP1 000014d8: PUSH1 0x64 000014da: ADD 000014db: PUSH2 0x1454 000014de: JUMP 000014df: JUMPDEST 000014e0: POP 000014e1: POP 000014e2: POP 000014e3: JUMP 000014e4: JUMPDEST 000014e5: PUSH0 000014e6: PUSH0 000014e7: PUSH1 0x20 000014e9: PUSH0 000014ea: DUP5 000014eb: MLOAD 000014ec: PUSH1 0x20 000014ee: DUP7 000014ef: ADD 000014f0: PUSH0 000014f1: DUP9 000014f2: GAS 000014f3: CALL 000014f4: DUP1 000014f5: PUSH2 0x1503 000014f8: JUMPI 000014f9: PUSH1 0x40 000014fb: MLOAD 000014fc: RETURNDATASIZE 000014fd: PUSH0 000014fe: DUP3 000014ff: RETURNDATACOPY 00001500: RETURNDATASIZE 00001501: DUP2 00001502: REVERT 00001503: JUMPDEST 00001504: POP 00001505: POP 00001506: PUSH0 00001507: MLOAD 00001508: RETURNDATASIZE 00001509: SWAP2 0000150a: POP 0000150b: DUP2 0000150c: ISZERO 0000150d: PUSH2 0x151a 00001510: JUMPI 00001511: DUP1 00001512: PUSH1 0x01 00001514: EQ 00001515: ISZERO 00001516: PUSH2 0x1534 00001519: JUMP 0000151a: JUMPDEST 0000151b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001530: DUP5 00001531: AND 00001532: EXTCODESIZE 00001533: ISZERO 00001534: JUMPDEST 00001535: ISZERO 00001536: PUSH2 0x149b 00001539: JUMPI 0000153a: PUSH1 0x40 0000153c: MLOAD 0000153d: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000 0000155e: DUP2 0000155f: MSTORE 00001560: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001575: DUP6 00001576: AND 00001577: PUSH1 0x04 00001579: DUP3 0000157a: ADD 0000157b: MSTORE 0000157c: PUSH1 0x24 0000157e: ADD 0000157f: PUSH1 0x40 00001581: MLOAD 00001582: DUP1 00001583: SWAP2 00001584: SUB 00001585: SWAP1 00001586: REVERT 00001587: JUMPDEST 00001588: DUP1 00001589: CALLDATALOAD 0000158a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000159f: DUP2 000015a0: AND 000015a1: DUP2 000015a2: EQ 000015a3: PUSH2 0x15aa 000015a6: JUMPI 000015a7: PUSH0 000015a8: PUSH0 000015a9: REVERT 000015aa: JUMPDEST 000015ab: SWAP2 000015ac: SWAP1 000015ad: POP 000015ae: JUMP 000015af: JUMPDEST 000015b0: PUSH0 000015b1: PUSH0 000015b2: PUSH0 000015b3: PUSH1 0x60 000015b5: DUP5 000015b6: DUP7 000015b7: SUB 000015b8: SLT 000015b9: ISZERO 000015ba: PUSH2 0x15c1 000015bd: JUMPI 000015be: PUSH0 000015bf: PUSH0 000015c0: REVERT 000015c1: JUMPDEST 000015c2: PUSH2 0x15ca 000015c5: DUP5 000015c6: PUSH2 0x1587 000015c9: JUMP 000015ca: JUMPDEST 000015cb: SWAP6 000015cc: PUSH1 0x20 000015ce: DUP6 000015cf: ADD 000015d0: CALLDATALOAD 000015d1: SWAP6 000015d2: POP 000015d3: PUSH1 0x40 000015d5: SWAP1 000015d6: SWAP5 000015d7: ADD 000015d8: CALLDATALOAD 000015d9: SWAP4 000015da: SWAP3 000015db: POP 000015dc: POP 000015dd: POP 000015de: JUMP 000015df: JUMPDEST 000015e0: PUSH0 000015e1: PUSH1 0x20 000015e3: DUP3 000015e4: DUP5 000015e5: SUB 000015e6: SLT 000015e7: ISZERO 000015e8: PUSH2 0x15ef 000015eb: JUMPI 000015ec: PUSH0 000015ed: PUSH0 000015ee: REVERT 000015ef: JUMPDEST 000015f0: POP 000015f1: CALLDATALOAD 000015f2: SWAP2 000015f3: SWAP1 000015f4: POP 000015f5: JUMP 000015f6: JUMPDEST 000015f7: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001618: PUSH0 00001619: MSTORE 0000161a: PUSH1 0x41 0000161c: PUSH1 0x04 0000161e: MSTORE 0000161f: PUSH1 0x24 00001621: PUSH0 00001622: REVERT 00001623: JUMPDEST 00001624: PUSH1 0x40 00001626: MLOAD 00001627: PUSH1 0x80 00001629: DUP2 0000162a: ADD 0000162b: PUSH8 0xffffffffffffffff 00001634: DUP2 00001635: GT 00001636: DUP3 00001637: DUP3 00001638: LT 00001639: OR 0000163a: ISZERO 0000163b: PUSH2 0x1646 0000163e: JUMPI 0000163f: PUSH2 0x1646 00001642: PUSH2 0x15f6 00001645: JUMP 00001646: JUMPDEST 00001647: PUSH1 0x40 00001649: MSTORE 0000164a: SWAP1 0000164b: JUMP 0000164c: JUMPDEST 0000164d: PUSH1 0x40 0000164f: DUP1 00001650: MLOAD 00001651: SWAP1 00001652: DUP2 00001653: ADD 00001654: PUSH8 0xffffffffffffffff 0000165d: DUP2 0000165e: GT 0000165f: DUP3 00001660: DUP3 00001661: LT 00001662: OR 00001663: ISZERO 00001664: PUSH2 0x1646 00001667: JUMPI 00001668: PUSH2 0x1646 0000166b: PUSH2 0x15f6 0000166e: JUMP 0000166f: JUMPDEST 00001670: PUSH1 0x40 00001672: MLOAD 00001673: PUSH1 0x1f 00001675: DUP3 00001676: ADD 00001677: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001698: AND 00001699: DUP2 0000169a: ADD 0000169b: PUSH8 0xffffffffffffffff 000016a4: DUP2 000016a5: GT 000016a6: DUP3 000016a7: DUP3 000016a8: LT 000016a9: OR 000016aa: ISZERO 000016ab: PUSH2 0x16b6 000016ae: JUMPI 000016af: PUSH2 0x16b6 000016b2: PUSH2 0x15f6 000016b5: JUMP 000016b6: JUMPDEST 000016b7: PUSH1 0x40 000016b9: MSTORE 000016ba: SWAP2 000016bb: SWAP1 000016bc: POP 000016bd: JUMP 000016be: JUMPDEST 000016bf: PUSH0 000016c0: DUP3 000016c1: PUSH1 0x1f 000016c3: DUP4 000016c4: ADD 000016c5: SLT 000016c6: PUSH2 0x16cd 000016c9: JUMPI 000016ca: PUSH0 000016cb: PUSH0 000016cc: REVERT 000016cd: JUMPDEST 000016ce: PUSH0 000016cf: PUSH2 0x16d8 000016d2: PUSH1 0x40 000016d4: PUSH2 0x166f 000016d7: JUMP 000016d8: JUMPDEST 000016d9: SWAP1 000016da: POP 000016db: DUP1 000016dc: PUSH1 0x40 000016de: DUP5 000016df: ADD 000016e0: DUP6 000016e1: DUP2 000016e2: GT 000016e3: ISZERO 000016e4: PUSH2 0x16eb 000016e7: JUMPI 000016e8: PUSH0 000016e9: PUSH0 000016ea: REVERT 000016eb: JUMPDEST 000016ec: DUP5 000016ed: JUMPDEST 000016ee: DUP2 000016ef: DUP2 000016f0: LT 000016f1: ISZERO 000016f2: PUSH2 0x1705 000016f5: JUMPI 000016f6: DUP1 000016f7: CALLDATALOAD 000016f8: DUP4 000016f9: MSTORE 000016fa: PUSH1 0x20 000016fc: SWAP3 000016fd: DUP4 000016fe: ADD 000016ff: SWAP3 00001700: ADD 00001701: PUSH2 0x16ed 00001704: JUMP 00001705: JUMPDEST 00001706: POP 00001707: SWAP2 00001708: SWAP6 00001709: SWAP5 0000170a: POP 0000170b: POP 0000170c: POP 0000170d: POP 0000170e: POP 0000170f: JUMP 00001710: JUMPDEST 00001711: PUSH0 00001712: DUP3 00001713: PUSH1 0x1f 00001715: DUP4 00001716: ADD 00001717: SLT 00001718: PUSH2 0x171f 0000171b: JUMPI 0000171c: PUSH0 0000171d: PUSH0 0000171e: REVERT 0000171f: JUMPDEST 00001720: PUSH1 0x40 00001722: PUSH2 0x172a 00001725: DUP2 00001726: PUSH2 0x166f 00001729: JUMP 0000172a: JUMPDEST 0000172b: DUP1 0000172c: PUSH1 0x80 0000172e: DUP6 0000172f: ADD 00001730: DUP7 00001731: DUP2 00001732: GT 00001733: ISZERO 00001734: PUSH2 0x173b 00001737: JUMPI 00001738: PUSH0 00001739: PUSH0 0000173a: REVERT 0000173b: JUMPDEST 0000173c: DUP6 0000173d: JUMPDEST 0000173e: DUP2 0000173f: DUP2 00001740: LT 00001741: ISZERO 00001742: PUSH2 0x175e 00001745: JUMPI 00001746: PUSH2 0x174f 00001749: DUP9 0000174a: DUP3 0000174b: PUSH2 0x16be 0000174e: JUMP 0000174f: JUMPDEST 00001750: DUP5 00001751: MSTORE 00001752: PUSH1 0x20 00001754: SWAP1 00001755: SWAP4 00001756: ADD 00001757: SWAP3 00001758: DUP5 00001759: ADD 0000175a: PUSH2 0x173d 0000175d: JUMP 0000175e: JUMPDEST 0000175f: POP 00001760: SWAP1 00001761: SWAP7 00001762: SWAP6 00001763: POP 00001764: POP 00001765: POP 00001766: POP 00001767: POP 00001768: POP 00001769: JUMP 0000176a: JUMPDEST 0000176b: PUSH0 0000176c: PUSH2 0x0200 0000176f: DUP3 00001770: DUP5 00001771: SUB 00001772: SLT 00001773: ISZERO 00001774: PUSH2 0x177b 00001777: JUMPI 00001778: PUSH0 00001779: PUSH0 0000177a: REVERT 0000177b: JUMPDEST 0000177c: PUSH2 0x1783 0000177f: PUSH2 0x1623 00001782: JUMP 00001783: JUMPDEST 00001784: SWAP1 00001785: POP 00001786: PUSH2 0x178f 00001789: DUP4 0000178a: DUP4 0000178b: PUSH2 0x16be 0000178e: JUMP 0000178f: JUMPDEST 00001790: DUP2 00001791: MSTORE 00001792: PUSH2 0x179e 00001795: DUP4 00001796: PUSH1 0x40 00001798: DUP5 00001799: ADD 0000179a: PUSH2 0x1710 0000179d: JUMP 0000179e: JUMPDEST 0000179f: PUSH1 0x20 000017a1: DUP3 000017a2: ADD 000017a3: MSTORE 000017a4: PUSH2 0x17b0 000017a7: DUP4 000017a8: PUSH1 0xc0 000017aa: DUP5 000017ab: ADD 000017ac: PUSH2 0x16be 000017af: JUMP 000017b0: JUMPDEST 000017b1: PUSH1 0x40 000017b3: DUP3 000017b4: ADD 000017b5: MSTORE 000017b6: PUSH0 000017b7: DUP4 000017b8: PUSH2 0x011f 000017bb: DUP5 000017bc: ADD 000017bd: SLT 000017be: PUSH2 0x17c5 000017c1: JUMPI 000017c2: PUSH0 000017c3: PUSH0 000017c4: REVERT 000017c5: JUMPDEST 000017c6: POP 000017c7: PUSH0 000017c8: DUP1 000017c9: PUSH2 0x0100 000017cc: PUSH2 0x17d4 000017cf: DUP2 000017d0: PUSH2 0x166f 000017d3: JUMP 000017d4: JUMPDEST 000017d5: SWAP2 000017d6: POP 000017d7: DUP2 000017d8: SWAP3 000017d9: POP 000017da: PUSH2 0x0200 000017dd: DUP6 000017de: ADD 000017df: DUP7 000017e0: DUP2 000017e1: GT 000017e2: ISZERO 000017e3: PUSH2 0x17ea 000017e6: JUMPI 000017e7: PUSH0 000017e8: PUSH0 000017e9: REVERT 000017ea: JUMPDEST 000017eb: SWAP1 000017ec: DUP6 000017ed: ADD 000017ee: SWAP1 000017ef: JUMPDEST 000017f0: DUP1 000017f1: DUP3 000017f2: LT 000017f3: ISZERO 000017f4: PUSH2 0x180a 000017f7: JUMPI 000017f8: DUP2 000017f9: CALLDATALOAD 000017fa: DUP5 000017fb: MSTORE 000017fc: PUSH1 0x20 000017fe: SWAP4 000017ff: DUP5 00001800: ADD 00001801: SWAP4 00001802: SWAP1 00001803: SWAP2 00001804: ADD 00001805: SWAP1 00001806: PUSH2 0x17ef 00001809: JUMP 0000180a: JUMPDEST 0000180b: POP 0000180c: POP 0000180d: PUSH1 0x60 0000180f: DUP4 00001810: ADD 00001811: MSTORE 00001812: POP 00001813: SWAP3 00001814: SWAP2 00001815: POP 00001816: POP 00001817: JUMP 00001818: JUMPDEST 00001819: PUSH0 0000181a: PUSH0 0000181b: PUSH2 0x0220 0000181e: DUP4 0000181f: DUP6 00001820: SUB 00001821: SLT 00001822: ISZERO 00001823: PUSH2 0x182a 00001826: JUMPI 00001827: PUSH0 00001828: PUSH0 00001829: REVERT 0000182a: JUMPDEST 0000182b: DUP3 0000182c: CALLDATALOAD 0000182d: PUSH8 0xffffffffffffffff 00001836: DUP2 00001837: GT 00001838: ISZERO 00001839: PUSH2 0x1840 0000183c: JUMPI 0000183d: PUSH0 0000183e: PUSH0 0000183f: REVERT 00001840: JUMPDEST 00001841: DUP4 00001842: ADD 00001843: PUSH1 0x40 00001845: DUP2 00001846: DUP7 00001847: SUB 00001848: SLT 00001849: ISZERO 0000184a: PUSH2 0x1851 0000184d: JUMPI 0000184e: PUSH0 0000184f: PUSH0 00001850: REVERT 00001851: JUMPDEST 00001852: PUSH2 0x1859 00001855: PUSH2 0x164c 00001858: JUMP 00001859: JUMPDEST 0000185a: PUSH2 0x1862 0000185d: DUP3 0000185e: PUSH2 0x1587 00001861: JUMP 00001862: JUMPDEST 00001863: DUP2 00001864: MSTORE 00001865: PUSH1 0x20 00001867: DUP3 00001868: ADD 00001869: CALLDATALOAD 0000186a: PUSH8 0xffffffffffffffff 00001873: DUP2 00001874: GT 00001875: ISZERO 00001876: PUSH2 0x187d 00001879: JUMPI 0000187a: PUSH0 0000187b: PUSH0 0000187c: REVERT 0000187d: JUMPDEST 0000187e: DUP1 0000187f: DUP4 00001880: ADD 00001881: SWAP3 00001882: POP 00001883: POP 00001884: DUP6 00001885: PUSH1 0x1f 00001887: DUP4 00001888: ADD 00001889: SLT 0000188a: PUSH2 0x1891 0000188d: JUMPI 0000188e: PUSH0 0000188f: PUSH0 00001890: REVERT 00001891: JUMPDEST 00001892: DUP2 00001893: CALLDATALOAD 00001894: PUSH8 0xffffffffffffffff 0000189d: DUP2 0000189e: GT 0000189f: ISZERO 000018a0: PUSH2 0x18ab 000018a3: JUMPI 000018a4: PUSH2 0x18ab 000018a7: PUSH2 0x15f6 000018aa: JUMP 000018ab: JUMPDEST 000018ac: PUSH2 0x18dc 000018af: PUSH1 0x20 000018b1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000018d2: PUSH1 0x1f 000018d4: DUP5 000018d5: ADD 000018d6: AND 000018d7: ADD 000018d8: PUSH2 0x166f 000018db: JUMP 000018dc: JUMPDEST 000018dd: DUP2 000018de: DUP2 000018df: MSTORE 000018e0: DUP8 000018e1: PUSH1 0x20 000018e3: DUP4 000018e4: DUP7 000018e5: ADD 000018e6: ADD 000018e7: GT 000018e8: ISZERO 000018e9: PUSH2 0x18f0 000018ec: JUMPI 000018ed: PUSH0 000018ee: PUSH0 000018ef: REVERT 000018f0: JUMPDEST 000018f1: DUP2 000018f2: PUSH1 0x20 000018f4: DUP6 000018f5: ADD 000018f6: PUSH1 0x20 000018f8: DUP4 000018f9: ADD 000018fa: CALLDATACOPY 000018fb: PUSH0 000018fc: PUSH1 0x20 000018fe: DUP4 000018ff: DUP4 00001900: ADD 00001901: ADD 00001902: MSTORE 00001903: DUP1 00001904: PUSH1 0x20 00001906: DUP5 00001907: ADD 00001908: MSTORE 00001909: POP 0000190a: POP 0000190b: DUP1 0000190c: SWAP4 0000190d: POP 0000190e: POP 0000190f: POP 00001910: PUSH2 0x191c 00001913: DUP5 00001914: PUSH1 0x20 00001916: DUP6 00001917: ADD 00001918: PUSH2 0x176a 0000191b: JUMP 0000191c: JUMPDEST 0000191d: SWAP1 0000191e: POP 0000191f: SWAP3 00001920: POP 00001921: SWAP3 00001922: SWAP1 00001923: POP 00001924: JUMP 00001925: JUMPDEST 00001926: PUSH0 00001927: PUSH2 0x0180 0000192a: DUP3 0000192b: DUP5 0000192c: SUB 0000192d: SLT 0000192e: DUP1 0000192f: ISZERO 00001930: PUSH2 0x1937 00001933: JUMPI 00001934: PUSH0 00001935: PUSH0 00001936: REVERT 00001937: JUMPDEST 00001938: POP 00001939: PUSH0 0000193a: DUP1 0000193b: PUSH2 0x1942 0000193e: PUSH2 0x1623 00001941: JUMP 00001942: JUMPDEST 00001943: SWAP2 00001944: POP 00001945: PUSH2 0x194e 00001948: DUP6 00001949: DUP6 0000194a: PUSH2 0x16be 0000194d: JUMP 0000194e: JUMPDEST 0000194f: DUP3 00001950: MSTORE 00001951: PUSH2 0x195d 00001954: DUP6 00001955: PUSH1 0x40 00001957: DUP7 00001958: ADD 00001959: PUSH2 0x1710 0000195c: JUMP 0000195d: JUMPDEST 0000195e: PUSH1 0x20 00001960: DUP4 00001961: ADD 00001962: MSTORE 00001963: PUSH2 0x196f 00001966: DUP6 00001967: PUSH1 0xc0 00001969: DUP7 0000196a: ADD 0000196b: PUSH2 0x16be 0000196e: JUMP 0000196f: JUMPDEST 00001970: PUSH1 0x40 00001972: DUP4 00001973: ADD 00001974: MSTORE 00001975: DUP5 00001976: PUSH2 0x011f 00001979: DUP6 0000197a: ADD 0000197b: SLT 0000197c: PUSH2 0x1983 0000197f: JUMPI 00001980: PUSH0 00001981: PUSH0 00001982: REVERT 00001983: JUMPDEST 00001984: POP 00001985: PUSH0 00001986: DUP1 00001987: PUSH2 0x1990 0000198a: PUSH1 0x80 0000198c: PUSH2 0x166f 0000198f: JUMP 00001990: JUMPDEST 00001991: SWAP1 00001992: POP 00001993: DUP1 00001994: SWAP2 00001995: POP 00001996: PUSH2 0x0180 00001999: DUP6 0000199a: ADD 0000199b: DUP7 0000199c: DUP2 0000199d: GT 0000199e: ISZERO 0000199f: PUSH2 0x19a6 000019a2: JUMPI 000019a3: PUSH0 000019a4: PUSH0 000019a5: REVERT 000019a6: JUMPDEST 000019a7: PUSH2 0x0100 000019aa: DUP7 000019ab: ADD 000019ac: JUMPDEST 000019ad: DUP2 000019ae: DUP2 000019af: LT 000019b0: ISZERO 000019b1: PUSH2 0x19c4 000019b4: JUMPI 000019b5: DUP1 000019b6: CALLDATALOAD 000019b7: DUP5 000019b8: MSTORE 000019b9: PUSH1 0x20 000019bb: SWAP4 000019bc: DUP5 000019bd: ADD 000019be: SWAP4 000019bf: ADD 000019c0: PUSH2 0x19ac 000019c3: JUMP 000019c4: JUMPDEST 000019c5: POP 000019c6: POP 000019c7: PUSH1 0x60 000019c9: DUP4 000019ca: ADD 000019cb: MSTORE 000019cc: POP 000019cd: SWAP4 000019ce: SWAP3 000019cf: POP 000019d0: POP 000019d1: POP 000019d2: JUMP 000019d3: JUMPDEST 000019d4: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000019f5: PUSH0 000019f6: MSTORE 000019f7: PUSH1 0x11 000019f9: PUSH1 0x04 000019fb: MSTORE 000019fc: PUSH1 0x24 000019fe: PUSH0 000019ff: REVERT 00001a00: JUMPDEST 00001a01: PUSH0 00001a02: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001a23: DUP3 00001a24: SUB 00001a25: PUSH2 0x1a30 00001a28: JUMPI 00001a29: PUSH2 0x1a30 00001a2c: PUSH2 0x19d3 00001a2f: JUMP 00001a30: JUMPDEST 00001a31: POP 00001a32: PUSH1 0x01 00001a34: ADD 00001a35: SWAP1 00001a36: JUMP 00001a37: JUMPDEST 00001a38: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001a59: PUSH0 00001a5a: MSTORE 00001a5b: PUSH1 0x12 00001a5d: PUSH1 0x04 00001a5f: MSTORE 00001a60: PUSH1 0x24 00001a62: PUSH0 00001a63: REVERT 00001a64: JUMPDEST 00001a65: PUSH0 00001a66: DUP3 00001a67: PUSH2 0x1a72 00001a6a: JUMPI 00001a6b: PUSH2 0x1a72 00001a6e: PUSH2 0x1a37 00001a71: JUMP 00001a72: JUMPDEST 00001a73: POP 00001a74: MOD 00001a75: SWAP1 00001a76: JUMP 00001a77: JUMPDEST 00001a78: PUSH1 0x60 00001a7a: DUP2 00001a7b: ADD 00001a7c: DUP2 00001a7d: DUP4 00001a7e: PUSH0 00001a7f: JUMPDEST 00001a80: PUSH1 0x03 00001a82: DUP2 00001a83: LT 00001a84: ISZERO 00001a85: PUSH2 0x1a9e 00001a88: JUMPI 00001a89: DUP2 00001a8a: MLOAD 00001a8b: DUP4 00001a8c: MSTORE 00001a8d: PUSH1 0x20 00001a8f: SWAP3 00001a90: DUP4 00001a91: ADD 00001a92: SWAP3 00001a93: SWAP1 00001a94: SWAP2 00001a95: ADD 00001a96: SWAP1 00001a97: PUSH1 0x01 00001a99: ADD 00001a9a: PUSH2 0x1a7f 00001a9d: JUMP 00001a9e: JUMPDEST 00001a9f: POP 00001aa0: POP 00001aa1: POP 00001aa2: SWAP3 00001aa3: SWAP2 00001aa4: POP 00001aa5: POP 00001aa6: JUMP 00001aa7: JUMPDEST 00001aa8: PUSH0 00001aa9: PUSH1 0x20 00001aab: DUP3 00001aac: DUP5 00001aad: SUB 00001aae: SLT 00001aaf: ISZERO 00001ab0: PUSH2 0x1ab7 00001ab3: JUMPI 00001ab4: PUSH0 00001ab5: PUSH0 00001ab6: REVERT 00001ab7: JUMPDEST 00001ab8: POP 00001ab9: MLOAD 00001aba: SWAP2 00001abb: SWAP1 00001abc: POP 00001abd: JUMP 00001abe: JUMPDEST 00001abf: PUSH1 0x40 00001ac1: DUP2 00001ac2: MSTORE 00001ac3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ad8: DUP4 00001ad9: MLOAD 00001ada: AND 00001adb: PUSH1 0x40 00001add: DUP3 00001ade: ADD 00001adf: MSTORE 00001ae0: PUSH0 00001ae1: PUSH1 0x20 00001ae3: DUP5 00001ae4: ADD 00001ae5: MLOAD 00001ae6: PUSH1 0x40 00001ae8: PUSH1 0x60 00001aea: DUP5 00001aeb: ADD 00001aec: MSTORE 00001aed: DUP1 00001aee: MLOAD 00001aef: DUP1 00001af0: PUSH1 0x80 00001af2: DUP6 00001af3: ADD 00001af4: MSTORE 00001af5: DUP1 00001af6: PUSH1 0x20 00001af8: DUP4 00001af9: ADD 00001afa: PUSH1 0xa0 00001afc: DUP7 00001afd: ADD 00001afe: MCOPY 00001aff: PUSH0 00001b00: PUSH1 0xa0 00001b02: DUP3 00001b03: DUP7 00001b04: ADD 00001b05: ADD 00001b06: MSTORE 00001b07: PUSH1 0xa0 00001b09: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001b2a: PUSH1 0x1f 00001b2c: DUP4 00001b2d: ADD 00001b2e: AND 00001b2f: DUP6 00001b30: ADD 00001b31: ADD 00001b32: SWAP3 00001b33: POP 00001b34: POP 00001b35: POP 00001b36: DUP3 00001b37: PUSH1 0x20 00001b39: DUP4 00001b3a: ADD 00001b3b: MSTORE 00001b3c: SWAP4 00001b3d: SWAP3 00001b3e: POP 00001b3f: POP 00001b40: POP 00001b41: JUMP 00001b42: JUMPDEST 00001b43: DUP1 00001b44: PUSH0 00001b45: JUMPDEST 00001b46: PUSH1 0x02 00001b48: DUP2 00001b49: LT 00001b4a: ISZERO 00001b4b: PUSH2 0x149b 00001b4e: JUMPI 00001b4f: DUP2 00001b50: MLOAD 00001b51: DUP5 00001b52: MSTORE 00001b53: PUSH1 0x20 00001b55: SWAP4 00001b56: DUP5 00001b57: ADD 00001b58: SWAP4 00001b59: SWAP1 00001b5a: SWAP2 00001b5b: ADD 00001b5c: SWAP1 00001b5d: PUSH1 0x01 00001b5f: ADD 00001b60: PUSH2 0x1b45 00001b63: JUMP 00001b64: JUMPDEST 00001b65: DUP1 00001b66: PUSH0 00001b67: JUMPDEST 00001b68: PUSH1 0x02 00001b6a: DUP2 00001b6b: LT 00001b6c: ISZERO 00001b6d: PUSH2 0x149b 00001b70: JUMPI 00001b71: PUSH2 0x1b7b 00001b74: DUP5 00001b75: DUP4 00001b76: MLOAD 00001b77: PUSH2 0x1b42 00001b7a: JUMP 00001b7b: JUMPDEST 00001b7c: PUSH1 0x40 00001b7e: SWAP4 00001b7f: SWAP1 00001b80: SWAP4 00001b81: ADD 00001b82: SWAP3 00001b83: PUSH1 0x20 00001b85: SWAP2 00001b86: SWAP1 00001b87: SWAP2 00001b88: ADD 00001b89: SWAP1 00001b8a: PUSH1 0x01 00001b8c: ADD 00001b8d: PUSH2 0x1b67 00001b90: JUMP 00001b91: JUMPDEST 00001b92: PUSH2 0x0200 00001b95: DUP2 00001b96: ADD 00001b97: PUSH2 0x1ba0 00001b9a: DUP3 00001b9b: DUP8 00001b9c: PUSH2 0x1b42 00001b9f: JUMP 00001ba0: JUMPDEST 00001ba1: PUSH2 0x1bad 00001ba4: PUSH1 0x40 00001ba6: DUP4 00001ba7: ADD 00001ba8: DUP7 00001ba9: PUSH2 0x1b64 00001bac: JUMP 00001bad: JUMPDEST 00001bae: PUSH2 0x1bba 00001bb1: PUSH1 0xc0 00001bb3: DUP4 00001bb4: ADD 00001bb5: DUP6 00001bb6: PUSH2 0x1b42 00001bb9: JUMP 00001bba: JUMPDEST 00001bbb: PUSH2 0x0100 00001bbe: DUP3 00001bbf: ADD 00001bc0: DUP4 00001bc1: PUSH0 00001bc2: JUMPDEST 00001bc3: PUSH1 0x08 00001bc5: DUP2 00001bc6: LT 00001bc7: ISZERO 00001bc8: PUSH2 0x1be1 00001bcb: JUMPI 00001bcc: DUP2 00001bcd: MLOAD 00001bce: DUP4 00001bcf: MSTORE 00001bd0: PUSH1 0x20 00001bd2: SWAP3 00001bd3: DUP4 00001bd4: ADD 00001bd5: SWAP3 00001bd6: SWAP1 00001bd7: SWAP2 00001bd8: ADD 00001bd9: SWAP1 00001bda: PUSH1 0x01 00001bdc: ADD 00001bdd: PUSH2 0x1bc2 00001be0: JUMP 00001be1: JUMPDEST 00001be2: POP 00001be3: POP 00001be4: POP 00001be5: SWAP6 00001be6: SWAP5 00001be7: POP 00001be8: POP 00001be9: POP 00001bea: POP 00001beb: POP 00001bec: JUMP 00001bed: JUMPDEST 00001bee: PUSH0 00001bef: PUSH1 0x20 00001bf1: DUP3 00001bf2: DUP5 00001bf3: SUB 00001bf4: SLT 00001bf5: ISZERO 00001bf6: PUSH2 0x1bfd 00001bf9: JUMPI 00001bfa: PUSH0 00001bfb: PUSH0 00001bfc: REVERT 00001bfd: JUMPDEST 00001bfe: DUP2 00001bff: MLOAD 00001c00: DUP1 00001c01: ISZERO 00001c02: ISZERO 00001c03: DUP2 00001c04: EQ 00001c05: PUSH2 0x1c0c 00001c08: JUMPI 00001c09: PUSH0 00001c0a: PUSH0 00001c0b: REVERT 00001c0c: JUMPDEST 00001c0d: SWAP4 00001c0e: SWAP3 00001c0f: POP 00001c10: POP 00001c11: POP 00001c12: JUMP 00001c13: JUMPDEST 00001c14: PUSH2 0x0180 00001c17: DUP2 00001c18: ADD 00001c19: PUSH2 0x1c22 00001c1c: DUP3 00001c1d: DUP8 00001c1e: PUSH2 0x1b42 00001c21: JUMP 00001c22: JUMPDEST 00001c23: PUSH2 0x1c2f 00001c26: PUSH1 0x40 00001c28: DUP4 00001c29: ADD 00001c2a: DUP7 00001c2b: PUSH2 0x1b64 00001c2e: JUMP 00001c2f: JUMPDEST 00001c30: PUSH2 0x1c3c 00001c33: PUSH1 0xc0 00001c35: DUP4 00001c36: ADD 00001c37: DUP6 00001c38: PUSH2 0x1b42 00001c3b: JUMP 00001c3c: JUMPDEST 00001c3d: PUSH2 0x0100 00001c40: DUP3 00001c41: ADD 00001c42: DUP4 00001c43: PUSH0 00001c44: JUMPDEST 00001c45: PUSH1 0x04 00001c47: DUP2 00001c48: LT 00001c49: ISZERO 00001c4a: PUSH2 0x1be1 00001c4d: JUMPI 00001c4e: DUP2 00001c4f: MLOAD 00001c50: DUP4 00001c51: MSTORE 00001c52: PUSH1 0x20 00001c54: SWAP3 00001c55: DUP4 00001c56: ADD 00001c57: SWAP3 00001c58: SWAP1 00001c59: SWAP2 00001c5a: ADD 00001c5b: SWAP1 00001c5c: PUSH1 0x01 00001c5e: ADD 00001c5f: PUSH2 0x1c44 00001c62: JUMP 00001c63: JUMPDEST 00001c64: PUSH4 0xffffffff 00001c69: DUP2 00001c6a: DUP2 00001c6b: AND 00001c6c: DUP4 00001c6d: DUP3 00001c6e: AND 00001c6f: ADD 00001c70: SWAP1 00001c71: DUP2 00001c72: GT 00001c73: ISZERO 00001c74: PUSH2 0x11d6 00001c77: JUMPI 00001c78: PUSH2 0x11d6 00001c7b: PUSH2 0x19d3 00001c7e: JUMP 00001c7f: JUMPDEST 00001c80: PUSH0 00001c81: PUSH4 0xffffffff 00001c86: DUP4 00001c87: AND 00001c88: DUP1 00001c89: PUSH2 0x1c94 00001c8c: JUMPI 00001c8d: PUSH2 0x1c94 00001c90: PUSH2 0x1a37 00001c93: JUMP 00001c94: JUMPDEST 00001c95: DUP1 00001c96: PUSH4 0xffffffff 00001c9b: DUP5 00001c9c: AND 00001c9d: MOD 00001c9e: SWAP2 00001c9f: POP 00001ca0: POP 00001ca1: SWAP3 00001ca2: SWAP2 00001ca3: POP 00001ca4: POP 00001ca5: JUMP 00001ca6: JUMPDEST 00001ca7: PUSH4 0xffffffff 00001cac: DUP3 00001cad: DUP2 00001cae: AND 00001caf: DUP3 00001cb0: DUP3 00001cb1: AND 00001cb2: SUB 00001cb3: SWAP1 00001cb4: DUP2 00001cb5: GT 00001cb6: ISZERO 00001cb7: PUSH2 0x11d6 00001cba: JUMPI 00001cbb: PUSH2 0x11d6 00001cbe: PUSH2 0x19d3 00001cc1: JUMP 00001cc2: JUMPDEST 00001cc3: DUP1 00001cc4: DUP3 00001cc5: ADD 00001cc6: DUP1 00001cc7: DUP3 00001cc8: GT 00001cc9: ISZERO 00001cca: PUSH2 0x11d6 00001ccd: JUMPI 00001cce: PUSH2 0x11d6 00001cd1: PUSH2 0x19d3 00001cd4: JUMP 00001cd5: JUMPDEST 00001cd6: PUSH1 0x01 00001cd8: DUP2 00001cd9: JUMPDEST 00001cda: PUSH1 0x01 00001cdc: DUP5 00001cdd: GT 00001cde: ISZERO 00001cdf: PUSH2 0x1d10 00001ce2: JUMPI 00001ce3: DUP1 00001ce4: DUP6 00001ce5: DIV 00001ce6: DUP2 00001ce7: GT 00001ce8: ISZERO 00001ce9: PUSH2 0x1cf4 00001cec: JUMPI 00001ced: PUSH2 0x1cf4 00001cf0: PUSH2 0x19d3 00001cf3: JUMP 00001cf4: JUMPDEST 00001cf5: PUSH1 0x01 00001cf7: DUP5 00001cf8: AND 00001cf9: ISZERO 00001cfa: PUSH2 0x1d02 00001cfd: JUMPI 00001cfe: SWAP1 00001cff: DUP2 00001d00: MUL 00001d01: SWAP1 00001d02: JUMPDEST 00001d03: PUSH1 0x01 00001d05: SWAP4 00001d06: SWAP1 00001d07: SWAP4 00001d08: SHR 00001d09: SWAP3 00001d0a: DUP1 00001d0b: MUL 00001d0c: PUSH2 0x1cd9 00001d0f: JUMP 00001d10: JUMPDEST 00001d11: SWAP4 00001d12: POP 00001d13: SWAP4 00001d14: SWAP2 00001d15: POP 00001d16: POP 00001d17: JUMP 00001d18: JUMPDEST 00001d19: PUSH0 00001d1a: DUP3 00001d1b: PUSH2 0x1d26 00001d1e: JUMPI 00001d1f: POP 00001d20: PUSH1 0x01 00001d22: PUSH2 0x11d6 00001d25: JUMP 00001d26: JUMPDEST 00001d27: DUP2 00001d28: PUSH2 0x1d32 00001d2b: JUMPI 00001d2c: POP 00001d2d: PUSH0 00001d2e: PUSH2 0x11d6 00001d31: JUMP 00001d32: JUMPDEST 00001d33: DUP2 00001d34: PUSH1 0x01 00001d36: DUP2 00001d37: EQ 00001d38: PUSH2 0x1d48 00001d3b: JUMPI 00001d3c: PUSH1 0x02 00001d3e: DUP2 00001d3f: EQ 00001d40: PUSH2 0x1d52 00001d43: JUMPI 00001d44: PUSH2 0x1d6e 00001d47: JUMP 00001d48: JUMPDEST 00001d49: PUSH1 0x01 00001d4b: SWAP2 00001d4c: POP 00001d4d: POP 00001d4e: PUSH2 0x11d6 00001d51: JUMP 00001d52: JUMPDEST 00001d53: PUSH1 0xff 00001d55: DUP5 00001d56: GT 00001d57: ISZERO 00001d58: PUSH2 0x1d63 00001d5b: JUMPI 00001d5c: PUSH2 0x1d63 00001d5f: PUSH2 0x19d3 00001d62: JUMP 00001d63: JUMPDEST 00001d64: POP 00001d65: POP 00001d66: PUSH1 0x01 00001d68: DUP3 00001d69: SHL 00001d6a: PUSH2 0x11d6 00001d6d: JUMP 00001d6e: JUMPDEST 00001d6f: POP 00001d70: PUSH1 0x20 00001d72: DUP4 00001d73: LT 00001d74: PUSH2 0x0133 00001d77: DUP4 00001d78: LT 00001d79: AND 00001d7a: PUSH1 0x4e 00001d7c: DUP5 00001d7d: LT 00001d7e: PUSH1 0x0b 00001d80: DUP5 00001d81: LT 00001d82: AND 00001d83: OR 00001d84: ISZERO 00001d85: PUSH2 0x1d91 00001d88: JUMPI 00001d89: POP 00001d8a: DUP2 00001d8b: DUP2 00001d8c: EXP 00001d8d: PUSH2 0x11d6 00001d90: JUMP 00001d91: JUMPDEST 00001d92: PUSH2 0x1dbc 00001d95: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001db6: DUP5 00001db7: DUP5 00001db8: PUSH2 0x1cd5 00001dbb: JUMP 00001dbc: JUMPDEST 00001dbd: DUP1 00001dbe: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001ddf: DIV 00001de0: DUP3 00001de1: GT 00001de2: ISZERO 00001de3: PUSH2 0x1dee 00001de6: JUMPI 00001de7: PUSH2 0x1dee 00001dea: PUSH2 0x19d3 00001ded: JUMP 00001dee: JUMPDEST 00001def: MUL 00001df0: SWAP4 00001df1: SWAP3 00001df2: POP 00001df3: POP 00001df4: POP 00001df5: JUMP 00001df6: JUMPDEST 00001df7: PUSH0 00001df8: PUSH2 0x1c0c 00001dfb: DUP4 00001dfc: DUP4 00001dfd: PUSH2 0x1d18 00001e00: JUMP 00001e01: JUMPDEST 00001e02: PUSH1 0x40 00001e04: DUP2 00001e05: ADD 00001e06: DUP2 00001e07: DUP4 00001e08: PUSH0 00001e09: JUMPDEST 00001e0a: PUSH1 0x02 00001e0c: DUP2 00001e0d: LT 00001e0e: ISZERO 00001e0f: PUSH2 0x1a9e 00001e12: JUMPI 00001e13: DUP2 00001e14: MLOAD 00001e15: DUP4 00001e16: MSTORE 00001e17: PUSH1 0x20 00001e19: SWAP3 00001e1a: DUP4 00001e1b: ADD 00001e1c: SWAP3 00001e1d: SWAP1 00001e1e: SWAP2 00001e1f: ADD 00001e20: SWAP1 00001e21: PUSH1 0x01 00001e23: ADD 00001e24: PUSH2 0x1e09 00001e27: JUMP
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0xa4f272ccd75d5b75e08fd18cae7566a296880142a463f077abed9acb0d72f640
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0xa4f272ccd75d5b75e08fd18cae7566a296880142a463f077abed9acb0d72f640",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe4b2fb79",
"selector": "0xe4b2fb79",
"calldata_variants": [
"0xe4b2fb79",
"0xe4b2fb790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8eb3cc6",
"selector": "0xe8eb3cc6",
"calldata_variants": [
"0xe8eb3cc6",
"0xe8eb3cc60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfdab463d",
"selector": "0xfdab463d",
"calldata_variants": [
"0xfdab463d",
"0xfdab463d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xda662925",
"selector": "0xda662925",
"calldata_variants": [
"0xda662925",
"0xda6629250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe38df5f0",
"selector": "0xe38df5f0",
"calldata_variants": [
"0xe38df5f0",
"0xe38df5f00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb85c5145",
"selector": "0xb85c5145",
"calldata_variants": [
"0xb85c5145",
"0xb85c51450000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc2b40ae4",
"selector": "0xc2b40ae4",
"calldata_variants": [
"0xc2b40ae4",
"0xc2b40ae40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcd87a3b4",
"selector": "0xcd87a3b4",
"calldata_variants": [
"0xcd87a3b4",
"0xcd87a3b40000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1716,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 4995,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 1141,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 1922,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3471,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"delegatecall_count": 2,
"untrusted_delegatecall_count": 2
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 2
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xa7e4530607e249782cf9c861c14e925aac1e75eab77483c65a95b5339d8e0d02
call_targets:
0xb419c2867ab3cbc78921660cb95150d95a94ce86
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xa7e4530607e249782cf9c861c14e925aac1e75eab77483c65a95b5339d8e0d02",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xb419c2867ab3cbc78921660cb95150d95a94ce86"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe4b2fb79",
"selector": "0xe4b2fb79",
"calldata_variants": [
"0xe4b2fb79",
"0xe4b2fb790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8eb3cc6",
"selector": "0xe8eb3cc6",
"calldata_variants": [
"0xe8eb3cc6",
"0xe8eb3cc60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfdab463d",
"selector": "0xfdab463d",
"calldata_variants": [
"0xfdab463d",
"0xfdab463d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xda662925",
"selector": "0xda662925",
"calldata_variants": [
"0xda662925",
"0xda6629250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe38df5f0",
"selector": "0xe38df5f0",
"calldata_variants": [
"0xe38df5f0",
"0xe38df5f00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb85c5145",
"selector": "0xb85c5145",
"calldata_variants": [
"0xb85c5145",
"0xb85c51450000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc2b40ae4",
"selector": "0xc2b40ae4",
"calldata_variants": [
"0xc2b40ae4",
"0xc2b40ae40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcd87a3b4",
"selector": "0xcd87a3b4",
"calldata_variants": [
"0xcd87a3b4",
"0xcd87a3b40000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2666,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3174,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5363,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "constant_zero",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [
{
"pc": 1141,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 1922,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3471,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 3
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xa7e4530607e249782cf9c861c14e925aac1e75eab77483c65a95b5339d8e0d02
call_targets:
0xb419c2867ab3cbc78921660cb95150d95a94ce86
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xa7e4530607e249782cf9c861c14e925aac1e75eab77483c65a95b5339d8e0d02",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xb419c2867ab3cbc78921660cb95150d95a94ce86"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe4b2fb79",
"selector": "0xe4b2fb79",
"calldata_variants": [
"0xe4b2fb79",
"0xe4b2fb790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8eb3cc6",
"selector": "0xe8eb3cc6",
"calldata_variants": [
"0xe8eb3cc6",
"0xe8eb3cc60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfdab463d",
"selector": "0xfdab463d",
"calldata_variants": [
"0xfdab463d",
"0xfdab463d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xda662925",
"selector": "0xda662925",
"calldata_variants": [
"0xda662925",
"0xda6629250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe38df5f0",
"selector": "0xe38df5f0",
"calldata_variants": [
"0xe38df5f0",
"0xe38df5f00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb85c5145",
"selector": "0xb85c5145",
"calldata_variants": [
"0xb85c5145",
"0xb85c51450000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc2b40ae4",
"selector": "0xc2b40ae4",
"calldata_variants": [
"0xc2b40ae4",
"0xc2b40ae40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcd87a3b4",
"selector": "0xcd87a3b4",
"calldata_variants": [
"0xcd87a3b4",
"0xcd87a3b40000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2666,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3174,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": [
{
"pc": 1141,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 1922,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3471,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| low | other | codex | Fee-on-transfer/rebasing ERC20s can break pool accounting | 65 | no | — |
viewevidence_json{
"evidence": "Deposit commitments are based on `_value`, and `_pull` transfers that nominal amount without verifying the actual tokens received.",
"locations": [
"contracts/src/contracts/PrivacyPool.sol:82",
"contracts/src/contracts/PrivacyPool.sol:97",
"contracts/src/contracts/PrivacyPool.sol:103",
"contracts/src/contracts/implementations/PrivacyPoolComplex.sol:50",
"contracts/src/contracts/implementations/PrivacyPoolComplex.sol:55",
"contracts/src/contracts/implementations/PrivacyPoolComplex.sol:64"
],
"recommendation": "Explicitly forbid fee-on-transfer/rebasing tokens at the registry layer, or measure actual received amounts (balance-before/after) in `_pull` and use that value for commitment generation and withdrawal accounting.",
"exploit_scenario": "If a pool is registered for a deflationary or fee-on-transfer token, deposits record the requested `_value` while the pool receives less. An attacker can deposit such a token and later withdraw the full recorded amount, shifting the transfer fee deficit onto other depositors or causing withdrawals to fail once the pool balance is insufficient."
}
|