019d5666-7222-713e-be7e-db522974661d
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 42876 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 42877 | proxy.resolve | complete | 1 / 3 | 1 week ago |
| 42878 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 42879 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 42880 | capability.graph | complete | 1 / 3 | 1 week ago |
| 42881 | detector.run | complete | 1 / 3 | 1 week ago |
| 42882 | validation.fork | complete | 1 / 3 | 1 week ago |
| 42980 | report.consolidate | complete | 1 / 6 | 1 week ago |
{
"status": "not_proxy"
}
No slither job recorded yet.
{"no_findings":false,"summary":"Bytecode-only review found two meaningful issues: privileged sweep paths can move ETH/ERC20 out of the contract despite user-balance accounting, and the token deposit path credits the requested amount after `transferFrom` without proving the same amount was actually received. I did not count the `tx.origin` / `SELFDESTRUCT` detector hits as findings because they appear in the metadata trailer after `STOP` at `pc:0x152c`, so reachability is not evidenced from runtime code.","findings":[{"severity":"medium","category":"access_control","title":"Privileged owner can sweep custodial ETH and ERC20 balances","exploit_scenario":"If this contract is used as a custody/escrow/exchange balance holder, the slot-0 owner can call the admin withdrawal paths to send ERC20 or ETH from the contract to an arbitrary recipient. Because user balances are also tracked in storage elsewhere, those sweeps can leave users with unbacked claims or an insolvent pool. The apparent per-call cap does not prevent draining over multiple transactions.","recommendation":"Remove arbitrary owner sweep capability for user-backed assets, or restrict it to tightly-scoped rescue flows behind a multisig/timelock and explicit asset allowlists. If admin rescue must exist, reconcile or block withdrawal of assets that back user balances.","evidence":"`pc:0x349` begins with a slot-0 owner check (`SLOAD` -> masked address -> `CALLER EQ`). That path performs `balanceOf(address(this))` on an arbitrary token at `pc:0x3f3` and then an ERC20 `transfer` call (`0xa9059cbb`) at `pc:0x4fa`. A second owner-gated path at `pc:0xb3e` performs a raw ETH `CALL` at `pc:0xbed`. Separately, the contract records depositor balances via storage updates on payable/token-deposit flows (for example `pc:0xa3e-0xa7a` and `pc:0xe7d-0xe98`), so these sweeps can bypass internal accounting.","locations":["selector:0x1e2284ed","pc:0x349","pc:0x3f3","pc:0x4fa","selector:0xa6fb97d1","pc:0xb3e","pc:0xbed","selector:0xf851a440"]},{"severity":"medium","category":"other","title":"Token deposits credit the requested amount, not the amount actually received","exploit_scenario":"A user can deposit a fee-on-transfer, rebasing, or otherwise non-standard ERC20 that returns success from `transferFrom` while delivering fewer tokens than requested. The contract then credits the user's internal balance with the full requested amount, allowing later withdrawal/trading against more balance than the contract actually holds and potentially socializing the deficit to other users.","recommendation":"Measure actual tokens received by comparing pre/post balances, or only support a vetted allowlist of vanilla ERC20s whose transfers are known to be 1:1. Do not credit user balances solely from the requested `amount` parameter.","evidence":"In the `selector:0xcc2c5164` path, the contract builds calldata for standard ERC20 `transferFrom(address,address,uint256)` (`0x23b872dd`) at `pc:0xdbf-0xe16` and executes the external call at `pc:0xe2b`. After only checking call success / returned bool (`pc:0xe2c-0xe5e`), it immediately increments internal storage balances at `pc:0xe7d-0xe98` and related counters at `pc:0xeae-0xebb`. No pre/post `balanceOf` delta is observed on this path before crediting.","locations":["selector:0xcc2c5164","pc:0xdbf","pc:0xe2b","pc:0xe7d","pc:0xe98","pc:0xeae"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-c_36tz1k
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d569e-2c9c-7012-9fbc-9822047a805e
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.
Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.
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.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc 'ls -la' in /tmp/codex-c_36tz1k
succeeded in 0ms:
total 380
drwx------ 2 noahkuhn noahkuhn 4096 Apr 4 03:51 .
drwxrwxrwt 253 nobody nogroup 24576 Apr 4 03:51 ..
-rw-rw-r-- 1 noahkuhn noahkuhn 349555 Apr 4 03:51 BYTECODE_BUNDLE.json
-rw-rw-r-- 1 noahkuhn noahkuhn 815 Apr 4 03:51 codex-output-schema.json
exec
/bin/bash -lc "pwd && rg --files -g 'BYTECODE_BUNDLE.json' -g 'AGENTS.md' -g '*.json'" in /tmp/codex-c_36tz1k
succeeded in 0ms:
/tmp/codex-c_36tz1k
BYTECODE_BUNDLE.json
codex-output-schema.json
exec
/bin/bash -lc "jq '.' codex-output-schema.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"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"
}
}
}
}
}
}
}
exec
/bin/bash -lc "jq 'keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"analysis_artifact",
"analysis_run",
"artifact",
"capability_graph",
"detector_findings",
"heuristics_summary"
]
exec
/bin/bash -lc "jq '.analysis_artifact | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"address",
"artifact_hash",
"artifact_json",
"block_number",
"chain_id",
"codehash",
"created_at",
"id",
"updated_at",
"version"
]
exec
/bin/bash -lc "jq '.detector_findings | {count:length, by_detector:(group_by(.detector) | map({detector: .[0].detector, count:length}))}' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"count": 4,
"by_detector": [
{
"detector": null,
"count": 4
}
]
}
exec
/bin/bash -lc "jq '.heuristics_summary | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"create2_count",
"delegatecall_count",
"flags",
"selfdestruct_count"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"auth",
"basic_blocks",
"callsites",
"cfg_edges",
"cfg_hash",
"dispatcher_type",
"function_entries",
"functions",
"selectors",
"sinks",
"storage",
"version"
]
exec
/bin/bash -lc "jq '.heuristics_summary' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"create2_count": 0,
"delegatecall_count": 0,
"flags": [
"selfdestruct_present",
"heavy_ext_balance_usage"
],
"selfdestruct_count": 1
}
exec
/bin/bash -lc "jq '.detector_findings' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
{
"confidence": 70,
"evidence_json": {
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
},
"normalized_json": {
"pattern": "tx.origin"
},
"severity": "high",
"title": "Authorization based on tx.origin",
"validated": false,
"validation_json": {
"reason": "missing sink mapping",
"status": "no_sink"
}
},
{
"confidence": 45,
"evidence_json": {
"call_count": 6,
"examples": [
{
"opcode": "CALL",
"pc": 1011,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1274,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 3053,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 6
},
"normalized_json": {
"sink": "CALL"
},
"severity": "medium",
"title": "Untrusted CALL target/value reachable",
"validated": false,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x96541c4926a32ea3a97fd8d335aff1f81e50ffe9"
],
"classification": "constant_target",
"confirmed": false,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "sink_reached",
"target_varies": false,
"trace_id": "0xadf92b7cae4a946e4e654e57ce890afe08dce46b68dd16a27c9e2e5ba4412f70",
"trace_mode": "callTracer"
}
},
{
"confidence": 40,
"evidence_json": {
"eth_value_calls": 6,
"examples": [
{
"opcode": "CALL",
"pc": 1011,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1274,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 3053,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
},
"normalized_json": {
"sink": "CALL",
"value": "nonzero"
},
"severity": "medium",
"title": "ETH value transfer possible",
"validated": false,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x96541c4926a32ea3a97fd8d335aff1f81e50ffe9"
],
"classification": "constant_target",
"confirmed": false,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "sink_reached",
"target_varies": false,
"trace_id": "0xadf92b7cae4a946e4e654e57ce890afe08dce46b68dd16a27c9e2e5ba4412f70",
"trace_mode": "callTracer"
}
},
{
"confidence": 45,
"evidence_json": {
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
],
"selfdestruct_count": 1
},
"normalized_json": {
"sink": "SELFDESTRUCT"
},
"severity": "medium",
"title": "SELFDESTRUCT reachable",
"validated": false,
"validation_json": {
"attempts": 24,
"call_targets": null,
"classification": "no_sink",
"confirmed": false,
"errors": 0,
"matched_probe": null,
"sink": "SELFDESTRUCT",
"status": "unknown",
"target_varies": null,
"trace_id": "0x562c1b9dd7f428da630378218d394337cd53a5c1f5775cf344fc631de11129c5",
"trace_mode": "structLogs"
}
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.selectors' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"0x1e2284ed",
"0x4adae0da",
"0x98e0b39a",
"0x997805d4",
"0xa26e1186",
"0xa6fb97d1",
"0xad2de9b0",
"0xcc2c5164",
"0xdc131545",
"0xf56e81fa",
"0xf851a440",
"0xfb7311b1"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.auth' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"guards": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.function_entries' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
{
"entry_pc": null,
"selector": "0x1e2284ed"
},
{
"entry_pc": 2564862874,
"selector": "0x4adae0da"
},
{
"entry_pc": 2574779860,
"selector": "0x98e0b39a"
},
{
"entry_pc": 2725122438,
"selector": "0x997805d4"
},
{
"entry_pc": 2801506257,
"selector": "0xa26e1186"
},
{
"entry_pc": 2905467312,
"selector": "0xa6fb97d1"
},
{
"entry_pc": 3425456484,
"selector": "0xad2de9b0"
},
{
"entry_pc": 3692238149,
"selector": "0xcc2c5164"
},
{
"entry_pc": 4117660154,
"selector": "0xdc131545"
},
{
"entry_pc": 4166100032,
"selector": "0xf56e81fa"
},
{
"entry_pc": 4218622385,
"selector": "0xf851a440"
},
{
"entry_pc": 0,
"selector": "0xfb7311b1"
}
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.callsites' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
{
"opcode": "CALL",
"pc": 1011,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1274,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 3053,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 3198,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 3627,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 4734,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "STATICCALL",
"pc": 5426,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "n/a"
}
]
exec
/bin/bash -lc "jq '.capability_graph | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"address",
"block_number",
"chain_id",
"codehash",
"created_at",
"graph_hash",
"graph_json",
"id",
"updated_at",
"version"
]
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.storage' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"keccak_count": 39,
"reads": 62,
"slots": [
{
"op": "SLOAD",
"pc": 845,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1424,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1457,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1489,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1595,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1678,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1811,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1844,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1960,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2089,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2122,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2237,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2317,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2882,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 3961,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4068,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4156,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4189,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4392,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4491,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4628,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4763,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4976,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 5052,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 19
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.basic_blocks[] | select(.start_pc<=1011 and .end_pc>=1011)' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"end_pc": 1018,
"hash": "0xdd8c22d1e5503e0c83b31fa5ca418971a1285a891d81c38b01716cb45ad586a9",
"opcodes": [
"JUMPDEST",
"POP",
"GAS",
"CALL",
"ISZERO",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1008
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.basic_blocks[] | select(.start_pc<=5487 and .end_pc>=5487)' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"end_pc": 5489,
"hash": "0x42bfce7772004d1f3a408f9cebc7b30374549ab699747ae55da82bdce66b44b6",
"opcodes": [
"SGT",
"OP_24",
"OP_B0",
"STATICCALL",
"PUSH30",
"PUSH19",
"MOD",
"OP_49",
"OP_2E",
"OP_2C",
"OP_AB",
"CODESIZE",
"OP_9B",
"OP_88",
"OP_95",
"ORIGIN",
"OR",
"PUSH7"
],
"start_pc": 5423
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.functions | length' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
12
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.functions[0]' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"auth": {
"guards": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
},
"entry_pc": null,
"selector": "0x1e2284ed",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 1
},
"storage": {
"reads": 62,
"slots": [
{
"op": "SLOAD",
"pc": 845,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1424,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1457,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1489,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1595,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1678,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1811,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1844,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1960,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2089,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2122,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2237,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2317,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2882,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 3961,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4068,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4156,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4189,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4392,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4491,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4628,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4763,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4976,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 5052,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 19
}
}
exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.functions' BYTECODE_BUNDLE.json | head -c 12000" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
{
"auth": {
"guards": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
},
"entry_pc": null,
"selector": "0x1e2284ed",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 1
},
"storage": {
"reads": 62,
"slots": [
{
"op": "SLOAD",
"pc": 845,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1424,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1457,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1489,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1595,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1678,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1811,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1844,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1960,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2089,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2122,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2237,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2317,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2882,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 3961,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4068,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4156,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4189,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4392,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4491,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4628,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4763,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4976,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 5052,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 19
}
},
{
"auth": {
"guards": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
},
"entry_pc": 2564862874,
"selector": "0x4adae0da",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 1
},
"storage": {
"reads": 62,
"slots": [
{
"op": "SLOAD",
"pc": 845,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1424,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1457,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1489,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1595,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1678,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1811,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1844,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1960,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2089,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2122,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2237,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2317,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2882,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 3961,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4068,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4156,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4189,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4392,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4491,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4628,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4763,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4976,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 5052,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
],
"writes": 19
}
},
{
"auth": {
"guards": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
},
"entry_pc": 2574779860,
"selector": "0x98e0b39a",
"sinks": {
"call": 6,
"delegatecall": 0,
"selfdestruct": 1,
"staticcall": 1
},
"storage": {
"reads": 62,
"slots": [
{
"op": "SLOAD",
"pc": 845,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1424,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1457,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1489,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1595,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 1678,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1811,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1844,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 1960,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2089,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2122,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2237,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 2317,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 2882,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 3961,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4068,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4156,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4189,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAD",
"pc": 4305,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
},
{
"op": "SLOAD",
"pc": 4392,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
{
"op": "SLOAError: writing output failed: Broken pipe
exec
/bin/bash -lc "jq '.artifact | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"codehash",
"compiler_json",
"implementation_address",
"is_proxy",
"runtime_bytecode",
"verified_source"
]
exec
/bin/bash -lc "jq '.analysis_run | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"address",
"block_number",
"chain_id",
"child_links",
"created_at",
"id",
"parent_links",
"status",
"updated_at"
]
exec
/bin/bash -lc "jq '.capability_graph.graph_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"edges",
"nodes",
"version"
]
exec
/bin/bash -lc "jq -r '.artifact.runtime_bytecode | \"len=\" + ((length-2)/2|tostring) + \"\\n\" + .[0:120] + \"...\"' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
exited 5 in 0ms:
jq: error (at BYTECODE_BUNDLE.json:12966): Cannot index object with object
exec
/bin/bash -lc "jq '.artifact | {is_proxy, implementation_address, verified_source, compiler_json}' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
{
"is_proxy": false,
"implementation_address": null,
"verified_source": false,
"compiler_json": {
"compiler_version": null,
"etherscan": {
"contract_name": null,
"implementation": null,
"license": "Unknown",
"proxy": "0",
"swarm_source": null
},
"optimizer_enabled": false,
"optimizer_runs": 0,
"proxy_evidence": {
"status": "not_proxy"
}
}
}
exec
/bin/bash -lc "jq '.artifact.runtime_bytecode | type, .' BYTECODE_BUNDLE.json | head -c 2000" in /tmp/codex-c_36tz1k
succeeded in 0ms:
"object"
{
"full": "0x6080604052600436106100b95763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631e2284ed81146100be5780634adae0da146100e057806398e0b39a14610107578063997805d4146101b4578063a26e1186146101d4578063a6fb97d114610220578063ad2de9b01461023a578063cc2c51641461025b578063dc131545146102bc578063f56e81fa146102d6578063f851a44014610300578063fb7311b114610331575b600080fd5b6100de600435600160a060020a0360243581169060443516606435610349565b005b3480156100ec57600080fd5b506100f5610535565b60408051918252519081900360200190f35b34801561011357600080fd5b5061012e600160a060020a036004358116906024351661053b565b6040518084815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561017757818101518382015260200161015f565b50505050905090810190601f1680156101a45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6100de600435600160a060020a036024358116906044351660643561068a565b6040805160206004803580820135601f81018490048402850184019095528484526100de9436949293602493928401919081908401838280828437509497506109599650505050505050565b6100de600435600160a060020a0360243516604435610b3e565b34801561024657600080fd5b506100f5600160a060020a0360043516610c03565b6040805160206004803580820135601f81018490048402850184019095528484526100de94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604001359050610cad565b6100de600435600160a060020a0360243516604435610f75565b3480156102e257600080fd5b5061012e600160a060020a03600435811690602435166044356112df565b34801561030c57600080fd5b506103156113b9565b60408051600160a060020a039092168252519081900360200190f35b34801561033d57600080fd5b506100f56004356113c8565b60008054600160a060020a03163314801561036f57506a084595161401484a0000008211155b151561037a57600080fd5b600160a060020a038316151561038f57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038516916370a0823191602480830192602092919082Error: writing output failed: Broken pipe
exec
/bin/bash -lc "jq '.artifact.runtime_bytecode | keys' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
[
"full",
"head",
"length",
"tail",
"truncated"
]
exec
/bin/bash -lc "jq -r '.artifact.runtime_bytecode.full | \"len=\" + ((length-2)/2|tostring)' BYTECODE_BUNDLE.json" in /tmp/codex-c_36tz1k
succeeded in 0ms:
len=5496
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops = {i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
bytecode=json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:]
code=bytes.fromhex(bytecode)
def disasm(start,end):
pc=start
while pc<end and pc<len(code):
op=code[pc]
name=ops.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc += 1+n
else:
print(f'{pc:04x}: {name}')
pc += 1
for start,end in [(0x0,0x120),(0x349,0x430),(0x530,0x620),(0x680,0x760),(0xbe0,0xc90),(0x1260,0x12e0),(0x1500,0x1580)]:
print('\\n===',hex(start),hex(end),'===')
disasm(start,end)
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
=== 0x0 0x120 ===
0000: PUSH1 0x80
0002: PUSH1 0x40
0004: MSTORE
0005: PUSH1 0x04
0007: CALLDATASIZE
0008: LT
0009: PUSH2 0x00b9
000c: JUMPI
000d: PUSH4 0xffffffff
0012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0030: PUSH1 0x00
0032: CALLDATALOAD
0033: DIV
0034: AND
0035: PUSH4 0x1e2284ed
003a: DUP2
003b: EQ
003c: PUSH2 0x00be
003f: JUMPI
0040: DUP1
0041: PUSH4 0x4adae0da
0046: EQ
0047: PUSH2 0x00e0
004a: JUMPI
004b: DUP1
004c: PUSH4 0x98e0b39a
0051: EQ
0052: PUSH2 0x0107
0055: JUMPI
0056: DUP1
0057: PUSH4 0x997805d4
005c: EQ
005d: PUSH2 0x01b4
0060: JUMPI
0061: DUP1
0062: PUSH4 0xa26e1186
0067: EQ
0068: PUSH2 0x01d4
006b: JUMPI
006c: DUP1
006d: PUSH4 0xa6fb97d1
0072: EQ
0073: PUSH2 0x0220
0076: JUMPI
0077: DUP1
0078: PUSH4 0xad2de9b0
007d: EQ
007e: PUSH2 0x023a
0081: JUMPI
0082: DUP1
0083: PUSH4 0xcc2c5164
0088: EQ
0089: PUSH2 0x025b
008c: JUMPI
008d: DUP1
008e: PUSH4 0xdc131545
0093: EQ
0094: PUSH2 0x02bc
0097: JUMPI
0098: DUP1
0099: PUSH4 0xf56e81fa
009e: EQ
009f: PUSH2 0x02d6
00a2: JUMPI
00a3: DUP1
00a4: PUSH4 0xf851a440
00a9: EQ
00aa: PUSH2 0x0300
00ad: JUMPI
00ae: DUP1
00af: PUSH4 0xfb7311b1
00b4: EQ
00b5: PUSH2 0x0331
00b8: JUMPI
00b9: JUMPDEST
00ba: PUSH1 0x00
00bc: DUP1
00bd: REVERT
00be: JUMPDEST
00bf: PUSH2 0x00de
00c2: PUSH1 0x04
00c4: CALLDATALOAD
00c5: PUSH1 0x01
00c7: PUSH1 0xa0
00c9: PUSH1 0x02
00cb: EXP
00cc: SUB
00cd: PUSH1 0x24
00cf: CALLDATALOAD
00d0: DUP2
00d1: AND
00d2: SWAP1
00d3: PUSH1 0x44
00d5: CALLDATALOAD
00d6: AND
00d7: PUSH1 0x64
00d9: CALLDATALOAD
00da: PUSH2 0x0349
00dd: JUMP
00de: JUMPDEST
00df: STOP
00e0: JUMPDEST
00e1: CALLVALUE
00e2: DUP1
00e3: ISZERO
00e4: PUSH2 0x00ec
00e7: JUMPI
00e8: PUSH1 0x00
00ea: DUP1
00eb: REVERT
00ec: JUMPDEST
00ed: POP
00ee: PUSH2 0x00f5
00f1: PUSH2 0x0535
00f4: JUMP
00f5: JUMPDEST
00f6: PUSH1 0x40
00f8: DUP1
00f9: MLOAD
00fa: SWAP2
00fb: DUP3
00fc: MSTORE
00fd: MLOAD
00fe: SWAP1
00ff: DUP2
0100: SWAP1
0101: SUB
0102: PUSH1 0x20
0104: ADD
0105: SWAP1
0106: RETURN
0107: JUMPDEST
0108: CALLVALUE
0109: DUP1
010a: ISZERO
010b: PUSH2 0x0113
010e: JUMPI
010f: PUSH1 0x00
0111: DUP1
0112: REVERT
0113: JUMPDEST
0114: POP
0115: PUSH2 0x012e
0118: PUSH1 0x01
011a: PUSH1 0xa0
011c: PUSH1 0x02
011e: EXP
011f: SUB
=== 0x349 0x430 ===
0349: JUMPDEST
034a: PUSH1 0x00
034c: DUP1
034d: SLOAD
034e: PUSH1 0x01
0350: PUSH1 0xa0
0352: PUSH1 0x02
0354: EXP
0355: SUB
0356: AND
0357: CALLER
0358: EQ
0359: DUP1
035a: ISZERO
035b: PUSH2 0x036f
035e: JUMPI
035f: POP
0360: PUSH11 0x084595161401484a000000
036c: DUP3
036d: GT
036e: ISZERO
036f: JUMPDEST
0370: ISZERO
0371: ISZERO
0372: PUSH2 0x037a
0375: JUMPI
0376: PUSH1 0x00
0378: DUP1
0379: REVERT
037a: JUMPDEST
037b: PUSH1 0x01
037d: PUSH1 0xa0
037f: PUSH1 0x02
0381: EXP
0382: SUB
0383: DUP4
0384: AND
0385: ISZERO
0386: ISZERO
0387: PUSH2 0x038f
038a: JUMPI
038b: PUSH1 0x00
038d: DUP1
038e: REVERT
038f: JUMPDEST
0390: PUSH1 0x40
0392: DUP1
0393: MLOAD
0394: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
03b5: DUP2
03b6: MSTORE
03b7: ADDRESS
03b8: PUSH1 0x04
03ba: DUP3
03bb: ADD
03bc: MSTORE
03bd: SWAP1
03be: MLOAD
03bf: PUSH1 0x01
03c1: PUSH1 0xa0
03c3: PUSH1 0x02
03c5: EXP
03c6: SUB
03c7: DUP6
03c8: AND
03c9: SWAP2
03ca: PUSH4 0x70a08231
03cf: SWAP2
03d0: PUSH1 0x24
03d2: DUP1
03d3: DUP4
03d4: ADD
03d5: SWAP3
03d6: PUSH1 0x20
03d8: SWAP3
03d9: SWAP2
03da: SWAP1
03db: DUP3
03dc: SWAP1
03dd: SUB
03de: ADD
03df: DUP2
03e0: PUSH1 0x00
03e2: DUP8
03e3: DUP1
03e4: EXTCODESIZE
03e5: ISZERO
03e6: DUP1
03e7: ISZERO
03e8: PUSH2 0x03f0
03eb: JUMPI
03ec: PUSH1 0x00
03ee: DUP1
03ef: REVERT
03f0: JUMPDEST
03f1: POP
03f2: GAS
03f3: CALL
03f4: ISZERO
03f5: DUP1
03f6: ISZERO
03f7: PUSH2 0x0404
03fa: JUMPI
03fb: RETURNDATASIZE
03fc: PUSH1 0x00
03fe: DUP1
03ff: RETURNDATACOPY
0400: RETURNDATASIZE
0401: PUSH1 0x00
0403: REVERT
0404: JUMPDEST
0405: POP
0406: POP
0407: POP
0408: POP
0409: PUSH1 0x40
040b: MLOAD
040c: RETURNDATASIZE
040d: PUSH1 0x20
040f: DUP2
0410: LT
0411: ISZERO
0412: PUSH2 0x041a
0415: JUMPI
0416: PUSH1 0x00
0418: DUP1
0419: REVERT
041a: JUMPDEST
041b: POP
041c: MLOAD
041d: SWAP1
041e: POP
041f: DUP2
0420: DUP2
0421: LT
0422: ISZERO
0423: PUSH2 0x042b
0426: JUMPI
0427: PUSH1 0x00
0429: DUP1
042a: REVERT
042b: JUMPDEST
042c: PUSH1 0x40
042e: DUP1
042f: MLOAD
=== 0x530 0x620 ===
0530: POP
0531: POP
0532: POP
0533: POP
0534: JUMP
0535: JUMPDEST
0536: ADDRESS
0537: BALANCE
0538: JUMPDEST
0539: SWAP1
053a: JUMP
053b: JUMPDEST
053c: PUSH1 0x01
053e: PUSH1 0xa0
0540: PUSH1 0x02
0542: EXP
0543: SUB
0544: DUP1
0545: DUP4
0546: AND
0547: PUSH1 0x00
0549: SWAP1
054a: DUP2
054b: MSTORE
054c: PUSH1 0x01
054e: PUSH1 0x20
0550: SWAP1
0551: DUP2
0552: MSTORE
0553: PUSH1 0x40
0555: DUP1
0556: DUP4
0557: SHA3
0558: SWAP4
0559: DUP6
055a: AND
055b: DUP4
055c: MSTORE
055d: SWAP3
055e: SWAP1
055f: MSTORE
0560: SWAP1
0561: DUP2
0562: SHA3
0563: DUP1
0564: SLOAD
0565: PUSH1 0x60
0567: SWAP2
0568: DUP4
0569: SWAP2
056a: ISZERO
056b: ISZERO
056c: PUSH2 0x058b
056f: JUMPI
0570: PUSH1 0x40
0572: DUP1
0573: MLOAD
0574: PUSH1 0x20
0576: DUP2
0577: ADD
0578: SWAP1
0579: SWAP2
057a: MSTORE
057b: PUSH1 0x00
057d: DUP1
057e: DUP3
057f: MSTORE
0580: SWAP5
0581: POP
0582: SWAP3
0583: POP
0584: DUP4
0585: SWAP2
0586: POP
0587: PUSH2 0x0682
058a: JUMP
058b: JUMPDEST
058c: DUP1
058d: PUSH1 0x00
058f: DUP2
0590: SLOAD
0591: DUP2
0592: LT
0593: ISZERO
0594: ISZERO
0595: PUSH2 0x059a
0598: JUMPI
0599: INVALID
059a: JUMPDEST
059b: SWAP1
059c: PUSH1 0x00
059e: MSTORE
059f: PUSH1 0x20
05a1: PUSH1 0x00
05a3: SHA3
05a4: SWAP1
05a5: PUSH1 0x03
05a7: MUL
05a8: ADD
05a9: PUSH1 0x00
05ab: ADD
05ac: SLOAD
05ad: DUP2
05ae: PUSH1 0x00
05b0: DUP2
05b1: SLOAD
05b2: DUP2
05b3: LT
05b4: ISZERO
05b5: ISZERO
05b6: PUSH2 0x05bb
05b9: JUMPI
05ba: INVALID
05bb: JUMPDEST
05bc: SWAP1
05bd: PUSH1 0x00
05bf: MSTORE
05c0: PUSH1 0x20
05c2: PUSH1 0x00
05c4: SHA3
05c5: SWAP1
05c6: PUSH1 0x03
05c8: MUL
05c9: ADD
05ca: PUSH1 0x01
05cc: ADD
05cd: DUP3
05ce: PUSH1 0x00
05d0: DUP2
05d1: SLOAD
05d2: DUP2
05d3: LT
05d4: ISZERO
05d5: ISZERO
05d6: PUSH2 0x05db
05d9: JUMPI
05da: INVALID
05db: JUMPDEST
05dc: PUSH1 0x00
05de: SWAP2
05df: DUP3
05e0: MSTORE
05e1: PUSH1 0x20
05e3: SWAP2
05e4: DUP3
05e5: SWAP1
05e6: SHA3
05e7: PUSH1 0x02
05e9: PUSH1 0x03
05eb: SWAP1
05ec: SWAP3
05ed: MUL
05ee: ADD
05ef: DUP2
05f0: ADD
05f1: SLOAD
05f2: DUP4
05f3: SLOAD
05f4: PUSH1 0x40
05f6: DUP1
05f7: MLOAD
05f8: PUSH1 0x1f
05fa: PUSH1 0x00
05fc: NOT
05fd: PUSH2 0x0100
0600: PUSH1 0x01
0602: DUP7
0603: AND
0604: ISZERO
0605: MUL
0606: ADD
0607: SWAP1
0608: SWAP4
0609: AND
060a: SWAP5
060b: SWAP1
060c: SWAP5
060d: DIV
060e: SWAP2
060f: DUP3
0610: ADD
0611: DUP6
0612: SWAP1
0613: DIV
0614: DUP6
0615: MUL
0616: DUP5
0617: ADD
0618: DUP6
0619: ADD
061a: SWAP1
061b: MSTORE
061c: DUP1
061d: DUP4
061e: MSTORE
061f: SWAP1
=== 0x680 0x760 ===
0680: SWAP4
0681: POP
0682: JUMPDEST
0683: POP
0684: SWAP3
0685: POP
0686: SWAP3
0687: POP
0688: SWAP3
0689: JUMP
068a: JUMPDEST
068b: PUSH1 0x00
068d: DUP1
068e: SLOAD
068f: PUSH1 0x01
0691: PUSH1 0xa0
0693: PUSH1 0x02
0695: EXP
0696: SUB
0697: AND
0698: CALLER
0699: EQ
069a: PUSH2 0x06a2
069d: JUMPI
069e: PUSH1 0x00
06a0: DUP1
06a1: REVERT
06a2: JUMPDEST
06a3: POP
06a4: PUSH1 0x01
06a6: PUSH1 0xa0
06a8: PUSH1 0x02
06aa: EXP
06ab: SUB
06ac: DUP1
06ad: DUP4
06ae: AND
06af: PUSH1 0x00
06b1: SWAP1
06b2: DUP2
06b3: MSTORE
06b4: PUSH1 0x01
06b6: PUSH1 0x20
06b8: DUP2
06b9: DUP2
06ba: MSTORE
06bb: PUSH1 0x40
06bd: DUP1
06be: DUP5
06bf: SHA3
06c0: SWAP5
06c1: DUP9
06c2: AND
06c3: DUP5
06c4: MSTORE
06c5: SWAP4
06c6: SWAP1
06c7: MSTORE
06c8: SWAP2
06c9: SWAP1
06ca: SHA3
06cb: DUP1
06cc: SLOAD
06cd: SWAP1
06ce: SWAP2
06cf: EQ
06d0: PUSH2 0x06d8
06d3: JUMPI
06d4: PUSH1 0x00
06d6: DUP1
06d7: REVERT
06d8: JUMPDEST
06d9: DUP2
06da: PUSH1 0x01
06dc: EQ
06dd: ISZERO
06de: PUSH2 0x07f7
06e1: JUMPI
06e2: DUP4
06e3: PUSH1 0x01
06e5: PUSH1 0xa0
06e7: PUSH1 0x02
06e9: EXP
06ea: SUB
06eb: AND
06ec: CALLER
06ed: PUSH1 0x01
06ef: PUSH1 0xa0
06f1: PUSH1 0x02
06f3: EXP
06f4: SUB
06f5: AND
06f6: DUP5
06f7: PUSH1 0x01
06f9: PUSH1 0xa0
06fb: PUSH1 0x02
06fd: EXP
06fe: SUB
06ff: AND
0700: PUSH1 0x00
0702: DUP1
0703: MLOAD
0704: PUSH1 0x20
0706: PUSH2 0x152d
0709: DUP4
070a: CODECOPY
070b: DUP2
070c: MLOAD
070d: SWAP2
070e: MSTORE
070f: DUP5
0710: PUSH1 0x00
0712: DUP2
0713: SLOAD
0714: DUP2
0715: LT
0716: ISZERO
0717: ISZERO
0718: PUSH2 0x071d
071b: JUMPI
071c: INVALID
071d: JUMPDEST
071e: SWAP1
071f: PUSH1 0x00
0721: MSTORE
0722: PUSH1 0x20
0724: PUSH1 0x00
0726: SHA3
0727: SWAP1
0728: PUSH1 0x03
072a: MUL
072b: ADD
072c: PUSH1 0x01
072e: ADD
072f: DUP10
0730: DUP7
0731: PUSH1 0x00
0733: DUP2
0734: SLOAD
0735: DUP2
0736: LT
0737: ISZERO
0738: ISZERO
0739: PUSH2 0x073e
073c: JUMPI
073d: INVALID
073e: JUMPDEST
073f: PUSH1 0x00
0741: SWAP2
0742: DUP3
0743: MSTORE
0744: PUSH1 0x20
0746: SWAP2
0747: DUP3
0748: SWAP1
0749: SHA3
074a: PUSH1 0x03
074c: SWAP1
074d: SWAP2
074e: MUL
074f: ADD
0750: SLOAD
0751: PUSH1 0x40
0753: DUP1
0754: MLOAD
0755: SWAP3
0756: DUP4
0757: ADD
0758: DUP5
0759: SWAP1
075a: MSTORE
075b: DUP3
075c: ADD
075d: DUP2
075e: SWAP1
075f: MSTORE
=== 0xbe0 0xc90 ===
0be0: OP_fc
0be1: MUL
0be2: SWAP1
0be3: DUP5
0be4: SWAP1
0be5: PUSH1 0x00
0be7: DUP2
0be8: DUP2
0be9: DUP2
0bea: DUP6
0beb: DUP9
0bec: DUP9
0bed: CALL
0bee: SWAP4
0bef: POP
0bf0: POP
0bf1: POP
0bf2: POP
0bf3: ISZERO
0bf4: DUP1
0bf5: ISZERO
0bf6: PUSH2 0x052e
0bf9: JUMPI
0bfa: RETURNDATASIZE
0bfb: PUSH1 0x00
0bfd: DUP1
0bfe: RETURNDATACOPY
0bff: RETURNDATASIZE
0c00: PUSH1 0x00
0c02: REVERT
0c03: JUMPDEST
0c04: PUSH1 0x00
0c06: PUSH1 0x01
0c08: PUSH1 0xa0
0c0a: PUSH1 0x02
0c0c: EXP
0c0d: SUB
0c0e: DUP3
0c0f: AND
0c10: ISZERO
0c11: ISZERO
0c12: PUSH2 0x0c1a
0c15: JUMPI
0c16: PUSH1 0x00
0c18: DUP1
0c19: REVERT
0c1a: JUMPDEST
0c1b: PUSH1 0x40
0c1d: DUP1
0c1e: MLOAD
0c1f: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
0c40: DUP2
0c41: MSTORE
0c42: ADDRESS
0c43: PUSH1 0x04
0c45: DUP3
0c46: ADD
0c47: MSTORE
0c48: SWAP1
0c49: MLOAD
0c4a: PUSH1 0x01
0c4c: PUSH1 0xa0
0c4e: PUSH1 0x02
0c50: EXP
0c51: SUB
0c52: DUP5
0c53: AND
0c54: SWAP2
0c55: PUSH4 0x70a08231
0c5a: SWAP2
0c5b: PUSH1 0x24
0c5d: DUP1
0c5e: DUP4
0c5f: ADD
0c60: SWAP3
0c61: PUSH1 0x20
0c63: SWAP3
0c64: SWAP2
0c65: SWAP1
0c66: DUP3
0c67: SWAP1
0c68: SUB
0c69: ADD
0c6a: DUP2
0c6b: PUSH1 0x00
0c6d: DUP8
0c6e: DUP1
0c6f: EXTCODESIZE
0c70: ISZERO
0c71: DUP1
0c72: ISZERO
0c73: PUSH2 0x0c7b
0c76: JUMPI
0c77: PUSH1 0x00
0c79: DUP1
0c7a: REVERT
0c7b: JUMPDEST
0c7c: POP
0c7d: GAS
0c7e: CALL
0c7f: ISZERO
0c80: DUP1
0c81: ISZERO
0c82: PUSH2 0x0c8f
0c85: JUMPI
0c86: RETURNDATASIZE
0c87: PUSH1 0x00
0c89: DUP1
0c8a: RETURNDATACOPY
0c8b: RETURNDATASIZE
0c8c: PUSH1 0x00
0c8e: REVERT
0c8f: JUMPDEST
=== 0x1260 0x12e0 ===
1260: BLOCKHASH
1261: MLOAD
1262: PUSH1 0x01
1264: PUSH1 0xa0
1266: PUSH1 0x02
1268: EXP
1269: SUB
126a: DUP6
126b: AND
126c: SWAP1
126d: DUP3
126e: ISZERO
126f: PUSH2 0x08fc
1272: MUL
1273: SWAP1
1274: DUP4
1275: SWAP1
1276: PUSH1 0x00
1278: DUP2
1279: DUP2
127a: DUP2
127b: DUP6
127c: DUP9
127d: DUP9
127e: CALL
127f: SWAP4
1280: POP
1281: POP
1282: POP
1283: POP
1284: ISZERO
1285: DUP1
1286: ISZERO
1287: PUSH2 0x1294
128a: JUMPI
128b: RETURNDATASIZE
128c: PUSH1 0x00
128e: DUP1
128f: RETURNDATACOPY
1290: RETURNDATASIZE
1291: PUSH1 0x00
1293: REVERT
1294: JUMPDEST
1295: POP
1296: JUMPDEST
1297: DUP2
1298: PUSH1 0x00
129a: DUP2
129b: SLOAD
129c: DUP2
129d: LT
129e: ISZERO
129f: ISZERO
12a0: PUSH2 0x12a5
12a3: JUMPI
12a4: INVALID
12a5: JUMPDEST
12a6: PUSH1 0x00
12a8: SWAP2
12a9: DUP3
12aa: MSTORE
12ab: PUSH1 0x20
12ad: DUP3
12ae: SHA3
12af: PUSH1 0x03
12b1: SWAP1
12b2: SWAP2
12b3: MUL
12b4: ADD
12b5: DUP2
12b6: DUP2
12b7: SSTORE
12b8: SWAP1
12b9: PUSH2 0x12c5
12bc: PUSH1 0x01
12be: DUP4
12bf: ADD
12c0: DUP3
12c1: PUSH2 0x13ec
12c4: JUMP
12c5: JUMPDEST
12c6: POP
12c7: PUSH1 0x00
12c9: PUSH1 0x02
12cb: SWAP2
12cc: SWAP1
12cd: SWAP2
12ce: ADD
12cf: SSTORE
12d0: DUP2
12d1: SLOAD
12d2: PUSH2 0x0951
12d5: DUP4
12d6: PUSH1 0x00
12d8: NOT
12d9: DUP4
12da: ADD
12db: PUSH2 0x1433
12de: JUMP
12df: JUMPDEST
=== 0x1500 0x1580 ===
1500: SWAP2
1501: SWAP1
1502: JUMPDEST
1503: DUP1
1504: DUP3
1505: GT
1506: ISZERO
1507: PUSH2 0x14de
150a: JUMPI
150b: PUSH1 0x00
150d: DUP1
150e: DUP3
150f: SSTORE
1510: PUSH2 0x151c
1513: PUSH1 0x01
1515: DUP4
1516: ADD
1517: DUP3
1518: PUSH2 0x13ec
151b: JUMP
151c: JUMPDEST
151d: POP
151e: PUSH1 0x00
1520: PUSH1 0x02
1522: DUP3
1523: ADD
1524: SSTORE
1525: PUSH1 0x03
1527: ADD
1528: PUSH2 0x1502
152b: JUMP
152c: STOP
152d: DUP12
152e: SELFDESTRUCT
152f: SGT
1530: OP_24
1531: OP_b0
1532: STATICCALL
1533: PUSH30 0x97bc7fbd7f353ac82329a90efae36ccaef984e02f333bcd484a165627a7a
1552: PUSH19 0x3058201cbc4d051d0268c805de5073f954feea
1566: MOD
1567: OP_49
1568: OP_2e
1569: OP_2c
156a: OP_ab
156b: CODESIZE
156c: SWAP12
156d: DUP9
156e: SWAP6
156f: ORIGIN
1570: OR
1571: PUSH7 0x3ac489510029
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops={i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
code=bytes.fromhex(json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:])
def disasm(center, before=40, after=80):
start=max(0, center-before)
end=min(len(code), center+after)
pc=start
while pc<end:
op=code[pc]
name=ops.get(op,f'OP_{op:02x}')
marker='>>' if pc==center else ' '
if 0x60 <= op <= 0x7f:
n=op-0x5f
data=code[pc+1:pc+1+n]
print(f'{marker} {pc:04x}: {name} 0x{data.hex()}')
pc += 1+n
else:
print(f'{marker} {pc:04x}: {name}')
pc += 1
for c in [0x4fa,0xbed,0xc7e,0xe2b,0x127e]:
print('\\n=== around',hex(c),'===')
disasm(c, before=80, after=120)
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
=== around 0x4fa ===
04aa: STOP
04ab: STOP
04ac: STOP
04ad: STOP
04ae: STOP
04af: STOP
04b0: STOP
04b1: STOP
04b2: STOP
04b3: STOP
04b4: STOP
04b5: MUL
04b6: DUP2
04b7: MSTORE
04b8: PUSH1 0x04
04ba: ADD
04bb: DUP1
04bc: DUP4
04bd: PUSH1 0x01
04bf: PUSH1 0xa0
04c1: PUSH1 0x02
04c3: EXP
04c4: SUB
04c5: AND
04c6: PUSH1 0x01
04c8: PUSH1 0xa0
04ca: PUSH1 0x02
04cc: EXP
04cd: SUB
04ce: AND
04cf: DUP2
04d0: MSTORE
04d1: PUSH1 0x20
04d3: ADD
04d4: DUP3
04d5: DUP2
04d6: MSTORE
04d7: PUSH1 0x20
04d9: ADD
04da: SWAP3
04db: POP
04dc: POP
04dd: POP
04de: PUSH1 0x20
04e0: PUSH1 0x40
04e2: MLOAD
04e3: DUP1
04e4: DUP4
04e5: SUB
04e6: DUP2
04e7: PUSH1 0x00
04e9: DUP8
04ea: DUP1
04eb: EXTCODESIZE
04ec: ISZERO
04ed: DUP1
04ee: ISZERO
04ef: PUSH2 0x04f7
04f2: JUMPI
04f3: PUSH1 0x00
04f5: DUP1
04f6: REVERT
04f7: JUMPDEST
04f8: POP
04f9: GAS
>> 04fa: CALL
04fb: ISZERO
04fc: DUP1
04fd: ISZERO
04fe: PUSH2 0x050b
0501: JUMPI
0502: RETURNDATASIZE
0503: PUSH1 0x00
0505: DUP1
0506: RETURNDATACOPY
0507: RETURNDATASIZE
0508: PUSH1 0x00
050a: REVERT
050b: JUMPDEST
050c: POP
050d: POP
050e: POP
050f: POP
0510: PUSH1 0x40
0512: MLOAD
0513: RETURNDATASIZE
0514: PUSH1 0x20
0516: DUP2
0517: LT
0518: ISZERO
0519: PUSH2 0x0521
051c: JUMPI
051d: PUSH1 0x00
051f: DUP1
0520: REVERT
0521: JUMPDEST
0522: POP
0523: MLOAD
0524: ISZERO
0525: ISZERO
0526: PUSH2 0x052e
0529: JUMPI
052a: PUSH1 0x00
052c: DUP1
052d: REVERT
052e: JUMPDEST
052f: POP
0530: POP
0531: POP
0532: POP
0533: POP
0534: JUMP
0535: JUMPDEST
0536: ADDRESS
0537: BALANCE
0538: JUMPDEST
0539: SWAP1
053a: JUMP
053b: JUMPDEST
053c: PUSH1 0x01
053e: PUSH1 0xa0
0540: PUSH1 0x02
0542: EXP
0543: SUB
0544: DUP1
0545: DUP4
0546: AND
0547: PUSH1 0x00
0549: SWAP1
054a: DUP2
054b: MSTORE
054c: PUSH1 0x01
054e: PUSH1 0x20
0550: SWAP1
0551: DUP2
0552: MSTORE
0553: PUSH1 0x40
0555: DUP1
0556: DUP4
0557: SHA3
0558: SWAP4
0559: DUP6
055a: AND
055b: DUP4
055c: MSTORE
055d: SWAP3
055e: SWAP1
055f: MSTORE
0560: SWAP1
0561: DUP2
0562: SHA3
0563: DUP1
0564: SLOAD
0565: PUSH1 0x60
0567: SWAP2
0568: DUP4
0569: SWAP2
056a: ISZERO
056b: ISZERO
056c: PUSH2 0x058b
056f: JUMPI
0570: PUSH1 0x40
=== around 0xbed ===
0b9d: SUB
0b9e: DUP6
0b9f: AND
0ba0: SWAP2
0ba1: PUSH1 0x00
0ba3: SWAP2
0ba4: PUSH32 0x83fa319e3dcab86af4165864bb9e9e884168247533a1e4abf5520b5f0321a0fe
0bc5: SWAP2
0bc6: DUP2
0bc7: SWAP1
0bc8: SUB
0bc9: PUSH1 0x60
0bcb: ADD
0bcc: SWAP1
0bcd: LOG3
0bce: PUSH1 0x40
0bd0: MLOAD
0bd1: PUSH1 0x01
0bd3: PUSH1 0xa0
0bd5: PUSH1 0x02
0bd7: EXP
0bd8: SUB
0bd9: DUP5
0bda: AND
0bdb: SWAP1
0bdc: DUP4
0bdd: ISZERO
0bde: PUSH2 0x08fc
0be1: MUL
0be2: SWAP1
0be3: DUP5
0be4: SWAP1
0be5: PUSH1 0x00
0be7: DUP2
0be8: DUP2
0be9: DUP2
0bea: DUP6
0beb: DUP9
0bec: DUP9
>> 0bed: CALL
0bee: SWAP4
0bef: POP
0bf0: POP
0bf1: POP
0bf2: POP
0bf3: ISZERO
0bf4: DUP1
0bf5: ISZERO
0bf6: PUSH2 0x052e
0bf9: JUMPI
0bfa: RETURNDATASIZE
0bfb: PUSH1 0x00
0bfd: DUP1
0bfe: RETURNDATACOPY
0bff: RETURNDATASIZE
0c00: PUSH1 0x00
0c02: REVERT
0c03: JUMPDEST
0c04: PUSH1 0x00
0c06: PUSH1 0x01
0c08: PUSH1 0xa0
0c0a: PUSH1 0x02
0c0c: EXP
0c0d: SUB
0c0e: DUP3
0c0f: AND
0c10: ISZERO
0c11: ISZERO
0c12: PUSH2 0x0c1a
0c15: JUMPI
0c16: PUSH1 0x00
0c18: DUP1
0c19: REVERT
0c1a: JUMPDEST
0c1b: PUSH1 0x40
0c1d: DUP1
0c1e: MLOAD
0c1f: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
0c40: DUP2
0c41: MSTORE
0c42: ADDRESS
0c43: PUSH1 0x04
0c45: DUP3
0c46: ADD
0c47: MSTORE
0c48: SWAP1
0c49: MLOAD
0c4a: PUSH1 0x01
0c4c: PUSH1 0xa0
0c4e: PUSH1 0x02
0c50: EXP
0c51: SUB
0c52: DUP5
0c53: AND
0c54: SWAP2
0c55: PUSH4 0x70a08231
0c5a: SWAP2
0c5b: PUSH1 0x24
0c5d: DUP1
0c5e: DUP4
0c5f: ADD
0c60: SWAP3
0c61: PUSH1 0x20
0c63: SWAP3
0c64: SWAP2
=== around 0xc7e ===
0c2e: STOP
0c2f: STOP
0c30: STOP
0c31: STOP
0c32: STOP
0c33: STOP
0c34: STOP
0c35: STOP
0c36: STOP
0c37: STOP
0c38: STOP
0c39: STOP
0c3a: STOP
0c3b: STOP
0c3c: STOP
0c3d: STOP
0c3e: STOP
0c3f: STOP
0c40: DUP2
0c41: MSTORE
0c42: ADDRESS
0c43: PUSH1 0x04
0c45: DUP3
0c46: ADD
0c47: MSTORE
0c48: SWAP1
0c49: MLOAD
0c4a: PUSH1 0x01
0c4c: PUSH1 0xa0
0c4e: PUSH1 0x02
0c50: EXP
0c51: SUB
0c52: DUP5
0c53: AND
0c54: SWAP2
0c55: PUSH4 0x70a08231
0c5a: SWAP2
0c5b: PUSH1 0x24
0c5d: DUP1
0c5e: DUP4
0c5f: ADD
0c60: SWAP3
0c61: PUSH1 0x20
0c63: SWAP3
0c64: SWAP2
0c65: SWAP1
0c66: DUP3
0c67: SWAP1
0c68: SUB
0c69: ADD
0c6a: DUP2
0c6b: PUSH1 0x00
0c6d: DUP8
0c6e: DUP1
0c6f: EXTCODESIZE
0c70: ISZERO
0c71: DUP1
0c72: ISZERO
0c73: PUSH2 0x0c7b
0c76: JUMPI
0c77: PUSH1 0x00
0c79: DUP1
0c7a: REVERT
0c7b: JUMPDEST
0c7c: POP
0c7d: GAS
>> 0c7e: CALL
0c7f: ISZERO
0c80: DUP1
0c81: ISZERO
0c82: PUSH2 0x0c8f
0c85: JUMPI
0c86: RETURNDATASIZE
0c87: PUSH1 0x00
0c89: DUP1
0c8a: RETURNDATACOPY
0c8b: RETURNDATASIZE
0c8c: PUSH1 0x00
0c8e: REVERT
0c8f: JUMPDEST
0c90: POP
0c91: POP
0c92: POP
0c93: POP
0c94: PUSH1 0x40
0c96: MLOAD
0c97: RETURNDATASIZE
0c98: PUSH1 0x20
0c9a: DUP2
0c9b: LT
0c9c: ISZERO
0c9d: PUSH2 0x0ca5
0ca0: JUMPI
0ca1: PUSH1 0x00
0ca3: DUP1
0ca4: REVERT
0ca5: JUMPDEST
0ca6: POP
0ca7: MLOAD
0ca8: SWAP3
0ca9: SWAP2
0caa: POP
0cab: POP
0cac: JUMP
0cad: JUMPDEST
0cae: PUSH1 0x00
0cb0: DUP1
0cb1: DUP1
0cb2: PUSH1 0x01
0cb4: PUSH1 0xa0
0cb6: PUSH1 0x02
0cb8: EXP
0cb9: SUB
0cba: DUP7
0cbb: AND
0cbc: ISZERO
0cbd: ISZERO
0cbe: PUSH2 0x0cc6
0cc1: JUMPI
0cc2: PUSH1 0x00
0cc4: DUP1
0cc5: REVERT
0cc6: JUMPDEST
0cc7: DUP7
0cc8: PUSH1 0x00
0cca: DUP2
0ccb: MLOAD
0ccc: DUP2
0ccd: LT
0cce: ISZERO
0ccf: ISZERO
0cd0: PUSH2 0x0cd5
0cd3: JUMPI
0cd4: INVALID
0cd5: JUMPDEST
0cd6: PUSH1 0x20
0cd8: SWAP2
0cd9: ADD
0cda: ADD
0cdb: MLOAD
0cdc: PUSH1 0xf8
0cde: PUSH1 0x02
0ce0: EXP
0ce1: SWAP1
0ce2: DUP2
0ce3: SWAP1
0ce4: DIV
0ce5: MUL
0ce6: PUSH32 0xff00000000000000000000000000000000000000000000000000000000000000
=== around 0xe2b ===
0ddb: STOP
0ddc: STOP
0ddd: STOP
0dde: STOP
0ddf: STOP
0de0: DUP2
0de1: MSTORE
0de2: CALLER
0de3: PUSH1 0x04
0de5: DUP3
0de6: ADD
0de7: MSTORE
0de8: ADDRESS
0de9: PUSH1 0x24
0deb: DUP3
0dec: ADD
0ded: MSTORE
0dee: PUSH1 0x44
0df0: DUP2
0df1: ADD
0df2: DUP8
0df3: SWAP1
0df4: MSTORE
0df5: SWAP1
0df6: MLOAD
0df7: PUSH1 0x01
0df9: PUSH1 0xa0
0dfb: PUSH1 0x02
0dfd: EXP
0dfe: SUB
0dff: DUP9
0e00: AND
0e01: SWAP2
0e02: PUSH4 0x23b872dd
0e07: SWAP2
0e08: PUSH1 0x64
0e0a: DUP1
0e0b: DUP4
0e0c: ADD
0e0d: SWAP3
0e0e: PUSH1 0x20
0e10: SWAP3
0e11: SWAP2
0e12: SWAP1
0e13: DUP3
0e14: SWAP1
0e15: SUB
0e16: ADD
0e17: DUP2
0e18: PUSH1 0x00
0e1a: DUP8
0e1b: DUP1
0e1c: EXTCODESIZE
0e1d: ISZERO
0e1e: DUP1
0e1f: ISZERO
0e20: PUSH2 0x0e28
0e23: JUMPI
0e24: PUSH1 0x00
0e26: DUP1
0e27: REVERT
0e28: JUMPDEST
0e29: POP
0e2a: GAS
>> 0e2b: CALL
0e2c: ISZERO
0e2d: DUP1
0e2e: ISZERO
0e2f: PUSH2 0x0e3c
0e32: JUMPI
0e33: RETURNDATASIZE
0e34: PUSH1 0x00
0e36: DUP1
0e37: RETURNDATACOPY
0e38: RETURNDATASIZE
0e39: PUSH1 0x00
0e3b: REVERT
0e3c: JUMPDEST
0e3d: POP
0e3e: POP
0e3f: POP
0e40: POP
0e41: PUSH1 0x40
0e43: MLOAD
0e44: RETURNDATASIZE
0e45: PUSH1 0x20
0e47: DUP2
0e48: LT
0e49: ISZERO
0e4a: PUSH2 0x0e52
0e4d: JUMPI
0e4e: PUSH1 0x00
0e50: DUP1
0e51: REVERT
0e52: JUMPDEST
0e53: POP
0e54: MLOAD
0e55: ISZERO
0e56: ISZERO
0e57: PUSH2 0x0e5f
0e5a: JUMPI
0e5b: PUSH1 0x00
0e5d: DUP1
0e5e: REVERT
0e5f: JUMPDEST
0e60: PUSH1 0x40
0e62: DUP1
0e63: MLOAD
0e64: PUSH1 0x60
0e66: DUP2
0e67: ADD
0e68: DUP3
0e69: MSTORE
0e6a: DUP7
0e6b: DUP2
0e6c: MSTORE
0e6d: PUSH1 0x20
0e6f: DUP1
0e70: DUP3
0e71: ADD
0e72: DUP11
0e73: DUP2
0e74: MSTORE
0e75: PUSH1 0x00
0e77: SWAP4
0e78: DUP4
0e79: ADD
0e7a: DUP5
0e7b: SWAP1
0e7c: MSTORE
0e7d: DUP5
0e7e: SLOAD
0e7f: PUSH1 0x01
0e81: DUP2
0e82: DUP2
0e83: ADD
0e84: DUP1
0e85: DUP9
0e86: SSTORE
0e87: DUP8
0e88: DUP8
0e89: MSTORE
0e8a: SWAP6
0e8b: DUP5
0e8c: SWAP1
0e8d: SHA3
0e8e: DUP6
0e8f: MLOAD
0e90: PUSH1 0x03
0e92: SWAP1
0e93: SWAP4
0e94: MUL
0e95: ADD
0e96: SWAP2
0e97: DUP3
0e98: SSTORE
0e99: SWAP2
0e9a: MLOAD
0e9b: DUP1
0e9c: MLOAD
0e9d: SWAP2
0e9e: SWAP4
0e9f: PUSH2 0x0ead
0ea2: SWAP4
=== around 0x127e ===
122e: SHA3
122f: SWAP1
1230: JUMPDEST
1231: DUP2
1232: SLOAD
1233: DUP2
1234: MSTORE
1235: SWAP1
1236: PUSH1 0x01
1238: ADD
1239: SWAP1
123a: PUSH1 0x20
123c: ADD
123d: DUP1
123e: DUP4
123f: GT
1240: PUSH2 0x1230
1243: JUMPI
1244: DUP3
1245: SWAP1
1246: SUB
1247: PUSH1 0x1f
1249: AND
124a: DUP3
124b: ADD
124c: SWAP2
124d: JUMPDEST
124e: POP
124f: POP
1250: SWAP6
1251: POP
1252: POP
1253: POP
1254: POP
1255: POP
1256: POP
1257: PUSH1 0x40
1259: MLOAD
125a: DUP1
125b: SWAP2
125c: SUB
125d: SWAP1
125e: LOG4
125f: PUSH1 0x40
1261: MLOAD
1262: PUSH1 0x01
1264: PUSH1 0xa0
1266: PUSH1 0x02
1268: EXP
1269: SUB
126a: DUP6
126b: AND
126c: SWAP1
126d: DUP3
126e: ISZERO
126f: PUSH2 0x08fc
1272: MUL
1273: SWAP1
1274: DUP4
1275: SWAP1
1276: PUSH1 0x00
1278: DUP2
1279: DUP2
127a: DUP2
127b: DUP6
127c: DUP9
127d: DUP9
>> 127e: CALL
127f: SWAP4
1280: POP
1281: POP
1282: POP
1283: POP
1284: ISZERO
1285: DUP1
1286: ISZERO
1287: PUSH2 0x1294
128a: JUMPI
128b: RETURNDATASIZE
128c: PUSH1 0x00
128e: DUP1
128f: RETURNDATACOPY
1290: RETURNDATASIZE
1291: PUSH1 0x00
1293: REVERT
1294: JUMPDEST
1295: POP
1296: JUMPDEST
1297: DUP2
1298: PUSH1 0x00
129a: DUP2
129b: SLOAD
129c: DUP2
129d: LT
129e: ISZERO
129f: ISZERO
12a0: PUSH2 0x12a5
12a3: JUMPI
12a4: INVALID
12a5: JUMPDEST
12a6: PUSH1 0x00
12a8: SWAP2
12a9: DUP3
12aa: MSTORE
12ab: PUSH1 0x20
12ad: DUP3
12ae: SHA3
12af: PUSH1 0x03
12b1: SWAP1
12b2: SWAP2
12b3: MUL
12b4: ADD
12b5: DUP2
12b6: DUP2
12b7: SSTORE
12b8: SWAP1
12b9: PUSH2 0x12c5
12bc: PUSH1 0x01
12be: DUP4
12bf: ADD
12c0: DUP3
12c1: PUSH2 0x13ec
12c4: JUMP
12c5: JUMPDEST
12c6: POP
12c7: PUSH1 0x00
12c9: PUSH1 0x02
12cb: SWAP2
12cc: SWAP1
12cd: SWAP2
12ce: ADD
12cf: SSTORE
12d0: DUP2
12d1: SLOAD
12d2: PUSH2 0x0951
12d5: DUP4
12d6: PUSH1 0x00
12d8: NOT
12d9: DUP4
12da: ADD
12db: PUSH2 0x1433
12de: JUMP
12df: JUMPDEST
12e0: PUSH1 0x01
12e2: PUSH1 0x20
12e4: MSTORE
12e5: DUP3
12e6: PUSH1 0x00
12e8: MSTORE
12e9: PUSH1 0x40
12eb: PUSH1 0x00
12ed: SHA3
12ee: PUSH1 0x20
12f0: MSTORE
12f1: DUP2
12f2: PUSH1 0x00
12f4: MSTORE
12f5: PUSH1 0x40
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops={i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
code=bytes.fromhex(json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:])
start,end=0x430,0x530
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
0430: DUP7
0431: DUP2
0432: MSTORE
0433: PUSH1 0x20
0435: DUP2
0436: ADD
0437: DUP5
0438: SWAP1
0439: MSTORE
043a: DUP1
043b: DUP3
043c: ADD
043d: DUP4
043e: SWAP1
043f: MSTORE
0440: SWAP1
0441: MLOAD
0442: PUSH1 0x01
0444: PUSH1 0xa0
0446: PUSH1 0x02
0448: EXP
0449: SUB
044a: DUP1
044b: DUP8
044c: AND
044d: SWAP3
044e: SWAP1
044f: DUP7
0450: AND
0451: SWAP2
0452: PUSH32 0x83fa319e3dcab86af4165864bb9e9e884168247533a1e4abf5520b5f0321a0fe
0473: SWAP2
0474: DUP2
0475: SWAP1
0476: SUB
0477: PUSH1 0x60
0479: ADD
047a: SWAP1
047b: LOG3
047c: DUP3
047d: PUSH1 0x01
047f: PUSH1 0xa0
0481: PUSH1 0x02
0483: EXP
0484: SUB
0485: AND
0486: PUSH4 0xa9059cbb
048b: DUP6
048c: DUP5
048d: PUSH1 0x40
048f: MLOAD
0490: DUP4
0491: PUSH4 0xffffffff
0496: AND
0497: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
04b5: MUL
04b6: DUP2
04b7: MSTORE
04b8: PUSH1 0x04
04ba: ADD
04bb: DUP1
04bc: DUP4
04bd: PUSH1 0x01
04bf: PUSH1 0xa0
04c1: PUSH1 0x02
04c3: EXP
04c4: SUB
04c5: AND
04c6: PUSH1 0x01
04c8: PUSH1 0xa0
04ca: PUSH1 0x02
04cc: EXP
04cd: SUB
04ce: AND
04cf: DUP2
04d0: MSTORE
04d1: PUSH1 0x20
04d3: ADD
04d4: DUP3
04d5: DUP2
04d6: MSTORE
04d7: PUSH1 0x20
04d9: ADD
04da: SWAP3
04db: POP
04dc: POP
04dd: POP
04de: PUSH1 0x20
04e0: PUSH1 0x40
04e2: MLOAD
04e3: DUP1
04e4: DUP4
04e5: SUB
04e6: DUP2
04e7: PUSH1 0x00
04e9: DUP8
04ea: DUP1
04eb: EXTCODESIZE
04ec: ISZERO
04ed: DUP1
04ee: ISZERO
04ef: PUSH2 0x04f7
04f2: JUMPI
04f3: PUSH1 0x00
04f5: DUP1
04f6: REVERT
04f7: JUMPDEST
04f8: POP
04f9: GAS
04fa: CALL
04fb: ISZERO
04fc: DUP1
04fd: ISZERO
04fe: PUSH2 0x050b
0501: JUMPI
0502: RETURNDATASIZE
0503: PUSH1 0x00
0505: DUP1
0506: RETURNDATACOPY
0507: RETURNDATASIZE
0508: PUSH1 0x00
050a: REVERT
050b: JUMPDEST
050c: POP
050d: POP
050e: POP
050f: POP
0510: PUSH1 0x40
0512: MLOAD
0513: RETURNDATASIZE
0514: PUSH1 0x20
0516: DUP2
0517: LT
0518: ISZERO
0519: PUSH2 0x0521
051c: JUMPI
051d: PUSH1 0x00
051f: DUP1
0520: REVERT
0521: JUMPDEST
0522: POP
0523: MLOAD
0524: ISZERO
0525: ISZERO
0526: PUSH2 0x052e
0529: JUMPI
052a: PUSH1 0x00
052c: DUP1
052d: REVERT
052e: JUMPDEST
052f: POP
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops={i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
code=bytes.fromhex(json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:])
for start,end in [(0x13b0,0x1455),(0xf75,0x10a0)]:
print('\\n===',hex(start),hex(end),'===')
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
=== 0x13b0 0x1455 ===
13b0: DUP1
13b1: PUSH1 0x02
13b3: ADD
13b4: SLOAD
13b5: SWAP1
13b6: POP
13b7: DUP4
13b8: JUMP
13b9: JUMPDEST
13ba: PUSH1 0x00
13bc: SLOAD
13bd: PUSH1 0x01
13bf: PUSH1 0xa0
13c1: PUSH1 0x02
13c3: EXP
13c4: SUB
13c5: AND
13c6: DUP2
13c7: JUMP
13c8: JUMPDEST
13c9: PUSH1 0x00
13cb: SWAP1
13cc: DUP2
13cd: MSTORE
13ce: PUSH1 0x02
13d0: PUSH1 0x20
13d2: MSTORE
13d3: PUSH1 0x40
13d5: SWAP1
13d6: SHA3
13d7: SLOAD
13d8: SWAP1
13d9: JUMP
13da: JUMPDEST
13db: PUSH1 0x00
13dd: DUP3
13de: DUP3
13df: GT
13e0: ISZERO
13e1: PUSH2 0x13e6
13e4: JUMPI
13e5: INVALID
13e6: JUMPDEST
13e7: POP
13e8: SWAP1
13e9: SUB
13ea: SWAP1
13eb: JUMP
13ec: JUMPDEST
13ed: POP
13ee: DUP1
13ef: SLOAD
13f0: PUSH1 0x01
13f2: DUP2
13f3: PUSH1 0x01
13f5: AND
13f6: ISZERO
13f7: PUSH2 0x0100
13fa: MUL
13fb: SUB
13fc: AND
13fd: PUSH1 0x02
13ff: SWAP1
1400: DIV
1401: PUSH1 0x00
1403: DUP3
1404: SSTORE
1405: DUP1
1406: PUSH1 0x1f
1408: LT
1409: PUSH2 0x1412
140c: JUMPI
140d: POP
140e: PUSH2 0x1430
1411: JUMP
1412: JUMPDEST
1413: PUSH1 0x1f
1415: ADD
1416: PUSH1 0x20
1418: SWAP1
1419: DIV
141a: SWAP1
141b: PUSH1 0x00
141d: MSTORE
141e: PUSH1 0x20
1420: PUSH1 0x00
1422: SHA3
1423: SWAP1
1424: DUP2
1425: ADD
1426: SWAP1
1427: PUSH2 0x1430
142a: SWAP2
142b: SWAP1
142c: PUSH2 0x14e2
142f: JUMP
1430: JUMPDEST
1431: POP
1432: JUMP
1433: JUMPDEST
1434: DUP2
1435: SLOAD
1436: DUP2
1437: DUP4
1438: SSTORE
1439: DUP2
143a: DUP2
143b: GT
143c: ISZERO
143d: PUSH2 0x145f
1440: JUMPI
1441: PUSH1 0x03
1443: MUL
1444: DUP2
1445: PUSH1 0x03
1447: MUL
1448: DUP4
1449: PUSH1 0x00
144b: MSTORE
144c: PUSH1 0x20
144e: PUSH1 0x00
1450: SHA3
1451: SWAP2
1452: DUP3
1453: ADD
1454: SWAP2
=== 0xf75 0x10a0 ===
0f75: JUMPDEST
0f76: PUSH1 0x00
0f78: DUP1
0f79: SLOAD
0f7a: DUP2
0f7b: SWAP1
0f7c: PUSH1 0x01
0f7e: PUSH1 0xa0
0f80: PUSH1 0x02
0f82: EXP
0f83: SUB
0f84: AND
0f85: CALLER
0f86: EQ
0f87: PUSH2 0x0f8f
0f8a: JUMPI
0f8b: PUSH1 0x00
0f8d: DUP1
0f8e: REVERT
0f8f: JUMPDEST
0f90: PUSH1 0x01
0f92: PUSH1 0xa0
0f94: PUSH1 0x02
0f96: EXP
0f97: SUB
0f98: DUP5
0f99: AND
0f9a: PUSH1 0x00
0f9c: SWAP1
0f9d: DUP2
0f9e: MSTORE
0f9f: PUSH32 0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49
0fc0: PUSH1 0x20
0fc2: MSTORE
0fc3: PUSH1 0x40
0fc5: SWAP1
0fc6: SHA3
0fc7: DUP1
0fc8: SLOAD
0fc9: SWAP1
0fca: SWAP3
0fcb: POP
0fcc: PUSH1 0x01
0fce: EQ
0fcf: PUSH2 0x0fd7
0fd2: JUMPI
0fd3: PUSH1 0x00
0fd5: DUP1
0fd6: REVERT
0fd7: JUMPDEST
0fd8: PUSH7 0x038d7ea4c68000
0fe0: DUP3
0fe1: PUSH1 0x00
0fe3: DUP2
0fe4: SLOAD
0fe5: DUP2
0fe6: LT
0fe7: ISZERO
0fe8: ISZERO
0fe9: PUSH2 0x0fee
0fec: JUMPI
0fed: INVALID
0fee: JUMPDEST
0fef: PUSH1 0x00
0ff1: SWAP2
0ff2: DUP3
0ff3: MSTORE
0ff4: PUSH1 0x20
0ff6: SWAP1
0ff7: SWAP2
0ff8: SHA3
0ff9: PUSH1 0x03
0ffb: SWAP1
0ffc: SWAP2
0ffd: MUL
0ffe: ADD
0fff: SLOAD
1000: GT
1001: PUSH2 0x1009
1004: JUMPI
1005: PUSH1 0x00
1007: DUP1
1008: REVERT
1009: JUMPDEST
100a: DUP3
100b: PUSH1 0x01
100d: EQ
100e: ISZERO
100f: PUSH2 0x1120
1012: JUMPI
1013: DUP4
1014: PUSH1 0x01
1016: PUSH1 0xa0
1018: PUSH1 0x02
101a: EXP
101b: SUB
101c: AND
101d: CALLER
101e: PUSH1 0x01
1020: PUSH1 0xa0
1022: PUSH1 0x02
1024: EXP
1025: SUB
1026: AND
1027: PUSH1 0x00
1029: PUSH1 0x00
102b: DUP1
102c: MLOAD
102d: PUSH1 0x20
102f: PUSH2 0x152d
1032: DUP4
1033: CODECOPY
1034: DUP2
1035: MLOAD
1036: SWAP2
1037: MSTORE
1038: DUP6
1039: PUSH1 0x00
103b: DUP2
103c: SLOAD
103d: DUP2
103e: LT
103f: ISZERO
1040: ISZERO
1041: PUSH2 0x1046
1044: JUMPI
1045: INVALID
1046: JUMPDEST
1047: SWAP1
1048: PUSH1 0x00
104a: MSTORE
104b: PUSH1 0x20
104d: PUSH1 0x00
104f: SHA3
1050: SWAP1
1051: PUSH1 0x03
1053: MUL
1054: ADD
1055: PUSH1 0x01
1057: ADD
1058: DUP10
1059: DUP8
105a: PUSH1 0x00
105c: DUP2
105d: SLOAD
105e: DUP2
105f: LT
1060: ISZERO
1061: ISZERO
1062: PUSH2 0x1067
1065: JUMPI
1066: INVALID
1067: JUMPDEST
1068: PUSH1 0x00
106a: SWAP2
106b: DUP3
106c: MSTORE
106d: PUSH1 0x20
106f: SWAP2
1070: DUP3
1071: SWAP1
1072: SHA3
1073: PUSH1 0x03
1075: SWAP1
1076: SWAP2
1077: MUL
1078: ADD
1079: SLOAD
107a: PUSH1 0x40
107c: DUP1
107d: MLOAD
107e: SWAP3
107f: DUP4
1080: ADD
1081: DUP5
1082: SWAP1
1083: MSTORE
1084: DUP3
1085: ADD
1086: DUP2
1087: SWAP1
1088: MSTORE
1089: PUSH1 0x01
108b: PUSH1 0x60
108d: DUP4
108e: ADD
108f: DUP2
1090: SWAP1
1091: MSTORE
1092: PUSH1 0x80
1094: DUP1
1095: DUP5
1096: MSTORE
1097: DUP6
1098: SLOAD
1099: PUSH1 0x02
109b: PUSH2 0x0100
109e: DUP3
109f: DUP6
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops={i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
code=bytes.fromhex(json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:])
for start,end in [(0x1100,0x1298),(0xb3e,0xc03)]:
print('\\n===',hex(start),hex(end),'===')
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
=== 0x1100 0x1298 ===
1100: JUMPI
1101: DUP3
1102: SWAP1
1103: SUB
1104: PUSH1 0x1f
1106: AND
1107: DUP3
1108: ADD
1109: SWAP2
110a: JUMPDEST
110b: POP
110c: POP
110d: SWAP6
110e: POP
110f: POP
1110: POP
1111: POP
1112: POP
1113: POP
1114: PUSH1 0x40
1116: MLOAD
1117: DUP1
1118: SWAP2
1119: SUB
111a: SWAP1
111b: LOG4
111c: PUSH2 0x1296
111f: JUMP
1120: JUMPDEST
1121: PUSH2 0x1151
1124: DUP3
1125: PUSH1 0x00
1127: DUP2
1128: SLOAD
1129: DUP2
112a: LT
112b: ISZERO
112c: ISZERO
112d: PUSH2 0x1132
1130: JUMPI
1131: INVALID
1132: JUMPDEST
1133: SWAP1
1134: PUSH1 0x00
1136: MSTORE
1137: PUSH1 0x20
1139: PUSH1 0x00
113b: SHA3
113c: SWAP1
113d: PUSH1 0x03
113f: MUL
1140: ADD
1141: PUSH1 0x00
1143: ADD
1144: SLOAD
1145: PUSH7 0x038d7ea4c68000
114d: PUSH2 0x13da
1150: JUMP
1151: JUMPDEST
1152: SWAP1
1153: POP
1154: ADDRESS
1155: BALANCE
1156: DUP2
1157: GT
1158: ISZERO
1159: PUSH2 0x1161
115c: JUMPI
115d: PUSH1 0x00
115f: DUP1
1160: REVERT
1161: JUMPDEST
1162: DUP4
1163: PUSH1 0x01
1165: PUSH1 0xa0
1167: PUSH1 0x02
1169: EXP
116a: SUB
116b: AND
116c: CALLER
116d: PUSH1 0x01
116f: PUSH1 0xa0
1171: PUSH1 0x02
1173: EXP
1174: SUB
1175: AND
1176: PUSH1 0x00
1178: PUSH1 0x00
117a: DUP1
117b: MLOAD
117c: PUSH1 0x20
117e: PUSH2 0x152d
1181: DUP4
1182: CODECOPY
1183: DUP2
1184: MLOAD
1185: SWAP2
1186: MSTORE
1187: DUP6
1188: PUSH1 0x00
118a: DUP2
118b: SLOAD
118c: DUP2
118d: LT
118e: ISZERO
118f: ISZERO
1190: PUSH2 0x1195
1193: JUMPI
1194: INVALID
1195: JUMPDEST
1196: SWAP1
1197: PUSH1 0x00
1199: MSTORE
119a: PUSH1 0x20
119c: PUSH1 0x00
119e: SHA3
119f: SWAP1
11a0: PUSH1 0x03
11a2: MUL
11a3: ADD
11a4: PUSH1 0x01
11a6: ADD
11a7: DUP10
11a8: DUP7
11a9: PUSH1 0x02
11ab: PUSH1 0x40
11ad: MLOAD
11ae: DUP1
11af: DUP1
11b0: PUSH1 0x20
11b2: ADD
11b3: DUP6
11b4: PUSH1 0x00
11b6: NOT
11b7: AND
11b8: PUSH1 0x00
11ba: NOT
11bb: AND
11bc: DUP2
11bd: MSTORE
11be: PUSH1 0x20
11c0: ADD
11c1: DUP5
11c2: DUP2
11c3: MSTORE
11c4: PUSH1 0x20
11c6: ADD
11c7: DUP4
11c8: DUP2
11c9: MSTORE
11ca: PUSH1 0x20
11cc: ADD
11cd: DUP3
11ce: DUP2
11cf: SUB
11d0: DUP3
11d1: MSTORE
11d2: DUP7
11d3: DUP2
11d4: DUP2
11d5: SLOAD
11d6: PUSH1 0x01
11d8: DUP2
11d9: PUSH1 0x01
11db: AND
11dc: ISZERO
11dd: PUSH2 0x0100
11e0: MUL
11e1: SUB
11e2: AND
11e3: PUSH1 0x02
11e5: SWAP1
11e6: DIV
11e7: DUP2
11e8: MSTORE
11e9: PUSH1 0x20
11eb: ADD
11ec: SWAP2
11ed: POP
11ee: DUP1
11ef: SLOAD
11f0: PUSH1 0x01
11f2: DUP2
11f3: PUSH1 0x01
11f5: AND
11f6: ISZERO
11f7: PUSH2 0x0100
11fa: MUL
11fb: SUB
11fc: AND
11fd: PUSH1 0x02
11ff: SWAP1
1200: DIV
1201: DUP1
1202: ISZERO
1203: PUSH2 0x124d
1206: JUMPI
1207: DUP1
1208: PUSH1 0x1f
120a: LT
120b: PUSH2 0x1222
120e: JUMPI
120f: PUSH2 0x0100
1212: DUP1
1213: DUP4
1214: SLOAD
1215: DIV
1216: MUL
1217: DUP4
1218: MSTORE
1219: SWAP2
121a: PUSH1 0x20
121c: ADD
121d: SWAP2
121e: PUSH2 0x124d
1221: JUMP
1222: JUMPDEST
1223: DUP3
1224: ADD
1225: SWAP2
1226: SWAP1
1227: PUSH1 0x00
1229: MSTORE
122a: PUSH1 0x20
122c: PUSH1 0x00
122e: SHA3
122f: SWAP1
1230: JUMPDEST
1231: DUP2
1232: SLOAD
1233: DUP2
1234: MSTORE
1235: SWAP1
1236: PUSH1 0x01
1238: ADD
1239: SWAP1
123a: PUSH1 0x20
123c: ADD
123d: DUP1
123e: DUP4
123f: GT
1240: PUSH2 0x1230
1243: JUMPI
1244: DUP3
1245: SWAP1
1246: SUB
1247: PUSH1 0x1f
1249: AND
124a: DUP3
124b: ADD
124c: SWAP2
124d: JUMPDEST
124e: POP
124f: POP
1250: SWAP6
1251: POP
1252: POP
1253: POP
1254: POP
1255: POP
1256: POP
1257: PUSH1 0x40
1259: MLOAD
125a: DUP1
125b: SWAP2
125c: SUB
125d: SWAP1
125e: LOG4
125f: PUSH1 0x40
1261: MLOAD
1262: PUSH1 0x01
1264: PUSH1 0xa0
1266: PUSH1 0x02
1268: EXP
1269: SUB
126a: DUP6
126b: AND
126c: SWAP1
126d: DUP3
126e: ISZERO
126f: PUSH2 0x08fc
1272: MUL
1273: SWAP1
1274: DUP4
1275: SWAP1
1276: PUSH1 0x00
1278: DUP2
1279: DUP2
127a: DUP2
127b: DUP6
127c: DUP9
127d: DUP9
127e: CALL
127f: SWAP4
1280: POP
1281: POP
1282: POP
1283: POP
1284: ISZERO
1285: DUP1
1286: ISZERO
1287: PUSH2 0x1294
128a: JUMPI
128b: RETURNDATASIZE
128c: PUSH1 0x00
128e: DUP1
128f: RETURNDATACOPY
1290: RETURNDATASIZE
1291: PUSH1 0x00
1293: REVERT
1294: JUMPDEST
1295: POP
1296: JUMPDEST
1297: DUP2
=== 0xb3e 0xc03 ===
0b3e: JUMPDEST
0b3f: PUSH1 0x00
0b41: DUP1
0b42: SLOAD
0b43: PUSH1 0x01
0b45: PUSH1 0xa0
0b47: PUSH1 0x02
0b49: EXP
0b4a: SUB
0b4b: AND
0b4c: CALLER
0b4d: EQ
0b4e: DUP1
0b4f: ISZERO
0b50: PUSH2 0x0b64
0b53: JUMPI
0b54: POP
0b55: PUSH11 0x084595161401484a000000
0b61: DUP3
0b62: GT
0b63: ISZERO
0b64: JUMPDEST
0b65: ISZERO
0b66: ISZERO
0b67: PUSH2 0x0b6f
0b6a: JUMPI
0b6b: PUSH1 0x00
0b6d: DUP1
0b6e: REVERT
0b6f: JUMPDEST
0b70: POP
0b71: ADDRESS
0b72: BALANCE
0b73: DUP2
0b74: DUP2
0b75: LT
0b76: ISZERO
0b77: PUSH2 0x0b7f
0b7a: JUMPI
0b7b: PUSH1 0x00
0b7d: DUP1
0b7e: REVERT
0b7f: JUMPDEST
0b80: PUSH1 0x40
0b82: DUP1
0b83: MLOAD
0b84: DUP6
0b85: DUP2
0b86: MSTORE
0b87: PUSH1 0x20
0b89: DUP2
0b8a: ADD
0b8b: DUP5
0b8c: SWAP1
0b8d: MSTORE
0b8e: DUP1
0b8f: DUP3
0b90: ADD
0b91: DUP4
0b92: SWAP1
0b93: MSTORE
0b94: SWAP1
0b95: MLOAD
0b96: PUSH1 0x01
0b98: PUSH1 0xa0
0b9a: PUSH1 0x02
0b9c: EXP
0b9d: SUB
0b9e: DUP6
0b9f: AND
0ba0: SWAP2
0ba1: PUSH1 0x00
0ba3: SWAP2
0ba4: PUSH32 0x83fa319e3dcab86af4165864bb9e9e884168247533a1e4abf5520b5f0321a0fe
0bc5: SWAP2
0bc6: DUP2
0bc7: SWAP1
0bc8: SUB
0bc9: PUSH1 0x60
0bcb: ADD
0bcc: SWAP1
0bcd: LOG3
0bce: PUSH1 0x40
0bd0: MLOAD
0bd1: PUSH1 0x01
0bd3: PUSH1 0xa0
0bd5: PUSH1 0x02
0bd7: EXP
0bd8: SUB
0bd9: DUP5
0bda: AND
0bdb: SWAP1
0bdc: DUP4
0bdd: ISZERO
0bde: PUSH2 0x08fc
0be1: MUL
0be2: SWAP1
0be3: DUP5
0be4: SWAP1
0be5: PUSH1 0x00
0be7: DUP2
0be8: DUP2
0be9: DUP2
0bea: DUP6
0beb: DUP9
0bec: DUP9
0bed: CALL
0bee: SWAP4
0bef: POP
0bf0: POP
0bf1: POP
0bf2: POP
0bf3: ISZERO
0bf4: DUP1
0bf5: ISZERO
0bf6: PUSH2 0x052e
0bf9: JUMPI
0bfa: RETURNDATASIZE
0bfb: PUSH1 0x00
0bfd: DUP1
0bfe: RETURNDATACOPY
0bff: RETURNDATASIZE
0c00: PUSH1 0x00
0c02: REVERT
web search:
web search: 4byte 1e2284ed
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops={i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
code=bytes.fromhex(json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:])
start,end=0x959,0xb40
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
0959: JUMPDEST
095a: PUSH1 0x00
095c: DUP2
095d: PUSH1 0x00
095f: DUP2
0960: MLOAD
0961: DUP2
0962: LT
0963: ISZERO
0964: ISZERO
0965: PUSH2 0x096a
0968: JUMPI
0969: INVALID
096a: JUMPDEST
096b: SWAP1
096c: PUSH1 0x20
096e: ADD
096f: ADD
0970: MLOAD
0971: PUSH1 0xf8
0973: PUSH1 0x02
0975: EXP
0976: SWAP1
0977: DIV
0978: PUSH1 0xf8
097a: PUSH1 0x02
097c: EXP
097d: MUL
097e: PUSH31 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
099e: NOT
099f: AND
09a0: PUSH32 0x6a00000000000000000000000000000000000000000000000000000000000000
09c1: EQ
09c2: ISZERO
09c3: ISZERO
09c4: PUSH2 0x09cc
09c7: JUMPI
09c8: PUSH1 0x00
09ca: DUP1
09cb: REVERT
09cc: JUMPDEST
09cd: POP
09ce: CALLER
09cf: PUSH1 0x00
09d1: SWAP1
09d2: DUP2
09d3: MSTORE
09d4: PUSH32 0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49
09f5: PUSH1 0x20
09f7: MSTORE
09f8: PUSH1 0x40
09fa: SWAP1
09fb: SHA3
09fc: DUP1
09fd: SLOAD
09fe: ISZERO
09ff: DUP1
0a00: ISZERO
0a01: PUSH2 0x0a15
0a04: JUMPI
0a05: POP
0a06: PUSH11 0x084595161401484a000000
0a12: CALLVALUE
0a13: GT
0a14: ISZERO
0a15: JUMPDEST
0a16: ISZERO
0a17: ISZERO
0a18: PUSH2 0x0a20
0a1b: JUMPI
0a1c: PUSH1 0x00
0a1e: DUP1
0a1f: REVERT
0a20: JUMPDEST
0a21: PUSH1 0x40
0a23: DUP1
0a24: MLOAD
0a25: PUSH1 0x60
0a27: DUP2
0a28: ADD
0a29: DUP3
0a2a: MSTORE
0a2b: CALLVALUE
0a2c: DUP2
0a2d: MSTORE
0a2e: PUSH1 0x20
0a30: DUP1
0a31: DUP3
0a32: ADD
0a33: DUP6
0a34: DUP2
0a35: MSTORE
0a36: PUSH1 0x00
0a38: SWAP4
0a39: DUP4
0a3a: ADD
0a3b: DUP5
0a3c: SWAP1
0a3d: MSTORE
0a3e: DUP5
0a3f: SLOAD
0a40: PUSH1 0x01
0a42: DUP2
0a43: DUP2
0a44: ADD
0a45: DUP1
0a46: DUP9
0a47: SSTORE
0a48: DUP8
0a49: DUP8
0a4a: MSTORE
0a4b: SWAP6
0a4c: DUP5
0a4d: SWAP1
0a4e: SHA3
0a4f: DUP6
0a50: MLOAD
0a51: PUSH1 0x03
0a53: SWAP1
0a54: SWAP4
0a55: MUL
0a56: ADD
0a57: SWAP2
0a58: DUP3
0a59: SSTORE
0a5a: SWAP2
0a5b: MLOAD
0a5c: DUP1
0a5d: MLOAD
0a5e: SWAP2
0a5f: SWAP4
0a60: PUSH2 0x0a6e
0a63: SWAP4
0a64: DUP6
0a65: ADD
0a66: SWAP3
0a67: SWAP2
0a68: ADD
0a69: SWAP1
0a6a: PUSH2 0x1464
0a6d: JUMP
0a6e: JUMPDEST
0a6f: POP
0a70: PUSH1 0x40
0a72: DUP3
0a73: ADD
0a74: MLOAD
0a75: DUP2
0a76: PUSH1 0x02
0a78: ADD
0a79: SSTORE
0a7a: POP
0a7b: POP
0a7c: POP
0a7d: CALLER
0a7e: PUSH1 0x01
0a80: PUSH1 0xa0
0a82: PUSH1 0x02
0a84: EXP
0a85: SUB
0a86: AND
0a87: CALLER
0a88: PUSH1 0x01
0a8a: PUSH1 0xa0
0a8c: PUSH1 0x02
0a8e: EXP
0a8f: SUB
0a90: AND
0a91: PUSH1 0x00
0a93: PUSH1 0x00
0a95: DUP1
0a96: MLOAD
0a97: PUSH1 0x20
0a99: PUSH2 0x152d
0a9c: DUP4
0a9d: CODECOPY
0a9e: DUP2
0a9f: MLOAD
0aa0: SWAP2
0aa1: MSTORE
0aa2: DUP6
0aa3: PUSH1 0x00
0aa5: CALLVALUE
0aa6: PUSH1 0x00
0aa8: PUSH1 0x40
0aaa: MLOAD
0aab: DUP1
0aac: DUP1
0aad: PUSH1 0x20
0aaf: ADD
0ab0: DUP6
0ab1: PUSH1 0x01
0ab3: MUL
0ab4: PUSH1 0x00
0ab6: NOT
0ab7: AND
0ab8: DUP2
0ab9: MSTORE
0aba: PUSH1 0x20
0abc: ADD
0abd: DUP5
0abe: DUP2
0abf: MSTORE
0ac0: PUSH1 0x20
0ac2: ADD
0ac3: DUP4
0ac4: DUP2
0ac5: MSTORE
0ac6: PUSH1 0x20
0ac8: ADD
0ac9: DUP3
0aca: DUP2
0acb: SUB
0acc: DUP3
0acd: MSTORE
0ace: DUP7
0acf: DUP2
0ad0: DUP2
0ad1: MLOAD
0ad2: DUP2
0ad3: MSTORE
0ad4: PUSH1 0x20
0ad6: ADD
0ad7: SWAP2
0ad8: POP
0ad9: DUP1
0ada: MLOAD
0adb: SWAP1
0adc: PUSH1 0x20
0ade: ADD
0adf: SWAP1
0ae0: DUP1
0ae1: DUP4
0ae2: DUP4
0ae3: PUSH1 0x00
0ae5: JUMPDEST
0ae6: DUP4
0ae7: DUP2
0ae8: LT
0ae9: ISZERO
0aea: PUSH2 0x0afd
0aed: JUMPI
0aee: DUP2
0aef: DUP2
0af0: ADD
0af1: MLOAD
0af2: DUP4
0af3: DUP3
0af4: ADD
0af5: MSTORE
0af6: PUSH1 0x20
0af8: ADD
0af9: PUSH2 0x0ae5
0afc: JUMP
0afd: JUMPDEST
0afe: POP
0aff: POP
0b00: POP
0b01: POP
0b02: SWAP1
0b03: POP
0b04: SWAP1
0b05: DUP2
0b06: ADD
0b07: SWAP1
0b08: PUSH1 0x1f
0b0a: AND
0b0b: DUP1
0b0c: ISZERO
0b0d: PUSH2 0x0b2a
0b10: JUMPI
0b11: DUP1
0b12: DUP3
0b13: SUB
0b14: DUP1
0b15: MLOAD
0b16: PUSH1 0x01
0b18: DUP4
0b19: PUSH1 0x20
0b1b: SUB
0b1c: PUSH2 0x0100
0b1f: EXP
0b20: SUB
0b21: NOT
0b22: AND
0b23: DUP2
0b24: MSTORE
0b25: PUSH1 0x20
0b27: ADD
0b28: SWAP2
0b29: POP
0b2a: JUMPDEST
0b2b: POP
0b2c: SWAP6
0b2d: POP
0b2e: POP
0b2f: POP
0b30: POP
0b31: POP
0b32: POP
0b33: PUSH1 0x40
0b35: MLOAD
0b36: DUP1
0b37: SWAP2
0b38: SUB
0b39: SWAP1
0b3a: LOG4
0b3b: POP
0b3c: POP
0b3d: JUMP
0b3e: JUMPDEST
0b3f: PUSH1 0x00
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops={i:f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
ops.update({i:f'DUP{i-0x7f}' for i in range(0x80,0x90)})
ops.update({i:f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
ops.update({i:f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'PREVRANDAO',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
ops.update(base)
code=bytes.fromhex(json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full'][2:])
start,end=0xcc0,0xf80
pc=start
while pc<end:
op=code[pc]; name=ops.get(op,f'OP_{op:02x}')
if 0x60<=op<=0x7f:
n=op-0x5f; data=code[pc+1:pc+1+n]
print(f'{pc:04x}: {name} 0x{data.hex()}')
pc+=1+n
else:
print(f'{pc:04x}: {name}')
pc+=1
PY" in /tmp/codex-c_36tz1k
succeeded in 0ms:
0cc0: OP_c6
0cc1: JUMPI
0cc2: PUSH1 0x00
0cc4: DUP1
0cc5: REVERT
0cc6: JUMPDEST
0cc7: DUP7
0cc8: PUSH1 0x00
0cca: DUP2
0ccb: MLOAD
0ccc: DUP2
0ccd: LT
0cce: ISZERO
0ccf: ISZERO
0cd0: PUSH2 0x0cd5
0cd3: JUMPI
0cd4: INVALID
0cd5: JUMPDEST
0cd6: PUSH1 0x20
0cd8: SWAP2
0cd9: ADD
0cda: ADD
0cdb: MLOAD
0cdc: PUSH1 0xf8
0cde: PUSH1 0x02
0ce0: EXP
0ce1: SWAP1
0ce2: DUP2
0ce3: SWAP1
0ce4: DIV
0ce5: MUL
0ce6: PUSH32 0xff00000000000000000000000000000000000000000000000000000000000000
0d07: AND
0d08: PUSH32 0x6a00000000000000000000000000000000000000000000000000000000000000
0d29: EQ
0d2a: SWAP3
0d2b: POP
0d2c: PUSH1 0x00
0d2e: DUP5
0d2f: GT
0d30: SWAP2
0d31: POP
0d32: DUP3
0d33: PUSH2 0x0d3b
0d36: JUMPI
0d37: PUSH1 0x00
0d39: DUP1
0d3a: REVERT
0d3b: JUMPDEST
0d3c: POP
0d3d: PUSH1 0x01
0d3f: PUSH1 0xa0
0d41: PUSH1 0x02
0d43: EXP
0d44: SUB
0d45: DUP6
0d46: AND
0d47: PUSH1 0x00
0d49: SWAP1
0d4a: DUP2
0d4b: MSTORE
0d4c: PUSH1 0x01
0d4e: PUSH1 0x20
0d50: SWAP1
0d51: DUP2
0d52: MSTORE
0d53: PUSH1 0x40
0d55: DUP1
0d56: DUP4
0d57: SHA3
0d58: CALLER
0d59: DUP5
0d5a: MSTORE
0d5b: SWAP1
0d5c: SWAP2
0d5d: MSTORE
0d5e: SWAP1
0d5f: SHA3
0d60: DUP1
0d61: SLOAD
0d62: ISZERO
0d63: DUP1
0d64: ISZERO
0d65: PUSH2 0x0d79
0d68: JUMPI
0d69: POP
0d6a: PUSH11 0x084595161401484a000000
0d76: DUP6
0d77: GT
0d78: ISZERO
0d79: JUMPDEST
0d7a: ISZERO
0d7b: ISZERO
0d7c: PUSH2 0x0d84
0d7f: JUMPI
0d80: PUSH1 0x00
0d82: DUP1
0d83: REVERT
0d84: JUMPDEST
0d85: DUP2
0d86: ISZERO
0d87: PUSH2 0x0dba
0d8a: JUMPI
0d8b: PUSH1 0x00
0d8d: DUP5
0d8e: DUP2
0d8f: MSTORE
0d90: PUSH1 0x02
0d92: PUSH1 0x20
0d94: MSTORE
0d95: PUSH1 0x40
0d97: SWAP1
0d98: SHA3
0d99: SLOAD
0d9a: ISZERO
0d9b: PUSH2 0x0da3
0d9e: JUMPI
0d9f: PUSH1 0x00
0da1: DUP1
0da2: REVERT
0da3: JUMPDEST
0da4: PUSH1 0x00
0da6: DUP5
0da7: DUP2
0da8: MSTORE
0da9: PUSH1 0x02
0dab: PUSH1 0x20
0dad: MSTORE
0dae: PUSH1 0x40
0db0: SWAP1
0db1: SHA3
0db2: PUSH1 0x01
0db4: SWAP1
0db5: SSTORE
0db6: PUSH2 0x0e5f
0db9: JUMP
0dba: JUMPDEST
0dbb: PUSH1 0x40
0dbd: DUP1
0dbe: MLOAD
0dbf: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
0de0: DUP2
0de1: MSTORE
0de2: CALLER
0de3: PUSH1 0x04
0de5: DUP3
0de6: ADD
0de7: MSTORE
0de8: ADDRESS
0de9: PUSH1 0x24
0deb: DUP3
0dec: ADD
0ded: MSTORE
0dee: PUSH1 0x44
0df0: DUP2
0df1: ADD
0df2: DUP8
0df3: SWAP1
0df4: MSTORE
0df5: SWAP1
0df6: MLOAD
0df7: PUSH1 0x01
0df9: PUSH1 0xa0
0dfb: PUSH1 0x02
0dfd: EXP
0dfe: SUB
0dff: DUP9
0e00: AND
0e01: SWAP2
0e02: PUSH4 0x23b872dd
0e07: SWAP2
0e08: PUSH1 0x64
0e0a: DUP1
0e0b: DUP4
0e0c: ADD
0e0d: SWAP3
0e0e: PUSH1 0x20
0e10: SWAP3
0e11: SWAP2
0e12: SWAP1
0e13: DUP3
0e14: SWAP1
0e15: SUB
0e16: ADD
0e17: DUP2
0e18: PUSH1 0x00
0e1a: DUP8
0e1b: DUP1
0e1c: EXTCODESIZE
0e1d: ISZERO
0e1e: DUP1
0e1f: ISZERO
0e20: PUSH2 0x0e28
0e23: JUMPI
0e24: PUSH1 0x00
0e26: DUP1
0e27: REVERT
0e28: JUMPDEST
0e29: POP
0e2a: GAS
0e2b: CALL
0e2c: ISZERO
0e2d: DUP1
0e2e: ISZERO
0e2f: PUSH2 0x0e3c
0e32: JUMPI
0e33: RETURNDATASIZE
0e34: PUSH1 0x00
0e36: DUP1
0e37: RETURNDATACOPY
0e38: RETURNDATASIZE
0e39: PUSH1 0x00
0e3b: REVERT
0e3c: JUMPDEST
0e3d: POP
0e3e: POP
0e3f: POP
0e40: POP
0e41: PUSH1 0x40
0e43: MLOAD
0e44: RETURNDATASIZE
0e45: PUSH1 0x20
0e47: DUP2
0e48: LT
0e49: ISZERO
0e4a: PUSH2 0x0e52
0e4d: JUMPI
0e4e: PUSH1 0x00
0e50: DUP1
0e51: REVERT
0e52: JUMPDEST
0e53: POP
0e54: MLOAD
0e55: ISZERO
0e56: ISZERO
0e57: PUSH2 0x0e5f
0e5a: JUMPI
0e5b: PUSH1 0x00
0e5d: DUP1
0e5e: REVERT
0e5f: JUMPDEST
0e60: PUSH1 0x40
0e62: DUP1
0e63: MLOAD
0e64: PUSH1 0x60
0e66: DUP2
0e67: ADD
0e68: DUP3
0e69: MSTORE
0e6a: DUP7
0e6b: DUP2
0e6c: MSTORE
0e6d: PUSH1 0x20
0e6f: DUP1
0e70: DUP3
0e71: ADD
0e72: DUP11
0e73: DUP2
0e74: MSTORE
0e75: PUSH1 0x00
0e77: SWAP4
0e78: DUP4
0e79: ADD
0e7a: DUP5
0e7b: SWAP1
0e7c: MSTORE
0e7d: DUP5
0e7e: SLOAD
0e7f: PUSH1 0x01
0e81: DUP2
0e82: DUP2
0e83: ADD
0e84: DUP1
0e85: DUP9
0e86: SSTORE
0e87: DUP8
0e88: DUP8
0e89: MSTORE
0e8a: SWAP6
0e8b: DUP5
0e8c: SWAP1
0e8d: SHA3
0e8e: DUP6
0e8f: MLOAD
0e90: PUSH1 0x03
0e92: SWAP1
0e93: SWAP4
0e94: MUL
0e95: ADD
0e96: SWAP2
0e97: DUP3
0e98: SSTORE
0e99: SWAP2
0e9a: MLOAD
0e9b: DUP1
0e9c: MLOAD
0e9d: SWAP2
0e9e: SWAP4
0e9f: PUSH2 0x0ead
0ea2: SWAP4
0ea3: DUP6
0ea4: ADD
0ea5: SWAP3
0ea6: SWAP2
0ea7: ADD
0ea8: SWAP1
0ea9: PUSH2 0x1464
0eac: JUMP
0ead: JUMPDEST
0eae: POP
0eaf: PUSH1 0x40
0eb1: SWAP2
0eb2: DUP3
0eb3: ADD
0eb4: MLOAD
0eb5: PUSH1 0x02
0eb7: SWAP1
0eb8: SWAP2
0eb9: ADD
0eba: SSTORE
0ebb: DUP1
0ebc: MLOAD
0ebd: PUSH1 0x20
0ebf: DUP1
0ec0: DUP3
0ec1: ADD
0ec2: DUP9
0ec3: SWAP1
0ec4: MSTORE
0ec5: SWAP2
0ec6: DUP2
0ec7: ADD
0ec8: DUP9
0ec9: SWAP1
0eca: MSTORE
0ecb: PUSH1 0x00
0ecd: PUSH1 0x60
0ecf: DUP3
0ed0: ADD
0ed1: DUP2
0ed2: SWAP1
0ed3: MSTORE
0ed4: PUSH1 0x80
0ed6: DUP1
0ed7: DUP4
0ed8: MSTORE
0ed9: DUP12
0eda: MLOAD
0edb: SWAP1
0edc: DUP4
0edd: ADD
0ede: MSTORE
0edf: DUP11
0ee0: MLOAD
0ee1: CALLER
0ee2: SWAP5
0ee3: POP
0ee4: DUP5
0ee5: SWAP4
0ee6: PUSH1 0x01
0ee8: PUSH1 0xa0
0eea: PUSH1 0x02
0eec: EXP
0eed: SUB
0eee: DUP13
0eef: AND
0ef0: SWAP4
0ef1: PUSH1 0x00
0ef3: DUP1
0ef4: MLOAD
0ef5: PUSH1 0x20
0ef7: PUSH2 0x152d
0efa: DUP4
0efb: CODECOPY
0efc: DUP2
0efd: MLOAD
0efe: SWAP2
0eff: MSTORE
0f00: SWAP4
0f01: DUP15
0f02: SWAP4
0f03: DUP13
0f04: SWAP4
0f05: DUP15
0f06: SWAP4
0f07: SWAP2
0f08: DUP3
0f09: SWAP2
0f0a: PUSH1 0xa0
0f0c: DUP4
0f0d: ADD
0f0e: SWAP2
0f0f: SWAP1
0f10: DUP9
0f11: ADD
0f12: SWAP1
0f13: DUP1
0f14: DUP4
0f15: DUP4
0f16: DUP9
0f17: JUMPDEST
0f18: DUP4
0f19: DUP2
0f1a: LT
0f1b: ISZERO
0f1c: PUSH2 0x0f2f
0f1f: JUMPI
0f20: DUP2
0f21: DUP2
0f22: ADD
0f23: MLOAD
0f24: DUP4
0f25: DUP3
0f26: ADD
0f27: MSTORE
0f28: PUSH1 0x20
0f2a: ADD
0f2b: PUSH2 0x0f17
0f2e: JUMP
0f2f: JUMPDEST
0f30: POP
0f31: POP
0f32: POP
0f33: POP
0f34: SWAP1
0f35: POP
0f36: SWAP1
0f37: DUP2
0f38: ADD
0f39: SWAP1
0f3a: PUSH1 0x1f
0f3c: AND
0f3d: DUP1
0f3e: ISZERO
0f3f: PUSH2 0x0f5c
0f42: JUMPI
0f43: DUP1
0f44: DUP3
0f45: SUB
0f46: DUP1
0f47: MLOAD
0f48: PUSH1 0x01
0f4a: DUP4
0f4b: PUSH1 0x20
0f4d: SUB
0f4e: PUSH2 0x0100
0f51: EXP
0f52: SUB
0f53: NOT
0f54: AND
0f55: DUP2
0f56: MSTORE
0f57: PUSH1 0x20
0f59: ADD
0f5a: SWAP2
0f5b: POP
0f5c: JUMPDEST
0f5d: POP
0f5e: SWAP6
0f5f: POP
0f60: POP
0f61: POP
0f62: POP
0f63: POP
0f64: POP
0f65: PUSH1 0x40
0f67: MLOAD
0f68: DUP1
0f69: SWAP2
0f6a: SUB
0f6b: SWAP1
0f6c: LOG4
0f6d: POP
0f6e: POP
0f6f: POP
0f70: POP
0f71: POP
0f72: POP
0f73: POP
0f74: JUMP
0f75: JUMPDEST
0f76: PUSH1 0x00
0f78: DUP1
0f79: SLOAD
0f7a: DUP2
0f7b: SWAP1
0f7c: PUSH1 0x01
0f7e: PUSH1 0xa0
codex
{"no_findings":false,"summary":"Bytecode-only review found two meaningful issues: privileged sweep paths can move ETH/ERC20 out of the contract despite user-balance accounting, and the token deposit path credits the requested amount after `transferFrom` without proving the same amount was actually received. I did not count the `tx.origin` / `SELFDESTRUCT` detector hits as findings because they appear in the metadata trailer after `STOP` at `pc:0x152c`, so reachability is not evidenced from runtime code.","findings":[{"severity":"medium","category":"access_control","title":"Privileged owner can sweep custodial ETH and ERC20 balances","exploit_scenario":"If this contract is used as a custody/escrow/exchange balance holder, the slot-0 owner can call the admin withdrawal paths to send ERC20 or ETH from the contract to an arbitrary recipient. Because user balances are also tracked in storage elsewhere, those sweeps can leave users with unbacked claims or an insolvent pool. The apparent per-call cap does not prevent draining over multiple transactions.","recommendation":"Remove arbitrary owner sweep capability for user-backed assets, or restrict it to tightly-scoped rescue flows behind a multisig/timelock and explicit asset allowlists. If admin rescue must exist, reconcile or block withdrawal of assets that back user balances.","evidence":"`pc:0x349` begins with a slot-0 owner check (`SLOAD` -> masked address -> `CALLER EQ`). That path performs `balanceOf(address(this))` on an arbitrary token at `pc:0x3f3` and then an ERC20 `transfer` call (`0xa9059cbb`) at `pc:0x4fa`. A second owner-gated path at `pc:0xb3e` performs a raw ETH `CALL` at `pc:0xbed`. Separately, the contract records depositor balances via storage updates on payable/token-deposit flows (for example `pc:0xa3e-0xa7a` and `pc:0xe7d-0xe98`), so these sweeps can bypass internal accounting.","locations":["selector:0x1e2284ed","pc:0x349","pc:0x3f3","pc:0x4fa","selector:0xa6fb97d1","pc:0xb3e","pc:0xbed","selector:0xf851a440"]},{"severity":"medium","category":"other","title":"Token deposits credit the requested amount, not the amount actually received","exploit_scenario":"A user can deposit a fee-on-transfer, rebasing, or otherwise non-standard ERC20 that returns success from `transferFrom` while delivering fewer tokens than requested. The contract then credits the user's internal balance with the full requested amount, allowing later withdrawal/trading against more balance than the contract actually holds and potentially socializing the deficit to other users.","recommendation":"Measure actual tokens received by comparing pre/post balances, or only support a vetted allowlist of vanilla ERC20s whose transfers are known to be 1:1. Do not credit user balances solely from the requested `amount` parameter.","evidence":"In the `selector:0xcc2c5164` path, the contract builds calldata for standard ERC20 `transferFrom(address,address,uint256)` (`0x23b872dd`) at `pc:0xdbf-0xe16` and executes the external call at `pc:0xe2b`. After only checking call success / returned bool (`pc:0xe2c-0xe5e`), it immediately increments internal storage balances at `pc:0xe7d-0xe98` and related counters at `pc:0xeae-0xebb`. No pre/post `balanceOf` delta is observed on this path before crediting.","locations":["selector:0xcc2c5164","pc:0xdbf","pc:0xe2b","pc:0xe7d","pc:0xe98","pc:0xeae"]}]}
tokens used
97,006
{
"codex": {
"ran_at": "2026-04-04T03:56:29.947938+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 10994,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "Bytecode-only review found two meaningful issues: privileged sweep paths can move ETH/ERC20 out of the contract despite user-balance accounting, and the token deposit path credits the requested amount after `transferFrom` without proving the same amount was actually received. I did not count the `tx.origin` / `SELFDESTRUCT` detector hits as findings because they appear in the metadata trailer after `STOP` at `pc:0x152c`, so reachability is not evidenced from runtime code.",
"raw_final": {
"summary": "Bytecode-only review found two meaningful issues: privileged sweep paths can move ETH/ERC20 out of the contract despite user-balance accounting, and the token deposit path credits the requested amount after `transferFrom` without proving the same amount was actually received. I did not count the `tx.origin` / `SELFDESTRUCT` detector hits as findings because they appear in the metadata trailer after `STOP` at `pc:0x152c`, so reachability is not evidenced from runtime code.",
"findings": [
{
"title": "Privileged owner can sweep custodial ETH and ERC20 balances",
"category": "access_control",
"evidence": "`pc:0x349` begins with a slot-0 owner check (`SLOAD` -> masked address -> `CALLER EQ`). That path performs `balanceOf(address(this))` on an arbitrary token at `pc:0x3f3` and then an ERC20 `transfer` call (`0xa9059cbb`) at `pc:0x4fa`. A second owner-gated path at `pc:0xb3e` performs a raw ETH `CALL` at `pc:0xbed`. Separately, the contract records depositor balances via storage updates on payable/token-deposit flows (for example `pc:0xa3e-0xa7a` and `pc:0xe7d-0xe98`), so these sweeps can bypass internal accounting.",
"severity": "medium",
"locations": [
"selector:0x1e2284ed",
"pc:0x349",
"pc:0x3f3",
"pc:0x4fa",
"selector:0xa6fb97d1",
"pc:0xb3e",
"pc:0xbed",
"selector:0xf851a440"
],
"recommendation": "Remove arbitrary owner sweep capability for user-backed assets, or restrict it to tightly-scoped rescue flows behind a multisig/timelock and explicit asset allowlists. If admin rescue must exist, reconcile or block withdrawal of assets that back user balances.",
"exploit_scenario": "If this contract is used as a custody/escrow/exchange balance holder, the slot-0 owner can call the admin withdrawal paths to send ERC20 or ETH from the contract to an arbitrary recipient. Because user balances are also tracked in storage elsewhere, those sweeps can leave users with unbacked claims or an insolvent pool. The apparent per-call cap does not prevent draining over multiple transactions."
},
{
"title": "Token deposits credit the requested amount, not the amount actually received",
"category": "other",
"evidence": "In the `selector:0xcc2c5164` path, the contract builds calldata for standard ERC20 `transferFrom(address,address,uint256)` (`0x23b872dd`) at `pc:0xdbf-0xe16` and executes the external call at `pc:0xe2b`. After only checking call success / returned bool (`pc:0xe2c-0xe5e`), it immediately increments internal storage balances at `pc:0xe7d-0xe98` and related counters at `pc:0xeae-0xebb`. No pre/post `balanceOf` delta is observed on this path before crediting.",
"severity": "medium",
"locations": [
"selector:0xcc2c5164",
"pc:0xdbf",
"pc:0xe2b",
"pc:0xe7d",
"pc:0xe98",
"pc:0xeae"
],
"recommendation": "Measure actual tokens received by comparing pre/post balances, or only support a vetted allowlist of vanilla ERC20s whose transfers are known to be 1:1. Do not credit user balances solely from the requested `amount` parameter.",
"exploit_scenario": "A user can deposit a fee-on-transfer, rebasing, or otherwise non-standard ERC20 that returns success from `transferFrom` while delivering fewer tokens than requested. The contract then credits the user's internal balance with the full requested amount, allowing later withdrawal/trading against more balance than the contract actually holds and potentially socializing the deficit to other users."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00b9 0000000c: JUMPI 0000000d: PUSH4 0xffffffff 00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00000030: PUSH1 0x00 00000032: CALLDATALOAD 00000033: DIV 00000034: AND 00000035: PUSH4 0x1e2284ed 0000003a: DUP2 0000003b: EQ 0000003c: PUSH2 0x00be 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x4adae0da 00000046: EQ 00000047: PUSH2 0x00e0 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x98e0b39a 00000051: EQ 00000052: PUSH2 0x0107 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x997805d4 0000005c: EQ 0000005d: PUSH2 0x01b4 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0xa26e1186 00000067: EQ 00000068: PUSH2 0x01d4 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0xa6fb97d1 00000072: EQ 00000073: PUSH2 0x0220 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xad2de9b0 0000007d: EQ 0000007e: PUSH2 0x023a 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xcc2c5164 00000088: EQ 00000089: PUSH2 0x025b 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xdc131545 00000093: EQ 00000094: PUSH2 0x02bc 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xf56e81fa 0000009e: EQ 0000009f: PUSH2 0x02d6 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xf851a440 000000a9: EQ 000000aa: PUSH2 0x0300 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xfb7311b1 000000b4: EQ 000000b5: PUSH2 0x0331 000000b8: JUMPI 000000b9: JUMPDEST 000000ba: PUSH1 0x00 000000bc: DUP1 000000bd: REVERT 000000be: JUMPDEST 000000bf: PUSH2 0x00de 000000c2: PUSH1 0x04 000000c4: CALLDATALOAD 000000c5: PUSH1 0x01 000000c7: PUSH1 0xa0 000000c9: PUSH1 0x02 000000cb: EXP 000000cc: SUB 000000cd: PUSH1 0x24 000000cf: CALLDATALOAD 000000d0: DUP2 000000d1: AND 000000d2: SWAP1 000000d3: PUSH1 0x44 000000d5: CALLDATALOAD 000000d6: AND 000000d7: PUSH1 0x64 000000d9: CALLDATALOAD 000000da: PUSH2 0x0349 000000dd: JUMP 000000de: JUMPDEST 000000df: STOP 000000e0: JUMPDEST 000000e1: CALLVALUE 000000e2: DUP1 000000e3: ISZERO 000000e4: PUSH2 0x00ec 000000e7: JUMPI 000000e8: PUSH1 0x00 000000ea: DUP1 000000eb: REVERT 000000ec: JUMPDEST 000000ed: POP 000000ee: PUSH2 0x00f5 000000f1: PUSH2 0x0535 000000f4: JUMP 000000f5: JUMPDEST 000000f6: PUSH1 0x40 000000f8: DUP1 000000f9: MLOAD 000000fa: SWAP2 000000fb: DUP3 000000fc: MSTORE 000000fd: MLOAD 000000fe: SWAP1 000000ff: DUP2 00000100: SWAP1 00000101: SUB 00000102: PUSH1 0x20 00000104: ADD 00000105: SWAP1 00000106: RETURN 00000107: JUMPDEST 00000108: CALLVALUE 00000109: DUP1 0000010a: ISZERO 0000010b: PUSH2 0x0113 0000010e: JUMPI 0000010f: PUSH1 0x00 00000111: DUP1 00000112: REVERT 00000113: JUMPDEST 00000114: POP 00000115: PUSH2 0x012e 00000118: PUSH1 0x01 0000011a: PUSH1 0xa0 0000011c: PUSH1 0x02 0000011e: EXP 0000011f: SUB 00000120: PUSH1 0x04 00000122: CALLDATALOAD 00000123: DUP2 00000124: AND 00000125: SWAP1 00000126: PUSH1 0x24 00000128: CALLDATALOAD 00000129: AND 0000012a: PUSH2 0x053b 0000012d: JUMP 0000012e: JUMPDEST 0000012f: PUSH1 0x40 00000131: MLOAD 00000132: DUP1 00000133: DUP5 00000134: DUP2 00000135: MSTORE 00000136: PUSH1 0x20 00000138: ADD 00000139: DUP1 0000013a: PUSH1 0x20 0000013c: ADD 0000013d: DUP4 0000013e: DUP2 0000013f: MSTORE 00000140: PUSH1 0x20 00000142: ADD 00000143: DUP3 00000144: DUP2 00000145: SUB 00000146: DUP3 00000147: MSTORE 00000148: DUP5 00000149: DUP2 0000014a: DUP2 0000014b: MLOAD 0000014c: DUP2 0000014d: MSTORE 0000014e: PUSH1 0x20 00000150: ADD 00000151: SWAP2 00000152: POP 00000153: DUP1 00000154: MLOAD 00000155: SWAP1 00000156: PUSH1 0x20 00000158: ADD 00000159: SWAP1 0000015a: DUP1 0000015b: DUP4 0000015c: DUP4 0000015d: PUSH1 0x00 0000015f: JUMPDEST 00000160: DUP4 00000161: DUP2 00000162: LT 00000163: ISZERO 00000164: PUSH2 0x0177 00000167: JUMPI 00000168: DUP2 00000169: DUP2 0000016a: ADD 0000016b: MLOAD 0000016c: DUP4 0000016d: DUP3 0000016e: ADD 0000016f: MSTORE 00000170: PUSH1 0x20 00000172: ADD 00000173: PUSH2 0x015f 00000176: JUMP 00000177: JUMPDEST 00000178: POP 00000179: POP 0000017a: POP 0000017b: POP 0000017c: SWAP1 0000017d: POP 0000017e: SWAP1 0000017f: DUP2 00000180: ADD 00000181: SWAP1 00000182: PUSH1 0x1f 00000184: AND 00000185: DUP1 00000186: ISZERO 00000187: PUSH2 0x01a4 0000018a: JUMPI 0000018b: DUP1 0000018c: DUP3 0000018d: SUB 0000018e: DUP1 0000018f: MLOAD 00000190: PUSH1 0x01 00000192: DUP4 00000193: PUSH1 0x20 00000195: SUB 00000196: PUSH2 0x0100 00000199: EXP 0000019a: SUB 0000019b: NOT 0000019c: AND 0000019d: DUP2 0000019e: MSTORE 0000019f: PUSH1 0x20 000001a1: ADD 000001a2: SWAP2 000001a3: POP 000001a4: JUMPDEST 000001a5: POP 000001a6: SWAP5 000001a7: POP 000001a8: POP 000001a9: POP 000001aa: POP 000001ab: POP 000001ac: PUSH1 0x40 000001ae: MLOAD 000001af: DUP1 000001b0: SWAP2 000001b1: SUB 000001b2: SWAP1 000001b3: RETURN 000001b4: JUMPDEST 000001b5: PUSH2 0x00de 000001b8: PUSH1 0x04 000001ba: CALLDATALOAD 000001bb: PUSH1 0x01 000001bd: PUSH1 0xa0 000001bf: PUSH1 0x02 000001c1: EXP 000001c2: SUB 000001c3: PUSH1 0x24 000001c5: CALLDATALOAD 000001c6: DUP2 000001c7: AND 000001c8: SWAP1 000001c9: PUSH1 0x44 000001cb: CALLDATALOAD 000001cc: AND 000001cd: PUSH1 0x64 000001cf: CALLDATALOAD 000001d0: PUSH2 0x068a 000001d3: JUMP 000001d4: JUMPDEST 000001d5: PUSH1 0x40 000001d7: DUP1 000001d8: MLOAD 000001d9: PUSH1 0x20 000001db: PUSH1 0x04 000001dd: DUP1 000001de: CALLDATALOAD 000001df: DUP1 000001e0: DUP3 000001e1: ADD 000001e2: CALLDATALOAD 000001e3: PUSH1 0x1f 000001e5: DUP2 000001e6: ADD 000001e7: DUP5 000001e8: SWAP1 000001e9: DIV 000001ea: DUP5 000001eb: MUL 000001ec: DUP6 000001ed: ADD 000001ee: DUP5 000001ef: ADD 000001f0: SWAP1 000001f1: SWAP6 000001f2: MSTORE 000001f3: DUP5 000001f4: DUP5 000001f5: MSTORE 000001f6: PUSH2 0x00de 000001f9: SWAP5 000001fa: CALLDATASIZE 000001fb: SWAP5 000001fc: SWAP3 000001fd: SWAP4 000001fe: PUSH1 0x24 00000200: SWAP4 00000201: SWAP3 00000202: DUP5 00000203: ADD 00000204: SWAP2 00000205: SWAP1 00000206: DUP2 00000207: SWAP1 00000208: DUP5 00000209: ADD 0000020a: DUP4 0000020b: DUP3 0000020c: DUP1 0000020d: DUP3 0000020e: DUP5 0000020f: CALLDATACOPY 00000210: POP 00000211: SWAP5 00000212: SWAP8 00000213: POP 00000214: PUSH2 0x0959 00000217: SWAP7 00000218: POP 00000219: POP 0000021a: POP 0000021b: POP 0000021c: POP 0000021d: POP 0000021e: POP 0000021f: JUMP 00000220: JUMPDEST 00000221: PUSH2 0x00de 00000224: PUSH1 0x04 00000226: CALLDATALOAD 00000227: PUSH1 0x01 00000229: PUSH1 0xa0 0000022b: PUSH1 0x02 0000022d: EXP 0000022e: SUB 0000022f: PUSH1 0x24 00000231: CALLDATALOAD 00000232: AND 00000233: PUSH1 0x44 00000235: CALLDATALOAD 00000236: PUSH2 0x0b3e 00000239: JUMP 0000023a: JUMPDEST 0000023b: CALLVALUE 0000023c: DUP1 0000023d: ISZERO 0000023e: PUSH2 0x0246 00000241: JUMPI 00000242: PUSH1 0x00 00000244: DUP1 00000245: REVERT 00000246: JUMPDEST 00000247: POP 00000248: PUSH2 0x00f5 0000024b: PUSH1 0x01 0000024d: PUSH1 0xa0 0000024f: PUSH1 0x02 00000251: EXP 00000252: SUB 00000253: PUSH1 0x04 00000255: CALLDATALOAD 00000256: AND 00000257: PUSH2 0x0c03 0000025a: JUMP 0000025b: JUMPDEST 0000025c: PUSH1 0x40 0000025e: DUP1 0000025f: MLOAD 00000260: PUSH1 0x20 00000262: PUSH1 0x04 00000264: DUP1 00000265: CALLDATALOAD 00000266: DUP1 00000267: DUP3 00000268: ADD 00000269: CALLDATALOAD 0000026a: PUSH1 0x1f 0000026c: DUP2 0000026d: ADD 0000026e: DUP5 0000026f: SWAP1 00000270: DIV 00000271: DUP5 00000272: MUL 00000273: DUP6 00000274: ADD 00000275: DUP5 00000276: ADD 00000277: SWAP1 00000278: SWAP6 00000279: MSTORE 0000027a: DUP5 0000027b: DUP5 0000027c: MSTORE 0000027d: PUSH2 0x00de 00000280: SWAP5 00000281: CALLDATASIZE 00000282: SWAP5 00000283: SWAP3 00000284: SWAP4 00000285: PUSH1 0x24 00000287: SWAP4 00000288: SWAP3 00000289: DUP5 0000028a: ADD 0000028b: SWAP2 0000028c: SWAP1 0000028d: DUP2 0000028e: SWAP1 0000028f: DUP5 00000290: ADD 00000291: DUP4 00000292: DUP3 00000293: DUP1 00000294: DUP3 00000295: DUP5 00000296: CALLDATACOPY 00000297: POP 00000298: SWAP5 00000299: SWAP8 0000029a: POP 0000029b: POP 0000029c: POP 0000029d: DUP4 0000029e: CALLDATALOAD 0000029f: PUSH1 0x01 000002a1: PUSH1 0xa0 000002a3: PUSH1 0x02 000002a5: EXP 000002a6: SUB 000002a7: AND 000002a8: SWAP5 000002a9: POP 000002aa: POP 000002ab: POP 000002ac: PUSH1 0x20 000002ae: DUP3 000002af: ADD 000002b0: CALLDATALOAD 000002b1: SWAP2 000002b2: PUSH1 0x40 000002b4: ADD 000002b5: CALLDATALOAD 000002b6: SWAP1 000002b7: POP 000002b8: PUSH2 0x0cad 000002bb: JUMP 000002bc: JUMPDEST 000002bd: PUSH2 0x00de 000002c0: PUSH1 0x04 000002c2: CALLDATALOAD 000002c3: PUSH1 0x01 000002c5: PUSH1 0xa0 000002c7: PUSH1 0x02 000002c9: EXP 000002ca: SUB 000002cb: PUSH1 0x24 000002cd: CALLDATALOAD 000002ce: AND 000002cf: PUSH1 0x44 000002d1: CALLDATALOAD 000002d2: PUSH2 0x0f75 000002d5: JUMP 000002d6: JUMPDEST 000002d7: CALLVALUE 000002d8: DUP1 000002d9: ISZERO 000002da: PUSH2 0x02e2 000002dd: JUMPI 000002de: PUSH1 0x00 000002e0: DUP1 000002e1: REVERT 000002e2: JUMPDEST 000002e3: POP 000002e4: PUSH2 0x012e 000002e7: PUSH1 0x01 000002e9: PUSH1 0xa0 000002eb: PUSH1 0x02 000002ed: EXP 000002ee: SUB 000002ef: PUSH1 0x04 000002f1: CALLDATALOAD 000002f2: DUP2 000002f3: AND 000002f4: SWAP1 000002f5: PUSH1 0x24 000002f7: CALLDATALOAD 000002f8: AND 000002f9: PUSH1 0x44 000002fb: CALLDATALOAD 000002fc: PUSH2 0x12df 000002ff: JUMP 00000300: JUMPDEST 00000301: CALLVALUE 00000302: DUP1 00000303: ISZERO 00000304: PUSH2 0x030c 00000307: JUMPI 00000308: PUSH1 0x00 0000030a: DUP1 0000030b: REVERT 0000030c: JUMPDEST 0000030d: POP 0000030e: PUSH2 0x0315 00000311: PUSH2 0x13b9 00000314: JUMP 00000315: JUMPDEST 00000316: PUSH1 0x40 00000318: DUP1 00000319: MLOAD 0000031a: PUSH1 0x01 0000031c: PUSH1 0xa0 0000031e: PUSH1 0x02 00000320: EXP 00000321: SUB 00000322: SWAP1 00000323: SWAP3 00000324: AND 00000325: DUP3 00000326: MSTORE 00000327: MLOAD 00000328: SWAP1 00000329: DUP2 0000032a: SWAP1 0000032b: SUB 0000032c: PUSH1 0x20 0000032e: ADD 0000032f: SWAP1 00000330: RETURN 00000331: JUMPDEST 00000332: CALLVALUE 00000333: DUP1 00000334: ISZERO 00000335: PUSH2 0x033d 00000338: JUMPI 00000339: PUSH1 0x00 0000033b: DUP1 0000033c: REVERT 0000033d: JUMPDEST 0000033e: POP 0000033f: PUSH2 0x00f5 00000342: PUSH1 0x04 00000344: CALLDATALOAD 00000345: PUSH2 0x13c8 00000348: JUMP 00000349: JUMPDEST 0000034a: PUSH1 0x00 0000034c: DUP1 0000034d: SLOAD 0000034e: PUSH1 0x01 00000350: PUSH1 0xa0 00000352: PUSH1 0x02 00000354: EXP 00000355: SUB 00000356: AND 00000357: CALLER 00000358: EQ 00000359: DUP1 0000035a: ISZERO 0000035b: PUSH2 0x036f 0000035e: JUMPI 0000035f: POP 00000360: PUSH11 0x084595161401484a000000 0000036c: DUP3 0000036d: GT 0000036e: ISZERO 0000036f: JUMPDEST 00000370: ISZERO 00000371: ISZERO 00000372: PUSH2 0x037a 00000375: JUMPI 00000376: PUSH1 0x00 00000378: DUP1 00000379: REVERT 0000037a: JUMPDEST 0000037b: PUSH1 0x01 0000037d: PUSH1 0xa0 0000037f: PUSH1 0x02 00000381: EXP 00000382: SUB 00000383: DUP4 00000384: AND 00000385: ISZERO 00000386: ISZERO 00000387: PUSH2 0x038f 0000038a: JUMPI 0000038b: PUSH1 0x00 0000038d: DUP1 0000038e: REVERT 0000038f: JUMPDEST 00000390: PUSH1 0x40 00000392: DUP1 00000393: MLOAD 00000394: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 000003b5: DUP2 000003b6: MSTORE 000003b7: ADDRESS 000003b8: PUSH1 0x04 000003ba: DUP3 000003bb: ADD 000003bc: MSTORE 000003bd: SWAP1 000003be: MLOAD 000003bf: PUSH1 0x01 000003c1: PUSH1 0xa0 000003c3: PUSH1 0x02 000003c5: EXP 000003c6: SUB 000003c7: DUP6 000003c8: AND 000003c9: SWAP2 000003ca: PUSH4 0x70a08231 000003cf: SWAP2 000003d0: PUSH1 0x24 000003d2: DUP1 000003d3: DUP4 000003d4: ADD 000003d5: SWAP3 000003d6: PUSH1 0x20 000003d8: SWAP3 000003d9: SWAP2 000003da: SWAP1 000003db: DUP3 000003dc: SWAP1 000003dd: SUB 000003de: ADD 000003df: DUP2 000003e0: PUSH1 0x00 000003e2: DUP8 000003e3: DUP1 000003e4: EXTCODESIZE 000003e5: ISZERO 000003e6: DUP1 000003e7: ISZERO 000003e8: PUSH2 0x03f0 000003eb: JUMPI 000003ec: PUSH1 0x00 000003ee: DUP1 000003ef: REVERT 000003f0: JUMPDEST 000003f1: POP 000003f2: GAS 000003f3: CALL 000003f4: ISZERO 000003f5: DUP1 000003f6: ISZERO 000003f7: PUSH2 0x0404 000003fa: JUMPI 000003fb: RETURNDATASIZE 000003fc: PUSH1 0x00 000003fe: DUP1 000003ff: RETURNDATACOPY 00000400: RETURNDATASIZE 00000401: PUSH1 0x00 00000403: REVERT 00000404: JUMPDEST 00000405: POP 00000406: POP 00000407: POP 00000408: POP 00000409: PUSH1 0x40 0000040b: MLOAD 0000040c: RETURNDATASIZE 0000040d: PUSH1 0x20 0000040f: DUP2 00000410: LT 00000411: ISZERO 00000412: PUSH2 0x041a 00000415: JUMPI 00000416: PUSH1 0x00 00000418: DUP1 00000419: REVERT 0000041a: JUMPDEST 0000041b: POP 0000041c: MLOAD 0000041d: SWAP1 0000041e: POP 0000041f: DUP2 00000420: DUP2 00000421: LT 00000422: ISZERO 00000423: PUSH2 0x042b 00000426: JUMPI 00000427: PUSH1 0x00 00000429: DUP1 0000042a: REVERT 0000042b: JUMPDEST 0000042c: PUSH1 0x40 0000042e: DUP1 0000042f: MLOAD 00000430: DUP7 00000431: DUP2 00000432: MSTORE 00000433: PUSH1 0x20 00000435: DUP2 00000436: ADD 00000437: DUP5 00000438: SWAP1 00000439: MSTORE 0000043a: DUP1 0000043b: DUP3 0000043c: ADD 0000043d: DUP4 0000043e: SWAP1 0000043f: MSTORE 00000440: SWAP1 00000441: MLOAD 00000442: PUSH1 0x01 00000444: PUSH1 0xa0 00000446: PUSH1 0x02 00000448: EXP 00000449: SUB 0000044a: DUP1 0000044b: DUP8 0000044c: AND 0000044d: SWAP3 0000044e: SWAP1 0000044f: DUP7 00000450: AND 00000451: SWAP2 00000452: PUSH32 0x83fa319e3dcab86af4165864bb9e9e884168247533a1e4abf5520b5f0321a0fe 00000473: SWAP2 00000474: DUP2 00000475: SWAP1 00000476: SUB 00000477: PUSH1 0x60 00000479: ADD 0000047a: SWAP1 0000047b: LOG3 0000047c: DUP3 0000047d: PUSH1 0x01 0000047f: PUSH1 0xa0 00000481: PUSH1 0x02 00000483: EXP 00000484: SUB 00000485: AND 00000486: PUSH4 0xa9059cbb 0000048b: DUP6 0000048c: DUP5 0000048d: PUSH1 0x40 0000048f: MLOAD 00000490: DUP4 00000491: PUSH4 0xffffffff 00000496: AND 00000497: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000004b5: MUL 000004b6: DUP2 000004b7: MSTORE 000004b8: PUSH1 0x04 000004ba: ADD 000004bb: DUP1 000004bc: DUP4 000004bd: PUSH1 0x01 000004bf: PUSH1 0xa0 000004c1: PUSH1 0x02 000004c3: EXP 000004c4: SUB 000004c5: AND 000004c6: PUSH1 0x01 000004c8: PUSH1 0xa0 000004ca: PUSH1 0x02 000004cc: EXP 000004cd: SUB 000004ce: AND 000004cf: DUP2 000004d0: MSTORE 000004d1: PUSH1 0x20 000004d3: ADD 000004d4: DUP3 000004d5: DUP2 000004d6: MSTORE 000004d7: PUSH1 0x20 000004d9: ADD 000004da: SWAP3 000004db: POP 000004dc: POP 000004dd: POP 000004de: PUSH1 0x20 000004e0: PUSH1 0x40 000004e2: MLOAD 000004e3: DUP1 000004e4: DUP4 000004e5: SUB 000004e6: DUP2 000004e7: PUSH1 0x00 000004e9: DUP8 000004ea: DUP1 000004eb: EXTCODESIZE 000004ec: ISZERO 000004ed: DUP1 000004ee: ISZERO 000004ef: PUSH2 0x04f7 000004f2: JUMPI 000004f3: PUSH1 0x00 000004f5: DUP1 000004f6: REVERT 000004f7: JUMPDEST 000004f8: POP 000004f9: GAS 000004fa: CALL 000004fb: ISZERO 000004fc: DUP1 000004fd: ISZERO 000004fe: PUSH2 0x050b 00000501: JUMPI 00000502: RETURNDATASIZE 00000503: PUSH1 0x00 00000505: DUP1 00000506: RETURNDATACOPY 00000507: RETURNDATASIZE 00000508: PUSH1 0x00 0000050a: REVERT 0000050b: JUMPDEST 0000050c: POP 0000050d: POP 0000050e: POP 0000050f: POP 00000510: PUSH1 0x40 00000512: MLOAD 00000513: RETURNDATASIZE 00000514: PUSH1 0x20 00000516: DUP2 00000517: LT 00000518: ISZERO 00000519: PUSH2 0x0521 0000051c: JUMPI 0000051d: PUSH1 0x00 0000051f: DUP1 00000520: REVERT 00000521: JUMPDEST 00000522: POP 00000523: MLOAD 00000524: ISZERO 00000525: ISZERO 00000526: PUSH2 0x052e 00000529: JUMPI 0000052a: PUSH1 0x00 0000052c: DUP1 0000052d: REVERT 0000052e: JUMPDEST 0000052f: POP 00000530: POP 00000531: POP 00000532: POP 00000533: POP 00000534: JUMP 00000535: JUMPDEST 00000536: ADDRESS 00000537: BALANCE 00000538: JUMPDEST 00000539: SWAP1 0000053a: JUMP 0000053b: JUMPDEST 0000053c: PUSH1 0x01 0000053e: PUSH1 0xa0 00000540: PUSH1 0x02 00000542: EXP 00000543: SUB 00000544: DUP1 00000545: DUP4 00000546: AND 00000547: PUSH1 0x00 00000549: SWAP1 0000054a: DUP2 0000054b: MSTORE 0000054c: PUSH1 0x01 0000054e: PUSH1 0x20 00000550: SWAP1 00000551: DUP2 00000552: MSTORE 00000553: PUSH1 0x40 00000555: DUP1 00000556: DUP4 00000557: KECCAK256 00000558: SWAP4 00000559: DUP6 0000055a: AND 0000055b: DUP4 0000055c: MSTORE 0000055d: SWAP3 0000055e: SWAP1 0000055f: MSTORE 00000560: SWAP1 00000561: DUP2 00000562: KECCAK256 00000563: DUP1 00000564: SLOAD 00000565: PUSH1 0x60 00000567: SWAP2 00000568: DUP4 00000569: SWAP2 0000056a: ISZERO 0000056b: ISZERO 0000056c: PUSH2 0x058b 0000056f: JUMPI 00000570: PUSH1 0x40 00000572: DUP1 00000573: MLOAD 00000574: PUSH1 0x20 00000576: DUP2 00000577: ADD 00000578: SWAP1 00000579: SWAP2 0000057a: MSTORE 0000057b: PUSH1 0x00 0000057d: DUP1 0000057e: DUP3 0000057f: MSTORE 00000580: SWAP5 00000581: POP 00000582: SWAP3 00000583: POP 00000584: DUP4 00000585: SWAP2 00000586: POP 00000587: PUSH2 0x0682 0000058a: JUMP 0000058b: JUMPDEST 0000058c: DUP1 0000058d: PUSH1 0x00 0000058f: DUP2 00000590: SLOAD 00000591: DUP2 00000592: LT 00000593: ISZERO 00000594: ISZERO 00000595: PUSH2 0x059a 00000598: JUMPI 00000599: INVALID 0000059a: JUMPDEST 0000059b: SWAP1 0000059c: PUSH1 0x00 0000059e: MSTORE 0000059f: PUSH1 0x20 000005a1: PUSH1 0x00 000005a3: KECCAK256 000005a4: SWAP1 000005a5: PUSH1 0x03 000005a7: MUL 000005a8: ADD 000005a9: PUSH1 0x00 000005ab: ADD 000005ac: SLOAD 000005ad: DUP2 000005ae: PUSH1 0x00 000005b0: DUP2 000005b1: SLOAD 000005b2: DUP2 000005b3: LT 000005b4: ISZERO 000005b5: ISZERO 000005b6: PUSH2 0x05bb 000005b9: JUMPI 000005ba: INVALID 000005bb: JUMPDEST 000005bc: SWAP1 000005bd: PUSH1 0x00 000005bf: MSTORE 000005c0: PUSH1 0x20 000005c2: PUSH1 0x00 000005c4: KECCAK256 000005c5: SWAP1 000005c6: PUSH1 0x03 000005c8: MUL 000005c9: ADD 000005ca: PUSH1 0x01 000005cc: ADD 000005cd: DUP3 000005ce: PUSH1 0x00 000005d0: DUP2 000005d1: SLOAD 000005d2: DUP2 000005d3: LT 000005d4: ISZERO 000005d5: ISZERO 000005d6: PUSH2 0x05db 000005d9: JUMPI 000005da: INVALID 000005db: JUMPDEST 000005dc: PUSH1 0x00 000005de: SWAP2 000005df: DUP3 000005e0: MSTORE 000005e1: PUSH1 0x20 000005e3: SWAP2 000005e4: DUP3 000005e5: SWAP1 000005e6: KECCAK256 000005e7: PUSH1 0x02 000005e9: PUSH1 0x03 000005eb: SWAP1 000005ec: SWAP3 000005ed: MUL 000005ee: ADD 000005ef: DUP2 000005f0: ADD 000005f1: SLOAD 000005f2: DUP4 000005f3: SLOAD 000005f4: PUSH1 0x40 000005f6: DUP1 000005f7: MLOAD 000005f8: PUSH1 0x1f 000005fa: PUSH1 0x00 000005fc: NOT 000005fd: PUSH2 0x0100 00000600: PUSH1 0x01 00000602: DUP7 00000603: AND 00000604: ISZERO 00000605: MUL 00000606: ADD 00000607: SWAP1 00000608: SWAP4 00000609: AND 0000060a: SWAP5 0000060b: SWAP1 0000060c: SWAP5 0000060d: DIV 0000060e: SWAP2 0000060f: DUP3 00000610: ADD 00000611: DUP6 00000612: SWAP1 00000613: DIV 00000614: DUP6 00000615: MUL 00000616: DUP5 00000617: ADD 00000618: DUP6 00000619: ADD 0000061a: SWAP1 0000061b: MSTORE 0000061c: DUP1 0000061d: DUP4 0000061e: MSTORE 0000061f: SWAP1 00000620: SWAP3 00000621: DUP5 00000622: SWAP2 00000623: SWAP1 00000624: DUP4 00000625: ADD 00000626: DUP3 00000627: DUP3 00000628: DUP1 00000629: ISZERO 0000062a: PUSH2 0x0674 0000062d: JUMPI 0000062e: DUP1 0000062f: PUSH1 0x1f 00000631: LT 00000632: PUSH2 0x0649 00000635: JUMPI 00000636: PUSH2 0x0100 00000639: DUP1 0000063a: DUP4 0000063b: SLOAD 0000063c: DIV 0000063d: MUL 0000063e: DUP4 0000063f: MSTORE 00000640: SWAP2 00000641: PUSH1 0x20 00000643: ADD 00000644: SWAP2 00000645: PUSH2 0x0674 00000648: JUMP 00000649: JUMPDEST 0000064a: DUP3 0000064b: ADD 0000064c: SWAP2 0000064d: SWAP1 0000064e: PUSH1 0x00 00000650: MSTORE 00000651: PUSH1 0x20 00000653: PUSH1 0x00 00000655: KECCAK256 00000656: SWAP1 00000657: JUMPDEST 00000658: DUP2 00000659: SLOAD 0000065a: DUP2 0000065b: MSTORE 0000065c: SWAP1 0000065d: PUSH1 0x01 0000065f: ADD 00000660: SWAP1 00000661: PUSH1 0x20 00000663: ADD 00000664: DUP1 00000665: DUP4 00000666: GT 00000667: PUSH2 0x0657 0000066a: JUMPI 0000066b: DUP3 0000066c: SWAP1 0000066d: SUB 0000066e: PUSH1 0x1f 00000670: AND 00000671: DUP3 00000672: ADD 00000673: SWAP2 00000674: JUMPDEST 00000675: POP 00000676: POP 00000677: POP 00000678: POP 00000679: POP 0000067a: SWAP2 0000067b: POP 0000067c: SWAP4 0000067d: POP 0000067e: SWAP4 0000067f: POP 00000680: SWAP4 00000681: POP 00000682: JUMPDEST 00000683: POP 00000684: SWAP3 00000685: POP 00000686: SWAP3 00000687: POP 00000688: SWAP3 00000689: JUMP 0000068a: JUMPDEST 0000068b: PUSH1 0x00 0000068d: DUP1 0000068e: SLOAD 0000068f: PUSH1 0x01 00000691: PUSH1 0xa0 00000693: PUSH1 0x02 00000695: EXP 00000696: SUB 00000697: AND 00000698: CALLER 00000699: EQ 0000069a: PUSH2 0x06a2 0000069d: JUMPI 0000069e: PUSH1 0x00 000006a0: DUP1 000006a1: REVERT 000006a2: JUMPDEST 000006a3: POP 000006a4: PUSH1 0x01 000006a6: PUSH1 0xa0 000006a8: PUSH1 0x02 000006aa: EXP 000006ab: SUB 000006ac: DUP1 000006ad: DUP4 000006ae: AND 000006af: PUSH1 0x00 000006b1: SWAP1 000006b2: DUP2 000006b3: MSTORE 000006b4: PUSH1 0x01 000006b6: PUSH1 0x20 000006b8: DUP2 000006b9: DUP2 000006ba: MSTORE 000006bb: PUSH1 0x40 000006bd: DUP1 000006be: DUP5 000006bf: KECCAK256 000006c0: SWAP5 000006c1: DUP9 000006c2: AND 000006c3: DUP5 000006c4: MSTORE 000006c5: SWAP4 000006c6: SWAP1 000006c7: MSTORE 000006c8: SWAP2 000006c9: SWAP1 000006ca: KECCAK256 000006cb: DUP1 000006cc: SLOAD 000006cd: SWAP1 000006ce: SWAP2 000006cf: EQ 000006d0: PUSH2 0x06d8 000006d3: JUMPI 000006d4: PUSH1 0x00 000006d6: DUP1 000006d7: REVERT 000006d8: JUMPDEST 000006d9: DUP2 000006da: PUSH1 0x01 000006dc: EQ 000006dd: ISZERO 000006de: PUSH2 0x07f7 000006e1: JUMPI 000006e2: DUP4 000006e3: PUSH1 0x01 000006e5: PUSH1 0xa0 000006e7: PUSH1 0x02 000006e9: EXP 000006ea: SUB 000006eb: AND 000006ec: CALLER 000006ed: PUSH1 0x01 000006ef: PUSH1 0xa0 000006f1: PUSH1 0x02 000006f3: EXP 000006f4: SUB 000006f5: AND 000006f6: DUP5 000006f7: PUSH1 0x01 000006f9: PUSH1 0xa0 000006fb: PUSH1 0x02 000006fd: EXP 000006fe: SUB 000006ff: AND 00000700: PUSH1 0x00 00000702: DUP1 00000703: MLOAD 00000704: PUSH1 0x20 00000706: PUSH2 0x152d 00000709: DUP4 0000070a: CODECOPY 0000070b: DUP2 0000070c: MLOAD 0000070d: SWAP2 0000070e: MSTORE 0000070f: DUP5 00000710: PUSH1 0x00 00000712: DUP2 00000713: SLOAD 00000714: DUP2 00000715: LT 00000716: ISZERO 00000717: ISZERO 00000718: PUSH2 0x071d 0000071b: JUMPI 0000071c: INVALID 0000071d: JUMPDEST 0000071e: SWAP1 0000071f: PUSH1 0x00 00000721: MSTORE 00000722: PUSH1 0x20 00000724: PUSH1 0x00 00000726: KECCAK256 00000727: SWAP1 00000728: PUSH1 0x03 0000072a: MUL 0000072b: ADD 0000072c: PUSH1 0x01 0000072e: ADD 0000072f: DUP10 00000730: DUP7 00000731: PUSH1 0x00 00000733: DUP2 00000734: SLOAD 00000735: DUP2 00000736: LT 00000737: ISZERO 00000738: ISZERO 00000739: PUSH2 0x073e 0000073c: JUMPI 0000073d: INVALID 0000073e: JUMPDEST 0000073f: PUSH1 0x00 00000741: SWAP2 00000742: DUP3 00000743: MSTORE 00000744: PUSH1 0x20 00000746: SWAP2 00000747: DUP3 00000748: SWAP1 00000749: KECCAK256 0000074a: PUSH1 0x03 0000074c: SWAP1 0000074d: SWAP2 0000074e: MUL 0000074f: ADD 00000750: SLOAD 00000751: PUSH1 0x40 00000753: DUP1 00000754: MLOAD 00000755: SWAP3 00000756: DUP4 00000757: ADD 00000758: DUP5 00000759: SWAP1 0000075a: MSTORE 0000075b: DUP3 0000075c: ADD 0000075d: DUP2 0000075e: SWAP1 0000075f: MSTORE 00000760: PUSH1 0x01 00000762: PUSH1 0x60 00000764: DUP4 00000765: ADD 00000766: DUP2 00000767: SWAP1 00000768: MSTORE 00000769: PUSH1 0x80 0000076b: DUP1 0000076c: DUP5 0000076d: MSTORE 0000076e: DUP6 0000076f: SLOAD 00000770: PUSH1 0x02 00000772: PUSH2 0x0100 00000775: DUP3 00000776: DUP6 00000777: AND 00000778: ISZERO 00000779: MUL 0000077a: PUSH1 0x00 0000077c: NOT 0000077d: ADD 0000077e: SWAP1 0000077f: SWAP2 00000780: AND 00000781: DIV 00000782: SWAP1 00000783: DUP5 00000784: ADD 00000785: DUP2 00000786: SWAP1 00000787: MSTORE 00000788: SWAP2 00000789: SWAP3 0000078a: SWAP1 0000078b: SWAP2 0000078c: DUP2 0000078d: SWAP1 0000078e: PUSH1 0xa0 00000790: DUP3 00000791: ADD 00000792: SWAP1 00000793: DUP8 00000794: SWAP1 00000795: DUP1 00000796: ISZERO 00000797: PUSH2 0x07e1 0000079a: JUMPI 0000079b: DUP1 0000079c: PUSH1 0x1f 0000079e: LT 0000079f: PUSH2 0x07b6 000007a2: JUMPI 000007a3: PUSH2 0x0100 000007a6: DUP1 000007a7: DUP4 000007a8: SLOAD 000007a9: DIV 000007aa: MUL 000007ab: DUP4 000007ac: MSTORE 000007ad: SWAP2 000007ae: PUSH1 0x20 000007b0: ADD 000007b1: SWAP2 000007b2: PUSH2 0x07e1 000007b5: JUMP 000007b6: JUMPDEST 000007b7: DUP3 000007b8: ADD 000007b9: SWAP2 000007ba: SWAP1 000007bb: PUSH1 0x00 000007bd: MSTORE 000007be: PUSH1 0x20 000007c0: PUSH1 0x00 000007c2: KECCAK256 000007c3: SWAP1 000007c4: JUMPDEST 000007c5: DUP2 000007c6: SLOAD 000007c7: DUP2 000007c8: MSTORE 000007c9: SWAP1 000007ca: PUSH1 0x01 000007cc: ADD 000007cd: SWAP1 000007ce: PUSH1 0x20 000007d0: ADD 000007d1: DUP1 000007d2: DUP4 000007d3: GT 000007d4: PUSH2 0x07c4 000007d7: JUMPI 000007d8: DUP3 000007d9: SWAP1 000007da: SUB 000007db: PUSH1 0x1f 000007dd: AND 000007de: DUP3 000007df: ADD 000007e0: SWAP2 000007e1: JUMPDEST 000007e2: POP 000007e3: POP 000007e4: SWAP6 000007e5: POP 000007e6: POP 000007e7: POP 000007e8: POP 000007e9: POP 000007ea: POP 000007eb: PUSH1 0x40 000007ed: MLOAD 000007ee: DUP1 000007ef: SWAP2 000007f0: SUB 000007f1: SWAP1 000007f2: LOG4 000007f3: PUSH2 0x0908 000007f6: JUMP 000007f7: JUMPDEST 000007f8: DUP4 000007f9: PUSH1 0x01 000007fb: PUSH1 0xa0 000007fd: PUSH1 0x02 000007ff: EXP 00000800: SUB 00000801: AND 00000802: CALLER 00000803: PUSH1 0x01 00000805: PUSH1 0xa0 00000807: PUSH1 0x02 00000809: EXP 0000080a: SUB 0000080b: AND 0000080c: DUP5 0000080d: PUSH1 0x01 0000080f: PUSH1 0xa0 00000811: PUSH1 0x02 00000813: EXP 00000814: SUB 00000815: AND 00000816: PUSH1 0x00 00000818: DUP1 00000819: MLOAD 0000081a: PUSH1 0x20 0000081c: PUSH2 0x152d 0000081f: DUP4 00000820: CODECOPY 00000821: DUP2 00000822: MLOAD 00000823: SWAP2 00000824: MSTORE 00000825: DUP5 00000826: PUSH1 0x00 00000828: DUP2 00000829: SLOAD 0000082a: DUP2 0000082b: LT 0000082c: ISZERO 0000082d: ISZERO 0000082e: PUSH2 0x0833 00000831: JUMPI 00000832: INVALID 00000833: JUMPDEST 00000834: SWAP1 00000835: PUSH1 0x00 00000837: MSTORE 00000838: PUSH1 0x20 0000083a: PUSH1 0x00 0000083c: KECCAK256 0000083d: SWAP1 0000083e: PUSH1 0x03 00000840: MUL 00000841: ADD 00000842: PUSH1 0x01 00000844: ADD 00000845: DUP10 00000846: DUP7 00000847: PUSH1 0x00 00000849: DUP2 0000084a: SLOAD 0000084b: DUP2 0000084c: LT 0000084d: ISZERO 0000084e: ISZERO 0000084f: PUSH2 0x0854 00000852: JUMPI 00000853: INVALID 00000854: JUMPDEST 00000855: PUSH1 0x00 00000857: SWAP2 00000858: DUP3 00000859: MSTORE 0000085a: PUSH1 0x20 0000085c: SWAP2 0000085d: DUP3 0000085e: SWAP1 0000085f: KECCAK256 00000860: PUSH1 0x03 00000862: SWAP1 00000863: SWAP2 00000864: MUL 00000865: ADD 00000866: SLOAD 00000867: PUSH1 0x40 00000869: DUP1 0000086a: MLOAD 0000086b: SWAP3 0000086c: DUP4 0000086d: ADD 0000086e: DUP5 0000086f: SWAP1 00000870: MSTORE 00000871: DUP3 00000872: ADD 00000873: DUP2 00000874: SWAP1 00000875: MSTORE 00000876: PUSH1 0x02 00000878: PUSH1 0x60 0000087a: DUP4 0000087b: ADD 0000087c: DUP2 0000087d: SWAP1 0000087e: MSTORE 0000087f: PUSH1 0x80 00000881: DUP1 00000882: DUP5 00000883: MSTORE 00000884: DUP6 00000885: SLOAD 00000886: PUSH2 0x0100 00000889: PUSH1 0x01 0000088b: DUP3 0000088c: AND 0000088d: ISZERO 0000088e: MUL 0000088f: PUSH1 0x00 00000891: NOT 00000892: ADD 00000893: AND 00000894: DUP3 00000895: SWAP1 00000896: DIV 00000897: SWAP1 00000898: DUP5 00000899: ADD 0000089a: DUP2 0000089b: SWAP1 0000089c: MSTORE 0000089d: SWAP2 0000089e: SWAP3 0000089f: SWAP1 000008a0: SWAP2 000008a1: DUP2 000008a2: SWAP1 000008a3: PUSH1 0xa0 000008a5: DUP3 000008a6: ADD 000008a7: SWAP1 000008a8: DUP8 000008a9: SWAP1 000008aa: DUP1 000008ab: ISZERO 000008ac: PUSH2 0x08f6 000008af: JUMPI 000008b0: DUP1 000008b1: PUSH1 0x1f 000008b3: LT 000008b4: PUSH2 0x08cb 000008b7: JUMPI 000008b8: PUSH2 0x0100 000008bb: DUP1 000008bc: DUP4 000008bd: SLOAD 000008be: DIV 000008bf: MUL 000008c0: DUP4 000008c1: MSTORE 000008c2: SWAP2 000008c3: PUSH1 0x20 000008c5: ADD 000008c6: SWAP2 000008c7: PUSH2 0x08f6 000008ca: JUMP 000008cb: JUMPDEST 000008cc: DUP3 000008cd: ADD 000008ce: SWAP2 000008cf: SWAP1 000008d0: PUSH1 0x00 000008d2: MSTORE 000008d3: PUSH1 0x20 000008d5: PUSH1 0x00 000008d7: KECCAK256 000008d8: SWAP1 000008d9: JUMPDEST 000008da: DUP2 000008db: SLOAD 000008dc: DUP2 000008dd: MSTORE 000008de: SWAP1 000008df: PUSH1 0x01 000008e1: ADD 000008e2: SWAP1 000008e3: PUSH1 0x20 000008e5: ADD 000008e6: DUP1 000008e7: DUP4 000008e8: GT 000008e9: PUSH2 0x08d9 000008ec: JUMPI 000008ed: DUP3 000008ee: SWAP1 000008ef: SUB 000008f0: PUSH1 0x1f 000008f2: AND 000008f3: DUP3 000008f4: ADD 000008f5: SWAP2 000008f6: JUMPDEST 000008f7: POP 000008f8: POP 000008f9: SWAP6 000008fa: POP 000008fb: POP 000008fc: POP 000008fd: POP 000008fe: POP 000008ff: POP 00000900: PUSH1 0x40 00000902: MLOAD 00000903: DUP1 00000904: SWAP2 00000905: SUB 00000906: SWAP1 00000907: LOG4 00000908: JUMPDEST 00000909: DUP1 0000090a: PUSH1 0x00 0000090c: DUP2 0000090d: SLOAD 0000090e: DUP2 0000090f: LT 00000910: ISZERO 00000911: ISZERO 00000912: PUSH2 0x0917 00000915: JUMPI 00000916: INVALID 00000917: JUMPDEST 00000918: PUSH1 0x00 0000091a: SWAP2 0000091b: DUP3 0000091c: MSTORE 0000091d: PUSH1 0x20 0000091f: DUP3 00000920: KECCAK256 00000921: PUSH1 0x03 00000923: SWAP1 00000924: SWAP2 00000925: MUL 00000926: ADD 00000927: DUP2 00000928: DUP2 00000929: SSTORE 0000092a: SWAP1 0000092b: PUSH2 0x0937 0000092e: PUSH1 0x01 00000930: DUP4 00000931: ADD 00000932: DUP3 00000933: PUSH2 0x13ec 00000936: JUMP 00000937: JUMPDEST 00000938: POP 00000939: PUSH1 0x00 0000093b: PUSH1 0x02 0000093d: SWAP2 0000093e: SWAP1 0000093f: SWAP2 00000940: ADD 00000941: SSTORE 00000942: DUP1 00000943: SLOAD 00000944: PUSH2 0x0951 00000947: DUP3 00000948: PUSH1 0x00 0000094a: NOT 0000094b: DUP4 0000094c: ADD 0000094d: PUSH2 0x1433 00000950: JUMP 00000951: JUMPDEST 00000952: POP 00000953: POP 00000954: POP 00000955: POP 00000956: POP 00000957: POP 00000958: JUMP 00000959: JUMPDEST 0000095a: PUSH1 0x00 0000095c: DUP2 0000095d: PUSH1 0x00 0000095f: DUP2 00000960: MLOAD 00000961: DUP2 00000962: LT 00000963: ISZERO 00000964: ISZERO 00000965: PUSH2 0x096a 00000968: JUMPI 00000969: INVALID 0000096a: JUMPDEST 0000096b: SWAP1 0000096c: PUSH1 0x20 0000096e: ADD 0000096f: ADD 00000970: MLOAD 00000971: PUSH1 0xf8 00000973: PUSH1 0x02 00000975: EXP 00000976: SWAP1 00000977: DIV 00000978: PUSH1 0xf8 0000097a: PUSH1 0x02 0000097c: EXP 0000097d: MUL 0000097e: PUSH31 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000099e: NOT 0000099f: AND 000009a0: PUSH32 0x6a00000000000000000000000000000000000000000000000000000000000000 000009c1: EQ 000009c2: ISZERO 000009c3: ISZERO 000009c4: PUSH2 0x09cc 000009c7: JUMPI 000009c8: PUSH1 0x00 000009ca: DUP1 000009cb: REVERT 000009cc: JUMPDEST 000009cd: POP 000009ce: CALLER 000009cf: PUSH1 0x00 000009d1: SWAP1 000009d2: DUP2 000009d3: MSTORE 000009d4: PUSH32 0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49 000009f5: PUSH1 0x20 000009f7: MSTORE 000009f8: PUSH1 0x40 000009fa: SWAP1 000009fb: KECCAK256 000009fc: DUP1 000009fd: SLOAD 000009fe: ISZERO 000009ff: DUP1 00000a00: ISZERO 00000a01: PUSH2 0x0a15 00000a04: JUMPI 00000a05: POP 00000a06: PUSH11 0x084595161401484a000000 00000a12: CALLVALUE 00000a13: GT 00000a14: ISZERO 00000a15: JUMPDEST 00000a16: ISZERO 00000a17: ISZERO 00000a18: PUSH2 0x0a20 00000a1b: JUMPI 00000a1c: PUSH1 0x00 00000a1e: DUP1 00000a1f: REVERT 00000a20: JUMPDEST 00000a21: PUSH1 0x40 00000a23: DUP1 00000a24: MLOAD 00000a25: PUSH1 0x60 00000a27: DUP2 00000a28: ADD 00000a29: DUP3 00000a2a: MSTORE 00000a2b: CALLVALUE 00000a2c: DUP2 00000a2d: MSTORE 00000a2e: PUSH1 0x20 00000a30: DUP1 00000a31: DUP3 00000a32: ADD 00000a33: DUP6 00000a34: DUP2 00000a35: MSTORE 00000a36: PUSH1 0x00 00000a38: SWAP4 00000a39: DUP4 00000a3a: ADD 00000a3b: DUP5 00000a3c: SWAP1 00000a3d: MSTORE 00000a3e: DUP5 00000a3f: SLOAD 00000a40: PUSH1 0x01 00000a42: DUP2 00000a43: DUP2 00000a44: ADD 00000a45: DUP1 00000a46: DUP9 00000a47: SSTORE 00000a48: DUP8 00000a49: DUP8 00000a4a: MSTORE 00000a4b: SWAP6 00000a4c: DUP5 00000a4d: SWAP1 00000a4e: KECCAK256 00000a4f: DUP6 00000a50: MLOAD 00000a51: PUSH1 0x03 00000a53: SWAP1 00000a54: SWAP4 00000a55: MUL 00000a56: ADD 00000a57: SWAP2 00000a58: DUP3 00000a59: SSTORE 00000a5a: SWAP2 00000a5b: MLOAD 00000a5c: DUP1 00000a5d: MLOAD 00000a5e: SWAP2 00000a5f: SWAP4 00000a60: PUSH2 0x0a6e 00000a63: SWAP4 00000a64: DUP6 00000a65: ADD 00000a66: SWAP3 00000a67: SWAP2 00000a68: ADD 00000a69: SWAP1 00000a6a: PUSH2 0x1464 00000a6d: JUMP 00000a6e: JUMPDEST 00000a6f: POP 00000a70: PUSH1 0x40 00000a72: DUP3 00000a73: ADD 00000a74: MLOAD 00000a75: DUP2 00000a76: PUSH1 0x02 00000a78: ADD 00000a79: SSTORE 00000a7a: POP 00000a7b: POP 00000a7c: POP 00000a7d: CALLER 00000a7e: PUSH1 0x01 00000a80: PUSH1 0xa0 00000a82: PUSH1 0x02 00000a84: EXP 00000a85: SUB 00000a86: AND 00000a87: CALLER 00000a88: PUSH1 0x01 00000a8a: PUSH1 0xa0 00000a8c: PUSH1 0x02 00000a8e: EXP 00000a8f: SUB 00000a90: AND 00000a91: PUSH1 0x00 00000a93: PUSH1 0x00 00000a95: DUP1 00000a96: MLOAD 00000a97: PUSH1 0x20 00000a99: PUSH2 0x152d 00000a9c: DUP4 00000a9d: CODECOPY 00000a9e: DUP2 00000a9f: MLOAD 00000aa0: SWAP2 00000aa1: MSTORE 00000aa2: DUP6 00000aa3: PUSH1 0x00 00000aa5: CALLVALUE 00000aa6: PUSH1 0x00 00000aa8: PUSH1 0x40 00000aaa: MLOAD 00000aab: DUP1 00000aac: DUP1 00000aad: PUSH1 0x20 00000aaf: ADD 00000ab0: DUP6 00000ab1: PUSH1 0x01 00000ab3: MUL 00000ab4: PUSH1 0x00 00000ab6: NOT 00000ab7: AND 00000ab8: DUP2 00000ab9: MSTORE 00000aba: PUSH1 0x20 00000abc: ADD 00000abd: DUP5 00000abe: DUP2 00000abf: MSTORE 00000ac0: PUSH1 0x20 00000ac2: ADD 00000ac3: DUP4 00000ac4: DUP2 00000ac5: MSTORE 00000ac6: PUSH1 0x20 00000ac8: ADD 00000ac9: DUP3 00000aca: DUP2 00000acb: SUB 00000acc: DUP3 00000acd: MSTORE 00000ace: DUP7 00000acf: DUP2 00000ad0: DUP2 00000ad1: MLOAD 00000ad2: DUP2 00000ad3: MSTORE 00000ad4: PUSH1 0x20 00000ad6: ADD 00000ad7: SWAP2 00000ad8: POP 00000ad9: DUP1 00000ada: MLOAD 00000adb: SWAP1 00000adc: PUSH1 0x20 00000ade: ADD 00000adf: SWAP1 00000ae0: DUP1 00000ae1: DUP4 00000ae2: DUP4 00000ae3: PUSH1 0x00 00000ae5: JUMPDEST 00000ae6: DUP4 00000ae7: DUP2 00000ae8: LT 00000ae9: ISZERO 00000aea: PUSH2 0x0afd 00000aed: JUMPI 00000aee: DUP2 00000aef: DUP2 00000af0: ADD 00000af1: MLOAD 00000af2: DUP4 00000af3: DUP3 00000af4: ADD 00000af5: MSTORE 00000af6: PUSH1 0x20 00000af8: ADD 00000af9: PUSH2 0x0ae5 00000afc: JUMP 00000afd: JUMPDEST 00000afe: POP 00000aff: POP 00000b00: POP 00000b01: POP 00000b02: SWAP1 00000b03: POP 00000b04: SWAP1 00000b05: DUP2 00000b06: ADD 00000b07: SWAP1 00000b08: PUSH1 0x1f 00000b0a: AND 00000b0b: DUP1 00000b0c: ISZERO 00000b0d: PUSH2 0x0b2a 00000b10: JUMPI 00000b11: DUP1 00000b12: DUP3 00000b13: SUB 00000b14: DUP1 00000b15: MLOAD 00000b16: PUSH1 0x01 00000b18: DUP4 00000b19: PUSH1 0x20 00000b1b: SUB 00000b1c: PUSH2 0x0100 00000b1f: EXP 00000b20: SUB 00000b21: NOT 00000b22: AND 00000b23: DUP2 00000b24: MSTORE 00000b25: PUSH1 0x20 00000b27: ADD 00000b28: SWAP2 00000b29: POP 00000b2a: JUMPDEST 00000b2b: POP 00000b2c: SWAP6 00000b2d: POP 00000b2e: POP 00000b2f: POP 00000b30: POP 00000b31: POP 00000b32: POP 00000b33: PUSH1 0x40 00000b35: MLOAD 00000b36: DUP1 00000b37: SWAP2 00000b38: SUB 00000b39: SWAP1 00000b3a: LOG4 00000b3b: POP 00000b3c: POP 00000b3d: JUMP 00000b3e: JUMPDEST 00000b3f: PUSH1 0x00 00000b41: DUP1 00000b42: SLOAD 00000b43: PUSH1 0x01 00000b45: PUSH1 0xa0 00000b47: PUSH1 0x02 00000b49: EXP 00000b4a: SUB 00000b4b: AND 00000b4c: CALLER 00000b4d: EQ 00000b4e: DUP1 00000b4f: ISZERO 00000b50: PUSH2 0x0b64 00000b53: JUMPI 00000b54: POP 00000b55: PUSH11 0x084595161401484a000000 00000b61: DUP3 00000b62: GT 00000b63: ISZERO 00000b64: JUMPDEST 00000b65: ISZERO 00000b66: ISZERO 00000b67: PUSH2 0x0b6f 00000b6a: JUMPI 00000b6b: PUSH1 0x00 00000b6d: DUP1 00000b6e: REVERT 00000b6f: JUMPDEST 00000b70: POP 00000b71: ADDRESS 00000b72: BALANCE 00000b73: DUP2 00000b74: DUP2 00000b75: LT 00000b76: ISZERO 00000b77: PUSH2 0x0b7f 00000b7a: JUMPI 00000b7b: PUSH1 0x00 00000b7d: DUP1 00000b7e: REVERT 00000b7f: JUMPDEST 00000b80: PUSH1 0x40 00000b82: DUP1 00000b83: MLOAD 00000b84: DUP6 00000b85: DUP2 00000b86: MSTORE 00000b87: PUSH1 0x20 00000b89: DUP2 00000b8a: ADD 00000b8b: DUP5 00000b8c: SWAP1 00000b8d: MSTORE 00000b8e: DUP1 00000b8f: DUP3 00000b90: ADD 00000b91: DUP4 00000b92: SWAP1 00000b93: MSTORE 00000b94: SWAP1 00000b95: MLOAD 00000b96: PUSH1 0x01 00000b98: PUSH1 0xa0 00000b9a: PUSH1 0x02 00000b9c: EXP 00000b9d: SUB 00000b9e: DUP6 00000b9f: AND 00000ba0: SWAP2 00000ba1: PUSH1 0x00 00000ba3: SWAP2 00000ba4: PUSH32 0x83fa319e3dcab86af4165864bb9e9e884168247533a1e4abf5520b5f0321a0fe 00000bc5: SWAP2 00000bc6: DUP2 00000bc7: SWAP1 00000bc8: SUB 00000bc9: PUSH1 0x60 00000bcb: ADD 00000bcc: SWAP1 00000bcd: LOG3 00000bce: PUSH1 0x40 00000bd0: MLOAD 00000bd1: PUSH1 0x01 00000bd3: PUSH1 0xa0 00000bd5: PUSH1 0x02 00000bd7: EXP 00000bd8: SUB 00000bd9: DUP5 00000bda: AND 00000bdb: SWAP1 00000bdc: DUP4 00000bdd: ISZERO 00000bde: PUSH2 0x08fc 00000be1: MUL 00000be2: SWAP1 00000be3: DUP5 00000be4: SWAP1 00000be5: PUSH1 0x00 00000be7: DUP2 00000be8: DUP2 00000be9: DUP2 00000bea: DUP6 00000beb: DUP9 00000bec: DUP9 00000bed: CALL 00000bee: SWAP4 00000bef: POP 00000bf0: POP 00000bf1: POP 00000bf2: POP 00000bf3: ISZERO 00000bf4: DUP1 00000bf5: ISZERO 00000bf6: PUSH2 0x052e 00000bf9: JUMPI 00000bfa: RETURNDATASIZE 00000bfb: PUSH1 0x00 00000bfd: DUP1 00000bfe: RETURNDATACOPY 00000bff: RETURNDATASIZE 00000c00: PUSH1 0x00 00000c02: REVERT 00000c03: JUMPDEST 00000c04: PUSH1 0x00 00000c06: PUSH1 0x01 00000c08: PUSH1 0xa0 00000c0a: PUSH1 0x02 00000c0c: EXP 00000c0d: SUB 00000c0e: DUP3 00000c0f: AND 00000c10: ISZERO 00000c11: ISZERO 00000c12: PUSH2 0x0c1a 00000c15: JUMPI 00000c16: PUSH1 0x00 00000c18: DUP1 00000c19: REVERT 00000c1a: JUMPDEST 00000c1b: PUSH1 0x40 00000c1d: DUP1 00000c1e: MLOAD 00000c1f: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000c40: DUP2 00000c41: MSTORE 00000c42: ADDRESS 00000c43: PUSH1 0x04 00000c45: DUP3 00000c46: ADD 00000c47: MSTORE 00000c48: SWAP1 00000c49: MLOAD 00000c4a: PUSH1 0x01 00000c4c: PUSH1 0xa0 00000c4e: PUSH1 0x02 00000c50: EXP 00000c51: SUB 00000c52: DUP5 00000c53: AND 00000c54: SWAP2 00000c55: PUSH4 0x70a08231 00000c5a: SWAP2 00000c5b: PUSH1 0x24 00000c5d: DUP1 00000c5e: DUP4 00000c5f: ADD 00000c60: SWAP3 00000c61: PUSH1 0x20 00000c63: SWAP3 00000c64: SWAP2 00000c65: SWAP1 00000c66: DUP3 00000c67: SWAP1 00000c68: SUB 00000c69: ADD 00000c6a: DUP2 00000c6b: PUSH1 0x00 00000c6d: DUP8 00000c6e: DUP1 00000c6f: EXTCODESIZE 00000c70: ISZERO 00000c71: DUP1 00000c72: ISZERO 00000c73: PUSH2 0x0c7b 00000c76: JUMPI 00000c77: PUSH1 0x00 00000c79: DUP1 00000c7a: REVERT 00000c7b: JUMPDEST 00000c7c: POP 00000c7d: GAS 00000c7e: CALL 00000c7f: ISZERO 00000c80: DUP1 00000c81: ISZERO 00000c82: PUSH2 0x0c8f 00000c85: JUMPI 00000c86: RETURNDATASIZE 00000c87: PUSH1 0x00 00000c89: DUP1 00000c8a: RETURNDATACOPY 00000c8b: RETURNDATASIZE 00000c8c: PUSH1 0x00 00000c8e: REVERT 00000c8f: JUMPDEST 00000c90: POP 00000c91: POP 00000c92: POP 00000c93: POP 00000c94: PUSH1 0x40 00000c96: MLOAD 00000c97: RETURNDATASIZE 00000c98: PUSH1 0x20 00000c9a: DUP2 00000c9b: LT 00000c9c: ISZERO 00000c9d: PUSH2 0x0ca5 00000ca0: JUMPI 00000ca1: PUSH1 0x00 00000ca3: DUP1 00000ca4: REVERT 00000ca5: JUMPDEST 00000ca6: POP 00000ca7: MLOAD 00000ca8: SWAP3 00000ca9: SWAP2 00000caa: POP 00000cab: POP 00000cac: JUMP 00000cad: JUMPDEST 00000cae: PUSH1 0x00 00000cb0: DUP1 00000cb1: DUP1 00000cb2: PUSH1 0x01 00000cb4: PUSH1 0xa0 00000cb6: PUSH1 0x02 00000cb8: EXP 00000cb9: SUB 00000cba: DUP7 00000cbb: AND 00000cbc: ISZERO 00000cbd: ISZERO 00000cbe: PUSH2 0x0cc6 00000cc1: JUMPI 00000cc2: PUSH1 0x00 00000cc4: DUP1 00000cc5: REVERT 00000cc6: JUMPDEST 00000cc7: DUP7 00000cc8: PUSH1 0x00 00000cca: DUP2 00000ccb: MLOAD 00000ccc: DUP2 00000ccd: LT 00000cce: ISZERO 00000ccf: ISZERO 00000cd0: PUSH2 0x0cd5 00000cd3: JUMPI 00000cd4: INVALID 00000cd5: JUMPDEST 00000cd6: PUSH1 0x20 00000cd8: SWAP2 00000cd9: ADD 00000cda: ADD 00000cdb: MLOAD 00000cdc: PUSH1 0xf8 00000cde: PUSH1 0x02 00000ce0: EXP 00000ce1: SWAP1 00000ce2: DUP2 00000ce3: SWAP1 00000ce4: DIV 00000ce5: MUL 00000ce6: PUSH32 0xff00000000000000000000000000000000000000000000000000000000000000 00000d07: AND 00000d08: PUSH32 0x6a00000000000000000000000000000000000000000000000000000000000000 00000d29: EQ 00000d2a: SWAP3 00000d2b: POP 00000d2c: PUSH1 0x00 00000d2e: DUP5 00000d2f: GT 00000d30: SWAP2 00000d31: POP 00000d32: DUP3 00000d33: PUSH2 0x0d3b 00000d36: JUMPI 00000d37: PUSH1 0x00 00000d39: DUP1 00000d3a: REVERT 00000d3b: JUMPDEST 00000d3c: POP 00000d3d: PUSH1 0x01 00000d3f: PUSH1 0xa0 00000d41: PUSH1 0x02 00000d43: EXP 00000d44: SUB 00000d45: DUP6 00000d46: AND 00000d47: PUSH1 0x00 00000d49: SWAP1 00000d4a: DUP2 00000d4b: MSTORE 00000d4c: PUSH1 0x01 00000d4e: PUSH1 0x20 00000d50: SWAP1 00000d51: DUP2 00000d52: MSTORE 00000d53: PUSH1 0x40 00000d55: DUP1 00000d56: DUP4 00000d57: KECCAK256 00000d58: CALLER 00000d59: DUP5 00000d5a: MSTORE 00000d5b: SWAP1 00000d5c: SWAP2 00000d5d: MSTORE 00000d5e: SWAP1 00000d5f: KECCAK256 00000d60: DUP1 00000d61: SLOAD 00000d62: ISZERO 00000d63: DUP1 00000d64: ISZERO 00000d65: PUSH2 0x0d79 00000d68: JUMPI 00000d69: POP 00000d6a: PUSH11 0x084595161401484a000000 00000d76: DUP6 00000d77: GT 00000d78: ISZERO 00000d79: JUMPDEST 00000d7a: ISZERO 00000d7b: ISZERO 00000d7c: PUSH2 0x0d84 00000d7f: JUMPI 00000d80: PUSH1 0x00 00000d82: DUP1 00000d83: REVERT 00000d84: JUMPDEST 00000d85: DUP2 00000d86: ISZERO 00000d87: PUSH2 0x0dba 00000d8a: JUMPI 00000d8b: PUSH1 0x00 00000d8d: DUP5 00000d8e: DUP2 00000d8f: MSTORE 00000d90: PUSH1 0x02 00000d92: PUSH1 0x20 00000d94: MSTORE 00000d95: PUSH1 0x40 00000d97: SWAP1 00000d98: KECCAK256 00000d99: SLOAD 00000d9a: ISZERO 00000d9b: PUSH2 0x0da3 00000d9e: JUMPI 00000d9f: PUSH1 0x00 00000da1: DUP1 00000da2: REVERT 00000da3: JUMPDEST 00000da4: PUSH1 0x00 00000da6: DUP5 00000da7: DUP2 00000da8: MSTORE 00000da9: PUSH1 0x02 00000dab: PUSH1 0x20 00000dad: MSTORE 00000dae: PUSH1 0x40 00000db0: SWAP1 00000db1: KECCAK256 00000db2: PUSH1 0x01 00000db4: SWAP1 00000db5: SSTORE 00000db6: PUSH2 0x0e5f 00000db9: JUMP 00000dba: JUMPDEST 00000dbb: PUSH1 0x40 00000dbd: DUP1 00000dbe: MLOAD 00000dbf: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 00000de0: DUP2 00000de1: MSTORE 00000de2: CALLER 00000de3: PUSH1 0x04 00000de5: DUP3 00000de6: ADD 00000de7: MSTORE 00000de8: ADDRESS 00000de9: PUSH1 0x24 00000deb: DUP3 00000dec: ADD 00000ded: MSTORE 00000dee: PUSH1 0x44 00000df0: DUP2 00000df1: ADD 00000df2: DUP8 00000df3: SWAP1 00000df4: MSTORE 00000df5: SWAP1 00000df6: MLOAD 00000df7: PUSH1 0x01 00000df9: PUSH1 0xa0 00000dfb: PUSH1 0x02 00000dfd: EXP 00000dfe: SUB 00000dff: DUP9 00000e00: AND 00000e01: SWAP2 00000e02: PUSH4 0x23b872dd 00000e07: SWAP2 00000e08: PUSH1 0x64 00000e0a: DUP1 00000e0b: DUP4 00000e0c: ADD 00000e0d: SWAP3 00000e0e: PUSH1 0x20 00000e10: SWAP3 00000e11: SWAP2 00000e12: SWAP1 00000e13: DUP3 00000e14: SWAP1 00000e15: SUB 00000e16: ADD 00000e17: DUP2 00000e18: PUSH1 0x00 00000e1a: DUP8 00000e1b: DUP1 00000e1c: EXTCODESIZE 00000e1d: ISZERO 00000e1e: DUP1 00000e1f: ISZERO 00000e20: PUSH2 0x0e28 00000e23: JUMPI 00000e24: PUSH1 0x00 00000e26: DUP1 00000e27: REVERT 00000e28: JUMPDEST 00000e29: POP 00000e2a: GAS 00000e2b: CALL 00000e2c: ISZERO 00000e2d: DUP1 00000e2e: ISZERO 00000e2f: PUSH2 0x0e3c 00000e32: JUMPI 00000e33: RETURNDATASIZE 00000e34: PUSH1 0x00 00000e36: DUP1 00000e37: RETURNDATACOPY 00000e38: RETURNDATASIZE 00000e39: PUSH1 0x00 00000e3b: REVERT 00000e3c: JUMPDEST 00000e3d: POP 00000e3e: POP 00000e3f: POP 00000e40: POP 00000e41: PUSH1 0x40 00000e43: MLOAD 00000e44: RETURNDATASIZE 00000e45: PUSH1 0x20 00000e47: DUP2 00000e48: LT 00000e49: ISZERO 00000e4a: PUSH2 0x0e52 00000e4d: JUMPI 00000e4e: PUSH1 0x00 00000e50: DUP1 00000e51: REVERT 00000e52: JUMPDEST 00000e53: POP 00000e54: MLOAD 00000e55: ISZERO 00000e56: ISZERO 00000e57: PUSH2 0x0e5f 00000e5a: JUMPI 00000e5b: PUSH1 0x00 00000e5d: DUP1 00000e5e: REVERT 00000e5f: JUMPDEST 00000e60: PUSH1 0x40 00000e62: DUP1 00000e63: MLOAD 00000e64: PUSH1 0x60 00000e66: DUP2 00000e67: ADD 00000e68: DUP3 00000e69: MSTORE 00000e6a: DUP7 00000e6b: DUP2 00000e6c: MSTORE 00000e6d: PUSH1 0x20 00000e6f: DUP1 00000e70: DUP3 00000e71: ADD 00000e72: DUP11 00000e73: DUP2 00000e74: MSTORE 00000e75: PUSH1 0x00 00000e77: SWAP4 00000e78: DUP4 00000e79: ADD 00000e7a: DUP5 00000e7b: SWAP1 00000e7c: MSTORE 00000e7d: DUP5 00000e7e: SLOAD 00000e7f: PUSH1 0x01 00000e81: DUP2 00000e82: DUP2 00000e83: ADD 00000e84: DUP1 00000e85: DUP9 00000e86: SSTORE 00000e87: DUP8 00000e88: DUP8 00000e89: MSTORE 00000e8a: SWAP6 00000e8b: DUP5 00000e8c: SWAP1 00000e8d: KECCAK256 00000e8e: DUP6 00000e8f: MLOAD 00000e90: PUSH1 0x03 00000e92: SWAP1 00000e93: SWAP4 00000e94: MUL 00000e95: ADD 00000e96: SWAP2 00000e97: DUP3 00000e98: SSTORE 00000e99: SWAP2 00000e9a: MLOAD 00000e9b: DUP1 00000e9c: MLOAD 00000e9d: SWAP2 00000e9e: SWAP4 00000e9f: PUSH2 0x0ead 00000ea2: SWAP4 00000ea3: DUP6 00000ea4: ADD 00000ea5: SWAP3 00000ea6: SWAP2 00000ea7: ADD 00000ea8: SWAP1 00000ea9: PUSH2 0x1464 00000eac: JUMP 00000ead: JUMPDEST 00000eae: POP 00000eaf: PUSH1 0x40 00000eb1: SWAP2 00000eb2: DUP3 00000eb3: ADD 00000eb4: MLOAD 00000eb5: PUSH1 0x02 00000eb7: SWAP1 00000eb8: SWAP2 00000eb9: ADD 00000eba: SSTORE 00000ebb: DUP1 00000ebc: MLOAD 00000ebd: PUSH1 0x20 00000ebf: DUP1 00000ec0: DUP3 00000ec1: ADD 00000ec2: DUP9 00000ec3: SWAP1 00000ec4: MSTORE 00000ec5: SWAP2 00000ec6: DUP2 00000ec7: ADD 00000ec8: DUP9 00000ec9: SWAP1 00000eca: MSTORE 00000ecb: PUSH1 0x00 00000ecd: PUSH1 0x60 00000ecf: DUP3 00000ed0: ADD 00000ed1: DUP2 00000ed2: SWAP1 00000ed3: MSTORE 00000ed4: PUSH1 0x80 00000ed6: DUP1 00000ed7: DUP4 00000ed8: MSTORE 00000ed9: DUP12 00000eda: MLOAD 00000edb: SWAP1 00000edc: DUP4 00000edd: ADD 00000ede: MSTORE 00000edf: DUP11 00000ee0: MLOAD 00000ee1: CALLER 00000ee2: SWAP5 00000ee3: POP 00000ee4: DUP5 00000ee5: SWAP4 00000ee6: PUSH1 0x01 00000ee8: PUSH1 0xa0 00000eea: PUSH1 0x02 00000eec: EXP 00000eed: SUB 00000eee: DUP13 00000eef: AND 00000ef0: SWAP4 00000ef1: PUSH1 0x00 00000ef3: DUP1 00000ef4: MLOAD 00000ef5: PUSH1 0x20 00000ef7: PUSH2 0x152d 00000efa: DUP4 00000efb: CODECOPY 00000efc: DUP2 00000efd: MLOAD 00000efe: SWAP2 00000eff: MSTORE 00000f00: SWAP4 00000f01: DUP15 00000f02: SWAP4 00000f03: DUP13 00000f04: SWAP4 00000f05: DUP15 00000f06: SWAP4 00000f07: SWAP2 00000f08: DUP3 00000f09: SWAP2 00000f0a: PUSH1 0xa0 00000f0c: DUP4 00000f0d: ADD 00000f0e: SWAP2 00000f0f: SWAP1 00000f10: DUP9 00000f11: ADD 00000f12: SWAP1 00000f13: DUP1 00000f14: DUP4 00000f15: DUP4 00000f16: DUP9 00000f17: JUMPDEST 00000f18: DUP4 00000f19: DUP2 00000f1a: LT 00000f1b: ISZERO 00000f1c: PUSH2 0x0f2f 00000f1f: JUMPI 00000f20: DUP2 00000f21: DUP2 00000f22: ADD 00000f23: MLOAD 00000f24: DUP4 00000f25: DUP3 00000f26: ADD 00000f27: MSTORE 00000f28: PUSH1 0x20 00000f2a: ADD 00000f2b: PUSH2 0x0f17 00000f2e: JUMP 00000f2f: JUMPDEST 00000f30: POP 00000f31: POP 00000f32: POP 00000f33: POP 00000f34: SWAP1 00000f35: POP 00000f36: SWAP1 00000f37: DUP2 00000f38: ADD 00000f39: SWAP1 00000f3a: PUSH1 0x1f 00000f3c: AND 00000f3d: DUP1 00000f3e: ISZERO 00000f3f: PUSH2 0x0f5c 00000f42: JUMPI 00000f43: DUP1 00000f44: DUP3 00000f45: SUB 00000f46: DUP1 00000f47: MLOAD 00000f48: PUSH1 0x01 00000f4a: DUP4 00000f4b: PUSH1 0x20 00000f4d: SUB 00000f4e: PUSH2 0x0100 00000f51: EXP 00000f52: SUB 00000f53: NOT 00000f54: AND 00000f55: DUP2 00000f56: MSTORE 00000f57: PUSH1 0x20 00000f59: ADD 00000f5a: SWAP2 00000f5b: POP 00000f5c: JUMPDEST 00000f5d: POP 00000f5e: SWAP6 00000f5f: POP 00000f60: POP 00000f61: POP 00000f62: POP 00000f63: POP 00000f64: POP 00000f65: PUSH1 0x40 00000f67: MLOAD 00000f68: DUP1 00000f69: SWAP2 00000f6a: SUB 00000f6b: SWAP1 00000f6c: LOG4 00000f6d: POP 00000f6e: POP 00000f6f: POP 00000f70: POP 00000f71: POP 00000f72: POP 00000f73: POP 00000f74: JUMP 00000f75: JUMPDEST 00000f76: PUSH1 0x00 00000f78: DUP1 00000f79: SLOAD 00000f7a: DUP2 00000f7b: SWAP1 00000f7c: PUSH1 0x01 00000f7e: PUSH1 0xa0 00000f80: PUSH1 0x02 00000f82: EXP 00000f83: SUB 00000f84: AND 00000f85: CALLER 00000f86: EQ 00000f87: PUSH2 0x0f8f 00000f8a: JUMPI 00000f8b: PUSH1 0x00 00000f8d: DUP1 00000f8e: REVERT 00000f8f: JUMPDEST 00000f90: PUSH1 0x01 00000f92: PUSH1 0xa0 00000f94: PUSH1 0x02 00000f96: EXP 00000f97: SUB 00000f98: DUP5 00000f99: AND 00000f9a: PUSH1 0x00 00000f9c: SWAP1 00000f9d: DUP2 00000f9e: MSTORE 00000f9f: PUSH32 0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49 00000fc0: PUSH1 0x20 00000fc2: MSTORE 00000fc3: PUSH1 0x40 00000fc5: SWAP1 00000fc6: KECCAK256 00000fc7: DUP1 00000fc8: SLOAD 00000fc9: SWAP1 00000fca: SWAP3 00000fcb: POP 00000fcc: PUSH1 0x01 00000fce: EQ 00000fcf: PUSH2 0x0fd7 00000fd2: JUMPI 00000fd3: PUSH1 0x00 00000fd5: DUP1 00000fd6: REVERT 00000fd7: JUMPDEST 00000fd8: PUSH7 0x038d7ea4c68000 00000fe0: DUP3 00000fe1: PUSH1 0x00 00000fe3: DUP2 00000fe4: SLOAD 00000fe5: DUP2 00000fe6: LT 00000fe7: ISZERO 00000fe8: ISZERO 00000fe9: PUSH2 0x0fee 00000fec: JUMPI 00000fed: INVALID 00000fee: JUMPDEST 00000fef: PUSH1 0x00 00000ff1: SWAP2 00000ff2: DUP3 00000ff3: MSTORE 00000ff4: PUSH1 0x20 00000ff6: SWAP1 00000ff7: SWAP2 00000ff8: KECCAK256 00000ff9: PUSH1 0x03 00000ffb: SWAP1 00000ffc: SWAP2 00000ffd: MUL 00000ffe: ADD 00000fff: SLOAD 00001000: GT 00001001: PUSH2 0x1009 00001004: JUMPI 00001005: PUSH1 0x00 00001007: DUP1 00001008: REVERT 00001009: JUMPDEST 0000100a: DUP3 0000100b: PUSH1 0x01 0000100d: EQ 0000100e: ISZERO 0000100f: PUSH2 0x1120 00001012: JUMPI 00001013: DUP4 00001014: PUSH1 0x01 00001016: PUSH1 0xa0 00001018: PUSH1 0x02 0000101a: EXP 0000101b: SUB 0000101c: AND 0000101d: CALLER 0000101e: PUSH1 0x01 00001020: PUSH1 0xa0 00001022: PUSH1 0x02 00001024: EXP 00001025: SUB 00001026: AND 00001027: PUSH1 0x00 00001029: PUSH1 0x00 0000102b: DUP1 0000102c: MLOAD 0000102d: PUSH1 0x20 0000102f: PUSH2 0x152d 00001032: DUP4 00001033: CODECOPY 00001034: DUP2 00001035: MLOAD 00001036: SWAP2 00001037: MSTORE 00001038: DUP6 00001039: PUSH1 0x00 0000103b: DUP2 0000103c: SLOAD 0000103d: DUP2 0000103e: LT 0000103f: ISZERO 00001040: ISZERO 00001041: PUSH2 0x1046 00001044: JUMPI 00001045: INVALID 00001046: JUMPDEST 00001047: SWAP1 00001048: PUSH1 0x00 0000104a: MSTORE 0000104b: PUSH1 0x20 0000104d: PUSH1 0x00 0000104f: KECCAK256 00001050: SWAP1 00001051: PUSH1 0x03 00001053: MUL 00001054: ADD 00001055: PUSH1 0x01 00001057: ADD 00001058: DUP10 00001059: DUP8 0000105a: PUSH1 0x00 0000105c: DUP2 0000105d: SLOAD 0000105e: DUP2 0000105f: LT 00001060: ISZERO 00001061: ISZERO 00001062: PUSH2 0x1067 00001065: JUMPI 00001066: INVALID 00001067: JUMPDEST 00001068: PUSH1 0x00 0000106a: SWAP2 0000106b: DUP3 0000106c: MSTORE 0000106d: PUSH1 0x20 0000106f: SWAP2 00001070: DUP3 00001071: SWAP1 00001072: KECCAK256 00001073: PUSH1 0x03 00001075: SWAP1 00001076: SWAP2 00001077: MUL 00001078: ADD 00001079: SLOAD 0000107a: PUSH1 0x40 0000107c: DUP1 0000107d: MLOAD 0000107e: SWAP3 0000107f: DUP4 00001080: ADD 00001081: DUP5 00001082: SWAP1 00001083: MSTORE 00001084: DUP3 00001085: ADD 00001086: DUP2 00001087: SWAP1 00001088: MSTORE 00001089: PUSH1 0x01 0000108b: PUSH1 0x60 0000108d: DUP4 0000108e: ADD 0000108f: DUP2 00001090: SWAP1 00001091: MSTORE 00001092: PUSH1 0x80 00001094: DUP1 00001095: DUP5 00001096: MSTORE 00001097: DUP6 00001098: SLOAD 00001099: PUSH1 0x02 0000109b: PUSH2 0x0100 0000109e: DUP3 0000109f: DUP6 000010a0: AND 000010a1: ISZERO 000010a2: MUL 000010a3: PUSH1 0x00 000010a5: NOT 000010a6: ADD 000010a7: SWAP1 000010a8: SWAP2 000010a9: AND 000010aa: DIV 000010ab: SWAP1 000010ac: DUP5 000010ad: ADD 000010ae: DUP2 000010af: SWAP1 000010b0: MSTORE 000010b1: SWAP2 000010b2: SWAP3 000010b3: SWAP1 000010b4: SWAP2 000010b5: DUP2 000010b6: SWAP1 000010b7: PUSH1 0xa0 000010b9: DUP3 000010ba: ADD 000010bb: SWAP1 000010bc: DUP8 000010bd: SWAP1 000010be: DUP1 000010bf: ISZERO 000010c0: PUSH2 0x110a 000010c3: JUMPI 000010c4: DUP1 000010c5: PUSH1 0x1f 000010c7: LT 000010c8: PUSH2 0x10df 000010cb: JUMPI 000010cc: PUSH2 0x0100 000010cf: DUP1 000010d0: DUP4 000010d1: SLOAD 000010d2: DIV 000010d3: MUL 000010d4: DUP4 000010d5: MSTORE 000010d6: SWAP2 000010d7: PUSH1 0x20 000010d9: ADD 000010da: SWAP2 000010db: PUSH2 0x110a 000010de: JUMP 000010df: JUMPDEST 000010e0: DUP3 000010e1: ADD 000010e2: SWAP2 000010e3: SWAP1 000010e4: PUSH1 0x00 000010e6: MSTORE 000010e7: PUSH1 0x20 000010e9: PUSH1 0x00 000010eb: KECCAK256 000010ec: SWAP1 000010ed: JUMPDEST 000010ee: DUP2 000010ef: SLOAD 000010f0: DUP2 000010f1: MSTORE 000010f2: SWAP1 000010f3: PUSH1 0x01 000010f5: ADD 000010f6: SWAP1 000010f7: PUSH1 0x20 000010f9: ADD 000010fa: DUP1 000010fb: DUP4 000010fc: GT 000010fd: PUSH2 0x10ed 00001100: JUMPI 00001101: DUP3 00001102: SWAP1 00001103: SUB 00001104: PUSH1 0x1f 00001106: AND 00001107: DUP3 00001108: ADD 00001109: SWAP2 0000110a: JUMPDEST 0000110b: POP 0000110c: POP 0000110d: SWAP6 0000110e: POP 0000110f: POP 00001110: POP 00001111: POP 00001112: POP 00001113: POP 00001114: PUSH1 0x40 00001116: MLOAD 00001117: DUP1 00001118: SWAP2 00001119: SUB 0000111a: SWAP1 0000111b: LOG4 0000111c: PUSH2 0x1296 0000111f: JUMP 00001120: JUMPDEST 00001121: PUSH2 0x1151 00001124: DUP3 00001125: PUSH1 0x00 00001127: DUP2 00001128: SLOAD 00001129: DUP2 0000112a: LT 0000112b: ISZERO 0000112c: ISZERO 0000112d: PUSH2 0x1132 00001130: JUMPI 00001131: INVALID 00001132: JUMPDEST 00001133: SWAP1 00001134: PUSH1 0x00 00001136: MSTORE 00001137: PUSH1 0x20 00001139: PUSH1 0x00 0000113b: KECCAK256 0000113c: SWAP1 0000113d: PUSH1 0x03 0000113f: MUL 00001140: ADD 00001141: PUSH1 0x00 00001143: ADD 00001144: SLOAD 00001145: PUSH7 0x038d7ea4c68000 0000114d: PUSH2 0x13da 00001150: JUMP 00001151: JUMPDEST 00001152: SWAP1 00001153: POP 00001154: ADDRESS 00001155: BALANCE 00001156: DUP2 00001157: GT 00001158: ISZERO 00001159: PUSH2 0x1161 0000115c: JUMPI 0000115d: PUSH1 0x00 0000115f: DUP1 00001160: REVERT 00001161: JUMPDEST 00001162: DUP4 00001163: PUSH1 0x01 00001165: PUSH1 0xa0 00001167: PUSH1 0x02 00001169: EXP 0000116a: SUB 0000116b: AND 0000116c: CALLER 0000116d: PUSH1 0x01 0000116f: PUSH1 0xa0 00001171: PUSH1 0x02 00001173: EXP 00001174: SUB 00001175: AND 00001176: PUSH1 0x00 00001178: PUSH1 0x00 0000117a: DUP1 0000117b: MLOAD 0000117c: PUSH1 0x20 0000117e: PUSH2 0x152d 00001181: DUP4 00001182: CODECOPY 00001183: DUP2 00001184: MLOAD 00001185: SWAP2 00001186: MSTORE 00001187: DUP6 00001188: PUSH1 0x00 0000118a: DUP2 0000118b: SLOAD 0000118c: DUP2 0000118d: LT 0000118e: ISZERO 0000118f: ISZERO 00001190: PUSH2 0x1195 00001193: JUMPI 00001194: INVALID 00001195: JUMPDEST 00001196: SWAP1 00001197: PUSH1 0x00 00001199: MSTORE 0000119a: PUSH1 0x20 0000119c: PUSH1 0x00 0000119e: KECCAK256 0000119f: SWAP1 000011a0: PUSH1 0x03 000011a2: MUL 000011a3: ADD 000011a4: PUSH1 0x01 000011a6: ADD 000011a7: DUP10 000011a8: DUP7 000011a9: PUSH1 0x02 000011ab: PUSH1 0x40 000011ad: MLOAD 000011ae: DUP1 000011af: DUP1 000011b0: PUSH1 0x20 000011b2: ADD 000011b3: DUP6 000011b4: PUSH1 0x00 000011b6: NOT 000011b7: AND 000011b8: PUSH1 0x00 000011ba: NOT 000011bb: AND 000011bc: DUP2 000011bd: MSTORE 000011be: PUSH1 0x20 000011c0: ADD 000011c1: DUP5 000011c2: DUP2 000011c3: MSTORE 000011c4: PUSH1 0x20 000011c6: ADD 000011c7: DUP4 000011c8: DUP2 000011c9: MSTORE 000011ca: PUSH1 0x20 000011cc: ADD 000011cd: DUP3 000011ce: DUP2 000011cf: SUB 000011d0: DUP3 000011d1: MSTORE 000011d2: DUP7 000011d3: DUP2 000011d4: DUP2 000011d5: SLOAD 000011d6: PUSH1 0x01 000011d8: DUP2 000011d9: PUSH1 0x01 000011db: AND 000011dc: ISZERO 000011dd: PUSH2 0x0100 000011e0: MUL 000011e1: SUB 000011e2: AND 000011e3: PUSH1 0x02 000011e5: SWAP1 000011e6: DIV 000011e7: DUP2 000011e8: MSTORE 000011e9: PUSH1 0x20 000011eb: ADD 000011ec: SWAP2 000011ed: POP 000011ee: DUP1 000011ef: SLOAD 000011f0: PUSH1 0x01 000011f2: DUP2 000011f3: PUSH1 0x01 000011f5: AND 000011f6: ISZERO 000011f7: PUSH2 0x0100 000011fa: MUL 000011fb: SUB 000011fc: AND 000011fd: PUSH1 0x02 000011ff: SWAP1 00001200: DIV 00001201: DUP1 00001202: ISZERO 00001203: PUSH2 0x124d 00001206: JUMPI 00001207: DUP1 00001208: PUSH1 0x1f 0000120a: LT 0000120b: PUSH2 0x1222 0000120e: JUMPI 0000120f: PUSH2 0x0100 00001212: DUP1 00001213: DUP4 00001214: SLOAD 00001215: DIV 00001216: MUL 00001217: DUP4 00001218: MSTORE 00001219: SWAP2 0000121a: PUSH1 0x20 0000121c: ADD 0000121d: SWAP2 0000121e: PUSH2 0x124d 00001221: JUMP 00001222: JUMPDEST 00001223: DUP3 00001224: ADD 00001225: SWAP2 00001226: SWAP1 00001227: PUSH1 0x00 00001229: MSTORE 0000122a: PUSH1 0x20 0000122c: PUSH1 0x00 0000122e: KECCAK256 0000122f: SWAP1 00001230: JUMPDEST 00001231: DUP2 00001232: SLOAD 00001233: DUP2 00001234: MSTORE 00001235: SWAP1 00001236: PUSH1 0x01 00001238: ADD 00001239: SWAP1 0000123a: PUSH1 0x20 0000123c: ADD 0000123d: DUP1 0000123e: DUP4 0000123f: GT 00001240: PUSH2 0x1230 00001243: JUMPI 00001244: DUP3 00001245: SWAP1 00001246: SUB 00001247: PUSH1 0x1f 00001249: AND 0000124a: DUP3 0000124b: ADD 0000124c: SWAP2 0000124d: JUMPDEST 0000124e: POP 0000124f: POP 00001250: SWAP6 00001251: POP 00001252: POP 00001253: POP 00001254: POP 00001255: POP 00001256: POP 00001257: PUSH1 0x40 00001259: MLOAD 0000125a: DUP1 0000125b: SWAP2 0000125c: SUB 0000125d: SWAP1 0000125e: LOG4 0000125f: PUSH1 0x40 00001261: MLOAD 00001262: PUSH1 0x01 00001264: PUSH1 0xa0 00001266: PUSH1 0x02 00001268: EXP 00001269: SUB 0000126a: DUP6 0000126b: AND 0000126c: SWAP1 0000126d: DUP3 0000126e: ISZERO 0000126f: PUSH2 0x08fc 00001272: MUL 00001273: SWAP1 00001274: DUP4 00001275: SWAP1 00001276: PUSH1 0x00 00001278: DUP2 00001279: DUP2 0000127a: DUP2 0000127b: DUP6 0000127c: DUP9 0000127d: DUP9 0000127e: CALL 0000127f: SWAP4 00001280: POP 00001281: POP 00001282: POP 00001283: POP 00001284: ISZERO 00001285: DUP1 00001286: ISZERO 00001287: PUSH2 0x1294 0000128a: JUMPI 0000128b: RETURNDATASIZE 0000128c: PUSH1 0x00 0000128e: DUP1 0000128f: RETURNDATACOPY 00001290: RETURNDATASIZE 00001291: PUSH1 0x00 00001293: REVERT 00001294: JUMPDEST 00001295: POP 00001296: JUMPDEST 00001297: DUP2 00001298: PUSH1 0x00 0000129a: DUP2 0000129b: SLOAD 0000129c: DUP2 0000129d: LT 0000129e: ISZERO 0000129f: ISZERO 000012a0: PUSH2 0x12a5 000012a3: JUMPI 000012a4: INVALID 000012a5: JUMPDEST 000012a6: PUSH1 0x00 000012a8: SWAP2 000012a9: DUP3 000012aa: MSTORE 000012ab: PUSH1 0x20 000012ad: DUP3 000012ae: KECCAK256 000012af: PUSH1 0x03 000012b1: SWAP1 000012b2: SWAP2 000012b3: MUL 000012b4: ADD 000012b5: DUP2 000012b6: DUP2 000012b7: SSTORE 000012b8: SWAP1 000012b9: PUSH2 0x12c5 000012bc: PUSH1 0x01 000012be: DUP4 000012bf: ADD 000012c0: DUP3 000012c1: PUSH2 0x13ec 000012c4: JUMP 000012c5: JUMPDEST 000012c6: POP 000012c7: PUSH1 0x00 000012c9: PUSH1 0x02 000012cb: SWAP2 000012cc: SWAP1 000012cd: SWAP2 000012ce: ADD 000012cf: SSTORE 000012d0: DUP2 000012d1: SLOAD 000012d2: PUSH2 0x0951 000012d5: DUP4 000012d6: PUSH1 0x00 000012d8: NOT 000012d9: DUP4 000012da: ADD 000012db: PUSH2 0x1433 000012de: JUMP 000012df: JUMPDEST 000012e0: PUSH1 0x01 000012e2: PUSH1 0x20 000012e4: MSTORE 000012e5: DUP3 000012e6: PUSH1 0x00 000012e8: MSTORE 000012e9: PUSH1 0x40 000012eb: PUSH1 0x00 000012ed: KECCAK256 000012ee: PUSH1 0x20 000012f0: MSTORE 000012f1: DUP2 000012f2: PUSH1 0x00 000012f4: MSTORE 000012f5: PUSH1 0x40 000012f7: PUSH1 0x00 000012f9: KECCAK256 000012fa: DUP2 000012fb: DUP2 000012fc: SLOAD 000012fd: DUP2 000012fe: LT 000012ff: ISZERO 00001300: ISZERO 00001301: PUSH2 0x1306 00001304: JUMPI 00001305: INVALID 00001306: JUMPDEST 00001307: PUSH1 0x00 00001309: SWAP2 0000130a: DUP3 0000130b: MSTORE 0000130c: PUSH1 0x20 0000130e: SWAP2 0000130f: DUP3 00001310: SWAP1 00001311: KECCAK256 00001312: PUSH1 0x03 00001314: SWAP2 00001315: SWAP1 00001316: SWAP2 00001317: MUL 00001318: ADD 00001319: DUP1 0000131a: SLOAD 0000131b: PUSH1 0x01 0000131d: DUP1 0000131e: DUP4 0000131f: ADD 00001320: DUP1 00001321: SLOAD 00001322: PUSH1 0x40 00001324: DUP1 00001325: MLOAD 00001326: PUSH1 0x02 00001328: SWAP5 00001329: DUP4 0000132a: AND 0000132b: ISZERO 0000132c: PUSH2 0x0100 0000132f: MUL 00001330: PUSH1 0x00 00001332: NOT 00001333: ADD 00001334: SWAP1 00001335: SWAP3 00001336: AND 00001337: SWAP4 00001338: SWAP1 00001339: SWAP4 0000133a: DIV 0000133b: PUSH1 0x1f 0000133d: DUP2 0000133e: ADD 0000133f: DUP8 00001340: SWAP1 00001341: DIV 00001342: DUP8 00001343: MUL 00001344: DUP3 00001345: ADD 00001346: DUP8 00001347: ADD 00001348: SWAP1 00001349: SWAP4 0000134a: MSTORE 0000134b: DUP3 0000134c: DUP2 0000134d: MSTORE 0000134e: SWAP3 0000134f: SWAP8 00001350: POP 00001351: SWAP3 00001352: SWAP6 00001353: POP 00001354: SWAP1 00001355: SWAP4 00001356: POP 00001357: SWAP1 00001358: SWAP2 00001359: DUP4 0000135a: ADD 0000135b: DUP3 0000135c: DUP3 0000135d: DUP1 0000135e: ISZERO 0000135f: PUSH2 0x13a9 00001362: JUMPI 00001363: DUP1 00001364: PUSH1 0x1f 00001366: LT 00001367: PUSH2 0x137e 0000136a: JUMPI 0000136b: PUSH2 0x0100 0000136e: DUP1 0000136f: DUP4 00001370: SLOAD 00001371: DIV 00001372: MUL 00001373: DUP4 00001374: MSTORE 00001375: SWAP2 00001376: PUSH1 0x20 00001378: ADD 00001379: SWAP2 0000137a: PUSH2 0x13a9 0000137d: JUMP 0000137e: JUMPDEST 0000137f: DUP3 00001380: ADD 00001381: SWAP2 00001382: SWAP1 00001383: PUSH1 0x00 00001385: MSTORE 00001386: PUSH1 0x20 00001388: PUSH1 0x00 0000138a: KECCAK256 0000138b: SWAP1 0000138c: JUMPDEST 0000138d: DUP2 0000138e: SLOAD 0000138f: DUP2 00001390: MSTORE 00001391: SWAP1 00001392: PUSH1 0x01 00001394: ADD 00001395: SWAP1 00001396: PUSH1 0x20 00001398: ADD 00001399: DUP1 0000139a: DUP4 0000139b: GT 0000139c: PUSH2 0x138c 0000139f: JUMPI 000013a0: DUP3 000013a1: SWAP1 000013a2: SUB 000013a3: PUSH1 0x1f 000013a5: AND 000013a6: DUP3 000013a7: ADD 000013a8: SWAP2 000013a9: JUMPDEST 000013aa: POP 000013ab: POP 000013ac: POP 000013ad: POP 000013ae: POP 000013af: SWAP1 000013b0: DUP1 000013b1: PUSH1 0x02 000013b3: ADD 000013b4: SLOAD 000013b5: SWAP1 000013b6: POP 000013b7: DUP4 000013b8: JUMP 000013b9: JUMPDEST 000013ba: PUSH1 0x00 000013bc: SLOAD 000013bd: PUSH1 0x01 000013bf: PUSH1 0xa0 000013c1: PUSH1 0x02 000013c3: EXP 000013c4: SUB 000013c5: AND 000013c6: DUP2 000013c7: JUMP 000013c8: JUMPDEST 000013c9: PUSH1 0x00 000013cb: SWAP1 000013cc: DUP2 000013cd: MSTORE 000013ce: PUSH1 0x02 000013d0: PUSH1 0x20 000013d2: MSTORE 000013d3: PUSH1 0x40 000013d5: SWAP1 000013d6: KECCAK256 000013d7: SLOAD 000013d8: SWAP1 000013d9: JUMP 000013da: JUMPDEST 000013db: PUSH1 0x00 000013dd: DUP3 000013de: DUP3 000013df: GT 000013e0: ISZERO 000013e1: PUSH2 0x13e6 000013e4: JUMPI 000013e5: INVALID 000013e6: JUMPDEST 000013e7: POP 000013e8: SWAP1 000013e9: SUB 000013ea: SWAP1 000013eb: JUMP 000013ec: JUMPDEST 000013ed: POP 000013ee: DUP1 000013ef: SLOAD 000013f0: PUSH1 0x01 000013f2: DUP2 000013f3: PUSH1 0x01 000013f5: AND 000013f6: ISZERO 000013f7: PUSH2 0x0100 000013fa: MUL 000013fb: SUB 000013fc: AND 000013fd: PUSH1 0x02 000013ff: SWAP1 00001400: DIV 00001401: PUSH1 0x00 00001403: DUP3 00001404: SSTORE 00001405: DUP1 00001406: PUSH1 0x1f 00001408: LT 00001409: PUSH2 0x1412 0000140c: JUMPI 0000140d: POP 0000140e: PUSH2 0x1430 00001411: JUMP 00001412: JUMPDEST 00001413: PUSH1 0x1f 00001415: ADD 00001416: PUSH1 0x20 00001418: SWAP1 00001419: DIV 0000141a: SWAP1 0000141b: PUSH1 0x00 0000141d: MSTORE 0000141e: PUSH1 0x20 00001420: PUSH1 0x00 00001422: KECCAK256 00001423: SWAP1 00001424: DUP2 00001425: ADD 00001426: SWAP1 00001427: PUSH2 0x1430 0000142a: SWAP2 0000142b: SWAP1 0000142c: PUSH2 0x14e2 0000142f: JUMP 00001430: JUMPDEST 00001431: POP 00001432: JUMP 00001433: JUMPDEST 00001434: DUP2 00001435: SLOAD 00001436: DUP2 00001437: DUP4 00001438: SSTORE 00001439: DUP2 0000143a: DUP2 0000143b: GT 0000143c: ISZERO 0000143d: PUSH2 0x145f 00001440: JUMPI 00001441: PUSH1 0x03 00001443: MUL 00001444: DUP2 00001445: PUSH1 0x03 00001447: MUL 00001448: DUP4 00001449: PUSH1 0x00 0000144b: MSTORE 0000144c: PUSH1 0x20 0000144e: PUSH1 0x00 00001450: KECCAK256 00001451: SWAP2 00001452: DUP3 00001453: ADD 00001454: SWAP2 00001455: ADD 00001456: PUSH2 0x145f 00001459: SWAP2 0000145a: SWAP1 0000145b: PUSH2 0x14fc 0000145e: JUMP 0000145f: JUMPDEST 00001460: POP 00001461: POP 00001462: POP 00001463: JUMP 00001464: JUMPDEST 00001465: DUP3 00001466: DUP1 00001467: SLOAD 00001468: PUSH1 0x01 0000146a: DUP2 0000146b: PUSH1 0x01 0000146d: AND 0000146e: ISZERO 0000146f: PUSH2 0x0100 00001472: MUL 00001473: SUB 00001474: AND 00001475: PUSH1 0x02 00001477: SWAP1 00001478: DIV 00001479: SWAP1 0000147a: PUSH1 0x00 0000147c: MSTORE 0000147d: PUSH1 0x20 0000147f: PUSH1 0x00 00001481: KECCAK256 00001482: SWAP1 00001483: PUSH1 0x1f 00001485: ADD 00001486: PUSH1 0x20 00001488: SWAP1 00001489: DIV 0000148a: DUP2 0000148b: ADD 0000148c: SWAP3 0000148d: DUP3 0000148e: PUSH1 0x1f 00001490: LT 00001491: PUSH2 0x14a5 00001494: JUMPI 00001495: DUP1 00001496: MLOAD 00001497: PUSH1 0xff 00001499: NOT 0000149a: AND 0000149b: DUP4 0000149c: DUP1 0000149d: ADD 0000149e: OR 0000149f: DUP6 000014a0: SSTORE 000014a1: PUSH2 0x14d2 000014a4: JUMP 000014a5: JUMPDEST 000014a6: DUP3 000014a7: DUP1 000014a8: ADD 000014a9: PUSH1 0x01 000014ab: ADD 000014ac: DUP6 000014ad: SSTORE 000014ae: DUP3 000014af: ISZERO 000014b0: PUSH2 0x14d2 000014b3: JUMPI 000014b4: SWAP2 000014b5: DUP3 000014b6: ADD 000014b7: JUMPDEST 000014b8: DUP3 000014b9: DUP2 000014ba: GT 000014bb: ISZERO 000014bc: PUSH2 0x14d2 000014bf: JUMPI 000014c0: DUP3 000014c1: MLOAD 000014c2: DUP3 000014c3: SSTORE 000014c4: SWAP2 000014c5: PUSH1 0x20 000014c7: ADD 000014c8: SWAP2 000014c9: SWAP1 000014ca: PUSH1 0x01 000014cc: ADD 000014cd: SWAP1 000014ce: PUSH2 0x14b7 000014d1: JUMP 000014d2: JUMPDEST 000014d3: POP 000014d4: PUSH2 0x14de 000014d7: SWAP3 000014d8: SWAP2 000014d9: POP 000014da: PUSH2 0x14e2 000014dd: JUMP 000014de: JUMPDEST 000014df: POP 000014e0: SWAP1 000014e1: JUMP 000014e2: JUMPDEST 000014e3: PUSH2 0x0538 000014e6: SWAP2 000014e7: SWAP1 000014e8: JUMPDEST 000014e9: DUP1 000014ea: DUP3 000014eb: GT 000014ec: ISZERO 000014ed: PUSH2 0x14de 000014f0: JUMPI 000014f1: PUSH1 0x00 000014f3: DUP2 000014f4: SSTORE 000014f5: PUSH1 0x01 000014f7: ADD 000014f8: PUSH2 0x14e8 000014fb: JUMP 000014fc: JUMPDEST 000014fd: PUSH2 0x0538 00001500: SWAP2 00001501: SWAP1 00001502: JUMPDEST 00001503: DUP1 00001504: DUP3 00001505: GT 00001506: ISZERO 00001507: PUSH2 0x14de 0000150a: JUMPI 0000150b: PUSH1 0x00 0000150d: DUP1 0000150e: DUP3 0000150f: SSTORE 00001510: PUSH2 0x151c 00001513: PUSH1 0x01 00001515: DUP4 00001516: ADD 00001517: DUP3 00001518: PUSH2 0x13ec 0000151b: JUMP 0000151c: JUMPDEST 0000151d: POP 0000151e: PUSH1 0x00 00001520: PUSH1 0x02 00001522: DUP3 00001523: ADD 00001524: SSTORE 00001525: PUSH1 0x03 00001527: ADD 00001528: PUSH2 0x1502 0000152b: JUMP 0000152c: STOP 0000152d: DUP12 0000152e: SELFDESTRUCT 0000152f: SGT 00001530: UNKNOWN(0x24) 00001531: UNKNOWN(0xB0) 00001532: STATICCALL 00001533: PUSH30 0x97bc7fbd7f353ac82329a90efae36ccaef984e02f333bcd484a165627a7a 00001552: PUSH19 0x3058201cbc4d051d0268c805de5073f954feea 00001566: MOD 00001567: BLOBHASH 00001568: UNKNOWN(0x2E) 00001569: UNKNOWN(0x2C) 0000156a: UNKNOWN(0xAB) 0000156b: CODESIZE 0000156c: SWAP12 0000156d: DUP9 0000156e: SWAP6 0000156f: ORIGIN 00001570: OR 00001571: PUSH7
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x1e2284ed",
"selector": "0x1e2284ed",
"calldata_variants": [
"0x1e2284ed",
"0x1e2284ed0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4adae0da",
"selector": "0x4adae0da",
"calldata_variants": [
"0x4adae0da",
"0x4adae0da0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x98e0b39a",
"selector": "0x98e0b39a",
"calldata_variants": [
"0x98e0b39a",
"0x98e0b39a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x997805d4",
"selector": "0x997805d4",
"calldata_variants": [
"0x997805d4",
"0x997805d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa26e1186",
"selector": "0xa26e1186",
"calldata_variants": [
"0xa26e1186",
"0xa26e11860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa6fb97d1",
"selector": "0xa6fb97d1",
"calldata_variants": [
"0xa6fb97d1",
"0xa6fb97d10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad2de9b0",
"selector": "0xad2de9b0",
"calldata_variants": [
"0xad2de9b0",
"0xad2de9b00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc2c5164",
"selector": "0xcc2c5164",
"calldata_variants": [
"0xcc2c5164",
"0xcc2c51640000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
}
|
| high | other | cast | SELFDESTRUCT present | 85 | no | — |
viewevidence_json{
"notes": "selfdestruct can remove contract code and send funds; review reachability",
"selfdestruct_count": 1
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xadf92b7cae4a946e4e654e57ce890afe08dce46b68dd16a27c9e2e5ba4412f70
call_targets:
0x96541c4926a32ea3a97fd8d335aff1f81e50ffe9
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xadf92b7cae4a946e4e654e57ce890afe08dce46b68dd16a27c9e2e5ba4412f70",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x96541c4926a32ea3a97fd8d335aff1f81e50ffe9"
],
"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": "0x1e2284ed",
"selector": "0x1e2284ed",
"calldata_variants": [
"0x1e2284ed",
"0x1e2284ed0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4adae0da",
"selector": "0x4adae0da",
"calldata_variants": [
"0x4adae0da",
"0x4adae0da0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x98e0b39a",
"selector": "0x98e0b39a",
"calldata_variants": [
"0x98e0b39a",
"0x98e0b39a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x997805d4",
"selector": "0x997805d4",
"calldata_variants": [
"0x997805d4",
"0x997805d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa26e1186",
"selector": "0xa26e1186",
"calldata_variants": [
"0xa26e1186",
"0xa26e11860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa6fb97d1",
"selector": "0xa6fb97d1",
"calldata_variants": [
"0xa6fb97d1",
"0xa6fb97d10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad2de9b0",
"selector": "0xad2de9b0",
"calldata_variants": [
"0xad2de9b0",
"0xad2de9b00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc2c5164",
"selector": "0xcc2c5164",
"calldata_variants": [
"0xcc2c5164",
"0xcc2c51640000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1011,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1274,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3053,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 6,
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | SELFDESTRUCT reachable | 45 | no | no |
viewtrace_id: 0x562c1b9dd7f428da630378218d394337cd53a5c1f5775cf344fc631de11129c5
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 24,
"trace_id": "0x562c1b9dd7f428da630378218d394337cd53a5c1f5775cf344fc631de11129c5",
"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": "0x1e2284ed",
"selector": "0x1e2284ed",
"calldata_variants": [
"0x1e2284ed",
"0x1e2284ed0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4adae0da",
"selector": "0x4adae0da",
"calldata_variants": [
"0x4adae0da",
"0x4adae0da0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x98e0b39a",
"selector": "0x98e0b39a",
"calldata_variants": [
"0x98e0b39a",
"0x98e0b39a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x997805d4",
"selector": "0x997805d4",
"calldata_variants": [
"0x997805d4",
"0x997805d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa26e1186",
"selector": "0xa26e1186",
"calldata_variants": [
"0xa26e1186",
"0xa26e11860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa6fb97d1",
"selector": "0xa6fb97d1",
"calldata_variants": [
"0xa6fb97d1",
"0xa6fb97d10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad2de9b0",
"selector": "0xad2de9b0",
"calldata_variants": [
"0xad2de9b0",
"0xad2de9b00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc2c5164",
"selector": "0xcc2c5164",
"calldata_variants": [
"0xcc2c5164",
"0xcc2c51640000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
],
"selfdestruct_count": 1
}
|
| medium | access_control | codex | Privileged owner can sweep custodial ETH and ERC20 balances | 75 | no | — |
viewevidence_json{
"evidence": "`pc:0x349` begins with a slot-0 owner check (`SLOAD` -> masked address -> `CALLER EQ`). That path performs `balanceOf(address(this))` on an arbitrary token at `pc:0x3f3` and then an ERC20 `transfer` call (`0xa9059cbb`) at `pc:0x4fa`. A second owner-gated path at `pc:0xb3e` performs a raw ETH `CALL` at `pc:0xbed`. Separately, the contract records depositor balances via storage updates on payable/token-deposit flows (for example `pc:0xa3e-0xa7a` and `pc:0xe7d-0xe98`), so these sweeps can bypass internal accounting.",
"locations": [
"selector:0x1e2284ed",
"pc:0x349",
"pc:0x3f3",
"pc:0x4fa",
"selector:0xa6fb97d1",
"pc:0xb3e",
"pc:0xbed",
"selector:0xf851a440"
],
"recommendation": "Remove arbitrary owner sweep capability for user-backed assets, or restrict it to tightly-scoped rescue flows behind a multisig/timelock and explicit asset allowlists. If admin rescue must exist, reconcile or block withdrawal of assets that back user balances.",
"exploit_scenario": "If this contract is used as a custody/escrow/exchange balance holder, the slot-0 owner can call the admin withdrawal paths to send ERC20 or ETH from the contract to an arbitrary recipient. Because user balances are also tracked in storage elsewhere, those sweeps can leave users with unbacked claims or an insolvent pool. The apparent per-call cap does not prevent draining over multiple transactions."
}
|
| medium | other | codex | Token deposits credit the requested amount, not the amount actually received | 75 | no | — |
viewevidence_json{
"evidence": "In the `selector:0xcc2c5164` path, the contract builds calldata for standard ERC20 `transferFrom(address,address,uint256)` (`0x23b872dd`) at `pc:0xdbf-0xe16` and executes the external call at `pc:0xe2b`. After only checking call success / returned bool (`pc:0xe2c-0xe5e`), it immediately increments internal storage balances at `pc:0xe7d-0xe98` and related counters at `pc:0xeae-0xebb`. No pre/post `balanceOf` delta is observed on this path before crediting.",
"locations": [
"selector:0xcc2c5164",
"pc:0xdbf",
"pc:0xe2b",
"pc:0xe7d",
"pc:0xe98",
"pc:0xeae"
],
"recommendation": "Measure actual tokens received by comparing pre/post balances, or only support a vetted allowlist of vanilla ERC20s whose transfers are known to be 1:1. Do not credit user balances solely from the requested `amount` parameter.",
"exploit_scenario": "A user can deposit a fee-on-transfer, rebasing, or otherwise non-standard ERC20 that returns success from `transferFrom` while delivering fewer tokens than requested. The contract then credits the user's internal balance with the full requested amount, allowing later withdrawal/trading against more balance than the contract actually holds and potentially socializing the deficit to other users."
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xadf92b7cae4a946e4e654e57ce890afe08dce46b68dd16a27c9e2e5ba4412f70
call_targets:
0x96541c4926a32ea3a97fd8d335aff1f81e50ffe9
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xadf92b7cae4a946e4e654e57ce890afe08dce46b68dd16a27c9e2e5ba4412f70",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x96541c4926a32ea3a97fd8d335aff1f81e50ffe9"
],
"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": "0x1e2284ed",
"selector": "0x1e2284ed",
"calldata_variants": [
"0x1e2284ed",
"0x1e2284ed0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4adae0da",
"selector": "0x4adae0da",
"calldata_variants": [
"0x4adae0da",
"0x4adae0da0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x98e0b39a",
"selector": "0x98e0b39a",
"calldata_variants": [
"0x98e0b39a",
"0x98e0b39a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x997805d4",
"selector": "0x997805d4",
"calldata_variants": [
"0x997805d4",
"0x997805d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa26e1186",
"selector": "0xa26e1186",
"calldata_variants": [
"0xa26e1186",
"0xa26e11860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa6fb97d1",
"selector": "0xa6fb97d1",
"calldata_variants": [
"0xa6fb97d1",
"0xa6fb97d10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad2de9b0",
"selector": "0xad2de9b0",
"calldata_variants": [
"0xad2de9b0",
"0xad2de9b00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc2c5164",
"selector": "0xcc2c5164",
"calldata_variants": [
"0xcc2c5164",
"0xcc2c51640000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1011,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1274,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3053,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 6,
"guards_detected": [
{
"pc": 5487,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 6
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 7
}
|