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

Analysis Run

a707eba1-cb00-477e-932b-94b34a323437

complete
Chain ID
1
Address
Block Number
Created
Tue, Dec 30, 2025 1:49 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
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
30689 report.consolidate complete 1 / 1 3 months ago
75130 artifact.fetch complete 1 / 3 1 week ago
75131 tool.cast_disasm complete 1 / 3 1 week ago
75132 analysis.bundle complete 1 / 3 1 week ago
75133 capability.graph complete 1 / 3 1 week ago
75134 detector.run complete 1 / 3 1 week ago
75135 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: yes

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
1
No findings?
no
Summary
Found 1 low-severity access control issue where renouncing ownership is reversible if a nominee is set.
View stderr
[codex:425109] OpenAI Codex v0.77.0 (research preview)
[codex:425109] --------
[codex:425109] workdir: /tmp/codex-multi-0uwuii5m
[codex:425109] model: gpt-5.2-codex
[codex:425109] provider: openai
[codex:425109] approval: never
[codex:425109] sandbox: read-only
[codex:425109] reasoning effort: xhigh
[codex:425109] reasoning summaries: auto
[codex:425109] session id: 019b6f84-b851-7c22-b035-20cc6f061d89
[codex:425109] --------
[codex:425109] user
[codex:425109] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:425109] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:425109] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:425109] 
[codex:425109] Scope rules:
[codex:425109] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:425109] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:425109] 
[codex:425109] Output MUST be valid JSON matching the provided schema.
[codex:425109] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:425109] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:425109] 
[codex:425109] Output constraints (IMPORTANT):
[codex:425109] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:425109] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:425109] mcp startup: no servers
[codex:425109] 
[codex:425109] thinking
[codex:425109] **Preparing to read audit instructions**
[codex:425109] exec
[codex:425109] /bin/bash -lc ls in /tmp/codex-multi-0uwuii5m succeeded in 7ms:
[codex:425109] AUDIT_BUNDLE.txt
[codex:425109] codex-output-schema.json
[codex:425109] contracts
[codex:425109] exec
[codex:425109] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-0uwuii5m succeeded in 5ms:
[codex:425109] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:425109] 
[codex:425109] ================================================================================
[codex:425109] FILE: contracts/Contract.sol
[codex:425109] ================================================================================
[codex:425109] pragma solidity 0.5.7;
[codex:425109] // produced by the Solididy File Flattener (c) David Appleton 2018
[codex:425109] // contact : dave@akomba.com
[codex:425109] // released under Apache 2.0 licence
[codex:425109] interface IERC20 {
[codex:425109]     /**
[codex:425109]      * @dev Returns the amount of tokens in existence.
[codex:425109]      */
[codex:425109]     function totalSupply() external view returns (uint256);
[codex:425109] 
[codex:425109]     /**
[codex:425109]      * @dev Returns the amount of tokens owned by `account`.
[codex:425109]      */
[codex:425109]     function balanceOf(address account) external view returns (uint256);
[codex:425109] 
[codex:425109] 
[codex:425109] thinking
[codex:425109] **Analyzing contract for vulnerabilities**
[codex:425109] exec
[codex:425109] /bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '140,240p'" in /tmp/codex-multi-0uwuii5m succeeded in 7ms:
[codex:425109]    140	        }
[codex:425109]    141	
[codex:425109]    142	        uint256 c = a * b;
[codex:425109]    143	        require(c / a == b, "SafeMath: multiplication overflow");
[codex:425109]    144	
[codex:425109]    145	        return c;
[codex:425109]    146	    }
[codex:425109]    147	
[codex:425109]    148	    /**
[codex:425109]    149	     * @dev Returns the integer division of two unsigned integers. Reverts on
[codex:425109]    150	     * division by zero. The result is rounded towards zero.
[codex:425109]    151	     *
[codex:425109]    152	     * Counterpart to Solidity's `/` operator. Note: this function uses a
[codex:425109]    153	     * `revert` opcode (which leaves remaining gas untouched) while Solidity
[codex:425109]    154	     * uses an invalid opcode to revert (consuming all remaining gas).
[codex:425109]    155	     *
[codex:425109]    156	     * Requirements:
[codex:425109]    157	     * - The divisor cannot be zero.
[codex:425109]    158	     */
[codex:425109]    159	    function div(uint256 a, uint256 b) internal pure returns (uint256) {
[codex:425109] 
[codex:425109] thinking
[codex:425109] **Preparing to add line numbers for renounce usage**
[codex:425109] exec
[codex:425109] /bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '360,520p'" in /tmp/codex-multi-0uwuii5m succeeded in 6ms:
[codex:425109]    360	     * @dev Returns the address of the current nominated owner.
[codex:425109]    361	     */
[codex:425109]    362	    function nominatedOwner() external view returns (address) {
[codex:425109]    363	        return _nominatedOwner;
[codex:425109]    364	    }
[codex:425109]    365	
[codex:425109]    366	    /**
[codex:425109]    367	     * @dev Throws if called by any account other than the owner.
[codex:425109]    368	     */
[codex:425109]    369	    modifier onlyOwner() {
[codex:425109]    370	        _onlyOwner();
[codex:425109]    371	        _;
[codex:425109]    372	    }
[codex:425109]    373	
[codex:425109]    374	    function _onlyOwner() internal view {
[codex:425109]    375	        require(_msgSender() == _owner, "caller is not owner");
[codex:425109]    376	    }
[codex:425109]    377	
[codex:425109]    378	    /**
[codex:425109]    379	     * @dev Nominates a new owner `newOwner`.
[codex:425109] 
[codex:425109] thinking
[codex:425109] **Preparing to create JSON output**
[codex:425109] exec
[codex:425109] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-0uwuii5m succeeded in 6ms:
[codex:425109] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:425109] 
[codex:425109] thinking
[codex:425109] **Summarizing access control vulnerability**
[codex:425109] 
[codex:425109] I’m putting together a concise JSON report about a low-severity issue where renouncing ownership can be undone if a nominee is set. The key finding is that renounceOwnership clears the owner but leaves _nominatedOwner intact, allowing the nominee to reclaim ownership by calling acceptOwnership later. I’m including file paths with relevant line numbers for evidence and detailing the exploit scenario and recommended fix to clear _nominatedOwner in renounceOwnership and acceptOwnership. This should clearly outline the risk and help guide a secure update.
[codex:425109] codex
[codex:425109] {"no_findings":false,"summary":"Found 1 low-severity access control issue where renouncing ownership is reversible if a nominee is set.","findings":[{"severity":"low","category":"access_control","title":"renounceOwnership can be reversed by a previously nominated owner","exploit_scenario":"The owner nominates a new owner (e.g., Alice) but later calls renounceOwnership expecting a permanent lock. Because _nominatedOwner is not cleared, Alice can still call acceptOwnership and regain control, contradicting the “cannot be undone” expectation.","recommendation":"Clear _nominatedOwner in renounceOwnership and/or acceptOwnership, or require _nominatedOwner == address(0) before allowing renounceOwnership.","evidence":"renounceOwnership only sets _owner = address(0) without clearing _nominatedOwner, while acceptOwnership checks only _nominatedOwner == msg.sender.","locations":["contracts/Contract.sol:383","contracts/Contract.sol:392","contracts/Contract.sol:403"]}]}
[codex:425109] tokens used
[codex:425109] 18,529
[codex:425109] {"no_findings":false,"summary":"Found 1 low-severity access control issue where renouncing ownership is reversible if a nominee is set.","findings":[{"severity":"low","category":"access_control","title":"renounceOwnership can be reversed by a previously nominated owner","exploit_scenario":"The owner nominates a new owner (e.g., Alice) but later calls renounceOwnership expecting a permanent lock. Because _nominatedOwner is not cleared, Alice can still call acceptOwnership and regain control, contradicting the “cannot be undone” expectation.","recommendation":"Clear _nominatedOwner in renounceOwnership and/or acceptOwnership, or require _nominatedOwner == address(0) before allowing renounceOwnership.","evidence":"renounceOwnership only sets _owner = address(0) without clearing _nominatedOwner, while acceptOwnership checks only _nominatedOwner == msg.sender.","locations":["contracts/Contract.sol:383","contracts/Contract.sol:392","contracts/Contract.sol:403"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-30T13:49:39.799012+00:00",
        "returncode": 0
    },
    "summary": "Found 1 low-severity access control issue where renouncing ownership is reversible if a nominee is set.",
    "raw_final": {
        "summary": "Found 1 low-severity access control issue where renouncing ownership is reversible if a nominee is set.",
        "findings": [
            {
                "title": "renounceOwnership can be reversed by a previously nominated owner",
                "category": "access_control",
                "evidence": "renounceOwnership only sets _owner = address(0) without clearing _nominatedOwner, while acceptOwnership checks only _nominatedOwner == msg.sender.",
                "severity": "low",
                "locations": [
                    "contracts/Contract.sol:383",
                    "contracts/Contract.sol:392",
                    "contracts/Contract.sol:403"
                ],
                "recommendation": "Clear _nominatedOwner in renounceOwnership and/or acceptOwnership, or require _nominatedOwner == address(0) before allowing renounceOwnership.",
                "exploit_scenario": "The owner nominates a new owner (e.g., Alice) but later calls renounceOwnership expecting a permanent lock. Because _nominatedOwner is not cleared, Alice can still call acceptOwnership and regain control, contradicting the \u201ccannot be undone\u201d expectation."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
1
CALL-family (heavy)
1
EXT*/BALANCE
1
Total opcodes
1266
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 0x0088
00000019: JUMPI
0000001a: PUSH1 0x00
0000001c: CALLDATALOAD
0000001d: PUSH1 0xe0
0000001f: SHR
00000020: DUP1
00000021: PUSH4 0x79ba5097
00000026: GT
00000027: PUSH2 0x005b
0000002a: JUMPI
0000002b: DUP1
0000002c: PUSH4 0x79ba5097
00000031: EQ
00000032: PUSH2 0x016b
00000035: JUMPI
00000036: DUP1
00000037: PUSH4 0x8da5cb5b
0000003c: EQ
0000003d: PUSH2 0x0173
00000040: JUMPI
00000041: DUP1
00000042: PUSH4 0xa3fbbaae
00000047: EQ
00000048: PUSH2 0x017b
0000004b: JUMPI
0000004c: DUP1
0000004d: PUSH4 0xc4e2c1e6
00000052: EQ
00000053: PUSH2 0x01ae
00000056: JUMPI
00000057: PUSH2 0x0088
0000005a: JUMP
0000005b: JUMPDEST
0000005c: DUP1
0000005d: PUSH4 0x1627540c
00000062: EQ
00000063: PUSH2 0x008d
00000066: JUMPI
00000067: DUP1
00000068: PUSH4 0x481c6a75
0000006d: EQ
0000006e: PUSH2 0x00c2
00000071: JUMPI
00000072: DUP1
00000073: PUSH4 0x4fdb7f44
00000078: EQ
00000079: PUSH2 0x00f3
0000007c: JUMPI
0000007d: DUP1
0000007e: PUSH4 0x53a47bb7
00000083: EQ
00000084: PUSH2 0x0163
00000087: JUMPI
00000088: JUMPDEST
00000089: PUSH1 0x00
0000008b: DUP1
0000008c: REVERT
0000008d: JUMPDEST
0000008e: PUSH2 0x00c0
00000091: PUSH1 0x04
00000093: DUP1
00000094: CALLDATASIZE
00000095: SUB
00000096: PUSH1 0x20
00000098: DUP2
00000099: LT
0000009a: ISZERO
0000009b: PUSH2 0x00a3
0000009e: JUMPI
0000009f: PUSH1 0x00
000000a1: DUP1
000000a2: REVERT
000000a3: JUMPDEST
000000a4: POP
000000a5: CALLDATALOAD
000000a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000000bb: AND
000000bc: PUSH2 0x01f1
000000bf: JUMP
000000c0: JUMPDEST
000000c1: STOP
000000c2: JUMPDEST
000000c3: PUSH2 0x00ca
000000c6: PUSH2 0x0308
000000c9: JUMP
000000ca: JUMPDEST
000000cb: PUSH1 0x40
000000cd: DUP1
000000ce: MLOAD
000000cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000000e4: SWAP1
000000e5: SWAP3
000000e6: AND
000000e7: DUP3
000000e8: MSTORE
000000e9: MLOAD
000000ea: SWAP1
000000eb: DUP2
000000ec: SWAP1
000000ed: SUB
000000ee: PUSH1 0x20
000000f0: ADD
000000f1: SWAP1
000000f2: RETURN
000000f3: JUMPDEST
000000f4: PUSH2 0x00c0
000000f7: PUSH1 0x04
000000f9: DUP1
000000fa: CALLDATASIZE
000000fb: SUB
000000fc: PUSH1 0x20
000000fe: DUP2
000000ff: LT
00000100: ISZERO
00000101: PUSH2 0x0109
00000104: JUMPI
00000105: PUSH1 0x00
00000107: DUP1
00000108: REVERT
00000109: JUMPDEST
0000010a: DUP2
0000010b: ADD
0000010c: SWAP1
0000010d: PUSH1 0x20
0000010f: DUP2
00000110: ADD
00000111: DUP2
00000112: CALLDATALOAD
00000113: PUSH5 0x0100000000
00000119: DUP2
0000011a: GT
0000011b: ISZERO
0000011c: PUSH2 0x0124
0000011f: JUMPI
00000120: PUSH1 0x00
00000122: DUP1
00000123: REVERT
00000124: JUMPDEST
00000125: DUP3
00000126: ADD
00000127: DUP4
00000128: PUSH1 0x20
0000012a: DUP3
0000012b: ADD
0000012c: GT
0000012d: ISZERO
0000012e: PUSH2 0x0136
00000131: JUMPI
00000132: PUSH1 0x00
00000134: DUP1
00000135: REVERT
00000136: JUMPDEST
00000137: DUP1
00000138: CALLDATALOAD
00000139: SWAP1
0000013a: PUSH1 0x20
0000013c: ADD
0000013d: SWAP2
0000013e: DUP5
0000013f: PUSH1 0x01
00000141: DUP4
00000142: MUL
00000143: DUP5
00000144: ADD
00000145: GT
00000146: PUSH5 0x0100000000
0000014c: DUP4
0000014d: GT
0000014e: OR
0000014f: ISZERO
00000150: PUSH2 0x0158
00000153: JUMPI
00000154: PUSH1 0x00
00000156: DUP1
00000157: REVERT
00000158: JUMPDEST
00000159: POP
0000015a: SWAP1
0000015b: SWAP3
0000015c: POP
0000015d: SWAP1
0000015e: POP
0000015f: PUSH2 0x0324
00000162: JUMP
00000163: JUMPDEST
00000164: PUSH2 0x00ca
00000167: PUSH2 0x04e3
0000016a: JUMP
0000016b: JUMPDEST
0000016c: PUSH2 0x00c0
0000016f: PUSH2 0x04ff
00000172: JUMP
00000173: JUMPDEST
00000174: PUSH2 0x00ca
00000177: PUSH2 0x0623
0000017a: JUMP
0000017b: JUMPDEST
0000017c: PUSH2 0x00c0
0000017f: PUSH1 0x04
00000181: DUP1
00000182: CALLDATASIZE
00000183: SUB
00000184: PUSH1 0x20
00000186: DUP2
00000187: LT
00000188: ISZERO
00000189: PUSH2 0x0191
0000018c: JUMPI
0000018d: PUSH1 0x00
0000018f: DUP1
00000190: REVERT
00000191: JUMPDEST
00000192: POP
00000193: CALLDATALOAD
00000194: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001a9: AND
000001aa: PUSH2 0x063f
000001ad: JUMP
000001ae: JUMPDEST
000001af: PUSH2 0x00c0
000001b2: PUSH1 0x04
000001b4: DUP1
000001b5: CALLDATASIZE
000001b6: SUB
000001b7: PUSH1 0x60
000001b9: DUP2
000001ba: LT
000001bb: ISZERO
000001bc: PUSH2 0x01c4
000001bf: JUMPI
000001c0: PUSH1 0x00
000001c2: DUP1
000001c3: REVERT
000001c4: JUMPDEST
000001c5: POP
000001c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001db: DUP2
000001dc: CALLDATALOAD
000001dd: DUP2
000001de: AND
000001df: SWAP2
000001e0: PUSH1 0x20
000001e2: DUP2
000001e3: ADD
000001e4: CALLDATALOAD
000001e5: SWAP2
000001e6: PUSH1 0x40
000001e8: SWAP1
000001e9: SWAP2
000001ea: ADD
000001eb: CALLDATALOAD
000001ec: AND
000001ed: PUSH2 0x0757
000001f0: JUMP
000001f1: JUMPDEST
000001f2: PUSH2 0x01f9
000001f5: PUSH2 0x0880
000001f8: JUMP
000001f9: JUMPDEST
000001fa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000020f: DUP2
00000210: AND
00000211: PUSH2 0x027b
00000214: JUMPI
00000215: PUSH1 0x40
00000217: DUP1
00000218: MLOAD
00000219: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000023a: DUP2
0000023b: MSTORE
0000023c: PUSH1 0x20
0000023e: PUSH1 0x04
00000240: DUP3
00000241: ADD
00000242: MSTORE
00000243: PUSH1 0x16
00000245: PUSH1 0x24
00000247: DUP3
00000248: ADD
00000249: MSTORE
0000024a: PUSH32 0x6e6577206f776e65722069732030206164647265737300000000000000000000
0000026b: PUSH1 0x44
0000026d: DUP3
0000026e: ADD
0000026f: MSTORE
00000270: SWAP1
00000271: MLOAD
00000272: SWAP1
00000273: DUP2
00000274: SWAP1
00000275: SUB
00000276: PUSH1 0x64
00000278: ADD
00000279: SWAP1
0000027a: REVERT
0000027b: JUMPDEST
0000027c: PUSH1 0x00
0000027e: DUP1
0000027f: SLOAD
00000280: PUSH1 0x40
00000282: MLOAD
00000283: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000298: DUP1
00000299: DUP6
0000029a: AND
0000029b: SWAP4
0000029c: SWAP3
0000029d: AND
0000029e: SWAP2
0000029f: PUSH32 0xb59bab42c554cfd49f4f001c983b6ed93ede25748b10114b7d1cb1b3c97df7af
000002c0: SWAP2
000002c1: LOG3
000002c2: PUSH1 0x01
000002c4: DUP1
000002c5: SLOAD
000002c6: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
000002e7: AND
000002e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002fd: SWAP3
000002fe: SWAP1
000002ff: SWAP3
00000300: AND
00000301: SWAP2
00000302: SWAP1
00000303: SWAP2
00000304: OR
00000305: SWAP1
00000306: SSTORE
00000307: JUMP
00000308: JUMPDEST
00000309: PUSH1 0x02
0000030b: SLOAD
0000030c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000321: AND
00000322: DUP2
00000323: JUMP
00000324: JUMPDEST
00000325: PUSH2 0x032c
00000328: PUSH2 0x0880
0000032b: JUMP
0000032c: JUMPDEST
0000032d: PUSH1 0x60
0000032f: PUSH1 0x40
00000331: MLOAD
00000332: DUP1
00000333: PUSH1 0x60
00000335: ADD
00000336: PUSH1 0x40
00000338: MSTORE
00000339: DUP1
0000033a: PUSH1 0x35
0000033c: DUP2
0000033d: MSTORE
0000033e: PUSH1 0x20
00000340: ADD
00000341: PUSH2 0x0c3c
00000344: PUSH1 0x35
00000346: SWAP2
00000347: CODECOPY
00000348: SWAP1
00000349: POP
0000034a: DUP1
0000034b: PUSH1 0x40
0000034d: MLOAD
0000034e: PUSH1 0x20
00000350: ADD
00000351: DUP1
00000352: DUP3
00000353: DUP1
00000354: MLOAD
00000355: SWAP1
00000356: PUSH1 0x20
00000358: ADD
00000359: SWAP1
0000035a: DUP1
0000035b: DUP4
0000035c: DUP4
0000035d: JUMPDEST
0000035e: PUSH1 0x20
00000360: DUP4
00000361: LT
00000362: PUSH2 0x039a
00000365: JUMPI
00000366: DUP1
00000367: MLOAD
00000368: DUP3
00000369: MSTORE
0000036a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000038b: SWAP1
0000038c: SWAP3
0000038d: ADD
0000038e: SWAP2
0000038f: PUSH1 0x20
00000391: SWAP2
00000392: DUP3
00000393: ADD
00000394: SWAP2
00000395: ADD
00000396: PUSH2 0x035d
00000399: JUMP
0000039a: JUMPDEST
0000039b: PUSH1 0x01
0000039d: DUP4
0000039e: PUSH1 0x20
000003a0: SUB
000003a1: PUSH2 0x0100
000003a4: EXP
000003a5: SUB
000003a6: DUP1
000003a7: NOT
000003a8: DUP3
000003a9: MLOAD
000003aa: AND
000003ab: DUP2
000003ac: DUP5
000003ad: MLOAD
000003ae: AND
000003af: DUP1
000003b0: DUP3
000003b1: OR
000003b2: DUP6
000003b3: MSTORE
000003b4: POP
000003b5: POP
000003b6: POP
000003b7: POP
000003b8: POP
000003b9: POP
000003ba: SWAP1
000003bb: POP
000003bc: ADD
000003bd: SWAP2
000003be: POP
000003bf: POP
000003c0: PUSH1 0x40
000003c2: MLOAD
000003c3: PUSH1 0x20
000003c5: DUP2
000003c6: DUP4
000003c7: SUB
000003c8: SUB
000003c9: DUP2
000003ca: MSTORE
000003cb: SWAP1
000003cc: PUSH1 0x40
000003ce: MSTORE
000003cf: DUP1
000003d0: MLOAD
000003d1: SWAP1
000003d2: PUSH1 0x20
000003d4: ADD
000003d5: KECCAK256
000003d6: DUP4
000003d7: DUP4
000003d8: PUSH1 0x40
000003da: MLOAD
000003db: PUSH1 0x20
000003dd: ADD
000003de: DUP1
000003df: DUP4
000003e0: DUP4
000003e1: DUP1
000003e2: DUP3
000003e3: DUP5
000003e4: CALLDATACOPY
000003e5: DUP1
000003e6: DUP4
000003e7: ADD
000003e8: SWAP3
000003e9: POP
000003ea: POP
000003eb: POP
000003ec: SWAP3
000003ed: POP
000003ee: POP
000003ef: POP
000003f0: PUSH1 0x40
000003f2: MLOAD
000003f3: PUSH1 0x20
000003f5: DUP2
000003f6: DUP4
000003f7: SUB
000003f8: SUB
000003f9: DUP2
000003fa: MSTORE
000003fb: SWAP1
000003fc: PUSH1 0x40
000003fe: MSTORE
000003ff: DUP1
00000400: MLOAD
00000401: SWAP1
00000402: PUSH1 0x20
00000404: ADD
00000405: KECCAK256
00000406: EQ
00000407: PUSH2 0x0471
0000040a: JUMPI
0000040b: PUSH1 0x40
0000040d: DUP1
0000040e: MLOAD
0000040f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000430: DUP2
00000431: MSTORE
00000432: PUSH1 0x20
00000434: PUSH1 0x04
00000436: DUP3
00000437: ADD
00000438: MSTORE
00000439: PUSH1 0x15
0000043b: PUSH1 0x24
0000043d: DUP3
0000043e: ADD
0000043f: MSTORE
00000440: PUSH32 0x6465636c61726174696f6e20696e636f72726563740000000000000000000000
00000461: PUSH1 0x44
00000463: DUP3
00000464: ADD
00000465: MSTORE
00000466: SWAP1
00000467: MLOAD
00000468: SWAP1
00000469: DUP2
0000046a: SWAP1
0000046b: SUB
0000046c: PUSH1 0x64
0000046e: ADD
0000046f: SWAP1
00000470: REVERT
00000471: JUMPDEST
00000472: PUSH1 0x00
00000474: DUP1
00000475: SLOAD
00000476: PUSH1 0x40
00000478: MLOAD
00000479: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000048e: SWAP1
0000048f: SWAP2
00000490: AND
00000491: SWAP1
00000492: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
000004b3: SWAP1
000004b4: DUP4
000004b5: SWAP1
000004b6: LOG3
000004b7: POP
000004b8: POP
000004b9: PUSH1 0x00
000004bb: DUP1
000004bc: SLOAD
000004bd: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
000004de: AND
000004df: SWAP1
000004e0: SSTORE
000004e1: POP
000004e2: JUMP
000004e3: JUMPDEST
000004e4: PUSH1 0x01
000004e6: SLOAD
000004e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004fc: AND
000004fd: SWAP1
000004fe: JUMP
000004ff: JUMPDEST
00000500: PUSH2 0x0507
00000503: PUSH2 0x0925
00000506: JUMP
00000507: JUMPDEST
00000508: PUSH1 0x01
0000050a: SLOAD
0000050b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000520: SWAP1
00000521: DUP2
00000522: AND
00000523: SWAP2
00000524: AND
00000525: EQ
00000526: PUSH2 0x0590
00000529: JUMPI
0000052a: PUSH1 0x40
0000052c: DUP1
0000052d: MLOAD
0000052e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000054f: DUP2
00000550: MSTORE
00000551: PUSH1 0x20
00000553: PUSH1 0x04
00000555: DUP3
00000556: ADD
00000557: MSTORE
00000558: PUSH1 0x0c
0000055a: PUSH1 0x24
0000055c: DUP3
0000055d: ADD
0000055e: MSTORE
0000055f: PUSH32 0x756e617574686f72697a65640000000000000000000000000000000000000000
00000580: PUSH1 0x44
00000582: DUP3
00000583: ADD
00000584: MSTORE
00000585: SWAP1
00000586: MLOAD
00000587: SWAP1
00000588: DUP2
00000589: SWAP1
0000058a: SUB
0000058b: PUSH1 0x64
0000058d: ADD
0000058e: SWAP1
0000058f: REVERT
00000590: JUMPDEST
00000591: PUSH1 0x01
00000593: SLOAD
00000594: PUSH1 0x00
00000596: DUP1
00000597: SLOAD
00000598: PUSH1 0x40
0000059a: MLOAD
0000059b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005b0: SWAP4
000005b1: DUP5
000005b2: AND
000005b3: SWAP4
000005b4: SWAP1
000005b5: SWAP2
000005b6: AND
000005b7: SWAP2
000005b8: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
000005d9: SWAP2
000005da: LOG3
000005db: PUSH1 0x01
000005dd: SLOAD
000005de: PUSH1 0x00
000005e0: DUP1
000005e1: SLOAD
000005e2: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000603: AND
00000604: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000619: SWAP1
0000061a: SWAP3
0000061b: AND
0000061c: SWAP2
0000061d: SWAP1
0000061e: SWAP2
0000061f: OR
00000620: SWAP1
00000621: SSTORE
00000622: JUMP
00000623: JUMPDEST
00000624: PUSH1 0x00
00000626: SLOAD
00000627: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000063c: AND
0000063d: SWAP1
0000063e: JUMP
0000063f: JUMPDEST
00000640: PUSH2 0x0647
00000643: PUSH2 0x0880
00000646: JUMP
00000647: JUMPDEST
00000648: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000065d: DUP2
0000065e: AND
0000065f: PUSH2 0x06c9
00000662: JUMPI
00000663: PUSH1 0x40
00000665: DUP1
00000666: MLOAD
00000667: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000688: DUP2
00000689: MSTORE
0000068a: PUSH1 0x20
0000068c: PUSH1 0x04
0000068e: DUP3
0000068f: ADD
00000690: MSTORE
00000691: PUSH1 0x13
00000693: PUSH1 0x24
00000695: DUP3
00000696: ADD
00000697: MSTORE
00000698: PUSH32 0x63616e6e6f742062652030206164647265737300000000000000000000000000
000006b9: PUSH1 0x44
000006bb: DUP3
000006bc: ADD
000006bd: MSTORE
000006be: SWAP1
000006bf: MLOAD
000006c0: SWAP1
000006c1: DUP2
000006c2: SWAP1
000006c3: SUB
000006c4: PUSH1 0x64
000006c6: ADD
000006c7: SWAP1
000006c8: REVERT
000006c9: JUMPDEST
000006ca: PUSH1 0x02
000006cc: SLOAD
000006cd: PUSH1 0x40
000006cf: MLOAD
000006d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006e5: DUP1
000006e6: DUP5
000006e7: AND
000006e8: SWAP3
000006e9: AND
000006ea: SWAP1
000006eb: PUSH32 0x9cb45c728de594dab506a1f1a8554e24c8eeaf983618d5ec5dd7bc6f3c49feee
0000070c: SWAP1
0000070d: PUSH1 0x00
0000070f: SWAP1
00000710: LOG3
00000711: PUSH1 0x02
00000713: DUP1
00000714: SLOAD
00000715: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000736: AND
00000737: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000074c: SWAP3
0000074d: SWAP1
0000074e: SWAP3
0000074f: AND
00000750: SWAP2
00000751: SWAP1
00000752: SWAP2
00000753: OR
00000754: SWAP1
00000755: SSTORE
00000756: JUMP
00000757: JUMPDEST
00000758: PUSH1 0x02
0000075a: SLOAD
0000075b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000770: AND
00000771: PUSH2 0x0778
00000774: PUSH2 0x0925
00000777: JUMP
00000778: JUMPDEST
00000779: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000078e: AND
0000078f: EQ
00000790: PUSH2 0x07fa
00000793: JUMPI
00000794: PUSH1 0x40
00000796: DUP1
00000797: MLOAD
00000798: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000007b9: DUP2
000007ba: MSTORE
000007bb: PUSH1 0x20
000007bd: PUSH1 0x04
000007bf: DUP3
000007c0: ADD
000007c1: MSTORE
000007c2: PUSH1 0x0f
000007c4: PUSH1 0x24
000007c6: DUP3
000007c7: ADD
000007c8: MSTORE
000007c9: PUSH32 0x6d757374206265206d616e616765720000000000000000000000000000000000
000007ea: PUSH1 0x44
000007ec: DUP3
000007ed: ADD
000007ee: MSTORE
000007ef: SWAP1
000007f0: MLOAD
000007f1: SWAP1
000007f2: DUP2
000007f3: SWAP1
000007f4: SUB
000007f5: PUSH1 0x64
000007f7: ADD
000007f8: SWAP1
000007f9: REVERT
000007fa: JUMPDEST
000007fb: PUSH2 0x0821
000007fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000813: DUP5
00000814: AND
00000815: DUP3
00000816: DUP5
00000817: PUSH4 0xffffffff
0000081c: PUSH2 0x0929
0000081f: AND
00000820: JUMP
00000821: JUMPDEST
00000822: DUP1
00000823: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000838: AND
00000839: DUP3
0000083a: DUP5
0000083b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000850: AND
00000851: PUSH31 0x1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a
00000871: PUSH1 0x40
00000873: MLOAD
00000874: PUSH1 0x40
00000876: MLOAD
00000877: DUP1
00000878: SWAP2
00000879: SUB
0000087a: SWAP1
0000087b: LOG4
0000087c: POP
0000087d: POP
0000087e: POP
0000087f: JUMP
00000880: JUMPDEST
00000881: PUSH1 0x00
00000883: SLOAD
00000884: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000899: AND
0000089a: PUSH2 0x08a1
0000089d: PUSH2 0x0925
000008a0: JUMP
000008a1: JUMPDEST
000008a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008b7: AND
000008b8: EQ
000008b9: PUSH2 0x0923
000008bc: JUMPI
000008bd: PUSH1 0x40
000008bf: DUP1
000008c0: MLOAD
000008c1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000008e2: DUP2
000008e3: MSTORE
000008e4: PUSH1 0x20
000008e6: PUSH1 0x04
000008e8: DUP3
000008e9: ADD
000008ea: MSTORE
000008eb: PUSH1 0x13
000008ed: PUSH1 0x24
000008ef: DUP3
000008f0: ADD
000008f1: MSTORE
000008f2: PUSH32 0x63616c6c6572206973206e6f74206f776e657200000000000000000000000000
00000913: PUSH1 0x44
00000915: DUP3
00000916: ADD
00000917: MSTORE
00000918: SWAP1
00000919: MLOAD
0000091a: SWAP1
0000091b: DUP2
0000091c: SWAP1
0000091d: SUB
0000091e: PUSH1 0x64
00000920: ADD
00000921: SWAP1
00000922: REVERT
00000923: JUMPDEST
00000924: JUMP
00000925: JUMPDEST
00000926: CALLER
00000927: SWAP1
00000928: JUMP
00000929: JUMPDEST
0000092a: PUSH1 0x40
0000092c: DUP1
0000092d: MLOAD
0000092e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000943: DUP5
00000944: AND
00000945: PUSH1 0x24
00000947: DUP3
00000948: ADD
00000949: MSTORE
0000094a: PUSH1 0x44
0000094c: DUP1
0000094d: DUP3
0000094e: ADD
0000094f: DUP5
00000950: SWAP1
00000951: MSTORE
00000952: DUP3
00000953: MLOAD
00000954: DUP1
00000955: DUP4
00000956: SUB
00000957: SWAP1
00000958: SWAP2
00000959: ADD
0000095a: DUP2
0000095b: MSTORE
0000095c: PUSH1 0x64
0000095e: SWAP1
0000095f: SWAP2
00000960: ADD
00000961: SWAP1
00000962: SWAP2
00000963: MSTORE
00000964: PUSH1 0x20
00000966: DUP2
00000967: ADD
00000968: DUP1
00000969: MLOAD
0000096a: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000987: AND
00000988: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000009a9: OR
000009aa: SWAP1
000009ab: MSTORE
000009ac: PUSH2 0x09b6
000009af: SWAP1
000009b0: DUP5
000009b1: SWAP1
000009b2: PUSH2 0x09bb
000009b5: JUMP
000009b6: JUMPDEST
000009b7: POP
000009b8: POP
000009b9: POP
000009ba: JUMP
000009bb: JUMPDEST
000009bc: PUSH2 0x09da
000009bf: DUP3
000009c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009d5: AND
000009d6: PUSH2 0x0bff
000009d9: JUMP
000009da: JUMPDEST
000009db: PUSH2 0x0a45
000009de: JUMPI
000009df: PUSH1 0x40
000009e1: DUP1
000009e2: MLOAD
000009e3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000a04: DUP2
00000a05: MSTORE
00000a06: PUSH1 0x20
00000a08: PUSH1 0x04
00000a0a: DUP3
00000a0b: ADD
00000a0c: MSTORE
00000a0d: PUSH1 0x1f
00000a0f: PUSH1 0x24
00000a11: DUP3
00000a12: ADD
00000a13: MSTORE
00000a14: PUSH32 0x5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400
00000a35: PUSH1 0x44
00000a37: DUP3
00000a38: ADD
00000a39: MSTORE
00000a3a: SWAP1
00000a3b: MLOAD
00000a3c: SWAP1
00000a3d: DUP2
00000a3e: SWAP1
00000a3f: SUB
00000a40: PUSH1 0x64
00000a42: ADD
00000a43: SWAP1
00000a44: REVERT
00000a45: JUMPDEST
00000a46: PUSH1 0x00
00000a48: PUSH1 0x60
00000a4a: DUP4
00000a4b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a60: AND
00000a61: DUP4
00000a62: PUSH1 0x40
00000a64: MLOAD
00000a65: DUP1
00000a66: DUP3
00000a67: DUP1
00000a68: MLOAD
00000a69: SWAP1
00000a6a: PUSH1 0x20
00000a6c: ADD
00000a6d: SWAP1
00000a6e: DUP1
00000a6f: DUP4
00000a70: DUP4
00000a71: JUMPDEST
00000a72: PUSH1 0x20
00000a74: DUP4
00000a75: LT
00000a76: PUSH2 0x0aae
00000a79: JUMPI
00000a7a: DUP1
00000a7b: MLOAD
00000a7c: DUP3
00000a7d: MSTORE
00000a7e: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00000a9f: SWAP1
00000aa0: SWAP3
00000aa1: ADD
00000aa2: SWAP2
00000aa3: PUSH1 0x20
00000aa5: SWAP2
00000aa6: DUP3
00000aa7: ADD
00000aa8: SWAP2
00000aa9: ADD
00000aaa: PUSH2 0x0a71
00000aad: JUMP
00000aae: JUMPDEST
00000aaf: PUSH1 0x01
00000ab1: DUP4
00000ab2: PUSH1 0x20
00000ab4: SUB
00000ab5: PUSH2 0x0100
00000ab8: EXP
00000ab9: SUB
00000aba: DUP1
00000abb: NOT
00000abc: DUP3
00000abd: MLOAD
00000abe: AND
00000abf: DUP2
00000ac0: DUP5
00000ac1: MLOAD
00000ac2: AND
00000ac3: DUP1
00000ac4: DUP3
00000ac5: OR
00000ac6: DUP6
00000ac7: MSTORE
00000ac8: POP
00000ac9: POP
00000aca: POP
00000acb: POP
00000acc: POP
00000acd: POP
00000ace: SWAP1
00000acf: POP
00000ad0: ADD
00000ad1: SWAP2
00000ad2: POP
00000ad3: POP
00000ad4: PUSH1 0x00
00000ad6: PUSH1 0x40
00000ad8: MLOAD
00000ad9: DUP1
00000ada: DUP4
00000adb: SUB
00000adc: DUP2
00000add: PUSH1 0x00
00000adf: DUP7
00000ae0: GAS
00000ae1: CALL
00000ae2: SWAP2
00000ae3: POP
00000ae4: POP
00000ae5: RETURNDATASIZE
00000ae6: DUP1
00000ae7: PUSH1 0x00
00000ae9: DUP2
00000aea: EQ
00000aeb: PUSH2 0x0b10
00000aee: JUMPI
00000aef: PUSH1 0x40
00000af1: MLOAD
00000af2: SWAP2
00000af3: POP
00000af4: PUSH1 0x1f
00000af6: NOT
00000af7: PUSH1 0x3f
00000af9: RETURNDATASIZE
00000afa: ADD
00000afb: AND
00000afc: DUP3
00000afd: ADD
00000afe: PUSH1 0x40
00000b00: MSTORE
00000b01: RETURNDATASIZE
00000b02: DUP3
00000b03: MSTORE
00000b04: RETURNDATASIZE
00000b05: PUSH1 0x00
00000b07: PUSH1 0x20
00000b09: DUP5
00000b0a: ADD
00000b0b: RETURNDATACOPY
00000b0c: PUSH2 0x0b15
00000b0f: JUMP
00000b10: JUMPDEST
00000b11: PUSH1 0x60
00000b13: SWAP2
00000b14: POP
00000b15: JUMPDEST
00000b16: POP
00000b17: SWAP2
00000b18: POP
00000b19: SWAP2
00000b1a: POP
00000b1b: DUP2
00000b1c: PUSH2 0x0b86
00000b1f: JUMPI
00000b20: PUSH1 0x40
00000b22: DUP1
00000b23: MLOAD
00000b24: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000b45: DUP2
00000b46: MSTORE
00000b47: PUSH1 0x20
00000b49: PUSH1 0x04
00000b4b: DUP3
00000b4c: ADD
00000b4d: DUP2
00000b4e: SWAP1
00000b4f: MSTORE
00000b50: PUSH1 0x24
00000b52: DUP3
00000b53: ADD
00000b54: MSTORE
00000b55: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564
00000b76: PUSH1 0x44
00000b78: DUP3
00000b79: ADD
00000b7a: MSTORE
00000b7b: SWAP1
00000b7c: MLOAD
00000b7d: SWAP1
00000b7e: DUP2
00000b7f: SWAP1
00000b80: SUB
00000b81: PUSH1 0x64
00000b83: ADD
00000b84: SWAP1
00000b85: REVERT
00000b86: JUMPDEST
00000b87: DUP1
00000b88: MLOAD
00000b89: ISZERO
00000b8a: PUSH2 0x0bf9
00000b8d: JUMPI
00000b8e: DUP1
00000b8f: DUP1
00000b90: PUSH1 0x20
00000b92: ADD
00000b93: SWAP1
00000b94: MLOAD
00000b95: PUSH1 0x20
00000b97: DUP2
00000b98: LT
00000b99: ISZERO
00000b9a: PUSH2 0x0ba2
00000b9d: JUMPI
00000b9e: PUSH1 0x00
00000ba0: DUP1
00000ba1: REVERT
00000ba2: JUMPDEST
00000ba3: POP
00000ba4: MLOAD
00000ba5: PUSH2 0x0bf9
00000ba8: JUMPI
00000ba9: PUSH1 0x40
00000bab: MLOAD
00000bac: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000bcd: DUP2
00000bce: MSTORE
00000bcf: PUSH1 0x04
00000bd1: ADD
00000bd2: DUP1
00000bd3: DUP1
00000bd4: PUSH1 0x20
00000bd6: ADD
00000bd7: DUP3
00000bd8: DUP2
00000bd9: SUB
00000bda: DUP3
00000bdb: MSTORE
00000bdc: PUSH1 0x2a
00000bde: DUP2
00000bdf: MSTORE
00000be0: PUSH1 0x20
00000be2: ADD
00000be3: DUP1
00000be4: PUSH2 0x0c71
00000be7: PUSH1 0x2a
00000be9: SWAP2
00000bea: CODECOPY
00000beb: PUSH1 0x40
00000bed: ADD
00000bee: SWAP2
00000bef: POP
00000bf0: POP
00000bf1: PUSH1 0x40
00000bf3: MLOAD
00000bf4: DUP1
00000bf5: SWAP2
00000bf6: SUB
00000bf7: SWAP1
00000bf8: REVERT
00000bf9: JUMPDEST
00000bfa: POP
00000bfb: POP
00000bfc: POP
00000bfd: POP
00000bfe: JUMP
00000bff: JUMPDEST
00000c00: PUSH1 0x00
00000c02: DUP2
00000c03: EXTCODEHASH
00000c04: PUSH32 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
00000c25: DUP2
00000c26: ISZERO
00000c27: DUP1
00000c28: ISZERO
00000c29: SWAP1
00000c2a: PUSH2 0x0c33
00000c2d: JUMPI
00000c2e: POP
00000c2f: DUP1
00000c30: DUP3
00000c31: EQ
00000c32: ISZERO
00000c33: JUMPDEST
00000c34: SWAP5
00000c35: SWAP4
00000c36: POP
00000c37: POP
00000c38: POP
00000c39: POP
00000c3a: JUMP
00000c3b: INVALID
00000c3c: BLOBHASH
00000c3d: KECCAK256
00000c3e: PUSH9 0x65726562792072656e
00000c48: PUSH16 0x756e6365206f776e657273686970206f
00000c59: PUSH7 0x20746869732063
00000c61: PUSH16 0x6e747261637420666f72657665722e53
00000c72: PUSH2 0x6665
00000c75: GASLIMIT
00000c76: MSTORE
00000c77: NUMBER
00000c78: ORIGIN
00000c79: ADDRESS
00000c7a: GASPRICE
00000c7b: KECCAK256
00000c7c: GASLIMIT
00000c7d: MSTORE
00000c7e: NUMBER
00000c7f: ORIGIN
00000c80: ADDRESS
00000c81: KECCAK256
00000c82: PUSH16 0x7065726174696f6e20646964206e6f74
00000c93: KECCAK256
00000c94: PUSH20 0x756363656564a165627a7a7230582005594c5e21
00000ca9: CREATE2
00000caa: SWAP16
00000cab: UNKNOWN(0x29)
00000cac: CLZ
00000cad: UNKNOWN(0xB0)
00000cae: PUSH32

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": "0x79ba5097",
            "selector": "0x79ba5097",
            "calldata_variants": [
                "0x79ba5097",
                "0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa3fbbaae",
            "selector": "0xa3fbbaae",
            "calldata_variants": [
                "0xa3fbbaae",
                "0xa3fbbaae0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc4e2c1e6",
            "selector": "0xc4e2c1e6",
            "calldata_variants": [
                "0xc4e2c1e6",
                "0xc4e2c1e60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1627540c",
            "selector": "0x1627540c",
            "calldata_variants": [
                "0x1627540c",
                "0x1627540c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x481c6a75",
            "selector": "0x481c6a75",
            "calldata_variants": [
                "0x481c6a75",
                "0x481c6a750000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4fdb7f44",
            "selector": "0x4fdb7f44",
            "calldata_variants": [
                "0x4fdb7f44",
                "0x4fdb7f440000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x53a47bb7",
            "selector": "0x53a47bb7",
            "calldata_variants": [
                "0x53a47bb7",
                "0x53a47bb70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 3192,
            "type": "tx_origin_used"
        },
        {
            "pc": 3199,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector CREATE/CREATE2 reachable 45 no no
view
trace_id: 0x3f750a10ca494debf2e22a4ec303bb3897033f6da956e14e8c39cdd71ab04670
validation_json
{
    "sink": "CREATE",
    "errors": 0,
    "status": "unknown",
    "attempts": 16,
    "trace_id": "0x3f750a10ca494debf2e22a4ec303bb3897033f6da956e14e8c39cdd71ab04670",
    "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": "0x79ba5097",
            "selector": "0x79ba5097",
            "calldata_variants": [
                "0x79ba5097",
                "0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa3fbbaae",
            "selector": "0xa3fbbaae",
            "calldata_variants": [
                "0xa3fbbaae",
                "0xa3fbbaae0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc4e2c1e6",
            "selector": "0xc4e2c1e6",
            "calldata_variants": [
                "0xc4e2c1e6",
                "0xc4e2c1e60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1627540c",
            "selector": "0x1627540c",
            "calldata_variants": [
                "0x1627540c",
                "0x1627540c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x481c6a75",
            "selector": "0x481c6a75",
            "calldata_variants": [
                "0x481c6a75",
                "0x481c6a750000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4fdb7f44",
            "selector": "0x4fdb7f44",
            "calldata_variants": [
                "0x4fdb7f44",
                "0x4fdb7f440000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x53a47bb7",
            "selector": "0x53a47bb7",
            "calldata_variants": [
                "0x53a47bb7",
                "0x53a47bb70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "create_count": 0,
    "create2_count": 1
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x017da5619bb4e337e31458a0ee950b6996d24eb00391732346f7c39fa1a6d305
call_targets: 0xaedcfcdd80573c2a312d15d6bb9d921a01e4fb0f
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x017da5619bb4e337e31458a0ee950b6996d24eb00391732346f7c39fa1a6d305",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xaedcfcdd80573c2a312d15d6bb9d921a01e4fb0f"
    ],
    "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": "0x79ba5097",
            "selector": "0x79ba5097",
            "calldata_variants": [
                "0x79ba5097",
                "0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa3fbbaae",
            "selector": "0xa3fbbaae",
            "calldata_variants": [
                "0xa3fbbaae",
                "0xa3fbbaae0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc4e2c1e6",
            "selector": "0xc4e2c1e6",
            "calldata_variants": [
                "0xc4e2c1e6",
                "0xc4e2c1e60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1627540c",
            "selector": "0x1627540c",
            "calldata_variants": [
                "0x1627540c",
                "0x1627540c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x481c6a75",
            "selector": "0x481c6a75",
            "calldata_variants": [
                "0x481c6a75",
                "0x481c6a750000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4fdb7f44",
            "selector": "0x4fdb7f44",
            "calldata_variants": [
                "0x4fdb7f44",
                "0x4fdb7f440000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x53a47bb7",
            "selector": "0x53a47bb7",
            "calldata_variants": [
                "0x53a47bb7",
                "0x53a47bb70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2785,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": [
        {
            "pc": 3192,
            "type": "tx_origin_used"
        },
        {
            "pc": 3199,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x017da5619bb4e337e31458a0ee950b6996d24eb00391732346f7c39fa1a6d305
call_targets: 0xaedcfcdd80573c2a312d15d6bb9d921a01e4fb0f
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x017da5619bb4e337e31458a0ee950b6996d24eb00391732346f7c39fa1a6d305",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xaedcfcdd80573c2a312d15d6bb9d921a01e4fb0f"
    ],
    "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": "0x79ba5097",
            "selector": "0x79ba5097",
            "calldata_variants": [
                "0x79ba5097",
                "0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa3fbbaae",
            "selector": "0xa3fbbaae",
            "calldata_variants": [
                "0xa3fbbaae",
                "0xa3fbbaae0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc4e2c1e6",
            "selector": "0xc4e2c1e6",
            "calldata_variants": [
                "0xc4e2c1e6",
                "0xc4e2c1e60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1627540c",
            "selector": "0x1627540c",
            "calldata_variants": [
                "0x1627540c",
                "0x1627540c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x481c6a75",
            "selector": "0x481c6a75",
            "calldata_variants": [
                "0x481c6a75",
                "0x481c6a750000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4fdb7f44",
            "selector": "0x4fdb7f44",
            "calldata_variants": [
                "0x4fdb7f44",
                "0x4fdb7f440000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x53a47bb7",
            "selector": "0x53a47bb7",
            "calldata_variants": [
                "0x53a47bb7",
                "0x53a47bb70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2785,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [
        {
            "pc": 3192,
            "type": "tx_origin_used"
        },
        {
            "pc": 3199,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 1
}
low access_control codex renounceOwnership can be reversed by a previously nominated owner 65 no
view
evidence_json
{
    "evidence": "renounceOwnership only sets _owner = address(0) without clearing _nominatedOwner, while acceptOwnership checks only _nominatedOwner == msg.sender.",
    "locations": [
        "contracts/Contract.sol:383",
        "contracts/Contract.sol:392",
        "contracts/Contract.sol:403"
    ],
    "recommendation": "Clear _nominatedOwner in renounceOwnership and/or acceptOwnership, or require _nominatedOwner == address(0) before allowing renounceOwnership.",
    "exploit_scenario": "The owner nominates a new owner (e.g., Alice) but later calls renounceOwnership expecting a permanent lock. Because _nominatedOwner is not cleared, Alice can still call acceptOwnership and regain control, contradicting the \u201ccannot be undone\u201d expectation."
}
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
}