TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

019bab3b-acdd-73a3-9188-eb035b52b55e

failed
Chain ID
1
Address
Block Number
Created
Sun, Jan 11, 2026 4:06 AM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
Authorization based on tx.origin
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
38849 artifact.fetch complete 1 / 3 3 months ago
38850 proxy.resolve complete 1 / 3 3 months ago
38851 tool.cast_disasm complete 1 / 3 3 months ago
38852 analysis.bundle complete 1 / 3 3 months ago
38853 capability.graph complete 1 / 3 3 months ago
38854 detector.run complete 1 / 3 3 months ago
38855 validation.fork complete 1 / 3 3 months ago
39206 report.consolidate complete 1 / 6 3 months ago
39207 tool.slither failed 2 / 2 3 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither
Status
failed slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-g9hzf6cg) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-g9hzf6cg) 'forge' returned non-zero exit code 1 2026-01-11T09:01:38.538664Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/utils/math/Math.sol": No such file or directory (os error 2) stdout: 2026-01-11T09:01:38.538690Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/utils/math/SafeCast.sol": No such file or directory (os error 2) stdout: 2026-01-11T09:01:38.538704Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/tokens/ERC20.sol": No such file or directory (os error 2) stdout: 2026-01-11T09:01:38.538716Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/utils/SafeTransferLib.sol": No such file or directory (os error 2) stdout: 2026-01-11T09:01:38.538732Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/utils/ReentrancyGuard.sol": No such file or directory (os error 2) stdout: 2026-01-11T09:01:38.538754Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/tokens/ERC20.sol": No such file or directory (os error 2) stdout: 2026-01-11T09:01:38.538769Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/utils/cryptography/EIP712.sol": No such file or directory (os error 2) stdout: Unable to resolve imports: stdout: "solmate/utils/ReentrancyGuard.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol" stdout: "solmate/tokens/ERC20.sol" in "/tmp/slither-g9hzf6cg/src/interfaces/IFeeDistributor.sol" stdout: "openzeppelin-contracts/utils/cryptography/EIP712.sol" in "/tmp/slither-g9hzf6cg/src/lib/EOASignaturesValidator.sol" stdout: "solmate/tokens/ERC20.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol" stdout: "openzeppelin-contracts/utils/math/Math.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol" stdout: "openzeppelin-contracts/utils/math/SafeCast.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol" stdout: "solmate/utils/SafeTransferLib.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol" stdout: with remappings: stdout: create3-factory/=/tmp/slither-g9hzf6cg/lib/create3-factory/src/ stdout: ds-test/=/tmp/slither-g9hzf6cg/lib/forge-std/lib/ds-test/src/ stdout: forge-std/=/tmp/slither-g9hzf6cg/lib/forge-std/src/ stdout: openzeppelin-contracts/=/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/ stdout: solmate/=/tmp/slither-g9hzf6cg/lib/solmate/ stdout: Compiling 7 files with Solc 0.8.0 stdout: Solc 0.8.0 finished in 23.93ms Error: Compiler run failed: stderr: Error (2314): Expected ';' but got '(' stderr: --> src/FeeDistributor.sol:48:46: stderr: | stderr: 48 | error FeeDistributor__InputLengthMismatch(); stderr: | ^ stderr: stderr: Error (6275): Source "lib/solmate/tokens/ERC20.sol" not found: File not found. stderr: --> src/interfaces/IFeeDistributor.sol:17:1: stderr: | stderr: 17 | import {ERC20} from "solmate/tokens/ERC20.sol"; stderr: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ stderr: stderr: Error (2314): Expected ';' but got '(' stderr: --> src/lib/EOASignaturesValidator.sol:25:51: stderr: | stderr: 25 | error EOASignaturesValidator__ExpiredSignature(); stderr: | ^ stderr: stderr: Error (2314): Expected ';' but got '(' stderr: --> src/lib/OptionalOnlyCaller.sol:21:47: stderr: | stderr: 21 | error OptionalOnlyCaller__SenderNotAllowed(); stderr: | ^ Traceback (most recent call last): File "/var/www/tripwire/.venv/bin/slither", line 10, in <module> sys.exit(main()) ~~~~^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main main_impl(all_detector_classes=detectors, all_printer_classes=printers) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl ) = process_all(filename, args, detector_classes, printer_classes) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all compilations = compile_all(target, **vars(args)) File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all compilations.append(CryticCompile(target, **kwargs)) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__ self._compile(**kwargs) ~~~~~~~~~~~~~^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile self._platform.compile(self, **kwargs) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile hardhat_like_parsing( ~~~~~~~~~~~~~~~~~~~~^ crytic_compile, str(self._target), build_directory, str(self._project_root) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing raise InvalidCompilation(txt) crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command? /tmp/slither-g9hzf6cg/out/build-info is not a directory.
Attempts
2 / 2
Findings
0
Solc
View stderr
Traceback (most recent call last):
  File "/var/www/tripwire/worker/worker.py", line 198, in main
    payload = dispatch_job(job_type, job_id, job_meta, run_data, config, laravel_client)
  File "/var/www/tripwire/worker/worker.py", line 114, in dispatch_job
    return slither_run.run(job_id, job_meta, run_data, config, log, laravel_client)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 1084, in run
    stdout_text, stderr_text, result_json = _run_slither(
                                            ~~~~~~~~~~~~^
        workspace,
        ^^^^^^^^^^
    ...<4 lines>...
        target_path=target_path,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 958, in _run_slither
    raise RuntimeError(f"slither failed (exit {result.returncode}): {stderr_text or stdout_text}")
RuntimeError: slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-g9hzf6cg)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-g9hzf6cg)
'forge' returned non-zero exit code 1
2026-01-11T09:01:38.538664Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/utils/math/Math.sol": No such file or directory (os error 2)
stdout: 2026-01-11T09:01:38.538690Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/utils/math/SafeCast.sol": No such file or directory (os error 2)
stdout: 2026-01-11T09:01:38.538704Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/tokens/ERC20.sol": No such file or directory (os error 2)
stdout: 2026-01-11T09:01:38.538716Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/utils/SafeTransferLib.sol": No such file or directory (os error 2)
stdout: 2026-01-11T09:01:38.538732Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/utils/ReentrancyGuard.sol": No such file or directory (os error 2)
stdout: 2026-01-11T09:01:38.538754Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/solmate/tokens/ERC20.sol": No such file or directory (os error 2)
stdout: 2026-01-11T09:01:38.538769Z ERROR foundry_compilers_artifacts_solc::sources: error="/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/utils/cryptography/EIP712.sol": No such file or directory (os error 2)
stdout: Unable to resolve imports:
stdout:       "solmate/utils/ReentrancyGuard.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol"
stdout:       "solmate/tokens/ERC20.sol" in "/tmp/slither-g9hzf6cg/src/interfaces/IFeeDistributor.sol"
stdout:       "openzeppelin-contracts/utils/cryptography/EIP712.sol" in "/tmp/slither-g9hzf6cg/src/lib/EOASignaturesValidator.sol"
stdout:       "solmate/tokens/ERC20.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol"
stdout:       "openzeppelin-contracts/utils/math/Math.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol"
stdout:       "openzeppelin-contracts/utils/math/SafeCast.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol"
stdout:       "solmate/utils/SafeTransferLib.sol" in "/tmp/slither-g9hzf6cg/src/FeeDistributor.sol"
stdout: with remappings:
stdout:       create3-factory/=/tmp/slither-g9hzf6cg/lib/create3-factory/src/
stdout:       ds-test/=/tmp/slither-g9hzf6cg/lib/forge-std/lib/ds-test/src/
stdout:       forge-std/=/tmp/slither-g9hzf6cg/lib/forge-std/src/
stdout:       openzeppelin-contracts/=/tmp/slither-g9hzf6cg/lib/openzeppelin-contracts/
stdout:       solmate/=/tmp/slither-g9hzf6cg/lib/solmate/
stdout: Compiling 7 files with Solc 0.8.0
stdout: Solc 0.8.0 finished in 23.93ms
Error: Compiler run failed:
stderr: Error (2314): Expected ';' but got '('
stderr:   --> src/FeeDistributor.sol:48:46:
stderr:    |
stderr: 48 |     error FeeDistributor__InputLengthMismatch();
stderr:    |                                              ^
stderr: 
stderr: Error (6275): Source "lib/solmate/tokens/ERC20.sol" not found: File not found.
stderr:   --> src/interfaces/IFeeDistributor.sol:17:1:
stderr:    |
stderr: 17 | import {ERC20} from "solmate/tokens/ERC20.sol";
stderr:    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
stderr: 
stderr: Error (2314): Expected ';' but got '('
stderr:   --> src/lib/EOASignaturesValidator.sol:25:51:
stderr:    |
stderr: 25 |     error EOASignaturesValidator__ExpiredSignature();
stderr:    |                                                   ^
stderr: 
stderr: Error (2314): Expected ';' but got '('
stderr:   --> src/lib/OptionalOnlyCaller.sol:21:47:
stderr:    |
stderr: 21 |     error OptionalOnlyCaller__SenderNotAllowed();
stderr:    |                                               ^
Traceback (most recent call last):
  File "/var/www/tripwire/.venv/bin/slither", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main
    main_impl(all_detector_classes=detectors, all_printer_classes=printers)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
        ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all
    compilations = compile_all(target, **vars(args))
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all
    compilations.append(CryticCompile(target, **kwargs))
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__
    self._compile(**kwargs)
    ~~~~~~~~~~~~~^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile
    self._platform.compile(self, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile
    hardhat_like_parsing(
    ~~~~~~~~~~~~~~~~~~~~^
        crytic_compile, str(self._target), build_directory, str(self._project_root)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing
    raise InvalidCompilation(txt)
crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command?
/tmp/slither-g9hzf6cg/out/build-info is not a directory.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
2
No findings?
no
Summary
Two issues can permanently lock fee distributions: token checkpointing truncates after 20 weeks, and zero veSupply weeks trigger division-by-zero in claims.
View stdout
{"no_findings":false,"summary":"Two issues can permanently lock fee distributions: token checkpointing truncates after 20 weeks, and zero veSupply weeks trigger division-by-zero in claims.","findings":[{"severity":"medium","category":"other","title":"Token checkpointing stops after 20 weeks, leaving undistributed tokens permanently unclaimable","exploit_scenario":"If a token is not checkpointed for more than 20 weeks, `_checkpointToken` only assigns fees for the first 20 weeks, then sets `tokenState.timeCursor` to `block.timestamp` and `cachedBalance` to the full balance. The remaining weeks are never assigned to `_tokensPerWeek`, and future checkpoints see no new tokens, so the unassigned portion can never be claimed.","recommendation":"Only advance the token time cursor to the last processed week, not `block.timestamp`, and allow repeated calls to continue distributing across remaining weeks. Alternatively, keep the loop bound but persist `lastTokenTime`/`firstIncompleteWeek` so subsequent calls resume until caught up.","evidence":"`tokenState.timeCursor = uint64(block.timestamp)` is set before a loop bounded to 20 iterations, so gaps >20 weeks are not fully distributed.","locations":["src/FeeDistributor.sol:446","src/FeeDistributor.sol:460","src/FeeDistributor.sol:495"]},{"severity":"medium","category":"math","title":"Zero totalSupply weeks cause division-by-zero and permanently block claims","exploit_scenario":"If the VotingEscrow total supply is zero for any week (e.g., all locks expire), `_checkpointTotalSupply` caches 0 for that week. When a user later claims, `_claimToken` divides by `_veSupplyCache[week]` and reverts on that zero, preventing the cursor from advancing and locking all current and future claims for that token.","recommendation":"Guard against zero supply in `_claimToken` by skipping weeks where `_veSupplyCache[week] == 0` (advance the user token cursor without dividing), or prevent fee assignment for weeks with zero supply and ensure claims can bypass them safely.","evidence":"Claim math divides by `_veSupplyCache[nextUserTokenWeekToClaim]` without a zero check; `_checkpointTotalSupply` stores zero when totalSupply is zero.","locations":["src/FeeDistributor.sol:384","src/FeeDistributor.sol:637"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-8vsvt1do
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bac01-fb11-7b72-bff2-a048e444ed31
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers

thinking
**Checking AUDIT_BUNDLE.txt contents**
exec
/bin/bash -lc ls in /tmp/codex-8vsvt1do succeeded in 6ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
lib
src
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-8vsvt1do succeeded in 27ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: src/FeeDistributor.sol
================================================================================
// SPDX-License-Identifier: GPL-3.0
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.


thinking
**Preparing to analyze FeeDistributor file**
exec
/bin/bash -lc 'nl -ba src/FeeDistributor.sol' in /tmp/codex-8vsvt1do succeeded in 7ms:
     1	// SPDX-License-Identifier: GPL-3.0
     2	// This program is free software: you can redistribute it and/or modify
     3	// it under the terms of the GNU General Public License as published by
     4	// the Free Software Foundation, either version 3 of the License, or
     5	// (at your option) any later version.
     6	
     7	// This program is distributed in the hope that it will be useful,
     8	// but WITHOUT ANY WARRANTY; without even the implied warranty of
     9	// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    10	// GNU General Public License for more details.
    11	
    12	// You should have received a copy of the GNU General Public License
    13	// along with this program.  If not, see <http://www.gnu.org/licenses/>.
    14	
    15	pragma solidity ^0.8.0;
    16	
    17	import {Math} from "openzeppelin-contracts/utils/math/Math.sol";
    18	import {SafeCast} from "openzeppelin-contracts/utils/math/SafeCast.sol";
    19	
    20	import {ERC20} from "solmate/tokens/ERC20.sol";

thinking
**Checking for related files**
exec
/bin/bash -lc 'nl -ba src/lib/OptionalOnlyCaller.sol' in /tmp/codex-8vsvt1do succeeded in 7ms:
     1	// SPDX-License-Identifier: GPL-3.0
     2	// This program is free software: you can redistribute it and/or modify
     3	// it under the terms of the GNU General Public License as published by
     4	// the Free Software Foundation, either version 3 of the License, or
     5	// (at your option) any later version.
     6	
     7	// This program is distributed in the hope that it will be useful,
     8	// but WITHOUT ANY WARRANTY; without even the implied warranty of
     9	// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    10	// GNU General Public License for more details.
    11	
    12	// You should have received a copy of the GNU General Public License
    13	// along with this program.  If not, see <http://www.gnu.org/licenses/>.
    14	
    15	pragma solidity ^0.8.0;
    16	
    17	import "./EOASignaturesValidator.sol";
    18	import "../interfaces/IOptionalOnlyCaller.sol";
    19	
    20	abstract contract OptionalOnlyCaller is IOptionalOnlyCaller, EOASignaturesValidator {
exec
/bin/bash -lc 'nl -ba src/lib/EOASignaturesValidator.sol' in /tmp/codex-8vsvt1do succeeded in 5ms:
     1	// SPDX-License-Identifier: GPL-3.0
     2	// This program is free software: you can redistribute it and/or modify
     3	// it under the terms of the GNU General Public License as published by
     4	// the Free Software Foundation, either version 3 of the License, or
     5	// (at your option) any later version.
     6	
     7	// This program is distributed in the hope that it will be useful,
     8	// but WITHOUT ANY WARRANTY; without even the implied warranty of
     9	// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    10	// GNU General Public License for more details.
    11	
    12	// You should have received a copy of the GNU General Public License
    13	// along with this program.  If not, see <http://www.gnu.org/licenses/>.
    14	
    15	pragma solidity ^0.8.0;
    16	
    17	import "openzeppelin-contracts/utils/cryptography/EIP712.sol";
    18	
    19	import "../interfaces/ISignaturesValidator.sol";
    20	


thinking
**Evaluating FeeDistributor vulnerabilities**

I'll carefully analyze a FeeDistributor contract, focusing on reentrancy protections, signature validation quirks including malleability and lack of expiry, division-by-zero risks in token claims when supply is zero, potential token balance underflows with rebasing tokens, and a notable bug in token distribution loops capped at 20 weeks causing misallocation and stuck tokens. These issues seem mostly medium or low severity but could lead to locked tokens or DoS scenarios, so it's important to flag them clearly. Let's explore these nuances methodically!
thinking
**Summarizing detailed FeeDistributor issues**

I’m preparing a JSON report highlighting two main findings: the token checkpoint cutoff after 20 weeks that locks undistributed tokens, and the division-by-zero claim bug when total supply is zero for a week that blocks all future claims. I’ll include severity, category, and recommendations with relevant code locations and exploit scenarios to clearly present these risks. The signature malleability issue seems minor, so I’ll omit it from findings but note it briefly if needed. This will help the user understand the main contract weaknesses precisely.
codex
{"no_findings":false,"summary":"Two issues can permanently lock fee distributions: token checkpointing truncates after 20 weeks, and zero veSupply weeks trigger division-by-zero in claims.","findings":[{"severity":"medium","category":"other","title":"Token checkpointing stops after 20 weeks, leaving undistributed tokens permanently unclaimable","exploit_scenario":"If a token is not checkpointed for more than 20 weeks, `_checkpointToken` only assigns fees for the first 20 weeks, then sets `tokenState.timeCursor` to `block.timestamp` and `cachedBalance` to the full balance. The remaining weeks are never assigned to `_tokensPerWeek`, and future checkpoints see no new tokens, so the unassigned portion can never be claimed.","recommendation":"Only advance the token time cursor to the last processed week, not `block.timestamp`, and allow repeated calls to continue distributing across remaining weeks. Alternatively, keep the loop bound but persist `lastTokenTime`/`firstIncompleteWeek` so subsequent calls resume until caught up.","evidence":"`tokenState.timeCursor = uint64(block.timestamp)` is set before a loop bounded to 20 iterations, so gaps >20 weeks are not fully distributed.","locations":["src/FeeDistributor.sol:446","src/FeeDistributor.sol:460","src/FeeDistributor.sol:495"]},{"severity":"medium","category":"math","title":"Zero totalSupply weeks cause division-by-zero and permanently block claims","exploit_scenario":"If the VotingEscrow total supply is zero for any week (e.g., all locks expire), `_checkpointTotalSupply` caches 0 for that week. When a user later claims, `_claimToken` divides by `_veSupplyCache[week]` and reverts on that zero, preventing the cursor from advancing and locking all current and future claims for that token.","recommendation":"Guard against zero supply in `_claimToken` by skipping weeks where `_veSupplyCache[week] == 0` (advance the user token cursor without dividing), or prevent fee assignment for weeks with zero supply and ensure claims can bypass them safely.","evidence":"Claim math divides by `_veSupplyCache[nextUserTokenWeekToClaim]` without a zero check; `_checkpointTotalSupply` stores zero when totalSupply is zero.","locations":["src/FeeDistributor.sol:384","src/FeeDistributor.sol:637"]}]}
tokens used
32,411
Metadata
{
    "codex": {
        "ran_at": "2026-01-11T07:45:02.332891+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 15,
        "import_count": 17,
        "first_party_contracts_count": 7
    },
    "summary": "Two issues can permanently lock fee distributions: token checkpointing truncates after 20 weeks, and zero veSupply weeks trigger division-by-zero in claims.",
    "raw_final": {
        "summary": "Two issues can permanently lock fee distributions: token checkpointing truncates after 20 weeks, and zero veSupply weeks trigger division-by-zero in claims.",
        "findings": [
            {
                "title": "Token checkpointing stops after 20 weeks, leaving undistributed tokens permanently unclaimable",
                "category": "other",
                "evidence": "`tokenState.timeCursor = uint64(block.timestamp)` is set before a loop bounded to 20 iterations, so gaps >20 weeks are not fully distributed.",
                "severity": "medium",
                "locations": [
                    "src/FeeDistributor.sol:446",
                    "src/FeeDistributor.sol:460",
                    "src/FeeDistributor.sol:495"
                ],
                "recommendation": "Only advance the token time cursor to the last processed week, not `block.timestamp`, and allow repeated calls to continue distributing across remaining weeks. Alternatively, keep the loop bound but persist `lastTokenTime`/`firstIncompleteWeek` so subsequent calls resume until caught up.",
                "exploit_scenario": "If a token is not checkpointed for more than 20 weeks, `_checkpointToken` only assigns fees for the first 20 weeks, then sets `tokenState.timeCursor` to `block.timestamp` and `cachedBalance` to the full balance. The remaining weeks are never assigned to `_tokensPerWeek`, and future checkpoints see no new tokens, so the unassigned portion can never be claimed."
            },
            {
                "title": "Zero totalSupply weeks cause division-by-zero and permanently block claims",
                "category": "math",
                "evidence": "Claim math divides by `_veSupplyCache[nextUserTokenWeekToClaim]` without a zero check; `_checkpointTotalSupply` stores zero when totalSupply is zero.",
                "severity": "medium",
                "locations": [
                    "src/FeeDistributor.sol:384",
                    "src/FeeDistributor.sol:637"
                ],
                "recommendation": "Guard against zero supply in `_claimToken` by skipping weeks where `_veSupplyCache[week] == 0` (advance the user token cursor without dividing), or prevent fee assignment for weeks with zero supply and ensure claims can bypass them safely.",
                "exploit_scenario": "If the VotingEscrow total supply is zero for any week (e.g., all locks expire), `_checkpointTotalSupply` caches 0 for that week. When a user later claims, `_claimToken` divides by `_veSupplyCache[week]` and reverts on that zero, preventing the cursor from advancing and locking all current and future claims for that token."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
1
CALL-family (heavy)
10
EXT*/BALANCE
2
Total opcodes
5021
Flags
create_opcodes_present
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLVALUE
00000006: DUP1
00000007: ISZERO
00000008: PUSH2 0x0010
0000000b: JUMPI
0000000c: PUSH1 0x00
0000000e: DUP1
0000000f: REVERT
00000010: JUMPDEST
00000011: POP
00000012: PUSH1 0x04
00000014: CALLDATASIZE
00000015: LT
00000016: PUSH2 0x0182
00000019: JUMPI
0000001a: PUSH1 0x00
0000001c: CALLDATALOAD
0000001d: PUSH1 0xe0
0000001f: SHR
00000020: DUP1
00000021: PUSH4 0x90193b7c
00000026: GT
00000027: PUSH2 0x00d8
0000002a: JUMPI
0000002b: DUP1
0000002c: PUSH4 0xca31879d
00000031: GT
00000032: PUSH2 0x008c
00000035: JUMPI
00000036: DUP1
00000037: PUSH4 0xe811f44b
0000003c: GT
0000003d: PUSH2 0x0066
00000040: JUMPI
00000041: DUP1
00000042: PUSH4 0xe811f44b
00000047: EQ
00000048: PUSH2 0x04ae
0000004b: JUMPI
0000004c: DUP1
0000004d: PUSH4 0xed24911d
00000052: EQ
00000053: PUSH2 0x04c1
00000056: JUMPI
00000057: DUP1
00000058: PUSH4 0xfcaa54ee
0000005d: EQ
0000005e: PUSH2 0x04c9
00000061: JUMPI
00000062: PUSH1 0x00
00000064: DUP1
00000065: REVERT
00000066: JUMPDEST
00000067: DUP1
00000068: PUSH4 0xca31879d
0000006d: EQ
0000006e: PUSH2 0x0415
00000071: JUMPI
00000072: DUP1
00000073: PUSH4 0xd3dc4ca1
00000078: EQ
00000079: PUSH2 0x0428
0000007c: JUMPI
0000007d: DUP1
0000007e: PUSH4 0xde681faf
00000083: EQ
00000084: PUSH2 0x046b
00000087: JUMPI
00000088: PUSH1 0x00
0000008a: DUP1
0000008b: REVERT
0000008c: JUMPDEST
0000008d: DUP1
0000008e: PUSH4 0xa1648aa5
00000093: GT
00000094: PUSH2 0x00bd
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0xa1648aa5
0000009e: EQ
0000009f: PUSH2 0x0378
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0xacbc1428
000000a9: EQ
000000aa: PUSH2 0x03c1
000000ad: JUMPI
000000ae: DUP1
000000af: PUSH4 0xc2c4c5c1
000000b4: EQ
000000b5: PUSH2 0x040d
000000b8: JUMPI
000000b9: PUSH1 0x00
000000bb: DUP1
000000bc: REVERT
000000bd: JUMPDEST
000000be: DUP1
000000bf: PUSH4 0x90193b7c
000000c4: EQ
000000c5: PUSH2 0x032f
000000c8: JUMPI
000000c9: DUP1
000000ca: PUSH4 0x905d10ac
000000cf: EQ
000000d0: PUSH2 0x0365
000000d3: JUMPI
000000d4: PUSH1 0x00
000000d6: DUP1
000000d7: REVERT
000000d8: JUMPDEST
000000d9: DUP1
000000da: PUSH4 0x4f3c5090
000000df: GT
000000e0: PUSH2 0x013a
000000e3: JUMPI
000000e4: DUP1
000000e5: PUSH4 0x82aa5ad4
000000ea: GT
000000eb: PUSH2 0x0114
000000ee: JUMPI
000000ef: DUP1
000000f0: PUSH4 0x82aa5ad4
000000f5: EQ
000000f6: PUSH2 0x02bb
000000f9: JUMPI
000000fa: DUP1
000000fb: PUSH4 0x876e69a1
00000100: EQ
00000101: PUSH2 0x02c3
00000104: JUMPI
00000105: DUP1
00000106: PUSH4 0x88720467
0000010b: EQ
0000010c: PUSH2 0x030f
0000010f: JUMPI
00000110: PUSH1 0x00
00000112: DUP1
00000113: REVERT
00000114: JUMPDEST
00000115: DUP1
00000116: PUSH4 0x4f3c5090
0000011b: EQ
0000011c: PUSH2 0x0275
0000011f: JUMPI
00000120: DUP1
00000121: PUSH4 0x7b8d6221
00000126: EQ
00000127: PUSH2 0x0295
0000012a: JUMPI
0000012b: DUP1
0000012c: PUSH4 0x8050a7ee
00000131: EQ
00000132: PUSH2 0x02a8
00000135: JUMPI
00000136: PUSH1 0x00
00000138: DUP1
00000139: REVERT
0000013a: JUMPDEST
0000013b: DUP1
0000013c: PUSH4 0x2308805b
00000141: GT
00000142: PUSH2 0x016b
00000145: JUMPI
00000146: DUP1
00000147: PUSH4 0x2308805b
0000014c: EQ
0000014d: PUSH2 0x01e5
00000150: JUMPI
00000151: DUP1
00000152: PUSH4 0x338b5dea
00000157: EQ
00000158: PUSH2 0x024f
0000015b: JUMPI
0000015c: DUP1
0000015d: PUSH4 0x3902b9bc
00000162: EQ
00000163: PUSH2 0x0262
00000166: JUMPI
00000167: PUSH1 0x00
00000169: DUP1
0000016a: REVERT
0000016b: JUMPDEST
0000016c: DUP1
0000016d: PUSH4 0x08b0308a
00000172: EQ
00000173: PUSH2 0x0187
00000176: JUMPI
00000177: DUP1
00000178: PUSH4 0x14866e08
0000017d: EQ
0000017e: PUSH2 0x01d0
00000181: JUMPI
00000182: JUMPDEST
00000183: PUSH1 0x00
00000185: DUP1
00000186: REVERT
00000187: JUMPDEST
00000188: PUSH1 0x40
0000018a: MLOAD
0000018b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001a0: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
000001c1: AND
000001c2: DUP2
000001c3: MSTORE
000001c4: PUSH1 0x20
000001c6: ADD
000001c7: JUMPDEST
000001c8: PUSH1 0x40
000001ca: MLOAD
000001cb: DUP1
000001cc: SWAP2
000001cd: SUB
000001ce: SWAP1
000001cf: RETURN
000001d0: JUMPDEST
000001d1: PUSH2 0x01e3
000001d4: PUSH2 0x01de
000001d7: CALLDATASIZE
000001d8: PUSH1 0x04
000001da: PUSH2 0x24eb
000001dd: JUMP
000001de: JUMPDEST
000001df: PUSH2 0x04dc
000001e2: JUMP
000001e3: JUMPDEST
000001e4: STOP
000001e5: JUMPDEST
000001e6: PUSH2 0x0241
000001e9: PUSH2 0x01f3
000001ec: CALLDATASIZE
000001ed: PUSH1 0x04
000001ef: PUSH2 0x24eb
000001f2: JUMP
000001f3: JUMPDEST
000001f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000209: AND
0000020a: PUSH1 0x00
0000020c: SWAP1
0000020d: DUP2
0000020e: MSTORE
0000020f: PUSH1 0x05
00000211: PUSH1 0x20
00000213: MSTORE
00000214: PUSH1 0x40
00000216: SWAP1
00000217: KECCAK256
00000218: SLOAD
00000219: PUSH17 0x0100000000000000000000000000000000
0000022b: SWAP1
0000022c: DIV
0000022d: PUSH16 0xffffffffffffffffffffffffffffffff
0000023e: AND
0000023f: SWAP1
00000240: JUMP
00000241: JUMPDEST
00000242: PUSH1 0x40
00000244: MLOAD
00000245: SWAP1
00000246: DUP2
00000247: MSTORE
00000248: PUSH1 0x20
0000024a: ADD
0000024b: PUSH2 0x01c7
0000024e: JUMP
0000024f: JUMPDEST
00000250: PUSH2 0x01e3
00000253: PUSH2 0x025d
00000256: CALLDATASIZE
00000257: PUSH1 0x04
00000259: PUSH2 0x250f
0000025c: JUMP
0000025d: JUMPDEST
0000025e: PUSH2 0x0562
00000261: JUMP
00000262: JUMPDEST
00000263: PUSH2 0x01e3
00000266: PUSH2 0x0270
00000269: CALLDATASIZE
0000026a: PUSH1 0x04
0000026c: PUSH2 0x24eb
0000026f: JUMP
00000270: JUMPDEST
00000271: PUSH2 0x0613
00000274: JUMP
00000275: JUMPDEST
00000276: PUSH2 0x0241
00000279: PUSH2 0x0283
0000027c: CALLDATASIZE
0000027d: PUSH1 0x04
0000027f: PUSH2 0x253b
00000282: JUMP
00000283: JUMPDEST
00000284: PUSH1 0x00
00000286: SWAP1
00000287: DUP2
00000288: MSTORE
00000289: PUSH1 0x04
0000028b: PUSH1 0x20
0000028d: MSTORE
0000028e: PUSH1 0x40
00000290: SWAP1
00000291: KECCAK256
00000292: SLOAD
00000293: SWAP1
00000294: JUMP
00000295: JUMPDEST
00000296: PUSH2 0x01e3
00000299: PUSH2 0x02a3
0000029c: CALLDATASIZE
0000029d: PUSH1 0x04
0000029f: PUSH2 0x25a0
000002a2: JUMP
000002a3: JUMPDEST
000002a4: PUSH2 0x068e
000002a7: JUMP
000002a8: JUMPDEST
000002a9: PUSH2 0x0241
000002ac: PUSH2 0x02b6
000002af: CALLDATASIZE
000002b0: PUSH1 0x04
000002b2: PUSH2 0x260c
000002b5: JUMP
000002b6: JUMPDEST
000002b7: PUSH2 0x081d
000002ba: JUMP
000002bb: JUMPDEST
000002bc: PUSH1 0x03
000002be: SLOAD
000002bf: PUSH2 0x0241
000002c2: JUMP
000002c3: JUMPDEST
000002c4: PUSH2 0x0241
000002c7: PUSH2 0x02d1
000002ca: CALLDATASIZE
000002cb: PUSH1 0x04
000002cd: PUSH2 0x24eb
000002d0: JUMP
000002d1: JUMPDEST
000002d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002e7: AND
000002e8: PUSH1 0x00
000002ea: SWAP1
000002eb: DUP2
000002ec: MSTORE
000002ed: PUSH1 0x07
000002ef: PUSH1 0x20
000002f1: MSTORE
000002f2: PUSH1 0x40
000002f4: SWAP1
000002f5: KECCAK256
000002f6: SLOAD
000002f7: PUSH9 0x010000000000000000
00000301: SWAP1
00000302: DIV
00000303: PUSH8 0xffffffffffffffff
0000030c: AND
0000030d: SWAP1
0000030e: JUMP
0000030f: JUMPDEST
00000310: PUSH2 0x0322
00000313: PUSH2 0x031d
00000316: CALLDATASIZE
00000317: PUSH1 0x04
00000319: PUSH2 0x2645
0000031c: JUMP
0000031d: JUMPDEST
0000031e: PUSH2 0x0832
00000321: JUMP
00000322: JUMPDEST
00000323: PUSH1 0x40
00000325: MLOAD
00000326: PUSH2 0x01c7
00000329: SWAP2
0000032a: SWAP1
0000032b: PUSH2 0x269a
0000032e: JUMP
0000032f: JUMPDEST
00000330: PUSH2 0x0241
00000333: PUSH2 0x033d
00000336: CALLDATASIZE
00000337: PUSH1 0x04
00000339: PUSH2 0x24eb
0000033c: JUMP
0000033d: JUMPDEST
0000033e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000353: AND
00000354: PUSH1 0x00
00000356: SWAP1
00000357: DUP2
00000358: MSTORE
00000359: PUSH1 0x20
0000035b: DUP2
0000035c: SWAP1
0000035d: MSTORE
0000035e: PUSH1 0x40
00000360: SWAP1
00000361: KECCAK256
00000362: SLOAD
00000363: SWAP1
00000364: JUMP
00000365: JUMPDEST
00000366: PUSH2 0x01e3
00000369: PUSH2 0x0373
0000036c: CALLDATASIZE
0000036d: PUSH1 0x04
0000036f: PUSH2 0x26d2
00000372: JUMP
00000373: JUMPDEST
00000374: PUSH2 0x098c
00000377: JUMP
00000378: JUMPDEST
00000379: PUSH2 0x03b1
0000037c: PUSH2 0x0386
0000037f: CALLDATASIZE
00000380: PUSH1 0x04
00000382: PUSH2 0x24eb
00000385: JUMP
00000386: JUMPDEST
00000387: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000039c: AND
0000039d: PUSH1 0x00
0000039f: SWAP1
000003a0: DUP2
000003a1: MSTORE
000003a2: PUSH1 0x01
000003a4: PUSH1 0x20
000003a6: MSTORE
000003a7: PUSH1 0x40
000003a9: SWAP1
000003aa: KECCAK256
000003ab: SLOAD
000003ac: PUSH1 0xff
000003ae: AND
000003af: SWAP1
000003b0: JUMP
000003b1: JUMPDEST
000003b2: PUSH1 0x40
000003b4: MLOAD
000003b5: SWAP1
000003b6: ISZERO
000003b7: ISZERO
000003b8: DUP2
000003b9: MSTORE
000003ba: PUSH1 0x20
000003bc: ADD
000003bd: PUSH2 0x01c7
000003c0: JUMP
000003c1: JUMPDEST
000003c2: PUSH2 0x0241
000003c5: PUSH2 0x03cf
000003c8: CALLDATASIZE
000003c9: PUSH1 0x04
000003cb: PUSH2 0x24eb
000003ce: JUMP
000003cf: JUMPDEST
000003d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003e5: AND
000003e6: PUSH1 0x00
000003e8: SWAP1
000003e9: DUP2
000003ea: MSTORE
000003eb: PUSH1 0x05
000003ed: PUSH1 0x20
000003ef: MSTORE
000003f0: PUSH1 0x40
000003f2: SWAP1
000003f3: KECCAK256
000003f4: SLOAD
000003f5: PUSH9 0x010000000000000000
000003ff: SWAP1
00000400: DIV
00000401: PUSH8 0xffffffffffffffff
0000040a: AND
0000040b: SWAP1
0000040c: JUMP
0000040d: JUMPDEST
0000040e: PUSH2 0x01e3
00000411: PUSH2 0x0a30
00000414: JUMP
00000415: JUMPDEST
00000416: PUSH2 0x0241
00000419: PUSH2 0x0423
0000041c: CALLDATASIZE
0000041d: PUSH1 0x04
0000041f: PUSH2 0x260c
00000422: JUMP
00000423: JUMPDEST
00000424: PUSH2 0x0aaf
00000427: JUMP
00000428: JUMPDEST
00000429: PUSH2 0x0241
0000042c: PUSH2 0x0436
0000042f: CALLDATASIZE
00000430: PUSH1 0x04
00000432: PUSH2 0x250f
00000435: JUMP
00000436: JUMPDEST
00000437: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000044c: SWAP2
0000044d: SWAP1
0000044e: SWAP2
0000044f: AND
00000450: PUSH1 0x00
00000452: SWAP1
00000453: DUP2
00000454: MSTORE
00000455: PUSH1 0x06
00000457: PUSH1 0x20
00000459: SWAP1
0000045a: DUP2
0000045b: MSTORE
0000045c: PUSH1 0x40
0000045e: DUP1
0000045f: DUP4
00000460: KECCAK256
00000461: SWAP4
00000462: DUP4
00000463: MSTORE
00000464: SWAP3
00000465: SWAP1
00000466: MSTORE
00000467: KECCAK256
00000468: SLOAD
00000469: SWAP1
0000046a: JUMP
0000046b: JUMPDEST
0000046c: PUSH2 0x0241
0000046f: PUSH2 0x0479
00000472: CALLDATASIZE
00000473: PUSH1 0x04
00000475: PUSH2 0x250f
00000478: JUMP
00000479: JUMPDEST
0000047a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000048f: SWAP2
00000490: SWAP1
00000491: SWAP2
00000492: AND
00000493: PUSH1 0x00
00000495: SWAP1
00000496: DUP2
00000497: MSTORE
00000498: PUSH1 0x08
0000049a: PUSH1 0x20
0000049c: SWAP1
0000049d: DUP2
0000049e: MSTORE
0000049f: PUSH1 0x40
000004a1: DUP1
000004a2: DUP4
000004a3: KECCAK256
000004a4: SWAP4
000004a5: DUP4
000004a6: MSTORE
000004a7: SWAP3
000004a8: SWAP1
000004a9: MSTORE
000004aa: KECCAK256
000004ab: SLOAD
000004ac: SWAP1
000004ad: JUMP
000004ae: JUMPDEST
000004af: PUSH2 0x01e3
000004b2: PUSH2 0x04bc
000004b5: CALLDATASIZE
000004b6: PUSH1 0x04
000004b8: PUSH2 0x2724
000004bb: JUMP
000004bc: JUMPDEST
000004bd: PUSH2 0x0b61
000004c0: JUMP
000004c1: JUMPDEST
000004c2: PUSH2 0x0241
000004c5: PUSH2 0x0b6e
000004c8: JUMP
000004c9: JUMPDEST
000004ca: PUSH2 0x01e3
000004cd: PUSH2 0x04d7
000004d0: CALLDATASIZE
000004d1: PUSH1 0x04
000004d3: PUSH2 0x27bd
000004d6: JUMP
000004d7: JUMPDEST
000004d8: PUSH2 0x0b7d
000004db: JUMP
000004dc: JUMPDEST
000004dd: PUSH1 0x02
000004df: SLOAD
000004e0: PUSH1 0x01
000004e2: EQ
000004e3: PUSH2 0x054d
000004e6: JUMPI
000004e7: PUSH1 0x40
000004e9: MLOAD
000004ea: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000050b: DUP2
0000050c: MSTORE
0000050d: PUSH1 0x20
0000050f: PUSH1 0x04
00000511: DUP3
00000512: ADD
00000513: MSTORE
00000514: PUSH1 0x0a
00000516: PUSH1 0x24
00000518: DUP3
00000519: ADD
0000051a: MSTORE
0000051b: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
0000053c: PUSH1 0x44
0000053e: DUP3
0000053f: ADD
00000540: MSTORE
00000541: PUSH1 0x64
00000543: ADD
00000544: JUMPDEST
00000545: PUSH1 0x40
00000547: MLOAD
00000548: DUP1
00000549: SWAP2
0000054a: SUB
0000054b: SWAP1
0000054c: REVERT
0000054d: JUMPDEST
0000054e: PUSH1 0x02
00000550: DUP1
00000551: SSTORE
00000552: PUSH2 0x055a
00000555: DUP2
00000556: PUSH2 0x0c3d
00000559: JUMP
0000055a: JUMPDEST
0000055b: POP
0000055c: PUSH1 0x01
0000055e: PUSH1 0x02
00000560: SSTORE
00000561: JUMP
00000562: JUMPDEST
00000563: PUSH1 0x02
00000565: SLOAD
00000566: PUSH1 0x01
00000568: EQ
00000569: PUSH2 0x05ce
0000056c: JUMPI
0000056d: PUSH1 0x40
0000056f: MLOAD
00000570: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000591: DUP2
00000592: MSTORE
00000593: PUSH1 0x20
00000595: PUSH1 0x04
00000597: DUP3
00000598: ADD
00000599: MSTORE
0000059a: PUSH1 0x0a
0000059c: PUSH1 0x24
0000059e: DUP3
0000059f: ADD
000005a0: MSTORE
000005a1: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
000005c2: PUSH1 0x44
000005c4: DUP3
000005c5: ADD
000005c6: MSTORE
000005c7: PUSH1 0x64
000005c9: ADD
000005ca: PUSH2 0x0544
000005cd: JUMP
000005ce: JUMPDEST
000005cf: PUSH1 0x02
000005d1: DUP1
000005d2: SSTORE
000005d3: PUSH2 0x05dd
000005d6: DUP3
000005d7: PUSH1 0x00
000005d9: PUSH2 0x124f
000005dc: JUMP
000005dd: JUMPDEST
000005de: PUSH2 0x05ff
000005e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005f6: DUP4
000005f7: AND
000005f8: CALLER
000005f9: ADDRESS
000005fa: DUP5
000005fb: PUSH2 0x1718
000005fe: JUMP
000005ff: JUMPDEST
00000600: PUSH2 0x060a
00000603: DUP3
00000604: PUSH1 0x01
00000606: PUSH2 0x124f
00000609: JUMP
0000060a: JUMPDEST
0000060b: POP
0000060c: POP
0000060d: PUSH1 0x01
0000060f: PUSH1 0x02
00000611: SSTORE
00000612: JUMP
00000613: JUMPDEST
00000614: PUSH1 0x02
00000616: SLOAD
00000617: PUSH1 0x01
00000619: EQ
0000061a: PUSH2 0x067f
0000061d: JUMPI
0000061e: PUSH1 0x40
00000620: MLOAD
00000621: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000642: DUP2
00000643: MSTORE
00000644: PUSH1 0x20
00000646: PUSH1 0x04
00000648: DUP3
00000649: ADD
0000064a: MSTORE
0000064b: PUSH1 0x0a
0000064d: PUSH1 0x24
0000064f: DUP3
00000650: ADD
00000651: MSTORE
00000652: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
00000673: PUSH1 0x44
00000675: DUP3
00000676: ADD
00000677: MSTORE
00000678: PUSH1 0x64
0000067a: ADD
0000067b: PUSH2 0x0544
0000067e: JUMP
0000067f: JUMPDEST
00000680: PUSH1 0x02
00000682: DUP1
00000683: SSTORE
00000684: PUSH2 0x055a
00000687: DUP2
00000688: PUSH1 0x01
0000068a: PUSH2 0x124f
0000068d: JUMP
0000068e: JUMPDEST
0000068f: PUSH1 0x02
00000691: SLOAD
00000692: PUSH1 0x01
00000694: EQ
00000695: PUSH2 0x06fa
00000698: JUMPI
00000699: PUSH1 0x40
0000069b: MLOAD
0000069c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000006bd: DUP2
000006be: MSTORE
000006bf: PUSH1 0x20
000006c1: PUSH1 0x04
000006c3: DUP3
000006c4: ADD
000006c5: MSTORE
000006c6: PUSH1 0x0a
000006c8: PUSH1 0x24
000006ca: DUP3
000006cb: ADD
000006cc: MSTORE
000006cd: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
000006ee: PUSH1 0x44
000006f0: DUP3
000006f1: ADD
000006f2: MSTORE
000006f3: PUSH1 0x64
000006f5: ADD
000006f6: PUSH2 0x0544
000006f9: JUMP
000006fa: JUMPDEST
000006fb: PUSH1 0x02
000006fd: DUP1
000006fe: SSTORE
000006ff: DUP3
00000700: DUP2
00000701: EQ
00000702: PUSH2 0x0737
00000705: JUMPI
00000706: PUSH1 0x40
00000708: MLOAD
00000709: PUSH32 0xb0208d4900000000000000000000000000000000000000000000000000000000
0000072a: DUP2
0000072b: MSTORE
0000072c: PUSH1 0x04
0000072e: ADD
0000072f: PUSH1 0x40
00000731: MLOAD
00000732: DUP1
00000733: SWAP2
00000734: SUB
00000735: SWAP1
00000736: REVERT
00000737: JUMPDEST
00000738: DUP3
00000739: PUSH1 0x00
0000073b: JUMPDEST
0000073c: DUP2
0000073d: DUP2
0000073e: LT
0000073f: ISZERO
00000740: PUSH2 0x0810
00000743: JUMPI
00000744: PUSH2 0x0774
00000747: DUP7
00000748: DUP7
00000749: DUP4
0000074a: DUP2
0000074b: DUP2
0000074c: LT
0000074d: PUSH2 0x0758
00000750: JUMPI
00000751: PUSH2 0x0758
00000754: PUSH2 0x2893
00000757: JUMP
00000758: JUMPDEST
00000759: SWAP1
0000075a: POP
0000075b: PUSH1 0x20
0000075d: MUL
0000075e: ADD
0000075f: PUSH1 0x20
00000761: DUP2
00000762: ADD
00000763: SWAP1
00000764: PUSH2 0x076d
00000767: SWAP2
00000768: SWAP1
00000769: PUSH2 0x24eb
0000076c: JUMP
0000076d: JUMPDEST
0000076e: PUSH1 0x00
00000770: PUSH2 0x124f
00000773: JUMP
00000774: JUMPDEST
00000775: PUSH2 0x07d7
00000778: CALLER
00000779: ADDRESS
0000077a: DUP7
0000077b: DUP7
0000077c: DUP6
0000077d: DUP2
0000077e: DUP2
0000077f: LT
00000780: PUSH2 0x078b
00000783: JUMPI
00000784: PUSH2 0x078b
00000787: PUSH2 0x2893
0000078a: JUMP
0000078b: JUMPDEST
0000078c: SWAP1
0000078d: POP
0000078e: PUSH1 0x20
00000790: MUL
00000791: ADD
00000792: CALLDATALOAD
00000793: DUP10
00000794: DUP10
00000795: DUP7
00000796: DUP2
00000797: DUP2
00000798: LT
00000799: PUSH2 0x07a4
0000079c: JUMPI
0000079d: PUSH2 0x07a4
000007a0: PUSH2 0x2893
000007a3: JUMP
000007a4: JUMPDEST
000007a5: SWAP1
000007a6: POP
000007a7: PUSH1 0x20
000007a9: MUL
000007aa: ADD
000007ab: PUSH1 0x20
000007ad: DUP2
000007ae: ADD
000007af: SWAP1
000007b0: PUSH2 0x07b9
000007b3: SWAP2
000007b4: SWAP1
000007b5: PUSH2 0x24eb
000007b8: JUMP
000007b9: JUMPDEST
000007ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007cf: AND
000007d0: SWAP3
000007d1: SWAP2
000007d2: SWAP1
000007d3: PUSH2 0x1718
000007d6: JUMP
000007d7: JUMPDEST
000007d8: PUSH2 0x0808
000007db: DUP7
000007dc: DUP7
000007dd: DUP4
000007de: DUP2
000007df: DUP2
000007e0: LT
000007e1: PUSH2 0x07ec
000007e4: JUMPI
000007e5: PUSH2 0x07ec
000007e8: PUSH2 0x2893
000007eb: JUMP
000007ec: JUMPDEST
000007ed: SWAP1
000007ee: POP
000007ef: PUSH1 0x20
000007f1: MUL
000007f2: ADD
000007f3: PUSH1 0x20
000007f5: DUP2
000007f6: ADD
000007f7: SWAP1
000007f8: PUSH2 0x0801
000007fb: SWAP2
000007fc: SWAP1
000007fd: PUSH2 0x24eb
00000800: JUMP
00000801: JUMPDEST
00000802: PUSH1 0x01
00000804: PUSH2 0x124f
00000807: JUMP
00000808: JUMPDEST
00000809: PUSH1 0x01
0000080b: ADD
0000080c: PUSH2 0x073b
0000080f: JUMP
00000810: JUMPDEST
00000811: POP
00000812: POP
00000813: PUSH1 0x01
00000815: PUSH1 0x02
00000817: SSTORE
00000818: POP
00000819: POP
0000081a: POP
0000081b: POP
0000081c: JUMP
0000081d: JUMPDEST
0000081e: PUSH1 0x00
00000820: PUSH2 0x0829
00000823: DUP4
00000824: DUP4
00000825: PUSH2 0x17de
00000828: JUMP
00000829: JUMPDEST
0000082a: SWAP1
0000082b: POP
0000082c: JUMPDEST
0000082d: SWAP3
0000082e: SWAP2
0000082f: POP
00000830: POP
00000831: JUMP
00000832: JUMPDEST
00000833: PUSH1 0x60
00000835: PUSH1 0x02
00000837: SLOAD
00000838: PUSH1 0x01
0000083a: EQ
0000083b: PUSH2 0x08a0
0000083e: JUMPI
0000083f: PUSH1 0x40
00000841: MLOAD
00000842: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000863: DUP2
00000864: MSTORE
00000865: PUSH1 0x20
00000867: PUSH1 0x04
00000869: DUP3
0000086a: ADD
0000086b: MSTORE
0000086c: PUSH1 0x0a
0000086e: PUSH1 0x24
00000870: DUP3
00000871: ADD
00000872: MSTORE
00000873: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
00000894: PUSH1 0x44
00000896: DUP3
00000897: ADD
00000898: MSTORE
00000899: PUSH1 0x64
0000089b: ADD
0000089c: PUSH2 0x0544
0000089f: JUMP
000008a0: JUMPDEST
000008a1: PUSH1 0x02
000008a3: DUP1
000008a4: SSTORE
000008a5: DUP4
000008a6: PUSH2 0x08ae
000008a9: DUP2
000008aa: PUSH2 0x1876
000008ad: JUMP
000008ae: JUMPDEST
000008af: PUSH2 0x08b6
000008b2: PUSH2 0x18f3
000008b5: JUMP
000008b6: JUMPDEST
000008b7: PUSH2 0x08bf
000008ba: DUP6
000008bb: PUSH2 0x0c3d
000008be: JUMP
000008bf: JUMPDEST
000008c0: DUP3
000008c1: PUSH1 0x00
000008c3: DUP2
000008c4: PUSH8 0xffffffffffffffff
000008cd: DUP2
000008ce: GT
000008cf: ISZERO
000008d0: PUSH2 0x08db
000008d3: JUMPI
000008d4: PUSH2 0x08db
000008d7: PUSH2 0x273f
000008da: JUMP
000008db: JUMPDEST
000008dc: PUSH1 0x40
000008de: MLOAD
000008df: SWAP1
000008e0: DUP1
000008e1: DUP3
000008e2: MSTORE
000008e3: DUP1
000008e4: PUSH1 0x20
000008e6: MUL
000008e7: PUSH1 0x20
000008e9: ADD
000008ea: DUP3
000008eb: ADD
000008ec: PUSH1 0x40
000008ee: MSTORE
000008ef: DUP1
000008f0: ISZERO
000008f1: PUSH2 0x0904
000008f4: JUMPI
000008f5: DUP2
000008f6: PUSH1 0x20
000008f8: ADD
000008f9: PUSH1 0x20
000008fb: DUP3
000008fc: MUL
000008fd: DUP1
000008fe: CALLDATASIZE
000008ff: DUP4
00000900: CALLDATACOPY
00000901: ADD
00000902: SWAP1
00000903: POP
00000904: JUMPDEST
00000905: POP
00000906: SWAP1
00000907: POP
00000908: PUSH1 0x00
0000090a: JUMPDEST
0000090b: DUP3
0000090c: DUP2
0000090d: LT
0000090e: ISZERO
0000090f: PUSH2 0x097c
00000912: JUMPI
00000913: PUSH2 0x0927
00000916: DUP8
00000917: DUP8
00000918: DUP4
00000919: DUP2
0000091a: DUP2
0000091b: LT
0000091c: PUSH2 0x0758
0000091f: JUMPI
00000920: PUSH2 0x0758
00000923: PUSH2 0x2893
00000926: JUMP
00000927: JUMPDEST
00000928: PUSH2 0x0957
0000092b: DUP9
0000092c: DUP9
0000092d: DUP9
0000092e: DUP5
0000092f: DUP2
00000930: DUP2
00000931: LT
00000932: PUSH2 0x093d
00000935: JUMPI
00000936: PUSH2 0x093d
00000939: PUSH2 0x2893
0000093c: JUMP
0000093d: JUMPDEST
0000093e: SWAP1
0000093f: POP
00000940: PUSH1 0x20
00000942: MUL
00000943: ADD
00000944: PUSH1 0x20
00000946: DUP2
00000947: ADD
00000948: SWAP1
00000949: PUSH2 0x0952
0000094c: SWAP2
0000094d: SWAP1
0000094e: PUSH2 0x24eb
00000951: JUMP
00000952: JUMPDEST
00000953: PUSH2 0x1a7d
00000956: JUMP
00000957: JUMPDEST
00000958: DUP3
00000959: DUP3
0000095a: DUP2
0000095b: MLOAD
0000095c: DUP2
0000095d: LT
0000095e: PUSH2 0x0969
00000961: JUMPI
00000962: PUSH2 0x0969
00000965: PUSH2 0x2893
00000968: JUMP
00000969: JUMPDEST
0000096a: PUSH1 0x20
0000096c: SWAP1
0000096d: DUP2
0000096e: MUL
0000096f: SWAP2
00000970: SWAP1
00000971: SWAP2
00000972: ADD
00000973: ADD
00000974: MSTORE
00000975: PUSH1 0x01
00000977: ADD
00000978: PUSH2 0x090a
0000097b: JUMP
0000097c: JUMPDEST
0000097d: POP
0000097e: PUSH1 0x01
00000980: PUSH1 0x02
00000982: SSTORE
00000983: SWAP7
00000984: SWAP6
00000985: POP
00000986: POP
00000987: POP
00000988: POP
00000989: POP
0000098a: POP
0000098b: JUMP
0000098c: JUMPDEST
0000098d: PUSH1 0x02
0000098f: SLOAD
00000990: PUSH1 0x01
00000992: EQ
00000993: PUSH2 0x09f8
00000996: JUMPI
00000997: PUSH1 0x40
00000999: MLOAD
0000099a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000009bb: DUP2
000009bc: MSTORE
000009bd: PUSH1 0x20
000009bf: PUSH1 0x04
000009c1: DUP3
000009c2: ADD
000009c3: MSTORE
000009c4: PUSH1 0x0a
000009c6: PUSH1 0x24
000009c8: DUP3
000009c9: ADD
000009ca: MSTORE
000009cb: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
000009ec: PUSH1 0x44
000009ee: DUP3
000009ef: ADD
000009f0: MSTORE
000009f1: PUSH1 0x64
000009f3: ADD
000009f4: PUSH2 0x0544
000009f7: JUMP
000009f8: JUMPDEST
000009f9: PUSH1 0x02
000009fb: DUP1
000009fc: SSTORE
000009fd: DUP1
000009fe: PUSH1 0x00
00000a00: JUMPDEST
00000a01: DUP2
00000a02: DUP2
00000a03: LT
00000a04: ISZERO
00000a05: PUSH2 0x0a25
00000a08: JUMPI
00000a09: PUSH2 0x0a1d
00000a0c: DUP5
00000a0d: DUP5
00000a0e: DUP4
00000a0f: DUP2
00000a10: DUP2
00000a11: LT
00000a12: PUSH2 0x07ec
00000a15: JUMPI
00000a16: PUSH2 0x07ec
00000a19: PUSH2 0x2893
00000a1c: JUMP
00000a1d: JUMPDEST
00000a1e: PUSH1 0x01
00000a20: ADD
00000a21: PUSH2 0x0a00
00000a24: JUMP
00000a25: JUMPDEST
00000a26: POP
00000a27: POP
00000a28: PUSH1 0x01
00000a2a: PUSH1 0x02
00000a2c: SSTORE
00000a2d: POP
00000a2e: POP
00000a2f: JUMP
00000a30: JUMPDEST
00000a31: PUSH1 0x02
00000a33: SLOAD
00000a34: PUSH1 0x01
00000a36: EQ
00000a37: PUSH2 0x0a9c
00000a3a: JUMPI
00000a3b: PUSH1 0x40
00000a3d: MLOAD
00000a3e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000a5f: DUP2
00000a60: MSTORE
00000a61: PUSH1 0x20
00000a63: PUSH1 0x04
00000a65: DUP3
00000a66: ADD
00000a67: MSTORE
00000a68: PUSH1 0x0a
00000a6a: PUSH1 0x24
00000a6c: DUP3
00000a6d: ADD
00000a6e: MSTORE
00000a6f: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
00000a90: PUSH1 0x44
00000a92: DUP3
00000a93: ADD
00000a94: MSTORE
00000a95: PUSH1 0x64
00000a97: ADD
00000a98: PUSH2 0x0544
00000a9b: JUMP
00000a9c: JUMPDEST
00000a9d: PUSH1 0x02
00000a9f: DUP1
00000aa0: SSTORE
00000aa1: PUSH2 0x0aa8
00000aa4: PUSH2 0x18f3
00000aa7: JUMP
00000aa8: JUMPDEST
00000aa9: PUSH1 0x01
00000aab: PUSH1 0x02
00000aad: SSTORE
00000aae: JUMP
00000aaf: JUMPDEST
00000ab0: PUSH1 0x00
00000ab2: PUSH1 0x02
00000ab4: SLOAD
00000ab5: PUSH1 0x01
00000ab7: EQ
00000ab8: PUSH2 0x0b1d
00000abb: JUMPI
00000abc: PUSH1 0x40
00000abe: MLOAD
00000abf: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000ae0: DUP2
00000ae1: MSTORE
00000ae2: PUSH1 0x20
00000ae4: PUSH1 0x04
00000ae6: DUP3
00000ae7: ADD
00000ae8: MSTORE
00000ae9: PUSH1 0x0a
00000aeb: PUSH1 0x24
00000aed: DUP3
00000aee: ADD
00000aef: MSTORE
00000af0: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
00000b11: PUSH1 0x44
00000b13: DUP3
00000b14: ADD
00000b15: MSTORE
00000b16: PUSH1 0x64
00000b18: ADD
00000b19: PUSH2 0x0544
00000b1c: JUMP
00000b1d: JUMPDEST
00000b1e: PUSH1 0x02
00000b20: DUP1
00000b21: SSTORE
00000b22: DUP3
00000b23: PUSH2 0x0b2b
00000b26: DUP2
00000b27: PUSH2 0x1876
00000b2a: JUMP
00000b2b: JUMPDEST
00000b2c: PUSH2 0x0b33
00000b2f: PUSH2 0x18f3
00000b32: JUMP
00000b33: JUMPDEST
00000b34: PUSH2 0x0b3c
00000b37: DUP5
00000b38: PUSH2 0x0c3d
00000b3b: JUMP
00000b3c: JUMPDEST
00000b3d: PUSH2 0x0b47
00000b40: DUP4
00000b41: PUSH1 0x00
00000b43: PUSH2 0x124f
00000b46: JUMP
00000b47: JUMPDEST
00000b48: PUSH1 0x00
00000b4a: PUSH2 0x0b53
00000b4d: DUP6
00000b4e: DUP6
00000b4f: PUSH2 0x1a7d
00000b52: JUMP
00000b53: JUMPDEST
00000b54: PUSH1 0x01
00000b56: PUSH1 0x02
00000b58: SSTORE
00000b59: SWAP6
00000b5a: SWAP5
00000b5b: POP
00000b5c: POP
00000b5d: POP
00000b5e: POP
00000b5f: POP
00000b60: JUMP
00000b61: JUMPDEST
00000b62: PUSH2 0x0b6b
00000b65: CALLER
00000b66: DUP3
00000b67: PUSH2 0x1cc5
00000b6a: JUMP
00000b6b: JUMPDEST
00000b6c: POP
00000b6d: JUMP
00000b6e: JUMPDEST
00000b6f: PUSH1 0x00
00000b71: PUSH2 0x0b78
00000b74: PUSH2 0x1d53
00000b77: JUMP
00000b78: JUMPDEST
00000b79: SWAP1
00000b7a: POP
00000b7b: SWAP1
00000b7c: JUMP
00000b7d: JUMPDEST
00000b7e: PUSH1 0x00
00000b80: PUSH32 0xbd291ffccec065968fe20c5f8debdad73ab50837733f357eeae8814178015a90
00000ba1: DUP5
00000ba2: DUP5
00000ba3: PUSH2 0x0bce
00000ba6: DUP8
00000ba7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bbc: AND
00000bbd: PUSH1 0x00
00000bbf: SWAP1
00000bc0: DUP2
00000bc1: MSTORE
00000bc2: PUSH1 0x20
00000bc4: DUP2
00000bc5: SWAP1
00000bc6: MSTORE
00000bc7: PUSH1 0x40
00000bc9: SWAP1
00000bca: KECCAK256
00000bcb: SLOAD
00000bcc: SWAP1
00000bcd: JUMP
00000bce: JUMPDEST
00000bcf: PUSH1 0x40
00000bd1: DUP1
00000bd2: MLOAD
00000bd3: PUSH1 0x20
00000bd5: DUP2
00000bd6: ADD
00000bd7: SWAP6
00000bd8: SWAP1
00000bd9: SWAP6
00000bda: MSTORE
00000bdb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bf0: SWAP1
00000bf1: SWAP4
00000bf2: AND
00000bf3: SWAP3
00000bf4: DUP5
00000bf5: ADD
00000bf6: SWAP3
00000bf7: SWAP1
00000bf8: SWAP3
00000bf9: MSTORE
00000bfa: ISZERO
00000bfb: ISZERO
00000bfc: PUSH1 0x60
00000bfe: DUP4
00000bff: ADD
00000c00: MSTORE
00000c01: PUSH1 0x80
00000c03: DUP3
00000c04: ADD
00000c05: MSTORE
00000c06: PUSH1 0xa0
00000c08: ADD
00000c09: PUSH1 0x40
00000c0b: MLOAD
00000c0c: PUSH1 0x20
00000c0e: DUP2
00000c0f: DUP4
00000c10: SUB
00000c11: SUB
00000c12: DUP2
00000c13: MSTORE
00000c14: SWAP1
00000c15: PUSH1 0x40
00000c17: MSTORE
00000c18: DUP1
00000c19: MLOAD
00000c1a: SWAP1
00000c1b: PUSH1 0x20
00000c1d: ADD
00000c1e: KECCAK256
00000c1f: SWAP1
00000c20: POP
00000c21: PUSH2 0x0c2d
00000c24: DUP5
00000c25: DUP3
00000c26: DUP5
00000c27: PUSH1 0x01
00000c29: PUSH2 0x1e87
00000c2c: JUMP
00000c2d: JUMPDEST
00000c2e: PUSH2 0x0c37
00000c31: DUP5
00000c32: DUP5
00000c33: PUSH2 0x1cc5
00000c36: JUMP
00000c37: JUMPDEST
00000c38: POP
00000c39: POP
00000c3a: POP
00000c3b: POP
00000c3c: JUMP
00000c3d: JUMPDEST
00000c3e: PUSH1 0x40
00000c40: MLOAD
00000c41: PUSH32 0x010ae75700000000000000000000000000000000000000000000000000000000
00000c62: DUP2
00000c63: MSTORE
00000c64: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c79: DUP3
00000c7a: DUP2
00000c7b: AND
00000c7c: PUSH1 0x04
00000c7e: DUP4
00000c7f: ADD
00000c80: MSTORE
00000c81: PUSH1 0x00
00000c83: SWAP2
00000c84: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
00000ca5: SWAP1
00000ca6: SWAP2
00000ca7: AND
00000ca8: SWAP1
00000ca9: PUSH4 0x010ae757
00000cae: SWAP1
00000caf: PUSH1 0x24
00000cb1: ADD
00000cb2: PUSH1 0x20
00000cb4: PUSH1 0x40
00000cb6: MLOAD
00000cb7: DUP1
00000cb8: DUP4
00000cb9: SUB
00000cba: DUP2
00000cbb: DUP7
00000cbc: GAS
00000cbd: STATICCALL
00000cbe: ISZERO
00000cbf: DUP1
00000cc0: ISZERO
00000cc1: PUSH2 0x0cce
00000cc4: JUMPI
00000cc5: RETURNDATASIZE
00000cc6: PUSH1 0x00
00000cc8: DUP1
00000cc9: RETURNDATACOPY
00000cca: RETURNDATASIZE
00000ccb: PUSH1 0x00
00000ccd: REVERT
00000cce: JUMPDEST
00000ccf: POP
00000cd0: POP
00000cd1: POP
00000cd2: POP
00000cd3: PUSH1 0x40
00000cd5: MLOAD
00000cd6: RETURNDATASIZE
00000cd7: PUSH1 0x1f
00000cd9: NOT
00000cda: PUSH1 0x1f
00000cdc: DUP3
00000cdd: ADD
00000cde: AND
00000cdf: DUP3
00000ce0: ADD
00000ce1: DUP1
00000ce2: PUSH1 0x40
00000ce4: MSTORE
00000ce5: POP
00000ce6: DUP2
00000ce7: ADD
00000ce8: SWAP1
00000ce9: PUSH2 0x0cf2
00000cec: SWAP2
00000ced: SWAP1
00000cee: PUSH2 0x28c2
00000cf1: JUMP
00000cf2: JUMPDEST
00000cf3: SWAP1
00000cf4: POP
00000cf5: DUP1
00000cf6: PUSH1 0x00
00000cf8: SUB
00000cf9: PUSH2 0x0d00
00000cfc: JUMPI
00000cfd: POP
00000cfe: POP
00000cff: JUMP
00000d00: JUMPDEST
00000d01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d16: DUP3
00000d17: AND
00000d18: PUSH1 0x00
00000d1a: SWAP1
00000d1b: DUP2
00000d1c: MSTORE
00000d1d: PUSH1 0x07
00000d1f: PUSH1 0x20
00000d21: MSTORE
00000d22: PUSH1 0x40
00000d24: DUP2
00000d25: KECCAK256
00000d26: DUP1
00000d27: SLOAD
00000d28: SWAP1
00000d29: SWAP2
00000d2a: PUSH9 0x010000000000000000
00000d34: SWAP1
00000d35: SWAP2
00000d36: DIV
00000d37: PUSH8 0xffffffffffffffff
00000d40: AND
00000d41: SWAP1
00000d42: DUP2
00000d43: DUP2
00000d44: SUB
00000d45: PUSH2 0x0d7c
00000d48: JUMPI
00000d49: PUSH2 0x0d75
00000d4c: DUP6
00000d4d: PUSH32 0x0000000000000000000000000000000000000000000000000000000063dafd00
00000d6e: PUSH1 0x00
00000d70: DUP8
00000d71: PUSH2 0x1eb4
00000d74: JUMP
00000d75: JUMPDEST
00000d76: SWAP1
00000d77: POP
00000d78: PUSH2 0x0dcd
00000d7b: JUMP
00000d7c: JUMPDEST
00000d7d: TIMESTAMP
00000d7e: DUP3
00000d7f: LT
00000d80: PUSH2 0x0d8a
00000d83: JUMPI
00000d84: POP
00000d85: POP
00000d86: POP
00000d87: POP
00000d88: POP
00000d89: JUMP
00000d8a: JUMPDEST
00000d8b: POP
00000d8c: DUP2
00000d8d: SLOAD
00000d8e: PUSH17 0x0100000000000000000000000000000000
00000da0: SWAP1
00000da1: DIV
00000da2: PUSH16 0xffffffffffffffffffffffffffffffff
00000db3: AND
00000db4: PUSH1 0x14
00000db6: DUP2
00000db7: DUP6
00000db8: SUB
00000db9: GT
00000dba: ISZERO
00000dbb: PUSH2 0x0dcd
00000dbe: JUMPI
00000dbf: PUSH2 0x0dca
00000dc2: DUP6
00000dc3: DUP4
00000dc4: DUP4
00000dc5: DUP8
00000dc6: PUSH2 0x1eb4
00000dc9: JUMP
00000dca: JUMPDEST
00000dcb: SWAP1
00000dcc: POP
00000dcd: JUMPDEST
00000dce: DUP1
00000dcf: PUSH1 0x00
00000dd1: SUB
00000dd2: PUSH2 0x0dd9
00000dd5: JUMPI
00000dd6: POP
00000dd7: PUSH1 0x01
00000dd9: JUMPDEST
00000dda: PUSH1 0x40
00000ddc: MLOAD
00000ddd: PUSH32 0x28d09d4700000000000000000000000000000000000000000000000000000000
00000dfe: DUP2
00000dff: MSTORE
00000e00: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e15: DUP7
00000e16: DUP2
00000e17: AND
00000e18: PUSH1 0x04
00000e1a: DUP4
00000e1b: ADD
00000e1c: MSTORE
00000e1d: PUSH1 0x24
00000e1f: DUP3
00000e20: ADD
00000e21: DUP4
00000e22: SWAP1
00000e23: MSTORE
00000e24: PUSH1 0x00
00000e26: SWAP2
00000e27: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
00000e48: SWAP1
00000e49: SWAP2
00000e4a: AND
00000e4b: SWAP1
00000e4c: PUSH4 0x28d09d47
00000e51: SWAP1
00000e52: PUSH1 0x44
00000e54: ADD
00000e55: PUSH1 0x80
00000e57: PUSH1 0x40
00000e59: MLOAD
00000e5a: DUP1
00000e5b: DUP4
00000e5c: SUB
00000e5d: DUP2
00000e5e: DUP7
00000e5f: GAS
00000e60: STATICCALL
00000e61: ISZERO
00000e62: DUP1
00000e63: ISZERO
00000e64: PUSH2 0x0e71
00000e67: JUMPI
00000e68: RETURNDATASIZE
00000e69: PUSH1 0x00
00000e6b: DUP1
00000e6c: RETURNDATACOPY
00000e6d: RETURNDATASIZE
00000e6e: PUSH1 0x00
00000e70: REVERT
00000e71: JUMPDEST
00000e72: POP
00000e73: POP
00000e74: POP
00000e75: POP
00000e76: PUSH1 0x40
00000e78: MLOAD
00000e79: RETURNDATASIZE
00000e7a: PUSH1 0x1f
00000e7c: NOT
00000e7d: PUSH1 0x1f
00000e7f: DUP3
00000e80: ADD
00000e81: AND
00000e82: DUP3
00000e83: ADD
00000e84: DUP1
00000e85: PUSH1 0x40
00000e87: MSTORE
00000e88: POP
00000e89: DUP2
00000e8a: ADD
00000e8b: SWAP1
00000e8c: PUSH2 0x0e95
00000e8f: SWAP2
00000e90: SWAP1
00000e91: PUSH2 0x28ed
00000e94: JUMP
00000e95: JUMPDEST
00000e96: SWAP1
00000e97: POP
00000e98: DUP3
00000e99: PUSH1 0x00
00000e9b: SUB
00000e9c: PUSH2 0x0fb8
00000e9f: JUMPI
00000ea0: PUSH32 0x0000000000000000000000000000000000000000000000000000000063dafd00
00000ec1: TIMESTAMP
00000ec2: GT
00000ec3: PUSH2 0x0f4d
00000ec6: JUMPI
00000ec7: PUSH1 0x40
00000ec9: MLOAD
00000eca: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000eeb: DUP2
00000eec: MSTORE
00000eed: PUSH1 0x20
00000eef: PUSH1 0x04
00000ef1: DUP3
00000ef2: ADD
00000ef3: MSTORE
00000ef4: PUSH1 0x24
00000ef6: DUP1
00000ef7: DUP3
00000ef8: ADD
00000ef9: MSTORE
00000efa: PUSH32 0x46656520646973747269627574696f6e20686173206e6f742073746172746564
00000f1b: PUSH1 0x44
00000f1d: DUP3
00000f1e: ADD
00000f1f: MSTORE
00000f20: PUSH32 0x2079657400000000000000000000000000000000000000000000000000000000
00000f41: PUSH1 0x64
00000f43: DUP3
00000f44: ADD
00000f45: MSTORE
00000f46: PUSH1 0x84
00000f48: ADD
00000f49: PUSH2 0x0544
00000f4c: JUMP
00000f4d: JUMPDEST
00000f4e: PUSH2 0x0f83
00000f51: PUSH32 0x0000000000000000000000000000000000000000000000000000000063dafd00
00000f72: PUSH2 0x0f7e
00000f75: DUP4
00000f76: PUSH1 0x40
00000f78: ADD
00000f79: MLOAD
00000f7a: PUSH2 0x1fbd
00000f7d: JUMP
00000f7e: JUMPDEST
00000f7f: PUSH2 0x1fd2
00000f82: JUMP
00000f83: JUMPDEST
00000f84: DUP5
00000f85: SLOAD
00000f86: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
00000fa7: AND
00000fa8: PUSH8 0xffffffffffffffff
00000fb1: DUP3
00000fb2: AND
00000fb3: OR
00000fb4: DUP6
00000fb5: SSTORE
00000fb6: SWAP3
00000fb7: POP
00000fb8: JUMPDEST
00000fb9: PUSH1 0x40
00000fbb: DUP1
00000fbc: MLOAD
00000fbd: PUSH1 0x80
00000fbf: DUP2
00000fc0: ADD
00000fc1: DUP3
00000fc2: MSTORE
00000fc3: PUSH1 0x00
00000fc5: DUP1
00000fc6: DUP3
00000fc7: MSTORE
00000fc8: PUSH1 0x20
00000fca: DUP3
00000fcb: ADD
00000fcc: DUP2
00000fcd: SWAP1
00000fce: MSTORE
00000fcf: SWAP2
00000fd0: DUP2
00000fd1: ADD
00000fd2: DUP3
00000fd3: SWAP1
00000fd4: MSTORE
00000fd5: PUSH1 0x60
00000fd7: DUP2
00000fd8: ADD
00000fd9: DUP3
00000fda: SWAP1
00000fdb: MSTORE
00000fdc: SWAP1
00000fdd: JUMPDEST
00000fde: PUSH1 0x32
00000fe0: DUP2
00000fe1: LT
00000fe2: ISZERO
00000fe3: PUSH2 0x11c4
00000fe6: JUMPI
00000fe7: DUP3
00000fe8: PUSH1 0x40
00000fea: ADD
00000feb: MLOAD
00000fec: DUP6
00000fed: LT
00000fee: ISZERO
00000fef: DUP1
00000ff0: ISZERO
00000ff1: PUSH2 0x0ffa
00000ff4: JUMPI
00000ff5: POP
00000ff6: DUP7
00000ff7: DUP5
00000ff8: GT
00000ff9: ISZERO
00000ffa: JUMPDEST
00000ffb: ISZERO
00000ffc: PUSH2 0x1100
00000fff: JUMPI
00001000: PUSH1 0x01
00001002: DUP5
00001003: ADD
00001004: SWAP4
00001005: POP
00001006: DUP3
00001007: SWAP2
00001008: POP
00001009: DUP7
0000100a: DUP5
0000100b: GT
0000100c: ISZERO
0000100d: PUSH2 0x1042
00001010: JUMPI
00001011: PUSH1 0x40
00001013: MLOAD
00001014: DUP1
00001015: PUSH1 0x80
00001017: ADD
00001018: PUSH1 0x40
0000101a: MSTORE
0000101b: DUP1
0000101c: PUSH1 0x00
0000101e: PUSH1 0x0f
00001020: SIGNEXTEND
00001021: DUP2
00001022: MSTORE
00001023: PUSH1 0x20
00001025: ADD
00001026: PUSH1 0x00
00001028: PUSH1 0x0f
0000102a: SIGNEXTEND
0000102b: DUP2
0000102c: MSTORE
0000102d: PUSH1 0x20
0000102f: ADD
00001030: PUSH1 0x00
00001032: DUP2
00001033: MSTORE
00001034: PUSH1 0x20
00001036: ADD
00001037: PUSH1 0x00
00001039: DUP2
0000103a: MSTORE
0000103b: POP
0000103c: SWAP3
0000103d: POP
0000103e: PUSH2 0x11bc
00001041: JUMP
00001042: JUMPDEST
00001043: PUSH1 0x40
00001045: MLOAD
00001046: PUSH32 0x28d09d4700000000000000000000000000000000000000000000000000000000
00001067: DUP2
00001068: MSTORE
00001069: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000107e: DUP10
0000107f: DUP2
00001080: AND
00001081: PUSH1 0x04
00001083: DUP4
00001084: ADD
00001085: MSTORE
00001086: PUSH1 0x24
00001088: DUP3
00001089: ADD
0000108a: DUP7
0000108b: SWAP1
0000108c: MSTORE
0000108d: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
000010ae: AND
000010af: SWAP1
000010b0: PUSH4 0x28d09d47
000010b5: SWAP1
000010b6: PUSH1 0x44
000010b8: ADD
000010b9: PUSH1 0x80
000010bb: PUSH1 0x40
000010bd: MLOAD
000010be: DUP1
000010bf: DUP4
000010c0: SUB
000010c1: DUP2
000010c2: DUP7
000010c3: GAS
000010c4: STATICCALL
000010c5: ISZERO
000010c6: DUP1
000010c7: ISZERO
000010c8: PUSH2 0x10d5
000010cb: JUMPI
000010cc: RETURNDATASIZE
000010cd: PUSH1 0x00
000010cf: DUP1
000010d0: RETURNDATACOPY
000010d1: RETURNDATASIZE
000010d2: PUSH1 0x00
000010d4: REVERT
000010d5: JUMPDEST
000010d6: POP
000010d7: POP
000010d8: POP
000010d9: POP
000010da: PUSH1 0x40
000010dc: MLOAD
000010dd: RETURNDATASIZE
000010de: PUSH1 0x1f
000010e0: NOT
000010e1: PUSH1 0x1f
000010e3: DUP3
000010e4: ADD
000010e5: AND
000010e6: DUP3
000010e7: ADD
000010e8: DUP1
000010e9: PUSH1 0x40
000010eb: MSTORE
000010ec: POP
000010ed: DUP2
000010ee: ADD
000010ef: SWAP1
000010f0: PUSH2 0x10f9
000010f3: SWAP2
000010f4: SWAP1
000010f5: PUSH2 0x28ed
000010f8: JUMP
000010f9: JUMPDEST
000010fa: SWAP3
000010fb: POP
000010fc: PUSH2 0x11bc
000010ff: JUMP
00001100: JUMPDEST
00001101: TIMESTAMP
00001102: DUP6
00001103: LT
00001104: ISZERO
00001105: PUSH2 0x11c4
00001108: JUMPI
00001109: PUSH1 0x00
0000110b: PUSH2 0x1121
0000110e: PUSH2 0x111c
00001111: DUP5
00001112: PUSH1 0x40
00001114: ADD
00001115: MLOAD
00001116: DUP9
00001117: SUB
00001118: PUSH2 0x1fe8
0000111b: JUMP
0000111c: JUMPDEST
0000111d: PUSH2 0x209e
00001120: JUMP
00001121: JUMPDEST
00001122: SWAP1
00001123: POP
00001124: PUSH1 0x00
00001126: DUP2
00001127: DUP5
00001128: PUSH1 0x20
0000112a: ADD
0000112b: MLOAD
0000112c: MUL
0000112d: PUSH1 0x0f
0000112f: SIGNEXTEND
00001130: DUP5
00001131: PUSH1 0x00
00001133: ADD
00001134: MLOAD
00001135: PUSH1 0x0f
00001137: SIGNEXTEND
00001138: SGT
00001139: PUSH2 0x1143
0000113c: JUMPI
0000113d: PUSH1 0x00
0000113f: PUSH2 0x115b
00001142: JUMP
00001143: JUMPDEST
00001144: PUSH2 0x115b
00001147: DUP3
00001148: DUP6
00001149: PUSH1 0x20
0000114b: ADD
0000114c: MLOAD
0000114d: MUL
0000114e: DUP6
0000114f: PUSH1 0x00
00001151: ADD
00001152: MLOAD
00001153: SUB
00001154: PUSH1 0x0f
00001156: SIGNEXTEND
00001157: PUSH2 0x2137
0000115a: JUMP
0000115b: JUMPDEST
0000115c: SWAP1
0000115d: POP
0000115e: DUP1
0000115f: ISZERO
00001160: DUP1
00001161: ISZERO
00001162: PUSH2 0x116a
00001165: JUMPI
00001166: POP
00001167: DUP9
00001168: DUP7
00001169: GT
0000116a: JUMPDEST
0000116b: ISZERO
0000116c: PUSH2 0x1181
0000116f: JUMPI
00001170: PUSH2 0x1178
00001173: TIMESTAMP
00001174: PUSH2 0x1fbd
00001177: JUMP
00001178: JUMPDEST
00001179: SWAP7
0000117a: POP
0000117b: POP
0000117c: POP
0000117d: PUSH2 0x11c4
00001180: JUMP
00001181: JUMPDEST
00001182: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001197: DUP11
00001198: AND
00001199: PUSH1 0x00
0000119b: SWAP1
0000119c: DUP2
0000119d: MSTORE
0000119e: PUSH1 0x08
000011a0: PUSH1 0x20
000011a2: SWAP1
000011a3: DUP2
000011a4: MSTORE
000011a5: PUSH1 0x40
000011a7: DUP1
000011a8: DUP4
000011a9: KECCAK256
000011aa: DUP11
000011ab: DUP5
000011ac: MSTORE
000011ad: SWAP1
000011ae: SWAP2
000011af: MSTORE
000011b0: SWAP1
000011b1: KECCAK256
000011b2: SSTORE
000011b3: POP
000011b4: PUSH3 0x093a80
000011b8: SWAP1
000011b9: SWAP5
000011ba: ADD
000011bb: SWAP4
000011bc: JUMPDEST
000011bd: PUSH1 0x01
000011bf: ADD
000011c0: PUSH2 0x0fdd
000011c3: JUMP
000011c4: JUMPDEST
000011c5: POP
000011c6: POP
000011c7: DUP4
000011c8: SLOAD
000011c9: PUSH8 0xffffffffffffffff
000011d2: SWAP4
000011d3: DUP5
000011d4: AND
000011d5: PUSH9 0x010000000000000000
000011df: MUL
000011e0: PUSH32 0xffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff
00001201: PUSH17 0x0100000000000000000000000000000000
00001213: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001234: SWAP1
00001235: SWAP6
00001236: ADD
00001237: DUP7
00001238: AND
00001239: SWAP5
0000123a: SWAP1
0000123b: SWAP5
0000123c: MUL
0000123d: SWAP4
0000123e: SWAP1
0000123f: SWAP4
00001240: AND
00001241: SWAP4
00001242: AND
00001243: SWAP3
00001244: SWAP1
00001245: SWAP3
00001246: OR
00001247: OR
00001248: SWAP1
00001249: SWAP2
0000124a: SSTORE
0000124b: POP
0000124c: POP
0000124d: POP
0000124e: JUMP
0000124f: JUMPDEST
00001250: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001265: DUP3
00001266: AND
00001267: PUSH1 0x00
00001269: SWAP1
0000126a: DUP2
0000126b: MSTORE
0000126c: PUSH1 0x05
0000126e: PUSH1 0x20
00001270: MSTORE
00001271: PUSH1 0x40
00001273: DUP2
00001274: KECCAK256
00001275: DUP1
00001276: SLOAD
00001277: SWAP1
00001278: SWAP2
00001279: PUSH9 0x010000000000000000
00001283: SWAP1
00001284: SWAP2
00001285: DIV
00001286: PUSH8 0xffffffffffffffff
0000128f: AND
00001290: SWAP1
00001291: DUP2
00001292: DUP2
00001293: SUB
00001294: PUSH2 0x1389
00001297: JUMPI
00001298: TIMESTAMP
00001299: SWAP2
0000129a: POP
0000129b: PUSH3 0x093a80
0000129f: DUP1
000012a0: DUP4
000012a1: DIV
000012a2: MUL
000012a3: DUP4
000012a4: SLOAD
000012a5: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
000012c6: AND
000012c7: PUSH8 0xffffffffffffffff
000012d0: SWAP2
000012d1: SWAP1
000012d2: SWAP2
000012d3: AND
000012d4: OR
000012d5: DUP4
000012d6: SSTORE
000012d7: PUSH32 0x0000000000000000000000000000000000000000000000000000000063dafd00
000012f8: TIMESTAMP
000012f9: GT
000012fa: PUSH2 0x1384
000012fd: JUMPI
000012fe: PUSH1 0x40
00001300: MLOAD
00001301: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001322: DUP2
00001323: MSTORE
00001324: PUSH1 0x20
00001326: PUSH1 0x04
00001328: DUP3
00001329: ADD
0000132a: MSTORE
0000132b: PUSH1 0x24
0000132d: DUP1
0000132e: DUP3
0000132f: ADD
00001330: MSTORE
00001331: PUSH32 0x46656520646973747269627574696f6e20686173206e6f742073746172746564
00001352: PUSH1 0x44
00001354: DUP3
00001355: ADD
00001356: MSTORE
00001357: PUSH32 0x2079657400000000000000000000000000000000000000000000000000000000
00001378: PUSH1 0x64
0000137a: DUP3
0000137b: ADD
0000137c: MSTORE
0000137d: PUSH1 0x84
0000137f: ADD
00001380: PUSH2 0x0544
00001383: JUMP
00001384: JUMPDEST
00001385: PUSH2 0x13d9
00001388: JUMP
00001389: JUMPDEST
0000138a: DUP2
0000138b: TIMESTAMP
0000138c: SUB
0000138d: SWAP1
0000138e: POP
0000138f: DUP4
00001390: PUSH2 0x13d9
00001393: JUMPI
00001394: PUSH1 0x00
00001396: PUSH3 0x093a80
0000139a: DUP1
0000139b: DUP5
0000139c: DIV
0000139d: MUL
0000139e: PUSH3 0x093a80
000013a2: TIMESTAMP
000013a3: DUP2
000013a4: SWAP1
000013a5: DIV
000013a6: MUL
000013a7: EQ
000013a8: SWAP1
000013a9: POP
000013aa: PUSH1 0x00
000013ac: PUSH3 0x015180
000013b0: TIMESTAMP
000013b1: PUSH2 0x13b9
000013b4: TIMESTAMP
000013b5: PUSH2 0x1fbd
000013b8: JUMP
000013b9: JUMPDEST
000013ba: SUB
000013bb: LT
000013bc: SWAP1
000013bd: POP
000013be: DUP2
000013bf: DUP1
000013c0: ISZERO
000013c1: PUSH2 0x13c8
000013c4: JUMPI
000013c5: POP
000013c6: DUP1
000013c7: ISZERO
000013c8: JUMPDEST
000013c9: ISZERO
000013ca: PUSH2 0x13d6
000013cd: JUMPI
000013ce: POP
000013cf: POP
000013d0: POP
000013d1: POP
000013d2: POP
000013d3: POP
000013d4: POP
000013d5: JUMP
000013d6: JUMPDEST
000013d7: POP
000013d8: POP
000013d9: JUMPDEST
000013da: DUP3
000013db: SLOAD
000013dc: PUSH32 0xffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff
000013fd: AND
000013fe: PUSH9 0x010000000000000000
00001408: TIMESTAMP
00001409: PUSH8 0xffffffffffffffff
00001412: AND
00001413: MUL
00001414: OR
00001415: DUP4
00001416: SSTORE
00001417: PUSH1 0x40
00001419: MLOAD
0000141a: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
0000143b: DUP2
0000143c: MSTORE
0000143d: ADDRESS
0000143e: PUSH1 0x04
00001440: DUP3
00001441: ADD
00001442: MSTORE
00001443: PUSH1 0x00
00001445: SWAP1
00001446: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000145b: DUP8
0000145c: AND
0000145d: SWAP1
0000145e: PUSH4 0x70a08231
00001463: SWAP1
00001464: PUSH1 0x24
00001466: ADD
00001467: PUSH1 0x20
00001469: PUSH1 0x40
0000146b: MLOAD
0000146c: DUP1
0000146d: DUP4
0000146e: SUB
0000146f: DUP2
00001470: DUP7
00001471: GAS
00001472: STATICCALL
00001473: ISZERO
00001474: DUP1
00001475: ISZERO
00001476: PUSH2 0x1483
00001479: JUMPI
0000147a: RETURNDATASIZE
0000147b: PUSH1 0x00
0000147d: DUP1
0000147e: RETURNDATACOPY
0000147f: RETURNDATASIZE
00001480: PUSH1 0x00
00001482: REVERT
00001483: JUMPDEST
00001484: POP
00001485: POP
00001486: POP
00001487: POP
00001488: PUSH1 0x40
0000148a: MLOAD
0000148b: RETURNDATASIZE
0000148c: PUSH1 0x1f
0000148e: NOT
0000148f: PUSH1 0x1f
00001491: DUP3
00001492: ADD
00001493: AND
00001494: DUP3
00001495: ADD
00001496: DUP1
00001497: PUSH1 0x40
00001499: MSTORE
0000149a: POP
0000149b: DUP2
0000149c: ADD
0000149d: SWAP1
0000149e: PUSH2 0x14a7
000014a1: SWAP2
000014a2: SWAP1
000014a3: PUSH2 0x28c2
000014a6: JUMP
000014a7: JUMPDEST
000014a8: DUP5
000014a9: SLOAD
000014aa: SWAP1
000014ab: SWAP2
000014ac: POP
000014ad: PUSH1 0x00
000014af: SWAP1
000014b0: PUSH2 0x14df
000014b3: SWAP1
000014b4: PUSH17 0x0100000000000000000000000000000000
000014c6: SWAP1
000014c7: DIV
000014c8: PUSH16 0xffffffffffffffffffffffffffffffff
000014d9: AND
000014da: DUP4
000014db: PUSH2 0x298e
000014de: JUMP
000014df: JUMPDEST
000014e0: SWAP1
000014e1: POP
000014e2: DUP1
000014e3: PUSH1 0x00
000014e5: SUB
000014e6: PUSH2 0x14f2
000014e9: JUMPI
000014ea: POP
000014eb: POP
000014ec: POP
000014ed: POP
000014ee: POP
000014ef: POP
000014f0: POP
000014f1: JUMP
000014f2: JUMPDEST
000014f3: PUSH16 0xffffffffffffffffffffffffffffffff
00001504: DUP3
00001505: GT
00001506: ISZERO
00001507: PUSH2 0x156c
0000150a: JUMPI
0000150b: PUSH1 0x40
0000150d: MLOAD
0000150e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000152f: DUP2
00001530: MSTORE
00001531: PUSH1 0x20
00001533: PUSH1 0x04
00001535: DUP3
00001536: ADD
00001537: MSTORE
00001538: PUSH1 0x1e
0000153a: PUSH1 0x24
0000153c: DUP3
0000153d: ADD
0000153e: MSTORE
0000153f: PUSH32 0x4d6178696d756d20746f6b656e2062616c616e63652065786365656465640000
00001560: PUSH1 0x44
00001562: DUP3
00001563: ADD
00001564: MSTORE
00001565: PUSH1 0x64
00001567: ADD
00001568: PUSH2 0x0544
0000156b: JUMP
0000156c: JUMPDEST
0000156d: DUP5
0000156e: SLOAD
0000156f: PUSH16 0xffffffffffffffffffffffffffffffff
00001580: DUP1
00001581: DUP5
00001582: AND
00001583: PUSH17 0x0100000000000000000000000000000000
00001595: MUL
00001596: SWAP2
00001597: AND
00001598: OR
00001599: DUP6
0000159a: SSTORE
0000159b: PUSH1 0x00
0000159d: PUSH2 0x15ac
000015a0: DUP6
000015a1: PUSH3 0x093a80
000015a5: SWAP1
000015a6: DUP2
000015a7: SWAP1
000015a8: DIV
000015a9: MUL
000015aa: SWAP1
000015ab: JUMP
000015ac: JUMPDEST
000015ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015c2: DUP10
000015c3: AND
000015c4: PUSH1 0x00
000015c6: SWAP1
000015c7: DUP2
000015c8: MSTORE
000015c9: PUSH1 0x06
000015cb: PUSH1 0x20
000015cd: MSTORE
000015ce: PUSH1 0x40
000015d0: DUP2
000015d1: KECCAK256
000015d2: SWAP2
000015d3: SWAP3
000015d4: POP
000015d5: SWAP1
000015d6: DUP2
000015d7: JUMPDEST
000015d8: PUSH1 0x14
000015da: DUP2
000015db: LT
000015dc: ISZERO
000015dd: PUSH2 0x16b4
000015e0: JUMPI
000015e1: DUP4
000015e2: PUSH3 0x093a80
000015e6: ADD
000015e7: SWAP3
000015e8: POP
000015e9: DUP3
000015ea: TIMESTAMP
000015eb: LT
000015ec: ISZERO
000015ed: PUSH2 0x164c
000015f0: JUMPI
000015f1: DUP7
000015f2: ISZERO
000015f3: DUP1
000015f4: ISZERO
000015f5: PUSH2 0x15fd
000015f8: JUMPI
000015f9: POP
000015fa: DUP8
000015fb: TIMESTAMP
000015fc: EQ
000015fd: JUMPDEST
000015fe: ISZERO
000015ff: PUSH2 0x161b
00001602: JUMPI
00001603: PUSH1 0x00
00001605: DUP5
00001606: DUP2
00001607: MSTORE
00001608: PUSH1 0x20
0000160a: DUP4
0000160b: SWAP1
0000160c: MSTORE
0000160d: PUSH1 0x40
0000160f: SWAP1
00001610: KECCAK256
00001611: DUP1
00001612: SLOAD
00001613: DUP7
00001614: ADD
00001615: SWAP1
00001616: SSTORE
00001617: PUSH2 0x16b4
0000161a: JUMP
0000161b: JUMPDEST
0000161c: DUP7
0000161d: DUP9
0000161e: TIMESTAMP
0000161f: SUB
00001620: DUP7
00001621: MUL
00001622: DUP2
00001623: PUSH2 0x162e
00001626: JUMPI
00001627: PUSH2 0x162e
0000162a: PUSH2 0x29a1
0000162d: JUMP
0000162e: JUMPDEST
0000162f: PUSH1 0x00
00001631: DUP7
00001632: DUP2
00001633: MSTORE
00001634: PUSH1 0x20
00001636: DUP6
00001637: SWAP1
00001638: MSTORE
00001639: PUSH1 0x40
0000163b: SWAP1
0000163c: KECCAK256
0000163d: DUP1
0000163e: SLOAD
0000163f: SWAP3
00001640: SWAP1
00001641: SWAP2
00001642: DIV
00001643: SWAP1
00001644: SWAP2
00001645: ADD
00001646: SWAP1
00001647: SSTORE
00001648: PUSH2 0x16b4
0000164b: JUMP
0000164c: JUMPDEST
0000164d: DUP7
0000164e: ISZERO
0000164f: DUP1
00001650: ISZERO
00001651: PUSH2 0x1659
00001654: JUMPI
00001655: POP
00001656: DUP8
00001657: DUP4
00001658: EQ
00001659: JUMPDEST
0000165a: ISZERO
0000165b: PUSH2 0x1677
0000165e: JUMPI
0000165f: PUSH1 0x00
00001661: DUP5
00001662: DUP2
00001663: MSTORE
00001664: PUSH1 0x20
00001666: DUP4
00001667: SWAP1
00001668: MSTORE
00001669: PUSH1 0x40
0000166b: SWAP1
0000166c: KECCAK256
0000166d: DUP1
0000166e: SLOAD
0000166f: DUP7
00001670: ADD
00001671: SWAP1
00001672: SSTORE
00001673: PUSH2 0x16a4
00001676: JUMP
00001677: JUMPDEST
00001678: DUP7
00001679: DUP9
0000167a: DUP5
0000167b: SUB
0000167c: DUP7
0000167d: MUL
0000167e: DUP2
0000167f: PUSH2 0x168a
00001682: JUMPI
00001683: PUSH2 0x168a
00001686: PUSH2 0x29a1
00001689: JUMP
0000168a: JUMPDEST
0000168b: PUSH1 0x00
0000168d: DUP7
0000168e: DUP2
0000168f: MSTORE
00001690: PUSH1 0x20
00001692: DUP6
00001693: SWAP1
00001694: MSTORE
00001695: PUSH1 0x40
00001697: SWAP1
00001698: KECCAK256
00001699: DUP1
0000169a: SLOAD
0000169b: SWAP3
0000169c: SWAP1
0000169d: SWAP2
0000169e: DIV
0000169f: SWAP1
000016a0: SWAP2
000016a1: ADD
000016a2: SWAP1
000016a3: SSTORE
000016a4: JUMPDEST
000016a5: SWAP2
000016a6: SWAP7
000016a7: POP
000016a8: DUP7
000016a9: SWAP3
000016aa: POP
000016ab: DUP3
000016ac: SWAP2
000016ad: PUSH1 0x01
000016af: ADD
000016b0: PUSH2 0x15d7
000016b3: JUMP
000016b4: JUMPDEST
000016b5: POP
000016b6: PUSH1 0x40
000016b8: DUP1
000016b9: MLOAD
000016ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016cf: DUP13
000016d0: AND
000016d1: DUP2
000016d2: MSTORE
000016d3: PUSH1 0x20
000016d5: DUP2
000016d6: ADD
000016d7: DUP7
000016d8: SWAP1
000016d9: MSTORE
000016da: SWAP1
000016db: DUP2
000016dc: ADD
000016dd: DUP9
000016de: SWAP1
000016df: MSTORE
000016e0: PUSH32 0x9b7f1a85a4c9b4e59e1b6527d9969c50cdfb3a1a467d0c4a51fb0ed8bf07f130
00001701: SWAP1
00001702: PUSH1 0x60
00001704: ADD
00001705: PUSH1 0x40
00001707: MLOAD
00001708: DUP1
00001709: SWAP2
0000170a: SUB
0000170b: SWAP1
0000170c: LOG1
0000170d: POP
0000170e: POP
0000170f: POP
00001710: POP
00001711: POP
00001712: POP
00001713: POP
00001714: POP
00001715: POP
00001716: POP
00001717: JUMP
00001718: JUMPDEST
00001719: PUSH1 0x00
0000171b: PUSH1 0x40
0000171d: MLOAD
0000171e: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
0000173f: DUP2
00001740: MSTORE
00001741: DUP5
00001742: PUSH1 0x04
00001744: DUP3
00001745: ADD
00001746: MSTORE
00001747: DUP4
00001748: PUSH1 0x24
0000174a: DUP3
0000174b: ADD
0000174c: MSTORE
0000174d: DUP3
0000174e: PUSH1 0x44
00001750: DUP3
00001751: ADD
00001752: MSTORE
00001753: PUSH1 0x20
00001755: PUSH1 0x00
00001757: PUSH1 0x64
00001759: DUP4
0000175a: PUSH1 0x00
0000175c: DUP11
0000175d: GAS
0000175e: CALL
0000175f: RETURNDATASIZE
00001760: ISZERO
00001761: PUSH1 0x1f
00001763: RETURNDATASIZE
00001764: GT
00001765: PUSH1 0x01
00001767: PUSH1 0x00
00001769: MLOAD
0000176a: EQ
0000176b: AND
0000176c: OR
0000176d: AND
0000176e: SWAP2
0000176f: POP
00001770: POP
00001771: DUP1
00001772: PUSH2 0x17d7
00001775: JUMPI
00001776: PUSH1 0x40
00001778: MLOAD
00001779: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000179a: DUP2
0000179b: MSTORE
0000179c: PUSH1 0x20
0000179e: PUSH1 0x04
000017a0: DUP3
000017a1: ADD
000017a2: MSTORE
000017a3: PUSH1 0x14
000017a5: PUSH1 0x24
000017a7: DUP3
000017a8: ADD
000017a9: MSTORE
000017aa: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000
000017cb: PUSH1 0x44
000017cd: DUP3
000017ce: ADD
000017cf: MSTORE
000017d0: PUSH1 0x64
000017d2: ADD
000017d3: PUSH2 0x0544
000017d6: JUMP
000017d7: JUMPDEST
000017d8: POP
000017d9: POP
000017da: POP
000017db: POP
000017dc: POP
000017dd: JUMP
000017de: JUMPDEST
000017df: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017f4: DUP1
000017f5: DUP4
000017f6: AND
000017f7: PUSH1 0x00
000017f9: SWAP1
000017fa: DUP2
000017fb: MSTORE
000017fc: PUSH1 0x09
000017fe: PUSH1 0x20
00001800: SWAP1
00001801: DUP2
00001802: MSTORE
00001803: PUSH1 0x40
00001805: DUP1
00001806: DUP4
00001807: KECCAK256
00001808: SWAP4
00001809: DUP6
0000180a: AND
0000180b: DUP4
0000180c: MSTORE
0000180d: SWAP3
0000180e: SWAP1
0000180f: MSTORE
00001810: SWAP1
00001811: DUP2
00001812: KECCAK256
00001813: SLOAD
00001814: DUP1
00001815: ISZERO
00001816: PUSH2 0x1820
00001819: JUMPI
0000181a: SWAP1
0000181b: POP
0000181c: PUSH2 0x082c
0000181f: JUMP
00001820: JUMPDEST
00001821: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001836: DUP1
00001837: DUP6
00001838: AND
00001839: PUSH1 0x00
0000183b: SWAP1
0000183c: DUP2
0000183d: MSTORE
0000183e: PUSH1 0x07
00001840: PUSH1 0x20
00001842: SWAP1
00001843: DUP2
00001844: MSTORE
00001845: PUSH1 0x40
00001847: DUP1
00001848: DUP4
00001849: KECCAK256
0000184a: SLOAD
0000184b: SWAP4
0000184c: DUP8
0000184d: AND
0000184e: DUP4
0000184f: MSTORE
00001850: PUSH1 0x05
00001852: SWAP1
00001853: SWAP2
00001854: MSTORE
00001855: SWAP1
00001856: KECCAK256
00001857: SLOAD
00001858: PUSH2 0x186e
0000185b: SWAP2
0000185c: PUSH8 0xffffffffffffffff
00001865: SWAP1
00001866: DUP2
00001867: AND
00001868: SWAP2
00001869: AND
0000186a: PUSH2 0x1fd2
0000186d: JUMP
0000186e: JUMPDEST
0000186f: SWAP5
00001870: SWAP4
00001871: POP
00001872: POP
00001873: POP
00001874: POP
00001875: JUMP
00001876: JUMPDEST
00001877: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000188c: DUP2
0000188d: AND
0000188e: PUSH1 0x00
00001890: SWAP1
00001891: DUP2
00001892: MSTORE
00001893: PUSH1 0x01
00001895: PUSH1 0x20
00001897: MSTORE
00001898: PUSH1 0x40
0000189a: SWAP1
0000189b: KECCAK256
0000189c: SLOAD
0000189d: PUSH1 0xff
0000189f: AND
000018a0: ISZERO
000018a1: PUSH2 0x0b6b
000018a4: JUMPI
000018a5: CALLER
000018a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000018bb: DUP3
000018bc: AND
000018bd: EQ
000018be: PUSH2 0x0b6b
000018c1: JUMPI
000018c2: PUSH1 0x40
000018c4: MLOAD
000018c5: PUSH32 0xf93014bb00000000000000000000000000000000000000000000000000000000
000018e6: DUP2
000018e7: MSTORE
000018e8: PUSH1 0x04
000018ea: ADD
000018eb: PUSH1 0x40
000018ed: MLOAD
000018ee: DUP1
000018ef: SWAP2
000018f0: SUB
000018f1: SWAP1
000018f2: REVERT
000018f3: JUMPDEST
000018f4: PUSH1 0x03
000018f6: SLOAD
000018f7: PUSH3 0x093a80
000018fb: TIMESTAMP
000018fc: DUP2
000018fd: SWAP1
000018fe: DIV
000018ff: MUL
00001900: DUP1
00001901: DUP3
00001902: GT
00001903: DUP1
00001904: PUSH2 0x190c
00001907: JUMPI
00001908: POP
00001909: TIMESTAMP
0000190a: DUP2
0000190b: EQ
0000190c: JUMPDEST
0000190d: ISZERO
0000190e: PUSH2 0x1915
00001911: JUMPI
00001912: POP
00001913: POP
00001914: JUMP
00001915: JUMPDEST
00001916: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
00001937: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000194c: AND
0000194d: PUSH4 0xc2c4c5c1
00001952: PUSH1 0x40
00001954: MLOAD
00001955: DUP2
00001956: PUSH4 0xffffffff
0000195b: AND
0000195c: PUSH1 0xe0
0000195e: SHL
0000195f: DUP2
00001960: MSTORE
00001961: PUSH1 0x04
00001963: ADD
00001964: PUSH1 0x00
00001966: PUSH1 0x40
00001968: MLOAD
00001969: DUP1
0000196a: DUP4
0000196b: SUB
0000196c: DUP2
0000196d: PUSH1 0x00
0000196f: DUP8
00001970: DUP1
00001971: EXTCODESIZE
00001972: ISZERO
00001973: DUP1
00001974: ISZERO
00001975: PUSH2 0x197d
00001978: JUMPI
00001979: PUSH1 0x00
0000197b: DUP1
0000197c: REVERT
0000197d: JUMPDEST
0000197e: POP
0000197f: GAS
00001980: CALL
00001981: ISZERO
00001982: DUP1
00001983: ISZERO
00001984: PUSH2 0x1991
00001987: JUMPI
00001988: RETURNDATASIZE
00001989: PUSH1 0x00
0000198b: DUP1
0000198c: RETURNDATACOPY
0000198d: RETURNDATASIZE
0000198e: PUSH1 0x00
00001990: REVERT
00001991: JUMPDEST
00001992: POP
00001993: POP
00001994: POP
00001995: POP
00001996: PUSH1 0x00
00001998: JUMPDEST
00001999: PUSH1 0x14
0000199b: DUP2
0000199c: LT
0000199d: ISZERO
0000199e: PUSH2 0x1a76
000019a1: JUMPI
000019a2: DUP2
000019a3: DUP4
000019a4: GT
000019a5: PUSH2 0x1a76
000019a8: JUMPI
000019a9: PUSH1 0x40
000019ab: MLOAD
000019ac: PUSH32 0xbd85b03900000000000000000000000000000000000000000000000000000000
000019cd: DUP2
000019ce: MSTORE
000019cf: PUSH1 0x04
000019d1: DUP2
000019d2: ADD
000019d3: DUP5
000019d4: SWAP1
000019d5: MSTORE
000019d6: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
000019f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a0c: AND
00001a0d: SWAP1
00001a0e: PUSH4 0xbd85b039
00001a13: SWAP1
00001a14: PUSH1 0x24
00001a16: ADD
00001a17: PUSH1 0x20
00001a19: PUSH1 0x40
00001a1b: MLOAD
00001a1c: DUP1
00001a1d: DUP4
00001a1e: SUB
00001a1f: DUP2
00001a20: DUP7
00001a21: GAS
00001a22: STATICCALL
00001a23: ISZERO
00001a24: DUP1
00001a25: ISZERO
00001a26: PUSH2 0x1a33
00001a29: JUMPI
00001a2a: RETURNDATASIZE
00001a2b: PUSH1 0x00
00001a2d: DUP1
00001a2e: RETURNDATACOPY
00001a2f: RETURNDATASIZE
00001a30: PUSH1 0x00
00001a32: REVERT
00001a33: JUMPDEST
00001a34: POP
00001a35: POP
00001a36: POP
00001a37: POP
00001a38: PUSH1 0x40
00001a3a: MLOAD
00001a3b: RETURNDATASIZE
00001a3c: PUSH1 0x1f
00001a3e: NOT
00001a3f: PUSH1 0x1f
00001a41: DUP3
00001a42: ADD
00001a43: AND
00001a44: DUP3
00001a45: ADD
00001a46: DUP1
00001a47: PUSH1 0x40
00001a49: MSTORE
00001a4a: POP
00001a4b: DUP2
00001a4c: ADD
00001a4d: SWAP1
00001a4e: PUSH2 0x1a57
00001a51: SWAP2
00001a52: SWAP1
00001a53: PUSH2 0x28c2
00001a56: JUMP
00001a57: JUMPDEST
00001a58: PUSH1 0x00
00001a5a: DUP5
00001a5b: DUP2
00001a5c: MSTORE
00001a5d: PUSH1 0x04
00001a5f: PUSH1 0x20
00001a61: MSTORE
00001a62: PUSH1 0x40
00001a64: SWAP1
00001a65: KECCAK256
00001a66: SSTORE
00001a67: PUSH3 0x093a80
00001a6b: SWAP1
00001a6c: SWAP3
00001a6d: ADD
00001a6e: SWAP2
00001a6f: PUSH1 0x01
00001a71: ADD
00001a72: PUSH2 0x1998
00001a75: JUMP
00001a76: JUMPDEST
00001a77: POP
00001a78: POP
00001a79: PUSH1 0x03
00001a7b: SSTORE
00001a7c: JUMP
00001a7d: JUMPDEST
00001a7e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a93: DUP2
00001a94: AND
00001a95: PUSH1 0x00
00001a97: SWAP1
00001a98: DUP2
00001a99: MSTORE
00001a9a: PUSH1 0x05
00001a9c: PUSH1 0x20
00001a9e: MSTORE
00001a9f: PUSH1 0x40
00001aa1: DUP2
00001aa2: KECCAK256
00001aa3: DUP2
00001aa4: PUSH2 0x1aad
00001aa7: DUP6
00001aa8: DUP6
00001aa9: PUSH2 0x17de
00001aac: JUMP
00001aad: JUMPDEST
00001aae: PUSH1 0x03
00001ab0: SLOAD
00001ab1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ac6: DUP8
00001ac7: AND
00001ac8: PUSH1 0x00
00001aca: SWAP1
00001acb: DUP2
00001acc: MSTORE
00001acd: PUSH1 0x07
00001acf: PUSH1 0x20
00001ad1: MSTORE
00001ad2: PUSH1 0x40
00001ad4: DUP2
00001ad5: KECCAK256
00001ad6: SLOAD
00001ad7: SWAP3
00001ad8: SWAP4
00001ad9: POP
00001ada: SWAP2
00001adb: PUSH2 0x1b34
00001ade: SWAP2
00001adf: PUSH2 0x1b07
00001ae2: SWAP2
00001ae3: PUSH2 0x1b02
00001ae6: SWAP2
00001ae7: SWAP1
00001ae8: PUSH9 0x010000000000000000
00001af2: SWAP1
00001af3: DIV
00001af4: PUSH8 0xffffffffffffffff
00001afd: AND
00001afe: PUSH2 0x21a3
00001b01: JUMP
00001b02: JUMPDEST
00001b03: PUSH2 0x1fbd
00001b06: JUMP
00001b07: JUMPDEST
00001b08: DUP5
00001b09: SLOAD
00001b0a: PUSH2 0x1b2f
00001b0d: SWAP1
00001b0e: PUSH9 0x010000000000000000
00001b18: SWAP1
00001b19: DIV
00001b1a: PUSH8 0xffffffffffffffff
00001b23: AND
00001b24: PUSH3 0x093a80
00001b28: SWAP1
00001b29: DUP2
00001b2a: SWAP1
00001b2b: DIV
00001b2c: MUL
00001b2d: SWAP1
00001b2e: JUMP
00001b2f: JUMPDEST
00001b30: PUSH2 0x21a3
00001b33: JUMP
00001b34: JUMPDEST
00001b35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b4a: DUP1
00001b4b: DUP8
00001b4c: AND
00001b4d: PUSH1 0x00
00001b4f: SWAP1
00001b50: DUP2
00001b51: MSTORE
00001b52: PUSH1 0x06
00001b54: PUSH1 0x20
00001b56: SWAP1
00001b57: DUP2
00001b58: MSTORE
00001b59: PUSH1 0x40
00001b5b: DUP1
00001b5c: DUP4
00001b5d: KECCAK256
00001b5e: SWAP4
00001b5f: DUP12
00001b60: AND
00001b61: DUP4
00001b62: MSTORE
00001b63: PUSH1 0x08
00001b65: SWAP1
00001b66: SWAP2
00001b67: MSTORE
00001b68: DUP2
00001b69: KECCAK256
00001b6a: SWAP3
00001b6b: SWAP4
00001b6c: POP
00001b6d: SWAP1
00001b6e: SWAP2
00001b6f: SWAP1
00001b70: DUP1
00001b71: JUMPDEST
00001b72: PUSH1 0x14
00001b74: DUP2
00001b75: LT
00001b76: ISZERO
00001b77: PUSH2 0x1bc7
00001b7a: JUMPI
00001b7b: DUP5
00001b7c: DUP7
00001b7d: LT
00001b7e: ISZERO
00001b7f: PUSH2 0x1bc7
00001b82: JUMPI
00001b83: PUSH1 0x00
00001b85: DUP7
00001b86: DUP2
00001b87: MSTORE
00001b88: PUSH1 0x04
00001b8a: PUSH1 0x20
00001b8c: SWAP1
00001b8d: DUP2
00001b8e: MSTORE
00001b8f: PUSH1 0x40
00001b91: DUP1
00001b92: DUP4
00001b93: KECCAK256
00001b94: SLOAD
00001b95: DUP7
00001b96: DUP4
00001b97: MSTORE
00001b98: DUP2
00001b99: DUP5
00001b9a: KECCAK256
00001b9b: SLOAD
00001b9c: SWAP3
00001b9d: DUP9
00001b9e: SWAP1
00001b9f: MSTORE
00001ba0: SWAP3
00001ba1: KECCAK256
00001ba2: SLOAD
00001ba3: MUL
00001ba4: DUP2
00001ba5: PUSH2 0x1bb0
00001ba8: JUMPI
00001ba9: PUSH2 0x1bb0
00001bac: PUSH2 0x29a1
00001baf: JUMP
00001bb0: JUMPDEST
00001bb1: PUSH3 0x093a80
00001bb5: SWAP8
00001bb6: SWAP1
00001bb7: SWAP8
00001bb8: ADD
00001bb9: SWAP7
00001bba: DIV
00001bbb: SWAP2
00001bbc: SWAP1
00001bbd: SWAP2
00001bbe: ADD
00001bbf: SWAP1
00001bc0: PUSH1 0x01
00001bc2: ADD
00001bc3: PUSH2 0x1b71
00001bc6: JUMP
00001bc7: JUMPDEST
00001bc8: POP
00001bc9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001bde: DUP1
00001bdf: DUP11
00001be0: AND
00001be1: PUSH1 0x00
00001be3: SWAP1
00001be4: DUP2
00001be5: MSTORE
00001be6: PUSH1 0x09
00001be8: PUSH1 0x20
00001bea: SWAP1
00001beb: DUP2
00001bec: MSTORE
00001bed: PUSH1 0x40
00001bef: DUP1
00001bf0: DUP4
00001bf1: KECCAK256
00001bf2: SWAP4
00001bf3: DUP13
00001bf4: AND
00001bf5: DUP4
00001bf6: MSTORE
00001bf7: SWAP3
00001bf8: SWAP1
00001bf9: MSTORE
00001bfa: KECCAK256
00001bfb: DUP6
00001bfc: SWAP1
00001bfd: SSTORE
00001bfe: DUP1
00001bff: ISZERO
00001c00: PUSH2 0x1cb9
00001c03: JUMPI
00001c04: DUP6
00001c05: SLOAD
00001c06: PUSH16 0xffffffffffffffffffffffffffffffff
00001c17: PUSH17 0x0100000000000000000000000000000000
00001c29: DUP1
00001c2a: DUP4
00001c2b: DIV
00001c2c: DUP3
00001c2d: AND
00001c2e: DUP5
00001c2f: SWAP1
00001c30: SUB
00001c31: DUP3
00001c32: AND
00001c33: MUL
00001c34: SWAP2
00001c35: AND
00001c36: OR
00001c37: DUP7
00001c38: SSTORE
00001c39: PUSH2 0x1c59
00001c3c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c51: DUP10
00001c52: AND
00001c53: DUP11
00001c54: DUP4
00001c55: PUSH2 0x21b2
00001c58: JUMP
00001c59: JUMPDEST
00001c5a: PUSH1 0x40
00001c5c: DUP1
00001c5d: MLOAD
00001c5e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c73: DUP1
00001c74: DUP13
00001c75: AND
00001c76: DUP3
00001c77: MSTORE
00001c78: DUP11
00001c79: AND
00001c7a: PUSH1 0x20
00001c7c: DUP3
00001c7d: ADD
00001c7e: MSTORE
00001c7f: SWAP1
00001c80: DUP2
00001c81: ADD
00001c82: DUP3
00001c83: SWAP1
00001c84: MSTORE
00001c85: PUSH1 0x60
00001c87: DUP2
00001c88: ADD
00001c89: DUP7
00001c8a: SWAP1
00001c8b: MSTORE
00001c8c: PUSH32 0xff097c7d8b1957a4ff09ef1361b5fb54dcede3941ba836d0beb9d10bec725de6
00001cad: SWAP1
00001cae: PUSH1 0x80
00001cb0: ADD
00001cb1: PUSH1 0x40
00001cb3: MLOAD
00001cb4: DUP1
00001cb5: SWAP2
00001cb6: SUB
00001cb7: SWAP1
00001cb8: LOG1
00001cb9: JUMPDEST
00001cba: SWAP9
00001cbb: SWAP8
00001cbc: POP
00001cbd: POP
00001cbe: POP
00001cbf: POP
00001cc0: POP
00001cc1: POP
00001cc2: POP
00001cc3: POP
00001cc4: JUMP
00001cc5: JUMPDEST
00001cc6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001cdb: DUP3
00001cdc: AND
00001cdd: PUSH1 0x00
00001cdf: DUP2
00001ce0: DUP2
00001ce1: MSTORE
00001ce2: PUSH1 0x01
00001ce4: PUSH1 0x20
00001ce6: SWAP1
00001ce7: DUP2
00001ce8: MSTORE
00001ce9: PUSH1 0x40
00001ceb: SWAP2
00001cec: DUP3
00001ced: SWAP1
00001cee: KECCAK256
00001cef: DUP1
00001cf0: SLOAD
00001cf1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00001d12: AND
00001d13: DUP6
00001d14: ISZERO
00001d15: ISZERO
00001d16: SWAP1
00001d17: DUP2
00001d18: OR
00001d19: SWAP1
00001d1a: SWAP2
00001d1b: SSTORE
00001d1c: DUP3
00001d1d: MLOAD
00001d1e: SWAP4
00001d1f: DUP5
00001d20: MSTORE
00001d21: SWAP1
00001d22: DUP4
00001d23: ADD
00001d24: MSTORE
00001d25: PUSH32 0xac9874a7a931a3f5c9f202c6d9cf40de5d21506993c9f9c38ca8265add89584c
00001d46: SWAP2
00001d47: ADD
00001d48: PUSH1 0x40
00001d4a: MLOAD
00001d4b: DUP1
00001d4c: SWAP2
00001d4d: SUB
00001d4e: SWAP1
00001d4f: LOG1
00001d50: POP
00001d51: POP
00001d52: JUMP
00001d53: JUMPDEST
00001d54: PUSH1 0x00
00001d56: ADDRESS
00001d57: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d6c: PUSH32 0x000000000000000000000000951f99350d816c0e160a2c71defe828bdfc17f12
00001d8d: AND
00001d8e: EQ
00001d8f: DUP1
00001d90: ISZERO
00001d91: PUSH2 0x1db9
00001d94: JUMPI
00001d95: POP
00001d96: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
00001db7: CHAINID
00001db8: EQ
00001db9: JUMPDEST
00001dba: ISZERO
00001dbb: PUSH2 0x1de3
00001dbe: JUMPI
00001dbf: POP
00001dc0: PUSH32 0x8bddfbe7a6a37f0262112d2cb0eefbcfe5248abd98001dd69e1c4bf08bffc3b2
00001de1: SWAP1
00001de2: JUMP
00001de3: JUMPDEST
00001de4: POP
00001de5: PUSH1 0x40
00001de7: DUP1
00001de8: MLOAD
00001de9: PUSH32 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
00001e0a: PUSH1 0x20
00001e0c: DUP1
00001e0d: DUP4
00001e0e: ADD
00001e0f: SWAP2
00001e10: SWAP1
00001e11: SWAP2
00001e12: MSTORE
00001e13: PUSH32 0x0618c188edbe06a8ffa15e11b4f74493cfd6f23aba7fab610364d908072aac99
00001e34: DUP3
00001e35: DUP5
00001e36: ADD
00001e37: MSTORE
00001e38: PUSH32 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6
00001e59: PUSH1 0x60
00001e5b: DUP4
00001e5c: ADD
00001e5d: MSTORE
00001e5e: CHAINID
00001e5f: PUSH1 0x80
00001e61: DUP4
00001e62: ADD
00001e63: MSTORE
00001e64: ADDRESS
00001e65: PUSH1 0xa0
00001e67: DUP1
00001e68: DUP5
00001e69: ADD
00001e6a: SWAP2
00001e6b: SWAP1
00001e6c: SWAP2
00001e6d: MSTORE
00001e6e: DUP4
00001e6f: MLOAD
00001e70: DUP1
00001e71: DUP5
00001e72: SUB
00001e73: SWAP1
00001e74: SWAP2
00001e75: ADD
00001e76: DUP2
00001e77: MSTORE
00001e78: PUSH1 0xc0
00001e7a: SWAP1
00001e7b: SWAP3
00001e7c: ADD
00001e7d: SWAP1
00001e7e: SWAP3
00001e7f: MSTORE
00001e80: DUP1
00001e81: MLOAD
00001e82: SWAP2
00001e83: ADD
00001e84: KECCAK256
00001e85: SWAP1
00001e86: JUMP
00001e87: JUMPDEST
00001e88: PUSH2 0x0c37
00001e8b: DUP5
00001e8c: DUP5
00001e8d: DUP5
00001e8e: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001eaf: DUP6
00001eb0: PUSH2 0x226b
00001eb3: JUMP
00001eb4: JUMPDEST
00001eb5: PUSH1 0x00
00001eb7: DUP3
00001eb8: DUP3
00001eb9: DUP3
00001eba: JUMPDEST
00001ebb: PUSH1 0x80
00001ebd: DUP2
00001ebe: LT
00001ebf: ISZERO
00001ec0: PUSH2 0x1fb1
00001ec3: JUMPI
00001ec4: DUP2
00001ec5: DUP4
00001ec6: LT
00001ec7: ISZERO
00001ec8: PUSH2 0x1fb1
00001ecb: JUMPI
00001ecc: PUSH1 0x40
00001ece: MLOAD
00001ecf: PUSH32 0x28d09d4700000000000000000000000000000000000000000000000000000000
00001ef0: DUP2
00001ef1: MSTORE
00001ef2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f07: DUP10
00001f08: DUP2
00001f09: AND
00001f0a: PUSH1 0x04
00001f0c: DUP4
00001f0d: ADD
00001f0e: MSTORE
00001f0f: PUSH1 0x02
00001f11: DUP5
00001f12: DUP7
00001f13: ADD
00001f14: DUP2
00001f15: ADD
00001f16: DIV
00001f17: PUSH1 0x24
00001f19: DUP4
00001f1a: ADD
00001f1b: DUP2
00001f1c: SWAP1
00001f1d: MSTORE
00001f1e: SWAP2
00001f1f: PUSH1 0x00
00001f21: SWAP2
00001f22: PUSH32 0x000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
00001f43: AND
00001f44: SWAP1
00001f45: PUSH4 0x28d09d47
00001f4a: SWAP1
00001f4b: PUSH1 0x44
00001f4d: ADD
00001f4e: PUSH1 0x80
00001f50: PUSH1 0x40
00001f52: MLOAD
00001f53: DUP1
00001f54: DUP4
00001f55: SUB
00001f56: DUP2
00001f57: DUP7
00001f58: GAS
00001f59: STATICCALL
00001f5a: ISZERO
00001f5b: DUP1
00001f5c: ISZERO
00001f5d: PUSH2 0x1f6a
00001f60: JUMPI
00001f61: RETURNDATASIZE
00001f62: PUSH1 0x00
00001f64: DUP1
00001f65: RETURNDATACOPY
00001f66: RETURNDATASIZE
00001f67: PUSH1 0x00
00001f69: REVERT
00001f6a: JUMPDEST
00001f6b: POP
00001f6c: POP
00001f6d: POP
00001f6e: POP
00001f6f: PUSH1 0x40
00001f71: MLOAD
00001f72: RETURNDATASIZE
00001f73: PUSH1 0x1f
00001f75: NOT
00001f76: PUSH1 0x1f
00001f78: DUP3
00001f79: ADD
00001f7a: AND
00001f7b: DUP3
00001f7c: ADD
00001f7d: DUP1
00001f7e: PUSH1 0x40
00001f80: MSTORE
00001f81: POP
00001f82: DUP2
00001f83: ADD
00001f84: SWAP1
00001f85: PUSH2 0x1f8e
00001f88: SWAP2
00001f89: SWAP1
00001f8a: PUSH2 0x28ed
00001f8d: JUMP
00001f8e: JUMPDEST
00001f8f: SWAP1
00001f90: POP
00001f91: DUP9
00001f92: DUP2
00001f93: PUSH1 0x40
00001f95: ADD
00001f96: MLOAD
00001f97: GT
00001f98: PUSH2 0x1fa3
00001f9b: JUMPI
00001f9c: DUP2
00001f9d: SWAP5
00001f9e: POP
00001f9f: PUSH2 0x1faa
00001fa2: JUMP
00001fa3: JUMPDEST
00001fa4: PUSH1 0x01
00001fa6: DUP3
00001fa7: SUB
00001fa8: SWAP4
00001fa9: POP
00001faa: JUMPDEST
00001fab: POP
00001fac: POP
00001fad: PUSH2 0x1eba
00001fb0: JUMP
00001fb1: JUMPDEST
00001fb2: POP
00001fb3: SWAP1
00001fb4: SWAP7
00001fb5: SWAP6
00001fb6: POP
00001fb7: POP
00001fb8: POP
00001fb9: POP
00001fba: POP
00001fbb: POP
00001fbc: JUMP
00001fbd: JUMPDEST
00001fbe: PUSH1 0x00
00001fc0: PUSH3 0x093a80
00001fc4: PUSH3 0x093a7f
00001fc8: DUP4
00001fc9: ADD
00001fca: DUP2
00001fcb: SWAP1
00001fcc: DIV
00001fcd: MUL
00001fce: PUSH2 0x082c
00001fd1: JUMP
00001fd2: JUMPDEST
00001fd3: PUSH1 0x00
00001fd5: DUP2
00001fd6: DUP4
00001fd7: GT
00001fd8: PUSH2 0x1fe1
00001fdb: JUMPI
00001fdc: DUP2
00001fdd: PUSH2 0x0829
00001fe0: JUMP
00001fe1: JUMPDEST
00001fe2: POP
00001fe3: SWAP1
00001fe4: SWAP2
00001fe5: SWAP1
00001fe6: POP
00001fe7: JUMP
00001fe8: JUMPDEST
00001fe9: PUSH1 0x00
00001feb: PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000200c: DUP3
0000200d: GT
0000200e: ISZERO
0000200f: PUSH2 0x209a
00002012: JUMPI
00002013: PUSH1 0x40
00002015: MLOAD
00002016: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002037: DUP2
00002038: MSTORE
00002039: PUSH1 0x20
0000203b: PUSH1 0x04
0000203d: DUP3
0000203e: ADD
0000203f: MSTORE
00002040: PUSH1 0x28
00002042: PUSH1 0x24
00002044: DUP3
00002045: ADD
00002046: MSTORE
00002047: PUSH32 0x53616665436173743a2076616c756520646f65736e27742066697420696e2061
00002068: PUSH1 0x44
0000206a: DUP3
0000206b: ADD
0000206c: MSTORE
0000206d: PUSH32 0x6e20696e74323536000000000000000000000000000000000000000000000000
0000208e: PUSH1 0x64
00002090: DUP3
00002091: ADD
00002092: MSTORE
00002093: PUSH1 0x84
00002095: ADD
00002096: PUSH2 0x0544
00002099: JUMP
0000209a: JUMPDEST
0000209b: POP
0000209c: SWAP1
0000209d: JUMP
0000209e: JUMPDEST
0000209f: DUP1
000020a0: PUSH1 0x0f
000020a2: DUP2
000020a3: SWAP1
000020a4: SIGNEXTEND
000020a5: DUP2
000020a6: EQ
000020a7: PUSH2 0x2132
000020aa: JUMPI
000020ab: PUSH1 0x40
000020ad: MLOAD
000020ae: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000020cf: DUP2
000020d0: MSTORE
000020d1: PUSH1 0x20
000020d3: PUSH1 0x04
000020d5: DUP3
000020d6: ADD
000020d7: MSTORE
000020d8: PUSH1 0x27
000020da: PUSH1 0x24
000020dc: DUP3
000020dd: ADD
000020de: MSTORE
000020df: PUSH32 0x53616665436173743a2076616c756520646f65736e27742066697420696e2031
00002100: PUSH1 0x44
00002102: DUP3
00002103: ADD
00002104: MSTORE
00002105: PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000
00002126: PUSH1 0x64
00002128: DUP3
00002129: ADD
0000212a: MSTORE
0000212b: PUSH1 0x84
0000212d: ADD
0000212e: PUSH2 0x0544
00002131: JUMP
00002132: JUMPDEST
00002133: SWAP2
00002134: SWAP1
00002135: POP
00002136: JUMP
00002137: JUMPDEST
00002138: PUSH1 0x00
0000213a: DUP1
0000213b: DUP3
0000213c: SLT
0000213d: ISZERO
0000213e: PUSH2 0x209a
00002141: JUMPI
00002142: PUSH1 0x40
00002144: MLOAD
00002145: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002166: DUP2
00002167: MSTORE
00002168: PUSH1 0x20
0000216a: PUSH1 0x04
0000216c: DUP3
0000216d: ADD
0000216e: DUP2
0000216f: SWAP1
00002170: MSTORE
00002171: PUSH1 0x24
00002173: DUP3
00002174: ADD
00002175: MSTORE
00002176: PUSH32 0x53616665436173743a2076616c7565206d75737420626520706f736974697665
00002197: PUSH1 0x44
00002199: DUP3
0000219a: ADD
0000219b: MSTORE
0000219c: PUSH1 0x64
0000219e: ADD
0000219f: PUSH2 0x0544
000021a2: JUMP
000021a3: JUMPDEST
000021a4: PUSH1 0x00
000021a6: DUP2
000021a7: DUP4
000021a8: LT
000021a9: PUSH2 0x1fe1
000021ac: JUMPI
000021ad: DUP2
000021ae: PUSH2 0x0829
000021b1: JUMP
000021b2: JUMPDEST
000021b3: PUSH1 0x00
000021b5: PUSH1 0x40
000021b7: MLOAD
000021b8: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000021d9: DUP2
000021da: MSTORE
000021db: DUP4
000021dc: PUSH1 0x04
000021de: DUP3
000021df: ADD
000021e0: MSTORE
000021e1: DUP3
000021e2: PUSH1 0x24
000021e4: DUP3
000021e5: ADD
000021e6: MSTORE
000021e7: PUSH1 0x20
000021e9: PUSH1 0x00
000021eb: PUSH1 0x44
000021ed: DUP4
000021ee: PUSH1 0x00
000021f0: DUP10
000021f1: GAS
000021f2: CALL
000021f3: RETURNDATASIZE
000021f4: ISZERO
000021f5: PUSH1 0x1f
000021f7: RETURNDATASIZE
000021f8: GT
000021f9: PUSH1 0x01
000021fb: PUSH1 0x00
000021fd: MLOAD
000021fe: EQ
000021ff: AND
00002200: OR
00002201: AND
00002202: SWAP2
00002203: POP
00002204: POP
00002205: DUP1
00002206: PUSH2 0x0c37
00002209: JUMPI
0000220a: PUSH1 0x40
0000220c: MLOAD
0000220d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000222e: DUP2
0000222f: MSTORE
00002230: PUSH1 0x20
00002232: PUSH1 0x04
00002234: DUP3
00002235: ADD
00002236: MSTORE
00002237: PUSH1 0x0f
00002239: PUSH1 0x24
0000223b: DUP3
0000223c: ADD
0000223d: MSTORE
0000223e: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000
0000225f: PUSH1 0x44
00002261: DUP3
00002262: ADD
00002263: MSTORE
00002264: PUSH1 0x64
00002266: ADD
00002267: PUSH2 0x0544
0000226a: JUMP
0000226b: JUMPDEST
0000226c: PUSH1 0x00
0000226e: PUSH2 0x2276
00002271: DUP6
00002272: PUSH2 0x2339
00002275: JUMP
00002276: JUMPDEST
00002277: SWAP1
00002278: POP
00002279: PUSH2 0x2283
0000227c: DUP7
0000227d: DUP3
0000227e: DUP7
0000227f: PUSH2 0x23a2
00002282: JUMP
00002283: JUMPDEST
00002284: PUSH2 0x22bc
00002287: JUMPI
00002288: PUSH1 0x40
0000228a: MLOAD
0000228b: PUSH32 0xe9a06b8b00000000000000000000000000000000000000000000000000000000
000022ac: DUP2
000022ad: MSTORE
000022ae: PUSH1 0x04
000022b0: DUP2
000022b1: ADD
000022b2: DUP4
000022b3: SWAP1
000022b4: MSTORE
000022b5: PUSH1 0x24
000022b7: ADD
000022b8: PUSH2 0x0544
000022bb: JUMP
000022bc: JUMPDEST
000022bd: TIMESTAMP
000022be: DUP4
000022bf: LT
000022c0: ISZERO
000022c1: PUSH2 0x22f6
000022c4: JUMPI
000022c5: PUSH1 0x40
000022c7: MLOAD
000022c8: PUSH32 0x922f30c600000000000000000000000000000000000000000000000000000000
000022e9: DUP2
000022ea: MSTORE
000022eb: PUSH1 0x04
000022ed: ADD
000022ee: PUSH1 0x40
000022f0: MLOAD
000022f1: DUP1
000022f2: SWAP2
000022f3: SUB
000022f4: SWAP1
000022f5: REVERT
000022f6: JUMPDEST
000022f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000230c: DUP7
0000230d: AND
0000230e: PUSH1 0x00
00002310: SWAP1
00002311: DUP2
00002312: MSTORE
00002313: PUSH1 0x20
00002315: DUP2
00002316: SWAP1
00002317: MSTORE
00002318: PUSH1 0x40
0000231a: DUP2
0000231b: KECCAK256
0000231c: DUP1
0000231d: SLOAD
0000231e: PUSH1 0x01
00002320: SWAP3
00002321: SWAP1
00002322: PUSH2 0x232c
00002325: SWAP1
00002326: DUP5
00002327: SWAP1
00002328: PUSH2 0x29d0
0000232b: JUMP
0000232c: JUMPDEST
0000232d: SWAP1
0000232e: SWAP2
0000232f: SSTORE
00002330: POP
00002331: POP
00002332: POP
00002333: POP
00002334: POP
00002335: POP
00002336: POP
00002337: POP
00002338: JUMP
00002339: JUMPDEST
0000233a: PUSH1 0x00
0000233c: PUSH2 0x082c
0000233f: PUSH2 0x2346
00002342: PUSH2 0x1d53
00002345: JUMP
00002346: JUMPDEST
00002347: DUP4
00002348: PUSH1 0x40
0000234a: MLOAD
0000234b: PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000
0000236c: PUSH1 0x20
0000236e: DUP3
0000236f: ADD
00002370: MSTORE
00002371: PUSH1 0x22
00002373: DUP2
00002374: ADD
00002375: DUP4
00002376: SWAP1
00002377: MSTORE
00002378: PUSH1 0x42
0000237a: DUP2
0000237b: ADD
0000237c: DUP3
0000237d: SWAP1
0000237e: MSTORE
0000237f: PUSH1 0x00
00002381: SWAP1
00002382: PUSH1 0x62
00002384: ADD
00002385: PUSH1 0x40
00002387: MLOAD
00002388: PUSH1 0x20
0000238a: DUP2
0000238b: DUP4
0000238c: SUB
0000238d: SUB
0000238e: DUP2
0000238f: MSTORE
00002390: SWAP1
00002391: PUSH1 0x40
00002393: MSTORE
00002394: DUP1
00002395: MLOAD
00002396: SWAP1
00002397: PUSH1 0x20
00002399: ADD
0000239a: KECCAK256
0000239b: SWAP1
0000239c: POP
0000239d: SWAP3
0000239e: SWAP2
0000239f: POP
000023a0: POP
000023a1: JUMP
000023a2: JUMPDEST
000023a3: PUSH1 0x00
000023a5: DUP2
000023a6: MLOAD
000023a7: PUSH1 0x41
000023a9: EQ
000023aa: PUSH2 0x23df
000023ad: JUMPI
000023ae: PUSH1 0x40
000023b0: MLOAD
000023b1: PUSH32 0x98af90f600000000000000000000000000000000000000000000000000000000
000023d2: DUP2
000023d3: MSTORE
000023d4: PUSH1 0x04
000023d6: ADD
000023d7: PUSH1 0x40
000023d9: MLOAD
000023da: DUP1
000023db: SWAP2
000023dc: SUB
000023dd: SWAP1
000023de: REVERT
000023df: JUMPDEST
000023e0: PUSH1 0x20
000023e2: DUP3
000023e3: DUP2
000023e4: ADD
000023e5: MLOAD
000023e6: PUSH1 0x40
000023e8: DUP1
000023e9: DUP6
000023ea: ADD
000023eb: MLOAD
000023ec: PUSH1 0x60
000023ee: DUP1
000023ef: DUP8
000023f0: ADD
000023f1: MLOAD
000023f2: DUP4
000023f3: MLOAD
000023f4: PUSH1 0x00
000023f6: DUP1
000023f7: DUP3
000023f8: MSTORE
000023f9: SWAP7
000023fa: DUP2
000023fb: ADD
000023fc: DUP1
000023fd: DUP7
000023fe: MSTORE
000023ff: DUP11
00002400: SWAP1
00002401: MSTORE
00002402: SWAP1
00002403: DUP7
00002404: BYTE
00002405: SWAP4
00002406: DUP2
00002407: ADD
00002408: DUP5
00002409: SWAP1
0000240a: MSTORE
0000240b: SWAP1
0000240c: DUP2
0000240d: ADD
0000240e: DUP5
0000240f: SWAP1
00002410: MSTORE
00002411: PUSH1 0x80
00002413: DUP2
00002414: ADD
00002415: DUP3
00002416: SWAP1
00002417: MSTORE
00002418: SWAP3
00002419: SWAP4
0000241a: SWAP1
0000241b: SWAP3
0000241c: PUSH1 0x01
0000241e: SWAP1
0000241f: PUSH1 0xa0
00002421: ADD
00002422: PUSH1 0x20
00002424: PUSH1 0x40
00002426: MLOAD
00002427: PUSH1 0x20
00002429: DUP2
0000242a: SUB
0000242b: SWAP1
0000242c: DUP1
0000242d: DUP5
0000242e: SUB
0000242f: SWAP1
00002430: DUP6
00002431: GAS
00002432: STATICCALL
00002433: ISZERO
00002434: DUP1
00002435: ISZERO
00002436: PUSH2 0x2443
00002439: JUMPI
0000243a: RETURNDATASIZE
0000243b: PUSH1 0x00
0000243d: DUP1
0000243e: RETURNDATACOPY
0000243f: RETURNDATASIZE
00002440: PUSH1 0x00
00002442: REVERT
00002443: JUMPDEST
00002444: POP
00002445: POP
00002446: PUSH1 0x40
00002448: MLOAD
00002449: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000246a: ADD
0000246b: MLOAD
0000246c: SWAP2
0000246d: POP
0000246e: POP
0000246f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002484: DUP2
00002485: AND
00002486: ISZERO
00002487: DUP1
00002488: ISZERO
00002489: SWAP1
0000248a: PUSH2 0x1cb9
0000248d: JUMPI
0000248e: POP
0000248f: DUP8
00002490: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024a5: AND
000024a6: DUP2
000024a7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024bc: AND
000024bd: EQ
000024be: SWAP9
000024bf: SWAP8
000024c0: POP
000024c1: POP
000024c2: POP
000024c3: POP
000024c4: POP
000024c5: POP
000024c6: POP
000024c7: POP
000024c8: JUMP
000024c9: JUMPDEST
000024ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024df: DUP2
000024e0: AND
000024e1: DUP2
000024e2: EQ
000024e3: PUSH2 0x0b6b
000024e6: JUMPI
000024e7: PUSH1 0x00
000024e9: DUP1
000024ea: REVERT
000024eb: JUMPDEST
000024ec: PUSH1 0x00
000024ee: PUSH1 0x20
000024f0: DUP3
000024f1: DUP5
000024f2: SUB
000024f3: SLT
000024f4: ISZERO
000024f5: PUSH2 0x24fd
000024f8: JUMPI
000024f9: PUSH1 0x00
000024fb: DUP1
000024fc: REVERT
000024fd: JUMPDEST
000024fe: DUP2
000024ff: CALLDATALOAD
00002500: PUSH2 0x2508
00002503: DUP2
00002504: PUSH2 0x24c9
00002507: JUMP
00002508: JUMPDEST
00002509: SWAP4
0000250a: SWAP3
0000250b: POP
0000250c: POP
0000250d: POP
0000250e: JUMP
0000250f: JUMPDEST
00002510: PUSH1 0x00
00002512: DUP1
00002513: PUSH1 0x40
00002515: DUP4
00002516: DUP6
00002517: SUB
00002518: SLT
00002519: ISZERO
0000251a: PUSH2 0x2522
0000251d: JUMPI
0000251e: PUSH1 0x00
00002520: DUP1
00002521: REVERT
00002522: JUMPDEST
00002523: DUP3
00002524: CALLDATALOAD
00002525: PUSH2 0x252d
00002528: DUP2
00002529: PUSH2 0x24c9
0000252c: JUMP
0000252d: JUMPDEST
0000252e: SWAP5
0000252f: PUSH1 0x20
00002531: SWAP4
00002532: SWAP1
00002533: SWAP4
00002534: ADD
00002535: CALLDATALOAD
00002536: SWAP4
00002537: POP
00002538: POP
00002539: POP
0000253a: JUMP
0000253b: JUMPDEST
0000253c: PUSH1 0x00
0000253e: PUSH1 0x20
00002540: DUP3
00002541: DUP5
00002542: SUB
00002543: SLT
00002544: ISZERO
00002545: PUSH2 0x254d
00002548: JUMPI
00002549: PUSH1 0x00
0000254b: DUP1
0000254c: REVERT
0000254d: JUMPDEST
0000254e: POP
0000254f: CALLDATALOAD
00002550: SWAP2
00002551: SWAP1
00002552: POP
00002553: JUMP
00002554: JUMPDEST
00002555: PUSH1 0x00
00002557: DUP1
00002558: DUP4
00002559: PUSH1 0x1f
0000255b: DUP5
0000255c: ADD
0000255d: SLT
0000255e: PUSH2 0x2566
00002561: JUMPI
00002562: PUSH1 0x00
00002564: DUP1
00002565: REVERT
00002566: JUMPDEST
00002567: POP
00002568: DUP2
00002569: CALLDATALOAD
0000256a: PUSH8 0xffffffffffffffff
00002573: DUP2
00002574: GT
00002575: ISZERO
00002576: PUSH2 0x257e
00002579: JUMPI
0000257a: PUSH1 0x00
0000257c: DUP1
0000257d: REVERT
0000257e: JUMPDEST
0000257f: PUSH1 0x20
00002581: DUP4
00002582: ADD
00002583: SWAP2
00002584: POP
00002585: DUP4
00002586: PUSH1 0x20
00002588: DUP3
00002589: PUSH1 0x05
0000258b: SHL
0000258c: DUP6
0000258d: ADD
0000258e: ADD
0000258f: GT
00002590: ISZERO
00002591: PUSH2 0x2599
00002594: JUMPI
00002595: PUSH1 0x00
00002597: DUP1
00002598: REVERT
00002599: JUMPDEST
0000259a: SWAP3
0000259b: POP
0000259c: SWAP3
0000259d: SWAP1
0000259e: POP
0000259f: JUMP
000025a0: JUMPDEST
000025a1: PUSH1 0x00
000025a3: DUP1
000025a4: PUSH1 0x00
000025a6: DUP1
000025a7: PUSH1 0x40
000025a9: DUP6
000025aa: DUP8
000025ab: SUB
000025ac: SLT
000025ad: ISZERO
000025ae: PUSH2 0x25b6
000025b1: JUMPI
000025b2: PUSH1 0x00
000025b4: DUP1
000025b5: REVERT
000025b6: JUMPDEST
000025b7: DUP5
000025b8: CALLDATALOAD
000025b9: PUSH8 0xffffffffffffffff
000025c2: DUP1
000025c3: DUP3
000025c4: GT
000025c5: ISZERO
000025c6: PUSH2 0x25ce
000025c9: JUMPI
000025ca: PUSH1 0x00
000025cc: DUP1
000025cd: REVERT
000025ce: JUMPDEST
000025cf: PUSH2 0x25da
000025d2: DUP9
000025d3: DUP4
000025d4: DUP10
000025d5: ADD
000025d6: PUSH2 0x2554
000025d9: JUMP
000025da: JUMPDEST
000025db: SWAP1
000025dc: SWAP7
000025dd: POP
000025de: SWAP5
000025df: POP
000025e0: PUSH1 0x20
000025e2: DUP8
000025e3: ADD
000025e4: CALLDATALOAD
000025e5: SWAP2
000025e6: POP
000025e7: DUP1
000025e8: DUP3
000025e9: GT
000025ea: ISZERO
000025eb: PUSH2 0x25f3
000025ee: JUMPI
000025ef: PUSH1 0x00
000025f1: DUP1
000025f2: REVERT
000025f3: JUMPDEST
000025f4: POP
000025f5: PUSH2 0x2600
000025f8: DUP8
000025f9: DUP3
000025fa: DUP9
000025fb: ADD
000025fc: PUSH2 0x2554
000025ff: JUMP
00002600: JUMPDEST
00002601: SWAP6
00002602: SWAP9
00002603: SWAP5
00002604: SWAP8
00002605: POP
00002606: SWAP6
00002607: POP
00002608: POP
00002609: POP
0000260a: POP
0000260b: JUMP
0000260c: JUMPDEST
0000260d: PUSH1 0x00
0000260f: DUP1
00002610: PUSH1 0x40
00002612: DUP4
00002613: DUP6
00002614: SUB
00002615: SLT
00002616: ISZERO
00002617: PUSH2 0x261f
0000261a: JUMPI
0000261b: PUSH1 0x00
0000261d: DUP1
0000261e: REVERT
0000261f: JUMPDEST
00002620: DUP3
00002621: CALLDATALOAD
00002622: PUSH2 0x262a
00002625: DUP2
00002626: PUSH2 0x24c9
00002629: JUMP
0000262a: JUMPDEST
0000262b: SWAP2
0000262c: POP
0000262d: PUSH1 0x20
0000262f: DUP4
00002630: ADD
00002631: CALLDATALOAD
00002632: PUSH2 0x263a
00002635: DUP2
00002636: PUSH2 0x24c9
00002639: JUMP
0000263a: JUMPDEST
0000263b: DUP1
0000263c: SWAP2
0000263d: POP
0000263e: POP
0000263f: SWAP3
00002640: POP
00002641: SWAP3
00002642: SWAP1
00002643: POP
00002644: JUMP
00002645: JUMPDEST
00002646: PUSH1 0x00
00002648: DUP1
00002649: PUSH1 0x00
0000264b: PUSH1 0x40
0000264d: DUP5
0000264e: DUP7
0000264f: SUB
00002650: SLT
00002651: ISZERO
00002652: PUSH2 0x265a
00002655: JUMPI
00002656: PUSH1 0x00
00002658: DUP1
00002659: REVERT
0000265a: JUMPDEST
0000265b: DUP4
0000265c: CALLDATALOAD
0000265d: PUSH2 0x2665
00002660: DUP2
00002661: PUSH2 0x24c9
00002664: JUMP
00002665: JUMPDEST
00002666: SWAP3
00002667: POP
00002668: PUSH1 0x20
0000266a: DUP5
0000266b: ADD
0000266c: CALLDATALOAD
0000266d: PUSH8 0xffffffffffffffff
00002676: DUP2
00002677: GT
00002678: ISZERO
00002679: PUSH2 0x2681
0000267c: JUMPI
0000267d: PUSH1 0x00
0000267f: DUP1
00002680: REVERT
00002681: JUMPDEST
00002682: PUSH2 0x268d
00002685: DUP7
00002686: DUP3
00002687: DUP8
00002688: ADD
00002689: PUSH2 0x2554
0000268c: JUMP
0000268d: JUMPDEST
0000268e: SWAP5
0000268f: SWAP8
00002690: SWAP1
00002691: SWAP7
00002692: POP
00002693: SWAP4
00002694: SWAP5
00002695: POP
00002696: POP
00002697: POP
00002698: POP
00002699: JUMP
0000269a: JUMPDEST
0000269b: PUSH1 0x20
0000269d: DUP1
0000269e: DUP3
0000269f: MSTORE
000026a0: DUP3
000026a1: MLOAD
000026a2: DUP3
000026a3: DUP3
000026a4: ADD
000026a5: DUP2
000026a6: SWAP1
000026a7: MSTORE
000026a8: PUSH1 0x00
000026aa: SWAP2
000026ab: SWAP1
000026ac: DUP5
000026ad: DUP3
000026ae: ADD
000026af: SWAP1
000026b0: PUSH1 0x40
000026b2: DUP6
000026b3: ADD
000026b4: SWAP1
000026b5: DUP5
000026b6: JUMPDEST
000026b7: DUP2
000026b8: DUP2
000026b9: LT
000026ba: ISZERO
000026bb: PUSH2 0x1fb1
000026be: JUMPI
000026bf: DUP4
000026c0: MLOAD
000026c1: DUP4
000026c2: MSTORE
000026c3: SWAP3
000026c4: DUP5
000026c5: ADD
000026c6: SWAP3
000026c7: SWAP2
000026c8: DUP5
000026c9: ADD
000026ca: SWAP2
000026cb: PUSH1 0x01
000026cd: ADD
000026ce: PUSH2 0x26b6
000026d1: JUMP
000026d2: JUMPDEST
000026d3: PUSH1 0x00
000026d5: DUP1
000026d6: PUSH1 0x20
000026d8: DUP4
000026d9: DUP6
000026da: SUB
000026db: SLT
000026dc: ISZERO
000026dd: PUSH2 0x26e5
000026e0: JUMPI
000026e1: PUSH1 0x00
000026e3: DUP1
000026e4: REVERT
000026e5: JUMPDEST
000026e6: DUP3
000026e7: CALLDATALOAD
000026e8: PUSH8 0xffffffffffffffff
000026f1: DUP2
000026f2: GT
000026f3: ISZERO
000026f4: PUSH2 0x26fc
000026f7: JUMPI
000026f8: PUSH1 0x00
000026fa: DUP1
000026fb: REVERT
000026fc: JUMPDEST
000026fd: PUSH2 0x2708
00002700: DUP6
00002701: DUP3
00002702: DUP7
00002703: ADD
00002704: PUSH2 0x2554
00002707: JUMP
00002708: JUMPDEST
00002709: SWAP1
0000270a: SWAP7
0000270b: SWAP1
0000270c: SWAP6
0000270d: POP
0000270e: SWAP4
0000270f: POP
00002710: POP
00002711: POP
00002712: POP
00002713: JUMP
00002714: JUMPDEST
00002715: DUP1
00002716: CALLDATALOAD
00002717: DUP1
00002718: ISZERO
00002719: ISZERO
0000271a: DUP2
0000271b: EQ
0000271c: PUSH2 0x2132
0000271f: JUMPI
00002720: PUSH1 0x00
00002722: DUP1
00002723: REVERT
00002724: JUMPDEST
00002725: PUSH1 0x00
00002727: PUSH1 0x20
00002729: DUP3
0000272a: DUP5
0000272b: SUB
0000272c: SLT
0000272d: ISZERO
0000272e: PUSH2 0x2736
00002731: JUMPI
00002732: PUSH1 0x00
00002734: DUP1
00002735: REVERT
00002736: JUMPDEST
00002737: PUSH2 0x0829
0000273a: DUP3
0000273b: PUSH2 0x2714
0000273e: JUMP
0000273f: JUMPDEST
00002740: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002761: PUSH1 0x00
00002763: MSTORE
00002764: PUSH1 0x41
00002766: PUSH1 0x04
00002768: MSTORE
00002769: PUSH1 0x24
0000276b: PUSH1 0x00
0000276d: REVERT
0000276e: JUMPDEST
0000276f: PUSH1 0x40
00002771: MLOAD
00002772: PUSH1 0x1f
00002774: DUP3
00002775: ADD
00002776: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002797: AND
00002798: DUP2
00002799: ADD
0000279a: PUSH8 0xffffffffffffffff
000027a3: DUP2
000027a4: GT
000027a5: DUP3
000027a6: DUP3
000027a7: LT
000027a8: OR
000027a9: ISZERO
000027aa: PUSH2 0x27b5
000027ad: JUMPI
000027ae: PUSH2 0x27b5
000027b1: PUSH2 0x273f
000027b4: JUMP
000027b5: JUMPDEST
000027b6: PUSH1 0x40
000027b8: MSTORE
000027b9: SWAP2
000027ba: SWAP1
000027bb: POP
000027bc: JUMP
000027bd: JUMPDEST
000027be: PUSH1 0x00
000027c0: DUP1
000027c1: PUSH1 0x00
000027c3: PUSH1 0x60
000027c5: DUP5
000027c6: DUP7
000027c7: SUB
000027c8: SLT
000027c9: ISZERO
000027ca: PUSH2 0x27d2
000027cd: JUMPI
000027ce: PUSH1 0x00
000027d0: DUP1
000027d1: REVERT
000027d2: JUMPDEST
000027d3: DUP4
000027d4: CALLDATALOAD
000027d5: PUSH2 0x27dd
000027d8: DUP2
000027d9: PUSH2 0x24c9
000027dc: JUMP
000027dd: JUMPDEST
000027de: SWAP3
000027df: POP
000027e0: PUSH1 0x20
000027e2: PUSH2 0x27ec
000027e5: DUP6
000027e6: DUP3
000027e7: ADD
000027e8: PUSH2 0x2714
000027eb: JUMP
000027ec: JUMPDEST
000027ed: SWAP3
000027ee: POP
000027ef: PUSH1 0x40
000027f1: DUP6
000027f2: ADD
000027f3: CALLDATALOAD
000027f4: PUSH8 0xffffffffffffffff
000027fd: DUP1
000027fe: DUP3
000027ff: GT
00002800: ISZERO
00002801: PUSH2 0x2809
00002804: JUMPI
00002805: PUSH1 0x00
00002807: DUP1
00002808: REVERT
00002809: JUMPDEST
0000280a: DUP2
0000280b: DUP8
0000280c: ADD
0000280d: SWAP2
0000280e: POP
0000280f: DUP8
00002810: PUSH1 0x1f
00002812: DUP4
00002813: ADD
00002814: SLT
00002815: PUSH2 0x281d
00002818: JUMPI
00002819: PUSH1 0x00
0000281b: DUP1
0000281c: REVERT
0000281d: JUMPDEST
0000281e: DUP2
0000281f: CALLDATALOAD
00002820: DUP2
00002821: DUP2
00002822: GT
00002823: ISZERO
00002824: PUSH2 0x282f
00002827: JUMPI
00002828: PUSH2 0x282f
0000282b: PUSH2 0x273f
0000282e: JUMP
0000282f: JUMPDEST
00002830: PUSH2 0x285f
00002833: DUP5
00002834: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002855: PUSH1 0x1f
00002857: DUP5
00002858: ADD
00002859: AND
0000285a: ADD
0000285b: PUSH2 0x276e
0000285e: JUMP
0000285f: JUMPDEST
00002860: SWAP2
00002861: POP
00002862: DUP1
00002863: DUP3
00002864: MSTORE
00002865: DUP9
00002866: DUP5
00002867: DUP3
00002868: DUP6
00002869: ADD
0000286a: ADD
0000286b: GT
0000286c: ISZERO
0000286d: PUSH2 0x2875
00002870: JUMPI
00002871: PUSH1 0x00
00002873: DUP1
00002874: REVERT
00002875: JUMPDEST
00002876: DUP1
00002877: DUP5
00002878: DUP5
00002879: ADD
0000287a: DUP6
0000287b: DUP5
0000287c: ADD
0000287d: CALLDATACOPY
0000287e: PUSH1 0x00
00002880: DUP5
00002881: DUP3
00002882: DUP5
00002883: ADD
00002884: ADD
00002885: MSTORE
00002886: POP
00002887: DUP1
00002888: SWAP4
00002889: POP
0000288a: POP
0000288b: POP
0000288c: POP
0000288d: SWAP3
0000288e: POP
0000288f: SWAP3
00002890: POP
00002891: SWAP3
00002892: JUMP
00002893: JUMPDEST
00002894: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000028b5: PUSH1 0x00
000028b7: MSTORE
000028b8: PUSH1 0x32
000028ba: PUSH1 0x04
000028bc: MSTORE
000028bd: PUSH1 0x24
000028bf: PUSH1 0x00
000028c1: REVERT
000028c2: JUMPDEST
000028c3: PUSH1 0x00
000028c5: PUSH1 0x20
000028c7: DUP3
000028c8: DUP5
000028c9: SUB
000028ca: SLT
000028cb: ISZERO
000028cc: PUSH2 0x28d4
000028cf: JUMPI
000028d0: PUSH1 0x00
000028d2: DUP1
000028d3: REVERT
000028d4: JUMPDEST
000028d5: POP
000028d6: MLOAD
000028d7: SWAP2
000028d8: SWAP1
000028d9: POP
000028da: JUMP
000028db: JUMPDEST
000028dc: DUP1
000028dd: MLOAD
000028de: PUSH1 0x0f
000028e0: DUP2
000028e1: SWAP1
000028e2: SIGNEXTEND
000028e3: DUP2
000028e4: EQ
000028e5: PUSH2 0x2132
000028e8: JUMPI
000028e9: PUSH1 0x00
000028eb: DUP1
000028ec: REVERT
000028ed: JUMPDEST
000028ee: PUSH1 0x00
000028f0: PUSH1 0x80
000028f2: DUP3
000028f3: DUP5
000028f4: SUB
000028f5: SLT
000028f6: ISZERO
000028f7: PUSH2 0x28ff
000028fa: JUMPI
000028fb: PUSH1 0x00
000028fd: DUP1
000028fe: REVERT
000028ff: JUMPDEST
00002900: PUSH1 0x40
00002902: MLOAD
00002903: PUSH1 0x80
00002905: DUP2
00002906: ADD
00002907: DUP2
00002908: DUP2
00002909: LT
0000290a: PUSH8 0xffffffffffffffff
00002913: DUP3
00002914: GT
00002915: OR
00002916: ISZERO
00002917: PUSH2 0x2922
0000291a: JUMPI
0000291b: PUSH2 0x2922
0000291e: PUSH2 0x273f
00002921: JUMP
00002922: JUMPDEST
00002923: PUSH1 0x40
00002925: MSTORE
00002926: PUSH2 0x292e
00002929: DUP4
0000292a: PUSH2 0x28db
0000292d: JUMP
0000292e: JUMPDEST
0000292f: DUP2
00002930: MSTORE
00002931: PUSH2 0x293c
00002934: PUSH1 0x20
00002936: DUP5
00002937: ADD
00002938: PUSH2 0x28db
0000293b: JUMP
0000293c: JUMPDEST
0000293d: PUSH1 0x20
0000293f: DUP3
00002940: ADD
00002941: MSTORE
00002942: PUSH1 0x40
00002944: DUP4
00002945: ADD
00002946: MLOAD
00002947: PUSH1 0x40
00002949: DUP3
0000294a: ADD
0000294b: MSTORE
0000294c: PUSH1 0x60
0000294e: DUP4
0000294f: ADD
00002950: MLOAD
00002951: PUSH1 0x60
00002953: DUP3
00002954: ADD
00002955: MSTORE
00002956: DUP1
00002957: SWAP2
00002958: POP
00002959: POP
0000295a: SWAP3
0000295b: SWAP2
0000295c: POP
0000295d: POP
0000295e: JUMP
0000295f: JUMPDEST
00002960: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002981: PUSH1 0x00
00002983: MSTORE
00002984: PUSH1 0x11
00002986: PUSH1 0x04
00002988: MSTORE
00002989: PUSH1 0x24
0000298b: PUSH1 0x00
0000298d: REVERT
0000298e: JUMPDEST
0000298f: DUP2
00002990: DUP2
00002991: SUB
00002992: DUP2
00002993: DUP2
00002994: GT
00002995: ISZERO
00002996: PUSH2 0x082c
00002999: JUMPI
0000299a: PUSH2 0x082c
0000299d: PUSH2 0x295f
000029a0: JUMP
000029a1: JUMPDEST
000029a2: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000029c3: PUSH1 0x00
000029c5: MSTORE
000029c6: PUSH1 0x12
000029c8: PUSH1 0x04
000029ca: MSTORE
000029cb: PUSH1 0x24
000029cd: PUSH1 0x00
000029cf: REVERT
000029d0: JUMPDEST
000029d1: DUP1
000029d2: DUP3
000029d3: ADD
000029d4: DUP1
000029d5: DUP3
000029d6: GT
000029d7: ISZERO
000029d8: PUSH2 0x082c
000029db: JUMPI
000029dc: PUSH2 0x082c
000029df: PUSH2 0x295f
000029e2: JUMP
000029e3: INVALID
000029e4: LOG2
000029e5: PUSH5 0x6970667358
000029eb: UNKNOWN(0x22)
000029ec: SLT
000029ed: KECCAK256
000029ee: LOG4
000029ef: UNKNOWN(0x28)
000029f0: SUB
000029f1: SWAP14
000029f2: UNKNOWN(0xE8)
000029f3: SWAP10
000029f4: UNKNOWN(0xA5)
000029f5: ADD
000029f6: CREATE2
000029f7: BALANCE
000029f8: SWAP4
000029f9: UNKNOWN(0x22)
000029fa: SWAP9
000029fb: CODESIZE
000029fc: UNKNOWN(0x2F)
000029fd: UNKNOWN(0xCF)
000029fe: UNKNOWN(0x22)
000029ff: ORIGIN
00002a00: UNKNOWN(0xDD)
00002a01: UNKNOWN(0xB7)
00002a02: PUSH10 0x30843b9efd1786d24c6c
00002a0d: UNKNOWN(0x2E)
00002a0e: PUSH5 0x736f6c6343
00002a14: STOP
00002a15: ADDMOD
00002a16: LT
00002a17: STOP
00002a18: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xe811f44b",
            "selector": "0xe811f44b",
            "calldata_variants": [
                "0xe811f44b",
                "0xe811f44b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed24911d",
            "selector": "0xed24911d",
            "calldata_variants": [
                "0xed24911d",
                "0xed24911d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfcaa54ee",
            "selector": "0xfcaa54ee",
            "calldata_variants": [
                "0xfcaa54ee",
                "0xfcaa54ee0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca31879d",
            "selector": "0xca31879d",
            "calldata_variants": [
                "0xca31879d",
                "0xca31879d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd3dc4ca1",
            "selector": "0xd3dc4ca1",
            "calldata_variants": [
                "0xd3dc4ca1",
                "0xd3dc4ca10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xde681faf",
            "selector": "0xde681faf",
            "calldata_variants": [
                "0xde681faf",
                "0xde681faf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa1648aa5",
            "selector": "0xa1648aa5",
            "calldata_variants": [
                "0xa1648aa5",
                "0xa1648aa50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xacbc1428",
            "selector": "0xacbc1428",
            "calldata_variants": [
                "0xacbc1428",
                "0xacbc14280000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 6309,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 10751,
            "type": "tx_origin_used"
        }
    ]
}
medium other codex Token checkpointing stops after 20 weeks, leaving undistributed tokens permanently unclaimable 75 no
view
evidence_json
{
    "evidence": "`tokenState.timeCursor = uint64(block.timestamp)` is set before a loop bounded to 20 iterations, so gaps >20 weeks are not fully distributed.",
    "locations": [
        "src/FeeDistributor.sol:446",
        "src/FeeDistributor.sol:460",
        "src/FeeDistributor.sol:495"
    ],
    "recommendation": "Only advance the token time cursor to the last processed week, not `block.timestamp`, and allow repeated calls to continue distributing across remaining weeks. Alternatively, keep the loop bound but persist `lastTokenTime`/`firstIncompleteWeek` so subsequent calls resume until caught up.",
    "exploit_scenario": "If a token is not checkpointed for more than 20 weeks, `_checkpointToken` only assigns fees for the first 20 weeks, then sets `tokenState.timeCursor` to `block.timestamp` and `cachedBalance` to the full balance. The remaining weeks are never assigned to `_tokensPerWeek`, and future checkpoints see no new tokens, so the unassigned portion can never be claimed."
}
medium math codex Zero totalSupply weeks cause division-by-zero and permanently block claims 75 no
view
evidence_json
{
    "evidence": "Claim math divides by `_veSupplyCache[nextUserTokenWeekToClaim]` without a zero check; `_checkpointTotalSupply` stores zero when totalSupply is zero.",
    "locations": [
        "src/FeeDistributor.sol:384",
        "src/FeeDistributor.sol:637"
    ],
    "recommendation": "Guard against zero supply in `_claimToken` by skipping weeks where `_veSupplyCache[week] == 0` (advance the user token cursor without dividing), or prevent fee assignment for weeks with zero supply and ensure claims can bypass them safely.",
    "exploit_scenario": "If the VotingEscrow total supply is zero for any week (e.g., all locks expire), `_checkpointTotalSupply` caches 0 for that week. When a user later claims, `_claimToken` divides by `_veSupplyCache[week]` and reverts on that zero, preventing the cursor from advancing and locking all current and future claims for that token."
}
medium other detector CREATE/CREATE2 reachable 45 no no
view
trace_id: 0x4393a440fd4d218fa9104cff59377824950098269f55150472e63ef3d097c6a7
validation_json
{
    "sink": "CREATE",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x4393a440fd4d218fa9104cff59377824950098269f55150472e63ef3d097c6a7",
    "confirmed": false,
    "trace_mode": "structLogs",
    "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": "0xe811f44b",
            "selector": "0xe811f44b",
            "calldata_variants": [
                "0xe811f44b",
                "0xe811f44b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed24911d",
            "selector": "0xed24911d",
            "calldata_variants": [
                "0xed24911d",
                "0xed24911d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfcaa54ee",
            "selector": "0xfcaa54ee",
            "calldata_variants": [
                "0xfcaa54ee",
                "0xfcaa54ee0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca31879d",
            "selector": "0xca31879d",
            "calldata_variants": [
                "0xca31879d",
                "0xca31879d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd3dc4ca1",
            "selector": "0xd3dc4ca1",
            "calldata_variants": [
                "0xd3dc4ca1",
                "0xd3dc4ca10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xde681faf",
            "selector": "0xde681faf",
            "calldata_variants": [
                "0xde681faf",
                "0xde681faf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa1648aa5",
            "selector": "0xa1648aa5",
            "calldata_variants": [
                "0xa1648aa5",
                "0xa1648aa50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xacbc1428",
            "selector": "0xacbc1428",
            "calldata_variants": [
                "0xacbc1428",
                "0xacbc14280000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "create_count": 0,
    "create2_count": 1
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xb8d98e0e70b497fc32aa519b2ee67126ff720f6575647d7b14262ba06f2ea6b4
call_targets: 0x951f99350d816c0e160a2c71defe828bdfc17f12
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xb8d98e0e70b497fc32aa519b2ee67126ff720f6575647d7b14262ba06f2ea6b4",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x951f99350d816c0e160a2c71defe828bdfc17f12"
    ],
    "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": "0xe811f44b",
            "selector": "0xe811f44b",
            "calldata_variants": [
                "0xe811f44b",
                "0xe811f44b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed24911d",
            "selector": "0xed24911d",
            "calldata_variants": [
                "0xed24911d",
                "0xed24911d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfcaa54ee",
            "selector": "0xfcaa54ee",
            "calldata_variants": [
                "0xfcaa54ee",
                "0xfcaa54ee0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca31879d",
            "selector": "0xca31879d",
            "calldata_variants": [
                "0xca31879d",
                "0xca31879d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd3dc4ca1",
            "selector": "0xd3dc4ca1",
            "calldata_variants": [
                "0xd3dc4ca1",
                "0xd3dc4ca10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xde681faf",
            "selector": "0xde681faf",
            "calldata_variants": [
                "0xde681faf",
                "0xde681faf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa1648aa5",
            "selector": "0xa1648aa5",
            "calldata_variants": [
                "0xa1648aa5",
                "0xa1648aa50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xacbc1428",
            "selector": "0xacbc1428",
            "calldata_variants": [
                "0xacbc1428",
                "0xacbc14280000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5982,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 6528,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8690,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 3,
    "guards_detected": [
        {
            "pc": 6309,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 10751,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 3
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xb8d98e0e70b497fc32aa519b2ee67126ff720f6575647d7b14262ba06f2ea6b4
call_targets: 0x951f99350d816c0e160a2c71defe828bdfc17f12
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xb8d98e0e70b497fc32aa519b2ee67126ff720f6575647d7b14262ba06f2ea6b4",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x951f99350d816c0e160a2c71defe828bdfc17f12"
    ],
    "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": "0xe811f44b",
            "selector": "0xe811f44b",
            "calldata_variants": [
                "0xe811f44b",
                "0xe811f44b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed24911d",
            "selector": "0xed24911d",
            "calldata_variants": [
                "0xed24911d",
                "0xed24911d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfcaa54ee",
            "selector": "0xfcaa54ee",
            "calldata_variants": [
                "0xfcaa54ee",
                "0xfcaa54ee0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca31879d",
            "selector": "0xca31879d",
            "calldata_variants": [
                "0xca31879d",
                "0xca31879d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd3dc4ca1",
            "selector": "0xd3dc4ca1",
            "calldata_variants": [
                "0xd3dc4ca1",
                "0xd3dc4ca10000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xde681faf",
            "selector": "0xde681faf",
            "calldata_variants": [
                "0xde681faf",
                "0xde681faf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa1648aa5",
            "selector": "0xa1648aa5",
            "calldata_variants": [
                "0xa1648aa5",
                "0xa1648aa50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xacbc1428",
            "selector": "0xacbc1428",
            "calldata_variants": [
                "0xacbc1428",
                "0xacbc14280000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5982,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 6528,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8690,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 3,
    "guards_detected": [
        {
            "pc": 6309,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 10751,
            "type": "tx_origin_used"
        }
    ]
}
low other cast Contract creation opcode present 60 no
view
evidence_json
{
    "notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
    "create_count": 0,
    "create2_count": 1
}