d1286134-7700-419d-830f-190a774ff945
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 |
|---|---|---|---|---|
| 31620 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 111518 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 111519 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 111520 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 111521 | capability.graph | complete | 1 / 3 | 1 week ago |
| 111522 | detector.run | complete | 1 / 3 | 1 week ago |
| 111523 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1519865] OpenAI Codex v0.77.0 (research preview)
[codex:1519865] --------
[codex:1519865] workdir: /tmp/codex-multi-fas47c04
[codex:1519865] model: gpt-5.2-codex
[codex:1519865] provider: openai
[codex:1519865] approval: never
[codex:1519865] sandbox: read-only
[codex:1519865] reasoning effort: xhigh
[codex:1519865] reasoning summaries: auto
[codex:1519865] session id: 019b8859-f1aa-77c2-b734-e21432f25e75
[codex:1519865] --------
[codex:1519865] user
[codex:1519865] You are a profit-focused exploit hunter analyzing EVM bytecode. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:1519865]
[codex:1519865] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1519865]
[codex:1519865] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1519865] - Gas inefficiency, code quality, or best practices
[codex:1519865] - Theoretical vulnerabilities without a clear extraction path
[codex:1519865] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1519865] - Issues requiring social engineering or off-chain coordination
[codex:1519865]
[codex:1519865] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1519865] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1519865] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1519865] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1519865] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1519865] - External calls before state updates (reentrancy)
[codex:1519865] - SELFDESTRUCT with controllable beneficiary
[codex:1519865] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1519865]
[codex:1519865] For each finding, you MUST explain:
[codex:1519865] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1519865] 2. The concrete sequence of transactions to extract value
[codex:1519865] 3. Why you believe this is exploitable (not just suspicious)
[codex:1519865]
[codex:1519865] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1519865] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1519865]
[codex:1519865] Output MUST be valid JSON matching the provided schema.
[codex:1519865] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1519865] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1519865] mcp startup: no servers
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Reviewing instructions and BYTECODE_BUNDLE**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc ls in /tmp/codex-multi-fas47c04 succeeded in 6ms:
[codex:1519865] BYTECODE_BUNDLE.txt
[codex:1519865] codex-output-schema.json
[codex:1519865] exec
[codex:1519865] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-fas47c04 succeeded in 5ms:
[codex:1519865] Runtime bytecode bundle for best-effort auditing.
[codex:1519865] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1519865]
[codex:1519865] FILE: runtime_bytecode.hex
[codex:1519865] 0x608060405260043610610173575f3560e01c80636fefbbc2116100ca578063c311d0491161007e578063eed2f25211610058578063eed2f2521461043b578063f08a032314610467578063fa461e33146104865761017a565b8063c311d049146103de578063d0ebdbe7146103fd578063d34628cc1461041c5761017a565b80639e281a98116100af5780639e281a9814610362578063bdb25d0e14610381578063bfd79284146103a05761017a565b80636fefbbc2146103245780637580a1bc146103435761017a565b806323a69e751161012c578063481c6a7511610106578063481c6a75146102ba57806351b9b0fa146102e65780636c3bbfd7146103055761017a565b806323a69e751461025d5780632c8958f61461027c57806331f570721461029b5761017a565b80630b58f97d1161015d5780630b58f97d146101c557806313af40351461021a5780631cfed885146102395761017a565b801561019c57806307d47d97146101a65761017a565b3661017a57005b604051365f82375f5f36836002545af43d5f833e80610197573d82fd5b503d81f35b6101a46104a5565b005b3480156101b1575f5ffd5b506101a46101c03660046126eb565b610827565b3480156101d0575f5ffd5b505f546101f09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610225575f5ffd5b506101a461023436600461274d565b6108f0565b348015610244575f5ffd5b506101f0610253366004612776565b63deadbeef015490565b348015610268575f5ffd5b506101a461027736600461278f565b6109bd565b348015610287575f5ffd5b506101a461029636600461278f565b610a13565b3480156102a6575f5ffd5b506101a46102b536600461280b565b610b3e565b3480156102c5575f5ffd5b506001546101f09073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f1575f5ffd5b506101a4610300366004612946565b610c95565b348015610310575f5ffd5b506101a461031f3660046129a6565b610e2c565b34801561032f575f5ffd5b506101a461033e3660046129d9565b610f47565b34801561034e575f5ffd5b506101a461035d3660046129f0565b6110a3565b34801561036d575f5ffd5b506101a461037c366004612a21565b611135565b34801561038c575f5ffd5b506101a461039b366004612946565b6111dd565b3480156103ab575f5ffd5b506103ce6103ba36600461274d565b60036020525f908152604090205460ff1681565b6040519015158152602001610211565b3480156103e9575f5ffd5b506101a46103f83660046129d9565b61135f565b348015610408575f5ffd5b506101a461041736600461274d565b611407565b348015610427575f5ffd5b506101a46104363660046129a6565b6114d5565b348015610446575f5ffd5b506002546101f09073ffffffffffffffffffffffffffffffffffffffff1681565b348015610472575f5ffd5b506101a461048136600461274d565b6115ec565b348015610491575f5ffd5b506101a46104a036600461278f565b6116ba565b335f90815260036020908152604091829020548251808401909352600483527f4d303032000000000000000000000000000000000000000000000000000000009183019190915260ff1661052f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b60405180910390fd5b5060053560601c60193560393560593560f890811c90600435901c5f80808461056c57605a3560f81c9250605b359150607b3560f81c9050610582565b605a3560f81c9250605b359150609b3560f81c90505b7f70a08231000000000000000000000000000000000000000000000000000000005f9081523060045247906020816024818d5afa6105c2573d5f5f3e3d5ffd5b505f80519060018760028111156105db576105db612aa7565b036105f2576105eb888c8c6117d0565b9050610676565b600287600281111561060657610606612aa7565b03610614576105eb886118bc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c696420666c617368457865637574696f6e000000000000000000006044820152606401610526565b80610688575050505050505050505050565b5f86600581111561069b5761069b612aa7565b141580156106a857505f85115b15610739575f6106b98787876118e0565b5090508364e8d4a5100082470101116040518060400160405280600481526020017f4d3031380000000000000000000000000000000000000000000000000000000081525090610736576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50505b7f70a08231000000000000000000000000000000000000000000000000000000005f908152306004526020816024818f5afa610777573d5f5f3e3d5ffd5b505f5160408051808201909152600481527f4d3031340000000000000000000000000000000000000000000000000000000060208201528382116107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5089811115610819575f546108199073ffffffffffffffffffffffffffffffffffffffff8e811691168c8403611b70565b505050505050505050505050565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b506108ec82828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bf192505050565b5050565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a0d848484847f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e27f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c96060611c84565b50505050565b602b82013560f81c6002819003610a7957610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040611c84565b610b37565b8060ff16600503610ad457610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040611c84565b60408051808201825260048082527f4d30323200000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b5050505050565b60408051808201909152600481527f4d3032310000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb1614610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50325f90815260036020908152604091829020548251808401909352600483527f4d303032000000000000000000000000000000000000000000000000000000009183019190915260ff16610c64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50602081015160f81c8063deadbeef0154905060018251035f5f8260218601855af4610a0d576040513d5f823e3d81fd5b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610d1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5060408051808201909152600481527f4d303035000000000000000000000000000000000000000000000000000000006020820152838214610d8a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b83811015610b3757610e24838383818110610daa57610daa612ad4565b9050602002016020810190610dbf919061274d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff878785818110610df257610df2612ad4565b9050602002016020810190610e07919061274d565b73ffffffffffffffffffffffffffffffffffffffff169190611e9c565b600101610d8d565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610eb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b81811015610f42575f60035f858585818110610ed357610ed3612ad4565b9050602002016020810190610ee8919061274d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610eb5565b505050565b60015460408051808201909152600481527f4d3030330000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f805460405173ffffffffffffffffffffffffffffffffffffffff9091169083905b5f6040518083038185875af1925050503d805f811461102b576040519150601f19603f3d011682016040523d82523d5f602084013e611030565b606091505b50509050806040518060400160405280600481526020017f4d3030340000000000000000000000000000000000000000000000000000000081525090610f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5063deadbeef90910155565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b506108ec73ffffffffffffffffffffffffffffffffffffffff83163383611b70565b60015460408051808201909152600481527f4d3030330000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611264576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5060408051808201909152600481527f4d3030350000000000000000000000000000000000000000000000000000000060208201528382146112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b83811015610b37575f546113579073ffffffffffffffffffffffffffffffffffffffff1684848481811061130c5761130c612ad4565b9050602002013587878581811061132557611325612ad4565b905060200201602081019061133a919061274d565b73ffffffffffffffffffffffffffffffffffffffff169190611b70565b6001016112d6565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f3373ffffffffffffffffffffffffffffffffffffffff1682604051610ff1565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461148d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461155b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b81811015610f4257600160035f85858581811061157d5761157d612ad4565b9050602002016020810190611592919061274d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560010161155e565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b602b82013560f81c5f81900361171a57610a74858585857fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b547f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846060611c84565b8060ff1660030361177557610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006060611c84565b8060ff16600403610ad457610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006060611c84565b5f60608160ff86166117ee576117e4611f73565b90925090506117fc565b6117f66120b0565b90925090505b8061180b575f925050506118b5565b6040517fe0232b4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb169063e0232b429061188190889088908790600401612b01565b5f604051808303815f87803b158015611898575f5ffd5b505af11580156118aa573d5f5f3e3d5ffd5b505050506001925050505b9392505050565b5f60ff82166118d3576118cd612221565b92915050565b6118cd612365565b919050565b5f808061191060ff7f00000000000000000000000000000000000000000000000000000000000000031647612b3e565b905060ff84166119c957808511156119c1576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018690528592507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906024015f604051808303815f87803b1580156119aa575f5ffd5b505af11580156119bc573d5f5f3e3d5ffd5b505050505b8492506119d9565b808511156119d5578094505b8492505b5f60018760058111156119ee576119ee612aa7565b036119fa575041611b5d565b6002876005811115611a0e57611a0e612aa7565b03611a3a57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b6003876005811115611a4e57611a4e612aa7565b03611a7a57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b6004876005811115611a8e57611a8e612aa7565b03611aba57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b6005876005811115611ace57611ace612aa7565b03611afa57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b60408051808201825260048082527f4d30313600000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b5f5f5f5f89855af1505050935093915050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052610f4291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612597565b5f5b81518110156108ec575f611c078383612636565b90505f611c2184611c19856014612b76565b016020015190565b90505f611c3385611c19866034612b76565b90505f611c4c86611c45876054612b76565b0160200190565b90505f5f838386886113885a03f180611c63575f5ffd5b50611c6f826054612b76565b611c799086612b76565b945050505050611bf3565b6040518535606090811c91601488013590911c90602888013560e81c90602c89013560f81c905f9084861060018114611cc557858252866020830152611ccf565b8682528560208301525b5060608703611cdf578360408201525b8681207fff000000000000000000000000000000000000000000000000000000000000008252606089901b60018301526015820152603581018990526055902060408051808201909152600481527f4d30313100000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169150338214611da7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5f8d13611db6578b611db8565b8c5b90508215611e455763deadbeef602d8c013560f81c01546040517f39f85306000000000000000000000000000000000000000000000000000000008152602e8d0191907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28d01808460048401375f5f6004830184865af4611e405760405193503d5f853e3d84fd5b505050505b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081528260048201528160248201525f5f6044835f8b5af1611e8c573d5f823e3d81fd5b5050505050505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611f288482612650565b610a0d5760405173ffffffffffffffffffffffffffffffffffffffff84811660248301525f6044830152611f6991869182169063095ea7b390606401611baa565b610a0d8482612597565b63deadbeef5460408051367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf810182528082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf019092526060925f926001918491605a803560f81c92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa60185605960208901377c0100000000000000000000000000000000000000000000000000000000602188015260146005602589013780826039890137836120655760205f6019830160218a015f875af16120605760405191503d5f833e3d82fd5b5f5194505b505050602584015160201c7c0200000000000000000000000000000000000000000000000000000000176021850152808061209d5750815b6120a5575f92505b509194909350915050565b60605f5f5f5f5f5f6060600163deadbeef0154605a3560f81c9650607b359450609c35935060bc3560f81c9250605a3603600481016040850260c00180600101820160405195508086528060208701016040525060016020860153806021017c01000000000000000000000000000000000000000000000000000000008187015283605a836025018801375f5f84838901885af46121555760405193503d5f853e3d84fd5b50505050503d7c02000000000000000000000000000000000000000000000000000000006021830152806025830152805f604584013e50604581015194508284860312156122135785156122065760408051808201825260048082527f4d30313400000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b975f975095505050505050565b976001975095505050505050565b5f605a803560f81c9060053560601c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63601607c35846122c8575f5f63deadbeef01546040517c010000000000000000000000000000000000000000000000000000000081528660048201528486601883013760205f6018870183855af46122af576040513d5f823e3d81fd5b50505f519050806122c6575f965050505050505090565b505b63deadbeef546040517fff0f2b9a000000000000000000000000000000000000000000000000000000008152609c91906003609d3560f01c01808460048401375f8160040183015388816005018301538760601b816006018301528481601a01830152808401360381850182603a01840137505f5f603a8536030183855af4612356576040513d5f823e3d81fd5b50506001965050505050505090565b5f606061239160405180608001604052805f151581526020015f81526020015f81526020015f81525090565b5f5f5f5f605a3560f81c8552609c356020860152607b35604086015260bc3560f81c935060bd90508036039150600181013560f01c9250600383019250604051955083604002820161010601808701604052505f5f5f5f5f605a91508136039050600163deadbeef01546040517c01000000000000000000000000000000000000000000000000000000008152828460048301375f5f6004850183855af461243e576040513d5f823e3d81fd5b50503d9450876045018b01858152855f602083013e602081015160608c015260a0810151945060808101516020810260c0018201519450505089602001518a604001518b60600151031215612508578951156124f75760408051808201825260048082527f4d30313400000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b5f9b50505050505050505050505090565b600163deadbeef01547fff0f2b9a000000000000000000000000000000000000000000000000000000008c528460048d01528360248d0152888760448e01376001896044018d015389868a016065018d0153888803898801878b016066018e01375f5f606688018a018e845af4612584576040513d5f823e3d81fd5b5060019b50505050505050505050505090565b5f5f60205f8451602086015f885af1806125b6576040513d5f823e3d81fd5b50505f513d915081156125cd5780600114156125e7565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610a0d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610526565b5f5f6126458484016020015190565b60601c949350505050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561269c57508115612681578060011461269c565b5f8673ffffffffffffffffffffffffffffffffffffffff163b115b9695505050505050565b5f5f83601f8401126126b6575f5ffd5b50813567ffffffffffffffff8111156126cd575f5ffd5b6020830191508360208285010111156126e4575f5ffd5b9250929050565b5f5f602083850312156126fc575f5ffd5b823567ffffffffffffffff811115612712575f5ffd5b61271e858286016126a6565b90969095509350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146118db575f5ffd5b5f6020828403121561275d575f5ffd5b6118b58261272a565b803560ff811681146118db575f5ffd5b5f60208284031215612786575f5ffd5b6118b582612766565b5f5f5f5f606085870312156127a2575f5ffd5b8435935060208501359250604085013567ffffffffffffffff8111156127c6575f5ffd5b6127d2878288016126a6565b95989497509550505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f6040838503121561281c575f5ffd5b82359150602083013567ffffffffffffffff811115612839575f5ffd5b8301601f81018513612849575f5ffd5b803567ffffffffffffffff811115612863576128636127de565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156128cf576128cf6127de565b6040528181528282016020018710156128e6575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112612915575f5ffd5b50813567ffffffffffffffff81111561292c575f5ffd5b6020830191508360208260051b85010111156126e4575f5ffd5b5f5f5f5f60408587031215612959575f5ffd5b843567ffffffffffffffff81111561296f575f5ffd5b61297b87828801612905565b909550935050602085013567ffffffffffffffff81111561299a575f5ffd5b6127d287828801612905565b5f5f602083850312156129b7575f5ffd5b823567ffffffffffffffff8111156129cd575f5ffd5b61271e85828601612905565b5f602082840312156129e9575f5ffd5b5035919050565b5f5f60408385031215612a01575f5ffd5b612a0a83612766565b9150612a186020840161272a565b90509250929050565b5f5f60408385031215612a32575f5ffd5b612a3b8361272a565b946020939093013593505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6118b56020830184612a49565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f612b356060830184612a49565b95945050505050565b5f82612b71577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156118cd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing bytecode for exploit paths**
[codex:1519865]
[codex:1519865] I'm carefully inspecting the contract bytecode to identify any unprotected delegatecalls or external calls that could lead to unauthorized token or ETH transfers. I’m focusing on the dispatch table, fallback logic, access controls, and whether storage slots controlling the implementation address can be altered without ownership checks, all to find a concrete exploit route.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import binascii, re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] # extract hex after 0x
[codex:1519865] m=re.search(r'0x[0-9a-fA-F]+',hexdata)
[codex:1519865] code=bytes.fromhex(m.group(0)[2:])
[codex:1519865] # opcode map
[codex:1519865] opcodes={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 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:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] # disassemble and record offsets of call-like opcodes
[codex:1519865] call_ops={'CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT'}
[codex:1519865] idx=0
[codex:1519865] call_offsets=[]
[codex:1519865] while idx < len(code):
[codex:1519865] op=code[idx]
[codex:1519865] name=opcodes.get(op,'UNKNOWN')
[codex:1519865] if name in call_ops:
[codex:1519865] call_offsets.append((idx,name))
[codex:1519865] if 0x60 <= op <= 0x7f:
[codex:1519865] n=op-0x5f
[codex:1519865] idx += 1+n
[codex:1519865] continue
[codex:1519865] idx += 1
[codex:1519865]
[codex:1519865] print('code size',len(code))
[codex:1519865] print('call ops count',len(call_offsets))
[codex:1519865] print('first 20 call ops',call_offsets[:20])
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 29ms:
[codex:1519865] code size 11182
[codex:1519865] call ops count 19
[codex:1519865] first 20 call ops [(394, 'DELEGATECALL'), (1462, 'STATICCALL'), (1899, 'STATICCALL'), (3206, 'DELEGATECALL'), (4093, 'CALL'), (6299, 'CALL'), (6573, 'CALL'), (7013, 'CALL'), (7258, 'CALL'), (7727, 'DELEGATECALL'), (7808, 'CALL'), (8271, 'CALL'), (8516, 'DELEGATECALL'), (8864, 'DELEGATECALL'), (9031, 'DELEGATECALL'), (9263, 'DELEGATECALL'), (9589, 'DELEGATECALL'), (9638, 'CALL'), (9825, 'CALL')]
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing contract function boundaries and access controls**
[codex:1519865]
[codex:1519865] I'm working on mapping function boundaries and disassembling near call instructions to find suspicious external calls. I want to detect owner checks by spotting SLOAD at slot 0 and CALLER comparisons, and identify functions without access restrictions that might allow unauthorized ETH or token transfers. I'll script this analysis using Python to parse function selectors and disassemble EVM bytecode around jump destinations, aiming to uncover vulnerabilities related to delegatecalls or token transfers.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc 'which evm || true' in /tmp/codex-multi-fas47c04 succeeded in 6ms:
[codex:1519865]
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Planning Python script for call disassembly**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import binascii, re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # opcode map
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 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:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865]
[codex:1519865] # decode into list of (offset, op, immbytes)
[codex:1519865] ops=[]
[codex:1519865] i=0
[codex:1519865] while i < len(code):
[codex:1519865] off=i
[codex:1519865] opcode=code[i]
[codex:1519865] name=op.get(opcode,'UNKNOWN')
[codex:1519865] i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60 <= opcode <= 0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]
[codex:1519865] i+=n
[codex:1519865] ops.append((off,name,imm))
[codex:1519865]
[codex:1519865] # index by offset
[codex:1519865] op_index={off:idx for idx,(off,_,_) in enumerate(ops)}
[codex:1519865]
[codex:1519865] # find call-like
[codex:1519865] call_ops={'CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT'}
[codex:1519865] call_offsets=[off for off,name,_ in ops if name in call_ops]
[codex:1519865]
[codex:1519865] # print around each
[codex:1519865] for off in call_offsets:
[codex:1519865] idx=op_index[off]
[codex:1519865] start=max(0,idx-8)
[codex:1519865] end=min(len(ops),idx+8)
[codex:1519865] print('\\n---- around offset',off,'----')
[codex:1519865] for off2,name,imm in ops[start:end]:
[codex:1519865] immhex=imm.hex()
[codex:1519865] if imm:
[codex:1519865] print(f'{off2:04x}: {name} 0x{immhex}')
[codex:1519865] else:
[codex:1519865] print(f'{off2:04x}: {name}')
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 31ms:
[codex:1519865]
[codex:1519865] ---- around offset 394 ----
[codex:1519865] 0181: CALLDATACOPY
[codex:1519865] 0182: UNKNOWN
[codex:1519865] 0183: UNKNOWN
[codex:1519865] 0184: CALLDATASIZE
[codex:1519865] 0185: DUP4
[codex:1519865] 0186: PUSH1 0x02
[codex:1519865] 0188: SLOAD
[codex:1519865] 0189: GAS
[codex:1519865] 018a: DELEGATECALL
[codex:1519865] 018b: RETURNDATASIZE
[codex:1519865] 018c: UNKNOWN
[codex:1519865] 018d: DUP4
[codex:1519865] 018e: RETURNDATACOPY
[codex:1519865] 018f: DUP1
[codex:1519865] 0190: PUSH2 0x0197
[codex:1519865] 0193: JUMPI
[codex:1519865]
[codex:1519865] ---- around offset 1462 ----
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing delegatecall targets and opcode mapping**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # map
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 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:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865]
[codex:1519865] # decode ops list
[codex:1519865] ops=[]
[codex:1519865] i=0
[codex:1519865] while i<len(code):
[codex:1519865] off=i
[codex:1519865] opcode=code[i]
[codex:1519865] i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]
[codex:1519865] i+=n
[codex:1519865] ops.append((off,opcode,imm))
[codex:1519865]
[codex:1519865] # show unknown count
[codex:1519865] unknown=[(off,opcode) for off,opcode,_ in ops if opcode not in op]
[codex:1519865] print('unknown opcode count',len(unknown))
[codex:1519865] print('unique unknown',sorted(set(opc for _,opc in unknown))[:10])
[codex:1519865] # show few unknown occurrences
[codex:1519865] for off,opc in unknown[:20]:
[codex:1519865] print(f'0x{off:04x}: 0x{opc:02x}')
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 30ms:
[codex:1519865] unknown opcode count 300
[codex:1519865] unique unknown [94, 95]
[codex:1519865] 0x000d: 0x5f
[codex:1519865] 0x017f: 0x5f
[codex:1519865] 0x0182: 0x5f
[codex:1519865] 0x0183: 0x5f
[codex:1519865] 0x018c: 0x5f
[codex:1519865] 0x01ae: 0x5f
[codex:1519865] 0x01af: 0x5f
[codex:1519865] 0x01cd: 0x5f
[codex:1519865] 0x01ce: 0x5f
[codex:1519865] 0x01d2: 0x5f
[codex:1519865] 0x0222: 0x5f
[codex:1519865] 0x0223: 0x5f
[codex:1519865] 0x0241: 0x5f
[codex:1519865] 0x0242: 0x5f
[codex:1519865] 0x0265: 0x5f
[codex:1519865] 0x0266: 0x5f
[codex:1519865] 0x0284: 0x5f
[codex:1519865] 0x0285: 0x5f
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Updating opcode mappings for new instructions**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865]
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] # decode ops list
[codex:1519865] ops=[]
[codex:1519865] i=0
[codex:1519865] while i<len(code):
[codex:1519865] off=i
[codex:1519865] opcode=code[i]
[codex:1519865] i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]
[codex:1519865] i+=n
[codex:1519865] ops.append((off,opcode,imm))
[codex:1519865]
[codex:1519865] op_index={off:idx for idx,(off,_,_) in enumerate(ops)}
[codex:1519865] call_ops={'CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT'}
[codex:1519865] call_offsets=[off for off,opc,_ in ops if op.get(opc,'') in call_ops]
[codex:1519865]
[codex:1519865] for off in call_offsets:
[codex:1519865] idx=op_index[off]
[codex:1519865] start=max(0,idx-10)
[codex:1519865] end=min(len(ops),idx+10)
[codex:1519865] print('\\n---- around offset',hex(off),'----')
[codex:1519865] for off2,opc,imm in ops[start:end]:
[codex:1519865] name=op.get(opc,f'0x{opc:02x}')
[codex:1519865] if imm:
[codex:1519865] print(f'{off2:04x}: {name} 0x{imm.hex()}')
[codex:1519865] else:
[codex:1519865] print(f'{off2:04x}: {name}')
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 32ms:
[codex:1519865]
[codex:1519865] ---- around offset 0x18a ----
[codex:1519865] 017f: PUSH0
[codex:1519865] 0180: DUP3
[codex:1519865] 0181: CALLDATACOPY
[codex:1519865] 0182: PUSH0
[codex:1519865] 0183: PUSH0
[codex:1519865] 0184: CALLDATASIZE
[codex:1519865] 0185: DUP4
[codex:1519865] 0186: PUSH1 0x02
[codex:1519865] 0188: SLOAD
[codex:1519865] 0189: GAS
[codex:1519865] 018a: DELEGATECALL
[codex:1519865] 018b: RETURNDATASIZE
[codex:1519865] 018c: PUSH0
[codex:1519865] 018d: DUP4
[codex:1519865] 018e: RETURNDATACOPY
[codex:1519865] 018f: DUP1
[codex:1519865] 0190: PUSH2 0x0197
[codex:1519865] 0193: JUMPI
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing delegatecall targets and ownership checks**
[codex:1519865]
[codex:1519865] I'm digging into how delegatecalls determine their targets by examining surrounding bytecode and stack usage, identifying dynamic address patterns, and considering proxies. At the same time, I'm inspecting function ownership guards using custom error codes like "M001" and parsing the dispatch table to map selectors to functions to find any potentially unrestricted access points. This way, I can piece together which functions might let unauthorized users interact or transfer funds.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # simple scan: look for pattern PUSH4 <sel> EQ PUSH2 <dest> JUMPI
[codex:1519865] # actual pattern: 63 <sel> 14 61 <dest> 57
[codex:1519865] sel_map=[]
[codex:1519865] for i in range(len(code)-8):
[codex:1519865] if code[i]==0x63 and code[i+5]==0x14 and code[i+6]==0x61 and code[i+9]==0x57:
[codex:1519865] sel=code[i+1:i+5].hex()
[codex:1519865] dest=int.from_bytes(code[i+7:i+9], 'big')
[codex:1519865] sel_map.append((sel,dest,i))
[codex:1519865]
[codex:1519865] print('selectors found',len(sel_map))
[codex:1519865] for sel,dest,off in sel_map:
[codex:1519865] print(sel,hex(dest), 'at',hex(off))
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] selectors found 21
[codex:1519865] eed2f252 0x43b at 0x34
[codex:1519865] f08a0323 0x467 at 0x3f
[codex:1519865] fa461e33 0x486 at 0x4a
[codex:1519865] c311d049 0x3de at 0x5a
[codex:1519865] d0ebdbe7 0x3fd at 0x65
[codex:1519865] d34628cc 0x41c at 0x70
[codex:1519865] 9e281a98 0x362 at 0x8b
[codex:1519865] bdb25d0e 0x381 at 0x96
[codex:1519865] bfd79284 0x3a0 at 0xa1
[codex:1519865] 6fefbbc2 0x324 at 0xb1
[codex:1519865] 7580a1bc 0x343 at 0xbc
[codex:1519865] 481c6a75 0x2ba at 0xe2
[codex:1519865] 51b9b0fa 0x2e6 at 0xed
[codex:1519865] 6c3bbfd7 0x305 at 0xf8
[codex:1519865] 23a69e75 0x25d at 0x108
[codex:1519865] 2c8958f6 0x27c at 0x113
[codex:1519865] 31f57072 0x29b at 0x11e
[codex:1519865] 0b58f97d 0x1c5 at 0x139
[codex:1519865] 13af4035 0x21a at 0x144
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Preparing function disassembly script**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865]
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865]
[codex:1519865] def disasm(start, count=40):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] # selectors mapping
[codex:1519865] sel_map=[]
[codex:1519865] for i in range(len(code)-8):
[codex:1519865] if code[i]==0x63 and code[i+5]==0x14 and code[i+6]==0x61 and code[i+9]==0x57:
[codex:1519865] sel=code[i+1:i+5].hex()
[codex:1519865] dest=int.from_bytes(code[i+7:i+9], 'big')
[codex:1519865] sel_map.append((sel,dest))
[codex:1519865]
[codex:1519865] for sel,dest in sel_map:
[codex:1519865] print(f\"\\n== selector {sel} dest 0x{dest:04x} ==\")
[codex:1519865] for off,name,imm in disasm(dest, count=30):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 29ms:
[codex:1519865]
[codex:1519865] == selector eed2f252 dest 0x043b ==
[codex:1519865] 043b: JUMPDEST
[codex:1519865] 043c: CALLVALUE
[codex:1519865] 043d: DUP1
[codex:1519865] 043e: ISZERO
[codex:1519865] 043f: PUSH2 0x0446
[codex:1519865] 0442: JUMPI
[codex:1519865] 0443: PUSH0
[codex:1519865] 0444: PUSH0
[codex:1519865] 0445: REVERT
[codex:1519865] 0446: JUMPDEST
[codex:1519865] 0447: POP
[codex:1519865] 0448: PUSH1 0x02
[codex:1519865] 044a: SLOAD
[codex:1519865] 044b: PUSH2 0x01f0
[codex:1519865] 044e: SWAP1
[codex:1519865] 044f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:1519865] 0464: AND
[codex:1519865] 0465: DUP2
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing internal functions for access control**
[codex:1519865]
[codex:1519865] I'm focusing on the internal functions like 0x0827 and others since the main functions mostly check callvalue and then jump there. I want to see if these internal parts implement access controls, especially owner-only guards, and ensure no critical function is missing protections. The 0x04a5 function might be a fallback or mapping updater, so I'll check that too. Starting with 0x0827 to deeply inspect its disassembly.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865]
[codex:1519865] def disasm(start, count=80):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] # inspect function bodies
[codex:1519865] targets=[0x0827,0x08f0,0x09bd,0x0a13,0x0b3e,0x0c95,0x0e2c,0x0f47,0x10a3,0x1135,0x11dd,0x135f,0x1407,0x14d5,0x15ec,0x16ba,0x04a5]
[codex:1519865] for t in targets:
[codex:1519865] print(f\"\\n== function at 0x{t:04x} ==\")
[codex:1519865] for off,name,imm in disasm(t, count=60):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 29ms:
[codex:1519865]
[codex:1519865] == function at 0x0827 ==
[codex:1519865] 0827: JUMPDEST
[codex:1519865] 0828: PUSH0
[codex:1519865] 0829: SLOAD
[codex:1519865] 082a: PUSH1 0x40
[codex:1519865] 082c: DUP1
[codex:1519865] 082d: MLOAD
[codex:1519865] 082e: DUP1
[codex:1519865] 082f: DUP3
[codex:1519865] 0830: ADD
[codex:1519865] 0831: SWAP1
[codex:1519865] 0832: SWAP2
[codex:1519865] 0833: MSTORE
[codex:1519865] 0834: PUSH1 0x04
[codex:1519865] 0836: DUP2
[codex:1519865] 0837: MSTORE
[codex:1519865] 0838: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
[codex:1519865] 0859: PUSH1 0x20
[codex:1519865] 085b: DUP3
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing function ownership checks**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # find PUSH2 0x04a5 occurrences
[codex:1519865] for i in range(len(code)-2):
[codex:1519865] if code[i]==0x61 and code[i+1]==0x04 and code[i+2]==0xa5:
[codex:1519865] print('PUSH2 0x04a5 at',hex(i))
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] PUSH2 0x04a5 at 0x1a0
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing jump and function offsets**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865]
[codex:1519865] # disassemble around 0x190-0x1b0
[codex:1519865] op={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:1519865] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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',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:1519865]
[codex:1519865] i=0x190
[codex:1519865] end=0x1b5
[codex:1519865] while i<end:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] 0190: PUSH2 0x0197
[codex:1519865] 0193: JUMPI
[codex:1519865] 0194: RETURNDATASIZE
[codex:1519865] 0195: DUP3
[codex:1519865] 0196: REVERT
[codex:1519865] 0197: JUMPDEST
[codex:1519865] 0198: POP
[codex:1519865] 0199: RETURNDATASIZE
[codex:1519865] 019a: DUP2
[codex:1519865] 019b: RETURN
[codex:1519865] 019c: JUMPDEST
[codex:1519865] 019d: PUSH2 0x01a4
[codex:1519865] 01a0: PUSH2 0x04a5
[codex:1519865] 01a3: JUMP
[codex:1519865] 01a4: JUMPDEST
[codex:1519865] 01a5: STOP
[codex:1519865] 01a6: JUMPDEST
[codex:1519865] 01a7: CALLVALUE
[codex:1519865] 01a8: DUP1
[codex:1519865] 01a9: ISZERO
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing fallback and internal function calls**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865]
[codex:1519865] def disasm(start, count=120):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] for off,name,imm in disasm(0x1c84, count=120):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] 1c84: JUMPDEST
[codex:1519865] 1c85: PUSH1 0x40
[codex:1519865] 1c87: MLOAD
[codex:1519865] 1c88: DUP6
[codex:1519865] 1c89: CALLDATALOAD
[codex:1519865] 1c8a: PUSH1 0x60
[codex:1519865] 1c8c: SWAP1
[codex:1519865] 1c8d: DUP2
[codex:1519865] 1c8e: SHR
[codex:1519865] 1c8f: SWAP2
[codex:1519865] 1c90: PUSH1 0x14
[codex:1519865] 1c92: DUP9
[codex:1519865] 1c93: ADD
[codex:1519865] 1c94: CALLDATALOAD
[codex:1519865] 1c95: SWAP1
[codex:1519865] 1c96: SWAP2
[codex:1519865] 1c97: SHR
[codex:1519865] 1c98: SWAP1
[codex:1519865] 1c99: PUSH1 0x28
[codex:1519865] 1c9b: DUP9
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Continuing from previous position**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865] def disasm(start, count=120):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] for off,name,imm in disasm(0x1d69, count=120):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] 1d69: SWAP1
[codex:1519865] 1d6a: SWAP2
[codex:1519865] 1d6b: AND
[codex:1519865] 1d6c: SWAP2
[codex:1519865] 1d6d: POP
[codex:1519865] 1d6e: CALLER
[codex:1519865] 1d6f: DUP3
[codex:1519865] 1d70: EQ
[codex:1519865] 1d71: PUSH2 0x1da7
[codex:1519865] 1d74: JUMPI
[codex:1519865] 1d75: PUSH1 0x40
[codex:1519865] 1d77: MLOAD
[codex:1519865] 1d78: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:1519865] 1d99: DUP2
[codex:1519865] 1d9a: MSTORE
[codex:1519865] 1d9b: PUSH1 0x04
[codex:1519865] 1d9d: ADD
[codex:1519865] 1d9e: PUSH2 0x0526
[codex:1519865] 1da1: SWAP2
[codex:1519865] 1da2: SWAP1
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865] def disasm(start, count=120):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] for off,name,imm in disasm(0x1e78, count=80):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 32ms:
[codex:1519865] 1e78: PUSH0
[codex:1519865] 1e79: PUSH0
[codex:1519865] 1e7a: PUSH1 0x44
[codex:1519865] 1e7c: DUP4
[codex:1519865] 1e7d: PUSH0
[codex:1519865] 1e7e: DUP12
[codex:1519865] 1e7f: GAS
[codex:1519865] 1e80: CALL
[codex:1519865] 1e81: PUSH2 0x1e8c
[codex:1519865] 1e84: JUMPI
[codex:1519865] 1e85: RETURNDATASIZE
[codex:1519865] 1e86: PUSH0
[codex:1519865] 1e87: DUP3
[codex:1519865] 1e88: RETURNDATACOPY
[codex:1519865] 1e89: RETURNDATASIZE
[codex:1519865] 1e8a: DUP2
[codex:1519865] 1e8b: REVERT
[codex:1519865] 1e8c: JUMPDEST
[codex:1519865] 1e8d: POP
[codex:1519865] 1e8e: POP
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Continuing code inspection**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map as before
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865] def disasm(start, count=120):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] for off,name,imm in disasm(0x1f28, count=80):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] 1f28: JUMPDEST
[codex:1519865] 1f29: PUSH2 0x0a0d
[codex:1519865] 1f2c: JUMPI
[codex:1519865] 1f2d: PUSH1 0x40
[codex:1519865] 1f2f: MLOAD
[codex:1519865] 1f30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:1519865] 1f45: DUP5
[codex:1519865] 1f46: DUP2
[codex:1519865] 1f47: AND
[codex:1519865] 1f48: PUSH1 0x24
[codex:1519865] 1f4a: DUP4
[codex:1519865] 1f4b: ADD
[codex:1519865] 1f4c: MSTORE
[codex:1519865] 1f4d: PUSH0
[codex:1519865] 1f4e: PUSH1 0x44
[codex:1519865] 1f50: DUP4
[codex:1519865] 1f51: ADD
[codex:1519865] 1f52: MSTORE
[codex:1519865] 1f53: PUSH2 0x1f69
[codex:1519865] 1f56: SWAP2
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing contract’s callback function logic**
[codex:1519865]
[codex:1519865] I'm digging into the function at 0x1c84, which seems to handle Uniswap V3 callbacks by verifying the caller matches a computed pool address using the create2 formula. This involves decoding calldata, hashing data for address checks, and enforcing that only the expected Uniswap pool can call it, which suggests access control designed to prevent unauthorized calls. I want to confirm whether any open functions let users exploit these callbacks to drain tokens by forcing swaps or flashes through pools the contract controls. I'll also examine if the selectors 0x23a69e75 and 0x2c8958f6 match other Uniswap callback functions to understand vulnerabilities or protections.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] try:
[codex:1519865] import sha3
[codex:1519865] print('sha3 available')
[codex:1519865] print(sha3.keccak_256(b'uniswapV3SwapCallback(int256,int256,bytes)').hexdigest()[:8])
[codex:1519865] except Exception as e:
[codex:1519865] print('sha3 not available',e)
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 16ms:
[codex:1519865] sha3 not available No module named 'sha3'
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing function selectors and callbacks**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] # minimal keccak-256 implementation for selector checks
[codex:1519865] # source: small pure python
[codex:1519865]
[codex:1519865] ROT = [
[codex:1519865] [0, 36, 3, 41, 18],
[codex:1519865] [1, 44, 10, 45, 2],
[codex:1519865] [62, 6, 43, 15, 61],
[codex:1519865] [28, 55, 25, 21, 56],
[codex:1519865] [27, 20, 39, 8, 14]
[codex:1519865] ]
[codex:1519865] RC = [
[codex:1519865] 0x0000000000000001, 0x0000000000008082,
[codex:1519865] 0x800000000000808A, 0x8000000080008000,
[codex:1519865] 0x000000000000808B, 0x0000000080000001,
[codex:1519865] 0x8000000080008081, 0x8000000000008009,
[codex:1519865] 0x000000000000008A, 0x0000000000000088,
[codex:1519865] 0x0000000080008009, 0x000000008000000A,
[codex:1519865] 0x000000008000808B, 0x800000000000008B,
[codex:1519865] 0x8000000000008089, 0x8000000000008003,
[codex:1519865] 0x8000000000008002, 0x8000000000000080,
[codex:1519865] 0x000000000000800A, 0x800000008000000A,
[codex:1519865] 0x8000000080008081, 0x8000000000008080,
[codex:1519865] 0x0000000080000001, 0x8000000080008008,
[codex:1519865] ]
[codex:1519865]
[codex:1519865] def keccak_f(s):
[codex:1519865] # s is 5x5 of 64-bit
[codex:1519865] for rc in RC:
[codex:1519865] # theta
[codex:1519865] C = [s[x][0]"'^s[x][1]''^s[x][2]''^s[x][3]''^s[x][4] for x in range(5)]
[codex:1519865] D = [C[(x-1)%5]''^((C[(x+1)%5] << 1 | C[(x+1)%5] >> (64-1)) & ((1<<64)-1)) for x in range(5)]
[codex:1519865] for x in range(5):
[codex:1519865] for y in range(5):
[codex:1519865] s[x][y] ''^= D[x]
[codex:1519865] # rho+pi
[codex:1519865] B = [[0]*5 for _ in range(5)]
[codex:1519865] for x in range(5):
[codex:1519865] for y in range(5):
[codex:1519865] v = s[x][y]
[codex:1519865] r = ROT[x][y]
[codex:1519865] v = ((v << r) | (v >> (64-r))) & ((1<<64)-1)
[codex:1519865] B[y][(2*x+3*y)%5] = v
[codex:1519865] # chi
[codex:1519865] for x in range(5):
[codex:1519865] for y in range(5):
[codex:1519865] s[x][y] = B[x][y] ''^ ((~B[(x+1)%5][y]) & B[(x+2)%5][y])
[codex:1519865] # iota
[codex:1519865] s[0][0] ''^= rc
[codex:1519865] return s
[codex:1519865]
[codex:1519865] def keccak256(data: bytes) -> bytes:
[codex:1519865] # parameters for keccak-256
[codex:1519865] rate = 1088 // 8
[codex:1519865] capacity = 512 // 8
[codex:1519865] # init state
[codex:1519865] s = [[0]*5 for _ in range(5)]
[codex:1519865] # padding: 0x01 ... 0x80
[codex:1519865] padded = bytearray(data)
[codex:1519865] padded.append(0x01)
[codex:1519865] while (len(padded) % rate) != rate-1:
[codex:1519865] padded.append(0x00)
[codex:1519865] padded.append(0x80)
[codex:1519865] # absorb
[codex:1519865] for off in range(0, len(padded), rate):
[codex:1519865] block = padded[off:off+rate]
[codex:1519865] # xor into state
[codex:1519865] for i in range(0, rate, 8):
[codex:1519865] lane = int.from_bytes(block[i:i+8], '"'little')
[codex:1519865] x = (i//8) % 5
[codex:1519865] y = (i//8) // 5
[codex:1519865] s[x][y] "'^= lane
[codex:1519865] s = keccak_f(s)
[codex:1519865] # squeeze
[codex:1519865] out = bytearray()
[codex:1519865] while len(out) < 32:
[codex:1519865] for i in range(0, rate, 8):
[codex:1519865] lane = s[(i//8)%5][(i//8)//5]
[codex:1519865] out += lane.to_bytes(8, '"'little')
[codex:1519865] if len(out) >= 32:
[codex:1519865] break
[codex:1519865] if len(out) < 32:
[codex:1519865] s = keccak_f(s)
[codex:1519865] return bytes(out[:32])
[codex:1519865]
[codex:1519865] # test: known selector for uniswapV3SwapCallback
[codex:1519865] sig='uniswapV3SwapCallback(int256,int256,bytes)'
[codex:1519865] print('swap callback selector',keccak256(sig.encode()).hex()[:8])
[codex:1519865] # compute flash callback
[codex:1519865] sig2='uniswapV3FlashCallback(uint256,uint256,bytes)'
[codex:1519865] print('flash callback selector',keccak256(sig2.encode()).hex()[:8])
[codex:1519865] # other callbacks
[codex:1519865] sig3='uniswapV2Call(address,uint256,uint256,bytes)'
[codex:1519865] print('uniswapV2Call selector',keccak256(sig3.encode()).hex()[:8])
[codex:1519865]
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 22ms:
[codex:1519865] swap callback selector fa461e33
[codex:1519865] flash callback selector e9cbafb0
[codex:1519865] uniswapV2Call selector 10d1e85c
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing callback selectors**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] # using keccak implemented above
[codex:1519865] ROT=[[0,36,3,41,18],[1,44,10,45,2],[62,6,43,15,61],[28,55,25,21,56],[27,20,39,8,14]]
[codex:1519865] RC=[0x0000000000000001,0x0000000000008082,0x800000000000808A,0x8000000080008000,0x000000000000808B,0x0000000080000001,0x8000000080008081,0x8000000000008009,0x000000000000008A,0x0000000000000088,0x0000000080008009,0x000000008000000A,0x000000008000808B,0x800000000000008B,0x8000000000008089,0x8000000000008003,0x8000000000008002,0x8000000000000080,0x000000000000800A,0x800000008000000A,0x8000000080008081,0x8000000000008080,0x0000000080000001,0x8000000080008008]
[codex:1519865]
[codex:1519865] def keccak_f(s):
[codex:1519865] for rc in RC:
[codex:1519865] C=[s[x][0]"'^s[x][1]''^s[x][2]''^s[x][3]''^s[x][4] for x in range(5)]
[codex:1519865] D=[C[(x-1)%5]''^((C[(x+1)%5]<<1 | C[(x+1)%5]>>(64-1)) & ((1<<64)-1)) for x in range(5)]
[codex:1519865] for x in range(5):
[codex:1519865] for y in range(5):
[codex:1519865] s[x][y]''^=D[x]
[codex:1519865] B=[[0]*5 for _ in range(5)]
[codex:1519865] for x in range(5):
[codex:1519865] for y in range(5):
[codex:1519865] v=s[x][y]
[codex:1519865] r=ROT[x][y]
[codex:1519865] v=((v<<r)|(v>>(64-r))) & ((1<<64)-1)
[codex:1519865] B[y][(2*x+3*y)%5]=v
[codex:1519865] for x in range(5):
[codex:1519865] for y in range(5):
[codex:1519865] s[x][y]=B[x][y]''^((~B[(x+1)%5][y]) & B[(x+2)%5][y])
[codex:1519865] s[0][0]''^=rc
[codex:1519865] return s
[codex:1519865]
[codex:1519865] def keccak256(data: bytes)->bytes:
[codex:1519865] rate=1088//8
[codex:1519865] padded=bytearray(data)
[codex:1519865] padded.append(0x01)
[codex:1519865] while len(padded)%rate != rate-1:
[codex:1519865] padded.append(0)
[codex:1519865] padded.append(0x80)
[codex:1519865] s=[[0]*5 for _ in range(5)]
[codex:1519865] for off in range(0,len(padded),rate):
[codex:1519865] block=padded[off:off+rate]
[codex:1519865] for i in range(0,rate,8):
[codex:1519865] lane=int.from_bytes(block[i:i+8],'"'little')
[codex:1519865] x=(i//8)%5; y=(i//8)//5
[codex:1519865] s[x][y]"'^=lane
[codex:1519865] s=keccak_f(s)
[codex:1519865] out=bytearray()
[codex:1519865] while len(out)<32:
[codex:1519865] for i in range(0,rate,8):
[codex:1519865] lane=s[(i//8)%5][(i//8)//5]
[codex:1519865] out+=lane.to_bytes(8,'"'little')
[codex:1519865] if len(out)>=32:
[codex:1519865] break
[codex:1519865] if len(out)<32:
[codex:1519865] s=keccak_f(s)
[codex:1519865] return bytes(out[:32])
[codex:1519865]
[codex:1519865] sigs=['algebraSwapCallback(int256,int256,bytes)','algebraFlashCallback(uint256,uint256,bytes)','pancakeV3SwapCallback(int256,int256,bytes)','pancakeV3FlashCallback(uint256,uint256,bytes)','ramsesV2SwapCallback(int256,int256,bytes)']
[codex:1519865] for sig in sigs:
[codex:1519865] print(sig, keccak256(sig.encode()).hex()[:8])
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 21ms:
[codex:1519865] algebraSwapCallback(int256,int256,bytes) 2c8958f6
[codex:1519865] algebraFlashCallback(uint256,uint256,bytes) a60b0d3c
[codex:1519865] pancakeV3SwapCallback(int256,int256,bytes) 23a69e75
[codex:1519865] pancakeV3FlashCallback(uint256,uint256,bytes) a1d48336
[codex:1519865] ramsesV2SwapCallback(int256,int256,bytes) 654b6487
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing callback and access restrictions**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865] def disasm(start, count=120):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] for off,name,imm in disasm(0x0f47, count=140):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] 0f47: JUMPDEST
[codex:1519865] 0f48: PUSH1 0x01
[codex:1519865] 0f4a: SLOAD
[codex:1519865] 0f4b: PUSH1 0x40
[codex:1519865] 0f4d: DUP1
[codex:1519865] 0f4e: MLOAD
[codex:1519865] 0f4f: DUP1
[codex:1519865] 0f50: DUP3
[codex:1519865] 0f51: ADD
[codex:1519865] 0f52: SWAP1
[codex:1519865] 0f53: SWAP2
[codex:1519865] 0f54: MSTORE
[codex:1519865] 0f55: PUSH1 0x04
[codex:1519865] 0f57: DUP2
[codex:1519865] 0f58: MSTORE
[codex:1519865] 0f59: PUSH32 0x4d30303300000000000000000000000000000000000000000000000000000000
[codex:1519865] 0f7a: PUSH1 0x20
[codex:1519865] 0f7c: DUP3
[codex:1519865] 0f7d: ADD
[codex:1519865] 0f7e: MSTORE
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing contract storage and access controls**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865]
[codex:1519865] def disasm(start, end):
[codex:1519865] i=start
[codex:1519865] while i < end:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865]
[codex:1519865] # disassemble region around fallback
[codex:1519865] print('--- region 0x0160-0x01b5 ---')
[codex:1519865] disasm(0x0160,0x01b5)
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] --- region 0x0160-0x01b5 ---
[codex:1519865] 0160: PUSH2 0x019c
[codex:1519865] 0163: JUMPI
[codex:1519865] 0164: DUP1
[codex:1519865] 0165: PUSH4 0x07d47d97
[codex:1519865] 016a: EQ
[codex:1519865] 016b: PUSH2 0x01a6
[codex:1519865] 016e: JUMPI
[codex:1519865] 016f: PUSH2 0x017a
[codex:1519865] 0172: JUMP
[codex:1519865] 0173: JUMPDEST
[codex:1519865] 0174: CALLDATASIZE
[codex:1519865] 0175: PUSH2 0x017a
[codex:1519865] 0178: JUMPI
[codex:1519865] 0179: STOP
[codex:1519865] 017a: JUMPDEST
[codex:1519865] 017b: PUSH1 0x40
[codex:1519865] 017d: MLOAD
[codex:1519865] 017e: CALLDATASIZE
[codex:1519865] 017f: PUSH0
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing dispatch jump conditions**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865] def disasm(start, end):
[codex:1519865] i=start
[codex:1519865] while i<end:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865]
[codex:1519865] print('--- 0x0120-0x0165 ---')
[codex:1519865] disasm(0x0120,0x0165)
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] --- 0x0120-0x0165 ---
[codex:1519865] 0120: CREATE2
[codex:1519865] 0121: PUSH17 0x721461029b5761017a565b80630b58f97d
[codex:1519865] 0133: GT
[codex:1519865] 0134: PUSH2 0x015d
[codex:1519865] 0137: JUMPI
[codex:1519865] 0138: DUP1
[codex:1519865] 0139: PUSH4 0x0b58f97d
[codex:1519865] 013e: EQ
[codex:1519865] 013f: PUSH2 0x01c5
[codex:1519865] 0142: JUMPI
[codex:1519865] 0143: DUP1
[codex:1519865] 0144: PUSH4 0x13af4035
[codex:1519865] 0149: EQ
[codex:1519865] 014a: PUSH2 0x021a
[codex:1519865] 014d: JUMPI
[codex:1519865] 014e: DUP1
[codex:1519865] 014f: PUSH4 0x1cfed885
[codex:1519865] 0154: EQ
[codex:1519865] 0155: PUSH2 0x0239
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing dispatch and whitelist logic**
[codex:1519865]
[codex:1519865] I'm examining the bytecode dispatch around 0x0120, noticing misalignment likely caused by starting mid-instruction. The dispatch checks for a zero selector to jump to a fallback handler at 0x019c, which leads to a main execution block at 0x04a5 that uses a mapping-based whitelist. Owner-only functions modify this mapping, and there's a special forwarder at 0x0b3e that authorizes addresses via tx.origin under strict conditions. I'll dig further into 0x0b3e to understand how this whitelist control works.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',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',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',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:1519865]
[codex:1519865] def disasm(start, count=200):
[codex:1519865] i=start
[codex:1519865] out=[]
[codex:1519865] while i < len(code) and len(out)<count:
[codex:1519865] off=i
[codex:1519865] opcode=code[i]; i+=1
[codex:1519865] imm=b''
[codex:1519865] if 0x60<=opcode<=0x7f:
[codex:1519865] n=opcode-0x5f
[codex:1519865] imm=code[i:i+n]; i+=n
[codex:1519865] name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865] out.append((off,name,imm))
[codex:1519865] return out
[codex:1519865]
[codex:1519865] for off,name,imm in disasm(0x0b3e, count=160):
[codex:1519865] if imm:
[codex:1519865] print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865] else:
[codex:1519865] print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] 0b3e: JUMPDEST
[codex:1519865] 0b3f: PUSH1 0x40
[codex:1519865] 0b41: DUP1
[codex:1519865] 0b42: MLOAD
[codex:1519865] 0b43: DUP1
[codex:1519865] 0b44: DUP3
[codex:1519865] 0b45: ADD
[codex:1519865] 0b46: SWAP1
[codex:1519865] 0b47: SWAP2
[codex:1519865] 0b48: MSTORE
[codex:1519865] 0b49: PUSH1 0x04
[codex:1519865] 0b4b: DUP2
[codex:1519865] 0b4c: MSTORE
[codex:1519865] 0b4d: PUSH32 0x4d30323100000000000000000000000000000000000000000000000000000000
[codex:1519865] 0b6e: PUSH1 0x20
[codex:1519865] 0b70: DUP3
[codex:1519865] 0b71: ADD
[codex:1519865] 0b72: MSTORE
[codex:1519865] 0b73: CALLER
[codex:1519865] 0b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:1519865]
[codex:1519865] thinking
[codex:1519865] **Analyzing potential exploit paths**
[codex:1519865] codex
[codex:1519865] {"no_findings":true,"summary":"Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.","findings":[]}
[codex:1519865] tokens used
[codex:1519865] 153,048
[codex:1519865] {"no_findings":true,"summary":"Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-04T09:45:29.997116+00:00",
"returncode": 0
},
"summary": "Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.",
"raw_final": {
"summary": "Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0173 0000000c: JUMPI 0000000d: PUSH0 0000000e: CALLDATALOAD 0000000f: PUSH1 0xe0 00000011: SHR 00000012: DUP1 00000013: PUSH4 0x6fefbbc2 00000018: GT 00000019: PUSH2 0x00ca 0000001c: JUMPI 0000001d: DUP1 0000001e: PUSH4 0xc311d049 00000023: GT 00000024: PUSH2 0x007e 00000027: JUMPI 00000028: DUP1 00000029: PUSH4 0xeed2f252 0000002e: GT 0000002f: PUSH2 0x0058 00000032: JUMPI 00000033: DUP1 00000034: PUSH4 0xeed2f252 00000039: EQ 0000003a: PUSH2 0x043b 0000003d: JUMPI 0000003e: DUP1 0000003f: PUSH4 0xf08a0323 00000044: EQ 00000045: PUSH2 0x0467 00000048: JUMPI 00000049: DUP1 0000004a: PUSH4 0xfa461e33 0000004f: EQ 00000050: PUSH2 0x0486 00000053: JUMPI 00000054: PUSH2 0x017a 00000057: JUMP 00000058: JUMPDEST 00000059: DUP1 0000005a: PUSH4 0xc311d049 0000005f: EQ 00000060: PUSH2 0x03de 00000063: JUMPI 00000064: DUP1 00000065: PUSH4 0xd0ebdbe7 0000006a: EQ 0000006b: PUSH2 0x03fd 0000006e: JUMPI 0000006f: DUP1 00000070: PUSH4 0xd34628cc 00000075: EQ 00000076: PUSH2 0x041c 00000079: JUMPI 0000007a: PUSH2 0x017a 0000007d: JUMP 0000007e: JUMPDEST 0000007f: DUP1 00000080: PUSH4 0x9e281a98 00000085: GT 00000086: PUSH2 0x00af 00000089: JUMPI 0000008a: DUP1 0000008b: PUSH4 0x9e281a98 00000090: EQ 00000091: PUSH2 0x0362 00000094: JUMPI 00000095: DUP1 00000096: PUSH4 0xbdb25d0e 0000009b: EQ 0000009c: PUSH2 0x0381 0000009f: JUMPI 000000a0: DUP1 000000a1: PUSH4 0xbfd79284 000000a6: EQ 000000a7: PUSH2 0x03a0 000000aa: JUMPI 000000ab: PUSH2 0x017a 000000ae: JUMP 000000af: JUMPDEST 000000b0: DUP1 000000b1: PUSH4 0x6fefbbc2 000000b6: EQ 000000b7: PUSH2 0x0324 000000ba: JUMPI 000000bb: DUP1 000000bc: PUSH4 0x7580a1bc 000000c1: EQ 000000c2: PUSH2 0x0343 000000c5: JUMPI 000000c6: PUSH2 0x017a 000000c9: JUMP 000000ca: JUMPDEST 000000cb: DUP1 000000cc: PUSH4 0x23a69e75 000000d1: GT 000000d2: PUSH2 0x012c 000000d5: JUMPI 000000d6: DUP1 000000d7: PUSH4 0x481c6a75 000000dc: GT 000000dd: PUSH2 0x0106 000000e0: JUMPI 000000e1: DUP1 000000e2: PUSH4 0x481c6a75 000000e7: EQ 000000e8: PUSH2 0x02ba 000000eb: JUMPI 000000ec: DUP1 000000ed: PUSH4 0x51b9b0fa 000000f2: EQ 000000f3: PUSH2 0x02e6 000000f6: JUMPI 000000f7: DUP1 000000f8: PUSH4 0x6c3bbfd7 000000fd: EQ 000000fe: PUSH2 0x0305 00000101: JUMPI 00000102: PUSH2 0x017a 00000105: JUMP 00000106: JUMPDEST 00000107: DUP1 00000108: PUSH4 0x23a69e75 0000010d: EQ 0000010e: PUSH2 0x025d 00000111: JUMPI 00000112: DUP1 00000113: PUSH4 0x2c8958f6 00000118: EQ 00000119: PUSH2 0x027c 0000011c: JUMPI 0000011d: DUP1 0000011e: PUSH4 0x31f57072 00000123: EQ 00000124: PUSH2 0x029b 00000127: JUMPI 00000128: PUSH2 0x017a 0000012b: JUMP 0000012c: JUMPDEST 0000012d: DUP1 0000012e: PUSH4 0x0b58f97d 00000133: GT 00000134: PUSH2 0x015d 00000137: JUMPI 00000138: DUP1 00000139: PUSH4 0x0b58f97d 0000013e: EQ 0000013f: PUSH2 0x01c5 00000142: JUMPI 00000143: DUP1 00000144: PUSH4 0x13af4035 00000149: EQ 0000014a: PUSH2 0x021a 0000014d: JUMPI 0000014e: DUP1 0000014f: PUSH4 0x1cfed885 00000154: EQ 00000155: PUSH2 0x0239 00000158: JUMPI 00000159: PUSH2 0x017a 0000015c: JUMP 0000015d: JUMPDEST 0000015e: DUP1 0000015f: ISZERO 00000160: PUSH2 0x019c 00000163: JUMPI 00000164: DUP1 00000165: PUSH4 0x07d47d97 0000016a: EQ 0000016b: PUSH2 0x01a6 0000016e: JUMPI 0000016f: PUSH2 0x017a 00000172: JUMP 00000173: JUMPDEST 00000174: CALLDATASIZE 00000175: PUSH2 0x017a 00000178: JUMPI 00000179: STOP 0000017a: JUMPDEST 0000017b: PUSH1 0x40 0000017d: MLOAD 0000017e: CALLDATASIZE 0000017f: PUSH0 00000180: DUP3 00000181: CALLDATACOPY 00000182: PUSH0 00000183: PUSH0 00000184: CALLDATASIZE 00000185: DUP4 00000186: PUSH1 0x02 00000188: SLOAD 00000189: GAS 0000018a: DELEGATECALL 0000018b: RETURNDATASIZE 0000018c: PUSH0 0000018d: DUP4 0000018e: RETURNDATACOPY 0000018f: DUP1 00000190: PUSH2 0x0197 00000193: JUMPI 00000194: RETURNDATASIZE 00000195: DUP3 00000196: REVERT 00000197: JUMPDEST 00000198: POP 00000199: RETURNDATASIZE 0000019a: DUP2 0000019b: RETURN 0000019c: JUMPDEST 0000019d: PUSH2 0x01a4 000001a0: PUSH2 0x04a5 000001a3: JUMP 000001a4: JUMPDEST 000001a5: STOP 000001a6: JUMPDEST 000001a7: CALLVALUE 000001a8: DUP1 000001a9: ISZERO 000001aa: PUSH2 0x01b1 000001ad: JUMPI 000001ae: PUSH0 000001af: PUSH0 000001b0: REVERT 000001b1: JUMPDEST 000001b2: POP 000001b3: PUSH2 0x01a4 000001b6: PUSH2 0x01c0 000001b9: CALLDATASIZE 000001ba: PUSH1 0x04 000001bc: PUSH2 0x26eb 000001bf: JUMP 000001c0: JUMPDEST 000001c1: PUSH2 0x0827 000001c4: JUMP 000001c5: JUMPDEST 000001c6: CALLVALUE 000001c7: DUP1 000001c8: ISZERO 000001c9: PUSH2 0x01d0 000001cc: JUMPI 000001cd: PUSH0 000001ce: PUSH0 000001cf: REVERT 000001d0: JUMPDEST 000001d1: POP 000001d2: PUSH0 000001d3: SLOAD 000001d4: PUSH2 0x01f0 000001d7: SWAP1 000001d8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001ed: AND 000001ee: DUP2 000001ef: JUMP 000001f0: JUMPDEST 000001f1: PUSH1 0x40 000001f3: MLOAD 000001f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000209: SWAP1 0000020a: SWAP2 0000020b: AND 0000020c: DUP2 0000020d: MSTORE 0000020e: PUSH1 0x20 00000210: ADD 00000211: JUMPDEST 00000212: PUSH1 0x40 00000214: MLOAD 00000215: DUP1 00000216: SWAP2 00000217: SUB 00000218: SWAP1 00000219: RETURN 0000021a: JUMPDEST 0000021b: CALLVALUE 0000021c: DUP1 0000021d: ISZERO 0000021e: PUSH2 0x0225 00000221: JUMPI 00000222: PUSH0 00000223: PUSH0 00000224: REVERT 00000225: JUMPDEST 00000226: POP 00000227: PUSH2 0x01a4 0000022a: PUSH2 0x0234 0000022d: CALLDATASIZE 0000022e: PUSH1 0x04 00000230: PUSH2 0x274d 00000233: JUMP 00000234: JUMPDEST 00000235: PUSH2 0x08f0 00000238: JUMP 00000239: JUMPDEST 0000023a: CALLVALUE 0000023b: DUP1 0000023c: ISZERO 0000023d: PUSH2 0x0244 00000240: JUMPI 00000241: PUSH0 00000242: PUSH0 00000243: REVERT 00000244: JUMPDEST 00000245: POP 00000246: PUSH2 0x01f0 00000249: PUSH2 0x0253 0000024c: CALLDATASIZE 0000024d: PUSH1 0x04 0000024f: PUSH2 0x2776 00000252: JUMP 00000253: JUMPDEST 00000254: PUSH4 0xdeadbeef 00000259: ADD 0000025a: SLOAD 0000025b: SWAP1 0000025c: JUMP 0000025d: JUMPDEST 0000025e: CALLVALUE 0000025f: DUP1 00000260: ISZERO 00000261: PUSH2 0x0268 00000264: JUMPI 00000265: PUSH0 00000266: PUSH0 00000267: REVERT 00000268: JUMPDEST 00000269: POP 0000026a: PUSH2 0x01a4 0000026d: PUSH2 0x0277 00000270: CALLDATASIZE 00000271: PUSH1 0x04 00000273: PUSH2 0x278f 00000276: JUMP 00000277: JUMPDEST 00000278: PUSH2 0x09bd 0000027b: JUMP 0000027c: JUMPDEST 0000027d: CALLVALUE 0000027e: DUP1 0000027f: ISZERO 00000280: PUSH2 0x0287 00000283: JUMPI 00000284: PUSH0 00000285: PUSH0 00000286: REVERT 00000287: JUMPDEST 00000288: POP 00000289: PUSH2 0x01a4 0000028c: PUSH2 0x0296 0000028f: CALLDATASIZE 00000290: PUSH1 0x04 00000292: PUSH2 0x278f 00000295: JUMP 00000296: JUMPDEST 00000297: PUSH2 0x0a13 0000029a: JUMP 0000029b: JUMPDEST 0000029c: CALLVALUE 0000029d: DUP1 0000029e: ISZERO 0000029f: PUSH2 0x02a6 000002a2: JUMPI 000002a3: PUSH0 000002a4: PUSH0 000002a5: REVERT 000002a6: JUMPDEST 000002a7: POP 000002a8: PUSH2 0x01a4 000002ab: PUSH2 0x02b5 000002ae: CALLDATASIZE 000002af: PUSH1 0x04 000002b1: PUSH2 0x280b 000002b4: JUMP 000002b5: JUMPDEST 000002b6: PUSH2 0x0b3e 000002b9: JUMP 000002ba: JUMPDEST 000002bb: CALLVALUE 000002bc: DUP1 000002bd: ISZERO 000002be: PUSH2 0x02c5 000002c1: JUMPI 000002c2: PUSH0 000002c3: PUSH0 000002c4: REVERT 000002c5: JUMPDEST 000002c6: POP 000002c7: PUSH1 0x01 000002c9: SLOAD 000002ca: PUSH2 0x01f0 000002cd: SWAP1 000002ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002e3: AND 000002e4: DUP2 000002e5: JUMP 000002e6: JUMPDEST 000002e7: CALLVALUE 000002e8: DUP1 000002e9: ISZERO 000002ea: PUSH2 0x02f1 000002ed: JUMPI 000002ee: PUSH0 000002ef: PUSH0 000002f0: REVERT 000002f1: JUMPDEST 000002f2: POP 000002f3: PUSH2 0x01a4 000002f6: PUSH2 0x0300 000002f9: CALLDATASIZE 000002fa: PUSH1 0x04 000002fc: PUSH2 0x2946 000002ff: JUMP 00000300: JUMPDEST 00000301: PUSH2 0x0c95 00000304: JUMP 00000305: JUMPDEST 00000306: CALLVALUE 00000307: DUP1 00000308: ISZERO 00000309: PUSH2 0x0310 0000030c: JUMPI 0000030d: PUSH0 0000030e: PUSH0 0000030f: REVERT 00000310: JUMPDEST 00000311: POP 00000312: PUSH2 0x01a4 00000315: PUSH2 0x031f 00000318: CALLDATASIZE 00000319: PUSH1 0x04 0000031b: PUSH2 0x29a6 0000031e: JUMP 0000031f: JUMPDEST 00000320: PUSH2 0x0e2c 00000323: JUMP 00000324: JUMPDEST 00000325: CALLVALUE 00000326: DUP1 00000327: ISZERO 00000328: PUSH2 0x032f 0000032b: JUMPI 0000032c: PUSH0 0000032d: PUSH0 0000032e: REVERT 0000032f: JUMPDEST 00000330: POP 00000331: PUSH2 0x01a4 00000334: PUSH2 0x033e 00000337: CALLDATASIZE 00000338: PUSH1 0x04 0000033a: PUSH2 0x29d9 0000033d: JUMP 0000033e: JUMPDEST 0000033f: PUSH2 0x0f47 00000342: JUMP 00000343: JUMPDEST 00000344: CALLVALUE 00000345: DUP1 00000346: ISZERO 00000347: PUSH2 0x034e 0000034a: JUMPI 0000034b: PUSH0 0000034c: PUSH0 0000034d: REVERT 0000034e: JUMPDEST 0000034f: POP 00000350: PUSH2 0x01a4 00000353: PUSH2 0x035d 00000356: CALLDATASIZE 00000357: PUSH1 0x04 00000359: PUSH2 0x29f0 0000035c: JUMP 0000035d: JUMPDEST 0000035e: PUSH2 0x10a3 00000361: JUMP 00000362: JUMPDEST 00000363: CALLVALUE 00000364: DUP1 00000365: ISZERO 00000366: PUSH2 0x036d 00000369: JUMPI 0000036a: PUSH0 0000036b: PUSH0 0000036c: REVERT 0000036d: JUMPDEST 0000036e: POP 0000036f: PUSH2 0x01a4 00000372: PUSH2 0x037c 00000375: CALLDATASIZE 00000376: PUSH1 0x04 00000378: PUSH2 0x2a21 0000037b: JUMP 0000037c: JUMPDEST 0000037d: PUSH2 0x1135 00000380: JUMP 00000381: JUMPDEST 00000382: CALLVALUE 00000383: DUP1 00000384: ISZERO 00000385: PUSH2 0x038c 00000388: JUMPI 00000389: PUSH0 0000038a: PUSH0 0000038b: REVERT 0000038c: JUMPDEST 0000038d: POP 0000038e: PUSH2 0x01a4 00000391: PUSH2 0x039b 00000394: CALLDATASIZE 00000395: PUSH1 0x04 00000397: PUSH2 0x2946 0000039a: JUMP 0000039b: JUMPDEST 0000039c: PUSH2 0x11dd 0000039f: JUMP 000003a0: JUMPDEST 000003a1: CALLVALUE 000003a2: DUP1 000003a3: ISZERO 000003a4: PUSH2 0x03ab 000003a7: JUMPI 000003a8: PUSH0 000003a9: PUSH0 000003aa: REVERT 000003ab: JUMPDEST 000003ac: POP 000003ad: PUSH2 0x03ce 000003b0: PUSH2 0x03ba 000003b3: CALLDATASIZE 000003b4: PUSH1 0x04 000003b6: PUSH2 0x274d 000003b9: JUMP 000003ba: JUMPDEST 000003bb: PUSH1 0x03 000003bd: PUSH1 0x20 000003bf: MSTORE 000003c0: PUSH0 000003c1: SWAP1 000003c2: DUP2 000003c3: MSTORE 000003c4: PUSH1 0x40 000003c6: SWAP1 000003c7: KECCAK256 000003c8: SLOAD 000003c9: PUSH1 0xff 000003cb: AND 000003cc: DUP2 000003cd: JUMP 000003ce: JUMPDEST 000003cf: PUSH1 0x40 000003d1: MLOAD 000003d2: SWAP1 000003d3: ISZERO 000003d4: ISZERO 000003d5: DUP2 000003d6: MSTORE 000003d7: PUSH1 0x20 000003d9: ADD 000003da: PUSH2 0x0211 000003dd: JUMP 000003de: JUMPDEST 000003df: CALLVALUE 000003e0: DUP1 000003e1: ISZERO 000003e2: PUSH2 0x03e9 000003e5: JUMPI 000003e6: PUSH0 000003e7: PUSH0 000003e8: REVERT 000003e9: JUMPDEST 000003ea: POP 000003eb: PUSH2 0x01a4 000003ee: PUSH2 0x03f8 000003f1: CALLDATASIZE 000003f2: PUSH1 0x04 000003f4: PUSH2 0x29d9 000003f7: JUMP 000003f8: JUMPDEST 000003f9: PUSH2 0x135f 000003fc: JUMP 000003fd: JUMPDEST 000003fe: CALLVALUE 000003ff: DUP1 00000400: ISZERO 00000401: PUSH2 0x0408 00000404: JUMPI 00000405: PUSH0 00000406: PUSH0 00000407: REVERT 00000408: JUMPDEST 00000409: POP 0000040a: PUSH2 0x01a4 0000040d: PUSH2 0x0417 00000410: CALLDATASIZE 00000411: PUSH1 0x04 00000413: PUSH2 0x274d 00000416: JUMP 00000417: JUMPDEST 00000418: PUSH2 0x1407 0000041b: JUMP 0000041c: JUMPDEST 0000041d: CALLVALUE 0000041e: DUP1 0000041f: ISZERO 00000420: PUSH2 0x0427 00000423: JUMPI 00000424: PUSH0 00000425: PUSH0 00000426: REVERT 00000427: JUMPDEST 00000428: POP 00000429: PUSH2 0x01a4 0000042c: PUSH2 0x0436 0000042f: CALLDATASIZE 00000430: PUSH1 0x04 00000432: PUSH2 0x29a6 00000435: JUMP 00000436: JUMPDEST 00000437: PUSH2 0x14d5 0000043a: JUMP 0000043b: JUMPDEST 0000043c: CALLVALUE 0000043d: DUP1 0000043e: ISZERO 0000043f: PUSH2 0x0446 00000442: JUMPI 00000443: PUSH0 00000444: PUSH0 00000445: REVERT 00000446: JUMPDEST 00000447: POP 00000448: PUSH1 0x02 0000044a: SLOAD 0000044b: PUSH2 0x01f0 0000044e: SWAP1 0000044f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000464: AND 00000465: DUP2 00000466: JUMP 00000467: JUMPDEST 00000468: CALLVALUE 00000469: DUP1 0000046a: ISZERO 0000046b: PUSH2 0x0472 0000046e: JUMPI 0000046f: PUSH0 00000470: PUSH0 00000471: REVERT 00000472: JUMPDEST 00000473: POP 00000474: PUSH2 0x01a4 00000477: PUSH2 0x0481 0000047a: CALLDATASIZE 0000047b: PUSH1 0x04 0000047d: PUSH2 0x274d 00000480: JUMP 00000481: JUMPDEST 00000482: PUSH2 0x15ec 00000485: JUMP 00000486: JUMPDEST 00000487: CALLVALUE 00000488: DUP1 00000489: ISZERO 0000048a: PUSH2 0x0491 0000048d: JUMPI 0000048e: PUSH0 0000048f: PUSH0 00000490: REVERT 00000491: JUMPDEST 00000492: POP 00000493: PUSH2 0x01a4 00000496: PUSH2 0x04a0 00000499: CALLDATASIZE 0000049a: PUSH1 0x04 0000049c: PUSH2 0x278f 0000049f: JUMP 000004a0: JUMPDEST 000004a1: PUSH2 0x16ba 000004a4: JUMP 000004a5: JUMPDEST 000004a6: CALLER 000004a7: PUSH0 000004a8: SWAP1 000004a9: DUP2 000004aa: MSTORE 000004ab: PUSH1 0x03 000004ad: PUSH1 0x20 000004af: SWAP1 000004b0: DUP2 000004b1: MSTORE 000004b2: PUSH1 0x40 000004b4: SWAP2 000004b5: DUP3 000004b6: SWAP1 000004b7: KECCAK256 000004b8: SLOAD 000004b9: DUP3 000004ba: MLOAD 000004bb: DUP1 000004bc: DUP5 000004bd: ADD 000004be: SWAP1 000004bf: SWAP4 000004c0: MSTORE 000004c1: PUSH1 0x04 000004c3: DUP4 000004c4: MSTORE 000004c5: PUSH32 0x4d30303200000000000000000000000000000000000000000000000000000000 000004e6: SWAP2 000004e7: DUP4 000004e8: ADD 000004e9: SWAP2 000004ea: SWAP1 000004eb: SWAP2 000004ec: MSTORE 000004ed: PUSH1 0xff 000004ef: AND 000004f0: PUSH2 0x052f 000004f3: JUMPI 000004f4: PUSH1 0x40 000004f6: MLOAD 000004f7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000518: DUP2 00000519: MSTORE 0000051a: PUSH1 0x04 0000051c: ADD 0000051d: PUSH2 0x0526 00000520: SWAP2 00000521: SWAP1 00000522: PUSH2 0x2a95 00000525: JUMP 00000526: JUMPDEST 00000527: PUSH1 0x40 00000529: MLOAD 0000052a: DUP1 0000052b: SWAP2 0000052c: SUB 0000052d: SWAP1 0000052e: REVERT 0000052f: JUMPDEST 00000530: POP 00000531: PUSH1 0x05 00000533: CALLDATALOAD 00000534: PUSH1 0x60 00000536: SHR 00000537: PUSH1 0x19 00000539: CALLDATALOAD 0000053a: PUSH1 0x39 0000053c: CALLDATALOAD 0000053d: PUSH1 0x59 0000053f: CALLDATALOAD 00000540: PUSH1 0xf8 00000542: SWAP1 00000543: DUP2 00000544: SHR 00000545: SWAP1 00000546: PUSH1 0x04 00000548: CALLDATALOAD 00000549: SWAP1 0000054a: SHR 0000054b: PUSH0 0000054c: DUP1 0000054d: DUP1 0000054e: DUP5 0000054f: PUSH2 0x056c 00000552: JUMPI 00000553: PUSH1 0x5a 00000555: CALLDATALOAD 00000556: PUSH1 0xf8 00000558: SHR 00000559: SWAP3 0000055a: POP 0000055b: PUSH1 0x5b 0000055d: CALLDATALOAD 0000055e: SWAP2 0000055f: POP 00000560: PUSH1 0x7b 00000562: CALLDATALOAD 00000563: PUSH1 0xf8 00000565: SHR 00000566: SWAP1 00000567: POP 00000568: PUSH2 0x0582 0000056b: JUMP 0000056c: JUMPDEST 0000056d: PUSH1 0x5a 0000056f: CALLDATALOAD 00000570: PUSH1 0xf8 00000572: SHR 00000573: SWAP3 00000574: POP 00000575: PUSH1 0x5b 00000577: CALLDATALOAD 00000578: SWAP2 00000579: POP 0000057a: PUSH1 0x9b 0000057c: CALLDATALOAD 0000057d: PUSH1 0xf8 0000057f: SHR 00000580: SWAP1 00000581: POP 00000582: JUMPDEST 00000583: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 000005a4: PUSH0 000005a5: SWAP1 000005a6: DUP2 000005a7: MSTORE 000005a8: ADDRESS 000005a9: PUSH1 0x04 000005ab: MSTORE 000005ac: SELFBALANCE 000005ad: SWAP1 000005ae: PUSH1 0x20 000005b0: DUP2 000005b1: PUSH1 0x24 000005b3: DUP2 000005b4: DUP14 000005b5: GAS 000005b6: STATICCALL 000005b7: PUSH2 0x05c2 000005ba: JUMPI 000005bb: RETURNDATASIZE 000005bc: PUSH0 000005bd: PUSH0 000005be: RETURNDATACOPY 000005bf: RETURNDATASIZE 000005c0: PUSH0 000005c1: REVERT 000005c2: JUMPDEST 000005c3: POP 000005c4: PUSH0 000005c5: DUP1 000005c6: MLOAD 000005c7: SWAP1 000005c8: PUSH1 0x01 000005ca: DUP8 000005cb: PUSH1 0x02 000005cd: DUP2 000005ce: GT 000005cf: ISZERO 000005d0: PUSH2 0x05db 000005d3: JUMPI 000005d4: PUSH2 0x05db 000005d7: PUSH2 0x2aa7 000005da: JUMP 000005db: JUMPDEST 000005dc: SUB 000005dd: PUSH2 0x05f2 000005e0: JUMPI 000005e1: PUSH2 0x05eb 000005e4: DUP9 000005e5: DUP13 000005e6: DUP13 000005e7: PUSH2 0x17d0 000005ea: JUMP 000005eb: JUMPDEST 000005ec: SWAP1 000005ed: POP 000005ee: PUSH2 0x0676 000005f1: JUMP 000005f2: JUMPDEST 000005f3: PUSH1 0x02 000005f5: DUP8 000005f6: PUSH1 0x02 000005f8: DUP2 000005f9: GT 000005fa: ISZERO 000005fb: PUSH2 0x0606 000005fe: JUMPI 000005ff: PUSH2 0x0606 00000602: PUSH2 0x2aa7 00000605: JUMP 00000606: JUMPDEST 00000607: SUB 00000608: PUSH2 0x0614 0000060b: JUMPI 0000060c: PUSH2 0x05eb 0000060f: DUP9 00000610: PUSH2 0x18bc 00000613: JUMP 00000614: JUMPDEST 00000615: PUSH1 0x40 00000617: MLOAD 00000618: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000639: DUP2 0000063a: MSTORE 0000063b: PUSH1 0x20 0000063d: PUSH1 0x04 0000063f: DUP3 00000640: ADD 00000641: MSTORE 00000642: PUSH1 0x16 00000644: PUSH1 0x24 00000646: DUP3 00000647: ADD 00000648: MSTORE 00000649: PUSH32 0x696e76616c696420666c617368457865637574696f6e00000000000000000000 0000066a: PUSH1 0x44 0000066c: DUP3 0000066d: ADD 0000066e: MSTORE 0000066f: PUSH1 0x64 00000671: ADD 00000672: PUSH2 0x0526 00000675: JUMP 00000676: JUMPDEST 00000677: DUP1 00000678: PUSH2 0x0688 0000067b: JUMPI 0000067c: POP 0000067d: POP 0000067e: POP 0000067f: POP 00000680: POP 00000681: POP 00000682: POP 00000683: POP 00000684: POP 00000685: POP 00000686: POP 00000687: JUMP 00000688: JUMPDEST 00000689: PUSH0 0000068a: DUP7 0000068b: PUSH1 0x05 0000068d: DUP2 0000068e: GT 0000068f: ISZERO 00000690: PUSH2 0x069b 00000693: JUMPI 00000694: PUSH2 0x069b 00000697: PUSH2 0x2aa7 0000069a: JUMP 0000069b: JUMPDEST 0000069c: EQ 0000069d: ISZERO 0000069e: DUP1 0000069f: ISZERO 000006a0: PUSH2 0x06a8 000006a3: JUMPI 000006a4: POP 000006a5: PUSH0 000006a6: DUP6 000006a7: GT 000006a8: JUMPDEST 000006a9: ISZERO 000006aa: PUSH2 0x0739 000006ad: JUMPI 000006ae: PUSH0 000006af: PUSH2 0x06b9 000006b2: DUP8 000006b3: DUP8 000006b4: DUP8 000006b5: PUSH2 0x18e0 000006b8: JUMP 000006b9: JUMPDEST 000006ba: POP 000006bb: SWAP1 000006bc: POP 000006bd: DUP4 000006be: PUSH5 0xe8d4a51000 000006c4: DUP3 000006c5: SELFBALANCE 000006c6: ADD 000006c7: ADD 000006c8: GT 000006c9: PUSH1 0x40 000006cb: MLOAD 000006cc: DUP1 000006cd: PUSH1 0x40 000006cf: ADD 000006d0: PUSH1 0x40 000006d2: MSTORE 000006d3: DUP1 000006d4: PUSH1 0x04 000006d6: DUP2 000006d7: MSTORE 000006d8: PUSH1 0x20 000006da: ADD 000006db: PUSH32 0x4d30313800000000000000000000000000000000000000000000000000000000 000006fc: DUP2 000006fd: MSTORE 000006fe: POP 000006ff: SWAP1 00000700: PUSH2 0x0736 00000703: JUMPI 00000704: PUSH1 0x40 00000706: MLOAD 00000707: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000728: DUP2 00000729: MSTORE 0000072a: PUSH1 0x04 0000072c: ADD 0000072d: PUSH2 0x0526 00000730: SWAP2 00000731: SWAP1 00000732: PUSH2 0x2a95 00000735: JUMP 00000736: JUMPDEST 00000737: POP 00000738: POP 00000739: JUMPDEST 0000073a: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 0000075b: PUSH0 0000075c: SWAP1 0000075d: DUP2 0000075e: MSTORE 0000075f: ADDRESS 00000760: PUSH1 0x04 00000762: MSTORE 00000763: PUSH1 0x20 00000765: DUP2 00000766: PUSH1 0x24 00000768: DUP2 00000769: DUP16 0000076a: GAS 0000076b: STATICCALL 0000076c: PUSH2 0x0777 0000076f: JUMPI 00000770: RETURNDATASIZE 00000771: PUSH0 00000772: PUSH0 00000773: RETURNDATACOPY 00000774: RETURNDATASIZE 00000775: PUSH0 00000776: REVERT 00000777: JUMPDEST 00000778: POP 00000779: PUSH0 0000077a: MLOAD 0000077b: PUSH1 0x40 0000077d: DUP1 0000077e: MLOAD 0000077f: DUP1 00000780: DUP3 00000781: ADD 00000782: SWAP1 00000783: SWAP2 00000784: MSTORE 00000785: PUSH1 0x04 00000787: DUP2 00000788: MSTORE 00000789: PUSH32 0x4d30313400000000000000000000000000000000000000000000000000000000 000007aa: PUSH1 0x20 000007ac: DUP3 000007ad: ADD 000007ae: MSTORE 000007af: DUP4 000007b0: DUP3 000007b1: GT 000007b2: PUSH2 0x07e8 000007b5: JUMPI 000007b6: PUSH1 0x40 000007b8: MLOAD 000007b9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000007da: DUP2 000007db: MSTORE 000007dc: PUSH1 0x04 000007de: ADD 000007df: PUSH2 0x0526 000007e2: SWAP2 000007e3: SWAP1 000007e4: PUSH2 0x2a95 000007e7: JUMP 000007e8: JUMPDEST 000007e9: POP 000007ea: DUP10 000007eb: DUP2 000007ec: GT 000007ed: ISZERO 000007ee: PUSH2 0x0819 000007f1: JUMPI 000007f2: PUSH0 000007f3: SLOAD 000007f4: PUSH2 0x0819 000007f7: SWAP1 000007f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000080d: DUP15 0000080e: DUP2 0000080f: AND 00000810: SWAP2 00000811: AND 00000812: DUP13 00000813: DUP5 00000814: SUB 00000815: PUSH2 0x1b70 00000818: JUMP 00000819: JUMPDEST 0000081a: POP 0000081b: POP 0000081c: POP 0000081d: POP 0000081e: POP 0000081f: POP 00000820: POP 00000821: POP 00000822: POP 00000823: POP 00000824: POP 00000825: POP 00000826: JUMP 00000827: JUMPDEST 00000828: PUSH0 00000829: SLOAD 0000082a: PUSH1 0x40 0000082c: DUP1 0000082d: MLOAD 0000082e: DUP1 0000082f: DUP3 00000830: ADD 00000831: SWAP1 00000832: SWAP2 00000833: MSTORE 00000834: PUSH1 0x04 00000836: DUP2 00000837: MSTORE 00000838: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00000859: PUSH1 0x20 0000085b: DUP3 0000085c: ADD 0000085d: MSTORE 0000085e: SWAP1 0000085f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000874: AND 00000875: CALLER 00000876: EQ 00000877: PUSH2 0x08ad 0000087a: JUMPI 0000087b: PUSH1 0x40 0000087d: MLOAD 0000087e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000089f: DUP2 000008a0: MSTORE 000008a1: PUSH1 0x04 000008a3: ADD 000008a4: PUSH2 0x0526 000008a7: SWAP2 000008a8: SWAP1 000008a9: PUSH2 0x2a95 000008ac: JUMP 000008ad: JUMPDEST 000008ae: POP 000008af: PUSH2 0x08ec 000008b2: DUP3 000008b3: DUP3 000008b4: DUP1 000008b5: DUP1 000008b6: PUSH1 0x1f 000008b8: ADD 000008b9: PUSH1 0x20 000008bb: DUP1 000008bc: SWAP2 000008bd: DIV 000008be: MUL 000008bf: PUSH1 0x20 000008c1: ADD 000008c2: PUSH1 0x40 000008c4: MLOAD 000008c5: SWAP1 000008c6: DUP2 000008c7: ADD 000008c8: PUSH1 0x40 000008ca: MSTORE 000008cb: DUP1 000008cc: SWAP4 000008cd: SWAP3 000008ce: SWAP2 000008cf: SWAP1 000008d0: DUP2 000008d1: DUP2 000008d2: MSTORE 000008d3: PUSH1 0x20 000008d5: ADD 000008d6: DUP4 000008d7: DUP4 000008d8: DUP1 000008d9: DUP3 000008da: DUP5 000008db: CALLDATACOPY 000008dc: PUSH0 000008dd: SWAP3 000008de: ADD 000008df: SWAP2 000008e0: SWAP1 000008e1: SWAP2 000008e2: MSTORE 000008e3: POP 000008e4: PUSH2 0x1bf1 000008e7: SWAP3 000008e8: POP 000008e9: POP 000008ea: POP 000008eb: JUMP 000008ec: JUMPDEST 000008ed: POP 000008ee: POP 000008ef: JUMP 000008f0: JUMPDEST 000008f1: PUSH0 000008f2: SLOAD 000008f3: PUSH1 0x40 000008f5: DUP1 000008f6: MLOAD 000008f7: DUP1 000008f8: DUP3 000008f9: ADD 000008fa: SWAP1 000008fb: SWAP2 000008fc: MSTORE 000008fd: PUSH1 0x04 000008ff: DUP2 00000900: MSTORE 00000901: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00000922: PUSH1 0x20 00000924: DUP3 00000925: ADD 00000926: MSTORE 00000927: SWAP1 00000928: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000093d: AND 0000093e: CALLER 0000093f: EQ 00000940: PUSH2 0x0976 00000943: JUMPI 00000944: PUSH1 0x40 00000946: MLOAD 00000947: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000968: DUP2 00000969: MSTORE 0000096a: PUSH1 0x04 0000096c: ADD 0000096d: PUSH2 0x0526 00000970: SWAP2 00000971: SWAP1 00000972: PUSH2 0x2a95 00000975: JUMP 00000976: JUMPDEST 00000977: POP 00000978: PUSH0 00000979: DUP1 0000097a: SLOAD 0000097b: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000099c: AND 0000099d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009b2: SWAP3 000009b3: SWAP1 000009b4: SWAP3 000009b5: AND 000009b6: SWAP2 000009b7: SWAP1 000009b8: SWAP2 000009b9: OR 000009ba: SWAP1 000009bb: SSTORE 000009bc: JUMP 000009bd: JUMPDEST 000009be: PUSH2 0x0a0d 000009c1: DUP5 000009c2: DUP5 000009c3: DUP5 000009c4: DUP5 000009c5: PUSH32 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2 000009e6: PUSH32 0x00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c9 00000a07: PUSH1 0x60 00000a09: PUSH2 0x1c84 00000a0c: JUMP 00000a0d: JUMPDEST 00000a0e: POP 00000a0f: POP 00000a10: POP 00000a11: POP 00000a12: JUMP 00000a13: JUMPDEST 00000a14: PUSH1 0x2b 00000a16: DUP3 00000a17: ADD 00000a18: CALLDATALOAD 00000a19: PUSH1 0xf8 00000a1b: SHR 00000a1c: PUSH1 0x02 00000a1e: DUP2 00000a1f: SWAP1 00000a20: SUB 00000a21: PUSH2 0x0a79 00000a24: JUMPI 00000a25: PUSH2 0x0a74 00000a28: DUP6 00000a29: DUP6 00000a2a: DUP6 00000a2b: DUP6 00000a2c: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00000a4d: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00000a6e: PUSH1 0x40 00000a70: PUSH2 0x1c84 00000a73: JUMP 00000a74: JUMPDEST 00000a75: PUSH2 0x0b37 00000a78: JUMP 00000a79: JUMPDEST 00000a7a: DUP1 00000a7b: PUSH1 0xff 00000a7d: AND 00000a7e: PUSH1 0x05 00000a80: SUB 00000a81: PUSH2 0x0ad4 00000a84: JUMPI 00000a85: PUSH2 0x0a74 00000a88: DUP6 00000a89: DUP6 00000a8a: DUP6 00000a8b: DUP6 00000a8c: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00000aad: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00000ace: PUSH1 0x40 00000ad0: PUSH2 0x1c84 00000ad3: JUMP 00000ad4: JUMPDEST 00000ad5: PUSH1 0x40 00000ad7: DUP1 00000ad8: MLOAD 00000ad9: DUP1 00000ada: DUP3 00000adb: ADD 00000adc: DUP3 00000add: MSTORE 00000ade: PUSH1 0x04 00000ae0: DUP1 00000ae1: DUP3 00000ae2: MSTORE 00000ae3: PUSH32 0x4d30323200000000000000000000000000000000000000000000000000000000 00000b04: PUSH1 0x20 00000b06: DUP4 00000b07: ADD 00000b08: MSTORE 00000b09: SWAP2 00000b0a: MLOAD 00000b0b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000b2c: DUP2 00000b2d: MSTORE 00000b2e: PUSH2 0x0526 00000b31: SWAP3 00000b32: ADD 00000b33: PUSH2 0x2a95 00000b36: JUMP 00000b37: JUMPDEST 00000b38: POP 00000b39: POP 00000b3a: POP 00000b3b: POP 00000b3c: POP 00000b3d: JUMP 00000b3e: JUMPDEST 00000b3f: PUSH1 0x40 00000b41: DUP1 00000b42: MLOAD 00000b43: DUP1 00000b44: DUP3 00000b45: ADD 00000b46: SWAP1 00000b47: SWAP2 00000b48: MSTORE 00000b49: PUSH1 0x04 00000b4b: DUP2 00000b4c: MSTORE 00000b4d: PUSH32 0x4d30323100000000000000000000000000000000000000000000000000000000 00000b6e: PUSH1 0x20 00000b70: DUP3 00000b71: ADD 00000b72: MSTORE 00000b73: CALLER 00000b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b89: PUSH32 0x000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb 00000baa: AND 00000bab: EQ 00000bac: PUSH2 0x0be2 00000baf: JUMPI 00000bb0: PUSH1 0x40 00000bb2: MLOAD 00000bb3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000bd4: DUP2 00000bd5: MSTORE 00000bd6: PUSH1 0x04 00000bd8: ADD 00000bd9: PUSH2 0x0526 00000bdc: SWAP2 00000bdd: SWAP1 00000bde: PUSH2 0x2a95 00000be1: JUMP 00000be2: JUMPDEST 00000be3: POP 00000be4: ORIGIN 00000be5: PUSH0 00000be6: SWAP1 00000be7: DUP2 00000be8: MSTORE 00000be9: PUSH1 0x03 00000beb: PUSH1 0x20 00000bed: SWAP1 00000bee: DUP2 00000bef: MSTORE 00000bf0: PUSH1 0x40 00000bf2: SWAP2 00000bf3: DUP3 00000bf4: SWAP1 00000bf5: KECCAK256 00000bf6: SLOAD 00000bf7: DUP3 00000bf8: MLOAD 00000bf9: DUP1 00000bfa: DUP5 00000bfb: ADD 00000bfc: SWAP1 00000bfd: SWAP4 00000bfe: MSTORE 00000bff: PUSH1 0x04 00000c01: DUP4 00000c02: MSTORE 00000c03: PUSH32 0x4d30303200000000000000000000000000000000000000000000000000000000 00000c24: SWAP2 00000c25: DUP4 00000c26: ADD 00000c27: SWAP2 00000c28: SWAP1 00000c29: SWAP2 00000c2a: MSTORE 00000c2b: PUSH1 0xff 00000c2d: AND 00000c2e: PUSH2 0x0c64 00000c31: JUMPI 00000c32: PUSH1 0x40 00000c34: MLOAD 00000c35: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000c56: DUP2 00000c57: MSTORE 00000c58: PUSH1 0x04 00000c5a: ADD 00000c5b: PUSH2 0x0526 00000c5e: SWAP2 00000c5f: SWAP1 00000c60: PUSH2 0x2a95 00000c63: JUMP 00000c64: JUMPDEST 00000c65: POP 00000c66: PUSH1 0x20 00000c68: DUP2 00000c69: ADD 00000c6a: MLOAD 00000c6b: PUSH1 0xf8 00000c6d: SHR 00000c6e: DUP1 00000c6f: PUSH4 0xdeadbeef 00000c74: ADD 00000c75: SLOAD 00000c76: SWAP1 00000c77: POP 00000c78: PUSH1 0x01 00000c7a: DUP3 00000c7b: MLOAD 00000c7c: SUB 00000c7d: PUSH0 00000c7e: PUSH0 00000c7f: DUP3 00000c80: PUSH1 0x21 00000c82: DUP7 00000c83: ADD 00000c84: DUP6 00000c85: GAS 00000c86: DELEGATECALL 00000c87: PUSH2 0x0a0d 00000c8a: JUMPI 00000c8b: PUSH1 0x40 00000c8d: MLOAD 00000c8e: RETURNDATASIZE 00000c8f: PUSH0 00000c90: DUP3 00000c91: RETURNDATACOPY 00000c92: RETURNDATASIZE 00000c93: DUP2 00000c94: REVERT 00000c95: JUMPDEST 00000c96: PUSH0 00000c97: SLOAD 00000c98: PUSH1 0x40 00000c9a: DUP1 00000c9b: MLOAD 00000c9c: DUP1 00000c9d: DUP3 00000c9e: ADD 00000c9f: SWAP1 00000ca0: SWAP2 00000ca1: MSTORE 00000ca2: PUSH1 0x04 00000ca4: DUP2 00000ca5: MSTORE 00000ca6: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00000cc7: PUSH1 0x20 00000cc9: DUP3 00000cca: ADD 00000ccb: MSTORE 00000ccc: SWAP1 00000ccd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ce2: AND 00000ce3: CALLER 00000ce4: EQ 00000ce5: PUSH2 0x0d1b 00000ce8: JUMPI 00000ce9: PUSH1 0x40 00000ceb: MLOAD 00000cec: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000d0d: DUP2 00000d0e: MSTORE 00000d0f: PUSH1 0x04 00000d11: ADD 00000d12: PUSH2 0x0526 00000d15: SWAP2 00000d16: SWAP1 00000d17: PUSH2 0x2a95 00000d1a: JUMP 00000d1b: JUMPDEST 00000d1c: POP 00000d1d: PUSH1 0x40 00000d1f: DUP1 00000d20: MLOAD 00000d21: DUP1 00000d22: DUP3 00000d23: ADD 00000d24: SWAP1 00000d25: SWAP2 00000d26: MSTORE 00000d27: PUSH1 0x04 00000d29: DUP2 00000d2a: MSTORE 00000d2b: PUSH32 0x4d30303500000000000000000000000000000000000000000000000000000000 00000d4c: PUSH1 0x20 00000d4e: DUP3 00000d4f: ADD 00000d50: MSTORE 00000d51: DUP4 00000d52: DUP3 00000d53: EQ 00000d54: PUSH2 0x0d8a 00000d57: JUMPI 00000d58: PUSH1 0x40 00000d5a: MLOAD 00000d5b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000d7c: DUP2 00000d7d: MSTORE 00000d7e: PUSH1 0x04 00000d80: ADD 00000d81: PUSH2 0x0526 00000d84: SWAP2 00000d85: SWAP1 00000d86: PUSH2 0x2a95 00000d89: JUMP 00000d8a: JUMPDEST 00000d8b: POP 00000d8c: PUSH0 00000d8d: JUMPDEST 00000d8e: DUP4 00000d8f: DUP2 00000d90: LT 00000d91: ISZERO 00000d92: PUSH2 0x0b37 00000d95: JUMPI 00000d96: PUSH2 0x0e24 00000d99: DUP4 00000d9a: DUP4 00000d9b: DUP4 00000d9c: DUP2 00000d9d: DUP2 00000d9e: LT 00000d9f: PUSH2 0x0daa 00000da2: JUMPI 00000da3: PUSH2 0x0daa 00000da6: PUSH2 0x2ad4 00000da9: JUMP 00000daa: JUMPDEST 00000dab: SWAP1 00000dac: POP 00000dad: PUSH1 0x20 00000daf: MUL 00000db0: ADD 00000db1: PUSH1 0x20 00000db3: DUP2 00000db4: ADD 00000db5: SWAP1 00000db6: PUSH2 0x0dbf 00000db9: SWAP2 00000dba: SWAP1 00000dbb: PUSH2 0x274d 00000dbe: JUMP 00000dbf: JUMPDEST 00000dc0: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000de1: DUP8 00000de2: DUP8 00000de3: DUP6 00000de4: DUP2 00000de5: DUP2 00000de6: LT 00000de7: PUSH2 0x0df2 00000dea: JUMPI 00000deb: PUSH2 0x0df2 00000dee: PUSH2 0x2ad4 00000df1: JUMP 00000df2: JUMPDEST 00000df3: SWAP1 00000df4: POP 00000df5: PUSH1 0x20 00000df7: MUL 00000df8: ADD 00000df9: PUSH1 0x20 00000dfb: DUP2 00000dfc: ADD 00000dfd: SWAP1 00000dfe: PUSH2 0x0e07 00000e01: SWAP2 00000e02: SWAP1 00000e03: PUSH2 0x274d 00000e06: JUMP 00000e07: JUMPDEST 00000e08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e1d: AND 00000e1e: SWAP2 00000e1f: SWAP1 00000e20: PUSH2 0x1e9c 00000e23: JUMP 00000e24: JUMPDEST 00000e25: PUSH1 0x01 00000e27: ADD 00000e28: PUSH2 0x0d8d 00000e2b: JUMP 00000e2c: JUMPDEST 00000e2d: PUSH0 00000e2e: SLOAD 00000e2f: PUSH1 0x40 00000e31: DUP1 00000e32: MLOAD 00000e33: DUP1 00000e34: DUP3 00000e35: ADD 00000e36: SWAP1 00000e37: SWAP2 00000e38: MSTORE 00000e39: PUSH1 0x04 00000e3b: DUP2 00000e3c: MSTORE 00000e3d: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00000e5e: PUSH1 0x20 00000e60: DUP3 00000e61: ADD 00000e62: MSTORE 00000e63: SWAP1 00000e64: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e79: AND 00000e7a: CALLER 00000e7b: EQ 00000e7c: PUSH2 0x0eb2 00000e7f: JUMPI 00000e80: PUSH1 0x40 00000e82: MLOAD 00000e83: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ea4: DUP2 00000ea5: MSTORE 00000ea6: PUSH1 0x04 00000ea8: ADD 00000ea9: PUSH2 0x0526 00000eac: SWAP2 00000ead: SWAP1 00000eae: PUSH2 0x2a95 00000eb1: JUMP 00000eb2: JUMPDEST 00000eb3: POP 00000eb4: PUSH0 00000eb5: JUMPDEST 00000eb6: DUP2 00000eb7: DUP2 00000eb8: LT 00000eb9: ISZERO 00000eba: PUSH2 0x0f42 00000ebd: JUMPI 00000ebe: PUSH0 00000ebf: PUSH1 0x03 00000ec1: PUSH0 00000ec2: DUP6 00000ec3: DUP6 00000ec4: DUP6 00000ec5: DUP2 00000ec6: DUP2 00000ec7: LT 00000ec8: PUSH2 0x0ed3 00000ecb: JUMPI 00000ecc: PUSH2 0x0ed3 00000ecf: PUSH2 0x2ad4 00000ed2: JUMP 00000ed3: JUMPDEST 00000ed4: SWAP1 00000ed5: POP 00000ed6: PUSH1 0x20 00000ed8: MUL 00000ed9: ADD 00000eda: PUSH1 0x20 00000edc: DUP2 00000edd: ADD 00000ede: SWAP1 00000edf: PUSH2 0x0ee8 00000ee2: SWAP2 00000ee3: SWAP1 00000ee4: PUSH2 0x274d 00000ee7: JUMP 00000ee8: JUMPDEST 00000ee9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000efe: AND 00000eff: DUP2 00000f00: MSTORE 00000f01: PUSH1 0x20 00000f03: DUP2 00000f04: ADD 00000f05: SWAP2 00000f06: SWAP1 00000f07: SWAP2 00000f08: MSTORE 00000f09: PUSH1 0x40 00000f0b: ADD 00000f0c: PUSH0 00000f0d: KECCAK256 00000f0e: DUP1 00000f0f: SLOAD 00000f10: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000f31: AND 00000f32: SWAP2 00000f33: ISZERO 00000f34: ISZERO 00000f35: SWAP2 00000f36: SWAP1 00000f37: SWAP2 00000f38: OR 00000f39: SWAP1 00000f3a: SSTORE 00000f3b: PUSH1 0x01 00000f3d: ADD 00000f3e: PUSH2 0x0eb5 00000f41: JUMP 00000f42: JUMPDEST 00000f43: POP 00000f44: POP 00000f45: POP 00000f46: JUMP 00000f47: JUMPDEST 00000f48: PUSH1 0x01 00000f4a: SLOAD 00000f4b: PUSH1 0x40 00000f4d: DUP1 00000f4e: MLOAD 00000f4f: DUP1 00000f50: DUP3 00000f51: ADD 00000f52: SWAP1 00000f53: SWAP2 00000f54: MSTORE 00000f55: PUSH1 0x04 00000f57: DUP2 00000f58: MSTORE 00000f59: PUSH32 0x4d30303300000000000000000000000000000000000000000000000000000000 00000f7a: PUSH1 0x20 00000f7c: DUP3 00000f7d: ADD 00000f7e: MSTORE 00000f7f: SWAP1 00000f80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f95: AND 00000f96: CALLER 00000f97: EQ 00000f98: PUSH2 0x0fce 00000f9b: JUMPI 00000f9c: PUSH1 0x40 00000f9e: MLOAD 00000f9f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000fc0: DUP2 00000fc1: MSTORE 00000fc2: PUSH1 0x04 00000fc4: ADD 00000fc5: PUSH2 0x0526 00000fc8: SWAP2 00000fc9: SWAP1 00000fca: PUSH2 0x2a95 00000fcd: JUMP 00000fce: JUMPDEST 00000fcf: POP 00000fd0: PUSH0 00000fd1: DUP1 00000fd2: SLOAD 00000fd3: PUSH1 0x40 00000fd5: MLOAD 00000fd6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000feb: SWAP1 00000fec: SWAP2 00000fed: AND 00000fee: SWAP1 00000fef: DUP4 00000ff0: SWAP1 00000ff1: JUMPDEST 00000ff2: PUSH0 00000ff3: PUSH1 0x40 00000ff5: MLOAD 00000ff6: DUP1 00000ff7: DUP4 00000ff8: SUB 00000ff9: DUP2 00000ffa: DUP6 00000ffb: DUP8 00000ffc: GAS 00000ffd: CALL 00000ffe: SWAP3 00000fff: POP 00001000: POP 00001001: POP 00001002: RETURNDATASIZE 00001003: DUP1 00001004: PUSH0 00001005: DUP2 00001006: EQ 00001007: PUSH2 0x102b 0000100a: JUMPI 0000100b: PUSH1 0x40 0000100d: MLOAD 0000100e: SWAP2 0000100f: POP 00001010: PUSH1 0x1f 00001012: NOT 00001013: PUSH1 0x3f 00001015: RETURNDATASIZE 00001016: ADD 00001017: AND 00001018: DUP3 00001019: ADD 0000101a: PUSH1 0x40 0000101c: MSTORE 0000101d: RETURNDATASIZE 0000101e: DUP3 0000101f: MSTORE 00001020: RETURNDATASIZE 00001021: PUSH0 00001022: PUSH1 0x20 00001024: DUP5 00001025: ADD 00001026: RETURNDATACOPY 00001027: PUSH2 0x1030 0000102a: JUMP 0000102b: JUMPDEST 0000102c: PUSH1 0x60 0000102e: SWAP2 0000102f: POP 00001030: JUMPDEST 00001031: POP 00001032: POP 00001033: SWAP1 00001034: POP 00001035: DUP1 00001036: PUSH1 0x40 00001038: MLOAD 00001039: DUP1 0000103a: PUSH1 0x40 0000103c: ADD 0000103d: PUSH1 0x40 0000103f: MSTORE 00001040: DUP1 00001041: PUSH1 0x04 00001043: DUP2 00001044: MSTORE 00001045: PUSH1 0x20 00001047: ADD 00001048: PUSH32 0x4d30303400000000000000000000000000000000000000000000000000000000 00001069: DUP2 0000106a: MSTORE 0000106b: POP 0000106c: SWAP1 0000106d: PUSH2 0x0f42 00001070: JUMPI 00001071: PUSH1 0x40 00001073: MLOAD 00001074: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001095: DUP2 00001096: MSTORE 00001097: PUSH1 0x04 00001099: ADD 0000109a: PUSH2 0x0526 0000109d: SWAP2 0000109e: SWAP1 0000109f: PUSH2 0x2a95 000010a2: JUMP 000010a3: JUMPDEST 000010a4: PUSH0 000010a5: SLOAD 000010a6: PUSH1 0x40 000010a8: DUP1 000010a9: MLOAD 000010aa: DUP1 000010ab: DUP3 000010ac: ADD 000010ad: SWAP1 000010ae: SWAP2 000010af: MSTORE 000010b0: PUSH1 0x04 000010b2: DUP2 000010b3: MSTORE 000010b4: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 000010d5: PUSH1 0x20 000010d7: DUP3 000010d8: ADD 000010d9: MSTORE 000010da: SWAP1 000010db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010f0: AND 000010f1: CALLER 000010f2: EQ 000010f3: PUSH2 0x1129 000010f6: JUMPI 000010f7: PUSH1 0x40 000010f9: MLOAD 000010fa: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000111b: DUP2 0000111c: MSTORE 0000111d: PUSH1 0x04 0000111f: ADD 00001120: PUSH2 0x0526 00001123: SWAP2 00001124: SWAP1 00001125: PUSH2 0x2a95 00001128: JUMP 00001129: JUMPDEST 0000112a: POP 0000112b: PUSH4 0xdeadbeef 00001130: SWAP1 00001131: SWAP2 00001132: ADD 00001133: SSTORE 00001134: JUMP 00001135: JUMPDEST 00001136: PUSH0 00001137: SLOAD 00001138: PUSH1 0x40 0000113a: DUP1 0000113b: MLOAD 0000113c: DUP1 0000113d: DUP3 0000113e: ADD 0000113f: SWAP1 00001140: SWAP2 00001141: MSTORE 00001142: PUSH1 0x04 00001144: DUP2 00001145: MSTORE 00001146: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00001167: PUSH1 0x20 00001169: DUP3 0000116a: ADD 0000116b: MSTORE 0000116c: SWAP1 0000116d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001182: AND 00001183: CALLER 00001184: EQ 00001185: PUSH2 0x11bb 00001188: JUMPI 00001189: PUSH1 0x40 0000118b: MLOAD 0000118c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011ad: DUP2 000011ae: MSTORE 000011af: PUSH1 0x04 000011b1: ADD 000011b2: PUSH2 0x0526 000011b5: SWAP2 000011b6: SWAP1 000011b7: PUSH2 0x2a95 000011ba: JUMP 000011bb: JUMPDEST 000011bc: POP 000011bd: PUSH2 0x08ec 000011c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011d5: DUP4 000011d6: AND 000011d7: CALLER 000011d8: DUP4 000011d9: PUSH2 0x1b70 000011dc: JUMP 000011dd: JUMPDEST 000011de: PUSH1 0x01 000011e0: SLOAD 000011e1: PUSH1 0x40 000011e3: DUP1 000011e4: MLOAD 000011e5: DUP1 000011e6: DUP3 000011e7: ADD 000011e8: SWAP1 000011e9: SWAP2 000011ea: MSTORE 000011eb: PUSH1 0x04 000011ed: DUP2 000011ee: MSTORE 000011ef: PUSH32 0x4d30303300000000000000000000000000000000000000000000000000000000 00001210: PUSH1 0x20 00001212: DUP3 00001213: ADD 00001214: MSTORE 00001215: SWAP1 00001216: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000122b: AND 0000122c: CALLER 0000122d: EQ 0000122e: PUSH2 0x1264 00001231: JUMPI 00001232: PUSH1 0x40 00001234: MLOAD 00001235: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001256: DUP2 00001257: MSTORE 00001258: PUSH1 0x04 0000125a: ADD 0000125b: PUSH2 0x0526 0000125e: SWAP2 0000125f: SWAP1 00001260: PUSH2 0x2a95 00001263: JUMP 00001264: JUMPDEST 00001265: POP 00001266: PUSH1 0x40 00001268: DUP1 00001269: MLOAD 0000126a: DUP1 0000126b: DUP3 0000126c: ADD 0000126d: SWAP1 0000126e: SWAP2 0000126f: MSTORE 00001270: PUSH1 0x04 00001272: DUP2 00001273: MSTORE 00001274: PUSH32 0x4d30303500000000000000000000000000000000000000000000000000000000 00001295: PUSH1 0x20 00001297: DUP3 00001298: ADD 00001299: MSTORE 0000129a: DUP4 0000129b: DUP3 0000129c: EQ 0000129d: PUSH2 0x12d3 000012a0: JUMPI 000012a1: PUSH1 0x40 000012a3: MLOAD 000012a4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000012c5: DUP2 000012c6: MSTORE 000012c7: PUSH1 0x04 000012c9: ADD 000012ca: PUSH2 0x0526 000012cd: SWAP2 000012ce: SWAP1 000012cf: PUSH2 0x2a95 000012d2: JUMP 000012d3: JUMPDEST 000012d4: POP 000012d5: PUSH0 000012d6: JUMPDEST 000012d7: DUP4 000012d8: DUP2 000012d9: LT 000012da: ISZERO 000012db: PUSH2 0x0b37 000012de: JUMPI 000012df: PUSH0 000012e0: SLOAD 000012e1: PUSH2 0x1357 000012e4: SWAP1 000012e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012fa: AND 000012fb: DUP5 000012fc: DUP5 000012fd: DUP5 000012fe: DUP2 000012ff: DUP2 00001300: LT 00001301: PUSH2 0x130c 00001304: JUMPI 00001305: PUSH2 0x130c 00001308: PUSH2 0x2ad4 0000130b: JUMP 0000130c: JUMPDEST 0000130d: SWAP1 0000130e: POP 0000130f: PUSH1 0x20 00001311: MUL 00001312: ADD 00001313: CALLDATALOAD 00001314: DUP8 00001315: DUP8 00001316: DUP6 00001317: DUP2 00001318: DUP2 00001319: LT 0000131a: PUSH2 0x1325 0000131d: JUMPI 0000131e: PUSH2 0x1325 00001321: PUSH2 0x2ad4 00001324: JUMP 00001325: JUMPDEST 00001326: SWAP1 00001327: POP 00001328: PUSH1 0x20 0000132a: MUL 0000132b: ADD 0000132c: PUSH1 0x20 0000132e: DUP2 0000132f: ADD 00001330: SWAP1 00001331: PUSH2 0x133a 00001334: SWAP2 00001335: SWAP1 00001336: PUSH2 0x274d 00001339: JUMP 0000133a: JUMPDEST 0000133b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001350: AND 00001351: SWAP2 00001352: SWAP1 00001353: PUSH2 0x1b70 00001356: JUMP 00001357: JUMPDEST 00001358: PUSH1 0x01 0000135a: ADD 0000135b: PUSH2 0x12d6 0000135e: JUMP 0000135f: JUMPDEST 00001360: PUSH0 00001361: SLOAD 00001362: PUSH1 0x40 00001364: DUP1 00001365: MLOAD 00001366: DUP1 00001367: DUP3 00001368: ADD 00001369: SWAP1 0000136a: SWAP2 0000136b: MSTORE 0000136c: PUSH1 0x04 0000136e: DUP2 0000136f: MSTORE 00001370: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00001391: PUSH1 0x20 00001393: DUP3 00001394: ADD 00001395: MSTORE 00001396: SWAP1 00001397: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013ac: AND 000013ad: CALLER 000013ae: EQ 000013af: PUSH2 0x13e5 000013b2: JUMPI 000013b3: PUSH1 0x40 000013b5: MLOAD 000013b6: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000013d7: DUP2 000013d8: MSTORE 000013d9: PUSH1 0x04 000013db: ADD 000013dc: PUSH2 0x0526 000013df: SWAP2 000013e0: SWAP1 000013e1: PUSH2 0x2a95 000013e4: JUMP 000013e5: JUMPDEST 000013e6: POP 000013e7: PUSH0 000013e8: CALLER 000013e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013fe: AND 000013ff: DUP3 00001400: PUSH1 0x40 00001402: MLOAD 00001403: PUSH2 0x0ff1 00001406: JUMP 00001407: JUMPDEST 00001408: PUSH0 00001409: SLOAD 0000140a: PUSH1 0x40 0000140c: DUP1 0000140d: MLOAD 0000140e: DUP1 0000140f: DUP3 00001410: ADD 00001411: SWAP1 00001412: SWAP2 00001413: MSTORE 00001414: PUSH1 0x04 00001416: DUP2 00001417: MSTORE 00001418: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00001439: PUSH1 0x20 0000143b: DUP3 0000143c: ADD 0000143d: MSTORE 0000143e: SWAP1 0000143f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001454: AND 00001455: CALLER 00001456: EQ 00001457: PUSH2 0x148d 0000145a: JUMPI 0000145b: PUSH1 0x40 0000145d: MLOAD 0000145e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000147f: DUP2 00001480: MSTORE 00001481: PUSH1 0x04 00001483: ADD 00001484: PUSH2 0x0526 00001487: SWAP2 00001488: SWAP1 00001489: PUSH2 0x2a95 0000148c: JUMP 0000148d: JUMPDEST 0000148e: POP 0000148f: PUSH1 0x01 00001491: DUP1 00001492: SLOAD 00001493: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 000014b4: AND 000014b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014ca: SWAP3 000014cb: SWAP1 000014cc: SWAP3 000014cd: AND 000014ce: SWAP2 000014cf: SWAP1 000014d0: SWAP2 000014d1: OR 000014d2: SWAP1 000014d3: SSTORE 000014d4: JUMP 000014d5: JUMPDEST 000014d6: PUSH0 000014d7: SLOAD 000014d8: PUSH1 0x40 000014da: DUP1 000014db: MLOAD 000014dc: DUP1 000014dd: DUP3 000014de: ADD 000014df: SWAP1 000014e0: SWAP2 000014e1: MSTORE 000014e2: PUSH1 0x04 000014e4: DUP2 000014e5: MSTORE 000014e6: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 00001507: PUSH1 0x20 00001509: DUP3 0000150a: ADD 0000150b: MSTORE 0000150c: SWAP1 0000150d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001522: AND 00001523: CALLER 00001524: EQ 00001525: PUSH2 0x155b 00001528: JUMPI 00001529: PUSH1 0x40 0000152b: MLOAD 0000152c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000154d: DUP2 0000154e: MSTORE 0000154f: PUSH1 0x04 00001551: ADD 00001552: PUSH2 0x0526 00001555: SWAP2 00001556: SWAP1 00001557: PUSH2 0x2a95 0000155a: JUMP 0000155b: JUMPDEST 0000155c: POP 0000155d: PUSH0 0000155e: JUMPDEST 0000155f: DUP2 00001560: DUP2 00001561: LT 00001562: ISZERO 00001563: PUSH2 0x0f42 00001566: JUMPI 00001567: PUSH1 0x01 00001569: PUSH1 0x03 0000156b: PUSH0 0000156c: DUP6 0000156d: DUP6 0000156e: DUP6 0000156f: DUP2 00001570: DUP2 00001571: LT 00001572: PUSH2 0x157d 00001575: JUMPI 00001576: PUSH2 0x157d 00001579: PUSH2 0x2ad4 0000157c: JUMP 0000157d: JUMPDEST 0000157e: SWAP1 0000157f: POP 00001580: PUSH1 0x20 00001582: MUL 00001583: ADD 00001584: PUSH1 0x20 00001586: DUP2 00001587: ADD 00001588: SWAP1 00001589: PUSH2 0x1592 0000158c: SWAP2 0000158d: SWAP1 0000158e: PUSH2 0x274d 00001591: JUMP 00001592: JUMPDEST 00001593: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015a8: AND 000015a9: DUP2 000015aa: MSTORE 000015ab: PUSH1 0x20 000015ad: DUP2 000015ae: ADD 000015af: SWAP2 000015b0: SWAP1 000015b1: SWAP2 000015b2: MSTORE 000015b3: PUSH1 0x40 000015b5: ADD 000015b6: PUSH0 000015b7: KECCAK256 000015b8: DUP1 000015b9: SLOAD 000015ba: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 000015db: AND 000015dc: SWAP2 000015dd: ISZERO 000015de: ISZERO 000015df: SWAP2 000015e0: SWAP1 000015e1: SWAP2 000015e2: OR 000015e3: SWAP1 000015e4: SSTORE 000015e5: PUSH1 0x01 000015e7: ADD 000015e8: PUSH2 0x155e 000015eb: JUMP 000015ec: JUMPDEST 000015ed: PUSH0 000015ee: SLOAD 000015ef: PUSH1 0x40 000015f1: DUP1 000015f2: MLOAD 000015f3: DUP1 000015f4: DUP3 000015f5: ADD 000015f6: SWAP1 000015f7: SWAP2 000015f8: MSTORE 000015f9: PUSH1 0x04 000015fb: DUP2 000015fc: MSTORE 000015fd: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000 0000161e: PUSH1 0x20 00001620: DUP3 00001621: ADD 00001622: MSTORE 00001623: SWAP1 00001624: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001639: AND 0000163a: CALLER 0000163b: EQ 0000163c: PUSH2 0x1672 0000163f: JUMPI 00001640: PUSH1 0x40 00001642: MLOAD 00001643: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001664: DUP2 00001665: MSTORE 00001666: PUSH1 0x04 00001668: ADD 00001669: PUSH2 0x0526 0000166c: SWAP2 0000166d: SWAP1 0000166e: PUSH2 0x2a95 00001671: JUMP 00001672: JUMPDEST 00001673: POP 00001674: PUSH1 0x02 00001676: DUP1 00001677: SLOAD 00001678: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00001699: AND 0000169a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016af: SWAP3 000016b0: SWAP1 000016b1: SWAP3 000016b2: AND 000016b3: SWAP2 000016b4: SWAP1 000016b5: SWAP2 000016b6: OR 000016b7: SWAP1 000016b8: SSTORE 000016b9: JUMP 000016ba: JUMPDEST 000016bb: PUSH1 0x2b 000016bd: DUP3 000016be: ADD 000016bf: CALLDATALOAD 000016c0: PUSH1 0xf8 000016c2: SHR 000016c3: PUSH0 000016c4: DUP2 000016c5: SWAP1 000016c6: SUB 000016c7: PUSH2 0x171a 000016ca: JUMPI 000016cb: PUSH2 0x0a74 000016ce: DUP6 000016cf: DUP6 000016d0: DUP6 000016d1: DUP6 000016d2: PUSH32 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54 000016f3: PUSH32 0x0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984 00001714: PUSH1 0x60 00001716: PUSH2 0x1c84 00001719: JUMP 0000171a: JUMPDEST 0000171b: DUP1 0000171c: PUSH1 0xff 0000171e: AND 0000171f: PUSH1 0x03 00001721: SUB 00001722: PUSH2 0x1775 00001725: JUMPI 00001726: PUSH2 0x0a74 00001729: DUP6 0000172a: DUP6 0000172b: DUP6 0000172c: DUP6 0000172d: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 0000174e: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 0000176f: PUSH1 0x60 00001771: PUSH2 0x1c84 00001774: JUMP 00001775: JUMPDEST 00001776: DUP1 00001777: PUSH1 0xff 00001779: AND 0000177a: PUSH1 0x04 0000177c: SUB 0000177d: PUSH2 0x0ad4 00001780: JUMPI 00001781: PUSH2 0x0a74 00001784: DUP6 00001785: DUP6 00001786: DUP6 00001787: DUP6 00001788: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 000017a9: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 000017ca: PUSH1 0x60 000017cc: PUSH2 0x1c84 000017cf: JUMP 000017d0: JUMPDEST 000017d1: PUSH0 000017d2: PUSH1 0x60 000017d4: DUP2 000017d5: PUSH1 0xff 000017d7: DUP7 000017d8: AND 000017d9: PUSH2 0x17ee 000017dc: JUMPI 000017dd: PUSH2 0x17e4 000017e0: PUSH2 0x1f73 000017e3: JUMP 000017e4: JUMPDEST 000017e5: SWAP1 000017e6: SWAP3 000017e7: POP 000017e8: SWAP1 000017e9: POP 000017ea: PUSH2 0x17fc 000017ed: JUMP 000017ee: JUMPDEST 000017ef: PUSH2 0x17f6 000017f2: PUSH2 0x20b0 000017f5: JUMP 000017f6: JUMPDEST 000017f7: SWAP1 000017f8: SWAP3 000017f9: POP 000017fa: SWAP1 000017fb: POP 000017fc: JUMPDEST 000017fd: DUP1 000017fe: PUSH2 0x180b 00001801: JUMPI 00001802: PUSH0 00001803: SWAP3 00001804: POP 00001805: POP 00001806: POP 00001807: PUSH2 0x18b5 0000180a: JUMP 0000180b: JUMPDEST 0000180c: PUSH1 0x40 0000180e: MLOAD 0000180f: PUSH32 0xe0232b4200000000000000000000000000000000000000000000000000000000 00001830: DUP2 00001831: MSTORE 00001832: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001847: PUSH32 0x000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb 00001868: AND 00001869: SWAP1 0000186a: PUSH4 0xe0232b42 0000186f: SWAP1 00001870: PUSH2 0x1881 00001873: SWAP1 00001874: DUP9 00001875: SWAP1 00001876: DUP9 00001877: SWAP1 00001878: DUP8 00001879: SWAP1 0000187a: PUSH1 0x04 0000187c: ADD 0000187d: PUSH2 0x2b01 00001880: JUMP 00001881: JUMPDEST 00001882: PUSH0 00001883: PUSH1 0x40 00001885: MLOAD 00001886: DUP1 00001887: DUP4 00001888: SUB 00001889: DUP2 0000188a: PUSH0 0000188b: DUP8 0000188c: DUP1 0000188d: EXTCODESIZE 0000188e: ISZERO 0000188f: DUP1 00001890: ISZERO 00001891: PUSH2 0x1898 00001894: JUMPI 00001895: PUSH0 00001896: PUSH0 00001897: REVERT 00001898: JUMPDEST 00001899: POP 0000189a: GAS 0000189b: CALL 0000189c: ISZERO 0000189d: DUP1 0000189e: ISZERO 0000189f: PUSH2 0x18aa 000018a2: JUMPI 000018a3: RETURNDATASIZE 000018a4: PUSH0 000018a5: PUSH0 000018a6: RETURNDATACOPY 000018a7: RETURNDATASIZE 000018a8: PUSH0 000018a9: REVERT 000018aa: JUMPDEST 000018ab: POP 000018ac: POP 000018ad: POP 000018ae: POP 000018af: PUSH1 0x01 000018b1: SWAP3 000018b2: POP 000018b3: POP 000018b4: POP 000018b5: JUMPDEST 000018b6: SWAP4 000018b7: SWAP3 000018b8: POP 000018b9: POP 000018ba: POP 000018bb: JUMP 000018bc: JUMPDEST 000018bd: PUSH0 000018be: PUSH1 0xff 000018c0: DUP3 000018c1: AND 000018c2: PUSH2 0x18d3 000018c5: JUMPI 000018c6: PUSH2 0x18cd 000018c9: PUSH2 0x2221 000018cc: JUMP 000018cd: JUMPDEST 000018ce: SWAP3 000018cf: SWAP2 000018d0: POP 000018d1: POP 000018d2: JUMP 000018d3: JUMPDEST 000018d4: PUSH2 0x18cd 000018d7: PUSH2 0x2365 000018da: JUMP 000018db: JUMPDEST 000018dc: SWAP2 000018dd: SWAP1 000018de: POP 000018df: JUMP 000018e0: JUMPDEST 000018e1: PUSH0 000018e2: DUP1 000018e3: DUP1 000018e4: PUSH2 0x1910 000018e7: PUSH1 0xff 000018e9: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000003 0000190a: AND 0000190b: SELFBALANCE 0000190c: PUSH2 0x2b3e 0000190f: JUMP 00001910: JUMPDEST 00001911: SWAP1 00001912: POP 00001913: PUSH1 0xff 00001915: DUP5 00001916: AND 00001917: PUSH2 0x19c9 0000191a: JUMPI 0000191b: DUP1 0000191c: DUP6 0000191d: GT 0000191e: ISZERO 0000191f: PUSH2 0x19c1 00001922: JUMPI 00001923: PUSH1 0x40 00001925: MLOAD 00001926: PUSH32 0x2e1a7d4d00000000000000000000000000000000000000000000000000000000 00001947: DUP2 00001948: MSTORE 00001949: PUSH1 0x04 0000194b: DUP2 0000194c: ADD 0000194d: DUP7 0000194e: SWAP1 0000194f: MSTORE 00001950: DUP6 00001951: SWAP3 00001952: POP 00001953: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001974: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001989: AND 0000198a: SWAP1 0000198b: PUSH4 0x2e1a7d4d 00001990: SWAP1 00001991: PUSH1 0x24 00001993: ADD 00001994: PUSH0 00001995: PUSH1 0x40 00001997: MLOAD 00001998: DUP1 00001999: DUP4 0000199a: SUB 0000199b: DUP2 0000199c: PUSH0 0000199d: DUP8 0000199e: DUP1 0000199f: EXTCODESIZE 000019a0: ISZERO 000019a1: DUP1 000019a2: ISZERO 000019a3: PUSH2 0x19aa 000019a6: JUMPI 000019a7: PUSH0 000019a8: PUSH0 000019a9: REVERT 000019aa: JUMPDEST 000019ab: POP 000019ac: GAS 000019ad: CALL 000019ae: ISZERO 000019af: DUP1 000019b0: ISZERO 000019b1: PUSH2 0x19bc 000019b4: JUMPI 000019b5: RETURNDATASIZE 000019b6: PUSH0 000019b7: PUSH0 000019b8: RETURNDATACOPY 000019b9: RETURNDATASIZE 000019ba: PUSH0 000019bb: REVERT 000019bc: JUMPDEST 000019bd: POP 000019be: POP 000019bf: POP 000019c0: POP 000019c1: JUMPDEST 000019c2: DUP5 000019c3: SWAP3 000019c4: POP 000019c5: PUSH2 0x19d9 000019c8: JUMP 000019c9: JUMPDEST 000019ca: DUP1 000019cb: DUP6 000019cc: GT 000019cd: ISZERO 000019ce: PUSH2 0x19d5 000019d1: JUMPI 000019d2: DUP1 000019d3: SWAP5 000019d4: POP 000019d5: JUMPDEST 000019d6: DUP5 000019d7: SWAP3 000019d8: POP 000019d9: JUMPDEST 000019da: PUSH0 000019db: PUSH1 0x01 000019dd: DUP8 000019de: PUSH1 0x05 000019e0: DUP2 000019e1: GT 000019e2: ISZERO 000019e3: PUSH2 0x19ee 000019e6: JUMPI 000019e7: PUSH2 0x19ee 000019ea: PUSH2 0x2aa7 000019ed: JUMP 000019ee: JUMPDEST 000019ef: SUB 000019f0: PUSH2 0x19fa 000019f3: JUMPI 000019f4: POP 000019f5: COINBASE 000019f6: PUSH2 0x1b5d 000019f9: JUMP 000019fa: JUMPDEST 000019fb: PUSH1 0x02 000019fd: DUP8 000019fe: PUSH1 0x05 00001a00: DUP2 00001a01: GT 00001a02: ISZERO 00001a03: PUSH2 0x1a0e 00001a06: JUMPI 00001a07: PUSH2 0x1a0e 00001a0a: PUSH2 0x2aa7 00001a0d: JUMP 00001a0e: JUMPDEST 00001a0f: SUB 00001a10: PUSH2 0x1a3a 00001a13: JUMPI 00001a14: POP 00001a15: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00001a36: PUSH2 0x1b5d 00001a39: JUMP 00001a3a: JUMPDEST 00001a3b: PUSH1 0x03 00001a3d: DUP8 00001a3e: PUSH1 0x05 00001a40: DUP2 00001a41: GT 00001a42: ISZERO 00001a43: PUSH2 0x1a4e 00001a46: JUMPI 00001a47: PUSH2 0x1a4e 00001a4a: PUSH2 0x2aa7 00001a4d: JUMP 00001a4e: JUMPDEST 00001a4f: SUB 00001a50: PUSH2 0x1a7a 00001a53: JUMPI 00001a54: POP 00001a55: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00001a76: PUSH2 0x1b5d 00001a79: JUMP 00001a7a: JUMPDEST 00001a7b: PUSH1 0x04 00001a7d: DUP8 00001a7e: PUSH1 0x05 00001a80: DUP2 00001a81: GT 00001a82: ISZERO 00001a83: PUSH2 0x1a8e 00001a86: JUMPI 00001a87: PUSH2 0x1a8e 00001a8a: PUSH2 0x2aa7 00001a8d: JUMP 00001a8e: JUMPDEST 00001a8f: SUB 00001a90: PUSH2 0x1aba 00001a93: JUMPI 00001a94: POP 00001a95: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00001ab6: PUSH2 0x1b5d 00001ab9: JUMP 00001aba: JUMPDEST 00001abb: PUSH1 0x05 00001abd: DUP8 00001abe: PUSH1 0x05 00001ac0: DUP2 00001ac1: GT 00001ac2: ISZERO 00001ac3: PUSH2 0x1ace 00001ac6: JUMPI 00001ac7: PUSH2 0x1ace 00001aca: PUSH2 0x2aa7 00001acd: JUMP 00001ace: JUMPDEST 00001acf: SUB 00001ad0: PUSH2 0x1afa 00001ad3: JUMPI 00001ad4: POP 00001ad5: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000 00001af6: PUSH2 0x1b5d 00001af9: JUMP 00001afa: JUMPDEST 00001afb: PUSH1 0x40 00001afd: DUP1 00001afe: MLOAD 00001aff: DUP1 00001b00: DUP3 00001b01: ADD 00001b02: DUP3 00001b03: MSTORE 00001b04: PUSH1 0x04 00001b06: DUP1 00001b07: DUP3 00001b08: MSTORE 00001b09: PUSH32 0x4d30313600000000000000000000000000000000000000000000000000000000 00001b2a: PUSH1 0x20 00001b2c: DUP4 00001b2d: ADD 00001b2e: MSTORE 00001b2f: SWAP2 00001b30: MLOAD 00001b31: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001b52: DUP2 00001b53: MSTORE 00001b54: PUSH2 0x0526 00001b57: SWAP3 00001b58: ADD 00001b59: PUSH2 0x2a95 00001b5c: JUMP 00001b5d: JUMPDEST 00001b5e: PUSH0 00001b5f: PUSH0 00001b60: PUSH0 00001b61: PUSH0 00001b62: DUP10 00001b63: DUP6 00001b64: GAS 00001b65: CALL 00001b66: POP 00001b67: POP 00001b68: POP 00001b69: SWAP4 00001b6a: POP 00001b6b: SWAP4 00001b6c: SWAP2 00001b6d: POP 00001b6e: POP 00001b6f: JUMP 00001b70: JUMPDEST 00001b71: PUSH1 0x40 00001b73: MLOAD 00001b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b89: DUP4 00001b8a: DUP2 00001b8b: AND 00001b8c: PUSH1 0x24 00001b8e: DUP4 00001b8f: ADD 00001b90: MSTORE 00001b91: PUSH1 0x44 00001b93: DUP3 00001b94: ADD 00001b95: DUP4 00001b96: SWAP1 00001b97: MSTORE 00001b98: PUSH2 0x0f42 00001b9b: SWAP2 00001b9c: DUP6 00001b9d: SWAP2 00001b9e: DUP3 00001b9f: AND 00001ba0: SWAP1 00001ba1: PUSH4 0xa9059cbb 00001ba6: SWAP1 00001ba7: PUSH1 0x64 00001ba9: ADD 00001baa: JUMPDEST 00001bab: PUSH1 0x40 00001bad: MLOAD 00001bae: PUSH1 0x20 00001bb0: DUP2 00001bb1: DUP4 00001bb2: SUB 00001bb3: SUB 00001bb4: DUP2 00001bb5: MSTORE 00001bb6: SWAP1 00001bb7: PUSH1 0x40 00001bb9: MSTORE 00001bba: SWAP2 00001bbb: POP 00001bbc: PUSH1 0xe0 00001bbe: SHL 00001bbf: PUSH1 0x20 00001bc1: DUP3 00001bc2: ADD 00001bc3: DUP1 00001bc4: MLOAD 00001bc5: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001be2: DUP4 00001be3: DUP2 00001be4: DUP4 00001be5: AND 00001be6: OR 00001be7: DUP4 00001be8: MSTORE 00001be9: POP 00001bea: POP 00001beb: POP 00001bec: POP 00001bed: PUSH2 0x2597 00001bf0: JUMP 00001bf1: JUMPDEST 00001bf2: PUSH0 00001bf3: JUMPDEST 00001bf4: DUP2 00001bf5: MLOAD 00001bf6: DUP2 00001bf7: LT 00001bf8: ISZERO 00001bf9: PUSH2 0x08ec 00001bfc: JUMPI 00001bfd: PUSH0 00001bfe: PUSH2 0x1c07 00001c01: DUP4 00001c02: DUP4 00001c03: PUSH2 0x2636 00001c06: JUMP 00001c07: JUMPDEST 00001c08: SWAP1 00001c09: POP 00001c0a: PUSH0 00001c0b: PUSH2 0x1c21 00001c0e: DUP5 00001c0f: PUSH2 0x1c19 00001c12: DUP6 00001c13: PUSH1 0x14 00001c15: PUSH2 0x2b76 00001c18: JUMP 00001c19: JUMPDEST 00001c1a: ADD 00001c1b: PUSH1 0x20 00001c1d: ADD 00001c1e: MLOAD 00001c1f: SWAP1 00001c20: JUMP 00001c21: JUMPDEST 00001c22: SWAP1 00001c23: POP 00001c24: PUSH0 00001c25: PUSH2 0x1c33 00001c28: DUP6 00001c29: PUSH2 0x1c19 00001c2c: DUP7 00001c2d: PUSH1 0x34 00001c2f: PUSH2 0x2b76 00001c32: JUMP 00001c33: JUMPDEST 00001c34: SWAP1 00001c35: POP 00001c36: PUSH0 00001c37: PUSH2 0x1c4c 00001c3a: DUP7 00001c3b: PUSH2 0x1c45 00001c3e: DUP8 00001c3f: PUSH1 0x54 00001c41: PUSH2 0x2b76 00001c44: JUMP 00001c45: JUMPDEST 00001c46: ADD 00001c47: PUSH1 0x20 00001c49: ADD 00001c4a: SWAP1 00001c4b: JUMP 00001c4c: JUMPDEST 00001c4d: SWAP1 00001c4e: POP 00001c4f: PUSH0 00001c50: PUSH0 00001c51: DUP4 00001c52: DUP4 00001c53: DUP7 00001c54: DUP9 00001c55: PUSH2 0x1388 00001c58: GAS 00001c59: SUB 00001c5a: CALL 00001c5b: DUP1 00001c5c: PUSH2 0x1c63 00001c5f: JUMPI 00001c60: PUSH0 00001c61: PUSH0 00001c62: REVERT 00001c63: JUMPDEST 00001c64: POP 00001c65: PUSH2 0x1c6f 00001c68: DUP3 00001c69: PUSH1 0x54 00001c6b: PUSH2 0x2b76 00001c6e: JUMP 00001c6f: JUMPDEST 00001c70: PUSH2 0x1c79 00001c73: SWAP1 00001c74: DUP7 00001c75: PUSH2 0x2b76 00001c78: JUMP 00001c79: JUMPDEST 00001c7a: SWAP5 00001c7b: POP 00001c7c: POP 00001c7d: POP 00001c7e: POP 00001c7f: POP 00001c80: PUSH2 0x1bf3 00001c83: JUMP 00001c84: JUMPDEST 00001c85: PUSH1 0x40 00001c87: MLOAD 00001c88: DUP6 00001c89: CALLDATALOAD 00001c8a: PUSH1 0x60 00001c8c: SWAP1 00001c8d: DUP2 00001c8e: SHR 00001c8f: SWAP2 00001c90: PUSH1 0x14 00001c92: DUP9 00001c93: ADD 00001c94: CALLDATALOAD 00001c95: SWAP1 00001c96: SWAP2 00001c97: SHR 00001c98: SWAP1 00001c99: PUSH1 0x28 00001c9b: DUP9 00001c9c: ADD 00001c9d: CALLDATALOAD 00001c9e: PUSH1 0xe8 00001ca0: SHR 00001ca1: SWAP1 00001ca2: PUSH1 0x2c 00001ca4: DUP10 00001ca5: ADD 00001ca6: CALLDATALOAD 00001ca7: PUSH1 0xf8 00001ca9: SHR 00001caa: SWAP1 00001cab: PUSH0 00001cac: SWAP1 00001cad: DUP5 00001cae: DUP7 00001caf: LT 00001cb0: PUSH1 0x01 00001cb2: DUP2 00001cb3: EQ 00001cb4: PUSH2 0x1cc5 00001cb7: JUMPI 00001cb8: DUP6 00001cb9: DUP3 00001cba: MSTORE 00001cbb: DUP7 00001cbc: PUSH1 0x20 00001cbe: DUP4 00001cbf: ADD 00001cc0: MSTORE 00001cc1: PUSH2 0x1ccf 00001cc4: JUMP 00001cc5: JUMPDEST 00001cc6: DUP7 00001cc7: DUP3 00001cc8: MSTORE 00001cc9: DUP6 00001cca: PUSH1 0x20 00001ccc: DUP4 00001ccd: ADD 00001cce: MSTORE 00001ccf: JUMPDEST 00001cd0: POP 00001cd1: PUSH1 0x60 00001cd3: DUP8 00001cd4: SUB 00001cd5: PUSH2 0x1cdf 00001cd8: JUMPI 00001cd9: DUP4 00001cda: PUSH1 0x40 00001cdc: DUP3 00001cdd: ADD 00001cde: MSTORE 00001cdf: JUMPDEST 00001ce0: DUP7 00001ce1: DUP2 00001ce2: KECCAK256 00001ce3: PUSH32 0xff00000000000000000000000000000000000000000000000000000000000000 00001d04: DUP3 00001d05: MSTORE 00001d06: PUSH1 0x60 00001d08: DUP10 00001d09: SWAP1 00001d0a: SHL 00001d0b: PUSH1 0x01 00001d0d: DUP4 00001d0e: ADD 00001d0f: MSTORE 00001d10: PUSH1 0x15 00001d12: DUP3 00001d13: ADD 00001d14: MSTORE 00001d15: PUSH1 0x35 00001d17: DUP2 00001d18: ADD 00001d19: DUP10 00001d1a: SWAP1 00001d1b: MSTORE 00001d1c: PUSH1 0x55 00001d1e: SWAP1 00001d1f: KECCAK256 00001d20: PUSH1 0x40 00001d22: DUP1 00001d23: MLOAD 00001d24: DUP1 00001d25: DUP3 00001d26: ADD 00001d27: SWAP1 00001d28: SWAP2 00001d29: MSTORE 00001d2a: PUSH1 0x04 00001d2c: DUP2 00001d2d: MSTORE 00001d2e: PUSH32 0x4d30313100000000000000000000000000000000000000000000000000000000 00001d4f: PUSH1 0x20 00001d51: DUP3 00001d52: ADD 00001d53: MSTORE 00001d54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d69: SWAP1 00001d6a: SWAP2 00001d6b: AND 00001d6c: SWAP2 00001d6d: POP 00001d6e: CALLER 00001d6f: DUP3 00001d70: EQ 00001d71: PUSH2 0x1da7 00001d74: JUMPI 00001d75: PUSH1 0x40 00001d77: MLOAD 00001d78: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001d99: DUP2 00001d9a: MSTORE 00001d9b: PUSH1 0x04 00001d9d: ADD 00001d9e: PUSH2 0x0526 00001da1: SWAP2 00001da2: SWAP1 00001da3: PUSH2 0x2a95 00001da6: JUMP 00001da7: JUMPDEST 00001da8: POP 00001da9: PUSH0 00001daa: PUSH0 00001dab: DUP14 00001dac: SGT 00001dad: PUSH2 0x1db6 00001db0: JUMPI 00001db1: DUP12 00001db2: PUSH2 0x1db8 00001db5: JUMP 00001db6: JUMPDEST 00001db7: DUP13 00001db8: JUMPDEST 00001db9: SWAP1 00001dba: POP 00001dbb: DUP3 00001dbc: ISZERO 00001dbd: PUSH2 0x1e45 00001dc0: JUMPI 00001dc1: PUSH4 0xdeadbeef 00001dc6: PUSH1 0x2d 00001dc8: DUP13 00001dc9: ADD 00001dca: CALLDATALOAD 00001dcb: PUSH1 0xf8 00001dcd: SHR 00001dce: ADD 00001dcf: SLOAD 00001dd0: PUSH1 0x40 00001dd2: MLOAD 00001dd3: PUSH32 0x39f8530600000000000000000000000000000000000000000000000000000000 00001df4: DUP2 00001df5: MSTORE 00001df6: PUSH1 0x2e 00001df8: DUP14 00001df9: ADD 00001dfa: SWAP2 00001dfb: SWAP1 00001dfc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2 00001e1d: DUP14 00001e1e: ADD 00001e1f: DUP1 00001e20: DUP5 00001e21: PUSH1 0x04 00001e23: DUP5 00001e24: ADD 00001e25: CALLDATACOPY 00001e26: PUSH0 00001e27: PUSH0 00001e28: PUSH1 0x04 00001e2a: DUP4 00001e2b: ADD 00001e2c: DUP5 00001e2d: DUP7 00001e2e: GAS 00001e2f: DELEGATECALL 00001e30: PUSH2 0x1e40 00001e33: JUMPI 00001e34: PUSH1 0x40 00001e36: MLOAD 00001e37: SWAP4 00001e38: POP 00001e39: RETURNDATASIZE 00001e3a: PUSH0 00001e3b: DUP6 00001e3c: RETURNDATACOPY 00001e3d: RETURNDATASIZE 00001e3e: DUP5 00001e3f: REVERT 00001e40: JUMPDEST 00001e41: POP 00001e42: POP 00001e43: POP 00001e44: POP 00001e45: JUMPDEST 00001e46: PUSH1 0x40 00001e48: MLOAD 00001e49: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001e6a: DUP2 00001e6b: MSTORE 00001e6c: DUP3 00001e6d: PUSH1 0x04 00001e6f: DUP3 00001e70: ADD 00001e71: MSTORE 00001e72: DUP2 00001e73: PUSH1 0x24 00001e75: DUP3 00001e76: ADD 00001e77: MSTORE 00001e78: PUSH0 00001e79: PUSH0 00001e7a: PUSH1 0x44 00001e7c: DUP4 00001e7d: PUSH0 00001e7e: DUP12 00001e7f: GAS 00001e80: CALL 00001e81: PUSH2 0x1e8c 00001e84: JUMPI 00001e85: RETURNDATASIZE 00001e86: PUSH0 00001e87: DUP3 00001e88: RETURNDATACOPY 00001e89: RETURNDATASIZE 00001e8a: DUP2 00001e8b: REVERT 00001e8c: JUMPDEST 00001e8d: POP 00001e8e: POP 00001e8f: POP 00001e90: POP 00001e91: POP 00001e92: POP 00001e93: POP 00001e94: POP 00001e95: POP 00001e96: POP 00001e97: POP 00001e98: POP 00001e99: POP 00001e9a: POP 00001e9b: JUMP 00001e9c: JUMPDEST 00001e9d: PUSH1 0x40 00001e9f: DUP1 00001ea0: MLOAD 00001ea1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001eb6: DUP5 00001eb7: AND 00001eb8: PUSH1 0x24 00001eba: DUP3 00001ebb: ADD 00001ebc: MSTORE 00001ebd: PUSH1 0x44 00001ebf: DUP1 00001ec0: DUP3 00001ec1: ADD 00001ec2: DUP5 00001ec3: SWAP1 00001ec4: MSTORE 00001ec5: DUP3 00001ec6: MLOAD 00001ec7: DUP1 00001ec8: DUP4 00001ec9: SUB 00001eca: SWAP1 00001ecb: SWAP2 00001ecc: ADD 00001ecd: DUP2 00001ece: MSTORE 00001ecf: PUSH1 0x64 00001ed1: SWAP1 00001ed2: SWAP2 00001ed3: ADD 00001ed4: SWAP1 00001ed5: SWAP2 00001ed6: MSTORE 00001ed7: PUSH1 0x20 00001ed9: DUP2 00001eda: ADD 00001edb: DUP1 00001edc: MLOAD 00001edd: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001efa: AND 00001efb: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00001f1c: OR 00001f1d: SWAP1 00001f1e: MSTORE 00001f1f: PUSH2 0x1f28 00001f22: DUP5 00001f23: DUP3 00001f24: PUSH2 0x2650 00001f27: JUMP 00001f28: JUMPDEST 00001f29: PUSH2 0x0a0d 00001f2c: JUMPI 00001f2d: PUSH1 0x40 00001f2f: MLOAD 00001f30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f45: DUP5 00001f46: DUP2 00001f47: AND 00001f48: PUSH1 0x24 00001f4a: DUP4 00001f4b: ADD 00001f4c: MSTORE 00001f4d: PUSH0 00001f4e: PUSH1 0x44 00001f50: DUP4 00001f51: ADD 00001f52: MSTORE 00001f53: PUSH2 0x1f69 00001f56: SWAP2 00001f57: DUP7 00001f58: SWAP2 00001f59: DUP3 00001f5a: AND 00001f5b: SWAP1 00001f5c: PUSH4 0x095ea7b3 00001f61: SWAP1 00001f62: PUSH1 0x64 00001f64: ADD 00001f65: PUSH2 0x1baa 00001f68: JUMP 00001f69: JUMPDEST 00001f6a: PUSH2 0x0a0d 00001f6d: DUP5 00001f6e: DUP3 00001f6f: PUSH2 0x2597 00001f72: JUMP 00001f73: JUMPDEST 00001f74: PUSH4 0xdeadbeef 00001f79: SLOAD 00001f7a: PUSH1 0x40 00001f7c: DUP1 00001f7d: MLOAD 00001f7e: CALLDATASIZE 00001f7f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf 00001fa0: DUP2 00001fa1: ADD 00001fa2: DUP3 00001fa3: MSTORE 00001fa4: DUP1 00001fa5: DUP3 00001fa6: ADD 00001fa7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf 00001fc8: ADD 00001fc9: SWAP1 00001fca: SWAP3 00001fcb: MSTORE 00001fcc: PUSH1 0x60 00001fce: SWAP3 00001fcf: PUSH0 00001fd0: SWAP3 00001fd1: PUSH1 0x01 00001fd3: SWAP2 00001fd4: DUP5 00001fd5: SWAP2 00001fd6: PUSH1 0x5a 00001fd8: DUP1 00001fd9: CALLDATALOAD 00001fda: PUSH1 0xf8 00001fdc: SHR 00001fdd: SWAP3 00001fde: SWAP2 00001fdf: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6 00002000: ADD 00002001: DUP6 00002002: PUSH1 0x59 00002004: PUSH1 0x20 00002006: DUP10 00002007: ADD 00002008: CALLDATACOPY 00002009: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00002027: PUSH1 0x21 00002029: DUP9 0000202a: ADD 0000202b: MSTORE 0000202c: PUSH1 0x14 0000202e: PUSH1 0x05 00002030: PUSH1 0x25 00002032: DUP10 00002033: ADD 00002034: CALLDATACOPY 00002035: DUP1 00002036: DUP3 00002037: PUSH1 0x39 00002039: DUP10 0000203a: ADD 0000203b: CALLDATACOPY 0000203c: DUP4 0000203d: PUSH2 0x2065 00002040: JUMPI 00002041: PUSH1 0x20 00002043: PUSH0 00002044: PUSH1 0x19 00002046: DUP4 00002047: ADD 00002048: PUSH1 0x21 0000204a: DUP11 0000204b: ADD 0000204c: PUSH0 0000204d: DUP8 0000204e: GAS 0000204f: CALL 00002050: PUSH2 0x2060 00002053: JUMPI 00002054: PUSH1 0x40 00002056: MLOAD 00002057: SWAP2 00002058: POP 00002059: RETURNDATASIZE 0000205a: PUSH0 0000205b: DUP4 0000205c: RETURNDATACOPY 0000205d: RETURNDATASIZE 0000205e: DUP3 0000205f: REVERT 00002060: JUMPDEST 00002061: PUSH0 00002062: MLOAD 00002063: SWAP5 00002064: POP 00002065: JUMPDEST 00002066: POP 00002067: POP 00002068: POP 00002069: PUSH1 0x25 0000206b: DUP5 0000206c: ADD 0000206d: MLOAD 0000206e: PUSH1 0x20 00002070: SHR 00002071: PUSH29 0x0200000000000000000000000000000000000000000000000000000000 0000208f: OR 00002090: PUSH1 0x21 00002092: DUP6 00002093: ADD 00002094: MSTORE 00002095: DUP1 00002096: DUP1 00002097: PUSH2 0x209d 0000209a: JUMPI 0000209b: POP 0000209c: DUP2 0000209d: JUMPDEST 0000209e: PUSH2 0x20a5 000020a1: JUMPI 000020a2: PUSH0 000020a3: SWAP3 000020a4: POP 000020a5: JUMPDEST 000020a6: POP 000020a7: SWAP2 000020a8: SWAP5 000020a9: SWAP1 000020aa: SWAP4 000020ab: POP 000020ac: SWAP2 000020ad: POP 000020ae: POP 000020af: JUMP 000020b0: JUMPDEST 000020b1: PUSH1 0x60 000020b3: PUSH0 000020b4: PUSH0 000020b5: PUSH0 000020b6: PUSH0 000020b7: PUSH0 000020b8: PUSH0 000020b9: PUSH1 0x60 000020bb: PUSH1 0x01 000020bd: PUSH4 0xdeadbeef 000020c2: ADD 000020c3: SLOAD 000020c4: PUSH1 0x5a 000020c6: CALLDATALOAD 000020c7: PUSH1 0xf8 000020c9: SHR 000020ca: SWAP7 000020cb: POP 000020cc: PUSH1 0x7b 000020ce: CALLDATALOAD 000020cf: SWAP5 000020d0: POP 000020d1: PUSH1 0x9c 000020d3: CALLDATALOAD 000020d4: SWAP4 000020d5: POP 000020d6: PUSH1 0xbc 000020d8: CALLDATALOAD 000020d9: PUSH1 0xf8 000020db: SHR 000020dc: SWAP3 000020dd: POP 000020de: PUSH1 0x5a 000020e0: CALLDATASIZE 000020e1: SUB 000020e2: PUSH1 0x04 000020e4: DUP2 000020e5: ADD 000020e6: PUSH1 0x40 000020e8: DUP6 000020e9: MUL 000020ea: PUSH1 0xc0 000020ec: ADD 000020ed: DUP1 000020ee: PUSH1 0x01 000020f0: ADD 000020f1: DUP3 000020f2: ADD 000020f3: PUSH1 0x40 000020f5: MLOAD 000020f6: SWAP6 000020f7: POP 000020f8: DUP1 000020f9: DUP7 000020fa: MSTORE 000020fb: DUP1 000020fc: PUSH1 0x20 000020fe: DUP8 000020ff: ADD 00002100: ADD 00002101: PUSH1 0x40 00002103: MSTORE 00002104: POP 00002105: PUSH1 0x01 00002107: PUSH1 0x20 00002109: DUP7 0000210a: ADD 0000210b: MSTORE8 0000210c: DUP1 0000210d: PUSH1 0x21 0000210f: ADD 00002110: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000212e: DUP2 0000212f: DUP8 00002130: ADD 00002131: MSTORE 00002132: DUP4 00002133: PUSH1 0x5a 00002135: DUP4 00002136: PUSH1 0x25 00002138: ADD 00002139: DUP9 0000213a: ADD 0000213b: CALLDATACOPY 0000213c: PUSH0 0000213d: PUSH0 0000213e: DUP5 0000213f: DUP4 00002140: DUP10 00002141: ADD 00002142: DUP9 00002143: GAS 00002144: DELEGATECALL 00002145: PUSH2 0x2155 00002148: JUMPI 00002149: PUSH1 0x40 0000214b: MLOAD 0000214c: SWAP4 0000214d: POP 0000214e: RETURNDATASIZE 0000214f: PUSH0 00002150: DUP6 00002151: RETURNDATACOPY 00002152: RETURNDATASIZE 00002153: DUP5 00002154: REVERT 00002155: JUMPDEST 00002156: POP 00002157: POP 00002158: POP 00002159: POP 0000215a: POP 0000215b: RETURNDATASIZE 0000215c: PUSH29 0x0200000000000000000000000000000000000000000000000000000000 0000217a: PUSH1 0x21 0000217c: DUP4 0000217d: ADD 0000217e: MSTORE 0000217f: DUP1 00002180: PUSH1 0x25 00002182: DUP4 00002183: ADD 00002184: MSTORE 00002185: DUP1 00002186: PUSH0 00002187: PUSH1 0x45 00002189: DUP5 0000218a: ADD 0000218b: RETURNDATACOPY 0000218c: POP 0000218d: PUSH1 0x45 0000218f: DUP2 00002190: ADD 00002191: MLOAD 00002192: SWAP5 00002193: POP 00002194: DUP3 00002195: DUP5 00002196: DUP7 00002197: SUB 00002198: SLT 00002199: ISZERO 0000219a: PUSH2 0x2213 0000219d: JUMPI 0000219e: DUP6 0000219f: ISZERO 000021a0: PUSH2 0x2206 000021a3: JUMPI 000021a4: PUSH1 0x40 000021a6: DUP1 000021a7: MLOAD 000021a8: DUP1 000021a9: DUP3 000021aa: ADD 000021ab: DUP3 000021ac: MSTORE 000021ad: PUSH1 0x04 000021af: DUP1 000021b0: DUP3 000021b1: MSTORE 000021b2: PUSH32 0x4d30313400000000000000000000000000000000000000000000000000000000 000021d3: PUSH1 0x20 000021d5: DUP4 000021d6: ADD 000021d7: MSTORE 000021d8: SWAP2 000021d9: MLOAD 000021da: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000021fb: DUP2 000021fc: MSTORE 000021fd: PUSH2 0x0526 00002200: SWAP3 00002201: ADD 00002202: PUSH2 0x2a95 00002205: JUMP 00002206: JUMPDEST 00002207: SWAP8 00002208: PUSH0 00002209: SWAP8 0000220a: POP 0000220b: SWAP6 0000220c: POP 0000220d: POP 0000220e: POP 0000220f: POP 00002210: POP 00002211: POP 00002212: JUMP 00002213: JUMPDEST 00002214: SWAP8 00002215: PUSH1 0x01 00002217: SWAP8 00002218: POP 00002219: SWAP6 0000221a: POP 0000221b: POP 0000221c: POP 0000221d: POP 0000221e: POP 0000221f: POP 00002220: JUMP 00002221: JUMPDEST 00002222: PUSH0 00002223: PUSH1 0x5a 00002225: DUP1 00002226: CALLDATALOAD 00002227: PUSH1 0xf8 00002229: SHR 0000222a: SWAP1 0000222b: PUSH1 0x05 0000222d: CALLDATALOAD 0000222e: PUSH1 0x60 00002230: SHR 00002231: SWAP1 00002232: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6 00002253: CALLDATASIZE 00002254: ADD 00002255: PUSH1 0x7c 00002257: CALLDATALOAD 00002258: DUP5 00002259: PUSH2 0x22c8 0000225c: JUMPI 0000225d: PUSH0 0000225e: PUSH0 0000225f: PUSH4 0xdeadbeef 00002264: ADD 00002265: SLOAD 00002266: PUSH1 0x40 00002268: MLOAD 00002269: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00002287: DUP2 00002288: MSTORE 00002289: DUP7 0000228a: PUSH1 0x04 0000228c: DUP3 0000228d: ADD 0000228e: MSTORE 0000228f: DUP5 00002290: DUP7 00002291: PUSH1 0x18 00002293: DUP4 00002294: ADD 00002295: CALLDATACOPY 00002296: PUSH1 0x20 00002298: PUSH0 00002299: PUSH1 0x18 0000229b: DUP8 0000229c: ADD 0000229d: DUP4 0000229e: DUP6 0000229f: GAS 000022a0: DELEGATECALL 000022a1: PUSH2 0x22af 000022a4: JUMPI 000022a5: PUSH1 0x40 000022a7: MLOAD 000022a8: RETURNDATASIZE 000022a9: PUSH0 000022aa: DUP3 000022ab: RETURNDATACOPY 000022ac: RETURNDATASIZE 000022ad: DUP2 000022ae: REVERT 000022af: JUMPDEST 000022b0: POP 000022b1: POP 000022b2: PUSH0 000022b3: MLOAD 000022b4: SWAP1 000022b5: POP 000022b6: DUP1 000022b7: PUSH2 0x22c6 000022ba: JUMPI 000022bb: PUSH0 000022bc: SWAP7 000022bd: POP 000022be: POP 000022bf: POP 000022c0: POP 000022c1: POP 000022c2: POP 000022c3: POP 000022c4: SWAP1 000022c5: JUMP 000022c6: JUMPDEST 000022c7: POP 000022c8: JUMPDEST 000022c9: PUSH4 0xdeadbeef 000022ce: SLOAD 000022cf: PUSH1 0x40 000022d1: MLOAD 000022d2: PUSH32 0xff0f2b9a00000000000000000000000000000000000000000000000000000000 000022f3: DUP2 000022f4: MSTORE 000022f5: PUSH1 0x9c 000022f7: SWAP2 000022f8: SWAP1 000022f9: PUSH1 0x03 000022fb: PUSH1 0x9d 000022fd: CALLDATALOAD 000022fe: PUSH1 0xf0 00002300: SHR 00002301: ADD 00002302: DUP1 00002303: DUP5 00002304: PUSH1 0x04 00002306: DUP5 00002307: ADD 00002308: CALLDATACOPY 00002309: PUSH0 0000230a: DUP2 0000230b: PUSH1 0x04 0000230d: ADD 0000230e: DUP4 0000230f: ADD 00002310: MSTORE8 00002311: DUP9 00002312: DUP2 00002313: PUSH1 0x05 00002315: ADD 00002316: DUP4 00002317: ADD 00002318: MSTORE8 00002319: DUP8 0000231a: PUSH1 0x60 0000231c: SHL 0000231d: DUP2 0000231e: PUSH1 0x06 00002320: ADD 00002321: DUP4 00002322: ADD 00002323: MSTORE 00002324: DUP5 00002325: DUP2 00002326: PUSH1 0x1a 00002328: ADD 00002329: DUP4 0000232a: ADD 0000232b: MSTORE 0000232c: DUP1 0000232d: DUP5 0000232e: ADD 0000232f: CALLDATASIZE 00002330: SUB 00002331: DUP2 00002332: DUP6 00002333: ADD 00002334: DUP3 00002335: PUSH1 0x3a 00002337: ADD 00002338: DUP5 00002339: ADD 0000233a: CALLDATACOPY 0000233b: POP 0000233c: PUSH0 0000233d: PUSH0 0000233e: PUSH1 0x3a 00002340: DUP6 00002341: CALLDATASIZE 00002342: SUB 00002343: ADD 00002344: DUP4 00002345: DUP6 00002346: GAS 00002347: DELEGATECALL 00002348: PUSH2 0x2356 0000234b: JUMPI 0000234c: PUSH1 0x40 0000234e: MLOAD 0000234f: RETURNDATASIZE 00002350: PUSH0 00002351: DUP3 00002352: RETURNDATACOPY 00002353: RETURNDATASIZE 00002354: DUP2 00002355: REVERT 00002356: JUMPDEST 00002357: POP 00002358: POP 00002359: PUSH1 0x01 0000235b: SWAP7 0000235c: POP 0000235d: POP 0000235e: POP 0000235f: POP 00002360: POP 00002361: POP 00002362: POP 00002363: SWAP1 00002364: JUMP 00002365: JUMPDEST 00002366: PUSH0 00002367: PUSH1 0x60 00002369: PUSH2 0x2391 0000236c: PUSH1 0x40 0000236e: MLOAD 0000236f: DUP1 00002370: PUSH1 0x80 00002372: ADD 00002373: PUSH1 0x40 00002375: MSTORE 00002376: DUP1 00002377: PUSH0 00002378: ISZERO 00002379: ISZERO 0000237a: DUP2 0000237b: MSTORE 0000237c: PUSH1 0x20 0000237e: ADD 0000237f: PUSH0 00002380: DUP2 00002381: MSTORE 00002382: PUSH1 0x20 00002384: ADD 00002385: PUSH0 00002386: DUP2 00002387: MSTORE 00002388: PUSH1 0x20 0000238a: ADD 0000238b: PUSH0 0000238c: DUP2 0000238d: MSTORE 0000238e: POP 0000238f: SWAP1 00002390: JUMP 00002391: JUMPDEST 00002392: PUSH0 00002393: PUSH0 00002394: PUSH0 00002395: PUSH0 00002396: PUSH1 0x5a 00002398: CALLDATALOAD 00002399: PUSH1 0xf8 0000239b: SHR 0000239c: DUP6 0000239d: MSTORE 0000239e: PUSH1 0x9c 000023a0: CALLDATALOAD 000023a1: PUSH1 0x20 000023a3: DUP7 000023a4: ADD 000023a5: MSTORE 000023a6: PUSH1 0x7b 000023a8: CALLDATALOAD 000023a9: PUSH1 0x40 000023ab: DUP7 000023ac: ADD 000023ad: MSTORE 000023ae: PUSH1 0xbc 000023b0: CALLDATALOAD 000023b1: PUSH1 0xf8 000023b3: SHR 000023b4: SWAP4 000023b5: POP 000023b6: PUSH1 0xbd 000023b8: SWAP1 000023b9: POP 000023ba: DUP1 000023bb: CALLDATASIZE 000023bc: SUB 000023bd: SWAP2 000023be: POP 000023bf: PUSH1 0x01 000023c1: DUP2 000023c2: ADD 000023c3: CALLDATALOAD 000023c4: PUSH1 0xf0 000023c6: SHR 000023c7: SWAP3 000023c8: POP 000023c9: PUSH1 0x03 000023cb: DUP4 000023cc: ADD 000023cd: SWAP3 000023ce: POP 000023cf: PUSH1 0x40 000023d1: MLOAD 000023d2: SWAP6 000023d3: POP 000023d4: DUP4 000023d5: PUSH1 0x40 000023d7: MUL 000023d8: DUP3 000023d9: ADD 000023da: PUSH2 0x0106 000023dd: ADD 000023de: DUP1 000023df: DUP8 000023e0: ADD 000023e1: PUSH1 0x40 000023e3: MSTORE 000023e4: POP 000023e5: PUSH0 000023e6: PUSH0 000023e7: PUSH0 000023e8: PUSH0 000023e9: PUSH0 000023ea: PUSH1 0x5a 000023ec: SWAP2 000023ed: POP 000023ee: DUP2 000023ef: CALLDATASIZE 000023f0: SUB 000023f1: SWAP1 000023f2: POP 000023f3: PUSH1 0x01 000023f5: PUSH4 0xdeadbeef 000023fa: ADD 000023fb: SLOAD 000023fc: PUSH1 0x40 000023fe: MLOAD 000023ff: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000241d: DUP2 0000241e: MSTORE 0000241f: DUP3 00002420: DUP5 00002421: PUSH1 0x04 00002423: DUP4 00002424: ADD 00002425: CALLDATACOPY 00002426: PUSH0 00002427: PUSH0 00002428: PUSH1 0x04 0000242a: DUP6 0000242b: ADD 0000242c: DUP4 0000242d: DUP6 0000242e: GAS 0000242f: DELEGATECALL 00002430: PUSH2 0x243e 00002433: JUMPI 00002434: PUSH1 0x40 00002436: MLOAD 00002437: RETURNDATASIZE 00002438: PUSH0 00002439: DUP3 0000243a: RETURNDATACOPY 0000243b: RETURNDATASIZE 0000243c: DUP2 0000243d: REVERT 0000243e: JUMPDEST 0000243f: POP 00002440: POP 00002441: RETURNDATASIZE 00002442: SWAP5 00002443: POP 00002444: DUP8 00002445: PUSH1 0x45 00002447: ADD 00002448: DUP12 00002449: ADD 0000244a: DUP6 0000244b: DUP2 0000244c: MSTORE 0000244d: DUP6 0000244e: PUSH0 0000244f: PUSH1 0x20 00002451: DUP4 00002452: ADD 00002453: RETURNDATACOPY 00002454: PUSH1 0x20 00002456: DUP2 00002457: ADD 00002458: MLOAD 00002459: PUSH1 0x60 0000245b: DUP13 0000245c: ADD 0000245d: MSTORE 0000245e: PUSH1 0xa0 00002460: DUP2 00002461: ADD 00002462: MLOAD 00002463: SWAP5 00002464: POP 00002465: PUSH1 0x80 00002467: DUP2 00002468: ADD 00002469: MLOAD 0000246a: PUSH1 0x20 0000246c: DUP2 0000246d: MUL 0000246e: PUSH1 0xc0 00002470: ADD 00002471: DUP3 00002472: ADD 00002473: MLOAD 00002474: SWAP5 00002475: POP 00002476: POP 00002477: POP 00002478: DUP10 00002479: PUSH1 0x20 0000247b: ADD 0000247c: MLOAD 0000247d: DUP11 0000247e: PUSH1 0x40 00002480: ADD 00002481: MLOAD 00002482: DUP12 00002483: PUSH1 0x60 00002485: ADD 00002486: MLOAD 00002487: SUB 00002488: SLT 00002489: ISZERO 0000248a: PUSH2 0x2508 0000248d: JUMPI 0000248e: DUP10 0000248f: MLOAD 00002490: ISZERO 00002491: PUSH2 0x24f7 00002494: JUMPI 00002495: PUSH1 0x40 00002497: DUP1 00002498: MLOAD 00002499: DUP1 0000249a: DUP3 0000249b: ADD 0000249c: DUP3 0000249d: MSTORE 0000249e: PUSH1 0x04 000024a0: DUP1 000024a1: DUP3 000024a2: MSTORE 000024a3: PUSH32 0x4d30313400000000000000000000000000000000000000000000000000000000 000024c4: PUSH1 0x20 000024c6: DUP4 000024c7: ADD 000024c8: MSTORE 000024c9: SWAP2 000024ca: MLOAD 000024cb: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000024ec: DUP2 000024ed: MSTORE 000024ee: PUSH2 0x0526 000024f1: SWAP3 000024f2: ADD 000024f3: PUSH2 0x2a95 000024f6: JUMP 000024f7: JUMPDEST 000024f8: PUSH0 000024f9: SWAP12 000024fa: POP 000024fb: POP 000024fc: POP 000024fd: POP 000024fe: POP 000024ff: POP 00002500: POP 00002501: POP 00002502: POP 00002503: POP 00002504: POP 00002505: POP 00002506: SWAP1 00002507: JUMP 00002508: JUMPDEST 00002509: PUSH1 0x01 0000250b: PUSH4 0xdeadbeef 00002510: ADD 00002511: SLOAD 00002512: PUSH32 0xff0f2b9a00000000000000000000000000000000000000000000000000000000 00002533: DUP13 00002534: MSTORE 00002535: DUP5 00002536: PUSH1 0x04 00002538: DUP14 00002539: ADD 0000253a: MSTORE 0000253b: DUP4 0000253c: PUSH1 0x24 0000253e: DUP14 0000253f: ADD 00002540: MSTORE 00002541: DUP9 00002542: DUP8 00002543: PUSH1 0x44 00002545: DUP15 00002546: ADD 00002547: CALLDATACOPY 00002548: PUSH1 0x01 0000254a: DUP10 0000254b: PUSH1 0x44 0000254d: ADD 0000254e: DUP14 0000254f: ADD 00002550: MSTORE8 00002551: DUP10 00002552: DUP7 00002553: DUP11 00002554: ADD 00002555: PUSH1 0x65 00002557: ADD 00002558: DUP14 00002559: ADD 0000255a: MSTORE8 0000255b: DUP9 0000255c: DUP9 0000255d: SUB 0000255e: DUP10 0000255f: DUP9 00002560: ADD 00002561: DUP8 00002562: DUP12 00002563: ADD 00002564: PUSH1 0x66 00002566: ADD 00002567: DUP15 00002568: ADD 00002569: CALLDATACOPY 0000256a: PUSH0 0000256b: PUSH0 0000256c: PUSH1 0x66 0000256e: DUP9 0000256f: ADD 00002570: DUP11 00002571: ADD 00002572: DUP15 00002573: DUP5 00002574: GAS 00002575: DELEGATECALL 00002576: PUSH2 0x2584 00002579: JUMPI 0000257a: PUSH1 0x40 0000257c: MLOAD 0000257d: RETURNDATASIZE 0000257e: PUSH0 0000257f: DUP3 00002580: RETURNDATACOPY 00002581: RETURNDATASIZE 00002582: DUP2 00002583: REVERT 00002584: JUMPDEST 00002585: POP 00002586: PUSH1 0x01 00002588: SWAP12 00002589: POP 0000258a: POP 0000258b: POP 0000258c: POP 0000258d: POP 0000258e: POP 0000258f: POP 00002590: POP 00002591: POP 00002592: POP 00002593: POP 00002594: POP 00002595: SWAP1 00002596: JUMP 00002597: JUMPDEST 00002598: PUSH0 00002599: PUSH0 0000259a: PUSH1 0x20 0000259c: PUSH0 0000259d: DUP5 0000259e: MLOAD 0000259f: PUSH1 0x20 000025a1: DUP7 000025a2: ADD 000025a3: PUSH0 000025a4: DUP9 000025a5: GAS 000025a6: CALL 000025a7: DUP1 000025a8: PUSH2 0x25b6 000025ab: JUMPI 000025ac: PUSH1 0x40 000025ae: MLOAD 000025af: RETURNDATASIZE 000025b0: PUSH0 000025b1: DUP3 000025b2: RETURNDATACOPY 000025b3: RETURNDATASIZE 000025b4: DUP2 000025b5: REVERT 000025b6: JUMPDEST 000025b7: POP 000025b8: POP 000025b9: PUSH0 000025ba: MLOAD 000025bb: RETURNDATASIZE 000025bc: SWAP2 000025bd: POP 000025be: DUP2 000025bf: ISZERO 000025c0: PUSH2 0x25cd 000025c3: JUMPI 000025c4: DUP1 000025c5: PUSH1 0x01 000025c7: EQ 000025c8: ISZERO 000025c9: PUSH2 0x25e7 000025cc: JUMP 000025cd: JUMPDEST 000025ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025e3: DUP5 000025e4: AND 000025e5: EXTCODESIZE 000025e6: ISZERO 000025e7: JUMPDEST 000025e8: ISZERO 000025e9: PUSH2 0x0a0d 000025ec: JUMPI 000025ed: PUSH1 0x40 000025ef: MLOAD 000025f0: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000 00002611: DUP2 00002612: MSTORE 00002613: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002628: DUP6 00002629: AND 0000262a: PUSH1 0x04 0000262c: DUP3 0000262d: ADD 0000262e: MSTORE 0000262f: PUSH1 0x24 00002631: ADD 00002632: PUSH2 0x0526 00002635: JUMP 00002636: JUMPDEST 00002637: PUSH0 00002638: PUSH0 00002639: PUSH2 0x2645 0000263c: DUP5 0000263d: DUP5 0000263e: ADD 0000263f: PUSH1 0x20 00002641: ADD 00002642: MLOAD 00002643: SWAP1 00002644: JUMP 00002645: JUMPDEST 00002646: PUSH1 0x60 00002648: SHR 00002649: SWAP5 0000264a: SWAP4 0000264b: POP 0000264c: POP 0000264d: POP 0000264e: POP 0000264f: JUMP 00002650: JUMPDEST 00002651: PUSH0 00002652: PUSH0 00002653: PUSH0 00002654: PUSH0 00002655: PUSH1 0x20 00002657: PUSH0 00002658: DUP7 00002659: MLOAD 0000265a: PUSH1 0x20 0000265c: DUP9 0000265d: ADD 0000265e: PUSH0 0000265f: DUP11 00002660: GAS 00002661: CALL 00002662: SWAP3 00002663: POP 00002664: RETURNDATASIZE 00002665: SWAP2 00002666: POP 00002667: PUSH0 00002668: MLOAD 00002669: SWAP1 0000266a: POP 0000266b: DUP3 0000266c: DUP1 0000266d: ISZERO 0000266e: PUSH2 0x269c 00002671: JUMPI 00002672: POP 00002673: DUP2 00002674: ISZERO 00002675: PUSH2 0x2681 00002678: JUMPI 00002679: DUP1 0000267a: PUSH1 0x01 0000267c: EQ 0000267d: PUSH2 0x269c 00002680: JUMP 00002681: JUMPDEST 00002682: PUSH0 00002683: DUP7 00002684: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002699: AND 0000269a: EXTCODESIZE 0000269b: GT 0000269c: JUMPDEST 0000269d: SWAP7 0000269e: SWAP6 0000269f: POP 000026a0: POP 000026a1: POP 000026a2: POP 000026a3: POP 000026a4: POP 000026a5: JUMP 000026a6: JUMPDEST 000026a7: PUSH0 000026a8: PUSH0 000026a9: DUP4 000026aa: PUSH1 0x1f 000026ac: DUP5 000026ad: ADD 000026ae: SLT 000026af: PUSH2 0x26b6 000026b2: JUMPI 000026b3: PUSH0 000026b4: PUSH0 000026b5: REVERT 000026b6: JUMPDEST 000026b7: POP 000026b8: DUP2 000026b9: CALLDATALOAD 000026ba: PUSH8 0xffffffffffffffff 000026c3: DUP2 000026c4: GT 000026c5: ISZERO 000026c6: PUSH2 0x26cd 000026c9: JUMPI 000026ca: PUSH0 000026cb: PUSH0 000026cc: REVERT 000026cd: JUMPDEST 000026ce: PUSH1 0x20 000026d0: DUP4 000026d1: ADD 000026d2: SWAP2 000026d3: POP 000026d4: DUP4 000026d5: PUSH1 0x20 000026d7: DUP3 000026d8: DUP6 000026d9: ADD 000026da: ADD 000026db: GT 000026dc: ISZERO 000026dd: PUSH2 0x26e4 000026e0: JUMPI 000026e1: PUSH0 000026e2: PUSH0 000026e3: REVERT 000026e4: JUMPDEST 000026e5: SWAP3 000026e6: POP 000026e7: SWAP3 000026e8: SWAP1 000026e9: POP 000026ea: JUMP 000026eb: JUMPDEST 000026ec: PUSH0 000026ed: PUSH0 000026ee: PUSH1 0x20 000026f0: DUP4 000026f1: DUP6 000026f2: SUB 000026f3: SLT 000026f4: ISZERO 000026f5: PUSH2 0x26fc 000026f8: JUMPI 000026f9: PUSH0 000026fa: PUSH0 000026fb: REVERT 000026fc: JUMPDEST 000026fd: DUP3 000026fe: CALLDATALOAD 000026ff: PUSH8 0xffffffffffffffff 00002708: DUP2 00002709: GT 0000270a: ISZERO 0000270b: PUSH2 0x2712 0000270e: JUMPI 0000270f: PUSH0 00002710: PUSH0 00002711: REVERT 00002712: JUMPDEST 00002713: PUSH2 0x271e 00002716: DUP6 00002717: DUP3 00002718: DUP7 00002719: ADD 0000271a: PUSH2 0x26a6 0000271d: JUMP 0000271e: JUMPDEST 0000271f: SWAP1 00002720: SWAP7 00002721: SWAP1 00002722: SWAP6 00002723: POP 00002724: SWAP4 00002725: POP 00002726: POP 00002727: POP 00002728: POP 00002729: JUMP 0000272a: JUMPDEST 0000272b: DUP1 0000272c: CALLDATALOAD 0000272d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002742: DUP2 00002743: AND 00002744: DUP2 00002745: EQ 00002746: PUSH2 0x18db 00002749: JUMPI 0000274a: PUSH0 0000274b: PUSH0 0000274c: REVERT 0000274d: JUMPDEST 0000274e: PUSH0 0000274f: PUSH1 0x20 00002751: DUP3 00002752: DUP5 00002753: SUB 00002754: SLT 00002755: ISZERO 00002756: PUSH2 0x275d 00002759: JUMPI 0000275a: PUSH0 0000275b: PUSH0 0000275c: REVERT 0000275d: JUMPDEST 0000275e: PUSH2 0x18b5 00002761: DUP3 00002762: PUSH2 0x272a 00002765: JUMP 00002766: JUMPDEST 00002767: DUP1 00002768: CALLDATALOAD 00002769: PUSH1 0xff 0000276b: DUP2 0000276c: AND 0000276d: DUP2 0000276e: EQ 0000276f: PUSH2 0x18db 00002772: JUMPI 00002773: PUSH0 00002774: PUSH0 00002775: REVERT 00002776: JUMPDEST 00002777: PUSH0 00002778: PUSH1 0x20 0000277a: DUP3 0000277b: DUP5 0000277c: SUB 0000277d: SLT 0000277e: ISZERO 0000277f: PUSH2 0x2786 00002782: JUMPI 00002783: PUSH0 00002784: PUSH0 00002785: REVERT 00002786: JUMPDEST 00002787: PUSH2 0x18b5 0000278a: DUP3 0000278b: PUSH2 0x2766 0000278e: JUMP 0000278f: JUMPDEST 00002790: PUSH0 00002791: PUSH0 00002792: PUSH0 00002793: PUSH0 00002794: PUSH1 0x60 00002796: DUP6 00002797: DUP8 00002798: SUB 00002799: SLT 0000279a: ISZERO 0000279b: PUSH2 0x27a2 0000279e: JUMPI 0000279f: PUSH0 000027a0: PUSH0 000027a1: REVERT 000027a2: JUMPDEST 000027a3: DUP5 000027a4: CALLDATALOAD 000027a5: SWAP4 000027a6: POP 000027a7: PUSH1 0x20 000027a9: DUP6 000027aa: ADD 000027ab: CALLDATALOAD 000027ac: SWAP3 000027ad: POP 000027ae: PUSH1 0x40 000027b0: DUP6 000027b1: ADD 000027b2: CALLDATALOAD 000027b3: PUSH8 0xffffffffffffffff 000027bc: DUP2 000027bd: GT 000027be: ISZERO 000027bf: PUSH2 0x27c6 000027c2: JUMPI 000027c3: PUSH0 000027c4: PUSH0 000027c5: REVERT 000027c6: JUMPDEST 000027c7: PUSH2 0x27d2 000027ca: DUP8 000027cb: DUP3 000027cc: DUP9 000027cd: ADD 000027ce: PUSH2 0x26a6 000027d1: JUMP 000027d2: JUMPDEST 000027d3: SWAP6 000027d4: SWAP9 000027d5: SWAP5 000027d6: SWAP8 000027d7: POP 000027d8: SWAP6 000027d9: POP 000027da: POP 000027db: POP 000027dc: POP 000027dd: JUMP 000027de: JUMPDEST 000027df: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002800: PUSH0 00002801: MSTORE 00002802: PUSH1 0x41 00002804: PUSH1 0x04 00002806: MSTORE 00002807: PUSH1 0x24 00002809: PUSH0 0000280a: REVERT 0000280b: JUMPDEST 0000280c: PUSH0 0000280d: PUSH0 0000280e: PUSH1 0x40 00002810: DUP4 00002811: DUP6 00002812: SUB 00002813: SLT 00002814: ISZERO 00002815: PUSH2 0x281c 00002818: JUMPI 00002819: PUSH0 0000281a: PUSH0 0000281b: REVERT 0000281c: JUMPDEST 0000281d: DUP3 0000281e: CALLDATALOAD 0000281f: SWAP2 00002820: POP 00002821: PUSH1 0x20 00002823: DUP4 00002824: ADD 00002825: CALLDATALOAD 00002826: PUSH8 0xffffffffffffffff 0000282f: DUP2 00002830: GT 00002831: ISZERO 00002832: PUSH2 0x2839 00002835: JUMPI 00002836: PUSH0 00002837: PUSH0 00002838: REVERT 00002839: JUMPDEST 0000283a: DUP4 0000283b: ADD 0000283c: PUSH1 0x1f 0000283e: DUP2 0000283f: ADD 00002840: DUP6 00002841: SGT 00002842: PUSH2 0x2849 00002845: JUMPI 00002846: PUSH0 00002847: PUSH0 00002848: REVERT 00002849: JUMPDEST 0000284a: DUP1 0000284b: CALLDATALOAD 0000284c: PUSH8 0xffffffffffffffff 00002855: DUP2 00002856: GT 00002857: ISZERO 00002858: PUSH2 0x2863 0000285b: JUMPI 0000285c: PUSH2 0x2863 0000285f: PUSH2 0x27de 00002862: JUMP 00002863: JUMPDEST 00002864: PUSH1 0x40 00002866: MLOAD 00002867: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002888: PUSH1 0x3f 0000288a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000028ab: PUSH1 0x1f 000028ad: DUP6 000028ae: ADD 000028af: AND 000028b0: ADD 000028b1: AND 000028b2: DUP2 000028b3: ADD 000028b4: DUP2 000028b5: DUP2 000028b6: LT 000028b7: PUSH8 0xffffffffffffffff 000028c0: DUP3 000028c1: GT 000028c2: OR 000028c3: ISZERO 000028c4: PUSH2 0x28cf 000028c7: JUMPI 000028c8: PUSH2 0x28cf 000028cb: PUSH2 0x27de 000028ce: JUMP 000028cf: JUMPDEST 000028d0: PUSH1 0x40 000028d2: MSTORE 000028d3: DUP2 000028d4: DUP2 000028d5: MSTORE 000028d6: DUP3 000028d7: DUP3 000028d8: ADD 000028d9: PUSH1 0x20 000028db: ADD 000028dc: DUP8 000028dd: LT 000028de: ISZERO 000028df: PUSH2 0x28e6 000028e2: JUMPI 000028e3: PUSH0 000028e4: PUSH0 000028e5: REVERT 000028e6: JUMPDEST 000028e7: DUP2 000028e8: PUSH1 0x20 000028ea: DUP5 000028eb: ADD 000028ec: PUSH1 0x20 000028ee: DUP4 000028ef: ADD 000028f0: CALLDATACOPY 000028f1: PUSH0 000028f2: PUSH1 0x20 000028f4: DUP4 000028f5: DUP4 000028f6: ADD 000028f7: ADD 000028f8: MSTORE 000028f9: DUP1 000028fa: SWAP4 000028fb: POP 000028fc: POP 000028fd: POP 000028fe: POP 000028ff: SWAP3 00002900: POP 00002901: SWAP3 00002902: SWAP1 00002903: POP 00002904: JUMP 00002905: JUMPDEST 00002906: PUSH0 00002907: PUSH0 00002908: DUP4 00002909: PUSH1 0x1f 0000290b: DUP5 0000290c: ADD 0000290d: SLT 0000290e: PUSH2 0x2915 00002911: JUMPI 00002912: PUSH0 00002913: PUSH0 00002914: REVERT 00002915: JUMPDEST 00002916: POP 00002917: DUP2 00002918: CALLDATALOAD 00002919: PUSH8 0xffffffffffffffff 00002922: DUP2 00002923: GT 00002924: ISZERO 00002925: PUSH2 0x292c 00002928: JUMPI 00002929: PUSH0 0000292a: PUSH0 0000292b: REVERT 0000292c: JUMPDEST 0000292d: PUSH1 0x20 0000292f: DUP4 00002930: ADD 00002931: SWAP2 00002932: POP 00002933: DUP4 00002934: PUSH1 0x20 00002936: DUP3 00002937: PUSH1 0x05 00002939: SHL 0000293a: DUP6 0000293b: ADD 0000293c: ADD 0000293d: GT 0000293e: ISZERO 0000293f: PUSH2 0x26e4 00002942: JUMPI 00002943: PUSH0 00002944: PUSH0 00002945: REVERT 00002946: JUMPDEST 00002947: PUSH0 00002948: PUSH0 00002949: PUSH0 0000294a: PUSH0 0000294b: PUSH1 0x40 0000294d: DUP6 0000294e: DUP8 0000294f: SUB 00002950: SLT 00002951: ISZERO 00002952: PUSH2 0x2959 00002955: JUMPI 00002956: PUSH0 00002957: PUSH0 00002958: REVERT 00002959: JUMPDEST 0000295a: DUP5 0000295b: CALLDATALOAD 0000295c: PUSH8 0xffffffffffffffff 00002965: DUP2 00002966: GT 00002967: ISZERO 00002968: PUSH2 0x296f 0000296b: JUMPI 0000296c: PUSH0 0000296d: PUSH0 0000296e: REVERT 0000296f: JUMPDEST 00002970: PUSH2 0x297b 00002973: DUP8 00002974: DUP3 00002975: DUP9 00002976: ADD 00002977: PUSH2 0x2905 0000297a: JUMP 0000297b: JUMPDEST 0000297c: SWAP1 0000297d: SWAP6 0000297e: POP 0000297f: SWAP4 00002980: POP 00002981: POP 00002982: PUSH1 0x20 00002984: DUP6 00002985: ADD 00002986: CALLDATALOAD 00002987: PUSH8 0xffffffffffffffff 00002990: DUP2 00002991: GT 00002992: ISZERO 00002993: PUSH2 0x299a 00002996: JUMPI 00002997: PUSH0 00002998: PUSH0 00002999: REVERT 0000299a: JUMPDEST 0000299b: PUSH2 0x27d2 0000299e: DUP8 0000299f: DUP3 000029a0: DUP9 000029a1: ADD 000029a2: PUSH2 0x2905 000029a5: JUMP 000029a6: JUMPDEST 000029a7: PUSH0 000029a8: PUSH0 000029a9: PUSH1 0x20 000029ab: DUP4 000029ac: DUP6 000029ad: SUB 000029ae: SLT 000029af: ISZERO 000029b0: PUSH2 0x29b7 000029b3: JUMPI 000029b4: PUSH0 000029b5: PUSH0 000029b6: REVERT 000029b7: JUMPDEST 000029b8: DUP3 000029b9: CALLDATALOAD 000029ba: PUSH8 0xffffffffffffffff 000029c3: DUP2 000029c4: GT 000029c5: ISZERO 000029c6: PUSH2 0x29cd 000029c9: JUMPI 000029ca: PUSH0 000029cb: PUSH0 000029cc: REVERT 000029cd: JUMPDEST 000029ce: PUSH2 0x271e 000029d1: DUP6 000029d2: DUP3 000029d3: DUP7 000029d4: ADD 000029d5: PUSH2 0x2905 000029d8: JUMP 000029d9: JUMPDEST 000029da: PUSH0 000029db: PUSH1 0x20 000029dd: DUP3 000029de: DUP5 000029df: SUB 000029e0: SLT 000029e1: ISZERO 000029e2: PUSH2 0x29e9 000029e5: JUMPI 000029e6: PUSH0 000029e7: PUSH0 000029e8: REVERT 000029e9: JUMPDEST 000029ea: POP 000029eb: CALLDATALOAD 000029ec: SWAP2 000029ed: SWAP1 000029ee: POP 000029ef: JUMP 000029f0: JUMPDEST 000029f1: PUSH0 000029f2: PUSH0 000029f3: PUSH1 0x40 000029f5: DUP4 000029f6: DUP6 000029f7: SUB 000029f8: SLT 000029f9: ISZERO 000029fa: PUSH2 0x2a01 000029fd: JUMPI 000029fe: PUSH0 000029ff: PUSH0 00002a00: REVERT 00002a01: JUMPDEST 00002a02: PUSH2 0x2a0a 00002a05: DUP4 00002a06: PUSH2 0x2766 00002a09: JUMP 00002a0a: JUMPDEST 00002a0b: SWAP2 00002a0c: POP 00002a0d: PUSH2 0x2a18 00002a10: PUSH1 0x20 00002a12: DUP5 00002a13: ADD 00002a14: PUSH2 0x272a 00002a17: JUMP 00002a18: JUMPDEST 00002a19: SWAP1 00002a1a: POP 00002a1b: SWAP3 00002a1c: POP 00002a1d: SWAP3 00002a1e: SWAP1 00002a1f: POP 00002a20: JUMP 00002a21: JUMPDEST 00002a22: PUSH0 00002a23: PUSH0 00002a24: PUSH1 0x40 00002a26: DUP4 00002a27: DUP6 00002a28: SUB 00002a29: SLT 00002a2a: ISZERO 00002a2b: PUSH2 0x2a32 00002a2e: JUMPI 00002a2f: PUSH0 00002a30: PUSH0 00002a31: REVERT 00002a32: JUMPDEST 00002a33: PUSH2 0x2a3b 00002a36: DUP4 00002a37: PUSH2 0x272a 00002a3a: JUMP 00002a3b: JUMPDEST 00002a3c: SWAP5 00002a3d: PUSH1 0x20 00002a3f: SWAP4 00002a40: SWAP1 00002a41: SWAP4 00002a42: ADD 00002a43: CALLDATALOAD 00002a44: SWAP4 00002a45: POP 00002a46: POP 00002a47: POP 00002a48: JUMP 00002a49: JUMPDEST 00002a4a: PUSH0 00002a4b: DUP2 00002a4c: MLOAD 00002a4d: DUP1 00002a4e: DUP5 00002a4f: MSTORE 00002a50: DUP1 00002a51: PUSH1 0x20 00002a53: DUP5 00002a54: ADD 00002a55: PUSH1 0x20 00002a57: DUP7 00002a58: ADD 00002a59: MCOPY 00002a5a: PUSH0 00002a5b: PUSH1 0x20 00002a5d: DUP3 00002a5e: DUP7 00002a5f: ADD 00002a60: ADD 00002a61: MSTORE 00002a62: PUSH1 0x20 00002a64: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002a85: PUSH1 0x1f 00002a87: DUP4 00002a88: ADD 00002a89: AND 00002a8a: DUP6 00002a8b: ADD 00002a8c: ADD 00002a8d: SWAP2 00002a8e: POP 00002a8f: POP 00002a90: SWAP3 00002a91: SWAP2 00002a92: POP 00002a93: POP 00002a94: JUMP 00002a95: JUMPDEST 00002a96: PUSH1 0x20 00002a98: DUP2 00002a99: MSTORE 00002a9a: PUSH0 00002a9b: PUSH2 0x18b5 00002a9e: PUSH1 0x20 00002aa0: DUP4 00002aa1: ADD 00002aa2: DUP5 00002aa3: PUSH2 0x2a49 00002aa6: JUMP 00002aa7: JUMPDEST 00002aa8: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002ac9: PUSH0 00002aca: MSTORE 00002acb: PUSH1 0x21 00002acd: PUSH1 0x04 00002acf: MSTORE 00002ad0: PUSH1 0x24 00002ad2: PUSH0 00002ad3: REVERT 00002ad4: JUMPDEST 00002ad5: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002af6: PUSH0 00002af7: MSTORE 00002af8: PUSH1 0x32 00002afa: PUSH1 0x04 00002afc: MSTORE 00002afd: PUSH1 0x24 00002aff: PUSH0 00002b00: REVERT 00002b01: JUMPDEST 00002b02: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b17: DUP5 00002b18: AND 00002b19: DUP2 00002b1a: MSTORE 00002b1b: DUP3 00002b1c: PUSH1 0x20 00002b1e: DUP3 00002b1f: ADD 00002b20: MSTORE 00002b21: PUSH1 0x60 00002b23: PUSH1 0x40 00002b25: DUP3 00002b26: ADD 00002b27: MSTORE 00002b28: PUSH0 00002b29: PUSH2 0x2b35 00002b2c: PUSH1 0x60 00002b2e: DUP4 00002b2f: ADD 00002b30: DUP5 00002b31: PUSH2 0x2a49 00002b34: JUMP 00002b35: JUMPDEST 00002b36: SWAP6 00002b37: SWAP5 00002b38: POP 00002b39: POP 00002b3a: POP 00002b3b: POP 00002b3c: POP 00002b3d: JUMP 00002b3e: JUMPDEST 00002b3f: PUSH0 00002b40: DUP3 00002b41: PUSH2 0x2b71 00002b44: JUMPI 00002b45: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002b66: PUSH0 00002b67: MSTORE 00002b68: PUSH1 0x12 00002b6a: PUSH1 0x04 00002b6c: MSTORE 00002b6d: PUSH1 0x24 00002b6f: PUSH0 00002b70: REVERT 00002b71: JUMPDEST 00002b72: POP 00002b73: DIV 00002b74: SWAP1 00002b75: JUMP 00002b76: JUMPDEST 00002b77: DUP1 00002b78: DUP3 00002b79: ADD 00002b7a: DUP1 00002b7b: DUP3 00002b7c: GT 00002b7d: ISZERO 00002b7e: PUSH2 0x18cd 00002b81: JUMPI 00002b82: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002ba3: PUSH0 00002ba4: MSTORE 00002ba5: PUSH1 0x11 00002ba7: PUSH1 0x04 00002ba9: MSTORE 00002baa: PUSH1 0x24 00002bac: PUSH0 00002bad: REVERT
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x81517f58b6a1a7d4845599dbce1821cc3c926bba9c8259c1ee1a89ec8b2a08d3
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x81517f58b6a1a7d4845599dbce1821cc3c926bba9c8259c1ee1a89ec8b2a08d3",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xeed2f252",
"selector": "0xeed2f252",
"calldata_variants": [
"0xeed2f252",
"0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf08a0323",
"selector": "0xf08a0323",
"calldata_variants": [
"0xf08a0323",
"0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc311d049",
"selector": "0xc311d049",
"calldata_variants": [
"0xc311d049",
"0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0ebdbe7",
"selector": "0xd0ebdbe7",
"calldata_variants": [
"0xd0ebdbe7",
"0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd34628cc",
"selector": "0xd34628cc",
"calldata_variants": [
"0xd34628cc",
"0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbdb25d0e",
"selector": "0xbdb25d0e",
"calldata_variants": [
"0xbdb25d0e",
"0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 394,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 3206,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 7727,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 2931,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3044,
"type": "tx_origin_used"
}
],
"delegatecall_count": 8,
"untrusted_delegatecall_count": 7
}
|
| 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": "0xeed2f252",
"selector": "0xeed2f252",
"calldata_variants": [
"0xeed2f252",
"0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf08a0323",
"selector": "0xf08a0323",
"calldata_variants": [
"0xf08a0323",
"0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc311d049",
"selector": "0xc311d049",
"calldata_variants": [
"0xc311d049",
"0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0ebdbe7",
"selector": "0xd0ebdbe7",
"calldata_variants": [
"0xd0ebdbe7",
"0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd34628cc",
"selector": "0xd34628cc",
"calldata_variants": [
"0xd34628cc",
"0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbdb25d0e",
"selector": "0xbdb25d0e",
"calldata_variants": [
"0xbdb25d0e",
"0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 2931,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3044,
"type": "tx_origin_used"
}
]
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 8
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d
call_targets:
0xf00001968c1d6196d3d0553030c7af8d1905dcbb
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf00001968c1d6196d3d0553030c7af8d1905dcbb"
],
"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": "0xeed2f252",
"selector": "0xeed2f252",
"calldata_variants": [
"0xeed2f252",
"0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf08a0323",
"selector": "0xf08a0323",
"calldata_variants": [
"0xf08a0323",
"0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc311d049",
"selector": "0xc311d049",
"calldata_variants": [
"0xc311d049",
"0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0ebdbe7",
"selector": "0xd0ebdbe7",
"calldata_variants": [
"0xd0ebdbe7",
"0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd34628cc",
"selector": "0xd34628cc",
"calldata_variants": [
"0xd34628cc",
"0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbdb25d0e",
"selector": "0xbdb25d0e",
"calldata_variants": [
"0xbdb25d0e",
"0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4093,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 6299,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 6573,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 9,
"guards_detected": [
{
"pc": 2931,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3044,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 8
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d
call_targets:
0xf00001968c1d6196d3d0553030c7af8d1905dcbb
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf00001968c1d6196d3d0553030c7af8d1905dcbb"
],
"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": "0xeed2f252",
"selector": "0xeed2f252",
"calldata_variants": [
"0xeed2f252",
"0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf08a0323",
"selector": "0xf08a0323",
"calldata_variants": [
"0xf08a0323",
"0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc311d049",
"selector": "0xc311d049",
"calldata_variants": [
"0xc311d049",
"0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0ebdbe7",
"selector": "0xd0ebdbe7",
"calldata_variants": [
"0xd0ebdbe7",
"0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd34628cc",
"selector": "0xd34628cc",
"calldata_variants": [
"0xd34628cc",
"0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbdb25d0e",
"selector": "0xbdb25d0e",
"calldata_variants": [
"0xbdb25d0e",
"0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4093,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 6299,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 6573,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 7,
"guards_detected": [
{
"pc": 2931,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 3044,
"type": "tx_origin_used"
}
]
}
|