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

Analysis Run

019bb377-69d5-7349-915e-9672d06739b0

failed
Chain ID
1
Address
Block Number
Created
Mon, Jan 12, 2026 6:28 PM
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
2
Validated
2
Source
Verified
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
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
39867 artifact.fetch complete 1 / 3 3 months ago
39868 proxy.resolve complete 1 / 3 3 months ago
39869 tool.cast_disasm complete 1 / 3 3 months ago
39870 analysis.bundle complete 1 / 3 3 months ago
39871 capability.graph complete 1 / 3 3 months ago
39872 detector.run complete 1 / 3 3 months ago
39873 validation.fork complete 1 / 3 3 months ago
39975 report.consolidate complete 1 / 6 3 months ago
39976 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 solc version 0.3.5 is too old for supported toolchain
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 1056, in run
    solc_path, solc_meta = _prepare_solc(chosen_version, workspace)
                           ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 190, in _prepare_solc
    raise RuntimeError(f"solc version {default_version} is too old for supported toolchain")
RuntimeError: solc version 0.3.5 is too old for supported toolchain

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
4
No findings?
no
Summary
Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.
View stdout
{"no_findings":false,"summary":"Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.","findings":[{"severity":"high","category":"access_control","title":"Minter can be set by any address once, enabling unauthorized mint/reset","exploit_scenario":"If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting.","recommendation":"Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.","evidence":"setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.","locations":["contracts/Contract.sol:104","contracts/Contract.sol:105","contracts/Contract.sol:111","contracts/Contract.sol:120"]},{"severity":"medium","category":"auth","title":"Order signatures lack proper domain separation and user binding in hash","exploit_scenario":"The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user’s order capacity.","recommendation":"Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.","evidence":"Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.","locations":["contracts/Contract.sol:191","contracts/Contract.sol:195","contracts/Contract.sol:205","contracts/Contract.sol:218"]},{"severity":"medium","category":"math","title":"Unchecked multiplication/division in trade and volume calculations can overflow","exploit_scenario":"Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction.","recommendation":"Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).","evidence":"Multiplications are performed without overflow checks in trade and availableVolume calculations.","locations":["contracts/Contract.sol:197","contracts/Contract.sol:202","contracts/Contract.sol:203","contracts/Contract.sol:223","contracts/Contract.sol:224"]},{"severity":"low","category":"auth","title":"ERC20 approve race condition allows double-spend of allowance","exploit_scenario":"A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances.","recommendation":"Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.","evidence":"approve() sets allowance directly with no zero-check.","locations":["contracts/Contract.sol:76","contracts/Contract.sol:77"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-81o04un7
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bb39b-bd24-76d0-9599-04807d1a0570
--------
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
**Reading AUDIT_BUNDLE file**
exec
/bin/bash -lc 'cat /tmp/codex-81o04un7/AUDIT_BUNDLE.txt' in /tmp/codex-81o04un7 succeeded in 7ms:
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: contracts/Contract.sol
================================================================================
contract Token {

    /// @return total amount of tokens
    function totalSupply() constant returns (uint256 supply) {}

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) constant returns (uint256 balance) {}

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) returns (bool success) {}

thinking
**Analyzing Solidity contract risks**

I'm carefully auditing the old Solidity contract for reentrancy, access control, signature verification, and arithmetic issues, weighing severity and categories while considering specifics like unchecked math, signature malleability, and order fill accounting problems. Next, I plan to create a findings list with file paths and line numbers for clarity.
exec
/bin/bash -lc 'nl -ba /tmp/codex-81o04un7/AUDIT_BUNDLE.txt' in /tmp/codex-81o04un7 succeeded in 5ms:
     1	This file concatenates the full contents of first-party Solidity sources for auditing.
     2	Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
     3	
     4	================================================================================
     5	FILE: contracts/Contract.sol
     6	================================================================================
     7	contract Token {
     8	
     9	    /// @return total amount of tokens
    10	    function totalSupply() constant returns (uint256 supply) {}
    11	
    12	    /// @param _owner The address from which the balance will be retrieved
    13	    /// @return The balance
    14	    function balanceOf(address _owner) constant returns (uint256 balance) {}
    15	
    16	    /// @notice send `_value` token to `_to` from `msg.sender`
    17	    /// @param _to The address of the recipient
    18	    /// @param _value The amount of token to be transferred
    19	    /// @return Whether the transfer was successful or not
    20	    function transfer(address _to, uint256 _value) returns (bool success) {}

thinking
**Summarizing security findings for JSON output**

I'll organize the four security findings clearly with severity, category, titles, exploit scenarios, recommendations, and evidence including line numbers from contracts/Contract.sol to prepare a detailed JSON report for the user.
codex
{"no_findings":false,"summary":"Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.","findings":[{"severity":"high","category":"access_control","title":"Minter can be set by any address once, enabling unauthorized mint/reset","exploit_scenario":"If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting.","recommendation":"Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.","evidence":"setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.","locations":["contracts/Contract.sol:104","contracts/Contract.sol:105","contracts/Contract.sol:111","contracts/Contract.sol:120"]},{"severity":"medium","category":"auth","title":"Order signatures lack proper domain separation and user binding in hash","exploit_scenario":"The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user’s order capacity.","recommendation":"Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.","evidence":"Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.","locations":["contracts/Contract.sol:191","contracts/Contract.sol:195","contracts/Contract.sol:205","contracts/Contract.sol:218"]},{"severity":"medium","category":"math","title":"Unchecked multiplication/division in trade and volume calculations can overflow","exploit_scenario":"Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction.","recommendation":"Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).","evidence":"Multiplications are performed without overflow checks in trade and availableVolume calculations.","locations":["contracts/Contract.sol:197","contracts/Contract.sol:202","contracts/Contract.sol:203","contracts/Contract.sol:223","contracts/Contract.sol:224"]},{"severity":"low","category":"auth","title":"ERC20 approve race condition allows double-spend of allowance","exploit_scenario":"A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances.","recommendation":"Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.","evidence":"approve() sets allowance directly with no zero-check.","locations":["contracts/Contract.sol:76","contracts/Contract.sol:77"]}]}
tokens used
13,797
Metadata
{
    "codex": {
        "ran_at": "2026-01-12T19:09:19.035648+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 1,
        "import_count": 0,
        "first_party_contracts_count": 1
    },
    "summary": "Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.",
    "raw_final": {
        "summary": "Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.",
        "findings": [
            {
                "title": "Minter can be set by any address once, enabling unauthorized mint/reset",
                "category": "access_control",
                "evidence": "setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.",
                "severity": "high",
                "locations": [
                    "contracts/Contract.sol:104",
                    "contracts/Contract.sol:105",
                    "contracts/Contract.sol:111",
                    "contracts/Contract.sol:120"
                ],
                "recommendation": "Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.",
                "exploit_scenario": "If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting."
            },
            {
                "title": "Order signatures lack proper domain separation and user binding in hash",
                "category": "auth",
                "evidence": "Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.",
                "severity": "medium",
                "locations": [
                    "contracts/Contract.sol:191",
                    "contracts/Contract.sol:195",
                    "contracts/Contract.sol:205",
                    "contracts/Contract.sol:218"
                ],
                "recommendation": "Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.",
                "exploit_scenario": "The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user\u2019s order capacity."
            },
            {
                "title": "Unchecked multiplication/division in trade and volume calculations can overflow",
                "category": "math",
                "evidence": "Multiplications are performed without overflow checks in trade and availableVolume calculations.",
                "severity": "medium",
                "locations": [
                    "contracts/Contract.sol:197",
                    "contracts/Contract.sol:202",
                    "contracts/Contract.sol:203",
                    "contracts/Contract.sol:223",
                    "contracts/Contract.sol:224"
                ],
                "recommendation": "Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).",
                "exploit_scenario": "Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction."
            },
            {
                "title": "ERC20 approve race condition allows double-spend of allowance",
                "category": "auth",
                "evidence": "approve() sets allowance directly with no zero-check.",
                "severity": "low",
                "locations": [
                    "contracts/Contract.sol:76",
                    "contracts/Contract.sol:77"
                ],
                "recommendation": "Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.",
                "exploit_scenario": "A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
7
EXT*/BALANCE
0
Total opcodes
2293
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0098
0000000a: JUMPI
0000000b: PUSH1 0xe0
0000000d: PUSH1 0x02
0000000f: EXP
00000010: PUSH1 0x00
00000012: CALLDATALOAD
00000013: DIV
00000014: PUSH4 0x0a19b14a
00000019: DUP2
0000001a: EQ
0000001b: PUSH2 0x00a0
0000001e: JUMPI
0000001f: DUP1
00000020: PUSH4 0x2e1a7d4d
00000025: EQ
00000026: PUSH2 0x00d7
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH4 0x338b5dea
00000030: EQ
00000031: PUSH2 0x00eb
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x57786394
0000003b: EQ
0000003c: PUSH2 0x0116
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x65e17c9d
00000046: EQ
00000047: PUSH2 0x011f
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x6c86888b
00000051: EQ
00000052: PUSH2 0x0131
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x93f0bb51
0000005c: EQ
0000005d: PUSH2 0x01a0
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x9e281a98
00000067: EQ
00000068: PUSH2 0x01cd
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0xc281309e
00000072: EQ
00000073: PUSH2 0x01f8
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0xd0e30db0
0000007d: EQ
0000007e: PUSH2 0x0201
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0xf7888aec
00000088: EQ
00000089: PUSH2 0x0281
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0xfb6e155f
00000093: EQ
00000094: PUSH2 0x02be
00000097: JUMPI
00000098: JUMPDEST
00000099: PUSH2 0x03d0
0000009c: PUSH2 0x0002
0000009f: JUMP
000000a0: JUMPDEST
000000a1: PUSH2 0x03d0
000000a4: PUSH1 0x04
000000a6: CALLDATALOAD
000000a7: PUSH1 0x24
000000a9: CALLDATALOAD
000000aa: PUSH1 0x44
000000ac: CALLDATALOAD
000000ad: PUSH1 0x64
000000af: CALLDATALOAD
000000b0: PUSH1 0x84
000000b2: CALLDATALOAD
000000b3: PUSH1 0xa4
000000b5: CALLDATALOAD
000000b6: PUSH1 0xc4
000000b8: CALLDATALOAD
000000b9: PUSH1 0xe4
000000bb: CALLDATALOAD
000000bc: PUSH2 0x0104
000000bf: CALLDATALOAD
000000c0: PUSH2 0x0124
000000c3: CALLDATALOAD
000000c4: PUSH2 0x0144
000000c7: CALLDATALOAD
000000c8: PUSH1 0x00
000000ca: PUSH1 0x00
000000cc: CALLVALUE
000000cd: GT
000000ce: ISZERO
000000cf: PUSH2 0x0403
000000d2: JUMPI
000000d3: PUSH2 0x0002
000000d6: JUMP
000000d7: JUMPDEST
000000d8: PUSH2 0x03d0
000000db: PUSH1 0x04
000000dd: CALLDATALOAD
000000de: PUSH1 0x00
000000e0: CALLVALUE
000000e1: GT
000000e2: ISZERO
000000e3: PUSH2 0x087e
000000e6: JUMPI
000000e7: PUSH2 0x0002
000000ea: JUMP
000000eb: JUMPDEST
000000ec: PUSH2 0x03d0
000000ef: PUSH1 0x04
000000f1: CALLDATALOAD
000000f2: PUSH1 0x24
000000f4: CALLDATALOAD
000000f5: PUSH1 0x00
000000f7: CALLVALUE
000000f8: GT
000000f9: DUP1
000000fa: PUSH2 0x010c
000000fd: JUMPI
000000fe: POP
000000ff: DUP2
00000100: PUSH1 0x01
00000102: PUSH1 0xa0
00000104: PUSH1 0x02
00000106: EXP
00000107: SUB
00000108: AND
00000109: PUSH1 0x00
0000010b: EQ
0000010c: JUMPDEST
0000010d: ISZERO
0000010e: PUSH2 0x096a
00000111: JUMPI
00000112: PUSH2 0x0002
00000115: JUMP
00000116: JUMPDEST
00000117: PUSH2 0x02ac
0000011a: PUSH1 0x03
0000011c: SLOAD
0000011d: DUP2
0000011e: JUMP
0000011f: JUMPDEST
00000120: PUSH2 0x03d2
00000123: PUSH1 0x02
00000125: SLOAD
00000126: PUSH1 0x01
00000128: PUSH1 0xa0
0000012a: PUSH1 0x02
0000012c: EXP
0000012d: SUB
0000012e: AND
0000012f: DUP2
00000130: JUMP
00000131: JUMPDEST
00000132: PUSH2 0x03ef
00000135: PUSH1 0x04
00000137: CALLDATALOAD
00000138: PUSH1 0x24
0000013a: CALLDATALOAD
0000013b: PUSH1 0x44
0000013d: CALLDATALOAD
0000013e: PUSH1 0x64
00000140: CALLDATALOAD
00000141: PUSH1 0x84
00000143: CALLDATALOAD
00000144: PUSH1 0xa4
00000146: CALLDATALOAD
00000147: PUSH1 0xc4
00000149: CALLDATALOAD
0000014a: PUSH1 0xe4
0000014c: CALLDATALOAD
0000014d: PUSH2 0x0104
00000150: CALLDATALOAD
00000151: PUSH2 0x0124
00000154: CALLDATALOAD
00000155: PUSH2 0x0144
00000158: CALLDATALOAD
00000159: PUSH2 0x0164
0000015c: CALLDATALOAD
0000015d: PUSH1 0x01
0000015f: PUSH1 0xa0
00000161: PUSH1 0x02
00000163: EXP
00000164: SUB
00000165: DUP13
00000166: DUP2
00000167: AND
00000168: PUSH1 0x00
0000016a: SWAP1
0000016b: DUP2
0000016c: MSTORE
0000016d: PUSH1 0x20
0000016f: DUP2
00000170: DUP2
00000171: MSTORE
00000172: PUSH1 0x40
00000174: DUP1
00000175: DUP4
00000176: KECCAK256
00000177: SWAP4
00000178: DUP6
00000179: AND
0000017a: DUP4
0000017b: MSTORE
0000017c: SWAP3
0000017d: SWAP1
0000017e: MSTORE
0000017f: SWAP1
00000180: DUP2
00000181: KECCAK256
00000182: SLOAD
00000183: DUP4
00000184: SWAP1
00000185: LT
00000186: DUP1
00000187: ISZERO
00000188: SWAP1
00000189: PUSH2 0x0a70
0000018c: JUMPI
0000018d: POP
0000018e: DUP3
0000018f: PUSH2 0x0a6d
00000192: DUP15
00000193: DUP15
00000194: DUP15
00000195: DUP15
00000196: DUP15
00000197: DUP15
00000198: DUP15
00000199: DUP15
0000019a: DUP15
0000019b: DUP15
0000019c: PUSH2 0x02e2
0000019f: JUMP
000001a0: JUMPDEST
000001a1: PUSH2 0x03d0
000001a4: PUSH1 0x04
000001a6: CALLDATALOAD
000001a7: PUSH1 0x24
000001a9: CALLDATALOAD
000001aa: PUSH1 0x44
000001ac: CALLDATALOAD
000001ad: PUSH1 0x64
000001af: CALLDATALOAD
000001b0: PUSH1 0x84
000001b2: CALLDATALOAD
000001b3: PUSH1 0xa4
000001b5: CALLDATALOAD
000001b6: PUSH1 0xc4
000001b8: CALLDATALOAD
000001b9: PUSH1 0xe4
000001bb: CALLDATALOAD
000001bc: PUSH2 0x0104
000001bf: CALLDATALOAD
000001c0: PUSH1 0x00
000001c2: CALLVALUE
000001c3: GT
000001c4: ISZERO
000001c5: PUSH2 0x0a7e
000001c8: JUMPI
000001c9: PUSH2 0x0002
000001cc: JUMP
000001cd: JUMPDEST
000001ce: PUSH2 0x03d0
000001d1: PUSH1 0x04
000001d3: CALLDATALOAD
000001d4: PUSH1 0x24
000001d6: CALLDATALOAD
000001d7: PUSH1 0x00
000001d9: CALLVALUE
000001da: GT
000001db: DUP1
000001dc: PUSH2 0x01ee
000001df: JUMPI
000001e0: POP
000001e1: DUP2
000001e2: PUSH1 0x01
000001e4: PUSH1 0xa0
000001e6: PUSH1 0x02
000001e8: EXP
000001e9: SUB
000001ea: AND
000001eb: PUSH1 0x00
000001ed: EQ
000001ee: JUMPDEST
000001ef: ISZERO
000001f0: PUSH2 0x0b0a
000001f3: JUMPI
000001f4: PUSH2 0x0002
000001f7: JUMP
000001f8: JUMPDEST
000001f9: PUSH2 0x02ac
000001fc: PUSH1 0x04
000001fe: SLOAD
000001ff: DUP2
00000200: JUMP
00000201: JUMPDEST
00000202: CALLER
00000203: PUSH1 0x01
00000205: PUSH1 0xa0
00000207: PUSH1 0x02
00000209: EXP
0000020a: SUB
0000020b: AND
0000020c: PUSH1 0x00
0000020e: DUP2
0000020f: DUP2
00000210: MSTORE
00000211: PUSH1 0x00
00000213: DUP1
00000214: MLOAD
00000215: PUSH1 0x20
00000217: PUSH2 0x0ca9
0000021a: DUP4
0000021b: CODECOPY
0000021c: DUP2
0000021d: MLOAD
0000021e: SWAP2
0000021f: MSTORE
00000220: PUSH1 0x20
00000222: SWAP1
00000223: DUP2
00000224: MSTORE
00000225: PUSH1 0x40
00000227: DUP1
00000228: DUP4
00000229: KECCAK256
0000022a: DUP1
0000022b: SLOAD
0000022c: CALLVALUE
0000022d: SWAP1
0000022e: DUP2
0000022f: ADD
00000230: SWAP2
00000231: DUP3
00000232: SWAP1
00000233: SSTORE
00000234: DUP3
00000235: MLOAD
00000236: SWAP5
00000237: DUP6
00000238: MSTORE
00000239: SWAP3
0000023a: DUP5
0000023b: ADD
0000023c: SWAP5
0000023d: SWAP1
0000023e: SWAP5
0000023f: MSTORE
00000240: DUP3
00000241: DUP2
00000242: ADD
00000243: SWAP2
00000244: SWAP1
00000245: SWAP2
00000246: MSTORE
00000247: PUSH1 0x60
00000249: DUP3
0000024a: ADD
0000024b: SWAP3
0000024c: SWAP1
0000024d: SWAP3
0000024e: MSTORE
0000024f: SWAP1
00000250: MLOAD
00000251: PUSH2 0x03d0
00000254: SWAP2
00000255: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
00000276: SWAP2
00000277: SWAP1
00000278: DUP2
00000279: SWAP1
0000027a: SUB
0000027b: PUSH1 0x80
0000027d: ADD
0000027e: SWAP1
0000027f: LOG1
00000280: JUMP
00000281: JUMPDEST
00000282: PUSH1 0x01
00000284: PUSH1 0xa0
00000286: PUSH1 0x02
00000288: EXP
00000289: SUB
0000028a: PUSH1 0x04
0000028c: CALLDATALOAD
0000028d: DUP2
0000028e: AND
0000028f: PUSH1 0x00
00000291: SWAP1
00000292: DUP2
00000293: MSTORE
00000294: PUSH1 0x20
00000296: DUP2
00000297: DUP2
00000298: MSTORE
00000299: PUSH1 0x40
0000029b: DUP1
0000029c: DUP4
0000029d: KECCAK256
0000029e: PUSH1 0x24
000002a0: CALLDATALOAD
000002a1: SWAP5
000002a2: SWAP1
000002a3: SWAP5
000002a4: AND
000002a5: DUP4
000002a6: MSTORE
000002a7: SWAP3
000002a8: SWAP1
000002a9: MSTORE
000002aa: KECCAK256
000002ab: SLOAD
000002ac: JUMPDEST
000002ad: PUSH1 0x40
000002af: DUP1
000002b0: MLOAD
000002b1: SWAP2
000002b2: DUP3
000002b3: MSTORE
000002b4: MLOAD
000002b5: SWAP1
000002b6: DUP2
000002b7: SWAP1
000002b8: SUB
000002b9: PUSH1 0x20
000002bb: ADD
000002bc: SWAP1
000002bd: RETURN
000002be: JUMPDEST
000002bf: PUSH2 0x02ac
000002c2: PUSH1 0x04
000002c4: CALLDATALOAD
000002c5: PUSH1 0x24
000002c7: CALLDATALOAD
000002c8: PUSH1 0x44
000002ca: CALLDATALOAD
000002cb: PUSH1 0x64
000002cd: CALLDATALOAD
000002ce: PUSH1 0x84
000002d0: CALLDATALOAD
000002d1: PUSH1 0xa4
000002d3: CALLDATALOAD
000002d4: PUSH1 0xc4
000002d6: CALLDATALOAD
000002d7: PUSH1 0xe4
000002d9: CALLDATALOAD
000002da: PUSH2 0x0104
000002dd: CALLDATALOAD
000002de: PUSH2 0x0124
000002e1: CALLDATALOAD
000002e2: JUMPDEST
000002e3: PUSH1 0x00
000002e5: PUSH1 0x00
000002e7: PUSH1 0x00
000002e9: PUSH1 0x00
000002eb: PUSH1 0x02
000002ed: DUP15
000002ee: DUP15
000002ef: DUP15
000002f0: DUP15
000002f1: DUP15
000002f2: DUP15
000002f3: PUSH1 0x40
000002f5: MLOAD
000002f6: DUP1
000002f7: DUP8
000002f8: PUSH1 0x01
000002fa: PUSH1 0xa0
000002fc: PUSH1 0x02
000002fe: EXP
000002ff: SUB
00000300: AND
00000301: PUSH1 0x60
00000303: PUSH1 0x02
00000305: EXP
00000306: MUL
00000307: DUP2
00000308: MSTORE
00000309: PUSH1 0x14
0000030b: ADD
0000030c: DUP7
0000030d: DUP2
0000030e: MSTORE
0000030f: PUSH1 0x20
00000311: ADD
00000312: DUP6
00000313: PUSH1 0x01
00000315: PUSH1 0xa0
00000317: PUSH1 0x02
00000319: EXP
0000031a: SUB
0000031b: AND
0000031c: PUSH1 0x60
0000031e: PUSH1 0x02
00000320: EXP
00000321: MUL
00000322: DUP2
00000323: MSTORE
00000324: PUSH1 0x14
00000326: ADD
00000327: DUP5
00000328: DUP2
00000329: MSTORE
0000032a: PUSH1 0x20
0000032c: ADD
0000032d: DUP4
0000032e: DUP2
0000032f: MSTORE
00000330: PUSH1 0x20
00000332: ADD
00000333: DUP3
00000334: DUP2
00000335: MSTORE
00000336: PUSH1 0x20
00000338: ADD
00000339: SWAP7
0000033a: POP
0000033b: POP
0000033c: POP
0000033d: POP
0000033e: POP
0000033f: POP
00000340: POP
00000341: PUSH1 0x20
00000343: PUSH1 0x40
00000345: MLOAD
00000346: DUP1
00000347: DUP4
00000348: SUB
00000349: DUP2
0000034a: PUSH1 0x00
0000034c: DUP7
0000034d: PUSH2 0x61da
00000350: GAS
00000351: SUB
00000352: CALL
00000353: ISZERO
00000354: PUSH2 0x0002
00000357: JUMPI
00000358: POP
00000359: POP
0000035a: PUSH1 0x40
0000035c: DUP1
0000035d: MLOAD
0000035e: DUP1
0000035f: MLOAD
00000360: PUSH1 0xff
00000362: DUP11
00000363: AND
00000364: PUSH1 0x20
00000366: DUP4
00000367: DUP2
00000368: ADD
00000369: SWAP2
0000036a: SWAP1
0000036b: SWAP2
0000036c: MSTORE
0000036d: DUP3
0000036e: DUP5
0000036f: ADD
00000370: DUP11
00000371: SWAP1
00000372: MSTORE
00000373: PUSH1 0x60
00000375: DUP4
00000376: ADD
00000377: DUP10
00000378: SWAP1
00000379: MSTORE
0000037a: SWAP3
0000037b: MLOAD
0000037c: SWAP1
0000037d: SWAP6
0000037e: POP
0000037f: PUSH1 0x01
00000381: PUSH1 0xa0
00000383: PUSH1 0x02
00000385: EXP
00000386: SUB
00000387: DUP12
00000388: AND
00000389: SWAP3
0000038a: PUSH1 0x01
0000038c: SWAP3
0000038d: PUSH1 0x80
0000038f: DUP2
00000390: DUP2
00000391: ADD
00000392: SWAP4
00000393: SWAP2
00000394: DUP3
00000395: SWAP1
00000396: SUB
00000397: ADD
00000398: DUP2
00000399: DUP8
0000039a: DUP7
0000039b: PUSH2 0x61da
0000039e: GAS
0000039f: SUB
000003a0: CALL
000003a1: ISZERO
000003a2: PUSH2 0x0002
000003a5: JUMPI
000003a6: POP
000003a7: POP
000003a8: PUSH1 0x40
000003aa: MLOAD
000003ab: MLOAD
000003ac: PUSH1 0x01
000003ae: PUSH1 0xa0
000003b0: PUSH1 0x02
000003b2: EXP
000003b3: SUB
000003b4: AND
000003b5: EQ
000003b6: DUP1
000003b7: ISZERO
000003b8: PUSH2 0x03c1
000003bb: JUMPI
000003bc: POP
000003bd: DUP10
000003be: NUMBER
000003bf: GT
000003c0: ISZERO
000003c1: JUMPDEST
000003c2: ISZERO
000003c3: ISZERO
000003c4: PUSH2 0x0c5d
000003c7: JUMPI
000003c8: PUSH1 0x00
000003ca: SWAP4
000003cb: POP
000003cc: PUSH2 0x0c4c
000003cf: JUMP
000003d0: JUMPDEST
000003d1: STOP
000003d2: JUMPDEST
000003d3: PUSH1 0x40
000003d5: DUP1
000003d6: MLOAD
000003d7: PUSH1 0x01
000003d9: PUSH1 0xa0
000003db: PUSH1 0x02
000003dd: EXP
000003de: SUB
000003df: SWAP3
000003e0: SWAP1
000003e1: SWAP3
000003e2: AND
000003e3: DUP3
000003e4: MSTORE
000003e5: MLOAD
000003e6: SWAP1
000003e7: DUP2
000003e8: SWAP1
000003e9: SUB
000003ea: PUSH1 0x20
000003ec: ADD
000003ed: SWAP1
000003ee: RETURN
000003ef: JUMPDEST
000003f0: PUSH1 0x40
000003f2: DUP1
000003f3: MLOAD
000003f4: SWAP2
000003f5: ISZERO
000003f6: ISZERO
000003f7: DUP3
000003f8: MSTORE
000003f9: MLOAD
000003fa: SWAP1
000003fb: DUP2
000003fc: SWAP1
000003fd: SUB
000003fe: PUSH1 0x20
00000400: ADD
00000401: SWAP1
00000402: RETURN
00000403: JUMPDEST
00000404: PUSH1 0x02
00000406: DUP13
00000407: DUP13
00000408: DUP13
00000409: DUP13
0000040a: DUP13
0000040b: DUP13
0000040c: PUSH1 0x40
0000040e: MLOAD
0000040f: DUP1
00000410: DUP8
00000411: PUSH1 0x01
00000413: PUSH1 0xa0
00000415: PUSH1 0x02
00000417: EXP
00000418: SUB
00000419: AND
0000041a: PUSH1 0x60
0000041c: PUSH1 0x02
0000041e: EXP
0000041f: MUL
00000420: DUP2
00000421: MSTORE
00000422: PUSH1 0x14
00000424: ADD
00000425: DUP7
00000426: DUP2
00000427: MSTORE
00000428: PUSH1 0x20
0000042a: ADD
0000042b: DUP6
0000042c: PUSH1 0x01
0000042e: PUSH1 0xa0
00000430: PUSH1 0x02
00000432: EXP
00000433: SUB
00000434: AND
00000435: PUSH1 0x60
00000437: PUSH1 0x02
00000439: EXP
0000043a: MUL
0000043b: DUP2
0000043c: MSTORE
0000043d: PUSH1 0x14
0000043f: ADD
00000440: DUP5
00000441: DUP2
00000442: MSTORE
00000443: PUSH1 0x20
00000445: ADD
00000446: DUP4
00000447: DUP2
00000448: MSTORE
00000449: PUSH1 0x20
0000044b: ADD
0000044c: DUP3
0000044d: DUP2
0000044e: MSTORE
0000044f: PUSH1 0x20
00000451: ADD
00000452: SWAP7
00000453: POP
00000454: POP
00000455: POP
00000456: POP
00000457: POP
00000458: POP
00000459: POP
0000045a: PUSH1 0x20
0000045c: PUSH1 0x40
0000045e: MLOAD
0000045f: DUP1
00000460: DUP4
00000461: SUB
00000462: DUP2
00000463: PUSH1 0x00
00000465: DUP7
00000466: PUSH2 0x61da
00000469: GAS
0000046a: SUB
0000046b: CALL
0000046c: ISZERO
0000046d: PUSH2 0x0002
00000470: JUMPI
00000471: POP
00000472: POP
00000473: PUSH1 0x40
00000475: DUP1
00000476: MLOAD
00000477: DUP1
00000478: MLOAD
00000479: PUSH1 0xff
0000047b: DUP9
0000047c: AND
0000047d: PUSH1 0x20
0000047f: DUP4
00000480: DUP2
00000481: ADD
00000482: SWAP2
00000483: SWAP1
00000484: SWAP2
00000485: MSTORE
00000486: DUP3
00000487: DUP5
00000488: ADD
00000489: DUP9
0000048a: SWAP1
0000048b: MSTORE
0000048c: PUSH1 0x60
0000048e: DUP4
0000048f: ADD
00000490: DUP8
00000491: SWAP1
00000492: MSTORE
00000493: SWAP3
00000494: MLOAD
00000495: SWAP1
00000496: SWAP4
00000497: POP
00000498: PUSH1 0x01
0000049a: PUSH1 0xa0
0000049c: PUSH1 0x02
0000049e: EXP
0000049f: SUB
000004a0: DUP10
000004a1: AND
000004a2: SWAP3
000004a3: PUSH1 0x01
000004a5: SWAP3
000004a6: PUSH1 0x80
000004a8: DUP2
000004a9: DUP2
000004aa: ADD
000004ab: SWAP4
000004ac: SWAP2
000004ad: DUP3
000004ae: SWAP1
000004af: SUB
000004b0: ADD
000004b1: DUP2
000004b2: PUSH1 0x00
000004b4: DUP7
000004b5: PUSH2 0x61da
000004b8: GAS
000004b9: SUB
000004ba: CALL
000004bb: ISZERO
000004bc: PUSH2 0x0002
000004bf: JUMPI
000004c0: POP
000004c1: POP
000004c2: PUSH1 0x40
000004c4: MLOAD
000004c5: MLOAD
000004c6: PUSH1 0x01
000004c8: PUSH1 0xa0
000004ca: PUSH1 0x02
000004cc: EXP
000004cd: SUB
000004ce: AND
000004cf: EQ
000004d0: DUP1
000004d1: ISZERO
000004d2: PUSH2 0x04db
000004d5: JUMPI
000004d6: POP
000004d7: DUP8
000004d8: NUMBER
000004d9: GT
000004da: ISZERO
000004db: JUMPDEST
000004dc: DUP1
000004dd: ISZERO
000004de: PUSH2 0x04f8
000004e1: JUMPI
000004e2: POP
000004e3: PUSH1 0x00
000004e5: DUP2
000004e6: DUP2
000004e7: MSTORE
000004e8: PUSH1 0x01
000004ea: PUSH1 0x20
000004ec: MSTORE
000004ed: PUSH1 0x40
000004ef: SWAP1
000004f0: KECCAK256
000004f1: SLOAD
000004f2: DUP3
000004f3: ADD
000004f4: DUP12
000004f5: SWAP1
000004f6: GT
000004f7: ISZERO
000004f8: JUMPDEST
000004f9: DUP1
000004fa: ISZERO
000004fb: PUSH2 0x0529
000004fe: JUMPI
000004ff: POP
00000500: PUSH1 0x01
00000502: PUSH1 0xa0
00000504: PUSH1 0x02
00000506: EXP
00000507: SUB
00000508: DUP13
00000509: DUP2
0000050a: AND
0000050b: PUSH1 0x00
0000050d: SWAP1
0000050e: DUP2
0000050f: MSTORE
00000510: PUSH1 0x20
00000512: DUP2
00000513: DUP2
00000514: MSTORE
00000515: PUSH1 0x40
00000517: DUP1
00000518: DUP4
00000519: KECCAK256
0000051a: CALLER
0000051b: SWAP1
0000051c: SWAP5
0000051d: AND
0000051e: DUP4
0000051f: MSTORE
00000520: SWAP3
00000521: SWAP1
00000522: MSTORE
00000523: KECCAK256
00000524: SLOAD
00000525: DUP3
00000526: SWAP1
00000527: LT
00000528: ISZERO
00000529: JUMPDEST
0000052a: DUP1
0000052b: ISZERO
0000052c: PUSH2 0x055e
0000052f: JUMPI
00000530: POP
00000531: PUSH1 0x01
00000533: PUSH1 0xa0
00000535: PUSH1 0x02
00000537: EXP
00000538: SUB
00000539: DUP11
0000053a: DUP2
0000053b: AND
0000053c: PUSH1 0x00
0000053e: SWAP1
0000053f: DUP2
00000540: MSTORE
00000541: PUSH1 0x20
00000543: DUP2
00000544: DUP2
00000545: MSTORE
00000546: PUSH1 0x40
00000548: DUP1
00000549: DUP4
0000054a: KECCAK256
0000054b: SWAP4
0000054c: DUP11
0000054d: AND
0000054e: DUP4
0000054f: MSTORE
00000550: SWAP3
00000551: SWAP1
00000552: MSTORE
00000553: KECCAK256
00000554: SLOAD
00000555: DUP10
00000556: DUP4
00000557: MUL
00000558: DUP13
00000559: SWAP1
0000055a: DIV
0000055b: SWAP1
0000055c: LT
0000055d: ISZERO
0000055e: JUMPDEST
0000055f: ISZERO
00000560: ISZERO
00000561: PUSH2 0x0569
00000564: JUMPI
00000565: PUSH2 0x0002
00000568: JUMP
00000569: JUMPDEST
0000056a: DUP2
0000056b: PUSH1 0x00
0000056d: PUSH1 0x00
0000056f: POP
00000570: PUSH1 0x00
00000572: DUP15
00000573: PUSH1 0x01
00000575: PUSH1 0xa0
00000577: PUSH1 0x02
00000579: EXP
0000057a: SUB
0000057b: AND
0000057c: DUP2
0000057d: MSTORE
0000057e: PUSH1 0x20
00000580: ADD
00000581: SWAP1
00000582: DUP2
00000583: MSTORE
00000584: PUSH1 0x20
00000586: ADD
00000587: PUSH1 0x00
00000589: KECCAK256
0000058a: PUSH1 0x00
0000058c: POP
0000058d: PUSH1 0x00
0000058f: CALLER
00000590: PUSH1 0x01
00000592: PUSH1 0xa0
00000594: PUSH1 0x02
00000596: EXP
00000597: SUB
00000598: AND
00000599: DUP2
0000059a: MSTORE
0000059b: PUSH1 0x20
0000059d: ADD
0000059e: SWAP1
0000059f: DUP2
000005a0: MSTORE
000005a1: PUSH1 0x20
000005a3: ADD
000005a4: PUSH1 0x00
000005a6: KECCAK256
000005a7: PUSH1 0x00
000005a9: DUP3
000005aa: DUP3
000005ab: DUP3
000005ac: POP
000005ad: SLOAD
000005ae: SUB
000005af: SWAP3
000005b0: POP
000005b1: POP
000005b2: DUP2
000005b3: SWAP1
000005b4: SSTORE
000005b5: POP
000005b6: PUSH8 0x0de0b6b3a7640000
000005bf: PUSH1 0x03
000005c1: PUSH1 0x00
000005c3: POP
000005c4: SLOAD
000005c5: PUSH8 0x0de0b6b3a7640000
000005ce: SUB
000005cf: DUP4
000005d0: MUL
000005d1: DIV
000005d2: PUSH1 0x00
000005d4: PUSH1 0x00
000005d6: POP
000005d7: PUSH1 0x00
000005d9: DUP15
000005da: PUSH1 0x01
000005dc: PUSH1 0xa0
000005de: PUSH1 0x02
000005e0: EXP
000005e1: SUB
000005e2: AND
000005e3: DUP2
000005e4: MSTORE
000005e5: PUSH1 0x20
000005e7: ADD
000005e8: SWAP1
000005e9: DUP2
000005ea: MSTORE
000005eb: PUSH1 0x20
000005ed: ADD
000005ee: PUSH1 0x00
000005f0: KECCAK256
000005f1: PUSH1 0x00
000005f3: POP
000005f4: PUSH1 0x00
000005f6: DUP9
000005f7: PUSH1 0x01
000005f9: PUSH1 0xa0
000005fb: PUSH1 0x02
000005fd: EXP
000005fe: SUB
000005ff: AND
00000600: DUP2
00000601: MSTORE
00000602: PUSH1 0x20
00000604: ADD
00000605: SWAP1
00000606: DUP2
00000607: MSTORE
00000608: PUSH1 0x20
0000060a: ADD
0000060b: PUSH1 0x00
0000060d: KECCAK256
0000060e: PUSH1 0x00
00000610: DUP3
00000611: DUP3
00000612: DUP3
00000613: POP
00000614: SLOAD
00000615: ADD
00000616: SWAP3
00000617: POP
00000618: POP
00000619: DUP2
0000061a: SWAP1
0000061b: SSTORE
0000061c: POP
0000061d: PUSH8 0x0de0b6b3a7640000
00000626: PUSH1 0x03
00000628: PUSH1 0x00
0000062a: POP
0000062b: SLOAD
0000062c: DUP4
0000062d: MUL
0000062e: DIV
0000062f: PUSH1 0x00
00000631: PUSH1 0x00
00000633: POP
00000634: PUSH1 0x00
00000636: DUP15
00000637: PUSH1 0x01
00000639: PUSH1 0xa0
0000063b: PUSH1 0x02
0000063d: EXP
0000063e: SUB
0000063f: AND
00000640: DUP2
00000641: MSTORE
00000642: PUSH1 0x20
00000644: ADD
00000645: SWAP1
00000646: DUP2
00000647: MSTORE
00000648: PUSH1 0x20
0000064a: ADD
0000064b: PUSH1 0x00
0000064d: KECCAK256
0000064e: PUSH1 0x00
00000650: POP
00000651: PUSH1 0x00
00000653: PUSH1 0x02
00000655: PUSH1 0x00
00000657: SWAP1
00000658: SLOAD
00000659: SWAP1
0000065a: PUSH2 0x0100
0000065d: EXP
0000065e: SWAP1
0000065f: DIV
00000660: PUSH1 0x01
00000662: PUSH1 0xa0
00000664: PUSH1 0x02
00000666: EXP
00000667: SUB
00000668: AND
00000669: PUSH1 0x01
0000066b: PUSH1 0xa0
0000066d: PUSH1 0x02
0000066f: EXP
00000670: SUB
00000671: AND
00000672: DUP2
00000673: MSTORE
00000674: PUSH1 0x20
00000676: ADD
00000677: SWAP1
00000678: DUP2
00000679: MSTORE
0000067a: PUSH1 0x20
0000067c: ADD
0000067d: PUSH1 0x00
0000067f: KECCAK256
00000680: PUSH1 0x00
00000682: DUP3
00000683: DUP3
00000684: DUP3
00000685: POP
00000686: SLOAD
00000687: ADD
00000688: SWAP3
00000689: POP
0000068a: POP
0000068b: DUP2
0000068c: SWAP1
0000068d: SSTORE
0000068e: POP
0000068f: DUP11
00000690: DUP3
00000691: DUP11
00000692: MUL
00000693: DIV
00000694: PUSH1 0x00
00000696: PUSH1 0x00
00000698: POP
00000699: PUSH1 0x00
0000069b: DUP13
0000069c: PUSH1 0x01
0000069e: PUSH1 0xa0
000006a0: PUSH1 0x02
000006a2: EXP
000006a3: SUB
000006a4: AND
000006a5: DUP2
000006a6: MSTORE
000006a7: PUSH1 0x20
000006a9: ADD
000006aa: SWAP1
000006ab: DUP2
000006ac: MSTORE
000006ad: PUSH1 0x20
000006af: ADD
000006b0: PUSH1 0x00
000006b2: KECCAK256
000006b3: PUSH1 0x00
000006b5: POP
000006b6: PUSH1 0x00
000006b8: DUP9
000006b9: PUSH1 0x01
000006bb: PUSH1 0xa0
000006bd: PUSH1 0x02
000006bf: EXP
000006c0: SUB
000006c1: AND
000006c2: DUP2
000006c3: MSTORE
000006c4: PUSH1 0x20
000006c6: ADD
000006c7: SWAP1
000006c8: DUP2
000006c9: MSTORE
000006ca: PUSH1 0x20
000006cc: ADD
000006cd: PUSH1 0x00
000006cf: KECCAK256
000006d0: PUSH1 0x00
000006d2: DUP3
000006d3: DUP3
000006d4: DUP3
000006d5: POP
000006d6: SLOAD
000006d7: SUB
000006d8: SWAP3
000006d9: POP
000006da: POP
000006db: DUP2
000006dc: SWAP1
000006dd: SSTORE
000006de: POP
000006df: PUSH8 0x0de0b6b3a7640000
000006e8: DUP12
000006e9: DUP4
000006ea: DUP12
000006eb: PUSH1 0x04
000006ed: PUSH1 0x00
000006ef: POP
000006f0: SLOAD
000006f1: PUSH8 0x0de0b6b3a7640000
000006fa: SUB
000006fb: MUL
000006fc: MUL
000006fd: DIV
000006fe: DIV
000006ff: PUSH1 0x00
00000701: PUSH1 0x00
00000703: POP
00000704: PUSH1 0x00
00000706: DUP13
00000707: PUSH1 0x01
00000709: PUSH1 0xa0
0000070b: PUSH1 0x02
0000070d: EXP
0000070e: SUB
0000070f: AND
00000710: DUP2
00000711: MSTORE
00000712: PUSH1 0x20
00000714: ADD
00000715: SWAP1
00000716: DUP2
00000717: MSTORE
00000718: PUSH1 0x20
0000071a: ADD
0000071b: PUSH1 0x00
0000071d: KECCAK256
0000071e: PUSH1 0x00
00000720: POP
00000721: PUSH1 0x00
00000723: CALLER
00000724: PUSH1 0x01
00000726: PUSH1 0xa0
00000728: PUSH1 0x02
0000072a: EXP
0000072b: SUB
0000072c: AND
0000072d: DUP2
0000072e: MSTORE
0000072f: PUSH1 0x20
00000731: ADD
00000732: SWAP1
00000733: DUP2
00000734: MSTORE
00000735: PUSH1 0x20
00000737: ADD
00000738: PUSH1 0x00
0000073a: KECCAK256
0000073b: PUSH1 0x00
0000073d: DUP3
0000073e: DUP3
0000073f: DUP3
00000740: POP
00000741: SLOAD
00000742: ADD
00000743: SWAP3
00000744: POP
00000745: POP
00000746: DUP2
00000747: SWAP1
00000748: SSTORE
00000749: POP
0000074a: PUSH8 0x0de0b6b3a7640000
00000753: DUP12
00000754: DUP4
00000755: DUP12
00000756: PUSH1 0x04
00000758: PUSH1 0x00
0000075a: POP
0000075b: SLOAD
0000075c: MUL
0000075d: MUL
0000075e: DIV
0000075f: DIV
00000760: PUSH1 0x00
00000762: PUSH1 0x00
00000764: POP
00000765: PUSH1 0x00
00000767: DUP13
00000768: PUSH1 0x01
0000076a: PUSH1 0xa0
0000076c: PUSH1 0x02
0000076e: EXP
0000076f: SUB
00000770: AND
00000771: DUP2
00000772: MSTORE
00000773: PUSH1 0x20
00000775: ADD
00000776: SWAP1
00000777: DUP2
00000778: MSTORE
00000779: PUSH1 0x20
0000077b: ADD
0000077c: PUSH1 0x00
0000077e: KECCAK256
0000077f: PUSH1 0x00
00000781: POP
00000782: PUSH1 0x00
00000784: PUSH1 0x02
00000786: PUSH1 0x00
00000788: SWAP1
00000789: SLOAD
0000078a: SWAP1
0000078b: PUSH2 0x0100
0000078e: EXP
0000078f: SWAP1
00000790: DIV
00000791: PUSH1 0x01
00000793: PUSH1 0xa0
00000795: PUSH1 0x02
00000797: EXP
00000798: SUB
00000799: AND
0000079a: PUSH1 0x01
0000079c: PUSH1 0xa0
0000079e: PUSH1 0x02
000007a0: EXP
000007a1: SUB
000007a2: AND
000007a3: DUP2
000007a4: MSTORE
000007a5: PUSH1 0x20
000007a7: ADD
000007a8: SWAP1
000007a9: DUP2
000007aa: MSTORE
000007ab: PUSH1 0x20
000007ad: ADD
000007ae: PUSH1 0x00
000007b0: KECCAK256
000007b1: PUSH1 0x00
000007b3: DUP3
000007b4: DUP3
000007b5: DUP3
000007b6: POP
000007b7: SLOAD
000007b8: ADD
000007b9: SWAP3
000007ba: POP
000007bb: POP
000007bc: DUP2
000007bd: SWAP1
000007be: SSTORE
000007bf: POP
000007c0: DUP2
000007c1: PUSH1 0x01
000007c3: PUSH1 0x00
000007c5: POP
000007c6: PUSH1 0x00
000007c8: DUP4
000007c9: PUSH1 0x00
000007cb: NOT
000007cc: AND
000007cd: DUP2
000007ce: MSTORE
000007cf: PUSH1 0x20
000007d1: ADD
000007d2: SWAP1
000007d3: DUP2
000007d4: MSTORE
000007d5: PUSH1 0x20
000007d7: ADD
000007d8: PUSH1 0x00
000007da: KECCAK256
000007db: PUSH1 0x00
000007dd: DUP3
000007de: DUP3
000007df: DUP3
000007e0: POP
000007e1: SLOAD
000007e2: ADD
000007e3: SWAP3
000007e4: POP
000007e5: POP
000007e6: DUP2
000007e7: SWAP1
000007e8: SSTORE
000007e9: POP
000007ea: PUSH32 0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d
0000080b: DUP13
0000080c: DUP4
0000080d: DUP13
0000080e: DUP15
0000080f: DUP7
00000810: DUP15
00000811: MUL
00000812: DIV
00000813: DUP11
00000814: CALLER
00000815: PUSH1 0x40
00000817: MLOAD
00000818: DUP1
00000819: DUP8
0000081a: PUSH1 0x01
0000081c: PUSH1 0xa0
0000081e: PUSH1 0x02
00000820: EXP
00000821: SUB
00000822: AND
00000823: DUP2
00000824: MSTORE
00000825: PUSH1 0x20
00000827: ADD
00000828: DUP7
00000829: DUP2
0000082a: MSTORE
0000082b: PUSH1 0x20
0000082d: ADD
0000082e: DUP6
0000082f: PUSH1 0x01
00000831: PUSH1 0xa0
00000833: PUSH1 0x02
00000835: EXP
00000836: SUB
00000837: AND
00000838: DUP2
00000839: MSTORE
0000083a: PUSH1 0x20
0000083c: ADD
0000083d: DUP5
0000083e: DUP2
0000083f: MSTORE
00000840: PUSH1 0x20
00000842: ADD
00000843: DUP4
00000844: PUSH1 0x01
00000846: PUSH1 0xa0
00000848: PUSH1 0x02
0000084a: EXP
0000084b: SUB
0000084c: AND
0000084d: DUP2
0000084e: MSTORE
0000084f: PUSH1 0x20
00000851: ADD
00000852: DUP3
00000853: PUSH1 0x01
00000855: PUSH1 0xa0
00000857: PUSH1 0x02
00000859: EXP
0000085a: SUB
0000085b: AND
0000085c: DUP2
0000085d: MSTORE
0000085e: PUSH1 0x20
00000860: ADD
00000861: SWAP7
00000862: POP
00000863: POP
00000864: POP
00000865: POP
00000866: POP
00000867: POP
00000868: POP
00000869: PUSH1 0x40
0000086b: MLOAD
0000086c: DUP1
0000086d: SWAP2
0000086e: SUB
0000086f: SWAP1
00000870: LOG1
00000871: POP
00000872: POP
00000873: POP
00000874: POP
00000875: POP
00000876: POP
00000877: POP
00000878: POP
00000879: POP
0000087a: POP
0000087b: POP
0000087c: POP
0000087d: JUMP
0000087e: JUMPDEST
0000087f: CALLER
00000880: PUSH1 0x01
00000882: PUSH1 0xa0
00000884: PUSH1 0x02
00000886: EXP
00000887: SUB
00000888: AND
00000889: PUSH1 0x00
0000088b: SWAP1
0000088c: DUP2
0000088d: MSTORE
0000088e: PUSH1 0x00
00000890: DUP1
00000891: MLOAD
00000892: PUSH1 0x20
00000894: PUSH2 0x0ca9
00000897: DUP4
00000898: CODECOPY
00000899: DUP2
0000089a: MLOAD
0000089b: SWAP2
0000089c: MSTORE
0000089d: PUSH1 0x20
0000089f: MSTORE
000008a0: PUSH1 0x40
000008a2: SWAP1
000008a3: KECCAK256
000008a4: SLOAD
000008a5: DUP2
000008a6: SWAP1
000008a7: LT
000008a8: ISZERO
000008a9: PUSH2 0x08b1
000008ac: JUMPI
000008ad: PUSH2 0x0002
000008b0: JUMP
000008b1: JUMPDEST
000008b2: CALLER
000008b3: PUSH1 0x01
000008b5: PUSH1 0xa0
000008b7: PUSH1 0x02
000008b9: EXP
000008ba: SUB
000008bb: AND
000008bc: PUSH1 0x00
000008be: DUP2
000008bf: DUP2
000008c0: MSTORE
000008c1: PUSH1 0x00
000008c3: DUP1
000008c4: MLOAD
000008c5: PUSH1 0x20
000008c7: PUSH2 0x0ca9
000008ca: DUP4
000008cb: CODECOPY
000008cc: DUP2
000008cd: MLOAD
000008ce: SWAP2
000008cf: MSTORE
000008d0: PUSH1 0x20
000008d2: MSTORE
000008d3: PUSH1 0x40
000008d5: DUP1
000008d6: DUP3
000008d7: KECCAK256
000008d8: DUP1
000008d9: SLOAD
000008da: DUP6
000008db: SWAP1
000008dc: SUB
000008dd: SWAP1
000008de: SSTORE
000008df: MLOAD
000008e0: DUP4
000008e1: SWAP2
000008e2: DUP2
000008e3: DUP2
000008e4: DUP2
000008e5: DUP6
000008e6: DUP8
000008e7: PUSH2 0x8502
000008ea: GAS
000008eb: SUB
000008ec: CALL
000008ed: SWAP3
000008ee: POP
000008ef: POP
000008f0: POP
000008f1: ISZERO
000008f2: ISZERO
000008f3: PUSH2 0x08fb
000008f6: JUMPI
000008f7: PUSH2 0x0002
000008fa: JUMP
000008fb: JUMPDEST
000008fc: CALLER
000008fd: PUSH1 0x01
000008ff: PUSH1 0xa0
00000901: PUSH1 0x02
00000903: EXP
00000904: SUB
00000905: AND
00000906: PUSH1 0x00
00000908: DUP2
00000909: DUP2
0000090a: MSTORE
0000090b: PUSH1 0x00
0000090d: DUP1
0000090e: MLOAD
0000090f: PUSH1 0x20
00000911: PUSH2 0x0ca9
00000914: DUP4
00000915: CODECOPY
00000916: DUP2
00000917: MLOAD
00000918: SWAP2
00000919: MSTORE
0000091a: PUSH1 0x20
0000091c: SWAP1
0000091d: DUP2
0000091e: MSTORE
0000091f: PUSH1 0x40
00000921: DUP1
00000922: DUP4
00000923: KECCAK256
00000924: SLOAD
00000925: DUP2
00000926: MLOAD
00000927: SWAP4
00000928: DUP5
00000929: MSTORE
0000092a: SWAP2
0000092b: DUP4
0000092c: ADD
0000092d: SWAP4
0000092e: SWAP1
0000092f: SWAP4
00000930: MSTORE
00000931: DUP2
00000932: DUP4
00000933: ADD
00000934: DUP5
00000935: SWAP1
00000936: MSTORE
00000937: PUSH1 0x60
00000939: DUP3
0000093a: ADD
0000093b: MSTORE
0000093c: SWAP1
0000093d: MLOAD
0000093e: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567
0000095f: SWAP2
00000960: DUP2
00000961: SWAP1
00000962: SUB
00000963: PUSH1 0x80
00000965: ADD
00000966: SWAP1
00000967: LOG1
00000968: POP
00000969: JUMP
0000096a: JUMPDEST
0000096b: DUP2
0000096c: PUSH1 0x01
0000096e: PUSH1 0xa0
00000970: PUSH1 0x02
00000972: EXP
00000973: SUB
00000974: AND
00000975: PUSH4 0x23b872dd
0000097a: CALLER
0000097b: ADDRESS
0000097c: DUP5
0000097d: PUSH1 0x40
0000097f: MLOAD
00000980: DUP5
00000981: PUSH1 0xe0
00000983: PUSH1 0x02
00000985: EXP
00000986: MUL
00000987: DUP2
00000988: MSTORE
00000989: PUSH1 0x04
0000098b: ADD
0000098c: DUP1
0000098d: DUP5
0000098e: PUSH1 0x01
00000990: PUSH1 0xa0
00000992: PUSH1 0x02
00000994: EXP
00000995: SUB
00000996: AND
00000997: DUP2
00000998: MSTORE
00000999: PUSH1 0x20
0000099b: ADD
0000099c: DUP4
0000099d: PUSH1 0x01
0000099f: PUSH1 0xa0
000009a1: PUSH1 0x02
000009a3: EXP
000009a4: SUB
000009a5: AND
000009a6: DUP2
000009a7: MSTORE
000009a8: PUSH1 0x20
000009aa: ADD
000009ab: DUP3
000009ac: DUP2
000009ad: MSTORE
000009ae: PUSH1 0x20
000009b0: ADD
000009b1: SWAP4
000009b2: POP
000009b3: POP
000009b4: POP
000009b5: POP
000009b6: PUSH1 0x20
000009b8: PUSH1 0x40
000009ba: MLOAD
000009bb: DUP1
000009bc: DUP4
000009bd: SUB
000009be: DUP2
000009bf: PUSH1 0x00
000009c1: DUP8
000009c2: PUSH2 0x61da
000009c5: GAS
000009c6: SUB
000009c7: CALL
000009c8: ISZERO
000009c9: PUSH2 0x0002
000009cc: JUMPI
000009cd: POP
000009ce: POP
000009cf: PUSH1 0x40
000009d1: MLOAD
000009d2: MLOAD
000009d3: ISZERO
000009d4: ISZERO
000009d5: SWAP1
000009d6: POP
000009d7: PUSH2 0x09df
000009da: JUMPI
000009db: PUSH2 0x0002
000009de: JUMP
000009df: JUMPDEST
000009e0: PUSH1 0x01
000009e2: PUSH1 0xa0
000009e4: PUSH1 0x02
000009e6: EXP
000009e7: SUB
000009e8: DUP3
000009e9: DUP2
000009ea: AND
000009eb: PUSH1 0x00
000009ed: DUP2
000009ee: DUP2
000009ef: MSTORE
000009f0: PUSH1 0x20
000009f2: DUP2
000009f3: DUP2
000009f4: MSTORE
000009f5: PUSH1 0x40
000009f7: DUP1
000009f8: DUP4
000009f9: KECCAK256
000009fa: CALLER
000009fb: SWAP1
000009fc: SWAP6
000009fd: AND
000009fe: DUP1
000009ff: DUP5
00000a00: MSTORE
00000a01: SWAP5
00000a02: DUP3
00000a03: MSTORE
00000a04: SWAP2
00000a05: DUP3
00000a06: SWAP1
00000a07: KECCAK256
00000a08: DUP1
00000a09: SLOAD
00000a0a: DUP7
00000a0b: ADD
00000a0c: SWAP1
00000a0d: DUP2
00000a0e: SWAP1
00000a0f: SSTORE
00000a10: DUP3
00000a11: MLOAD
00000a12: SWAP4
00000a13: DUP5
00000a14: MSTORE
00000a15: SWAP1
00000a16: DUP4
00000a17: ADD
00000a18: SWAP4
00000a19: SWAP1
00000a1a: SWAP4
00000a1b: MSTORE
00000a1c: DUP2
00000a1d: DUP2
00000a1e: ADD
00000a1f: DUP5
00000a20: SWAP1
00000a21: MSTORE
00000a22: PUSH1 0x60
00000a24: DUP3
00000a25: ADD
00000a26: SWAP3
00000a27: SWAP1
00000a28: SWAP3
00000a29: MSTORE
00000a2a: SWAP1
00000a2b: MLOAD
00000a2c: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
00000a4d: SWAP2
00000a4e: DUP2
00000a4f: SWAP1
00000a50: SUB
00000a51: PUSH1 0x80
00000a53: ADD
00000a54: SWAP1
00000a55: LOG1
00000a56: POP
00000a57: POP
00000a58: JUMP
00000a59: JUMPDEST
00000a5a: POP
00000a5b: PUSH1 0x01
00000a5d: JUMPDEST
00000a5e: SWAP13
00000a5f: SWAP12
00000a60: POP
00000a61: POP
00000a62: POP
00000a63: POP
00000a64: POP
00000a65: POP
00000a66: POP
00000a67: POP
00000a68: POP
00000a69: POP
00000a6a: POP
00000a6b: POP
00000a6c: JUMP
00000a6d: JUMPDEST
00000a6e: LT
00000a6f: ISZERO
00000a70: JUMPDEST
00000a71: ISZERO
00000a72: ISZERO
00000a73: PUSH2 0x0a59
00000a76: JUMPI
00000a77: POP
00000a78: PUSH1 0x00
00000a7a: PUSH2 0x0a5d
00000a7d: JUMP
00000a7e: JUMPDEST
00000a7f: PUSH1 0x40
00000a81: DUP1
00000a82: MLOAD
00000a83: PUSH1 0x01
00000a85: PUSH1 0xa0
00000a87: PUSH1 0x02
00000a89: EXP
00000a8a: SUB
00000a8b: DUP12
00000a8c: DUP2
00000a8d: AND
00000a8e: DUP3
00000a8f: MSTORE
00000a90: PUSH1 0x20
00000a92: DUP3
00000a93: ADD
00000a94: DUP12
00000a95: SWAP1
00000a96: MSTORE
00000a97: DUP10
00000a98: DUP2
00000a99: AND
00000a9a: DUP3
00000a9b: DUP5
00000a9c: ADD
00000a9d: MSTORE
00000a9e: PUSH1 0x60
00000aa0: DUP3
00000aa1: ADD
00000aa2: DUP10
00000aa3: SWAP1
00000aa4: MSTORE
00000aa5: PUSH1 0x80
00000aa7: DUP3
00000aa8: ADD
00000aa9: DUP9
00000aaa: SWAP1
00000aab: MSTORE
00000aac: PUSH1 0xa0
00000aae: DUP3
00000aaf: ADD
00000ab0: DUP8
00000ab1: SWAP1
00000ab2: MSTORE
00000ab3: CALLER
00000ab4: AND
00000ab5: PUSH1 0xc0
00000ab7: DUP3
00000ab8: ADD
00000ab9: MSTORE
00000aba: PUSH1 0xff
00000abc: DUP6
00000abd: AND
00000abe: PUSH1 0xe0
00000ac0: DUP3
00000ac1: ADD
00000ac2: MSTORE
00000ac3: PUSH2 0x0100
00000ac6: DUP2
00000ac7: ADD
00000ac8: DUP5
00000ac9: SWAP1
00000aca: MSTORE
00000acb: PUSH2 0x0120
00000ace: DUP2
00000acf: ADD
00000ad0: DUP4
00000ad1: SWAP1
00000ad2: MSTORE
00000ad3: SWAP1
00000ad4: MLOAD
00000ad5: PUSH32 0x91daf02b6d1454acd74c097a67e389a9d9371da3ff51366947022dc36748ce4d
00000af6: SWAP2
00000af7: DUP2
00000af8: SWAP1
00000af9: SUB
00000afa: PUSH2 0x0140
00000afd: ADD
00000afe: SWAP1
00000aff: LOG1
00000b00: POP
00000b01: POP
00000b02: POP
00000b03: POP
00000b04: POP
00000b05: POP
00000b06: POP
00000b07: POP
00000b08: POP
00000b09: JUMP
00000b0a: JUMPDEST
00000b0b: PUSH1 0x01
00000b0d: PUSH1 0xa0
00000b0f: PUSH1 0x02
00000b11: EXP
00000b12: SUB
00000b13: DUP3
00000b14: DUP2
00000b15: AND
00000b16: PUSH1 0x00
00000b18: SWAP1
00000b19: DUP2
00000b1a: MSTORE
00000b1b: PUSH1 0x20
00000b1d: DUP2
00000b1e: DUP2
00000b1f: MSTORE
00000b20: PUSH1 0x40
00000b22: DUP1
00000b23: DUP4
00000b24: KECCAK256
00000b25: CALLER
00000b26: SWAP1
00000b27: SWAP5
00000b28: AND
00000b29: DUP4
00000b2a: MSTORE
00000b2b: SWAP3
00000b2c: SWAP1
00000b2d: MSTORE
00000b2e: KECCAK256
00000b2f: SLOAD
00000b30: DUP2
00000b31: SWAP1
00000b32: LT
00000b33: ISZERO
00000b34: PUSH2 0x0b3c
00000b37: JUMPI
00000b38: PUSH2 0x0002
00000b3b: JUMP
00000b3c: JUMPDEST
00000b3d: PUSH1 0x01
00000b3f: PUSH1 0xa0
00000b41: PUSH1 0x02
00000b43: EXP
00000b44: SUB
00000b45: DUP3
00000b46: DUP2
00000b47: AND
00000b48: PUSH1 0x00
00000b4a: DUP2
00000b4b: DUP2
00000b4c: MSTORE
00000b4d: PUSH1 0x20
00000b4f: DUP2
00000b50: DUP2
00000b51: MSTORE
00000b52: PUSH1 0x40
00000b54: DUP1
00000b55: DUP4
00000b56: KECCAK256
00000b57: CALLER
00000b58: SWAP1
00000b59: SWAP6
00000b5a: AND
00000b5b: DUP1
00000b5c: DUP5
00000b5d: MSTORE
00000b5e: SWAP5
00000b5f: DUP3
00000b60: MSTORE
00000b61: DUP1
00000b62: DUP4
00000b63: KECCAK256
00000b64: DUP1
00000b65: SLOAD
00000b66: DUP8
00000b67: SWAP1
00000b68: SUB
00000b69: SWAP1
00000b6a: SSTORE
00000b6b: DUP1
00000b6c: MLOAD
00000b6d: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00000b8e: DUP2
00000b8f: MSTORE
00000b90: PUSH1 0x04
00000b92: DUP2
00000b93: ADD
00000b94: SWAP6
00000b95: SWAP1
00000b96: SWAP6
00000b97: MSTORE
00000b98: PUSH1 0x24
00000b9a: DUP6
00000b9b: ADD
00000b9c: DUP7
00000b9d: SWAP1
00000b9e: MSTORE
00000b9f: MLOAD
00000ba0: SWAP3
00000ba1: SWAP4
00000ba2: PUSH4 0xa9059cbb
00000ba7: SWAP4
00000ba8: PUSH1 0x44
00000baa: DUP3
00000bab: DUP2
00000bac: ADD
00000bad: SWAP5
00000bae: SWAP2
00000baf: SWAP3
00000bb0: DUP4
00000bb1: SWAP1
00000bb2: SUB
00000bb3: ADD
00000bb4: SWAP1
00000bb5: DUP3
00000bb6: SWAP1
00000bb7: DUP8
00000bb8: PUSH2 0x61da
00000bbb: GAS
00000bbc: SUB
00000bbd: CALL
00000bbe: ISZERO
00000bbf: PUSH2 0x0002
00000bc2: JUMPI
00000bc3: POP
00000bc4: POP
00000bc5: PUSH1 0x40
00000bc7: MLOAD
00000bc8: MLOAD
00000bc9: ISZERO
00000bca: ISZERO
00000bcb: SWAP1
00000bcc: POP
00000bcd: PUSH2 0x0bd5
00000bd0: JUMPI
00000bd1: PUSH2 0x0002
00000bd4: JUMP
00000bd5: JUMPDEST
00000bd6: PUSH1 0x01
00000bd8: PUSH1 0xa0
00000bda: PUSH1 0x02
00000bdc: EXP
00000bdd: SUB
00000bde: DUP3
00000bdf: DUP2
00000be0: AND
00000be1: PUSH1 0x00
00000be3: DUP2
00000be4: DUP2
00000be5: MSTORE
00000be6: PUSH1 0x20
00000be8: DUP2
00000be9: DUP2
00000bea: MSTORE
00000beb: PUSH1 0x40
00000bed: DUP1
00000bee: DUP4
00000bef: KECCAK256
00000bf0: CALLER
00000bf1: SWAP1
00000bf2: SWAP6
00000bf3: AND
00000bf4: DUP1
00000bf5: DUP5
00000bf6: MSTORE
00000bf7: SWAP5
00000bf8: DUP3
00000bf9: MSTORE
00000bfa: SWAP2
00000bfb: DUP3
00000bfc: SWAP1
00000bfd: KECCAK256
00000bfe: SLOAD
00000bff: DUP3
00000c00: MLOAD
00000c01: SWAP4
00000c02: DUP5
00000c03: MSTORE
00000c04: SWAP1
00000c05: DUP4
00000c06: ADD
00000c07: SWAP4
00000c08: SWAP1
00000c09: SWAP4
00000c0a: MSTORE
00000c0b: DUP2
00000c0c: DUP2
00000c0d: ADD
00000c0e: DUP5
00000c0f: SWAP1
00000c10: MSTORE
00000c11: PUSH1 0x60
00000c13: DUP3
00000c14: ADD
00000c15: SWAP3
00000c16: SWAP1
00000c17: SWAP3
00000c18: MSTORE
00000c19: SWAP1
00000c1a: MLOAD
00000c1b: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567
00000c3c: SWAP2
00000c3d: DUP2
00000c3e: SWAP1
00000c3f: SUB
00000c40: PUSH1 0x80
00000c42: ADD
00000c43: SWAP1
00000c44: LOG1
00000c45: POP
00000c46: POP
00000c47: JUMP
00000c48: JUMPDEST
00000c49: DUP1
00000c4a: SWAP4
00000c4b: POP
00000c4c: JUMPDEST
00000c4d: POP
00000c4e: POP
00000c4f: POP
00000c50: SWAP11
00000c51: SWAP10
00000c52: POP
00000c53: POP
00000c54: POP
00000c55: POP
00000c56: POP
00000c57: POP
00000c58: POP
00000c59: POP
00000c5a: POP
00000c5b: POP
00000c5c: JUMP
00000c5d: JUMPDEST
00000c5e: POP
00000c5f: POP
00000c60: PUSH1 0x00
00000c62: DUP2
00000c63: DUP2
00000c64: MSTORE
00000c65: PUSH1 0x01
00000c67: PUSH1 0x20
00000c69: SWAP1
00000c6a: DUP2
00000c6b: MSTORE
00000c6c: PUSH1 0x40
00000c6e: DUP1
00000c6f: DUP4
00000c70: KECCAK256
00000c71: SLOAD
00000c72: PUSH1 0x01
00000c74: PUSH1 0xa0
00000c76: PUSH1 0x02
00000c78: EXP
00000c79: SUB
00000c7a: DUP15
00000c7b: DUP2
00000c7c: AND
00000c7d: DUP6
00000c7e: MSTORE
00000c7f: DUP5
00000c80: DUP5
00000c81: MSTORE
00000c82: DUP3
00000c83: DUP6
00000c84: KECCAK256
00000c85: SWAP1
00000c86: DUP12
00000c87: AND
00000c88: DUP6
00000c89: MSTORE
00000c8a: SWAP1
00000c8b: SWAP3
00000c8c: MSTORE
00000c8d: SWAP1
00000c8e: SWAP2
00000c8f: KECCAK256
00000c90: SLOAD
00000c91: SWAP1
00000c92: DUP13
00000c93: SUB
00000c94: SWAP1
00000c95: DUP13
00000c96: MUL
00000c97: DUP11
00000c98: SWAP1
00000c99: DIV
00000c9a: DUP1
00000c9b: DUP3
00000c9c: LT
00000c9d: ISZERO
00000c9e: PUSH2 0x0c48
00000ca1: JUMPI
00000ca2: DUP2
00000ca3: SWAP4
00000ca4: POP
00000ca5: PUSH2 0x0c4c
00000ca8: JUMP
00000ca9: UNKNOWN(0xAD)
00000caa: ORIGIN
00000cab: UNKNOWN(0x28)
00000cac: UNKNOWN(0xB6)
00000cad: PUSH23 0xf7d3cd4284a5443f17f1962b36e491b30a40b2405849e5
00000cc5: SWAP8
00000cc6: UNKNOWN(0xBA)
00000cc7: PUSH0
00000cc8: UNKNOWN(0xB5)

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high access_control codex Minter can be set by any address once, enabling unauthorized mint/reset 85 no
view
evidence_json
{
    "evidence": "setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.",
    "locations": [
        "contracts/Contract.sol:104",
        "contracts/Contract.sol:105",
        "contracts/Contract.sol:111",
        "contracts/Contract.sol:120"
    ],
    "recommendation": "Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.",
    "exploit_scenario": "If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting."
}
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": "0x0a19b14a",
            "selector": "0x0a19b14a",
            "calldata_variants": [
                "0x0a19b14a",
                "0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2e1a7d4d",
            "selector": "0x2e1a7d4d",
            "calldata_variants": [
                "0x2e1a7d4d",
                "0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x338b5dea",
            "selector": "0x338b5dea",
            "calldata_variants": [
                "0x338b5dea",
                "0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x57786394",
            "selector": "0x57786394",
            "calldata_variants": [
                "0x57786394",
                "0x577863940000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x65e17c9d",
            "selector": "0x65e17c9d",
            "calldata_variants": [
                "0x65e17c9d",
                "0x65e17c9d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6c86888b",
            "selector": "0x6c86888b",
            "calldata_variants": [
                "0x6c86888b",
                "0x6c86888b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x93f0bb51",
            "selector": "0x93f0bb51",
            "calldata_variants": [
                "0x93f0bb51",
                "0x93f0bb510000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 3242,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 yes yes
view
trace_id: 0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd
call_targets: 0x0000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000002, 0xc6b330df38d6ef288c953f1f2835723531073ce2
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000001",
        "0x0000000000000000000000000000000000000002",
        "0xc6b330df38d6ef288c953f1f2835723531073ce2"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x0a19b14a",
            "selector": "0x0a19b14a",
            "calldata_variants": [
                "0x0a19b14a",
                "0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2e1a7d4d",
            "selector": "0x2e1a7d4d",
            "calldata_variants": [
                "0x2e1a7d4d",
                "0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x338b5dea",
            "selector": "0x338b5dea",
            "calldata_variants": [
                "0x338b5dea",
                "0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x57786394",
            "selector": "0x57786394",
            "calldata_variants": [
                "0x57786394",
                "0x577863940000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x65e17c9d",
            "selector": "0x65e17c9d",
            "calldata_variants": [
                "0x65e17c9d",
                "0x65e17c9d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6c86888b",
            "selector": "0x6c86888b",
            "calldata_variants": [
                "0x6c86888b",
                "0x6c86888b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x93f0bb51",
            "selector": "0x93f0bb51",
            "calldata_variants": [
                "0x93f0bb51",
                "0x93f0bb510000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 850,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 928,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1131,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 7,
    "guards_detected": [
        {
            "pc": 3242,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 7
}
medium math codex Unchecked multiplication/division in trade and volume calculations can overflow 75 no
view
evidence_json
{
    "evidence": "Multiplications are performed without overflow checks in trade and availableVolume calculations.",
    "locations": [
        "contracts/Contract.sol:197",
        "contracts/Contract.sol:202",
        "contracts/Contract.sol:203",
        "contracts/Contract.sol:223",
        "contracts/Contract.sol:224"
    ],
    "recommendation": "Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).",
    "exploit_scenario": "Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction."
}
medium other detector ETH value transfer possible 40 yes yes
view
trace_id: 0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd
call_targets: 0x0000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000002, 0xc6b330df38d6ef288c953f1f2835723531073ce2
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000001",
        "0x0000000000000000000000000000000000000002",
        "0xc6b330df38d6ef288c953f1f2835723531073ce2"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x0a19b14a",
            "selector": "0x0a19b14a",
            "calldata_variants": [
                "0x0a19b14a",
                "0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2e1a7d4d",
            "selector": "0x2e1a7d4d",
            "calldata_variants": [
                "0x2e1a7d4d",
                "0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x338b5dea",
            "selector": "0x338b5dea",
            "calldata_variants": [
                "0x338b5dea",
                "0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x57786394",
            "selector": "0x57786394",
            "calldata_variants": [
                "0x57786394",
                "0x577863940000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x65e17c9d",
            "selector": "0x65e17c9d",
            "calldata_variants": [
                "0x65e17c9d",
                "0x65e17c9d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6c86888b",
            "selector": "0x6c86888b",
            "calldata_variants": [
                "0x6c86888b",
                "0x6c86888b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x93f0bb51",
            "selector": "0x93f0bb51",
            "calldata_variants": [
                "0x93f0bb51",
                "0x93f0bb510000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 850,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 928,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1131,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 7,
    "guards_detected": [
        {
            "pc": 3242,
            "type": "tx_origin_used"
        }
    ]
}
medium auth codex Order signatures lack proper domain separation and user binding in hash 75 no
view
evidence_json
{
    "evidence": "Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.",
    "locations": [
        "contracts/Contract.sol:191",
        "contracts/Contract.sol:195",
        "contracts/Contract.sol:205",
        "contracts/Contract.sol:218"
    ],
    "recommendation": "Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.",
    "exploit_scenario": "The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user\u2019s order capacity."
}
low auth codex ERC20 approve race condition allows double-spend of allowance 65 no
view
evidence_json
{
    "evidence": "approve() sets allowance directly with no zero-check.",
    "locations": [
        "contracts/Contract.sol:76",
        "contracts/Contract.sol:77"
    ],
    "recommendation": "Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.",
    "exploit_scenario": "A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances."
}