1a24ef76-b3fa-419d-9583-62d57d946e47
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 |
|---|---|---|---|---|
| 30327 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74146 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 74147 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74148 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74149 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74150 | detector.run | complete | 1 / 3 | 1 week ago |
| 74151 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1400082] OpenAI Codex v0.77.0 (research preview)
[codex:1400082] --------
[codex:1400082] workdir: /tmp/codex-multi-7e2sjpps
[codex:1400082] model: gpt-5.2-codex
[codex:1400082] provider: openai
[codex:1400082] approval: never
[codex:1400082] sandbox: read-only
[codex:1400082] reasoning effort: xhigh
[codex:1400082] reasoning summaries: auto
[codex:1400082] session id: 019b65bf-44aa-7020-88c0-622876b11dd6
[codex:1400082] --------
[codex:1400082] user
[codex:1400082] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:1400082] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:1400082]
[codex:1400082] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:1400082]
[codex:1400082] Output MUST be valid JSON matching the provided schema.
[codex:1400082] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:1400082] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:1400082]
[codex:1400082] Output constraints (IMPORTANT):
[codex:1400082] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1400082] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1400082] mcp startup: no servers
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Deciding how to read BYTECODE_BUNDLE**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-7e2sjpps succeeded in 5ms:
[codex:1400082] Runtime bytecode bundle for best-effort auditing.
[codex:1400082] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1400082]
[codex:1400082] FILE: runtime_bytecode.hex
[codex:1400082] 0x73c54b77b28ee4d18cd3d93991f08b79bc85c71097331415610769575f3560e01c4214156119aa57600480355f1a565b610100565b61018f565b61022c565b6102ae565b611378565b61143f565b611506565b6115c0565b6117e6565b611802565b611854565b61187f565b61033e565b6103d0565b6118e4565b611945565b61167a565b611709565b610a74565b610db6565b610822565b611170565b611292565b6104a5565b61057b565b61069a565b610ee1565b611024565b806001013560f01c5f5f825f85600301358060081b60e01c905f1a1b866008013560601c8388601c015f375af1156119ae57601c010180361181355f1a570000000000005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d81601a013560601c60015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c805f5d81601a013560601c60025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c60015d82602e013560601c60025d826045013560e81c836042013560e81c7f3c8a7d8d000000000000000000000000000000000000000000000000000000005f523060045260245260445260645260a06084525f60a4525f60c45f5f5f945af1156119ae5760480180361181355f1a57005b806001013560601c81601d013560e81c82601a013560e81c8284601501358060081b60e01c905f1a1b83837fa34123a7000000000000000000000000000000000000000000000000000000005f526004526024526044525f60645f5f5f945af1156119ae577f4f1eb3d8000000000000000000000000000000000000000000000000000000005f52306004526024526044526fffffffffffffffffffffffffffffffff6064526fffffffffffffffffffffffffffffffff6084525f60a45f5f5f945af1156119ae5760200180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a6401000276ad73fffd8963efd1fc6a506488495d951d5263988d258261052c57905061052e565b505b91907fc31b8d7a000000000000000000000000000000000000000000000000000000005f52306004526024526044526064525f60845f5f5f945af1156119ae57602f0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a61063c5782602f01358060081b60e01c905f1a1b7fe67ce706000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b82602f01358060081b60e01c905f1a1b907f8dae7333000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b806001013560601c81601a013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577fbd6015b4000000000000000000000000000000000000000000000000000000007fdd93f59a0000000000000000000000000000000000000000000000000000000083602e01355f1a610746579050610748565b505b5f52306004525f60245f5f5f945af1156119ae57602f0180361181355f1a57005b7360744434d6339a6b27d73d9eda62b6f66a0a04fa331461092a575f5c803314156119ba57600435805f12156107d75760015c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575f5b50602435805f12156108205760025c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575b005b736b175474e89094c44da98b954eedeac495271d0f6a52b7d2dcc80cd2e40000007360744434d6339a6b27d73d9eda62b6f66a0a04fa7f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae57806001013560f01c80827f5cffe9de000000000000000000000000000000000000000000000000000000005f5230600452736b175474e89094c44da98b954eedeac495271d0f6024526a52b7d2dcc80cd2e4000000604452608060645281908160845260030160a43760a4015f5f915f5f7360744434d6339a6b27d73d9eda62b6f66a0a04fa5af1156119ae576003010180361181355f1a57005b3060043514156119ba576a52b7d2dcc80cd2e4000000736b175474e89094c44da98b954eedeac495271d0f80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760c4355f1a15610c625760ca358060081b60e01c905f1a1b60cf3560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760fc80355f1a565b60c5358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e3358060081b60e01c905f1a1b60e83560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e33560601c8073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610dad5760de358060081b60e01c905f1a1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82736b175474e89094c44da98b954eedeac495271d0f14610d59579050610d5b565b505b907f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae575f5b5060f780355f1a565b60c5358060081b60e01c905f1a1b60ca3560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b80600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5780600601358060081b60e01c905f1a1b81600b013560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601f0180361181355f1a57005b80600101358060081b60e01c905f1a1b816006013560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601a0180361181355f1a57005b80602101358060081b60e01c905f1a1b81603a013560601c826026013560601c8360010135818473ba12222222228d8ba445958a75a0704d566bf2c87f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f52bbbe29000000000000000000000000000000000000000000000000000000005f5260e0600452306024525f604452306064525f6084525f60a4527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60c45260e4525f6101045261012452610144526101645260c0610184525f6101a4525f5f6101c45f5f73ba12222222228d8ba445958a75a0704d566bf2c85af1156119ae57604e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01803560011a90355f1a7f3df02124000000000000000000000000000000000000000000000000000000007f5b41b9080000000000000000000000000000000000000000000000000000000086603001355f1a61134c57905061134e565b505b5f526004526024526044525f6064525f60845f5f5f945af1156119ae5760310180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b80601501358060081b60e01c905f1a1b816001013560601c82601a013560601c7fb6f9de95000000000000000000000000000000000000000000000000000000005f525f60045260806024523060445242606452600260845273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a45260c45260e45f5f935f935af1156119ae57602e0180361181355f1a57005b80602e01358060081b60e01c905f1a1b816001013560601c82601a013560601c83601501358060081b60e01c905f1a1b8181847f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f791ac947000000000000000000000000000000000000000000000000000000005f526004525f60245260a06044523060645242608452600260a45260c45273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260e4526101045f5f935f935af1156119ae5760330180361181355f1a57005b47325f5f5f935f935af1156119ae5760010180361181355f1a57005b806001013560601c8160150135327fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5760350180361181355f1a57005b80600101358060081b60e01c905f1a1b415f5f5f935f935af1156119ae5760060180361181355f1a57005b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2307f70a08231000000000000000000000000000000000000000000000000000000005f526004525f60245f5f6020945af1156119ae575f518082600101358060081b60e01c905f1a1b116119b357005b7fd0e30db0000000000000000000000000000000000000000000000000000000005f525f5f60045f84600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b7f2e1a7d4d000000000000000000000000000000000000000000000000000000005f5280600101358060081b60e01c905f1a1b6004525f5f60245f5f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b5f5ffd5b60045ffd5b5f5260205ffd5b005b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd95f5260205ff35b5f5260205ff35b5f5260205260405260605260805260a05260c05260e05ff35b595ff3
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Preparing to analyze bytecode for vulnerabilities**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc 'nl -ba BYTECODE_BUNDLE.txt' in /tmp/codex-multi-7e2sjpps succeeded in 6ms:
[codex:1400082] 1 Runtime bytecode bundle for best-effort auditing.
[codex:1400082] 2 Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1400082] 3
[codex:1400082] 4 FILE: runtime_bytecode.hex
[codex:1400082] 5 0x73c54b77b28ee4d18cd3d93991f08b79bc85c71097331415610769575f3560e01c4214156119aa57600480355f1a565b610100565b61018f565b61022c565b6102ae565b611378565b61143f565b611506565b6115c0565b6117e6565b611802565b611854565b61187f565b61033e565b6103d0565b6118e4565b611945565b61167a565b611709565b610a74565b610db6565b610822565b611170565b611292565b6104a5565b61057b565b61069a565b610ee1565b611024565b806001013560f01c5f5f825f85600301358060081b60e01c905f1a1b866008013560601c8388601c015f375af1156119ae57601c010180361181355f1a570000000000005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d81601a013560601c60015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c805f5d81601a013560601c60025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c60015d82602e013560601c60025d826045013560e81c836042013560e81c7f3c8a7d8d000000000000000000000000000000000000000000000000000000005f523060045260245260445260645260a06084525f60a4525f60c45f5f5f945af1156119ae5760480180361181355f1a57005b806001013560601c81601d013560e81c82601a013560e81c8284601501358060081b60e01c905f1a1b83837fa34123a7000000000000000000000000000000000000000000000000000000005f526004526024526044525f60645f5f5f945af1156119ae577f4f1eb3d8000000000000000000000000000000000000000000000000000000005f52306004526024526044526fffffffffffffffffffffffffffffffff6064526fffffffffffffffffffffffffffffffff6084525f60a45f5f5f945af1156119ae5760200180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a6401000276ad73fffd8963efd1fc6a506488495d951d5263988d258261052c57905061052e565b505b91907fc31b8d7a000000000000000000000000000000000000000000000000000000005f52306004526024526044526064525f60845f5f5f945af1156119ae57602f0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a61063c5782602f01358060081b60e01c905f1a1b7fe67ce706000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b82602f01358060081b60e01c905f1a1b907f8dae7333000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b806001013560601c81601a013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577fbd6015b4000000000000000000000000000000000000000000000000000000007fdd93f59a0000000000000000000000000000000000000000000000000000000083602e01355f1a610746579050610748565b505b5f52306004525f60245f5f5f945af1156119ae57602f0180361181355f1a57005b7360744434d6339a6b27d73d9eda62b6f66a0a04fa331461092a575f5c803314156119ba57600435805f12156107d75760015c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575f5b50602435805f12156108205760025c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575b005b736b175474e89094c44da98b954eedeac495271d0f6a52b7d2dcc80cd2e40000007360744434d6339a6b27d73d9eda62b6f66a0a04fa7f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae57806001013560f01c80827f5cffe9de000000000000000000000000000000000000000000000000000000005f5230600452736b175474e89094c44da98b954eedeac495271d0f6024526a52b7d2dcc80cd2e4000000604452608060645281908160845260030160a43760a4015f5f915f5f7360744434d6339a6b27d73d9eda62b6f66a0a04fa5af1156119ae576003010180361181355f1a57005b3060043514156119ba576a52b7d2dcc80cd2e4000000736b175474e89094c44da98b954eedeac495271d0f80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760c4355f1a15610c625760ca358060081b60e01c905f1a1b60cf3560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760fc80355f1a565b60c5358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e3358060081b60e01c905f1a1b60e83560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e33560601c8073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610dad5760de358060081b60e01c905f1a1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82736b175474e89094c44da98b954eedeac495271d0f14610d59579050610d5b565b505b907f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae575f5b5060f780355f1a565b60c5358060081b60e01c905f1a1b60ca3560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b80600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5780600601358060081b60e01c905f1a1b81600b013560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601f0180361181355f1a57005b80600101358060081b60e01c905f1a1b816006013560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601a0180361181355f1a57005b80602101358060081b60e01c905f1a1b81603a013560601c826026013560601c8360010135818473ba12222222228d8ba445958a75a0704d566bf2c87f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f52bbbe29000000000000000000000000000000000000000000000000000000005f5260e0600452306024525f604452306064525f6084525f60a4527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60c45260e4525f6101045261012452610144526101645260c0610184525f6101a4525f5f6101c45f5f73ba12222222228d8ba445958a75a0704d566bf2c85af1156119ae57604e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01803560011a90355f1a7f3df02124000000000000000000000000000000000000000000000000000000007f5b41b9080000000000000000000000000000000000000000000000000000000086603001355f1a61134c57905061134e565b505b5f526004526024526044525f6064525f60845f5f5f945af1156119ae5760310180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b80601501358060081b60e01c905f1a1b816001013560601c82601a013560601c7fb6f9de95000000000000000000000000000000000000000000000000000000005f525f60045260806024523060445242606452600260845273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a45260c45260e45f5f935f935af1156119ae57602e0180361181355f1a57005b80602e01358060081b60e01c905f1a1b816001013560601c82601a013560601c83601501358060081b60e01c905f1a1b8181847f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f791ac947000000000000000000000000000000000000000000000000000000005f526004525f60245260a06044523060645242608452600260a45260c45273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260e4526101045f5f935f935af1156119ae5760330180361181355f1a57005b47325f5f5f935f935af1156119ae5760010180361181355f1a57005b806001013560601c8160150135327fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5760350180361181355f1a57005b80600101358060081b60e01c905f1a1b415f5f5f935f935af1156119ae5760060180361181355f1a57005b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2307f70a08231000000000000000000000000000000000000000000000000000000005f526004525f60245f5f6020945af1156119ae575f518082600101358060081b60e01c905f1a1b116119b357005b7fd0e30db0000000000000000000000000000000000000000000000000000000005f525f5f60045f84600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b7f2e1a7d4d000000000000000000000000000000000000000000000000000000005f5280600101358060081b60e01c905f1a1b6004525f5f60245f5f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b5f5ffd5b60045ffd5b5f5260205ffd5b005b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd95f5260205ff35b5f5260205ff35b5f5260205260405260605260805260a05260c05260e05ff35b595ff3
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Analyzing bytecode for external calls and access control**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] from textwrap import wrap
[codex:1400082]
[codex:1400082] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1]
[codex:1400082] # extract hex string after newline
[codex:1400082] hexstr=hexdata.strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] # opcode map
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] # add DUP/SWAP
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 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',
[codex:1400082] 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',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082]
[codex:1400082] # include TLOAD/TSTORE if present
[codex:1400082] opcodes[0x5c]='TLOAD'
[codex:1400082] opcodes[0x5d]='TSTORE'
[codex:1400082]
[codex:1400082] # disassemble first N bytes for readability
[codex:1400082] N=400
[codex:1400082] pc=0
[codex:1400082] while pc < min(len(code), N):
[codex:1400082] op = code[pc]
[codex:1400082] name = opcodes.get(op, f'OP{op:02x}')
[codex:1400082] if 0x60 <= op <= 0x7f:
[codex:1400082] n = op-0x5f
[codex:1400082] data = code[pc+1:pc+1+n]
[codex:1400082] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1400082] pc += 1+n
[codex:1400082] else:
[codex:1400082] print(f\"{pc:04x}: {name}\")
[codex:1400082] pc += 1
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 75ms:
[codex:1400082] 0000: PUSH20 0xc54b77b28ee4d18cd3d93991f08b79bc85c71097
[codex:1400082] 0015: CALLER
[codex:1400082] 0016: EQ
[codex:1400082] 0017: ISZERO
[codex:1400082] 0018: PUSH2 0x0769
[codex:1400082] 001b: JUMPI
[codex:1400082] 001c: PUSH0
[codex:1400082] 001d: CALLDATALOAD
[codex:1400082] 001e: PUSH1 0xe0
[codex:1400082] 0020: SHR
[codex:1400082] 0021: TIMESTAMP
[codex:1400082] 0022: EQ
[codex:1400082] 0023: ISZERO
[codex:1400082] 0024: PUSH2 0x19aa
[codex:1400082] 0027: JUMPI
[codex:1400082] 0028: PUSH1 0x04
[codex:1400082] 002a: DUP1
[codex:1400082] 002b: CALLDATALOAD
[codex:1400082] 002c: PUSH0
[codex:1400082] 002d: BYTE
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Analyzing custom dispatcher and potential vulnerabilities**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] print('DELEGATECALL count', code.count(b'\\xf4'))
[codex:1400082] print('SELFDESTRUCT count', code.count(b'\\xff'))
[codex:1400082] print('SSTORE count', code.count(b'\\x55'))
[codex:1400082] print('SLOAD count', code.count(b'\\x54'))
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 17ms:
[codex:1400082] DELEGATECALL count 0
[codex:1400082] SELFDESTRUCT count 170
[codex:1400082] SSTORE count 0
[codex:1400082] SLOAD count 7
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Analyzing SELFDESTRUCT opcode presence**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] opnames = {
[codex:1400082] 0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT',0xf0:'CREATE',0xf5:'CREATE2',0xfd:'REVERT',0xfa:'STATICCALL',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN'
[codex:1400082] }
[codex:1400082]
[codex:1400082] i=0
[codex:1400082] ops=[]
[codex:1400082] while i < len(code):
[codex:1400082] op=code[i]
[codex:1400082] if 0x60 <= op <= 0x7f:
[codex:1400082] n=op-0x5f
[codex:1400082] i+=1+n
[codex:1400082] continue
[codex:1400082] ops.append(op)
[codex:1400082] i+=1
[codex:1400082]
[codex:1400082] from collections import Counter
[codex:1400082] c=Counter(ops)
[codex:1400082] for op,val in sorted(c.items()):
[codex:1400082] if op in opnames:
[codex:1400082] print(opnames[op], val)
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 19ms:
[codex:1400082] CALL 59
[codex:1400082] RETURN 4
[codex:1400082] REVERT 3
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Analyzing CALL access control risks**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 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',
[codex:1400082] 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',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082]
[codex:1400082] # disassemble with pc map
[codex:1400082] pc=0
[codex:1400082] out=[]
[codex:1400082] while pc < len(code):
[codex:1400082] op=code[pc]
[codex:1400082] name=opcodes.get(op,f'OP{op:02x}')
[codex:1400082] if 0x60<=op<=0x7f:
[codex:1400082] n=op-0x5f
[codex:1400082] data=code[pc+1:pc+1+n]
[codex:1400082] out.append((pc,f\"{name} 0x{data.hex()}\"))
[codex:1400082] pc+=1+n
[codex:1400082] else:
[codex:1400082] out.append((pc,name))
[codex:1400082] pc+=1
[codex:1400082]
[codex:1400082] # print around 0x0760-0x07a0
[codex:1400082] for pc,name in out:
[codex:1400082] if 0x0740 <= pc <= 0x07c0:
[codex:1400082] print(f\"{pc:04x}: {name}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 22ms:
[codex:1400082] 0740: SWAP1
[codex:1400082] 0741: POP
[codex:1400082] 0742: PUSH2 0x0748
[codex:1400082] 0745: JUMP
[codex:1400082] 0746: JUMPDEST
[codex:1400082] 0747: POP
[codex:1400082] 0748: JUMPDEST
[codex:1400082] 0749: PUSH0
[codex:1400082] 074a: MSTORE
[codex:1400082] 074b: ADDRESS
[codex:1400082] 074c: PUSH1 0x04
[codex:1400082] 074e: MSTORE
[codex:1400082] 074f: PUSH0
[codex:1400082] 0750: PUSH1 0x24
[codex:1400082] 0752: PUSH0
[codex:1400082] 0753: PUSH0
[codex:1400082] 0754: PUSH0
[codex:1400082] 0755: SWAP5
[codex:1400082] 0756: GAS
[codex:1400082] 0757: CALL
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Analyzing advanced transient storage and call patterns**
[codex:1400082]
[codex:1400082] I'm examining the contract’s use of transient storage for reentrancy protection and its dynamic call logic to detect any concrete vulnerabilities. The bytecode shows checks on callers, ephemeral storage, and calls with user-controlled calldata; I’m curious about risks like mis-handling non-standard token returns and unrestricted external calls, so I’m exploring CALL usage patterns and caller checks in detail.
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 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',
[codex:1400082] 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',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082]
[codex:1400082] # disassemble into list with pc
[codex:1400082] pc=0
[codex:1400082] ops=[]
[codex:1400082] while pc < len(code):
[codex:1400082] op=code[pc]
[codex:1400082] if 0x60<=op<=0x7f:
[codex:1400082] n=op-0x5f
[codex:1400082] data=code[pc+1:pc+1+n]
[codex:1400082] ops.append((pc,op,f\"PUSH{n} 0x{data.hex()}\"))
[codex:1400082] pc+=1+n
[codex:1400082] else:
[codex:1400082] ops.append((pc,op,opcodes.get(op,f'OP{op:02x}')))
[codex:1400082] pc+=1
[codex:1400082]
[codex:1400082] # show context around CALL
[codex:1400082] for idx,(pc,op,name) in enumerate(ops):
[codex:1400082] if name=='CALL':
[codex:1400082] start=max(0, idx-6)
[codex:1400082] end=min(len(ops), idx+3)
[codex:1400082] print('\\nCALL at', hex(pc))
[codex:1400082] for j in range(start,end):
[codex:1400082] print(f\" {ops[j][0]:04x}: {ops[j][2]}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 22ms:
[codex:1400082]
[codex:1400082] CALL at 0xe8
[codex:1400082] 00e1: DUP9
[codex:1400082] 00e2: PUSH1 0x1c
[codex:1400082] 00e4: ADD
[codex:1400082] 00e5: PUSH0
[codex:1400082] 00e6: CALLDATACOPY
[codex:1400082] 00e7: GAS
[codex:1400082] 00e8: CALL
[codex:1400082] 00e9: ISZERO
[codex:1400082] 00ea: PUSH2 0x19ae
[codex:1400082]
[codex:1400082] CALL at 0x17d
[codex:1400082] 0176: PUSH1 0xc4
[codex:1400082] 0178: PUSH0
[codex:1400082] 0179: PUSH0
[codex:1400082] 017a: PUSH0
[codex:1400082] 017b: SWAP5
[codex:1400082] 017c: GAS
[codex:1400082] 017d: CALL
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Examining call success and storage patterns**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] # parse to opcodes ignoring push data
[codex:1400082] ops=[]
[codex:1400082] pc=0
[codex:1400082] while pc < len(code):
[codex:1400082] op=code[pc]
[codex:1400082] if 0x60 <= op <= 0x7f:
[codex:1400082] n=op-0x5f
[codex:1400082] pc+=1+n
[codex:1400082] else:
[codex:1400082] ops.append((pc,op))
[codex:1400082] pc+=1
[codex:1400082]
[codex:1400082] # find ORIGIN
[codex:1400082] for pc,op in ops:
[codex:1400082] if op==0x32:
[codex:1400082] print('ORIGIN at', hex(pc))
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 18ms:
[codex:1400082] ORIGIN at 0x17e8
[codex:1400082] ORIGIN at 0x1810
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Identifying potential tx.origin usage**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 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',
[codex:1400082] 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',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082]
[codex:1400082] # disassemble with pc map
[codex:1400082] pc=0
[codex:1400082] out=[]
[codex:1400082] while pc < len(code):
[codex:1400082] op=code[pc]
[codex:1400082] name=opcodes.get(op,f'OP{op:02x}')
[codex:1400082] if 0x60<=op<=0x7f:
[codex:1400082] n=op-0x5f
[codex:1400082] data=code[pc+1:pc+1+n]
[codex:1400082] out.append((pc,f\"{name} 0x{data.hex()}\"))
[codex:1400082] pc+=1+n
[codex:1400082] else:
[codex:1400082] out.append((pc,name))
[codex:1400082] pc+=1
[codex:1400082]
[codex:1400082] # print around 0x17e0-0x1820
[codex:1400082] for pc,name in out:
[codex:1400082] if 0x17d0 <= pc <= 0x1825:
[codex:1400082] print(f\"{pc:04x}: {name}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 21ms:
[codex:1400082] 17d0: SWAP4
[codex:1400082] 17d1: PUSH0
[codex:1400082] 17d2: SWAP4
[codex:1400082] 17d3: GAS
[codex:1400082] 17d4: CALL
[codex:1400082] 17d5: ISZERO
[codex:1400082] 17d6: PUSH2 0x19ae
[codex:1400082] 17d9: JUMPI
[codex:1400082] 17da: PUSH1 0x33
[codex:1400082] 17dc: ADD
[codex:1400082] 17dd: DUP1
[codex:1400082] 17de: CALLDATASIZE
[codex:1400082] 17df: GT
[codex:1400082] 17e0: DUP2
[codex:1400082] 17e1: CALLDATALOAD
[codex:1400082] 17e2: PUSH0
[codex:1400082] 17e3: BYTE
[codex:1400082] 17e4: JUMPI
[codex:1400082] 17e5: STOP
[codex:1400082] 17e6: JUMPDEST
[codex:1400082]
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Analyzing tx.origin usage risks**
[codex:1400082] thinking
[codex:1400082] **Confirming presence of tx.origin patterns**
[codex:1400082]
[codex:1400082] I’m verifying bytecode snippets that show the contract using tx.origin in ETH and token transfers. I’m gathering hexadecimal evidence to support the pattern found around opcode 0x17e6 and 0x1810 to back up the analysis.
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] for sub in ['47325f5f5f935f935af1','327fa9059cbb']:
[codex:1400082] idx=hexstr.find(sub)
[codex:1400082] print(sub, idx)
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 19ms:
[codex:1400082] 47325f5f5f935f935af1 12238
[codex:1400082] 327fa9059cbb 12320
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Summarizing tx.origin issue as finding**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082]
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 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',
[codex:1400082] 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',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082]
[codex:1400082] # disassemble to list
[codex:1400082] pc=0
[codex:1400082] out=[]
[codex:1400082] while pc < len(code):
[codex:1400082] op=code[pc]
[codex:1400082] name=opcodes.get(op,f'OP{op:02x}')
[codex:1400082] if 0x60<=op<=0x7f:
[codex:1400082] n=op-0x5f
[codex:1400082] data=code[pc+1:pc+1+n]
[codex:1400082] out.append((pc,f\"{name} 0x{data.hex()}\"))
[codex:1400082] pc+=1+n
[codex:1400082] else:
[codex:1400082] out.append((pc,name))
[codex:1400082] pc+=1
[codex:1400082]
[codex:1400082] # print around 0x0920-0x09c0
[codex:1400082] for pc,name in out:
[codex:1400082] if 0x0900 <= pc <= 0x09c0:
[codex:1400082] print(f\"{pc:04x}: {name}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 21ms:
[codex:1400082] 0900: PUSH0
[codex:1400082] 0901: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa
[codex:1400082] 0916: GAS
[codex:1400082] 0917: CALL
[codex:1400082] 0918: ISZERO
[codex:1400082] 0919: PUSH2 0x19ae
[codex:1400082] 091c: JUMPI
[codex:1400082] 091d: PUSH1 0x03
[codex:1400082] 091f: ADD
[codex:1400082] 0920: ADD
[codex:1400082] 0921: DUP1
[codex:1400082] 0922: CALLDATASIZE
[codex:1400082] 0923: GT
[codex:1400082] 0924: DUP2
[codex:1400082] 0925: CALLDATALOAD
[codex:1400082] 0926: PUSH0
[codex:1400082] 0927: BYTE
[codex:1400082] 0928: JUMPI
[codex:1400082] 0929: STOP
[codex:1400082] 092a: JUMPDEST
[codex:1400082]
[codex:1400082] thinking
[codex:1400082] **Summarizing tx.origin misuse issue**
[codex:1400082] codex
[codex:1400082] {"no_findings":false,"summary":"Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.","findings":[{"severity":"low","category":"other","title":"Payouts/sweeps use tx.origin as recipient","exploit_scenario":"If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer’s EOA when the router holds leftover ETH/tokens.","recommendation":"Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.","evidence":"Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).","locations":["BYTECODE_BUNDLE.txt:5"]}]}
[codex:1400082] tokens used
[codex:1400082] 65,538
[codex:1400082] {"no_findings":false,"summary":"Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.","findings":[{"severity":"low","category":"other","title":"Payouts/sweeps use tx.origin as recipient","exploit_scenario":"If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer’s EOA when the router holds leftover ETH/tokens.","recommendation":"Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.","evidence":"Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).","locations":["BYTECODE_BUNDLE.txt:5"]}]}
{
"codex": {
"ran_at": "2025-12-28T16:23:06.619378+00:00",
"returncode": 0
},
"summary": "Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.",
"raw_final": {
"summary": "Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.",
"findings": [
{
"title": "Payouts/sweeps use tx.origin as recipient",
"category": "other",
"evidence": "Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).",
"severity": "low",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.",
"exploit_scenario": "If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer\u2019s EOA when the router holds leftover ETH/tokens."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH20 0xc54b77b28ee4d18cd3d93991f08b79bc85c71097 00000015: CALLER 00000016: EQ 00000017: ISZERO 00000018: PUSH2 0x0769 0000001b: JUMPI 0000001c: PUSH0 0000001d: CALLDATALOAD 0000001e: PUSH1 0xe0 00000020: SHR 00000021: TIMESTAMP 00000022: EQ 00000023: ISZERO 00000024: PUSH2 0x19aa 00000027: JUMPI 00000028: PUSH1 0x04 0000002a: DUP1 0000002b: CALLDATALOAD 0000002c: PUSH0 0000002d: BYTE 0000002e: JUMP 0000002f: JUMPDEST 00000030: PUSH2 0x0100 00000033: JUMP 00000034: JUMPDEST 00000035: PUSH2 0x018f 00000038: JUMP 00000039: JUMPDEST 0000003a: PUSH2 0x022c 0000003d: JUMP 0000003e: JUMPDEST 0000003f: PUSH2 0x02ae 00000042: JUMP 00000043: JUMPDEST 00000044: PUSH2 0x1378 00000047: JUMP 00000048: JUMPDEST 00000049: PUSH2 0x143f 0000004c: JUMP 0000004d: JUMPDEST 0000004e: PUSH2 0x1506 00000051: JUMP 00000052: JUMPDEST 00000053: PUSH2 0x15c0 00000056: JUMP 00000057: JUMPDEST 00000058: PUSH2 0x17e6 0000005b: JUMP 0000005c: JUMPDEST 0000005d: PUSH2 0x1802 00000060: JUMP 00000061: JUMPDEST 00000062: PUSH2 0x1854 00000065: JUMP 00000066: JUMPDEST 00000067: PUSH2 0x187f 0000006a: JUMP 0000006b: JUMPDEST 0000006c: PUSH2 0x033e 0000006f: JUMP 00000070: JUMPDEST 00000071: PUSH2 0x03d0 00000074: JUMP 00000075: JUMPDEST 00000076: PUSH2 0x18e4 00000079: JUMP 0000007a: JUMPDEST 0000007b: PUSH2 0x1945 0000007e: JUMP 0000007f: JUMPDEST 00000080: PUSH2 0x167a 00000083: JUMP 00000084: JUMPDEST 00000085: PUSH2 0x1709 00000088: JUMP 00000089: JUMPDEST 0000008a: PUSH2 0x0a74 0000008d: JUMP 0000008e: JUMPDEST 0000008f: PUSH2 0x0db6 00000092: JUMP 00000093: JUMPDEST 00000094: PUSH2 0x0822 00000097: JUMP 00000098: JUMPDEST 00000099: PUSH2 0x1170 0000009c: JUMP 0000009d: JUMPDEST 0000009e: PUSH2 0x1292 000000a1: JUMP 000000a2: JUMPDEST 000000a3: PUSH2 0x04a5 000000a6: JUMP 000000a7: JUMPDEST 000000a8: PUSH2 0x057b 000000ab: JUMP 000000ac: JUMPDEST 000000ad: PUSH2 0x069a 000000b0: JUMP 000000b1: JUMPDEST 000000b2: PUSH2 0x0ee1 000000b5: JUMP 000000b6: JUMPDEST 000000b7: PUSH2 0x1024 000000ba: JUMP 000000bb: JUMPDEST 000000bc: DUP1 000000bd: PUSH1 0x01 000000bf: ADD 000000c0: CALLDATALOAD 000000c1: PUSH1 0xf0 000000c3: SHR 000000c4: PUSH0 000000c5: PUSH0 000000c6: DUP3 000000c7: PUSH0 000000c8: DUP6 000000c9: PUSH1 0x03 000000cb: ADD 000000cc: CALLDATALOAD 000000cd: DUP1 000000ce: PUSH1 0x08 000000d0: SHL 000000d1: PUSH1 0xe0 000000d3: SHR 000000d4: SWAP1 000000d5: PUSH0 000000d6: BYTE 000000d7: SHL 000000d8: DUP7 000000d9: PUSH1 0x08 000000db: ADD 000000dc: CALLDATALOAD 000000dd: PUSH1 0x60 000000df: SHR 000000e0: DUP4 000000e1: DUP9 000000e2: PUSH1 0x1c 000000e4: ADD 000000e5: PUSH0 000000e6: CALLDATACOPY 000000e7: GAS 000000e8: CALL 000000e9: ISZERO 000000ea: PUSH2 0x19ae 000000ed: JUMPI 000000ee: PUSH1 0x1c 000000f0: ADD 000000f1: ADD 000000f2: DUP1 000000f3: CALLDATASIZE 000000f4: GT 000000f5: DUP2 000000f6: CALLDATALOAD 000000f7: PUSH0 000000f8: BYTE 000000f9: JUMPI 000000fa: STOP 000000fb: STOP 000000fc: STOP 000000fd: STOP 000000fe: STOP 000000ff: STOP 00000100: JUMPDEST 00000101: DUP1 00000102: PUSH1 0x01 00000104: ADD 00000105: CALLDATALOAD 00000106: PUSH1 0x60 00000108: SHR 00000109: DUP1 0000010a: PUSH0 0000010b: TSTORE 0000010c: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000121: PUSH1 0x01 00000123: TSTORE 00000124: DUP2 00000125: PUSH1 0x15 00000127: ADD 00000128: CALLDATALOAD 00000129: DUP1 0000012a: PUSH1 0x08 0000012c: SHL 0000012d: PUSH1 0xe0 0000012f: SHR 00000130: SWAP1 00000131: PUSH0 00000132: BYTE 00000133: SHL 00000134: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000 00000155: PUSH0 00000156: MSTORE 00000157: ADDRESS 00000158: PUSH1 0x04 0000015a: MSTORE 0000015b: PUSH1 0x01 0000015d: PUSH1 0x24 0000015f: MSTORE 00000160: PUSH1 0x44 00000162: MSTORE 00000163: PUSH5 0x01000276ad 00000169: PUSH1 0x64 0000016b: MSTORE 0000016c: PUSH1 0xa0 0000016e: PUSH1 0x84 00000170: MSTORE 00000171: PUSH0 00000172: PUSH1 0xa4 00000174: MSTORE 00000175: PUSH0 00000176: PUSH1 0xc4 00000178: PUSH0 00000179: PUSH0 0000017a: PUSH0 0000017b: SWAP5 0000017c: GAS 0000017d: CALL 0000017e: ISZERO 0000017f: PUSH2 0x19ae 00000182: JUMPI 00000183: PUSH1 0x1a 00000185: ADD 00000186: DUP1 00000187: CALLDATASIZE 00000188: GT 00000189: DUP2 0000018a: CALLDATALOAD 0000018b: PUSH0 0000018c: BYTE 0000018d: JUMPI 0000018e: STOP 0000018f: JUMPDEST 00000190: DUP1 00000191: PUSH1 0x01 00000193: ADD 00000194: CALLDATALOAD 00000195: PUSH1 0x60 00000197: SHR 00000198: DUP1 00000199: PUSH0 0000019a: TSTORE 0000019b: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000001b0: PUSH1 0x02 000001b2: TSTORE 000001b3: DUP2 000001b4: PUSH1 0x15 000001b6: ADD 000001b7: CALLDATALOAD 000001b8: DUP1 000001b9: PUSH1 0x08 000001bb: SHL 000001bc: PUSH1 0xe0 000001be: SHR 000001bf: SWAP1 000001c0: PUSH0 000001c1: BYTE 000001c2: SHL 000001c3: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000 000001e4: PUSH0 000001e5: MSTORE 000001e6: ADDRESS 000001e7: PUSH1 0x04 000001e9: MSTORE 000001ea: PUSH0 000001eb: PUSH1 0x24 000001ed: MSTORE 000001ee: PUSH1 0x44 000001f0: MSTORE 000001f1: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25 00000206: PUSH1 0x64 00000208: MSTORE 00000209: PUSH1 0xa0 0000020b: PUSH1 0x84 0000020d: MSTORE 0000020e: PUSH0 0000020f: PUSH1 0xa4 00000211: MSTORE 00000212: PUSH0 00000213: PUSH1 0xc4 00000215: PUSH0 00000216: PUSH0 00000217: PUSH0 00000218: SWAP5 00000219: GAS 0000021a: CALL 0000021b: ISZERO 0000021c: PUSH2 0x19ae 0000021f: JUMPI 00000220: PUSH1 0x1a 00000222: ADD 00000223: DUP1 00000224: CALLDATASIZE 00000225: GT 00000226: DUP2 00000227: CALLDATALOAD 00000228: PUSH0 00000229: BYTE 0000022a: JUMPI 0000022b: STOP 0000022c: JUMPDEST 0000022d: DUP1 0000022e: PUSH1 0x01 00000230: ADD 00000231: CALLDATALOAD 00000232: PUSH1 0x60 00000234: SHR 00000235: DUP1 00000236: PUSH0 00000237: TSTORE 00000238: DUP2 00000239: PUSH1 0x1a 0000023b: ADD 0000023c: CALLDATALOAD 0000023d: PUSH1 0x60 0000023f: SHR 00000240: PUSH1 0x01 00000242: TSTORE 00000243: DUP2 00000244: PUSH1 0x15 00000246: ADD 00000247: CALLDATALOAD 00000248: DUP1 00000249: PUSH1 0x08 0000024b: SHL 0000024c: PUSH1 0xe0 0000024e: SHR 0000024f: SWAP1 00000250: PUSH0 00000251: BYTE 00000252: SHL 00000253: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000 00000274: PUSH0 00000275: MSTORE 00000276: ADDRESS 00000277: PUSH1 0x04 00000279: MSTORE 0000027a: PUSH1 0x01 0000027c: PUSH1 0x24 0000027e: MSTORE 0000027f: PUSH1 0x44 00000281: MSTORE 00000282: PUSH5 0x01000276ad 00000288: PUSH1 0x64 0000028a: MSTORE 0000028b: PUSH1 0xa0 0000028d: PUSH1 0x84 0000028f: MSTORE 00000290: PUSH0 00000291: PUSH1 0xa4 00000293: MSTORE 00000294: PUSH0 00000295: PUSH1 0xc4 00000297: PUSH0 00000298: PUSH0 00000299: PUSH0 0000029a: SWAP5 0000029b: GAS 0000029c: CALL 0000029d: ISZERO 0000029e: PUSH2 0x19ae 000002a1: JUMPI 000002a2: PUSH1 0x2e 000002a4: ADD 000002a5: DUP1 000002a6: CALLDATASIZE 000002a7: GT 000002a8: DUP2 000002a9: CALLDATALOAD 000002aa: PUSH0 000002ab: BYTE 000002ac: JUMPI 000002ad: STOP 000002ae: JUMPDEST 000002af: DUP1 000002b0: PUSH1 0x01 000002b2: ADD 000002b3: CALLDATALOAD 000002b4: PUSH1 0x60 000002b6: SHR 000002b7: DUP1 000002b8: PUSH0 000002b9: TSTORE 000002ba: DUP2 000002bb: PUSH1 0x1a 000002bd: ADD 000002be: CALLDATALOAD 000002bf: PUSH1 0x60 000002c1: SHR 000002c2: PUSH1 0x02 000002c4: TSTORE 000002c5: DUP2 000002c6: PUSH1 0x15 000002c8: ADD 000002c9: CALLDATALOAD 000002ca: DUP1 000002cb: PUSH1 0x08 000002cd: SHL 000002ce: PUSH1 0xe0 000002d0: SHR 000002d1: SWAP1 000002d2: PUSH0 000002d3: BYTE 000002d4: SHL 000002d5: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000 000002f6: PUSH0 000002f7: MSTORE 000002f8: ADDRESS 000002f9: PUSH1 0x04 000002fb: MSTORE 000002fc: PUSH0 000002fd: PUSH1 0x24 000002ff: MSTORE 00000300: PUSH1 0x44 00000302: MSTORE 00000303: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25 00000318: PUSH1 0x64 0000031a: MSTORE 0000031b: PUSH1 0xa0 0000031d: PUSH1 0x84 0000031f: MSTORE 00000320: PUSH0 00000321: PUSH1 0xa4 00000323: MSTORE 00000324: PUSH0 00000325: PUSH1 0xc4 00000327: PUSH0 00000328: PUSH0 00000329: PUSH0 0000032a: SWAP5 0000032b: GAS 0000032c: CALL 0000032d: ISZERO 0000032e: PUSH2 0x19ae 00000331: JUMPI 00000332: PUSH1 0x2e 00000334: ADD 00000335: DUP1 00000336: CALLDATASIZE 00000337: GT 00000338: DUP2 00000339: CALLDATALOAD 0000033a: PUSH0 0000033b: BYTE 0000033c: JUMPI 0000033d: STOP 0000033e: JUMPDEST 0000033f: DUP1 00000340: PUSH1 0x01 00000342: ADD 00000343: CALLDATALOAD 00000344: PUSH1 0x60 00000346: SHR 00000347: DUP2 00000348: PUSH1 0x15 0000034a: ADD 0000034b: CALLDATALOAD 0000034c: DUP1 0000034d: PUSH1 0x08 0000034f: SHL 00000350: PUSH1 0xe0 00000352: SHR 00000353: SWAP1 00000354: PUSH0 00000355: BYTE 00000356: SHL 00000357: DUP3 00000358: PUSH1 0x1a 0000035a: ADD 0000035b: CALLDATALOAD 0000035c: PUSH1 0x60 0000035e: SHR 0000035f: PUSH1 0x01 00000361: TSTORE 00000362: DUP3 00000363: PUSH1 0x2e 00000365: ADD 00000366: CALLDATALOAD 00000367: PUSH1 0x60 00000369: SHR 0000036a: PUSH1 0x02 0000036c: TSTORE 0000036d: DUP3 0000036e: PUSH1 0x45 00000370: ADD 00000371: CALLDATALOAD 00000372: PUSH1 0xe8 00000374: SHR 00000375: DUP4 00000376: PUSH1 0x42 00000378: ADD 00000379: CALLDATALOAD 0000037a: PUSH1 0xe8 0000037c: SHR 0000037d: PUSH32 0x3c8a7d8d00000000000000000000000000000000000000000000000000000000 0000039e: PUSH0 0000039f: MSTORE 000003a0: ADDRESS 000003a1: PUSH1 0x04 000003a3: MSTORE 000003a4: PUSH1 0x24 000003a6: MSTORE 000003a7: PUSH1 0x44 000003a9: MSTORE 000003aa: PUSH1 0x64 000003ac: MSTORE 000003ad: PUSH1 0xa0 000003af: PUSH1 0x84 000003b1: MSTORE 000003b2: PUSH0 000003b3: PUSH1 0xa4 000003b5: MSTORE 000003b6: PUSH0 000003b7: PUSH1 0xc4 000003b9: PUSH0 000003ba: PUSH0 000003bb: PUSH0 000003bc: SWAP5 000003bd: GAS 000003be: CALL 000003bf: ISZERO 000003c0: PUSH2 0x19ae 000003c3: JUMPI 000003c4: PUSH1 0x48 000003c6: ADD 000003c7: DUP1 000003c8: CALLDATASIZE 000003c9: GT 000003ca: DUP2 000003cb: CALLDATALOAD 000003cc: PUSH0 000003cd: BYTE 000003ce: JUMPI 000003cf: STOP 000003d0: JUMPDEST 000003d1: DUP1 000003d2: PUSH1 0x01 000003d4: ADD 000003d5: CALLDATALOAD 000003d6: PUSH1 0x60 000003d8: SHR 000003d9: DUP2 000003da: PUSH1 0x1d 000003dc: ADD 000003dd: CALLDATALOAD 000003de: PUSH1 0xe8 000003e0: SHR 000003e1: DUP3 000003e2: PUSH1 0x1a 000003e4: ADD 000003e5: CALLDATALOAD 000003e6: PUSH1 0xe8 000003e8: SHR 000003e9: DUP3 000003ea: DUP5 000003eb: PUSH1 0x15 000003ed: ADD 000003ee: CALLDATALOAD 000003ef: DUP1 000003f0: PUSH1 0x08 000003f2: SHL 000003f3: PUSH1 0xe0 000003f5: SHR 000003f6: SWAP1 000003f7: PUSH0 000003f8: BYTE 000003f9: SHL 000003fa: DUP4 000003fb: DUP4 000003fc: PUSH32 0xa34123a700000000000000000000000000000000000000000000000000000000 0000041d: PUSH0 0000041e: MSTORE 0000041f: PUSH1 0x04 00000421: MSTORE 00000422: PUSH1 0x24 00000424: MSTORE 00000425: PUSH1 0x44 00000427: MSTORE 00000428: PUSH0 00000429: PUSH1 0x64 0000042b: PUSH0 0000042c: PUSH0 0000042d: PUSH0 0000042e: SWAP5 0000042f: GAS 00000430: CALL 00000431: ISZERO 00000432: PUSH2 0x19ae 00000435: JUMPI 00000436: PUSH32 0x4f1eb3d800000000000000000000000000000000000000000000000000000000 00000457: PUSH0 00000458: MSTORE 00000459: ADDRESS 0000045a: PUSH1 0x04 0000045c: MSTORE 0000045d: PUSH1 0x24 0000045f: MSTORE 00000460: PUSH1 0x44 00000462: MSTORE 00000463: PUSH16 0xffffffffffffffffffffffffffffffff 00000474: PUSH1 0x64 00000476: MSTORE 00000477: PUSH16 0xffffffffffffffffffffffffffffffff 00000488: PUSH1 0x84 0000048a: MSTORE 0000048b: PUSH0 0000048c: PUSH1 0xa4 0000048e: PUSH0 0000048f: PUSH0 00000490: PUSH0 00000491: SWAP5 00000492: GAS 00000493: CALL 00000494: ISZERO 00000495: PUSH2 0x19ae 00000498: JUMPI 00000499: PUSH1 0x20 0000049b: ADD 0000049c: DUP1 0000049d: CALLDATASIZE 0000049e: GT 0000049f: DUP2 000004a0: CALLDATALOAD 000004a1: PUSH0 000004a2: BYTE 000004a3: JUMPI 000004a4: STOP 000004a5: JUMPDEST 000004a6: DUP1 000004a7: PUSH1 0x01 000004a9: ADD 000004aa: CALLDATALOAD 000004ab: PUSH1 0x60 000004ad: SHR 000004ae: DUP2 000004af: PUSH1 0x15 000004b1: ADD 000004b2: CALLDATALOAD 000004b3: DUP1 000004b4: PUSH1 0x08 000004b6: SHL 000004b7: PUSH1 0xe0 000004b9: SHR 000004ba: SWAP1 000004bb: PUSH0 000004bc: BYTE 000004bd: SHL 000004be: DUP3 000004bf: PUSH1 0x1a 000004c1: ADD 000004c2: CALLDATALOAD 000004c3: PUSH1 0x60 000004c5: SHR 000004c6: DUP2 000004c7: DUP4 000004c8: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 000004e9: PUSH0 000004ea: MSTORE 000004eb: PUSH1 0x04 000004ed: MSTORE 000004ee: PUSH1 0x24 000004f0: MSTORE 000004f1: PUSH0 000004f2: PUSH1 0x44 000004f4: PUSH0 000004f5: PUSH0 000004f6: PUSH0 000004f7: SWAP5 000004f8: GAS 000004f9: CALL 000004fa: ISZERO 000004fb: PUSH2 0x19ae 000004fe: JUMPI 000004ff: DUP3 00000500: PUSH1 0x2e 00000502: ADD 00000503: CALLDATALOAD 00000504: PUSH0 00000505: BYTE 00000506: PUSH5 0x01000276ad 0000050c: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25 00000521: DUP3 00000522: PUSH2 0x052c 00000525: JUMPI 00000526: SWAP1 00000527: POP 00000528: PUSH2 0x052e 0000052b: JUMP 0000052c: JUMPDEST 0000052d: POP 0000052e: JUMPDEST 0000052f: SWAP2 00000530: SWAP1 00000531: PUSH32 0xc31b8d7a00000000000000000000000000000000000000000000000000000000 00000552: PUSH0 00000553: MSTORE 00000554: ADDRESS 00000555: PUSH1 0x04 00000557: MSTORE 00000558: PUSH1 0x24 0000055a: MSTORE 0000055b: PUSH1 0x44 0000055d: MSTORE 0000055e: PUSH1 0x64 00000560: MSTORE 00000561: PUSH0 00000562: PUSH1 0x84 00000564: PUSH0 00000565: PUSH0 00000566: PUSH0 00000567: SWAP5 00000568: GAS 00000569: CALL 0000056a: ISZERO 0000056b: PUSH2 0x19ae 0000056e: JUMPI 0000056f: PUSH1 0x2f 00000571: ADD 00000572: DUP1 00000573: CALLDATASIZE 00000574: GT 00000575: DUP2 00000576: CALLDATALOAD 00000577: PUSH0 00000578: BYTE 00000579: JUMPI 0000057a: STOP 0000057b: JUMPDEST 0000057c: DUP1 0000057d: PUSH1 0x01 0000057f: ADD 00000580: CALLDATALOAD 00000581: PUSH1 0x60 00000583: SHR 00000584: DUP2 00000585: PUSH1 0x15 00000587: ADD 00000588: CALLDATALOAD 00000589: DUP1 0000058a: PUSH1 0x08 0000058c: SHL 0000058d: PUSH1 0xe0 0000058f: SHR 00000590: SWAP1 00000591: PUSH0 00000592: BYTE 00000593: SHL 00000594: DUP3 00000595: PUSH1 0x1a 00000597: ADD 00000598: CALLDATALOAD 00000599: PUSH1 0x60 0000059b: SHR 0000059c: DUP2 0000059d: DUP4 0000059e: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 000005bf: PUSH0 000005c0: MSTORE 000005c1: PUSH1 0x04 000005c3: MSTORE 000005c4: PUSH1 0x24 000005c6: MSTORE 000005c7: PUSH0 000005c8: PUSH1 0x44 000005ca: PUSH0 000005cb: PUSH0 000005cc: PUSH0 000005cd: SWAP5 000005ce: GAS 000005cf: CALL 000005d0: ISZERO 000005d1: PUSH2 0x19ae 000005d4: JUMPI 000005d5: DUP3 000005d6: PUSH1 0x2e 000005d8: ADD 000005d9: CALLDATALOAD 000005da: PUSH0 000005db: BYTE 000005dc: PUSH2 0x063c 000005df: JUMPI 000005e0: DUP3 000005e1: PUSH1 0x2f 000005e3: ADD 000005e4: CALLDATALOAD 000005e5: DUP1 000005e6: PUSH1 0x08 000005e8: SHL 000005e9: PUSH1 0xe0 000005eb: SHR 000005ec: SWAP1 000005ed: PUSH0 000005ee: BYTE 000005ef: SHL 000005f0: PUSH32 0xe67ce70600000000000000000000000000000000000000000000000000000000 00000611: PUSH0 00000612: MSTORE 00000613: PUSH1 0x04 00000615: MSTORE 00000616: PUSH1 0x24 00000618: MSTORE 00000619: PUSH1 0x60 0000061b: PUSH1 0x44 0000061d: MSTORE 0000061e: PUSH0 0000061f: PUSH1 0x64 00000621: MSTORE 00000622: PUSH0 00000623: PUSH1 0x84 00000625: PUSH0 00000626: PUSH0 00000627: PUSH0 00000628: SWAP5 00000629: GAS 0000062a: CALL 0000062b: ISZERO 0000062c: PUSH2 0x19ae 0000062f: JUMPI 00000630: PUSH1 0x34 00000632: ADD 00000633: DUP1 00000634: CALLDATASIZE 00000635: GT 00000636: DUP2 00000637: CALLDATALOAD 00000638: PUSH0 00000639: BYTE 0000063a: JUMPI 0000063b: STOP 0000063c: JUMPDEST 0000063d: DUP3 0000063e: PUSH1 0x2f 00000640: ADD 00000641: CALLDATALOAD 00000642: DUP1 00000643: PUSH1 0x08 00000645: SHL 00000646: PUSH1 0xe0 00000648: SHR 00000649: SWAP1 0000064a: PUSH0 0000064b: BYTE 0000064c: SHL 0000064d: SWAP1 0000064e: PUSH32 0x8dae733300000000000000000000000000000000000000000000000000000000 0000066f: PUSH0 00000670: MSTORE 00000671: PUSH1 0x04 00000673: MSTORE 00000674: PUSH1 0x24 00000676: MSTORE 00000677: PUSH1 0x60 00000679: PUSH1 0x44 0000067b: MSTORE 0000067c: PUSH0 0000067d: PUSH1 0x64 0000067f: MSTORE 00000680: PUSH0 00000681: PUSH1 0x84 00000683: PUSH0 00000684: PUSH0 00000685: PUSH0 00000686: SWAP5 00000687: GAS 00000688: CALL 00000689: ISZERO 0000068a: PUSH2 0x19ae 0000068d: JUMPI 0000068e: PUSH1 0x34 00000690: ADD 00000691: DUP1 00000692: CALLDATASIZE 00000693: GT 00000694: DUP2 00000695: CALLDATALOAD 00000696: PUSH0 00000697: BYTE 00000698: JUMPI 00000699: STOP 0000069a: JUMPDEST 0000069b: DUP1 0000069c: PUSH1 0x01 0000069e: ADD 0000069f: CALLDATALOAD 000006a0: PUSH1 0x60 000006a2: SHR 000006a3: DUP2 000006a4: PUSH1 0x1a 000006a6: ADD 000006a7: CALLDATALOAD 000006a8: PUSH1 0x60 000006aa: SHR 000006ab: DUP3 000006ac: PUSH1 0x15 000006ae: ADD 000006af: CALLDATALOAD 000006b0: DUP1 000006b1: PUSH1 0x08 000006b3: SHL 000006b4: PUSH1 0xe0 000006b6: SHR 000006b7: SWAP1 000006b8: PUSH0 000006b9: BYTE 000006ba: SHL 000006bb: DUP3 000006bc: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000006dd: PUSH0 000006de: MSTORE 000006df: PUSH1 0x04 000006e1: MSTORE 000006e2: PUSH1 0x24 000006e4: MSTORE 000006e5: PUSH0 000006e6: PUSH1 0x44 000006e8: PUSH0 000006e9: PUSH0 000006ea: PUSH0 000006eb: SWAP5 000006ec: GAS 000006ed: CALL 000006ee: ISZERO 000006ef: PUSH2 0x19ae 000006f2: JUMPI 000006f3: PUSH32 0xbd6015b400000000000000000000000000000000000000000000000000000000 00000714: PUSH32 0xdd93f59a00000000000000000000000000000000000000000000000000000000 00000735: DUP4 00000736: PUSH1 0x2e 00000738: ADD 00000739: CALLDATALOAD 0000073a: PUSH0 0000073b: BYTE 0000073c: PUSH2 0x0746 0000073f: JUMPI 00000740: SWAP1 00000741: POP 00000742: PUSH2 0x0748 00000745: JUMP 00000746: JUMPDEST 00000747: POP 00000748: JUMPDEST 00000749: PUSH0 0000074a: MSTORE 0000074b: ADDRESS 0000074c: PUSH1 0x04 0000074e: MSTORE 0000074f: PUSH0 00000750: PUSH1 0x24 00000752: PUSH0 00000753: PUSH0 00000754: PUSH0 00000755: SWAP5 00000756: GAS 00000757: CALL 00000758: ISZERO 00000759: PUSH2 0x19ae 0000075c: JUMPI 0000075d: PUSH1 0x2f 0000075f: ADD 00000760: DUP1 00000761: CALLDATASIZE 00000762: GT 00000763: DUP2 00000764: CALLDATALOAD 00000765: PUSH0 00000766: BYTE 00000767: JUMPI 00000768: STOP 00000769: JUMPDEST 0000076a: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa 0000077f: CALLER 00000780: EQ 00000781: PUSH2 0x092a 00000784: JUMPI 00000785: PUSH0 00000786: TLOAD 00000787: DUP1 00000788: CALLER 00000789: EQ 0000078a: ISZERO 0000078b: PUSH2 0x19ba 0000078e: JUMPI 0000078f: PUSH1 0x04 00000791: CALLDATALOAD 00000792: DUP1 00000793: PUSH0 00000794: SLT 00000795: ISZERO 00000796: PUSH2 0x07d7 00000799: JUMPI 0000079a: PUSH1 0x01 0000079c: TLOAD 0000079d: SWAP1 0000079e: DUP3 0000079f: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000007c0: PUSH0 000007c1: MSTORE 000007c2: PUSH1 0x04 000007c4: MSTORE 000007c5: PUSH1 0x24 000007c7: MSTORE 000007c8: PUSH0 000007c9: PUSH1 0x44 000007cb: PUSH0 000007cc: PUSH0 000007cd: PUSH0 000007ce: SWAP5 000007cf: GAS 000007d0: CALL 000007d1: ISZERO 000007d2: PUSH2 0x19ae 000007d5: JUMPI 000007d6: PUSH0 000007d7: JUMPDEST 000007d8: POP 000007d9: PUSH1 0x24 000007db: CALLDATALOAD 000007dc: DUP1 000007dd: PUSH0 000007de: SLT 000007df: ISZERO 000007e0: PUSH2 0x0820 000007e3: JUMPI 000007e4: PUSH1 0x02 000007e6: TLOAD 000007e7: SWAP1 000007e8: DUP3 000007e9: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 0000080a: PUSH0 0000080b: MSTORE 0000080c: PUSH1 0x04 0000080e: MSTORE 0000080f: PUSH1 0x24 00000811: MSTORE 00000812: PUSH0 00000813: PUSH1 0x44 00000815: PUSH0 00000816: PUSH0 00000817: PUSH0 00000818: SWAP5 00000819: GAS 0000081a: CALL 0000081b: ISZERO 0000081c: PUSH2 0x19ae 0000081f: JUMPI 00000820: JUMPDEST 00000821: STOP 00000822: JUMPDEST 00000823: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f 00000838: PUSH11 0x52b7d2dcc80cd2e4000000 00000844: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa 00000859: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 0000087a: PUSH0 0000087b: MSTORE 0000087c: PUSH1 0x04 0000087e: MSTORE 0000087f: PUSH1 0x24 00000881: MSTORE 00000882: PUSH0 00000883: PUSH1 0x44 00000885: PUSH0 00000886: PUSH0 00000887: PUSH0 00000888: SWAP5 00000889: GAS 0000088a: CALL 0000088b: ISZERO 0000088c: PUSH2 0x19ae 0000088f: JUMPI 00000890: DUP1 00000891: PUSH1 0x01 00000893: ADD 00000894: CALLDATALOAD 00000895: PUSH1 0xf0 00000897: SHR 00000898: DUP1 00000899: DUP3 0000089a: PUSH32 0x5cffe9de00000000000000000000000000000000000000000000000000000000 000008bb: PUSH0 000008bc: MSTORE 000008bd: ADDRESS 000008be: PUSH1 0x04 000008c0: MSTORE 000008c1: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f 000008d6: PUSH1 0x24 000008d8: MSTORE 000008d9: PUSH11 0x52b7d2dcc80cd2e4000000 000008e5: PUSH1 0x44 000008e7: MSTORE 000008e8: PUSH1 0x80 000008ea: PUSH1 0x64 000008ec: MSTORE 000008ed: DUP2 000008ee: SWAP1 000008ef: DUP2 000008f0: PUSH1 0x84 000008f2: MSTORE 000008f3: PUSH1 0x03 000008f5: ADD 000008f6: PUSH1 0xa4 000008f8: CALLDATACOPY 000008f9: PUSH1 0xa4 000008fb: ADD 000008fc: PUSH0 000008fd: PUSH0 000008fe: SWAP2 000008ff: PUSH0 00000900: PUSH0 00000901: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa 00000916: GAS 00000917: CALL 00000918: ISZERO 00000919: PUSH2 0x19ae 0000091c: JUMPI 0000091d: PUSH1 0x03 0000091f: ADD 00000920: ADD 00000921: DUP1 00000922: CALLDATASIZE 00000923: GT 00000924: DUP2 00000925: CALLDATALOAD 00000926: PUSH0 00000927: BYTE 00000928: JUMPI 00000929: STOP 0000092a: JUMPDEST 0000092b: ADDRESS 0000092c: PUSH1 0x04 0000092e: CALLDATALOAD 0000092f: EQ 00000930: ISZERO 00000931: PUSH2 0x19ba 00000934: JUMPI 00000935: PUSH11 0x52b7d2dcc80cd2e4000000 00000941: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f 00000956: DUP1 00000957: DUP3 00000958: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 0000096d: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 0000098e: PUSH0 0000098f: MSTORE 00000990: PUSH1 0x04 00000992: MSTORE 00000993: PUSH1 0x24 00000995: MSTORE 00000996: PUSH0 00000997: PUSH1 0x44 00000999: PUSH0 0000099a: PUSH0 0000099b: PUSH0 0000099c: SWAP5 0000099d: GAS 0000099e: CALL 0000099f: ISZERO 000009a0: PUSH2 0x19ae 000009a3: JUMPI 000009a4: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000 000009c5: PUSH0 000009c6: MSTORE 000009c7: PUSH1 0x04 000009c9: MSTORE 000009ca: PUSH1 0x24 000009cc: MSTORE 000009cd: ADDRESS 000009ce: PUSH1 0x44 000009d0: MSTORE 000009d1: PUSH0 000009d2: PUSH1 0x64 000009d4: MSTORE 000009d5: PUSH0 000009d6: PUSH0 000009d7: PUSH1 0x84 000009d9: PUSH0 000009da: PUSH0 000009db: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 000009f0: GAS 000009f1: CALL 000009f2: ISZERO 000009f3: PUSH2 0x19ae 000009f6: JUMPI 000009f7: PUSH1 0xc4 000009f9: CALLDATALOAD 000009fa: PUSH0 000009fb: BYTE 000009fc: ISZERO 000009fd: PUSH2 0x0c62 00000a00: JUMPI 00000a01: PUSH1 0xca 00000a03: CALLDATALOAD 00000a04: DUP1 00000a05: PUSH1 0x08 00000a07: SHL 00000a08: PUSH1 0xe0 00000a0a: SHR 00000a0b: SWAP1 00000a0c: PUSH0 00000a0d: BYTE 00000a0e: SHL 00000a0f: PUSH1 0xcf 00000a11: CALLDATALOAD 00000a12: PUSH1 0x60 00000a14: SHR 00000a15: PUSH32 0xa415bcad00000000000000000000000000000000000000000000000000000000 00000a36: PUSH0 00000a37: MSTORE 00000a38: PUSH1 0x04 00000a3a: MSTORE 00000a3b: PUSH1 0x24 00000a3d: MSTORE 00000a3e: PUSH1 0x02 00000a40: PUSH1 0x44 00000a42: MSTORE 00000a43: PUSH0 00000a44: PUSH1 0x64 00000a46: MSTORE 00000a47: ADDRESS 00000a48: PUSH1 0x84 00000a4a: MSTORE 00000a4b: PUSH0 00000a4c: PUSH0 00000a4d: PUSH1 0xa4 00000a4f: PUSH0 00000a50: PUSH0 00000a51: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000a66: GAS 00000a67: CALL 00000a68: ISZERO 00000a69: PUSH2 0x19ae 00000a6c: JUMPI 00000a6d: PUSH1 0xfc 00000a6f: DUP1 00000a70: CALLDATALOAD 00000a71: PUSH0 00000a72: BYTE 00000a73: JUMP 00000a74: JUMPDEST 00000a75: PUSH1 0xc5 00000a77: CALLDATALOAD 00000a78: DUP1 00000a79: PUSH1 0x08 00000a7b: SHL 00000a7c: PUSH1 0xe0 00000a7e: SHR 00000a7f: SWAP1 00000a80: PUSH0 00000a81: BYTE 00000a82: SHL 00000a83: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000a98: DUP1 00000a99: DUP3 00000a9a: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000aaf: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000ad0: PUSH0 00000ad1: MSTORE 00000ad2: PUSH1 0x04 00000ad4: MSTORE 00000ad5: PUSH1 0x24 00000ad7: MSTORE 00000ad8: PUSH0 00000ad9: PUSH1 0x44 00000adb: PUSH0 00000adc: PUSH0 00000add: PUSH0 00000ade: SWAP5 00000adf: GAS 00000ae0: CALL 00000ae1: ISZERO 00000ae2: PUSH2 0x19ae 00000ae5: JUMPI 00000ae6: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000 00000b07: PUSH0 00000b08: MSTORE 00000b09: PUSH1 0x04 00000b0b: MSTORE 00000b0c: PUSH1 0x24 00000b0e: MSTORE 00000b0f: ADDRESS 00000b10: PUSH1 0x44 00000b12: MSTORE 00000b13: PUSH0 00000b14: PUSH1 0x64 00000b16: MSTORE 00000b17: PUSH0 00000b18: PUSH0 00000b19: PUSH1 0x84 00000b1b: PUSH0 00000b1c: PUSH0 00000b1d: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000b32: GAS 00000b33: CALL 00000b34: ISZERO 00000b35: PUSH2 0x19ae 00000b38: JUMPI 00000b39: PUSH1 0xe3 00000b3b: CALLDATALOAD 00000b3c: DUP1 00000b3d: PUSH1 0x08 00000b3f: SHL 00000b40: PUSH1 0xe0 00000b42: SHR 00000b43: SWAP1 00000b44: PUSH0 00000b45: BYTE 00000b46: SHL 00000b47: PUSH1 0xe8 00000b49: CALLDATALOAD 00000b4a: PUSH1 0x60 00000b4c: SHR 00000b4d: DUP1 00000b4e: DUP3 00000b4f: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000b64: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000b85: PUSH0 00000b86: MSTORE 00000b87: PUSH1 0x04 00000b89: MSTORE 00000b8a: PUSH1 0x24 00000b8c: MSTORE 00000b8d: PUSH0 00000b8e: PUSH1 0x44 00000b90: PUSH0 00000b91: PUSH0 00000b92: PUSH0 00000b93: SWAP5 00000b94: GAS 00000b95: CALL 00000b96: ISZERO 00000b97: PUSH2 0x19ae 00000b9a: JUMPI 00000b9b: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000 00000bbc: PUSH0 00000bbd: MSTORE 00000bbe: PUSH1 0x04 00000bc0: MSTORE 00000bc1: PUSH1 0x24 00000bc3: MSTORE 00000bc4: ADDRESS 00000bc5: PUSH1 0x44 00000bc7: MSTORE 00000bc8: PUSH0 00000bc9: PUSH1 0x64 00000bcb: MSTORE 00000bcc: PUSH0 00000bcd: PUSH0 00000bce: PUSH1 0x84 00000bd0: PUSH0 00000bd1: PUSH0 00000bd2: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000be7: GAS 00000be8: CALL 00000be9: ISZERO 00000bea: PUSH2 0x19ae 00000bed: JUMPI 00000bee: PUSH11 0x52b7d2dcc80cd2e3ffffff 00000bfa: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f 00000c0f: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000 00000c30: PUSH0 00000c31: MSTORE 00000c32: PUSH1 0x04 00000c34: MSTORE 00000c35: PUSH1 0x24 00000c37: MSTORE 00000c38: ADDRESS 00000c39: PUSH1 0x44 00000c3b: MSTORE 00000c3c: PUSH0 00000c3d: PUSH0 00000c3e: PUSH1 0x64 00000c40: PUSH0 00000c41: PUSH0 00000c42: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000c57: GAS 00000c58: CALL 00000c59: ISZERO 00000c5a: PUSH2 0x19ae 00000c5d: JUMPI 00000c5e: PUSH2 0x19bc 00000c61: JUMP 00000c62: JUMPDEST 00000c63: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000c84: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000c99: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000 00000cba: PUSH0 00000cbb: MSTORE 00000cbc: PUSH1 0x04 00000cbe: MSTORE 00000cbf: PUSH1 0x24 00000cc1: MSTORE 00000cc2: ADDRESS 00000cc3: PUSH1 0x44 00000cc5: MSTORE 00000cc6: PUSH0 00000cc7: PUSH0 00000cc8: PUSH1 0x64 00000cca: PUSH0 00000ccb: PUSH0 00000ccc: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000ce1: GAS 00000ce2: CALL 00000ce3: ISZERO 00000ce4: PUSH2 0x19ae 00000ce7: JUMPI 00000ce8: PUSH1 0xe3 00000cea: CALLDATALOAD 00000ceb: PUSH1 0x60 00000ced: SHR 00000cee: DUP1 00000cef: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000d04: EQ 00000d05: PUSH2 0x0dad 00000d08: JUMPI 00000d09: PUSH1 0xde 00000d0b: CALLDATALOAD 00000d0c: DUP1 00000d0d: PUSH1 0x08 00000d0f: SHL 00000d10: PUSH1 0xe0 00000d12: SHR 00000d13: SWAP1 00000d14: PUSH0 00000d15: BYTE 00000d16: SHL 00000d17: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000d38: DUP3 00000d39: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f 00000d4e: EQ 00000d4f: PUSH2 0x0d59 00000d52: JUMPI 00000d53: SWAP1 00000d54: POP 00000d55: PUSH2 0x0d5b 00000d58: JUMP 00000d59: JUMPDEST 00000d5a: POP 00000d5b: JUMPDEST 00000d5c: SWAP1 00000d5d: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000 00000d7e: PUSH0 00000d7f: MSTORE 00000d80: PUSH1 0x04 00000d82: MSTORE 00000d83: PUSH1 0x24 00000d85: MSTORE 00000d86: ADDRESS 00000d87: PUSH1 0x44 00000d89: MSTORE 00000d8a: PUSH0 00000d8b: PUSH0 00000d8c: PUSH1 0x64 00000d8e: PUSH0 00000d8f: PUSH0 00000d90: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000da5: GAS 00000da6: CALL 00000da7: ISZERO 00000da8: PUSH2 0x19ae 00000dab: JUMPI 00000dac: PUSH0 00000dad: JUMPDEST 00000dae: POP 00000daf: PUSH1 0xf7 00000db1: DUP1 00000db2: CALLDATALOAD 00000db3: PUSH0 00000db4: BYTE 00000db5: JUMP 00000db6: JUMPDEST 00000db7: PUSH1 0xc5 00000db9: CALLDATALOAD 00000dba: DUP1 00000dbb: PUSH1 0x08 00000dbd: SHL 00000dbe: PUSH1 0xe0 00000dc0: SHR 00000dc1: SWAP1 00000dc2: PUSH0 00000dc3: BYTE 00000dc4: SHL 00000dc5: PUSH1 0xca 00000dc7: CALLDATALOAD 00000dc8: PUSH1 0x60 00000dca: SHR 00000dcb: DUP1 00000dcc: DUP3 00000dcd: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000de2: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000e03: PUSH0 00000e04: MSTORE 00000e05: PUSH1 0x04 00000e07: MSTORE 00000e08: PUSH1 0x24 00000e0a: MSTORE 00000e0b: PUSH0 00000e0c: PUSH1 0x44 00000e0e: PUSH0 00000e0f: PUSH0 00000e10: PUSH0 00000e11: SWAP5 00000e12: GAS 00000e13: CALL 00000e14: ISZERO 00000e15: PUSH2 0x19ae 00000e18: JUMPI 00000e19: PUSH32 0x573ade8100000000000000000000000000000000000000000000000000000000 00000e3a: PUSH0 00000e3b: MSTORE 00000e3c: PUSH1 0x04 00000e3e: MSTORE 00000e3f: PUSH1 0x24 00000e41: MSTORE 00000e42: PUSH1 0x02 00000e44: PUSH1 0x44 00000e46: MSTORE 00000e47: ADDRESS 00000e48: PUSH1 0x64 00000e4a: MSTORE 00000e4b: PUSH0 00000e4c: PUSH0 00000e4d: PUSH1 0x84 00000e4f: PUSH0 00000e50: PUSH0 00000e51: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000e66: GAS 00000e67: CALL 00000e68: ISZERO 00000e69: PUSH2 0x19ae 00000e6c: JUMPI 00000e6d: PUSH11 0x52b7d2dcc80cd2e3ffffff 00000e79: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f 00000e8e: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000 00000eaf: PUSH0 00000eb0: MSTORE 00000eb1: PUSH1 0x04 00000eb3: MSTORE 00000eb4: PUSH1 0x24 00000eb6: MSTORE 00000eb7: ADDRESS 00000eb8: PUSH1 0x44 00000eba: MSTORE 00000ebb: PUSH0 00000ebc: PUSH0 00000ebd: PUSH1 0x64 00000ebf: PUSH0 00000ec0: PUSH0 00000ec1: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000ed6: GAS 00000ed7: CALL 00000ed8: ISZERO 00000ed9: PUSH2 0x19ae 00000edc: JUMPI 00000edd: PUSH2 0x19bc 00000ee0: JUMP 00000ee1: JUMPDEST 00000ee2: DUP1 00000ee3: PUSH1 0x01 00000ee5: ADD 00000ee6: CALLDATALOAD 00000ee7: DUP1 00000ee8: PUSH1 0x08 00000eea: SHL 00000eeb: PUSH1 0xe0 00000eed: SHR 00000eee: SWAP1 00000eef: PUSH0 00000ef0: BYTE 00000ef1: SHL 00000ef2: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000f07: DUP1 00000f08: DUP3 00000f09: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000f1e: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000f3f: PUSH0 00000f40: MSTORE 00000f41: PUSH1 0x04 00000f43: MSTORE 00000f44: PUSH1 0x24 00000f46: MSTORE 00000f47: PUSH0 00000f48: PUSH1 0x44 00000f4a: PUSH0 00000f4b: PUSH0 00000f4c: PUSH0 00000f4d: SWAP5 00000f4e: GAS 00000f4f: CALL 00000f50: ISZERO 00000f51: PUSH2 0x19ae 00000f54: JUMPI 00000f55: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000 00000f76: PUSH0 00000f77: MSTORE 00000f78: PUSH1 0x04 00000f7a: MSTORE 00000f7b: PUSH1 0x24 00000f7d: MSTORE 00000f7e: ADDRESS 00000f7f: PUSH1 0x44 00000f81: MSTORE 00000f82: PUSH0 00000f83: PUSH1 0x64 00000f85: MSTORE 00000f86: PUSH0 00000f87: PUSH0 00000f88: PUSH1 0x84 00000f8a: PUSH0 00000f8b: PUSH0 00000f8c: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00000fa1: GAS 00000fa2: CALL 00000fa3: ISZERO 00000fa4: PUSH2 0x19ae 00000fa7: JUMPI 00000fa8: DUP1 00000fa9: PUSH1 0x06 00000fab: ADD 00000fac: CALLDATALOAD 00000fad: DUP1 00000fae: PUSH1 0x08 00000fb0: SHL 00000fb1: PUSH1 0xe0 00000fb3: SHR 00000fb4: SWAP1 00000fb5: PUSH0 00000fb6: BYTE 00000fb7: SHL 00000fb8: DUP2 00000fb9: PUSH1 0x0b 00000fbb: ADD 00000fbc: CALLDATALOAD 00000fbd: PUSH1 0x60 00000fbf: SHR 00000fc0: PUSH32 0xa415bcad00000000000000000000000000000000000000000000000000000000 00000fe1: PUSH0 00000fe2: MSTORE 00000fe3: PUSH1 0x04 00000fe5: MSTORE 00000fe6: PUSH1 0x24 00000fe8: MSTORE 00000fe9: PUSH1 0x02 00000feb: PUSH1 0x44 00000fed: MSTORE 00000fee: PUSH0 00000fef: PUSH1 0x64 00000ff1: MSTORE 00000ff2: ADDRESS 00000ff3: PUSH1 0x84 00000ff5: MSTORE 00000ff6: PUSH0 00000ff7: PUSH0 00000ff8: PUSH1 0xa4 00000ffa: PUSH0 00000ffb: PUSH0 00000ffc: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00001011: GAS 00001012: CALL 00001013: ISZERO 00001014: PUSH2 0x19ae 00001017: JUMPI 00001018: PUSH1 0x1f 0000101a: ADD 0000101b: DUP1 0000101c: CALLDATASIZE 0000101d: GT 0000101e: DUP2 0000101f: CALLDATALOAD 00001020: PUSH0 00001021: BYTE 00001022: JUMPI 00001023: STOP 00001024: JUMPDEST 00001025: DUP1 00001026: PUSH1 0x01 00001028: ADD 00001029: CALLDATALOAD 0000102a: DUP1 0000102b: PUSH1 0x08 0000102d: SHL 0000102e: PUSH1 0xe0 00001030: SHR 00001031: SWAP1 00001032: PUSH0 00001033: BYTE 00001034: SHL 00001035: DUP2 00001036: PUSH1 0x06 00001038: ADD 00001039: CALLDATALOAD 0000103a: PUSH1 0x60 0000103c: SHR 0000103d: DUP1 0000103e: DUP3 0000103f: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 00001054: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00001075: PUSH0 00001076: MSTORE 00001077: PUSH1 0x04 00001079: MSTORE 0000107a: PUSH1 0x24 0000107c: MSTORE 0000107d: PUSH0 0000107e: PUSH1 0x44 00001080: PUSH0 00001081: PUSH0 00001082: PUSH0 00001083: SWAP5 00001084: GAS 00001085: CALL 00001086: ISZERO 00001087: PUSH2 0x19ae 0000108a: JUMPI 0000108b: PUSH32 0x573ade8100000000000000000000000000000000000000000000000000000000 000010ac: PUSH0 000010ad: MSTORE 000010ae: PUSH1 0x04 000010b0: MSTORE 000010b1: PUSH1 0x24 000010b3: MSTORE 000010b4: PUSH1 0x02 000010b6: PUSH1 0x44 000010b8: MSTORE 000010b9: ADDRESS 000010ba: PUSH1 0x64 000010bc: MSTORE 000010bd: PUSH0 000010be: PUSH0 000010bf: PUSH1 0x84 000010c1: PUSH0 000010c2: PUSH0 000010c3: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 000010d8: GAS 000010d9: CALL 000010da: ISZERO 000010db: PUSH2 0x19ae 000010de: JUMPI 000010df: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001100: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001115: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000 00001136: PUSH0 00001137: MSTORE 00001138: PUSH1 0x04 0000113a: MSTORE 0000113b: PUSH1 0x24 0000113d: MSTORE 0000113e: ADDRESS 0000113f: PUSH1 0x44 00001141: MSTORE 00001142: PUSH0 00001143: PUSH0 00001144: PUSH1 0x64 00001146: PUSH0 00001147: PUSH0 00001148: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2 0000115d: GAS 0000115e: CALL 0000115f: ISZERO 00001160: PUSH2 0x19ae 00001163: JUMPI 00001164: PUSH1 0x1a 00001166: ADD 00001167: DUP1 00001168: CALLDATASIZE 00001169: GT 0000116a: DUP2 0000116b: CALLDATALOAD 0000116c: PUSH0 0000116d: BYTE 0000116e: JUMPI 0000116f: STOP 00001170: JUMPDEST 00001171: DUP1 00001172: PUSH1 0x21 00001174: ADD 00001175: CALLDATALOAD 00001176: DUP1 00001177: PUSH1 0x08 00001179: SHL 0000117a: PUSH1 0xe0 0000117c: SHR 0000117d: SWAP1 0000117e: PUSH0 0000117f: BYTE 00001180: SHL 00001181: DUP2 00001182: PUSH1 0x3a 00001184: ADD 00001185: CALLDATALOAD 00001186: PUSH1 0x60 00001188: SHR 00001189: DUP3 0000118a: PUSH1 0x26 0000118c: ADD 0000118d: CALLDATALOAD 0000118e: PUSH1 0x60 00001190: SHR 00001191: DUP4 00001192: PUSH1 0x01 00001194: ADD 00001195: CALLDATALOAD 00001196: DUP2 00001197: DUP5 00001198: PUSH20 0xba12222222228d8ba445958a75a0704d566bf2c8 000011ad: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 000011ce: PUSH0 000011cf: MSTORE 000011d0: PUSH1 0x04 000011d2: MSTORE 000011d3: PUSH1 0x24 000011d5: MSTORE 000011d6: PUSH0 000011d7: PUSH1 0x44 000011d9: PUSH0 000011da: PUSH0 000011db: PUSH0 000011dc: SWAP5 000011dd: GAS 000011de: CALL 000011df: ISZERO 000011e0: PUSH2 0x19ae 000011e3: JUMPI 000011e4: PUSH32 0x52bbbe2900000000000000000000000000000000000000000000000000000000 00001205: PUSH0 00001206: MSTORE 00001207: PUSH1 0xe0 00001209: PUSH1 0x04 0000120b: MSTORE 0000120c: ADDRESS 0000120d: PUSH1 0x24 0000120f: MSTORE 00001210: PUSH0 00001211: PUSH1 0x44 00001213: MSTORE 00001214: ADDRESS 00001215: PUSH1 0x64 00001217: MSTORE 00001218: PUSH0 00001219: PUSH1 0x84 0000121b: MSTORE 0000121c: PUSH0 0000121d: PUSH1 0xa4 0000121f: MSTORE 00001220: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001241: PUSH1 0xc4 00001243: MSTORE 00001244: PUSH1 0xe4 00001246: MSTORE 00001247: PUSH0 00001248: PUSH2 0x0104 0000124b: MSTORE 0000124c: PUSH2 0x0124 0000124f: MSTORE 00001250: PUSH2 0x0144 00001253: MSTORE 00001254: PUSH2 0x0164 00001257: MSTORE 00001258: PUSH1 0xc0 0000125a: PUSH2 0x0184 0000125d: MSTORE 0000125e: PUSH0 0000125f: PUSH2 0x01a4 00001262: MSTORE 00001263: PUSH0 00001264: PUSH0 00001265: PUSH2 0x01c4 00001268: PUSH0 00001269: PUSH0 0000126a: PUSH20 0xba12222222228d8ba445958a75a0704d566bf2c8 0000127f: GAS 00001280: CALL 00001281: ISZERO 00001282: PUSH2 0x19ae 00001285: JUMPI 00001286: PUSH1 0x4e 00001288: ADD 00001289: DUP1 0000128a: CALLDATASIZE 0000128b: GT 0000128c: DUP2 0000128d: CALLDATALOAD 0000128e: PUSH0 0000128f: BYTE 00001290: JUMPI 00001291: STOP 00001292: JUMPDEST 00001293: DUP1 00001294: PUSH1 0x01 00001296: ADD 00001297: CALLDATALOAD 00001298: PUSH1 0x60 0000129a: SHR 0000129b: DUP2 0000129c: PUSH1 0x15 0000129e: ADD 0000129f: CALLDATALOAD 000012a0: DUP1 000012a1: PUSH1 0x08 000012a3: SHL 000012a4: PUSH1 0xe0 000012a6: SHR 000012a7: SWAP1 000012a8: PUSH0 000012a9: BYTE 000012aa: SHL 000012ab: DUP3 000012ac: PUSH1 0x1a 000012ae: ADD 000012af: CALLDATALOAD 000012b0: PUSH1 0x60 000012b2: SHR 000012b3: DUP2 000012b4: DUP4 000012b5: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 000012d6: PUSH0 000012d7: MSTORE 000012d8: PUSH1 0x04 000012da: MSTORE 000012db: PUSH1 0x24 000012dd: MSTORE 000012de: PUSH0 000012df: PUSH1 0x44 000012e1: PUSH0 000012e2: PUSH0 000012e3: PUSH0 000012e4: SWAP5 000012e5: GAS 000012e6: CALL 000012e7: ISZERO 000012e8: PUSH2 0x19ae 000012eb: JUMPI 000012ec: DUP3 000012ed: PUSH1 0x2e 000012ef: ADD 000012f0: DUP1 000012f1: CALLDATALOAD 000012f2: PUSH1 0x01 000012f4: BYTE 000012f5: SWAP1 000012f6: CALLDATALOAD 000012f7: PUSH0 000012f8: BYTE 000012f9: PUSH32 0x3df0212400000000000000000000000000000000000000000000000000000000 0000131a: PUSH32 0x5b41b90800000000000000000000000000000000000000000000000000000000 0000133b: DUP7 0000133c: PUSH1 0x30 0000133e: ADD 0000133f: CALLDATALOAD 00001340: PUSH0 00001341: BYTE 00001342: PUSH2 0x134c 00001345: JUMPI 00001346: SWAP1 00001347: POP 00001348: PUSH2 0x134e 0000134b: JUMP 0000134c: JUMPDEST 0000134d: POP 0000134e: JUMPDEST 0000134f: PUSH0 00001350: MSTORE 00001351: PUSH1 0x04 00001353: MSTORE 00001354: PUSH1 0x24 00001356: MSTORE 00001357: PUSH1 0x44 00001359: MSTORE 0000135a: PUSH0 0000135b: PUSH1 0x64 0000135d: MSTORE 0000135e: PUSH0 0000135f: PUSH1 0x84 00001361: PUSH0 00001362: PUSH0 00001363: PUSH0 00001364: SWAP5 00001365: GAS 00001366: CALL 00001367: ISZERO 00001368: PUSH2 0x19ae 0000136b: JUMPI 0000136c: PUSH1 0x31 0000136e: ADD 0000136f: DUP1 00001370: CALLDATASIZE 00001371: GT 00001372: DUP2 00001373: CALLDATALOAD 00001374: PUSH0 00001375: BYTE 00001376: JUMPI 00001377: STOP 00001378: JUMPDEST 00001379: DUP1 0000137a: PUSH1 0x01 0000137c: ADD 0000137d: CALLDATALOAD 0000137e: PUSH1 0x60 00001380: SHR 00001381: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001396: DUP3 00001397: PUSH1 0x15 00001399: ADD 0000139a: CALLDATALOAD 0000139b: DUP1 0000139c: PUSH1 0x08 0000139e: SHL 0000139f: PUSH1 0xe0 000013a1: SHR 000013a2: SWAP1 000013a3: PUSH0 000013a4: BYTE 000013a5: SHL 000013a6: DUP3 000013a7: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000013c8: PUSH0 000013c9: MSTORE 000013ca: PUSH1 0x04 000013cc: MSTORE 000013cd: PUSH1 0x24 000013cf: MSTORE 000013d0: PUSH0 000013d1: PUSH1 0x44 000013d3: PUSH0 000013d4: PUSH0 000013d5: PUSH0 000013d6: SWAP5 000013d7: GAS 000013d8: CALL 000013d9: ISZERO 000013da: PUSH2 0x19ae 000013dd: JUMPI 000013de: DUP2 000013df: PUSH1 0x1a 000013e1: ADD 000013e2: CALLDATALOAD 000013e3: DUP1 000013e4: PUSH1 0x08 000013e6: SHL 000013e7: PUSH1 0xe0 000013e9: SHR 000013ea: SWAP1 000013eb: PUSH0 000013ec: BYTE 000013ed: SHL 000013ee: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000 0000140f: PUSH0 00001410: MSTORE 00001411: PUSH0 00001412: PUSH1 0x04 00001414: MSTORE 00001415: PUSH1 0x24 00001417: MSTORE 00001418: ADDRESS 00001419: PUSH1 0x44 0000141b: MSTORE 0000141c: PUSH1 0x80 0000141e: PUSH1 0x64 00001420: MSTORE 00001421: PUSH0 00001422: PUSH1 0x84 00001424: MSTORE 00001425: PUSH0 00001426: PUSH1 0xa4 00001428: PUSH0 00001429: PUSH0 0000142a: PUSH0 0000142b: SWAP5 0000142c: GAS 0000142d: CALL 0000142e: ISZERO 0000142f: PUSH2 0x19ae 00001432: JUMPI 00001433: PUSH1 0x1f 00001435: ADD 00001436: DUP1 00001437: CALLDATASIZE 00001438: GT 00001439: DUP2 0000143a: CALLDATALOAD 0000143b: PUSH0 0000143c: BYTE 0000143d: JUMPI 0000143e: STOP 0000143f: JUMPDEST 00001440: DUP1 00001441: PUSH1 0x01 00001443: ADD 00001444: CALLDATALOAD 00001445: PUSH1 0x60 00001447: SHR 00001448: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 0000145d: DUP3 0000145e: PUSH1 0x15 00001460: ADD 00001461: CALLDATALOAD 00001462: DUP1 00001463: PUSH1 0x08 00001465: SHL 00001466: PUSH1 0xe0 00001468: SHR 00001469: SWAP1 0000146a: PUSH0 0000146b: BYTE 0000146c: SHL 0000146d: DUP3 0000146e: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 0000148f: PUSH0 00001490: MSTORE 00001491: PUSH1 0x04 00001493: MSTORE 00001494: PUSH1 0x24 00001496: MSTORE 00001497: PUSH0 00001498: PUSH1 0x44 0000149a: PUSH0 0000149b: PUSH0 0000149c: PUSH0 0000149d: SWAP5 0000149e: GAS 0000149f: CALL 000014a0: ISZERO 000014a1: PUSH2 0x19ae 000014a4: JUMPI 000014a5: DUP2 000014a6: PUSH1 0x1a 000014a8: ADD 000014a9: CALLDATALOAD 000014aa: DUP1 000014ab: PUSH1 0x08 000014ad: SHL 000014ae: PUSH1 0xe0 000014b0: SHR 000014b1: SWAP1 000014b2: PUSH0 000014b3: BYTE 000014b4: SHL 000014b5: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000 000014d6: PUSH0 000014d7: MSTORE 000014d8: PUSH1 0x04 000014da: MSTORE 000014db: PUSH0 000014dc: PUSH1 0x24 000014de: MSTORE 000014df: ADDRESS 000014e0: PUSH1 0x44 000014e2: MSTORE 000014e3: PUSH1 0x80 000014e5: PUSH1 0x64 000014e7: MSTORE 000014e8: PUSH0 000014e9: PUSH1 0x84 000014eb: MSTORE 000014ec: PUSH0 000014ed: PUSH1 0xa4 000014ef: PUSH0 000014f0: PUSH0 000014f1: PUSH0 000014f2: SWAP5 000014f3: GAS 000014f4: CALL 000014f5: ISZERO 000014f6: PUSH2 0x19ae 000014f9: JUMPI 000014fa: PUSH1 0x1f 000014fc: ADD 000014fd: DUP1 000014fe: CALLDATASIZE 000014ff: GT 00001500: DUP2 00001501: CALLDATALOAD 00001502: PUSH0 00001503: BYTE 00001504: JUMPI 00001505: STOP 00001506: JUMPDEST 00001507: DUP1 00001508: PUSH1 0x01 0000150a: ADD 0000150b: CALLDATALOAD 0000150c: PUSH1 0x60 0000150e: SHR 0000150f: DUP2 00001510: PUSH1 0x1f 00001512: ADD 00001513: CALLDATALOAD 00001514: PUSH1 0x60 00001516: SHR 00001517: DUP3 00001518: PUSH1 0x15 0000151a: ADD 0000151b: CALLDATALOAD 0000151c: DUP1 0000151d: PUSH1 0x08 0000151f: SHL 00001520: PUSH1 0xe0 00001522: SHR 00001523: SWAP1 00001524: PUSH0 00001525: BYTE 00001526: SHL 00001527: DUP3 00001528: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001549: PUSH0 0000154a: MSTORE 0000154b: PUSH1 0x04 0000154d: MSTORE 0000154e: PUSH1 0x24 00001550: MSTORE 00001551: PUSH0 00001552: PUSH1 0x44 00001554: PUSH0 00001555: PUSH0 00001556: PUSH0 00001557: SWAP5 00001558: GAS 00001559: CALL 0000155a: ISZERO 0000155b: PUSH2 0x19ae 0000155e: JUMPI 0000155f: DUP2 00001560: PUSH1 0x1a 00001562: ADD 00001563: CALLDATALOAD 00001564: DUP1 00001565: PUSH1 0x08 00001567: SHL 00001568: PUSH1 0xe0 0000156a: SHR 0000156b: SWAP1 0000156c: PUSH0 0000156d: BYTE 0000156e: SHL 0000156f: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000 00001590: PUSH0 00001591: MSTORE 00001592: PUSH0 00001593: PUSH1 0x04 00001595: MSTORE 00001596: PUSH1 0x24 00001598: MSTORE 00001599: ADDRESS 0000159a: PUSH1 0x44 0000159c: MSTORE 0000159d: PUSH1 0x80 0000159f: PUSH1 0x64 000015a1: MSTORE 000015a2: PUSH0 000015a3: PUSH1 0x84 000015a5: MSTORE 000015a6: PUSH0 000015a7: PUSH1 0xa4 000015a9: PUSH0 000015aa: PUSH0 000015ab: PUSH0 000015ac: SWAP5 000015ad: GAS 000015ae: CALL 000015af: ISZERO 000015b0: PUSH2 0x19ae 000015b3: JUMPI 000015b4: PUSH1 0x33 000015b6: ADD 000015b7: DUP1 000015b8: CALLDATASIZE 000015b9: GT 000015ba: DUP2 000015bb: CALLDATALOAD 000015bc: PUSH0 000015bd: BYTE 000015be: JUMPI 000015bf: STOP 000015c0: JUMPDEST 000015c1: DUP1 000015c2: PUSH1 0x01 000015c4: ADD 000015c5: CALLDATALOAD 000015c6: PUSH1 0x60 000015c8: SHR 000015c9: DUP2 000015ca: PUSH1 0x1f 000015cc: ADD 000015cd: CALLDATALOAD 000015ce: PUSH1 0x60 000015d0: SHR 000015d1: DUP3 000015d2: PUSH1 0x15 000015d4: ADD 000015d5: CALLDATALOAD 000015d6: DUP1 000015d7: PUSH1 0x08 000015d9: SHL 000015da: PUSH1 0xe0 000015dc: SHR 000015dd: SWAP1 000015de: PUSH0 000015df: BYTE 000015e0: SHL 000015e1: DUP3 000015e2: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001603: PUSH0 00001604: MSTORE 00001605: PUSH1 0x04 00001607: MSTORE 00001608: PUSH1 0x24 0000160a: MSTORE 0000160b: PUSH0 0000160c: PUSH1 0x44 0000160e: PUSH0 0000160f: PUSH0 00001610: PUSH0 00001611: SWAP5 00001612: GAS 00001613: CALL 00001614: ISZERO 00001615: PUSH2 0x19ae 00001618: JUMPI 00001619: DUP2 0000161a: PUSH1 0x1a 0000161c: ADD 0000161d: CALLDATALOAD 0000161e: DUP1 0000161f: PUSH1 0x08 00001621: SHL 00001622: PUSH1 0xe0 00001624: SHR 00001625: SWAP1 00001626: PUSH0 00001627: BYTE 00001628: SHL 00001629: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000 0000164a: PUSH0 0000164b: MSTORE 0000164c: PUSH1 0x04 0000164e: MSTORE 0000164f: PUSH0 00001650: PUSH1 0x24 00001652: MSTORE 00001653: ADDRESS 00001654: PUSH1 0x44 00001656: MSTORE 00001657: PUSH1 0x80 00001659: PUSH1 0x64 0000165b: MSTORE 0000165c: PUSH0 0000165d: PUSH1 0x84 0000165f: MSTORE 00001660: PUSH0 00001661: PUSH1 0xa4 00001663: PUSH0 00001664: PUSH0 00001665: PUSH0 00001666: SWAP5 00001667: GAS 00001668: CALL 00001669: ISZERO 0000166a: PUSH2 0x19ae 0000166d: JUMPI 0000166e: PUSH1 0x33 00001670: ADD 00001671: DUP1 00001672: CALLDATASIZE 00001673: GT 00001674: DUP2 00001675: CALLDATALOAD 00001676: PUSH0 00001677: BYTE 00001678: JUMPI 00001679: STOP 0000167a: JUMPDEST 0000167b: DUP1 0000167c: PUSH1 0x15 0000167e: ADD 0000167f: CALLDATALOAD 00001680: DUP1 00001681: PUSH1 0x08 00001683: SHL 00001684: PUSH1 0xe0 00001686: SHR 00001687: SWAP1 00001688: PUSH0 00001689: BYTE 0000168a: SHL 0000168b: DUP2 0000168c: PUSH1 0x01 0000168e: ADD 0000168f: CALLDATALOAD 00001690: PUSH1 0x60 00001692: SHR 00001693: DUP3 00001694: PUSH1 0x1a 00001696: ADD 00001697: CALLDATALOAD 00001698: PUSH1 0x60 0000169a: SHR 0000169b: PUSH32 0xb6f9de9500000000000000000000000000000000000000000000000000000000 000016bc: PUSH0 000016bd: MSTORE 000016be: PUSH0 000016bf: PUSH1 0x04 000016c1: MSTORE 000016c2: PUSH1 0x80 000016c4: PUSH1 0x24 000016c6: MSTORE 000016c7: ADDRESS 000016c8: PUSH1 0x44 000016ca: MSTORE 000016cb: TIMESTAMP 000016cc: PUSH1 0x64 000016ce: MSTORE 000016cf: PUSH1 0x02 000016d1: PUSH1 0x84 000016d3: MSTORE 000016d4: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000016e9: PUSH1 0xa4 000016eb: MSTORE 000016ec: PUSH1 0xc4 000016ee: MSTORE 000016ef: PUSH1 0xe4 000016f1: PUSH0 000016f2: PUSH0 000016f3: SWAP4 000016f4: PUSH0 000016f5: SWAP4 000016f6: GAS 000016f7: CALL 000016f8: ISZERO 000016f9: PUSH2 0x19ae 000016fc: JUMPI 000016fd: PUSH1 0x2e 000016ff: ADD 00001700: DUP1 00001701: CALLDATASIZE 00001702: GT 00001703: DUP2 00001704: CALLDATALOAD 00001705: PUSH0 00001706: BYTE 00001707: JUMPI 00001708: STOP 00001709: JUMPDEST 0000170a: DUP1 0000170b: PUSH1 0x2e 0000170d: ADD 0000170e: CALLDATALOAD 0000170f: DUP1 00001710: PUSH1 0x08 00001712: SHL 00001713: PUSH1 0xe0 00001715: SHR 00001716: SWAP1 00001717: PUSH0 00001718: BYTE 00001719: SHL 0000171a: DUP2 0000171b: PUSH1 0x01 0000171d: ADD 0000171e: CALLDATALOAD 0000171f: PUSH1 0x60 00001721: SHR 00001722: DUP3 00001723: PUSH1 0x1a 00001725: ADD 00001726: CALLDATALOAD 00001727: PUSH1 0x60 00001729: SHR 0000172a: DUP4 0000172b: PUSH1 0x15 0000172d: ADD 0000172e: CALLDATALOAD 0000172f: DUP1 00001730: PUSH1 0x08 00001732: SHL 00001733: PUSH1 0xe0 00001735: SHR 00001736: SWAP1 00001737: PUSH0 00001738: BYTE 00001739: SHL 0000173a: DUP2 0000173b: DUP2 0000173c: DUP5 0000173d: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 0000175e: PUSH0 0000175f: MSTORE 00001760: PUSH1 0x04 00001762: MSTORE 00001763: PUSH1 0x24 00001765: MSTORE 00001766: PUSH0 00001767: PUSH1 0x44 00001769: PUSH0 0000176a: PUSH0 0000176b: PUSH0 0000176c: SWAP5 0000176d: GAS 0000176e: CALL 0000176f: ISZERO 00001770: PUSH2 0x19ae 00001773: JUMPI 00001774: PUSH32 0x791ac94700000000000000000000000000000000000000000000000000000000 00001795: PUSH0 00001796: MSTORE 00001797: PUSH1 0x04 00001799: MSTORE 0000179a: PUSH0 0000179b: PUSH1 0x24 0000179d: MSTORE 0000179e: PUSH1 0xa0 000017a0: PUSH1 0x44 000017a2: MSTORE 000017a3: ADDRESS 000017a4: PUSH1 0x64 000017a6: MSTORE 000017a7: TIMESTAMP 000017a8: PUSH1 0x84 000017aa: MSTORE 000017ab: PUSH1 0x02 000017ad: PUSH1 0xa4 000017af: MSTORE 000017b0: PUSH1 0xc4 000017b2: MSTORE 000017b3: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000017c8: PUSH1 0xe4 000017ca: MSTORE 000017cb: PUSH2 0x0104 000017ce: PUSH0 000017cf: PUSH0 000017d0: SWAP4 000017d1: PUSH0 000017d2: SWAP4 000017d3: GAS 000017d4: CALL 000017d5: ISZERO 000017d6: PUSH2 0x19ae 000017d9: JUMPI 000017da: PUSH1 0x33 000017dc: ADD 000017dd: DUP1 000017de: CALLDATASIZE 000017df: GT 000017e0: DUP2 000017e1: CALLDATALOAD 000017e2: PUSH0 000017e3: BYTE 000017e4: JUMPI 000017e5: STOP 000017e6: JUMPDEST 000017e7: SELFBALANCE 000017e8: ORIGIN 000017e9: PUSH0 000017ea: PUSH0 000017eb: PUSH0 000017ec: SWAP4 000017ed: PUSH0 000017ee: SWAP4 000017ef: GAS 000017f0: CALL 000017f1: ISZERO 000017f2: PUSH2 0x19ae 000017f5: JUMPI 000017f6: PUSH1 0x01 000017f8: ADD 000017f9: DUP1 000017fa: CALLDATASIZE 000017fb: GT 000017fc: DUP2 000017fd: CALLDATALOAD 000017fe: PUSH0 000017ff: BYTE 00001800: JUMPI 00001801: STOP 00001802: JUMPDEST 00001803: DUP1 00001804: PUSH1 0x01 00001806: ADD 00001807: CALLDATALOAD 00001808: PUSH1 0x60 0000180a: SHR 0000180b: DUP2 0000180c: PUSH1 0x15 0000180e: ADD 0000180f: CALLDATALOAD 00001810: ORIGIN 00001811: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001832: PUSH0 00001833: MSTORE 00001834: PUSH1 0x04 00001836: MSTORE 00001837: PUSH1 0x24 00001839: MSTORE 0000183a: PUSH0 0000183b: PUSH1 0x44 0000183d: PUSH0 0000183e: PUSH0 0000183f: PUSH0 00001840: SWAP5 00001841: GAS 00001842: CALL 00001843: ISZERO 00001844: PUSH2 0x19ae 00001847: JUMPI 00001848: PUSH1 0x35 0000184a: ADD 0000184b: DUP1 0000184c: CALLDATASIZE 0000184d: GT 0000184e: DUP2 0000184f: CALLDATALOAD 00001850: PUSH0 00001851: BYTE 00001852: JUMPI 00001853: STOP 00001854: JUMPDEST 00001855: DUP1 00001856: PUSH1 0x01 00001858: ADD 00001859: CALLDATALOAD 0000185a: DUP1 0000185b: PUSH1 0x08 0000185d: SHL 0000185e: PUSH1 0xe0 00001860: SHR 00001861: SWAP1 00001862: PUSH0 00001863: BYTE 00001864: SHL 00001865: COINBASE 00001866: PUSH0 00001867: PUSH0 00001868: PUSH0 00001869: SWAP4 0000186a: PUSH0 0000186b: SWAP4 0000186c: GAS 0000186d: CALL 0000186e: ISZERO 0000186f: PUSH2 0x19ae 00001872: JUMPI 00001873: PUSH1 0x06 00001875: ADD 00001876: DUP1 00001877: CALLDATASIZE 00001878: GT 00001879: DUP2 0000187a: CALLDATALOAD 0000187b: PUSH0 0000187c: BYTE 0000187d: JUMPI 0000187e: STOP 0000187f: JUMPDEST 00001880: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001895: ADDRESS 00001896: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 000018b7: PUSH0 000018b8: MSTORE 000018b9: PUSH1 0x04 000018bb: MSTORE 000018bc: PUSH0 000018bd: PUSH1 0x24 000018bf: PUSH0 000018c0: PUSH0 000018c1: PUSH1 0x20 000018c3: SWAP5 000018c4: GAS 000018c5: CALL 000018c6: ISZERO 000018c7: PUSH2 0x19ae 000018ca: JUMPI 000018cb: PUSH0 000018cc: MLOAD 000018cd: DUP1 000018ce: DUP3 000018cf: PUSH1 0x01 000018d1: ADD 000018d2: CALLDATALOAD 000018d3: DUP1 000018d4: PUSH1 0x08 000018d6: SHL 000018d7: PUSH1 0xe0 000018d9: SHR 000018da: SWAP1 000018db: PUSH0 000018dc: BYTE 000018dd: SHL 000018de: GT 000018df: PUSH2 0x19b3 000018e2: JUMPI 000018e3: STOP 000018e4: JUMPDEST 000018e5: PUSH32 0xd0e30db000000000000000000000000000000000000000000000000000000000 00001906: PUSH0 00001907: MSTORE 00001908: PUSH0 00001909: PUSH0 0000190a: PUSH1 0x04 0000190c: PUSH0 0000190d: DUP5 0000190e: PUSH1 0x01 00001910: ADD 00001911: CALLDATALOAD 00001912: DUP1 00001913: PUSH1 0x08 00001915: SHL 00001916: PUSH1 0xe0 00001918: SHR 00001919: SWAP1 0000191a: PUSH0 0000191b: BYTE 0000191c: SHL 0000191d: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001932: GAS 00001933: CALL 00001934: ISZERO 00001935: PUSH2 0x19ae 00001938: JUMPI 00001939: PUSH1 0x06 0000193b: ADD 0000193c: DUP1 0000193d: CALLDATASIZE 0000193e: GT 0000193f: DUP2 00001940: CALLDATALOAD 00001941: PUSH0 00001942: BYTE 00001943: JUMPI 00001944: STOP 00001945: JUMPDEST 00001946: PUSH32 0x2e1a7d4d00000000000000000000000000000000000000000000000000000000 00001967: PUSH0 00001968: MSTORE 00001969: DUP1 0000196a: PUSH1 0x01 0000196c: ADD 0000196d: CALLDATALOAD 0000196e: DUP1 0000196f: PUSH1 0x08 00001971: SHL 00001972: PUSH1 0xe0 00001974: SHR 00001975: SWAP1 00001976: PUSH0 00001977: BYTE 00001978: SHL 00001979: PUSH1 0x04 0000197b: MSTORE 0000197c: PUSH0 0000197d: PUSH0 0000197e: PUSH1 0x24 00001980: PUSH0 00001981: PUSH0 00001982: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001997: GAS 00001998: CALL 00001999: ISZERO 0000199a: PUSH2 0x19ae 0000199d: JUMPI 0000199e: PUSH1 0x06 000019a0: ADD 000019a1: DUP1 000019a2: CALLDATASIZE 000019a3: GT 000019a4: DUP2 000019a5: CALLDATALOAD 000019a6: PUSH0 000019a7: BYTE 000019a8: JUMPI 000019a9: STOP 000019aa: JUMPDEST 000019ab: PUSH0 000019ac: PUSH0 000019ad: REVERT 000019ae: JUMPDEST 000019af: PUSH1 0x04 000019b1: PUSH0 000019b2: REVERT 000019b3: JUMPDEST 000019b4: PUSH0 000019b5: MSTORE 000019b6: PUSH1 0x20 000019b8: PUSH0 000019b9: REVERT 000019ba: JUMPDEST 000019bb: STOP 000019bc: JUMPDEST 000019bd: PUSH32 0x439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9 000019de: PUSH0 000019df: MSTORE 000019e0: PUSH1 0x20 000019e2: PUSH0 000019e3: RETURN 000019e4: JUMPDEST 000019e5: PUSH0 000019e6: MSTORE 000019e7: PUSH1 0x20 000019e9: PUSH0 000019ea: RETURN 000019eb: JUMPDEST 000019ec: PUSH0 000019ed: MSTORE 000019ee: PUSH1 0x20 000019f0: MSTORE 000019f1: PUSH1 0x40 000019f3: MSTORE 000019f4: PUSH1 0x60 000019f6: MSTORE 000019f7: PUSH1 0x80 000019f9: MSTORE 000019fa: PUSH1 0xa0 000019fc: MSTORE 000019fd: PUSH1 0xc0 000019ff: MSTORE 00001a00: PUSH1 0xe0 00001a02: PUSH0 00001a03: RETURN 00001a04: JUMPDEST 00001a05: MSIZE 00001a06: PUSH0 00001a07: RETURN
| 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": "0x",
"selector": "fallback",
"calldata_variants": [
"0x"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 22,
"type": "msg_sender_eq_const",
"value": 1.1263541648644118e+48
},
{
"pc": 1920,
"type": "msg_sender_eq_const",
"value": 5.5065594205696735e+47
},
{
"pc": 1929,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 6120,
"type": "tx_origin_used"
},
{
"pc": 6160,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b
call_targets:
0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f"
],
"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": "0x",
"selector": "fallback",
"calldata_variants": [
"0x"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 232,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1879,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "constant_zero",
"target_expression_category": "computed"
},
{
"pc": 2327,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "constant_zero",
"target_expression_category": "computed"
}
],
"call_count": 59,
"guards_detected": [
{
"pc": 22,
"type": "msg_sender_eq_const",
"value": 1.1263541648644118e+48
},
{
"pc": 1920,
"type": "msg_sender_eq_const",
"value": 5.5065594205696735e+47
},
{
"pc": 1929,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 6120,
"type": "tx_origin_used"
},
{
"pc": 6160,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 6
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b
call_targets:
0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f"
],
"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": "0x",
"selector": "fallback",
"calldata_variants": [
"0x"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 232,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5879,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "constant",
"target_expression_category": "constant"
},
{
"pc": 6100,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "constant",
"target_expression_category": "constant"
}
],
"eth_value_calls": 6,
"guards_detected": [
{
"pc": 22,
"type": "msg_sender_eq_const",
"value": 1.1263541648644118e+48
},
{
"pc": 1920,
"type": "msg_sender_eq_const",
"value": 5.5065594205696735e+47
},
{
"pc": 1929,
"type": "msg_sender_eq_const",
"value": 0
},
{
"pc": 6120,
"type": "tx_origin_used"
},
{
"pc": 6160,
"type": "tx_origin_used"
}
]
}
|
| low | other | codex | Payouts/sweeps use tx.origin as recipient | 65 | no | — |
viewevidence_json{
"evidence": "Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.",
"exploit_scenario": "If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer\u2019s EOA when the router holds leftover ETH/tokens."
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 59
}
|