0a66c94d-92f0-4077-a8e2-57edfc5c4fef
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 |
|---|---|---|---|---|
| 31429 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77200 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77201 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77202 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77203 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77204 | detector.run | complete | 1 / 3 | 1 week ago |
| 77205 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:445933] OpenAI Codex v0.77.0 (research preview)
[codex:445933] --------
[codex:445933] workdir: /tmp/codex-multi-1icckdfk
[codex:445933] model: gpt-5.2-codex
[codex:445933] provider: openai
[codex:445933] approval: never
[codex:445933] sandbox: read-only
[codex:445933] reasoning effort: xhigh
[codex:445933] reasoning summaries: auto
[codex:445933] session id: 019b81a3-d410-7970-927f-fb113c927050
[codex:445933] --------
[codex:445933] user
[codex:445933] 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:445933]
[codex:445933] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:445933]
[codex:445933] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:445933] - Gas inefficiency, code quality, or best practices
[codex:445933] - Theoretical vulnerabilities without a clear extraction path
[codex:445933] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:445933] - Issues requiring social engineering or off-chain coordination
[codex:445933]
[codex:445933] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:445933] - CALL/DELEGATECALL with controllable destination or calldata
[codex:445933] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:445933] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:445933] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:445933] - External calls before state updates (reentrancy)
[codex:445933] - SELFDESTRUCT with controllable beneficiary
[codex:445933] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:445933]
[codex:445933] For each finding, you MUST explain:
[codex:445933] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:445933] 2. The concrete sequence of transactions to extract value
[codex:445933] 3. Why you believe this is exploitable (not just suspicious)
[codex:445933]
[codex:445933] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:445933] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:445933]
[codex:445933] Output MUST be valid JSON matching the provided schema.
[codex:445933] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:445933] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:445933] mcp startup: no servers
[codex:445933]
[codex:445933] thinking
[codex:445933] **Reading file content**
[codex:445933] exec
[codex:445933] /bin/bash -lc ls in /tmp/codex-multi-1icckdfk succeeded in 5ms:
[codex:445933] BYTECODE_BUNDLE.txt
[codex:445933] codex-output-schema.json
[codex:445933] exec
[codex:445933] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1icckdfk succeeded in 5ms:
[codex:445933] Runtime bytecode bundle for best-effort auditing.
[codex:445933] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:445933]
[codex:445933] FILE: runtime_bytecode.hex
[codex:445933] 0x6080604052600436106100f35760003560e01c8063a51a828c1161008a578063de1b048611610059578063de1b0486146106f6578063ebeaa0a714610729578063f4f3b20014610764578063f99cc2a414610797576100f3565b8063a51a828c1461038c578063a8001d6f146104c0578063b412cf20146104fb578063c7927b74146106b3576100f3565b80637a9262a2116100c65780637a9262a2146102a25780639470b0bd146102e7578063a1db978214610320578063a39a45b714610359576100f3565b80632e1a7d4d146101325780633ccfd60b1461015c5780634b81539e1461017157806359c37cc914610271575b36156101305760405162461bcd60e51b81526004018080602001828103825260328152602001806114566032913960400191505060405180910390fd5b005b34801561013e57600080fd5b506101306004803603602081101561015557600080fd5b50356108cb565b34801561016857600080fd5b506101306108d8565b34801561017d57600080fd5b506102216004803603602081101561019457600080fd5b8101906020810181356401000000008111156101af57600080fd5b8201836020820111156101c157600080fd5b803590602001918460208302840111640100000000831117156101e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108f4945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561025d578181015183820152602001610245565b505050509050019250505060405180910390f35b34801561027d57600080fd5b50610286610961565b604080516001600160a01b039092168252519081900360200190f35b3480156102ae57600080fd5b506102d5600480360360208110156102c557600080fd5b50356001600160a01b0316610970565b60408051918252519081900360200190f35b3480156102f357600080fd5b506101306004803603604081101561030a57600080fd5b506001600160a01b038135169060200135610982565b34801561032c57600080fd5b506101306004803603604081101561034357600080fd5b506001600160a01b038135169060200135610990565b34801561036557600080fd5b506101306004803603602081101561037c57600080fd5b50356001600160a01b031661099b565b34801561039857600080fd5b50610221600480360360408110156103af57600080fd5b8101906020810181356401000000008111156103ca57600080fd5b8201836020820111156103dc57600080fd5b803590602001918460208302840111640100000000831117156103fe57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561044e57600080fd5b82018360208201111561046057600080fd5b8035906020019184602083028401116401000000008311171561048257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a63945050505050565b3480156104cc57600080fd5b50610130600480360360408110156104e357600080fd5b506001600160a01b0381358116916020013516610b49565b34801561050757600080fd5b506101306004803603606081101561051e57600080fd5b81019060208101813564010000000081111561053957600080fd5b82018360208201111561054b57600080fd5b8035906020019184602083028401116401000000008311171561056d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105bd57600080fd5b8201836020820111156105cf57600080fd5b803590602001918460208302840111640100000000831117156105f157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561064157600080fd5b82018360208201111561065357600080fd5b8035906020019184602083028401116401000000008311171561067557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b7c945050505050565b3480156106bf57600080fd5b50610130600480360360608110156106d657600080fd5b506001600160a01b03813581169160208101359091169060400135610d23565b34801561070257600080fd5b506101306004803603602081101561071957600080fd5b50356001600160a01b0316610d33565b34801561073557600080fd5b506102d56004803603604081101561074c57600080fd5b506001600160a01b0381358116916020013516610d57565b34801561077057600080fd5b506101306004803603602081101561078757600080fd5b50356001600160a01b0316610d74565b3480156107a357600080fd5b50610130600480360360408110156107ba57600080fd5b8101906020810181356401000000008111156107d557600080fd5b8201836020820111156107e757600080fd5b8035906020019184602083028401116401000000008311171561080957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561085957600080fd5b82018360208201111561086b57600080fd5b8035906020019184602083028401116401000000008311171561088d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610da5945050505050565b6108d53382610ecf565b50565b336000818152602081905260409020546108f29190610ecf565b565b60608060005b835181101561095a5760008085838151811061091257fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061094757fe5b60209081029190910101526001016108fa565b5092915050565b6002546001600160a01b031681565b60006020819052908152604090205481565b61098c8282610ecf565b5050565b61098c338383611093565b6002546001600160a01b031633146109e45760405162461bcd60e51b81526004018080602001828103825260318152602001806113a96031913960400191505060405180910390fd5b6001600160a01b038116610a295760405162461bcd60e51b815260040180806020018281038252602a815260200180611543602a913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608251825114610aa55760405162461bcd60e51b81526004018080602001828103825260428152602001806115016042913960600191505060405180910390fd5b606060005b8351811015610b415760016000868381518110610ac357fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610af957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610b2e57fe5b6020908102919091010152600101610aaa565b509392505050565b6001600160a01b0380831660009081526001602090815260408083209385168352929052205461098c9082908490611093565b6002546001600160a01b03163314610bc55760405162461bcd60e51b81526004018080602001828103825260318152602001806113a96031913960400191505060405180910390fd5b6000825111610c055760405162461bcd60e51b815260040180806020018281038252602a8152602001806114d7602a913960400191505060405180910390fd5b8251825114610c455760405162461bcd60e51b81526004018080602001828103825260428152602001806115016042913960600191505060405180910390fd5b8051835114610c855760405162461bcd60e51b815260040180806020018281038252603f815260200180611300603f913960400191505060405180910390fd5b60005b8251811015610d1d57818181518110610c9d57fe5b602002602001015160016000868481518110610cb557fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858481518110610ceb57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091019055600101610c88565b50505050565b610d2e828483611093565b505050565b6001600160a01b0381166000908152602081905260409020546108d5908290610ecf565b600160209081526000928352604080842090915290825290205481565b6001600160a01b0381166000908152600160209081526040808320338085529252909120546108d591908390611093565b6002546001600160a01b03163314610dee5760405162461bcd60e51b81526004018080602001828103825260318152602001806113a96031913960400191505060405180910390fd5b6000825111610e2e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806114d7602a913960400191505060405180910390fd5b8051825114610e6e5760405162461bcd60e51b815260040180806020018281038252603b81526020018061136e603b913960400191505060405180910390fd5b60005b8251811015610d2e57818181518110610e8657fe5b6020026020010151600080858481518110610e9d57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091019055600101610e71565b6001600160a01b038216610f145760405162461bcd60e51b81526004018080602001828103825260288152602001806114af6028913960400191505060405180910390fd5b60008111610f535760405162461bcd60e51b815260040180806020018281038252602f81526020018061133f602f913960400191505060405180910390fd5b6001600160a01b03821660009081526020819052604090205480821115610fab5760405162461bcd60e51b81526004018080602001828103825260328152602001806113da6032913960400191505060405180910390fd5b6001600160a01b038316600081815260208190526040808220805486900390555190919084908381818185875af1925050503d8060008114611009576040519150601f19603f3d011682016040523d82523d6000602084013e61100e565b606091505b505090508061104e5760405162461bcd60e51b815260040180806020018281038252602181526020018061140c6021913960400191505060405180910390fd5b6040805184815290516001600160a01b038616917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250505050565b6001600160a01b0383166110d85760405162461bcd60e51b81526004018080602001828103825260288152602001806114af6028913960400191505060405180910390fd5b6001600160a01b03821661111d5760405162461bcd60e51b815260040180806020018281038252602981526020018061142d6029913960400191505060405180910390fd5b6000811161115c5760405162461bcd60e51b815260040180806020018281038252602f81526020018061133f602f913960400191505060405180910390fd5b6001600160a01b03808316600090815260016020908152604080832093871683529290522054808211156111c15760405162461bcd60e51b81526004018080602001828103825260328152602001806113da6032913960400191505060405180910390fd5b6001600160a01b038085166000818152602081815260408083208054889003905580517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101949094526024840187905251879492939285169263a9059cbb92604480830193919282900301818787803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d602081101561126c57600080fd5b50519050806112ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806114886027913960400191505060405180910390fd5b856001600160a01b0316856001600160a01b03167fd2708b75549f9f4a149b80f5b152801c0e97e2419aa19930ad9cb1bb4cf4f91d866040518082815260200191505060405180910390a350505050505056fe50756c6c576974686472617761626c653a204552433230416464726573736573206d7573742062652073616d65206c656e67746820617320616d6f756e747350756c6c576974686472617761626c653a20616d6f756e74206d7573742062652067726561746572207468616e203050756c6c576974686472617761626c653a20726563697069656e7473206d7573742062652073616d65206c656e67746820617320616d6f756e747350756c6c576974686472617761626c653a204f6e6c7920747275737465644f776e65722063616e2063616c6c207468697350756c6c576974686472617761626c653a20616d6f756e74206d757374206265206c657373207468616e2062616c616e636550756c6c576974686472617761626c653a205472616e73666572206661696c656450756c6c576974686472617761626c653a2063616e6e6f74206265206e756c6c20636f6e74726163744465706f7369743a2066616c6c6261636b2066756e6374696f6e20646f6573206e6f742074616b6520617267756d656e747350756c6c576974686472617761626c653a204552433230207472616e73666572206661696c656450756c6c576974686472617761626c653a2063616e6e6f74206265206e756c6c206164647265737350756c6c576974686472617761626c653a20726563697069656e7473206d75737420626520676976656e50756c6c576974686472617761626c653a20726563697069656e7473206d7573742062652073616d65206c656e67746820617320455243323041646472657373657350756c6c576974686472617761626c653a206e65774f776e65722063616e6e6f7420626520656d707479a265627a7a72315820cd7508489875a45e7dd8f2fd73b1a0985a153279f68904083875d9061855db6664736f6c634300050c0032
[codex:445933]
[codex:445933] thinking
[codex:445933] **Decoding contract bytecode and functions**
[codex:445933]
[codex:445933] I’m analyzing this PullWithdrawable-like contract by parsing bytecode selectors and functions to identify any exploitable withdraw paths. Since tools are limited, I plan to write a simple Python disassembler script to decode opcodes and map function selectors to their code, helping me understand any risks around owner or withdraw permissions.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] import binascii, textwrap
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip()
[codex:445933] # line starts with 0x...
[codex:445933] hexstr=hexstr.split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] # opcode table
[codex:445933] opnames={i: 'OP'+hex(i) for i in range(256)}
[codex:445933] # basic
[codex:445933] names={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',
[codex:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 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:445933] 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:445933] 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:445933] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] opnames.update(names)
[codex:445933]
[codex:445933] # print with offsets near interesting opcodes
[codex:445933] # We'll disassemble and maybe focus on SSTORE, CALL, DELEGATECALL, SELFDESTRUCT
[codex:445933]
[codex:445933] code_len=len(code)
[codex:445933]
[codex:445933] def disasm(start=0, end=None):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i < (end if end is not None else code_len):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60 <= op <= 0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] out.append((i,name,data.hex()))
[codex:445933] i+=1+n
[codex:445933] else:
[codex:445933] out.append((i,name,''))
[codex:445933] i+=1
[codex:445933] return out
[codex:445933]
[codex:445933] # find offsets of CALL, DELEGATECALL, SELFDESTRUCT, SSTORE
[codex:445933] interesting=[0xf1,0xf4,0xff,0x55]
[codex:445933] for op in interesting:
[codex:445933] name=opnames[op]
[codex:445933] offs=[i for i,b in enumerate(code) if b==op]
[codex:445933] print(name, len(offs))
[codex:445933] print(offs[:50])
[codex:445933]
[codex:445933] # print around each CALL
[codex:445933] print('\\nCALL sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0xf1]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-20, off+20):
[codex:445933] if o==off: print('> %04x'%o, n,d)
[codex:445933] else: print(' %04x'%o, n,d)
[codex:445933]
[codex:445933] # SSTORE sites
[codex:445933] print('\\nSSTORE sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0x55]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-10, off+10):
[codex:445933] if o==off: print('> %04x'%o, n,d)
[codex:445933] else: print(' %04x'%o, n,d)
[codex:445933]
[codex:445933] # DELEGATECALL sites
[codex:445933] print('\\nDELEGATECALL sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0xf4]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-10, off+10):
[codex:445933] if o==off: print('> %04x'%o, n,d)
[codex:445933] else: print(' %04x'%o, n,d)
[codex:445933]
[codex:445933] # SELFDESTRUCT
[codex:445933] print('\\nSELFDESTRUCT sites:')
[codex:445933] for off in [i for i,b in enumerate(code) if b==0xff]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-10, off+10):
[codex:445933] if o==off: print('> %04x'%o, n,d)
[codex:445933] else: print(' %04x'%o, n,d)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 47ms:
[codex:445933] CALL 3
[codex:445933] [1515, 4057, 4677]
[codex:445933] DELEGATECALL 3
[codex:445933] [65, 537, 4831]
[codex:445933] SELFDESTRUCT 12
[codex:445933] [2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618]
[codex:445933] SSTORE 7
[codex:445933] [335, 2657, 3349, 3783, 4043, 4578, 5523]
[codex:445933]
[codex:445933] CALL sites:
[codex:445933] --- 1515
[codex:445933] 05d7 DUP5
[codex:445933] 05d8 PUSH1 20
[codex:445933] 05da DUP4
[codex:445933] 05db MUL
[codex:445933] 05dc DUP5
[codex:445933] 05dd ADD
[codex:445933] 05de GT
[codex:445933] 05df PUSH5 0100000000
[codex:445933] 05e5 DUP4
[codex:445933]
[codex:445933] thinking
[codex:445933] **Clarifying CALL and DELEGATECALL locations**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] import binascii
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933] # disasm first 200 bytes
[codex:445933] opnames={i: 'OP'+hex(i) for i in range(256)}
[codex:445933] # map
[codex:445933] names={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',
[codex:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 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:445933] 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:445933] 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:445933] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] opnames.update(names)
[codex:445933]
[codex:445933] i=0
[codex:445933] while i<200:
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op,hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] print(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933] i+=1+n
[codex:445933] else:
[codex:445933] print(f\"{i:04x} {name}\")
[codex:445933] i+=1
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 18ms:
[codex:445933] 0000 PUSH1 0x80
[codex:445933] 0002 PUSH1 0x40
[codex:445933] 0004 MSTORE
[codex:445933] 0005 PUSH1 0x04
[codex:445933] 0007 CALLDATASIZE
[codex:445933] 0008 LT
[codex:445933] 0009 PUSH2 0x00f3
[codex:445933] 000c JUMPI
[codex:445933] 000d PUSH1 0x00
[codex:445933] 000f CALLDATALOAD
[codex:445933] 0010 PUSH1 0xe0
[codex:445933] 0012 SHR
[codex:445933] 0013 DUP1
[codex:445933] 0014 PUSH4 0xa51a828c
[codex:445933] 0019 GT
[codex:445933] 001a PUSH2 0x008a
[codex:445933] 001d JUMPI
[codex:445933] 001e DUP1
[codex:445933] 001f PUSH4 0xde1b0486
[codex:445933] 0024 GT
[codex:445933]
[codex:445933] thinking
[codex:445933] **Clarifying opcode detection method**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] # define opcodes map lengths
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={}
[codex:445933] names={
[codex:445933] 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:445933] 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:445933] 0x20:'SHA3',
[codex:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933] opnames.update(names)
[codex:445933]
[codex:445933] # scan instructions
[codex:445933] instr=[]
[codex:445933] i=0
[codex:445933] while i < len(code):
[codex:445933] op=code[i]
[codex:445933] instr.append((i,op))
[codex:445933] i += oplen[op]
[codex:445933]
[codex:445933] # find offsets for opcodes of interest
[codex:445933] for op in [0xf1,0xf4,0xff,0x55]:
[codex:445933] offs=[i for i,o in instr if o==op]
[codex:445933] print(opnames[op], offs)
[codex:445933]
[codex:445933] # show around each CALL and DELEGATECALL
[codex:445933]
[codex:445933] def disasm(start, end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i < end and i < len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] out.append((i,name,data.hex()))
[codex:445933] else:
[codex:445933] out.append((i,name,''))
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] print('\\nCALL sites:')
[codex:445933] for off in [i for i,o in instr if o==0xf1]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-20, off+20):
[codex:445933] mark='>' if o==off else ' '
[codex:445933] print(f\"{mark} {o:04x} {n} {d}\")
[codex:445933]
[codex:445933] print('\\nDELEGATECALL sites:')
[codex:445933] for off in [i for i,o in instr if o==0xf4]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-20, off+20):
[codex:445933] mark='>' if o==off else ' '
[codex:445933] print(f\"{mark} {o:04x} {n} {d}\")
[codex:445933]
[codex:445933] print('\\nSELFDESTRUCT sites:')
[codex:445933] for off in [i for i,o in instr if o==0xff]:
[codex:445933] print('---',off)
[codex:445933] for o,n,d in disasm(off-10, off+10):
[codex:445933] mark='>' if o==off else ' '
[codex:445933] print(f\"{mark} {o:04x} {n} {d}\")
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 20ms:
[codex:445933] CALL [4057, 4677]
[codex:445933] DELEGATECALL []
[codex:445933] SELFDESTRUCT []
[codex:445933] SSTORE [2657, 3349, 3783, 4043, 4578, 5523]
[codex:445933]
[codex:445933] CALL sites:
[codex:445933] --- 4057
[codex:445933] 0fc5 0x80
[codex:445933] 0fc6 SLOAD
[codex:445933] 0fc7 0x86
[codex:445933] 0fc8 0x90
[codex:445933] 0fc9 SUB
[codex:445933] 0fca 0x90
[codex:445933] 0fcb SSTORE
[codex:445933] 0fcc MLOAD
[codex:445933] 0fcd 0x90
[codex:445933] 0fce 0x91
[codex:445933] 0fcf 0x90
[codex:445933] 0fd0 0x84
[codex:445933] 0fd1 0x90
[codex:445933]
[codex:445933] thinking
[codex:445933] **Examining CALL instructions and owner storage**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start, end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] out.append(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] # print around 0x0f80-0x1060
[codex:445933] for line in disasm(0x0f80, 0x1060):
[codex:445933] print(line)
[codex:445933] print('----')
[codex:445933] for line in disasm(0x11b0, 0x12c0):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0f80 MSTORE
[codex:445933] 0f81 0x60 0x04
[codex:445933] 0f83 ADD
[codex:445933] 0f84 0x80
[codex:445933] 0f85 0x80
[codex:445933] 0f86 0x60 0x20
[codex:445933] 0f88 ADD
[codex:445933] 0f89 0x82
[codex:445933] 0f8a 0x81
[codex:445933] 0f8b SUB
[codex:445933] 0f8c 0x82
[codex:445933] 0f8d MSTORE
[codex:445933] 0f8e 0x60 0x32
[codex:445933] 0f90 0x81
[codex:445933] 0f91 MSTORE
[codex:445933] 0f92 0x60 0x20
[codex:445933] 0f94 ADD
[codex:445933] 0f95 0x80
[codex:445933] 0f96 0x61 0x13da
[codex:445933] 0f99 0x60 0x32
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing withdrawal function logic**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start, end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] out.append(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0xe80, 0xf30):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0e80 LT
[codex:445933] 0e81 0x61 0x0e86
[codex:445933] 0e84 JUMPI
[codex:445933] 0e85 INVALID
[codex:445933] 0e86 JUMPDEST
[codex:445933] 0e87 0x60 0x20
[codex:445933] 0e89 MUL
[codex:445933] 0e8a 0x60 0x20
[codex:445933] 0e8c ADD
[codex:445933] 0e8d ADD
[codex:445933] 0e8e MLOAD
[codex:445933] 0e8f 0x60 0x00
[codex:445933] 0e91 0x80
[codex:445933] 0e92 0x85
[codex:445933] 0e93 0x84
[codex:445933] 0e94 0x81
[codex:445933] 0e95 MLOAD
[codex:445933] 0e96 0x81
[codex:445933] 0e97 LT
[codex:445933] 0e98 0x61 0x0e9d
[codex:445933]
[codex:445933] thinking
[codex:445933] **Continuing to review preconditions**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] out.append(f\"{i:04x} {name} 0x{data.hex()}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0xf14, 0xfb0):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 21ms:
[codex:445933] 0f14 JUMPDEST
[codex:445933] 0f15 0x60 0x00
[codex:445933] 0f17 0x81
[codex:445933] 0f18 GT
[codex:445933] 0f19 0x61 0x0f53
[codex:445933] 0f1c JUMPI
[codex:445933] 0f1d 0x60 0x40
[codex:445933] 0f1f MLOAD
[codex:445933] 0f20 0x62 0x461bcd
[codex:445933] 0f24 0x60 0xe5
[codex:445933] 0f26 SHL
[codex:445933] 0f27 0x81
[codex:445933] 0f28 MSTORE
[codex:445933] 0f29 0x60 0x04
[codex:445933] 0f2b ADD
[codex:445933] 0f2c 0x80
[codex:445933] 0f2d 0x80
[codex:445933] 0f2e 0x60 0x20
[codex:445933] 0f30 ADD
[codex:445933] 0f31 0x82
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing withdrawal validation logic**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933] # Build list of instructions with offsets
[codex:445933] instr=[]
[codex:445933] i=0
[codex:445933] while i<len(code):
[codex:445933] op=code[i]
[codex:445933] instr.append((i,op))
[codex:445933] i += oplen[op]
[codex:445933]
[codex:445933] # map offset to index
[codex:445933] idx_map={off:idx for idx,(off,op) in enumerate(instr)}
[codex:445933]
[codex:445933] # find CALLER opcodes and print context
[codex:445933] for off,op in instr:
[codex:445933] if op==0x33: # CALLER
[codex:445933] idx=idx_map[off]
[codex:445933] start=max(0, idx-8)
[codex:445933] end=min(len(instr), idx+12)
[codex:445933] print('CALLER at', hex(off))
[codex:445933] for j in range(start,end):
[codex:445933] o,op2=instr[j]
[codex:445933] name=opnames.get(op2, hex(op2))
[codex:445933] # show push data
[codex:445933] if 0x60<=op2<=0x7f:
[codex:445933] n=op2-0x5f
[codex:445933] data=code[o+1:o+1+n].hex()
[codex:445933] print(f\" {o:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] print(f\" {o:04x} {name}\")
[codex:445933] print('---')
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 21ms:
[codex:445933] CALLER at 0x8cf
[codex:445933] 08c5 POP
[codex:445933] 08c6 POP
[codex:445933] 08c7 POP
[codex:445933] 08c8 POP
[codex:445933] 08c9 POP
[codex:445933] 08ca JUMP
[codex:445933] 08cb JUMPDEST
[codex:445933] 08cc 0x61 0x08d5
[codex:445933] 08cf CALLER
[codex:445933] 08d0 0x82
[codex:445933] 08d1 0x61 0x0ecf
[codex:445933] 08d4 JUMP
[codex:445933] 08d5 JUMPDEST
[codex:445933] 08d6 POP
[codex:445933] 08d7 JUMP
[codex:445933] 08d8 JUMPDEST
[codex:445933] 08d9 CALLER
[codex:445933] 08da 0x60 0x00
[codex:445933] 08dc 0x81
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing function selectors and entries**
[codex:445933]
[codex:445933] I'm mapping function selectors to their code entry points and planning to disassemble each function's initial bytes to understand parameter decoding and calls, aiming to identify any access control issues in withdraw-related functions by spotting internal calls and argument usage. This will help clarify if withdrawals allow unauthorized fund access or if protections are in place.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933] # entry points
[codex:445933] entries=[0x132,0x15c,0x171,0x271,0x2a2,0x2e7,0x320,0x359,0x38c,0x4c0,0x4fb,0x6b3,0x6f6,0x729,0x764,0x797]
[codex:445933]
[codex:445933] # function to disasm first 80 bytes from entry
[codex:445933]
[codex:445933] def disasm(start, count_bytes=80):
[codex:445933] i=start
[codex:445933] end=start+count_bytes
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for entry in entries:
[codex:445933] print(f\"\\nEntry 0x{entry:04x}\")
[codex:445933] for line in disasm(entry, 100):
[codex:445933] print(' ',line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 23ms:
[codex:445933]
[codex:445933] Entry 0x0132
[codex:445933] 0132 JUMPDEST
[codex:445933] 0133 CALLVALUE
[codex:445933] 0134 0x80
[codex:445933] 0135 ISZERO
[codex:445933] 0136 0x61 0x013e
[codex:445933] 0139 JUMPI
[codex:445933] 013a 0x60 0x00
[codex:445933] 013c 0x80
[codex:445933] 013d REVERT
[codex:445933] 013e JUMPDEST
[codex:445933] 013f POP
[codex:445933] 0140 0x61 0x0130
[codex:445933] 0143 0x60 0x04
[codex:445933] 0145 0x80
[codex:445933] 0146 CALLDATASIZE
[codex:445933] 0147 SUB
[codex:445933] 0148 0x60 0x20
[codex:445933] 014a 0x81
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing revert messages and function selectors**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x0940,0x09c0):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 17ms:
[codex:445933] 0940 0x81
[codex:445933] 0941 LT
[codex:445933] 0942 0x61 0x0947
[codex:445933] 0945 JUMPI
[codex:445933] 0946 INVALID
[codex:445933] 0947 JUMPDEST
[codex:445933] 0948 0x60 0x20
[codex:445933] 094a 0x90
[codex:445933] 094b 0x81
[codex:445933] 094c MUL
[codex:445933] 094d 0x91
[codex:445933] 094e 0x90
[codex:445933] 094f 0x91
[codex:445933] 0950 ADD
[codex:445933] 0951 ADD
[codex:445933] 0952 MSTORE
[codex:445933] 0953 0x60 0x01
[codex:445933] 0955 ADD
[codex:445933] 0956 0x61 0x08fa
[codex:445933] 0959 JUMP
[codex:445933]
[codex:445933] thinking
[codex:445933] **Mapping internal function behaviors**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x08b0,0x0900):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 20ms:
[codex:445933] 08b0 MUL
[codex:445933] 08b1 0x80
[codex:445933] 08b2 0x82
[codex:445933] 08b3 0x84
[codex:445933] 08b4 CALLDATACOPY
[codex:445933] 08b5 0x60 0x00
[codex:445933] 08b7 0x92
[codex:445933] 08b8 ADD
[codex:445933] 08b9 0x91
[codex:445933] 08ba 0x90
[codex:445933] 08bb 0x91
[codex:445933] 08bc MSTORE
[codex:445933] 08bd POP
[codex:445933] 08be 0x92
[codex:445933] 08bf 0x95
[codex:445933] 08c0 POP
[codex:445933] 08c1 0x61 0x0da5
[codex:445933] 08c4 0x94
[codex:445933] 08c5 POP
[codex:445933] 08c6 POP
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing withdrawal functions and ownership checks**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x09b0,0x0a90):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 17ms:
[codex:445933] 09b0 MLOAD
[codex:445933] 09b1 0x62 0x461bcd
[codex:445933] 09b5 0x60 0xe5
[codex:445933] 09b7 SHL
[codex:445933] 09b8 0x81
[codex:445933] 09b9 MSTORE
[codex:445933] 09ba 0x60 0x04
[codex:445933] 09bc ADD
[codex:445933] 09bd 0x80
[codex:445933] 09be 0x80
[codex:445933] 09bf 0x60 0x20
[codex:445933] 09c1 ADD
[codex:445933] 09c2 0x82
[codex:445933] 09c3 0x81
[codex:445933] 09c4 SUB
[codex:445933] 09c5 0x82
[codex:445933] 09c6 MSTORE
[codex:445933] 09c7 0x60 0x31
[codex:445933] 09c9 0x81
[codex:445933] 09ca MSTORE
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing balance update functions for vulnerabilities**
[codex:445933]
[codex:445933] I’m looking closely at the SSTORE instructions that modify balances to see if any function can let an attacker inflate their balance without sending funds, which could let them drain the contract. I mapped the storage writes to code locations and noted some add-to-balance actions inside loops, possibly owner-restricted deposits. I want to verify those protections and any payable checks to assess risk thoroughly.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x0c40,0x0d40):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0c40 0x80
[codex:445933] 0c41 0x91
[codex:445933] 0c42 SUB
[codex:445933] 0c43 0x90
[codex:445933] 0c44 REVERT
[codex:445933] 0c45 JUMPDEST
[codex:445933] 0c46 0x80
[codex:445933] 0c47 MLOAD
[codex:445933] 0c48 0x83
[codex:445933] 0c49 MLOAD
[codex:445933] 0c4a EQ
[codex:445933] 0c4b 0x61 0x0c85
[codex:445933] 0c4e JUMPI
[codex:445933] 0c4f 0x60 0x40
[codex:445933] 0c51 MLOAD
[codex:445933] 0c52 0x62 0x461bcd
[codex:445933] 0c56 0x60 0xe5
[codex:445933] 0c58 SHL
[codex:445933] 0c59 0x81
[codex:445933] 0c5a MSTORE
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing internal withdrawal functions and access controls**
[codex:445933]
[codex:445933] I'm tracing internal functions linked to external selectors to understand who can call withdrawal routines and with what arguments, especially focusing on functions around 0x0982 and 0x0ecf that handle ETH withdrawals without obvious ownership checks. I plan to inspect related functions for ERC20 withdrawals next.
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x1030,0x11f0):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 18ms:
[codex:445933] 1030 MSTORE
[codex:445933] 1031 0x60 0x21
[codex:445933] 1033 0x81
[codex:445933] 1034 MSTORE
[codex:445933] 1035 0x60 0x20
[codex:445933] 1037 ADD
[codex:445933] 1038 0x80
[codex:445933] 1039 0x61 0x140c
[codex:445933] 103c 0x60 0x21
[codex:445933] 103e 0x91
[codex:445933] 103f CODECOPY
[codex:445933] 1040 0x60 0x40
[codex:445933] 1042 ADD
[codex:445933] 1043 0x91
[codex:445933] 1044 POP
[codex:445933] 1045 POP
[codex:445933] 1046 0x60 0x40
[codex:445933] 1048 MLOAD
[codex:445933] 1049 0x80
[codex:445933] 104a 0x91
[codex:445933]
[codex:445933] thinking
[codex:445933] **Continuing to review function 0x1093**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x11e0,0x12f0):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 18ms:
[codex:445933] 11e0 SUB
[codex:445933] 11e1 0x90
[codex:445933] 11e2 SSTORE
[codex:445933] 11e3 0x80
[codex:445933] 11e4 MLOAD
[codex:445933] 11e5 0x7f 0xa9059cbb00000000000000000000000000000000000000000000000000000000
[codex:445933] 1206 0x81
[codex:445933] 1207 MSTORE
[codex:445933] 1208 0x60 0x04
[codex:445933] 120a 0x81
[codex:445933] 120b ADD
[codex:445933] 120c 0x94
[codex:445933] 120d 0x90
[codex:445933] 120e 0x94
[codex:445933] 120f MSTORE
[codex:445933] 1210 0x60 0x24
[codex:445933] 1212 0x84
[codex:445933] 1213 ADD
[codex:445933] 1214 0x87
[codex:445933] 1215 0x90
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing ERC20 withdrawal function**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x0b00,0x0c20):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 17ms:
[codex:445933] 0b00 ADD
[codex:445933] 0b01 MLOAD
[codex:445933] 0b02 0x60 0x01
[codex:445933] 0b04 0x60 0x01
[codex:445933] 0b06 0x60 0xa0
[codex:445933] 0b08 SHL
[codex:445933] 0b09 SUB
[codex:445933] 0b0a AND
[codex:445933] 0b0b 0x60 0x01
[codex:445933] 0b0d 0x60 0x01
[codex:445933] 0b0f 0x60 0xa0
[codex:445933] 0b11 SHL
[codex:445933] 0b12 SUB
[codex:445933] 0b13 AND
[codex:445933] 0b14 0x81
[codex:445933] 0b15 MSTORE
[codex:445933] 0b16 0x60 0x20
[codex:445933] 0b18 ADD
[codex:445933] 0b19 0x90
[codex:445933] 0b1a 0x81
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing ERC20 withdrawal functions**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933]
[codex:445933] def disasm(start,end):
[codex:445933] i=start
[codex:445933] out=[]
[codex:445933] while i<end and i<len(code):
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] out.append(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] out.append(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] return out
[codex:445933]
[codex:445933] for line in disasm(0x0d30,0x0e20):
[codex:445933] print(line)
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0d30 POP
[codex:445933] 0d31 POP
[codex:445933] 0d32 JUMP
[codex:445933] 0d33 JUMPDEST
[codex:445933] 0d34 0x60 0x01
[codex:445933] 0d36 0x60 0x01
[codex:445933] 0d38 0x60 0xa0
[codex:445933] 0d3a SHL
[codex:445933] 0d3b SUB
[codex:445933] 0d3c 0x81
[codex:445933] 0d3d AND
[codex:445933] 0d3e 0x60 0x00
[codex:445933] 0d40 0x90
[codex:445933] 0d41 0x81
[codex:445933] 0d42 MSTORE
[codex:445933] 0d43 0x60 0x20
[codex:445933] 0d45 0x81
[codex:445933] 0d46 0x90
[codex:445933] 0d47 MSTORE
[codex:445933] 0d48 0x60 0x40
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing Withdraw and Owner Checks**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] # build instructions with opcodes and data
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] opnames={
[codex:445933] 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:445933] 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:445933] 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:445933] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:445933] 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:445933] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:445933] }
[codex:445933]
[codex:445933] # disasm from 0xecf to 0xfd9
[codex:445933] start=0xecf
[codex:445933] end=0xfda
[codex:445933]
[codex:445933] i=start
[codex:445933] while i<end:
[codex:445933] op=code[i]
[codex:445933] name=opnames.get(op, hex(op))
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n].hex()
[codex:445933] print(f\"{i:04x} {name} 0x{data}\")
[codex:445933] else:
[codex:445933] print(f\"{i:04x} {name}\")
[codex:445933] i += oplen[op]
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 20ms:
[codex:445933] 0ecf JUMPDEST
[codex:445933] 0ed0 0x60 0x01
[codex:445933] 0ed2 0x60 0x01
[codex:445933] 0ed4 0x60 0xa0
[codex:445933] 0ed6 SHL
[codex:445933] 0ed7 SUB
[codex:445933] 0ed8 0x82
[codex:445933] 0ed9 AND
[codex:445933] 0eda 0x61 0x0f14
[codex:445933] 0edd JUMPI
[codex:445933] 0ede 0x60 0x40
[codex:445933] 0ee0 MLOAD
[codex:445933] 0ee1 0x62 0x461bcd
[codex:445933] 0ee5 0x60 0xe5
[codex:445933] 0ee7 SHL
[codex:445933] 0ee8 0x81
[codex:445933] 0ee9 MSTORE
[codex:445933] 0eea 0x60 0x04
[codex:445933] 0eec ADD
[codex:445933] 0eed 0x80
[codex:445933]
[codex:445933] thinking
[codex:445933] **Analyzing stack usage for DUP/SWAP opcodes**
[codex:445933] exec
[codex:445933] /bin/bash -lc "python - <<'PY'
[codex:445933] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:445933] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:445933] code=bytes.fromhex(hexstr)
[codex:445933]
[codex:445933] oplen=[1]*256
[codex:445933] for op in range(0x60,0x80):
[codex:445933] oplen[op]=1+(op-0x5f)
[codex:445933]
[codex:445933] # decode instructions from start to end
[codex:445933] start=0xecf
[codex:445933] end=0xf74
[codex:445933]
[codex:445933] instr=[]
[codex:445933] i=start
[codex:445933] while i<end:
[codex:445933] op=code[i]
[codex:445933] data=None
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] n=op-0x5f
[codex:445933] data=code[i+1:i+1+n]
[codex:445933] instr.append((i,op,data))
[codex:445933] i += oplen[op]
[codex:445933]
[codex:445933] # simple symbolic stack
[codex:445933] stack=['R','A','P'] # top first: R=return, A=amount, P=payee
[codex:445933]
[codex:445933] # helper for display
[codex:445933] def st():
[codex:445933] return '['+', '.join(stack)+']'
[codex:445933]
[codex:445933] # function to pop
[codex:445933]
[codex:445933] def pop(n=1):
[codex:445933] res=[]
[codex:445933] for _ in range(n):
[codex:445933] if stack:
[codex:445933] res.append(stack.pop(0))
[codex:445933] else:
[codex:445933] res.append('empty')
[codex:445933] return res if n>1 else res[0]
[codex:445933]
[codex:445933] # function to push
[codex:445933]
[codex:445933] def push(x):
[codex:445933] stack.insert(0,x)
[codex:445933]
[codex:445933] # execute
[codex:445933] for (off,op,data) in instr:
[codex:445933] # handle only basic ops, ignore control flow
[codex:445933] if 0x60<=op<=0x7f:
[codex:445933] push('0x'+data.hex())
[codex:445933] elif op==0x5b: # JUMPDEST
[codex:445933] pass
[codex:445933] elif 0x80<=op<=0x8f: # DUP
[codex:445933] idx=op-0x80
[codex:445933] if idx < len(stack):
[codex:445933] push(stack[idx])
[codex:445933] else:
[codex:445933] push('dup?')
[codex:445933] elif 0x90<=op<=0x9f: # SWAP
[codex:445933] idx=op-0x90+1
[codex:445933] if idx < len(stack):
[codex:445933] stack[0], stack[idx] = stack[idx], stack[0]
[codex:445933] else:
[codex:445933] pass
[codex:445933] elif op in (0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,
[codex:445933] 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x20):
[codex:445933] # binary or unary ops; handle for stack positions
[codex:445933] if op in (0x15,0x19): # ISZERO, NOT
[codex:445933] a=pop()
[codex:445933] push(f\"{['ISZERO','NOT'][op==0x19]}({a})\")
[codex:445933] else:
[codex:445933] b=pop(); a=pop()
[codex:445933] name={0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x10:'LT',0x11:'GT',0x14:'EQ',0x16:'AND',0x17:'OR',0x20:'SHA3',0x1b:'SHL'}.get(op,f'op{op:x}')
[codex:445933] push(f\"{name}({a},{b})\")
[codex:445933] elif op==0x54: # SLOAD
[codex:445933] a=pop()
[codex:445933] push(f\"SLOAD({a})\")
[codex:445933] elif op==0x52: # MSTORE
[codex:445933] b=pop(); a=pop()
[codex:445933] # ignore memory
[codex:445933] elif op==0x51: # MLOAD
[codex:445933] a=pop();
[codex:445933] push(f\"MLOAD({a})\")
[codex:445933] elif op==0x56: # JUMP
[codex:445933] # stop
[codex:445933] break
[codex:445933] elif op==0x57: # JUMPI
[codex:445933] # conditional, ignore
[codex:445933] cond=pop(); dest=pop()
[codex:445933] # do nothing
[codex:445933] elif op==0x5a: # GAS
[codex:445933] push('GAS')
[codex:445933] elif op==0xf1: # CALL
[codex:445933] pass
[codex:445933] elif op==0x50: # POP
[codex:445933] pop()
[codex:445933] else:
[codex:445933] # unknown, pop? no
[codex:445933] pass
[codex:445933] if off in (0xf6c,0xf6d,0xf6e,0xf6f,0xf70,0xf71):
[codex:445933] print(hex(off), st())
[codex:445933]
[codex:445933] print('stack at 0xf6c', st())
[codex:445933] PY" in /tmp/codex-multi-1icckdfk succeeded in 19ms:
[codex:445933] 0xf6c [SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf6d [SLOAD(SHA3(0x40,0x00)), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf6e [MLOAD(0x40), SLOAD(SHA3(0x40,0x00)), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf6f [GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40)), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf70 [ISZERO(GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40))), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] 0xf71 [0x0fab, ISZERO(GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40))), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933] stack at 0xf6c [0x0fab, ISZERO(GT(SLOAD(SHA3(0x40,0x00)),MLOAD(0x40))), SLOAD(SHA3(0x40,0x00)), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), MLOAD(0x40), SUB(MLOAD(0x40),ADD(ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20),0x40)), ADD(ADD(ADD(MLOAD(0x40),0x04),0x20),0x20), ADD(MLOAD(0x40),0x04), ADD(MLOAD(0x40),0x04), R, A, P]
[codex:445933]
[codex:445933] thinking
[codex:445933] **Evaluating symbolic execution limitations and final verdict**
[codex:445933]
[codex:445933] I'm reviewing the symbolic execution flaws around memory and stack modeling, realizing the naive approach isn't reliable. After carefully checking the bytecode logic for unsafe calls or fallback exploits, I conclude there are no concrete, exploitable vulnerabilities. I'll prepare a valid JSON output reporting no findings, per the user's strict schema and instructions.
[codex:445933] codex
[codex:445933] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.","findings":[]}
[codex:445933] tokens used
[codex:445933] 139,444
[codex:445933] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T02:26:32.295937+00:00",
"returncode": 0
},
"summary": "Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were found from bytecode alone.",
"raw_final": {
"summary": "Reviewed the full runtime bytecode bundle and identified only balance-checked ETH/ERC20 withdrawals with state updates before external calls plus owner-gated balance allocation; no unprotected value transfers, upgrade hooks, delegatecalls, or selfdestruct paths enabling a concrete profit extraction were 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 0x00f3 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0xa51a828c 00000019: GT 0000001a: PUSH2 0x008a 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xde1b0486 00000024: GT 00000025: PUSH2 0x0059 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xde1b0486 0000002f: EQ 00000030: PUSH2 0x06f6 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xebeaa0a7 0000003a: EQ 0000003b: PUSH2 0x0729 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xf4f3b200 00000045: EQ 00000046: PUSH2 0x0764 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf99cc2a4 00000050: EQ 00000051: PUSH2 0x0797 00000054: JUMPI 00000055: PUSH2 0x00f3 00000058: JUMP 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0xa51a828c 00000060: EQ 00000061: PUSH2 0x038c 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0xa8001d6f 0000006b: EQ 0000006c: PUSH2 0x04c0 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xb412cf20 00000076: EQ 00000077: PUSH2 0x04fb 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xc7927b74 00000081: EQ 00000082: PUSH2 0x06b3 00000085: JUMPI 00000086: PUSH2 0x00f3 00000089: JUMP 0000008a: JUMPDEST 0000008b: DUP1 0000008c: PUSH4 0x7a9262a2 00000091: GT 00000092: PUSH2 0x00c6 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0x7a9262a2 0000009c: EQ 0000009d: PUSH2 0x02a2 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0x9470b0bd 000000a7: EQ 000000a8: PUSH2 0x02e7 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0xa1db9782 000000b2: EQ 000000b3: PUSH2 0x0320 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0xa39a45b7 000000bd: EQ 000000be: PUSH2 0x0359 000000c1: JUMPI 000000c2: PUSH2 0x00f3 000000c5: JUMP 000000c6: JUMPDEST 000000c7: DUP1 000000c8: PUSH4 0x2e1a7d4d 000000cd: EQ 000000ce: PUSH2 0x0132 000000d1: JUMPI 000000d2: DUP1 000000d3: PUSH4 0x3ccfd60b 000000d8: EQ 000000d9: PUSH2 0x015c 000000dc: JUMPI 000000dd: DUP1 000000de: PUSH4 0x4b81539e 000000e3: EQ 000000e4: PUSH2 0x0171 000000e7: JUMPI 000000e8: DUP1 000000e9: PUSH4 0x59c37cc9 000000ee: EQ 000000ef: PUSH2 0x0271 000000f2: JUMPI 000000f3: JUMPDEST 000000f4: CALLDATASIZE 000000f5: ISZERO 000000f6: PUSH2 0x0130 000000f9: JUMPI 000000fa: PUSH1 0x40 000000fc: MLOAD 000000fd: PUSH3 0x461bcd 00000101: PUSH1 0xe5 00000103: SHL 00000104: DUP2 00000105: MSTORE 00000106: PUSH1 0x04 00000108: ADD 00000109: DUP1 0000010a: DUP1 0000010b: PUSH1 0x20 0000010d: ADD 0000010e: DUP3 0000010f: DUP2 00000110: SUB 00000111: DUP3 00000112: MSTORE 00000113: PUSH1 0x32 00000115: DUP2 00000116: MSTORE 00000117: PUSH1 0x20 00000119: ADD 0000011a: DUP1 0000011b: PUSH2 0x1456 0000011e: PUSH1 0x32 00000120: SWAP2 00000121: CODECOPY 00000122: PUSH1 0x40 00000124: ADD 00000125: SWAP2 00000126: POP 00000127: POP 00000128: PUSH1 0x40 0000012a: MLOAD 0000012b: DUP1 0000012c: SWAP2 0000012d: SUB 0000012e: SWAP1 0000012f: REVERT 00000130: JUMPDEST 00000131: STOP 00000132: JUMPDEST 00000133: CALLVALUE 00000134: DUP1 00000135: ISZERO 00000136: PUSH2 0x013e 00000139: JUMPI 0000013a: PUSH1 0x00 0000013c: DUP1 0000013d: REVERT 0000013e: JUMPDEST 0000013f: POP 00000140: PUSH2 0x0130 00000143: PUSH1 0x04 00000145: DUP1 00000146: CALLDATASIZE 00000147: SUB 00000148: PUSH1 0x20 0000014a: DUP2 0000014b: LT 0000014c: ISZERO 0000014d: PUSH2 0x0155 00000150: JUMPI 00000151: PUSH1 0x00 00000153: DUP1 00000154: REVERT 00000155: JUMPDEST 00000156: POP 00000157: CALLDATALOAD 00000158: PUSH2 0x08cb 0000015b: JUMP 0000015c: JUMPDEST 0000015d: CALLVALUE 0000015e: DUP1 0000015f: ISZERO 00000160: PUSH2 0x0168 00000163: JUMPI 00000164: PUSH1 0x00 00000166: DUP1 00000167: REVERT 00000168: JUMPDEST 00000169: POP 0000016a: PUSH2 0x0130 0000016d: PUSH2 0x08d8 00000170: JUMP 00000171: JUMPDEST 00000172: CALLVALUE 00000173: DUP1 00000174: ISZERO 00000175: PUSH2 0x017d 00000178: JUMPI 00000179: PUSH1 0x00 0000017b: DUP1 0000017c: REVERT 0000017d: JUMPDEST 0000017e: POP 0000017f: PUSH2 0x0221 00000182: PUSH1 0x04 00000184: DUP1 00000185: CALLDATASIZE 00000186: SUB 00000187: PUSH1 0x20 00000189: DUP2 0000018a: LT 0000018b: ISZERO 0000018c: PUSH2 0x0194 0000018f: JUMPI 00000190: PUSH1 0x00 00000192: DUP1 00000193: REVERT 00000194: JUMPDEST 00000195: DUP2 00000196: ADD 00000197: SWAP1 00000198: PUSH1 0x20 0000019a: DUP2 0000019b: ADD 0000019c: DUP2 0000019d: CALLDATALOAD 0000019e: PUSH5 0x0100000000 000001a4: DUP2 000001a5: GT 000001a6: ISZERO 000001a7: PUSH2 0x01af 000001aa: JUMPI 000001ab: PUSH1 0x00 000001ad: DUP1 000001ae: REVERT 000001af: JUMPDEST 000001b0: DUP3 000001b1: ADD 000001b2: DUP4 000001b3: PUSH1 0x20 000001b5: DUP3 000001b6: ADD 000001b7: GT 000001b8: ISZERO 000001b9: PUSH2 0x01c1 000001bc: JUMPI 000001bd: PUSH1 0x00 000001bf: DUP1 000001c0: REVERT 000001c1: JUMPDEST 000001c2: DUP1 000001c3: CALLDATALOAD 000001c4: SWAP1 000001c5: PUSH1 0x20 000001c7: ADD 000001c8: SWAP2 000001c9: DUP5 000001ca: PUSH1 0x20 000001cc: DUP4 000001cd: MUL 000001ce: DUP5 000001cf: ADD 000001d0: GT 000001d1: PUSH5 0x0100000000 000001d7: DUP4 000001d8: GT 000001d9: OR 000001da: ISZERO 000001db: PUSH2 0x01e3 000001de: JUMPI 000001df: PUSH1 0x00 000001e1: DUP1 000001e2: REVERT 000001e3: JUMPDEST 000001e4: SWAP2 000001e5: SWAP1 000001e6: DUP1 000001e7: DUP1 000001e8: PUSH1 0x20 000001ea: MUL 000001eb: PUSH1 0x20 000001ed: ADD 000001ee: PUSH1 0x40 000001f0: MLOAD 000001f1: SWAP1 000001f2: DUP2 000001f3: ADD 000001f4: PUSH1 0x40 000001f6: MSTORE 000001f7: DUP1 000001f8: SWAP4 000001f9: SWAP3 000001fa: SWAP2 000001fb: SWAP1 000001fc: DUP2 000001fd: DUP2 000001fe: MSTORE 000001ff: PUSH1 0x20 00000201: ADD 00000202: DUP4 00000203: DUP4 00000204: PUSH1 0x20 00000206: MUL 00000207: DUP1 00000208: DUP3 00000209: DUP5 0000020a: CALLDATACOPY 0000020b: PUSH1 0x00 0000020d: SWAP3 0000020e: ADD 0000020f: SWAP2 00000210: SWAP1 00000211: SWAP2 00000212: MSTORE 00000213: POP 00000214: SWAP3 00000215: SWAP6 00000216: POP 00000217: PUSH2 0x08f4 0000021a: SWAP5 0000021b: POP 0000021c: POP 0000021d: POP 0000021e: POP 0000021f: POP 00000220: JUMP 00000221: JUMPDEST 00000222: PUSH1 0x40 00000224: DUP1 00000225: MLOAD 00000226: PUSH1 0x20 00000228: DUP1 00000229: DUP3 0000022a: MSTORE 0000022b: DUP4 0000022c: MLOAD 0000022d: DUP2 0000022e: DUP4 0000022f: ADD 00000230: MSTORE 00000231: DUP4 00000232: MLOAD 00000233: SWAP2 00000234: SWAP3 00000235: DUP4 00000236: SWAP3 00000237: SWAP1 00000238: DUP4 00000239: ADD 0000023a: SWAP2 0000023b: DUP6 0000023c: DUP2 0000023d: ADD 0000023e: SWAP2 0000023f: MUL 00000240: DUP1 00000241: DUP4 00000242: DUP4 00000243: PUSH1 0x00 00000245: JUMPDEST 00000246: DUP4 00000247: DUP2 00000248: LT 00000249: ISZERO 0000024a: PUSH2 0x025d 0000024d: JUMPI 0000024e: DUP2 0000024f: DUP2 00000250: ADD 00000251: MLOAD 00000252: DUP4 00000253: DUP3 00000254: ADD 00000255: MSTORE 00000256: PUSH1 0x20 00000258: ADD 00000259: PUSH2 0x0245 0000025c: JUMP 0000025d: JUMPDEST 0000025e: POP 0000025f: POP 00000260: POP 00000261: POP 00000262: SWAP1 00000263: POP 00000264: ADD 00000265: SWAP3 00000266: POP 00000267: POP 00000268: POP 00000269: PUSH1 0x40 0000026b: MLOAD 0000026c: DUP1 0000026d: SWAP2 0000026e: SUB 0000026f: SWAP1 00000270: RETURN 00000271: JUMPDEST 00000272: CALLVALUE 00000273: DUP1 00000274: ISZERO 00000275: PUSH2 0x027d 00000278: JUMPI 00000279: PUSH1 0x00 0000027b: DUP1 0000027c: REVERT 0000027d: JUMPDEST 0000027e: POP 0000027f: PUSH2 0x0286 00000282: PUSH2 0x0961 00000285: JUMP 00000286: JUMPDEST 00000287: PUSH1 0x40 00000289: DUP1 0000028a: MLOAD 0000028b: PUSH1 0x01 0000028d: PUSH1 0x01 0000028f: PUSH1 0xa0 00000291: SHL 00000292: SUB 00000293: SWAP1 00000294: SWAP3 00000295: AND 00000296: DUP3 00000297: MSTORE 00000298: MLOAD 00000299: SWAP1 0000029a: DUP2 0000029b: SWAP1 0000029c: SUB 0000029d: PUSH1 0x20 0000029f: ADD 000002a0: SWAP1 000002a1: RETURN 000002a2: JUMPDEST 000002a3: CALLVALUE 000002a4: DUP1 000002a5: ISZERO 000002a6: PUSH2 0x02ae 000002a9: JUMPI 000002aa: PUSH1 0x00 000002ac: DUP1 000002ad: REVERT 000002ae: JUMPDEST 000002af: POP 000002b0: PUSH2 0x02d5 000002b3: PUSH1 0x04 000002b5: DUP1 000002b6: CALLDATASIZE 000002b7: SUB 000002b8: PUSH1 0x20 000002ba: DUP2 000002bb: LT 000002bc: ISZERO 000002bd: PUSH2 0x02c5 000002c0: JUMPI 000002c1: PUSH1 0x00 000002c3: DUP1 000002c4: REVERT 000002c5: JUMPDEST 000002c6: POP 000002c7: CALLDATALOAD 000002c8: PUSH1 0x01 000002ca: PUSH1 0x01 000002cc: PUSH1 0xa0 000002ce: SHL 000002cf: SUB 000002d0: AND 000002d1: PUSH2 0x0970 000002d4: JUMP 000002d5: JUMPDEST 000002d6: PUSH1 0x40 000002d8: DUP1 000002d9: MLOAD 000002da: SWAP2 000002db: DUP3 000002dc: MSTORE 000002dd: MLOAD 000002de: SWAP1 000002df: DUP2 000002e0: SWAP1 000002e1: SUB 000002e2: PUSH1 0x20 000002e4: ADD 000002e5: SWAP1 000002e6: RETURN 000002e7: JUMPDEST 000002e8: CALLVALUE 000002e9: DUP1 000002ea: ISZERO 000002eb: PUSH2 0x02f3 000002ee: JUMPI 000002ef: PUSH1 0x00 000002f1: DUP1 000002f2: REVERT 000002f3: JUMPDEST 000002f4: POP 000002f5: PUSH2 0x0130 000002f8: PUSH1 0x04 000002fa: DUP1 000002fb: CALLDATASIZE 000002fc: SUB 000002fd: PUSH1 0x40 000002ff: DUP2 00000300: LT 00000301: ISZERO 00000302: PUSH2 0x030a 00000305: JUMPI 00000306: PUSH1 0x00 00000308: DUP1 00000309: REVERT 0000030a: JUMPDEST 0000030b: POP 0000030c: PUSH1 0x01 0000030e: PUSH1 0x01 00000310: PUSH1 0xa0 00000312: SHL 00000313: SUB 00000314: DUP2 00000315: CALLDATALOAD 00000316: AND 00000317: SWAP1 00000318: PUSH1 0x20 0000031a: ADD 0000031b: CALLDATALOAD 0000031c: PUSH2 0x0982 0000031f: JUMP 00000320: JUMPDEST 00000321: CALLVALUE 00000322: DUP1 00000323: ISZERO 00000324: PUSH2 0x032c 00000327: JUMPI 00000328: PUSH1 0x00 0000032a: DUP1 0000032b: REVERT 0000032c: JUMPDEST 0000032d: POP 0000032e: PUSH2 0x0130 00000331: PUSH1 0x04 00000333: DUP1 00000334: CALLDATASIZE 00000335: SUB 00000336: PUSH1 0x40 00000338: DUP2 00000339: LT 0000033a: ISZERO 0000033b: PUSH2 0x0343 0000033e: JUMPI 0000033f: PUSH1 0x00 00000341: DUP1 00000342: REVERT 00000343: JUMPDEST 00000344: POP 00000345: PUSH1 0x01 00000347: PUSH1 0x01 00000349: PUSH1 0xa0 0000034b: SHL 0000034c: SUB 0000034d: DUP2 0000034e: CALLDATALOAD 0000034f: AND 00000350: SWAP1 00000351: PUSH1 0x20 00000353: ADD 00000354: CALLDATALOAD 00000355: PUSH2 0x0990 00000358: JUMP 00000359: JUMPDEST 0000035a: CALLVALUE 0000035b: DUP1 0000035c: ISZERO 0000035d: PUSH2 0x0365 00000360: JUMPI 00000361: PUSH1 0x00 00000363: DUP1 00000364: REVERT 00000365: JUMPDEST 00000366: POP 00000367: PUSH2 0x0130 0000036a: PUSH1 0x04 0000036c: DUP1 0000036d: CALLDATASIZE 0000036e: SUB 0000036f: PUSH1 0x20 00000371: DUP2 00000372: LT 00000373: ISZERO 00000374: PUSH2 0x037c 00000377: JUMPI 00000378: PUSH1 0x00 0000037a: DUP1 0000037b: REVERT 0000037c: JUMPDEST 0000037d: POP 0000037e: CALLDATALOAD 0000037f: PUSH1 0x01 00000381: PUSH1 0x01 00000383: PUSH1 0xa0 00000385: SHL 00000386: SUB 00000387: AND 00000388: PUSH2 0x099b 0000038b: JUMP 0000038c: JUMPDEST 0000038d: CALLVALUE 0000038e: DUP1 0000038f: ISZERO 00000390: PUSH2 0x0398 00000393: JUMPI 00000394: PUSH1 0x00 00000396: DUP1 00000397: REVERT 00000398: JUMPDEST 00000399: POP 0000039a: PUSH2 0x0221 0000039d: PUSH1 0x04 0000039f: DUP1 000003a0: CALLDATASIZE 000003a1: SUB 000003a2: PUSH1 0x40 000003a4: DUP2 000003a5: LT 000003a6: ISZERO 000003a7: PUSH2 0x03af 000003aa: JUMPI 000003ab: PUSH1 0x00 000003ad: DUP1 000003ae: REVERT 000003af: JUMPDEST 000003b0: DUP2 000003b1: ADD 000003b2: SWAP1 000003b3: PUSH1 0x20 000003b5: DUP2 000003b6: ADD 000003b7: DUP2 000003b8: CALLDATALOAD 000003b9: PUSH5 0x0100000000 000003bf: DUP2 000003c0: GT 000003c1: ISZERO 000003c2: PUSH2 0x03ca 000003c5: JUMPI 000003c6: PUSH1 0x00 000003c8: DUP1 000003c9: REVERT 000003ca: JUMPDEST 000003cb: DUP3 000003cc: ADD 000003cd: DUP4 000003ce: PUSH1 0x20 000003d0: DUP3 000003d1: ADD 000003d2: GT 000003d3: ISZERO 000003d4: PUSH2 0x03dc 000003d7: JUMPI 000003d8: PUSH1 0x00 000003da: DUP1 000003db: REVERT 000003dc: JUMPDEST 000003dd: DUP1 000003de: CALLDATALOAD 000003df: SWAP1 000003e0: PUSH1 0x20 000003e2: ADD 000003e3: SWAP2 000003e4: DUP5 000003e5: PUSH1 0x20 000003e7: DUP4 000003e8: MUL 000003e9: DUP5 000003ea: ADD 000003eb: GT 000003ec: PUSH5 0x0100000000 000003f2: DUP4 000003f3: GT 000003f4: OR 000003f5: ISZERO 000003f6: PUSH2 0x03fe 000003f9: JUMPI 000003fa: PUSH1 0x00 000003fc: DUP1 000003fd: REVERT 000003fe: JUMPDEST 000003ff: SWAP2 00000400: SWAP1 00000401: DUP1 00000402: DUP1 00000403: PUSH1 0x20 00000405: MUL 00000406: PUSH1 0x20 00000408: ADD 00000409: PUSH1 0x40 0000040b: MLOAD 0000040c: SWAP1 0000040d: DUP2 0000040e: ADD 0000040f: PUSH1 0x40 00000411: MSTORE 00000412: DUP1 00000413: SWAP4 00000414: SWAP3 00000415: SWAP2 00000416: SWAP1 00000417: DUP2 00000418: DUP2 00000419: MSTORE 0000041a: PUSH1 0x20 0000041c: ADD 0000041d: DUP4 0000041e: DUP4 0000041f: PUSH1 0x20 00000421: MUL 00000422: DUP1 00000423: DUP3 00000424: DUP5 00000425: CALLDATACOPY 00000426: PUSH1 0x00 00000428: SWAP3 00000429: ADD 0000042a: SWAP2 0000042b: SWAP1 0000042c: SWAP2 0000042d: MSTORE 0000042e: POP 0000042f: SWAP3 00000430: SWAP6 00000431: SWAP5 00000432: SWAP4 00000433: PUSH1 0x20 00000435: DUP2 00000436: ADD 00000437: SWAP4 00000438: POP 00000439: CALLDATALOAD 0000043a: SWAP2 0000043b: POP 0000043c: POP 0000043d: PUSH5 0x0100000000 00000443: DUP2 00000444: GT 00000445: ISZERO 00000446: PUSH2 0x044e 00000449: JUMPI 0000044a: PUSH1 0x00 0000044c: DUP1 0000044d: REVERT 0000044e: JUMPDEST 0000044f: DUP3 00000450: ADD 00000451: DUP4 00000452: PUSH1 0x20 00000454: DUP3 00000455: ADD 00000456: GT 00000457: ISZERO 00000458: PUSH2 0x0460 0000045b: JUMPI 0000045c: PUSH1 0x00 0000045e: DUP1 0000045f: REVERT 00000460: JUMPDEST 00000461: DUP1 00000462: CALLDATALOAD 00000463: SWAP1 00000464: PUSH1 0x20 00000466: ADD 00000467: SWAP2 00000468: DUP5 00000469: PUSH1 0x20 0000046b: DUP4 0000046c: MUL 0000046d: DUP5 0000046e: ADD 0000046f: GT 00000470: PUSH5 0x0100000000 00000476: DUP4 00000477: GT 00000478: OR 00000479: ISZERO 0000047a: PUSH2 0x0482 0000047d: JUMPI 0000047e: PUSH1 0x00 00000480: DUP1 00000481: REVERT 00000482: JUMPDEST 00000483: SWAP2 00000484: SWAP1 00000485: DUP1 00000486: DUP1 00000487: PUSH1 0x20 00000489: MUL 0000048a: PUSH1 0x20 0000048c: ADD 0000048d: PUSH1 0x40 0000048f: MLOAD 00000490: SWAP1 00000491: DUP2 00000492: ADD 00000493: PUSH1 0x40 00000495: MSTORE 00000496: DUP1 00000497: SWAP4 00000498: SWAP3 00000499: SWAP2 0000049a: SWAP1 0000049b: DUP2 0000049c: DUP2 0000049d: MSTORE 0000049e: PUSH1 0x20 000004a0: ADD 000004a1: DUP4 000004a2: DUP4 000004a3: PUSH1 0x20 000004a5: MUL 000004a6: DUP1 000004a7: DUP3 000004a8: DUP5 000004a9: CALLDATACOPY 000004aa: PUSH1 0x00 000004ac: SWAP3 000004ad: ADD 000004ae: SWAP2 000004af: SWAP1 000004b0: SWAP2 000004b1: MSTORE 000004b2: POP 000004b3: SWAP3 000004b4: SWAP6 000004b5: POP 000004b6: PUSH2 0x0a63 000004b9: SWAP5 000004ba: POP 000004bb: POP 000004bc: POP 000004bd: POP 000004be: POP 000004bf: JUMP 000004c0: JUMPDEST 000004c1: CALLVALUE 000004c2: DUP1 000004c3: ISZERO 000004c4: PUSH2 0x04cc 000004c7: JUMPI 000004c8: PUSH1 0x00 000004ca: DUP1 000004cb: REVERT 000004cc: JUMPDEST 000004cd: POP 000004ce: PUSH2 0x0130 000004d1: PUSH1 0x04 000004d3: DUP1 000004d4: CALLDATASIZE 000004d5: SUB 000004d6: PUSH1 0x40 000004d8: DUP2 000004d9: LT 000004da: ISZERO 000004db: PUSH2 0x04e3 000004de: JUMPI 000004df: PUSH1 0x00 000004e1: DUP1 000004e2: REVERT 000004e3: JUMPDEST 000004e4: POP 000004e5: PUSH1 0x01 000004e7: PUSH1 0x01 000004e9: PUSH1 0xa0 000004eb: SHL 000004ec: SUB 000004ed: DUP2 000004ee: CALLDATALOAD 000004ef: DUP2 000004f0: AND 000004f1: SWAP2 000004f2: PUSH1 0x20 000004f4: ADD 000004f5: CALLDATALOAD 000004f6: AND 000004f7: PUSH2 0x0b49 000004fa: JUMP 000004fb: JUMPDEST 000004fc: CALLVALUE 000004fd: DUP1 000004fe: ISZERO 000004ff: PUSH2 0x0507 00000502: JUMPI 00000503: PUSH1 0x00 00000505: DUP1 00000506: REVERT 00000507: JUMPDEST 00000508: POP 00000509: PUSH2 0x0130 0000050c: PUSH1 0x04 0000050e: DUP1 0000050f: CALLDATASIZE 00000510: SUB 00000511: PUSH1 0x60 00000513: DUP2 00000514: LT 00000515: ISZERO 00000516: PUSH2 0x051e 00000519: JUMPI 0000051a: PUSH1 0x00 0000051c: DUP1 0000051d: REVERT 0000051e: JUMPDEST 0000051f: DUP2 00000520: ADD 00000521: SWAP1 00000522: PUSH1 0x20 00000524: DUP2 00000525: ADD 00000526: DUP2 00000527: CALLDATALOAD 00000528: PUSH5 0x0100000000 0000052e: DUP2 0000052f: GT 00000530: ISZERO 00000531: PUSH2 0x0539 00000534: JUMPI 00000535: PUSH1 0x00 00000537: DUP1 00000538: REVERT 00000539: JUMPDEST 0000053a: DUP3 0000053b: ADD 0000053c: DUP4 0000053d: PUSH1 0x20 0000053f: DUP3 00000540: ADD 00000541: GT 00000542: ISZERO 00000543: PUSH2 0x054b 00000546: JUMPI 00000547: PUSH1 0x00 00000549: DUP1 0000054a: REVERT 0000054b: JUMPDEST 0000054c: DUP1 0000054d: CALLDATALOAD 0000054e: SWAP1 0000054f: PUSH1 0x20 00000551: ADD 00000552: SWAP2 00000553: DUP5 00000554: PUSH1 0x20 00000556: DUP4 00000557: MUL 00000558: DUP5 00000559: ADD 0000055a: GT 0000055b: PUSH5 0x0100000000 00000561: DUP4 00000562: GT 00000563: OR 00000564: ISZERO 00000565: PUSH2 0x056d 00000568: JUMPI 00000569: PUSH1 0x00 0000056b: DUP1 0000056c: REVERT 0000056d: JUMPDEST 0000056e: SWAP2 0000056f: SWAP1 00000570: DUP1 00000571: DUP1 00000572: PUSH1 0x20 00000574: MUL 00000575: PUSH1 0x20 00000577: ADD 00000578: PUSH1 0x40 0000057a: MLOAD 0000057b: SWAP1 0000057c: DUP2 0000057d: ADD 0000057e: PUSH1 0x40 00000580: MSTORE 00000581: DUP1 00000582: SWAP4 00000583: SWAP3 00000584: SWAP2 00000585: SWAP1 00000586: DUP2 00000587: DUP2 00000588: MSTORE 00000589: PUSH1 0x20 0000058b: ADD 0000058c: DUP4 0000058d: DUP4 0000058e: PUSH1 0x20 00000590: MUL 00000591: DUP1 00000592: DUP3 00000593: DUP5 00000594: CALLDATACOPY 00000595: PUSH1 0x00 00000597: SWAP3 00000598: ADD 00000599: SWAP2 0000059a: SWAP1 0000059b: SWAP2 0000059c: MSTORE 0000059d: POP 0000059e: SWAP3 0000059f: SWAP6 000005a0: SWAP5 000005a1: SWAP4 000005a2: PUSH1 0x20 000005a4: DUP2 000005a5: ADD 000005a6: SWAP4 000005a7: POP 000005a8: CALLDATALOAD 000005a9: SWAP2 000005aa: POP 000005ab: POP 000005ac: PUSH5 0x0100000000 000005b2: DUP2 000005b3: GT 000005b4: ISZERO 000005b5: PUSH2 0x05bd 000005b8: JUMPI 000005b9: PUSH1 0x00 000005bb: DUP1 000005bc: REVERT 000005bd: JUMPDEST 000005be: DUP3 000005bf: ADD 000005c0: DUP4 000005c1: PUSH1 0x20 000005c3: DUP3 000005c4: ADD 000005c5: GT 000005c6: ISZERO 000005c7: PUSH2 0x05cf 000005ca: JUMPI 000005cb: PUSH1 0x00 000005cd: DUP1 000005ce: REVERT 000005cf: JUMPDEST 000005d0: DUP1 000005d1: CALLDATALOAD 000005d2: SWAP1 000005d3: PUSH1 0x20 000005d5: ADD 000005d6: SWAP2 000005d7: DUP5 000005d8: PUSH1 0x20 000005da: DUP4 000005db: MUL 000005dc: DUP5 000005dd: ADD 000005de: GT 000005df: PUSH5 0x0100000000 000005e5: DUP4 000005e6: GT 000005e7: OR 000005e8: ISZERO 000005e9: PUSH2 0x05f1 000005ec: JUMPI 000005ed: PUSH1 0x00 000005ef: DUP1 000005f0: REVERT 000005f1: JUMPDEST 000005f2: SWAP2 000005f3: SWAP1 000005f4: DUP1 000005f5: DUP1 000005f6: PUSH1 0x20 000005f8: MUL 000005f9: PUSH1 0x20 000005fb: ADD 000005fc: PUSH1 0x40 000005fe: MLOAD 000005ff: SWAP1 00000600: DUP2 00000601: ADD 00000602: PUSH1 0x40 00000604: MSTORE 00000605: DUP1 00000606: SWAP4 00000607: SWAP3 00000608: SWAP2 00000609: SWAP1 0000060a: DUP2 0000060b: DUP2 0000060c: MSTORE 0000060d: PUSH1 0x20 0000060f: ADD 00000610: DUP4 00000611: DUP4 00000612: PUSH1 0x20 00000614: MUL 00000615: DUP1 00000616: DUP3 00000617: DUP5 00000618: CALLDATACOPY 00000619: PUSH1 0x00 0000061b: SWAP3 0000061c: ADD 0000061d: SWAP2 0000061e: SWAP1 0000061f: SWAP2 00000620: MSTORE 00000621: POP 00000622: SWAP3 00000623: SWAP6 00000624: SWAP5 00000625: SWAP4 00000626: PUSH1 0x20 00000628: DUP2 00000629: ADD 0000062a: SWAP4 0000062b: POP 0000062c: CALLDATALOAD 0000062d: SWAP2 0000062e: POP 0000062f: POP 00000630: PUSH5 0x0100000000 00000636: DUP2 00000637: GT 00000638: ISZERO 00000639: PUSH2 0x0641 0000063c: JUMPI 0000063d: PUSH1 0x00 0000063f: DUP1 00000640: REVERT 00000641: JUMPDEST 00000642: DUP3 00000643: ADD 00000644: DUP4 00000645: PUSH1 0x20 00000647: DUP3 00000648: ADD 00000649: GT 0000064a: ISZERO 0000064b: PUSH2 0x0653 0000064e: JUMPI 0000064f: PUSH1 0x00 00000651: DUP1 00000652: REVERT 00000653: JUMPDEST 00000654: DUP1 00000655: CALLDATALOAD 00000656: SWAP1 00000657: PUSH1 0x20 00000659: ADD 0000065a: SWAP2 0000065b: DUP5 0000065c: PUSH1 0x20 0000065e: DUP4 0000065f: MUL 00000660: DUP5 00000661: ADD 00000662: GT 00000663: PUSH5 0x0100000000 00000669: DUP4 0000066a: GT 0000066b: OR 0000066c: ISZERO 0000066d: PUSH2 0x0675 00000670: JUMPI 00000671: PUSH1 0x00 00000673: DUP1 00000674: REVERT 00000675: JUMPDEST 00000676: SWAP2 00000677: SWAP1 00000678: DUP1 00000679: DUP1 0000067a: PUSH1 0x20 0000067c: MUL 0000067d: PUSH1 0x20 0000067f: ADD 00000680: PUSH1 0x40 00000682: MLOAD 00000683: SWAP1 00000684: DUP2 00000685: ADD 00000686: PUSH1 0x40 00000688: MSTORE 00000689: DUP1 0000068a: SWAP4 0000068b: SWAP3 0000068c: SWAP2 0000068d: SWAP1 0000068e: DUP2 0000068f: DUP2 00000690: MSTORE 00000691: PUSH1 0x20 00000693: ADD 00000694: DUP4 00000695: DUP4 00000696: PUSH1 0x20 00000698: MUL 00000699: DUP1 0000069a: DUP3 0000069b: DUP5 0000069c: CALLDATACOPY 0000069d: PUSH1 0x00 0000069f: SWAP3 000006a0: ADD 000006a1: SWAP2 000006a2: SWAP1 000006a3: SWAP2 000006a4: MSTORE 000006a5: POP 000006a6: SWAP3 000006a7: SWAP6 000006a8: POP 000006a9: PUSH2 0x0b7c 000006ac: SWAP5 000006ad: POP 000006ae: POP 000006af: POP 000006b0: POP 000006b1: POP 000006b2: JUMP 000006b3: JUMPDEST 000006b4: CALLVALUE 000006b5: DUP1 000006b6: ISZERO 000006b7: PUSH2 0x06bf 000006ba: JUMPI 000006bb: PUSH1 0x00 000006bd: DUP1 000006be: REVERT 000006bf: JUMPDEST 000006c0: POP 000006c1: PUSH2 0x0130 000006c4: PUSH1 0x04 000006c6: DUP1 000006c7: CALLDATASIZE 000006c8: SUB 000006c9: PUSH1 0x60 000006cb: DUP2 000006cc: LT 000006cd: ISZERO 000006ce: PUSH2 0x06d6 000006d1: JUMPI 000006d2: PUSH1 0x00 000006d4: DUP1 000006d5: REVERT 000006d6: JUMPDEST 000006d7: POP 000006d8: PUSH1 0x01 000006da: PUSH1 0x01 000006dc: PUSH1 0xa0 000006de: SHL 000006df: SUB 000006e0: DUP2 000006e1: CALLDATALOAD 000006e2: DUP2 000006e3: AND 000006e4: SWAP2 000006e5: PUSH1 0x20 000006e7: DUP2 000006e8: ADD 000006e9: CALLDATALOAD 000006ea: SWAP1 000006eb: SWAP2 000006ec: AND 000006ed: SWAP1 000006ee: PUSH1 0x40 000006f0: ADD 000006f1: CALLDATALOAD 000006f2: PUSH2 0x0d23 000006f5: JUMP 000006f6: JUMPDEST 000006f7: CALLVALUE 000006f8: DUP1 000006f9: ISZERO 000006fa: PUSH2 0x0702 000006fd: JUMPI 000006fe: PUSH1 0x00 00000700: DUP1 00000701: REVERT 00000702: JUMPDEST 00000703: POP 00000704: PUSH2 0x0130 00000707: PUSH1 0x04 00000709: DUP1 0000070a: CALLDATASIZE 0000070b: SUB 0000070c: PUSH1 0x20 0000070e: DUP2 0000070f: LT 00000710: ISZERO 00000711: PUSH2 0x0719 00000714: JUMPI 00000715: PUSH1 0x00 00000717: DUP1 00000718: REVERT 00000719: JUMPDEST 0000071a: POP 0000071b: CALLDATALOAD 0000071c: PUSH1 0x01 0000071e: PUSH1 0x01 00000720: PUSH1 0xa0 00000722: SHL 00000723: SUB 00000724: AND 00000725: PUSH2 0x0d33 00000728: JUMP 00000729: JUMPDEST 0000072a: CALLVALUE 0000072b: DUP1 0000072c: ISZERO 0000072d: PUSH2 0x0735 00000730: JUMPI 00000731: PUSH1 0x00 00000733: DUP1 00000734: REVERT 00000735: JUMPDEST 00000736: POP 00000737: PUSH2 0x02d5 0000073a: PUSH1 0x04 0000073c: DUP1 0000073d: CALLDATASIZE 0000073e: SUB 0000073f: PUSH1 0x40 00000741: DUP2 00000742: LT 00000743: ISZERO 00000744: PUSH2 0x074c 00000747: JUMPI 00000748: PUSH1 0x00 0000074a: DUP1 0000074b: REVERT 0000074c: JUMPDEST 0000074d: POP 0000074e: PUSH1 0x01 00000750: PUSH1 0x01 00000752: PUSH1 0xa0 00000754: SHL 00000755: SUB 00000756: DUP2 00000757: CALLDATALOAD 00000758: DUP2 00000759: AND 0000075a: SWAP2 0000075b: PUSH1 0x20 0000075d: ADD 0000075e: CALLDATALOAD 0000075f: AND 00000760: PUSH2 0x0d57 00000763: JUMP 00000764: JUMPDEST 00000765: CALLVALUE 00000766: DUP1 00000767: ISZERO 00000768: PUSH2 0x0770 0000076b: JUMPI 0000076c: PUSH1 0x00 0000076e: DUP1 0000076f: REVERT 00000770: JUMPDEST 00000771: POP 00000772: PUSH2 0x0130 00000775: PUSH1 0x04 00000777: DUP1 00000778: CALLDATASIZE 00000779: SUB 0000077a: PUSH1 0x20 0000077c: DUP2 0000077d: LT 0000077e: ISZERO 0000077f: PUSH2 0x0787 00000782: JUMPI 00000783: PUSH1 0x00 00000785: DUP1 00000786: REVERT 00000787: JUMPDEST 00000788: POP 00000789: CALLDATALOAD 0000078a: PUSH1 0x01 0000078c: PUSH1 0x01 0000078e: PUSH1 0xa0 00000790: SHL 00000791: SUB 00000792: AND 00000793: PUSH2 0x0d74 00000796: JUMP 00000797: JUMPDEST 00000798: CALLVALUE 00000799: DUP1 0000079a: ISZERO 0000079b: PUSH2 0x07a3 0000079e: JUMPI 0000079f: PUSH1 0x00 000007a1: DUP1 000007a2: REVERT 000007a3: JUMPDEST 000007a4: POP 000007a5: PUSH2 0x0130 000007a8: PUSH1 0x04 000007aa: DUP1 000007ab: CALLDATASIZE 000007ac: SUB 000007ad: PUSH1 0x40 000007af: DUP2 000007b0: LT 000007b1: ISZERO 000007b2: PUSH2 0x07ba 000007b5: JUMPI 000007b6: PUSH1 0x00 000007b8: DUP1 000007b9: REVERT 000007ba: JUMPDEST 000007bb: DUP2 000007bc: ADD 000007bd: SWAP1 000007be: PUSH1 0x20 000007c0: DUP2 000007c1: ADD 000007c2: DUP2 000007c3: CALLDATALOAD 000007c4: PUSH5 0x0100000000 000007ca: DUP2 000007cb: GT 000007cc: ISZERO 000007cd: PUSH2 0x07d5 000007d0: JUMPI 000007d1: PUSH1 0x00 000007d3: DUP1 000007d4: REVERT 000007d5: JUMPDEST 000007d6: DUP3 000007d7: ADD 000007d8: DUP4 000007d9: PUSH1 0x20 000007db: DUP3 000007dc: ADD 000007dd: GT 000007de: ISZERO 000007df: PUSH2 0x07e7 000007e2: JUMPI 000007e3: PUSH1 0x00 000007e5: DUP1 000007e6: REVERT 000007e7: JUMPDEST 000007e8: DUP1 000007e9: CALLDATALOAD 000007ea: SWAP1 000007eb: PUSH1 0x20 000007ed: ADD 000007ee: SWAP2 000007ef: DUP5 000007f0: PUSH1 0x20 000007f2: DUP4 000007f3: MUL 000007f4: DUP5 000007f5: ADD 000007f6: GT 000007f7: PUSH5 0x0100000000 000007fd: DUP4 000007fe: GT 000007ff: OR 00000800: ISZERO 00000801: PUSH2 0x0809 00000804: JUMPI 00000805: PUSH1 0x00 00000807: DUP1 00000808: REVERT 00000809: JUMPDEST 0000080a: SWAP2 0000080b: SWAP1 0000080c: DUP1 0000080d: DUP1 0000080e: PUSH1 0x20 00000810: MUL 00000811: PUSH1 0x20 00000813: ADD 00000814: PUSH1 0x40 00000816: MLOAD 00000817: SWAP1 00000818: DUP2 00000819: ADD 0000081a: PUSH1 0x40 0000081c: MSTORE 0000081d: DUP1 0000081e: SWAP4 0000081f: SWAP3 00000820: SWAP2 00000821: SWAP1 00000822: DUP2 00000823: DUP2 00000824: MSTORE 00000825: PUSH1 0x20 00000827: ADD 00000828: DUP4 00000829: DUP4 0000082a: PUSH1 0x20 0000082c: MUL 0000082d: DUP1 0000082e: DUP3 0000082f: DUP5 00000830: CALLDATACOPY 00000831: PUSH1 0x00 00000833: SWAP3 00000834: ADD 00000835: SWAP2 00000836: SWAP1 00000837: SWAP2 00000838: MSTORE 00000839: POP 0000083a: SWAP3 0000083b: SWAP6 0000083c: SWAP5 0000083d: SWAP4 0000083e: PUSH1 0x20 00000840: DUP2 00000841: ADD 00000842: SWAP4 00000843: POP 00000844: CALLDATALOAD 00000845: SWAP2 00000846: POP 00000847: POP 00000848: PUSH5 0x0100000000 0000084e: DUP2 0000084f: GT 00000850: ISZERO 00000851: PUSH2 0x0859 00000854: JUMPI 00000855: PUSH1 0x00 00000857: DUP1 00000858: REVERT 00000859: JUMPDEST 0000085a: DUP3 0000085b: ADD 0000085c: DUP4 0000085d: PUSH1 0x20 0000085f: DUP3 00000860: ADD 00000861: GT 00000862: ISZERO 00000863: PUSH2 0x086b 00000866: JUMPI 00000867: PUSH1 0x00 00000869: DUP1 0000086a: REVERT 0000086b: JUMPDEST 0000086c: DUP1 0000086d: CALLDATALOAD 0000086e: SWAP1 0000086f: PUSH1 0x20 00000871: ADD 00000872: SWAP2 00000873: DUP5 00000874: PUSH1 0x20 00000876: DUP4 00000877: MUL 00000878: DUP5 00000879: ADD 0000087a: GT 0000087b: PUSH5 0x0100000000 00000881: DUP4 00000882: GT 00000883: OR 00000884: ISZERO 00000885: PUSH2 0x088d 00000888: JUMPI 00000889: PUSH1 0x00 0000088b: DUP1 0000088c: REVERT 0000088d: JUMPDEST 0000088e: SWAP2 0000088f: SWAP1 00000890: DUP1 00000891: DUP1 00000892: PUSH1 0x20 00000894: MUL 00000895: PUSH1 0x20 00000897: ADD 00000898: PUSH1 0x40 0000089a: MLOAD 0000089b: SWAP1 0000089c: DUP2 0000089d: ADD 0000089e: PUSH1 0x40 000008a0: MSTORE 000008a1: DUP1 000008a2: SWAP4 000008a3: SWAP3 000008a4: SWAP2 000008a5: SWAP1 000008a6: DUP2 000008a7: DUP2 000008a8: MSTORE 000008a9: PUSH1 0x20 000008ab: ADD 000008ac: DUP4 000008ad: DUP4 000008ae: PUSH1 0x20 000008b0: MUL 000008b1: DUP1 000008b2: DUP3 000008b3: DUP5 000008b4: CALLDATACOPY 000008b5: PUSH1 0x00 000008b7: SWAP3 000008b8: ADD 000008b9: SWAP2 000008ba: SWAP1 000008bb: SWAP2 000008bc: MSTORE 000008bd: POP 000008be: SWAP3 000008bf: SWAP6 000008c0: POP 000008c1: PUSH2 0x0da5 000008c4: SWAP5 000008c5: POP 000008c6: POP 000008c7: POP 000008c8: POP 000008c9: POP 000008ca: JUMP 000008cb: JUMPDEST 000008cc: PUSH2 0x08d5 000008cf: CALLER 000008d0: DUP3 000008d1: PUSH2 0x0ecf 000008d4: JUMP 000008d5: JUMPDEST 000008d6: POP 000008d7: JUMP 000008d8: JUMPDEST 000008d9: CALLER 000008da: PUSH1 0x00 000008dc: DUP2 000008dd: DUP2 000008de: MSTORE 000008df: PUSH1 0x20 000008e1: DUP2 000008e2: SWAP1 000008e3: MSTORE 000008e4: PUSH1 0x40 000008e6: SWAP1 000008e7: KECCAK256 000008e8: SLOAD 000008e9: PUSH2 0x08f2 000008ec: SWAP2 000008ed: SWAP1 000008ee: PUSH2 0x0ecf 000008f1: JUMP 000008f2: JUMPDEST 000008f3: JUMP 000008f4: JUMPDEST 000008f5: PUSH1 0x60 000008f7: DUP1 000008f8: PUSH1 0x00 000008fa: JUMPDEST 000008fb: DUP4 000008fc: MLOAD 000008fd: DUP2 000008fe: LT 000008ff: ISZERO 00000900: PUSH2 0x095a 00000903: JUMPI 00000904: PUSH1 0x00 00000906: DUP1 00000907: DUP6 00000908: DUP4 00000909: DUP2 0000090a: MLOAD 0000090b: DUP2 0000090c: LT 0000090d: PUSH2 0x0912 00000910: JUMPI 00000911: INVALID 00000912: JUMPDEST 00000913: PUSH1 0x20 00000915: MUL 00000916: PUSH1 0x20 00000918: ADD 00000919: ADD 0000091a: MLOAD 0000091b: PUSH1 0x01 0000091d: PUSH1 0x01 0000091f: PUSH1 0xa0 00000921: SHL 00000922: SUB 00000923: AND 00000924: PUSH1 0x01 00000926: PUSH1 0x01 00000928: PUSH1 0xa0 0000092a: SHL 0000092b: SUB 0000092c: AND 0000092d: DUP2 0000092e: MSTORE 0000092f: PUSH1 0x20 00000931: ADD 00000932: SWAP1 00000933: DUP2 00000934: MSTORE 00000935: PUSH1 0x20 00000937: ADD 00000938: PUSH1 0x00 0000093a: KECCAK256 0000093b: SLOAD 0000093c: DUP3 0000093d: DUP3 0000093e: DUP2 0000093f: MLOAD 00000940: DUP2 00000941: LT 00000942: PUSH2 0x0947 00000945: JUMPI 00000946: INVALID 00000947: JUMPDEST 00000948: PUSH1 0x20 0000094a: SWAP1 0000094b: DUP2 0000094c: MUL 0000094d: SWAP2 0000094e: SWAP1 0000094f: SWAP2 00000950: ADD 00000951: ADD 00000952: MSTORE 00000953: PUSH1 0x01 00000955: ADD 00000956: PUSH2 0x08fa 00000959: JUMP 0000095a: JUMPDEST 0000095b: POP 0000095c: SWAP3 0000095d: SWAP2 0000095e: POP 0000095f: POP 00000960: JUMP 00000961: JUMPDEST 00000962: PUSH1 0x02 00000964: SLOAD 00000965: PUSH1 0x01 00000967: PUSH1 0x01 00000969: PUSH1 0xa0 0000096b: SHL 0000096c: SUB 0000096d: AND 0000096e: DUP2 0000096f: JUMP 00000970: JUMPDEST 00000971: PUSH1 0x00 00000973: PUSH1 0x20 00000975: DUP2 00000976: SWAP1 00000977: MSTORE 00000978: SWAP1 00000979: DUP2 0000097a: MSTORE 0000097b: PUSH1 0x40 0000097d: SWAP1 0000097e: KECCAK256 0000097f: SLOAD 00000980: DUP2 00000981: JUMP 00000982: JUMPDEST 00000983: PUSH2 0x098c 00000986: DUP3 00000987: DUP3 00000988: PUSH2 0x0ecf 0000098b: JUMP 0000098c: JUMPDEST 0000098d: POP 0000098e: POP 0000098f: JUMP 00000990: JUMPDEST 00000991: PUSH2 0x098c 00000994: CALLER 00000995: DUP4 00000996: DUP4 00000997: PUSH2 0x1093 0000099a: JUMP 0000099b: JUMPDEST 0000099c: PUSH1 0x02 0000099e: SLOAD 0000099f: PUSH1 0x01 000009a1: PUSH1 0x01 000009a3: PUSH1 0xa0 000009a5: SHL 000009a6: SUB 000009a7: AND 000009a8: CALLER 000009a9: EQ 000009aa: PUSH2 0x09e4 000009ad: JUMPI 000009ae: PUSH1 0x40 000009b0: MLOAD 000009b1: PUSH3 0x461bcd 000009b5: PUSH1 0xe5 000009b7: SHL 000009b8: DUP2 000009b9: MSTORE 000009ba: PUSH1 0x04 000009bc: ADD 000009bd: DUP1 000009be: DUP1 000009bf: PUSH1 0x20 000009c1: ADD 000009c2: DUP3 000009c3: DUP2 000009c4: SUB 000009c5: DUP3 000009c6: MSTORE 000009c7: PUSH1 0x31 000009c9: DUP2 000009ca: MSTORE 000009cb: PUSH1 0x20 000009cd: ADD 000009ce: DUP1 000009cf: PUSH2 0x13a9 000009d2: PUSH1 0x31 000009d4: SWAP2 000009d5: CODECOPY 000009d6: PUSH1 0x40 000009d8: ADD 000009d9: SWAP2 000009da: POP 000009db: POP 000009dc: PUSH1 0x40 000009de: MLOAD 000009df: DUP1 000009e0: SWAP2 000009e1: SUB 000009e2: SWAP1 000009e3: REVERT 000009e4: JUMPDEST 000009e5: PUSH1 0x01 000009e7: PUSH1 0x01 000009e9: PUSH1 0xa0 000009eb: SHL 000009ec: SUB 000009ed: DUP2 000009ee: AND 000009ef: PUSH2 0x0a29 000009f2: JUMPI 000009f3: PUSH1 0x40 000009f5: MLOAD 000009f6: PUSH3 0x461bcd 000009fa: PUSH1 0xe5 000009fc: SHL 000009fd: DUP2 000009fe: MSTORE 000009ff: PUSH1 0x04 00000a01: ADD 00000a02: DUP1 00000a03: DUP1 00000a04: PUSH1 0x20 00000a06: ADD 00000a07: DUP3 00000a08: DUP2 00000a09: SUB 00000a0a: DUP3 00000a0b: MSTORE 00000a0c: PUSH1 0x2a 00000a0e: DUP2 00000a0f: MSTORE 00000a10: PUSH1 0x20 00000a12: ADD 00000a13: DUP1 00000a14: PUSH2 0x1543 00000a17: PUSH1 0x2a 00000a19: SWAP2 00000a1a: CODECOPY 00000a1b: PUSH1 0x40 00000a1d: ADD 00000a1e: SWAP2 00000a1f: POP 00000a20: POP 00000a21: PUSH1 0x40 00000a23: MLOAD 00000a24: DUP1 00000a25: SWAP2 00000a26: SUB 00000a27: SWAP1 00000a28: REVERT 00000a29: JUMPDEST 00000a2a: PUSH1 0x02 00000a2c: DUP1 00000a2d: SLOAD 00000a2e: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000a4f: AND 00000a50: PUSH1 0x01 00000a52: PUSH1 0x01 00000a54: PUSH1 0xa0 00000a56: SHL 00000a57: SUB 00000a58: SWAP3 00000a59: SWAP1 00000a5a: SWAP3 00000a5b: AND 00000a5c: SWAP2 00000a5d: SWAP1 00000a5e: SWAP2 00000a5f: OR 00000a60: SWAP1 00000a61: SSTORE 00000a62: JUMP 00000a63: JUMPDEST 00000a64: PUSH1 0x60 00000a66: DUP3 00000a67: MLOAD 00000a68: DUP3 00000a69: MLOAD 00000a6a: EQ 00000a6b: PUSH2 0x0aa5 00000a6e: JUMPI 00000a6f: PUSH1 0x40 00000a71: MLOAD 00000a72: PUSH3 0x461bcd 00000a76: PUSH1 0xe5 00000a78: SHL 00000a79: DUP2 00000a7a: MSTORE 00000a7b: PUSH1 0x04 00000a7d: ADD 00000a7e: DUP1 00000a7f: DUP1 00000a80: PUSH1 0x20 00000a82: ADD 00000a83: DUP3 00000a84: DUP2 00000a85: SUB 00000a86: DUP3 00000a87: MSTORE 00000a88: PUSH1 0x42 00000a8a: DUP2 00000a8b: MSTORE 00000a8c: PUSH1 0x20 00000a8e: ADD 00000a8f: DUP1 00000a90: PUSH2 0x1501 00000a93: PUSH1 0x42 00000a95: SWAP2 00000a96: CODECOPY 00000a97: PUSH1 0x60 00000a99: ADD 00000a9a: SWAP2 00000a9b: POP 00000a9c: POP 00000a9d: PUSH1 0x40 00000a9f: MLOAD 00000aa0: DUP1 00000aa1: SWAP2 00000aa2: SUB 00000aa3: SWAP1 00000aa4: REVERT 00000aa5: JUMPDEST 00000aa6: PUSH1 0x60 00000aa8: PUSH1 0x00 00000aaa: JUMPDEST 00000aab: DUP4 00000aac: MLOAD 00000aad: DUP2 00000aae: LT 00000aaf: ISZERO 00000ab0: PUSH2 0x0b41 00000ab3: JUMPI 00000ab4: PUSH1 0x01 00000ab6: PUSH1 0x00 00000ab8: DUP7 00000ab9: DUP4 00000aba: DUP2 00000abb: MLOAD 00000abc: DUP2 00000abd: LT 00000abe: PUSH2 0x0ac3 00000ac1: JUMPI 00000ac2: INVALID 00000ac3: JUMPDEST 00000ac4: PUSH1 0x20 00000ac6: MUL 00000ac7: PUSH1 0x20 00000ac9: ADD 00000aca: ADD 00000acb: MLOAD 00000acc: PUSH1 0x01 00000ace: PUSH1 0x01 00000ad0: PUSH1 0xa0 00000ad2: SHL 00000ad3: SUB 00000ad4: AND 00000ad5: PUSH1 0x01 00000ad7: PUSH1 0x01 00000ad9: PUSH1 0xa0 00000adb: SHL 00000adc: SUB 00000add: AND 00000ade: DUP2 00000adf: MSTORE 00000ae0: PUSH1 0x20 00000ae2: ADD 00000ae3: SWAP1 00000ae4: DUP2 00000ae5: MSTORE 00000ae6: PUSH1 0x20 00000ae8: ADD 00000ae9: PUSH1 0x00 00000aeb: KECCAK256 00000aec: PUSH1 0x00 00000aee: DUP6 00000aef: DUP4 00000af0: DUP2 00000af1: MLOAD 00000af2: DUP2 00000af3: LT 00000af4: PUSH2 0x0af9 00000af7: JUMPI 00000af8: INVALID 00000af9: JUMPDEST 00000afa: PUSH1 0x20 00000afc: MUL 00000afd: PUSH1 0x20 00000aff: ADD 00000b00: ADD 00000b01: MLOAD 00000b02: PUSH1 0x01 00000b04: PUSH1 0x01 00000b06: PUSH1 0xa0 00000b08: SHL 00000b09: SUB 00000b0a: AND 00000b0b: PUSH1 0x01 00000b0d: PUSH1 0x01 00000b0f: PUSH1 0xa0 00000b11: SHL 00000b12: SUB 00000b13: AND 00000b14: DUP2 00000b15: MSTORE 00000b16: PUSH1 0x20 00000b18: ADD 00000b19: SWAP1 00000b1a: DUP2 00000b1b: MSTORE 00000b1c: PUSH1 0x20 00000b1e: ADD 00000b1f: PUSH1 0x00 00000b21: KECCAK256 00000b22: SLOAD 00000b23: DUP3 00000b24: DUP3 00000b25: DUP2 00000b26: MLOAD 00000b27: DUP2 00000b28: LT 00000b29: PUSH2 0x0b2e 00000b2c: JUMPI 00000b2d: INVALID 00000b2e: JUMPDEST 00000b2f: PUSH1 0x20 00000b31: SWAP1 00000b32: DUP2 00000b33: MUL 00000b34: SWAP2 00000b35: SWAP1 00000b36: SWAP2 00000b37: ADD 00000b38: ADD 00000b39: MSTORE 00000b3a: PUSH1 0x01 00000b3c: ADD 00000b3d: PUSH2 0x0aaa 00000b40: JUMP 00000b41: JUMPDEST 00000b42: POP 00000b43: SWAP4 00000b44: SWAP3 00000b45: POP 00000b46: POP 00000b47: POP 00000b48: JUMP 00000b49: JUMPDEST 00000b4a: PUSH1 0x01 00000b4c: PUSH1 0x01 00000b4e: PUSH1 0xa0 00000b50: SHL 00000b51: SUB 00000b52: DUP1 00000b53: DUP4 00000b54: AND 00000b55: PUSH1 0x00 00000b57: SWAP1 00000b58: DUP2 00000b59: MSTORE 00000b5a: PUSH1 0x01 00000b5c: PUSH1 0x20 00000b5e: SWAP1 00000b5f: DUP2 00000b60: MSTORE 00000b61: PUSH1 0x40 00000b63: DUP1 00000b64: DUP4 00000b65: KECCAK256 00000b66: SWAP4 00000b67: DUP6 00000b68: AND 00000b69: DUP4 00000b6a: MSTORE 00000b6b: SWAP3 00000b6c: SWAP1 00000b6d: MSTORE 00000b6e: KECCAK256 00000b6f: SLOAD 00000b70: PUSH2 0x098c 00000b73: SWAP1 00000b74: DUP3 00000b75: SWAP1 00000b76: DUP5 00000b77: SWAP1 00000b78: PUSH2 0x1093 00000b7b: JUMP 00000b7c: JUMPDEST 00000b7d: PUSH1 0x02 00000b7f: SLOAD 00000b80: PUSH1 0x01 00000b82: PUSH1 0x01 00000b84: PUSH1 0xa0 00000b86: SHL 00000b87: SUB 00000b88: AND 00000b89: CALLER 00000b8a: EQ 00000b8b: PUSH2 0x0bc5 00000b8e: JUMPI 00000b8f: PUSH1 0x40 00000b91: MLOAD 00000b92: PUSH3 0x461bcd 00000b96: PUSH1 0xe5 00000b98: SHL 00000b99: DUP2 00000b9a: MSTORE 00000b9b: PUSH1 0x04 00000b9d: ADD 00000b9e: DUP1 00000b9f: DUP1 00000ba0: PUSH1 0x20 00000ba2: ADD 00000ba3: DUP3 00000ba4: DUP2 00000ba5: SUB 00000ba6: DUP3 00000ba7: MSTORE 00000ba8: PUSH1 0x31 00000baa: DUP2 00000bab: MSTORE 00000bac: PUSH1 0x20 00000bae: ADD 00000baf: DUP1 00000bb0: PUSH2 0x13a9 00000bb3: PUSH1 0x31 00000bb5: SWAP2 00000bb6: CODECOPY 00000bb7: PUSH1 0x40 00000bb9: ADD 00000bba: SWAP2 00000bbb: POP 00000bbc: POP 00000bbd: PUSH1 0x40 00000bbf: MLOAD 00000bc0: DUP1 00000bc1: SWAP2 00000bc2: SUB 00000bc3: SWAP1 00000bc4: REVERT 00000bc5: JUMPDEST 00000bc6: PUSH1 0x00 00000bc8: DUP3 00000bc9: MLOAD 00000bca: GT 00000bcb: PUSH2 0x0c05 00000bce: JUMPI 00000bcf: PUSH1 0x40 00000bd1: MLOAD 00000bd2: PUSH3 0x461bcd 00000bd6: PUSH1 0xe5 00000bd8: SHL 00000bd9: DUP2 00000bda: MSTORE 00000bdb: PUSH1 0x04 00000bdd: ADD 00000bde: DUP1 00000bdf: DUP1 00000be0: PUSH1 0x20 00000be2: ADD 00000be3: DUP3 00000be4: DUP2 00000be5: SUB 00000be6: DUP3 00000be7: MSTORE 00000be8: PUSH1 0x2a 00000bea: DUP2 00000beb: MSTORE 00000bec: PUSH1 0x20 00000bee: ADD 00000bef: DUP1 00000bf0: PUSH2 0x14d7 00000bf3: PUSH1 0x2a 00000bf5: SWAP2 00000bf6: CODECOPY 00000bf7: PUSH1 0x40 00000bf9: ADD 00000bfa: SWAP2 00000bfb: POP 00000bfc: POP 00000bfd: PUSH1 0x40 00000bff: MLOAD 00000c00: DUP1 00000c01: SWAP2 00000c02: SUB 00000c03: SWAP1 00000c04: REVERT 00000c05: JUMPDEST 00000c06: DUP3 00000c07: MLOAD 00000c08: DUP3 00000c09: MLOAD 00000c0a: EQ 00000c0b: PUSH2 0x0c45 00000c0e: JUMPI 00000c0f: PUSH1 0x40 00000c11: MLOAD 00000c12: PUSH3 0x461bcd 00000c16: PUSH1 0xe5 00000c18: SHL 00000c19: DUP2 00000c1a: MSTORE 00000c1b: PUSH1 0x04 00000c1d: ADD 00000c1e: DUP1 00000c1f: DUP1 00000c20: PUSH1 0x20 00000c22: ADD 00000c23: DUP3 00000c24: DUP2 00000c25: SUB 00000c26: DUP3 00000c27: MSTORE 00000c28: PUSH1 0x42 00000c2a: DUP2 00000c2b: MSTORE 00000c2c: PUSH1 0x20 00000c2e: ADD 00000c2f: DUP1 00000c30: PUSH2 0x1501 00000c33: PUSH1 0x42 00000c35: SWAP2 00000c36: CODECOPY 00000c37: PUSH1 0x60 00000c39: ADD 00000c3a: SWAP2 00000c3b: POP 00000c3c: POP 00000c3d: PUSH1 0x40 00000c3f: MLOAD 00000c40: DUP1 00000c41: SWAP2 00000c42: SUB 00000c43: SWAP1 00000c44: REVERT 00000c45: JUMPDEST 00000c46: DUP1 00000c47: MLOAD 00000c48: DUP4 00000c49: MLOAD 00000c4a: EQ 00000c4b: PUSH2 0x0c85 00000c4e: JUMPI 00000c4f: PUSH1 0x40 00000c51: MLOAD 00000c52: PUSH3 0x461bcd 00000c56: PUSH1 0xe5 00000c58: SHL 00000c59: DUP2 00000c5a: MSTORE 00000c5b: PUSH1 0x04 00000c5d: ADD 00000c5e: DUP1 00000c5f: DUP1 00000c60: PUSH1 0x20 00000c62: ADD 00000c63: DUP3 00000c64: DUP2 00000c65: SUB 00000c66: DUP3 00000c67: MSTORE 00000c68: PUSH1 0x3f 00000c6a: DUP2 00000c6b: MSTORE 00000c6c: PUSH1 0x20 00000c6e: ADD 00000c6f: DUP1 00000c70: PUSH2 0x1300 00000c73: PUSH1 0x3f 00000c75: SWAP2 00000c76: CODECOPY 00000c77: PUSH1 0x40 00000c79: ADD 00000c7a: SWAP2 00000c7b: POP 00000c7c: POP 00000c7d: PUSH1 0x40 00000c7f: MLOAD 00000c80: DUP1 00000c81: SWAP2 00000c82: SUB 00000c83: SWAP1 00000c84: REVERT 00000c85: JUMPDEST 00000c86: PUSH1 0x00 00000c88: JUMPDEST 00000c89: DUP3 00000c8a: MLOAD 00000c8b: DUP2 00000c8c: LT 00000c8d: ISZERO 00000c8e: PUSH2 0x0d1d 00000c91: JUMPI 00000c92: DUP2 00000c93: DUP2 00000c94: DUP2 00000c95: MLOAD 00000c96: DUP2 00000c97: LT 00000c98: PUSH2 0x0c9d 00000c9b: JUMPI 00000c9c: INVALID 00000c9d: JUMPDEST 00000c9e: PUSH1 0x20 00000ca0: MUL 00000ca1: PUSH1 0x20 00000ca3: ADD 00000ca4: ADD 00000ca5: MLOAD 00000ca6: PUSH1 0x01 00000ca8: PUSH1 0x00 00000caa: DUP7 00000cab: DUP5 00000cac: DUP2 00000cad: MLOAD 00000cae: DUP2 00000caf: LT 00000cb0: PUSH2 0x0cb5 00000cb3: JUMPI 00000cb4: INVALID 00000cb5: JUMPDEST 00000cb6: PUSH1 0x20 00000cb8: MUL 00000cb9: PUSH1 0x20 00000cbb: ADD 00000cbc: ADD 00000cbd: MLOAD 00000cbe: PUSH1 0x01 00000cc0: PUSH1 0x01 00000cc2: PUSH1 0xa0 00000cc4: SHL 00000cc5: SUB 00000cc6: AND 00000cc7: PUSH1 0x01 00000cc9: PUSH1 0x01 00000ccb: PUSH1 0xa0 00000ccd: SHL 00000cce: SUB 00000ccf: AND 00000cd0: DUP2 00000cd1: MSTORE 00000cd2: PUSH1 0x20 00000cd4: ADD 00000cd5: SWAP1 00000cd6: DUP2 00000cd7: MSTORE 00000cd8: PUSH1 0x20 00000cda: ADD 00000cdb: PUSH1 0x00 00000cdd: KECCAK256 00000cde: PUSH1 0x00 00000ce0: DUP6 00000ce1: DUP5 00000ce2: DUP2 00000ce3: MLOAD 00000ce4: DUP2 00000ce5: LT 00000ce6: PUSH2 0x0ceb 00000ce9: JUMPI 00000cea: INVALID 00000ceb: JUMPDEST 00000cec: PUSH1 0x20 00000cee: SWAP1 00000cef: DUP2 00000cf0: MUL 00000cf1: SWAP2 00000cf2: SWAP1 00000cf3: SWAP2 00000cf4: ADD 00000cf5: DUP2 00000cf6: ADD 00000cf7: MLOAD 00000cf8: PUSH1 0x01 00000cfa: PUSH1 0x01 00000cfc: PUSH1 0xa0 00000cfe: SHL 00000cff: SUB 00000d00: AND 00000d01: DUP3 00000d02: MSTORE 00000d03: DUP2 00000d04: ADD 00000d05: SWAP2 00000d06: SWAP1 00000d07: SWAP2 00000d08: MSTORE 00000d09: PUSH1 0x40 00000d0b: ADD 00000d0c: PUSH1 0x00 00000d0e: KECCAK256 00000d0f: DUP1 00000d10: SLOAD 00000d11: SWAP1 00000d12: SWAP2 00000d13: ADD 00000d14: SWAP1 00000d15: SSTORE 00000d16: PUSH1 0x01 00000d18: ADD 00000d19: PUSH2 0x0c88 00000d1c: JUMP 00000d1d: JUMPDEST 00000d1e: POP 00000d1f: POP 00000d20: POP 00000d21: POP 00000d22: JUMP 00000d23: JUMPDEST 00000d24: PUSH2 0x0d2e 00000d27: DUP3 00000d28: DUP5 00000d29: DUP4 00000d2a: PUSH2 0x1093 00000d2d: JUMP 00000d2e: JUMPDEST 00000d2f: POP 00000d30: POP 00000d31: POP 00000d32: JUMP 00000d33: JUMPDEST 00000d34: PUSH1 0x01 00000d36: PUSH1 0x01 00000d38: PUSH1 0xa0 00000d3a: SHL 00000d3b: SUB 00000d3c: DUP2 00000d3d: AND 00000d3e: PUSH1 0x00 00000d40: SWAP1 00000d41: DUP2 00000d42: MSTORE 00000d43: PUSH1 0x20 00000d45: DUP2 00000d46: SWAP1 00000d47: MSTORE 00000d48: PUSH1 0x40 00000d4a: SWAP1 00000d4b: KECCAK256 00000d4c: SLOAD 00000d4d: PUSH2 0x08d5 00000d50: SWAP1 00000d51: DUP3 00000d52: SWAP1 00000d53: PUSH2 0x0ecf 00000d56: JUMP 00000d57: JUMPDEST 00000d58: PUSH1 0x01 00000d5a: PUSH1 0x20 00000d5c: SWAP1 00000d5d: DUP2 00000d5e: MSTORE 00000d5f: PUSH1 0x00 00000d61: SWAP3 00000d62: DUP4 00000d63: MSTORE 00000d64: PUSH1 0x40 00000d66: DUP1 00000d67: DUP5 00000d68: KECCAK256 00000d69: SWAP1 00000d6a: SWAP2 00000d6b: MSTORE 00000d6c: SWAP1 00000d6d: DUP3 00000d6e: MSTORE 00000d6f: SWAP1 00000d70: KECCAK256 00000d71: SLOAD 00000d72: DUP2 00000d73: JUMP 00000d74: JUMPDEST 00000d75: PUSH1 0x01 00000d77: PUSH1 0x01 00000d79: PUSH1 0xa0 00000d7b: SHL 00000d7c: SUB 00000d7d: DUP2 00000d7e: AND 00000d7f: PUSH1 0x00 00000d81: SWAP1 00000d82: DUP2 00000d83: MSTORE 00000d84: PUSH1 0x01 00000d86: PUSH1 0x20 00000d88: SWAP1 00000d89: DUP2 00000d8a: MSTORE 00000d8b: PUSH1 0x40 00000d8d: DUP1 00000d8e: DUP4 00000d8f: KECCAK256 00000d90: CALLER 00000d91: DUP1 00000d92: DUP6 00000d93: MSTORE 00000d94: SWAP3 00000d95: MSTORE 00000d96: SWAP1 00000d97: SWAP2 00000d98: KECCAK256 00000d99: SLOAD 00000d9a: PUSH2 0x08d5 00000d9d: SWAP2 00000d9e: SWAP1 00000d9f: DUP4 00000da0: SWAP1 00000da1: PUSH2 0x1093 00000da4: JUMP 00000da5: JUMPDEST 00000da6: PUSH1 0x02 00000da8: SLOAD 00000da9: PUSH1 0x01 00000dab: PUSH1 0x01 00000dad: PUSH1 0xa0 00000daf: SHL 00000db0: SUB 00000db1: AND 00000db2: CALLER 00000db3: EQ 00000db4: PUSH2 0x0dee 00000db7: JUMPI 00000db8: PUSH1 0x40 00000dba: MLOAD 00000dbb: PUSH3 0x461bcd 00000dbf: PUSH1 0xe5 00000dc1: SHL 00000dc2: DUP2 00000dc3: MSTORE 00000dc4: PUSH1 0x04 00000dc6: ADD 00000dc7: DUP1 00000dc8: DUP1 00000dc9: PUSH1 0x20 00000dcb: ADD 00000dcc: DUP3 00000dcd: DUP2 00000dce: SUB 00000dcf: DUP3 00000dd0: MSTORE 00000dd1: PUSH1 0x31 00000dd3: DUP2 00000dd4: MSTORE 00000dd5: PUSH1 0x20 00000dd7: ADD 00000dd8: DUP1 00000dd9: PUSH2 0x13a9 00000ddc: PUSH1 0x31 00000dde: SWAP2 00000ddf: CODECOPY 00000de0: PUSH1 0x40 00000de2: ADD 00000de3: SWAP2 00000de4: POP 00000de5: POP 00000de6: PUSH1 0x40 00000de8: MLOAD 00000de9: DUP1 00000dea: SWAP2 00000deb: SUB 00000dec: SWAP1 00000ded: REVERT 00000dee: JUMPDEST 00000def: PUSH1 0x00 00000df1: DUP3 00000df2: MLOAD 00000df3: GT 00000df4: PUSH2 0x0e2e 00000df7: JUMPI 00000df8: PUSH1 0x40 00000dfa: MLOAD 00000dfb: PUSH3 0x461bcd 00000dff: PUSH1 0xe5 00000e01: SHL 00000e02: DUP2 00000e03: MSTORE 00000e04: PUSH1 0x04 00000e06: ADD 00000e07: DUP1 00000e08: DUP1 00000e09: PUSH1 0x20 00000e0b: ADD 00000e0c: DUP3 00000e0d: DUP2 00000e0e: SUB 00000e0f: DUP3 00000e10: MSTORE 00000e11: PUSH1 0x2a 00000e13: DUP2 00000e14: MSTORE 00000e15: PUSH1 0x20 00000e17: ADD 00000e18: DUP1 00000e19: PUSH2 0x14d7 00000e1c: PUSH1 0x2a 00000e1e: SWAP2 00000e1f: CODECOPY 00000e20: PUSH1 0x40 00000e22: ADD 00000e23: SWAP2 00000e24: POP 00000e25: POP 00000e26: PUSH1 0x40 00000e28: MLOAD 00000e29: DUP1 00000e2a: SWAP2 00000e2b: SUB 00000e2c: SWAP1 00000e2d: REVERT 00000e2e: JUMPDEST 00000e2f: DUP1 00000e30: MLOAD 00000e31: DUP3 00000e32: MLOAD 00000e33: EQ 00000e34: PUSH2 0x0e6e 00000e37: JUMPI 00000e38: PUSH1 0x40 00000e3a: MLOAD 00000e3b: PUSH3 0x461bcd 00000e3f: PUSH1 0xe5 00000e41: SHL 00000e42: DUP2 00000e43: MSTORE 00000e44: PUSH1 0x04 00000e46: ADD 00000e47: DUP1 00000e48: DUP1 00000e49: PUSH1 0x20 00000e4b: ADD 00000e4c: DUP3 00000e4d: DUP2 00000e4e: SUB 00000e4f: DUP3 00000e50: MSTORE 00000e51: PUSH1 0x3b 00000e53: DUP2 00000e54: MSTORE 00000e55: PUSH1 0x20 00000e57: ADD 00000e58: DUP1 00000e59: PUSH2 0x136e 00000e5c: PUSH1 0x3b 00000e5e: SWAP2 00000e5f: CODECOPY 00000e60: PUSH1 0x40 00000e62: ADD 00000e63: SWAP2 00000e64: POP 00000e65: POP 00000e66: PUSH1 0x40 00000e68: MLOAD 00000e69: DUP1 00000e6a: SWAP2 00000e6b: SUB 00000e6c: SWAP1 00000e6d: REVERT 00000e6e: JUMPDEST 00000e6f: PUSH1 0x00 00000e71: JUMPDEST 00000e72: DUP3 00000e73: MLOAD 00000e74: DUP2 00000e75: LT 00000e76: ISZERO 00000e77: PUSH2 0x0d2e 00000e7a: JUMPI 00000e7b: DUP2 00000e7c: DUP2 00000e7d: DUP2 00000e7e: MLOAD 00000e7f: DUP2 00000e80: LT 00000e81: PUSH2 0x0e86 00000e84: JUMPI 00000e85: INVALID 00000e86: JUMPDEST 00000e87: PUSH1 0x20 00000e89: MUL 00000e8a: PUSH1 0x20 00000e8c: ADD 00000e8d: ADD 00000e8e: MLOAD 00000e8f: PUSH1 0x00 00000e91: DUP1 00000e92: DUP6 00000e93: DUP5 00000e94: DUP2 00000e95: MLOAD 00000e96: DUP2 00000e97: LT 00000e98: PUSH2 0x0e9d 00000e9b: JUMPI 00000e9c: INVALID 00000e9d: JUMPDEST 00000e9e: PUSH1 0x20 00000ea0: SWAP1 00000ea1: DUP2 00000ea2: MUL 00000ea3: SWAP2 00000ea4: SWAP1 00000ea5: SWAP2 00000ea6: ADD 00000ea7: DUP2 00000ea8: ADD 00000ea9: MLOAD 00000eaa: PUSH1 0x01 00000eac: PUSH1 0x01 00000eae: PUSH1 0xa0 00000eb0: SHL 00000eb1: SUB 00000eb2: AND 00000eb3: DUP3 00000eb4: MSTORE 00000eb5: DUP2 00000eb6: ADD 00000eb7: SWAP2 00000eb8: SWAP1 00000eb9: SWAP2 00000eba: MSTORE 00000ebb: PUSH1 0x40 00000ebd: ADD 00000ebe: PUSH1 0x00 00000ec0: KECCAK256 00000ec1: DUP1 00000ec2: SLOAD 00000ec3: SWAP1 00000ec4: SWAP2 00000ec5: ADD 00000ec6: SWAP1 00000ec7: SSTORE 00000ec8: PUSH1 0x01 00000eca: ADD 00000ecb: PUSH2 0x0e71 00000ece: JUMP 00000ecf: JUMPDEST 00000ed0: PUSH1 0x01 00000ed2: PUSH1 0x01 00000ed4: PUSH1 0xa0 00000ed6: SHL 00000ed7: SUB 00000ed8: DUP3 00000ed9: AND 00000eda: PUSH2 0x0f14 00000edd: JUMPI 00000ede: PUSH1 0x40 00000ee0: MLOAD 00000ee1: PUSH3 0x461bcd 00000ee5: PUSH1 0xe5 00000ee7: SHL 00000ee8: DUP2 00000ee9: MSTORE 00000eea: PUSH1 0x04 00000eec: ADD 00000eed: DUP1 00000eee: DUP1 00000eef: PUSH1 0x20 00000ef1: ADD 00000ef2: DUP3 00000ef3: DUP2 00000ef4: SUB 00000ef5: DUP3 00000ef6: MSTORE 00000ef7: PUSH1 0x28 00000ef9: DUP2 00000efa: MSTORE 00000efb: PUSH1 0x20 00000efd: ADD 00000efe: DUP1 00000eff: PUSH2 0x14af 00000f02: PUSH1 0x28 00000f04: SWAP2 00000f05: CODECOPY 00000f06: PUSH1 0x40 00000f08: ADD 00000f09: SWAP2 00000f0a: POP 00000f0b: POP 00000f0c: PUSH1 0x40 00000f0e: MLOAD 00000f0f: DUP1 00000f10: SWAP2 00000f11: SUB 00000f12: SWAP1 00000f13: REVERT 00000f14: JUMPDEST 00000f15: PUSH1 0x00 00000f17: DUP2 00000f18: GT 00000f19: PUSH2 0x0f53 00000f1c: JUMPI 00000f1d: PUSH1 0x40 00000f1f: MLOAD 00000f20: PUSH3 0x461bcd 00000f24: PUSH1 0xe5 00000f26: SHL 00000f27: DUP2 00000f28: MSTORE 00000f29: PUSH1 0x04 00000f2b: ADD 00000f2c: DUP1 00000f2d: DUP1 00000f2e: PUSH1 0x20 00000f30: ADD 00000f31: DUP3 00000f32: DUP2 00000f33: SUB 00000f34: DUP3 00000f35: MSTORE 00000f36: PUSH1 0x2f 00000f38: DUP2 00000f39: MSTORE 00000f3a: PUSH1 0x20 00000f3c: ADD 00000f3d: DUP1 00000f3e: PUSH2 0x133f 00000f41: PUSH1 0x2f 00000f43: SWAP2 00000f44: CODECOPY 00000f45: PUSH1 0x40 00000f47: ADD 00000f48: SWAP2 00000f49: POP 00000f4a: POP 00000f4b: PUSH1 0x40 00000f4d: MLOAD 00000f4e: DUP1 00000f4f: SWAP2 00000f50: SUB 00000f51: SWAP1 00000f52: REVERT 00000f53: JUMPDEST 00000f54: PUSH1 0x01 00000f56: PUSH1 0x01 00000f58: PUSH1 0xa0 00000f5a: SHL 00000f5b: SUB 00000f5c: DUP3 00000f5d: AND 00000f5e: PUSH1 0x00 00000f60: SWAP1 00000f61: DUP2 00000f62: MSTORE 00000f63: PUSH1 0x20 00000f65: DUP2 00000f66: SWAP1 00000f67: MSTORE 00000f68: PUSH1 0x40 00000f6a: SWAP1 00000f6b: KECCAK256 00000f6c: SLOAD 00000f6d: DUP1 00000f6e: DUP3 00000f6f: GT 00000f70: ISZERO 00000f71: PUSH2 0x0fab 00000f74: JUMPI 00000f75: PUSH1 0x40 00000f77: MLOAD 00000f78: PUSH3 0x461bcd 00000f7c: PUSH1 0xe5 00000f7e: SHL 00000f7f: DUP2 00000f80: MSTORE 00000f81: PUSH1 0x04 00000f83: ADD 00000f84: DUP1 00000f85: DUP1 00000f86: PUSH1 0x20 00000f88: ADD 00000f89: DUP3 00000f8a: DUP2 00000f8b: SUB 00000f8c: DUP3 00000f8d: MSTORE 00000f8e: PUSH1 0x32 00000f90: DUP2 00000f91: MSTORE 00000f92: PUSH1 0x20 00000f94: ADD 00000f95: DUP1 00000f96: PUSH2 0x13da 00000f99: PUSH1 0x32 00000f9b: SWAP2 00000f9c: CODECOPY 00000f9d: PUSH1 0x40 00000f9f: ADD 00000fa0: SWAP2 00000fa1: POP 00000fa2: POP 00000fa3: PUSH1 0x40 00000fa5: MLOAD 00000fa6: DUP1 00000fa7: SWAP2 00000fa8: SUB 00000fa9: SWAP1 00000faa: REVERT 00000fab: JUMPDEST 00000fac: PUSH1 0x01 00000fae: PUSH1 0x01 00000fb0: PUSH1 0xa0 00000fb2: SHL 00000fb3: SUB 00000fb4: DUP4 00000fb5: AND 00000fb6: PUSH1 0x00 00000fb8: DUP2 00000fb9: DUP2 00000fba: MSTORE 00000fbb: PUSH1 0x20 00000fbd: DUP2 00000fbe: SWAP1 00000fbf: MSTORE 00000fc0: PUSH1 0x40 00000fc2: DUP1 00000fc3: DUP3 00000fc4: KECCAK256 00000fc5: DUP1 00000fc6: SLOAD 00000fc7: DUP7 00000fc8: SWAP1 00000fc9: SUB 00000fca: SWAP1 00000fcb: SSTORE 00000fcc: MLOAD 00000fcd: SWAP1 00000fce: SWAP2 00000fcf: SWAP1 00000fd0: DUP5 00000fd1: SWAP1 00000fd2: DUP4 00000fd3: DUP2 00000fd4: DUP2 00000fd5: DUP2 00000fd6: DUP6 00000fd7: DUP8 00000fd8: GAS 00000fd9: CALL 00000fda: SWAP3 00000fdb: POP 00000fdc: POP 00000fdd: POP 00000fde: RETURNDATASIZE 00000fdf: DUP1 00000fe0: PUSH1 0x00 00000fe2: DUP2 00000fe3: EQ 00000fe4: PUSH2 0x1009 00000fe7: JUMPI 00000fe8: PUSH1 0x40 00000fea: MLOAD 00000feb: SWAP2 00000fec: POP 00000fed: PUSH1 0x1f 00000fef: NOT 00000ff0: PUSH1 0x3f 00000ff2: RETURNDATASIZE 00000ff3: ADD 00000ff4: AND 00000ff5: DUP3 00000ff6: ADD 00000ff7: PUSH1 0x40 00000ff9: MSTORE 00000ffa: RETURNDATASIZE 00000ffb: DUP3 00000ffc: MSTORE 00000ffd: RETURNDATASIZE 00000ffe: PUSH1 0x00 00001000: PUSH1 0x20 00001002: DUP5 00001003: ADD 00001004: RETURNDATACOPY 00001005: PUSH2 0x100e 00001008: JUMP 00001009: JUMPDEST 0000100a: PUSH1 0x60 0000100c: SWAP2 0000100d: POP 0000100e: JUMPDEST 0000100f: POP 00001010: POP 00001011: SWAP1 00001012: POP 00001013: DUP1 00001014: PUSH2 0x104e 00001017: JUMPI 00001018: PUSH1 0x40 0000101a: MLOAD 0000101b: PUSH3 0x461bcd 0000101f: PUSH1 0xe5 00001021: SHL 00001022: DUP2 00001023: MSTORE 00001024: PUSH1 0x04 00001026: ADD 00001027: DUP1 00001028: DUP1 00001029: PUSH1 0x20 0000102b: ADD 0000102c: DUP3 0000102d: DUP2 0000102e: SUB 0000102f: DUP3 00001030: MSTORE 00001031: PUSH1 0x21 00001033: DUP2 00001034: MSTORE 00001035: PUSH1 0x20 00001037: ADD 00001038: DUP1 00001039: PUSH2 0x140c 0000103c: PUSH1 0x21 0000103e: SWAP2 0000103f: CODECOPY 00001040: PUSH1 0x40 00001042: ADD 00001043: SWAP2 00001044: POP 00001045: POP 00001046: PUSH1 0x40 00001048: MLOAD 00001049: DUP1 0000104a: SWAP2 0000104b: SUB 0000104c: SWAP1 0000104d: REVERT 0000104e: JUMPDEST 0000104f: PUSH1 0x40 00001051: DUP1 00001052: MLOAD 00001053: DUP5 00001054: DUP2 00001055: MSTORE 00001056: SWAP1 00001057: MLOAD 00001058: PUSH1 0x01 0000105a: PUSH1 0x01 0000105c: PUSH1 0xa0 0000105e: SHL 0000105f: SUB 00001060: DUP7 00001061: AND 00001062: SWAP2 00001063: PUSH32 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65 00001084: SWAP2 00001085: SWAP1 00001086: DUP2 00001087: SWAP1 00001088: SUB 00001089: PUSH1 0x20 0000108b: ADD 0000108c: SWAP1 0000108d: LOG2 0000108e: POP 0000108f: POP 00001090: POP 00001091: POP 00001092: JUMP 00001093: JUMPDEST 00001094: PUSH1 0x01 00001096: PUSH1 0x01 00001098: PUSH1 0xa0 0000109a: SHL 0000109b: SUB 0000109c: DUP4 0000109d: AND 0000109e: PUSH2 0x10d8 000010a1: JUMPI 000010a2: PUSH1 0x40 000010a4: MLOAD 000010a5: PUSH3 0x461bcd 000010a9: PUSH1 0xe5 000010ab: SHL 000010ac: DUP2 000010ad: MSTORE 000010ae: PUSH1 0x04 000010b0: ADD 000010b1: DUP1 000010b2: DUP1 000010b3: PUSH1 0x20 000010b5: ADD 000010b6: DUP3 000010b7: DUP2 000010b8: SUB 000010b9: DUP3 000010ba: MSTORE 000010bb: PUSH1 0x28 000010bd: DUP2 000010be: MSTORE 000010bf: PUSH1 0x20 000010c1: ADD 000010c2: DUP1 000010c3: PUSH2 0x14af 000010c6: PUSH1 0x28 000010c8: SWAP2 000010c9: CODECOPY 000010ca: PUSH1 0x40 000010cc: ADD 000010cd: SWAP2 000010ce: POP 000010cf: POP 000010d0: PUSH1 0x40 000010d2: MLOAD 000010d3: DUP1 000010d4: SWAP2 000010d5: SUB 000010d6: SWAP1 000010d7: REVERT 000010d8: JUMPDEST 000010d9: PUSH1 0x01 000010db: PUSH1 0x01 000010dd: PUSH1 0xa0 000010df: SHL 000010e0: SUB 000010e1: DUP3 000010e2: AND 000010e3: PUSH2 0x111d 000010e6: JUMPI 000010e7: PUSH1 0x40 000010e9: MLOAD 000010ea: PUSH3 0x461bcd 000010ee: PUSH1 0xe5 000010f0: SHL 000010f1: DUP2 000010f2: MSTORE 000010f3: PUSH1 0x04 000010f5: ADD 000010f6: DUP1 000010f7: DUP1 000010f8: PUSH1 0x20 000010fa: ADD 000010fb: DUP3 000010fc: DUP2 000010fd: SUB 000010fe: DUP3 000010ff: MSTORE 00001100: PUSH1 0x29 00001102: DUP2 00001103: MSTORE 00001104: PUSH1 0x20 00001106: ADD 00001107: DUP1 00001108: PUSH2 0x142d 0000110b: PUSH1 0x29 0000110d: SWAP2 0000110e: CODECOPY 0000110f: PUSH1 0x40 00001111: ADD 00001112: SWAP2 00001113: POP 00001114: POP 00001115: PUSH1 0x40 00001117: MLOAD 00001118: DUP1 00001119: SWAP2 0000111a: SUB 0000111b: SWAP1 0000111c: REVERT 0000111d: JUMPDEST 0000111e: PUSH1 0x00 00001120: DUP2 00001121: GT 00001122: PUSH2 0x115c 00001125: JUMPI 00001126: PUSH1 0x40 00001128: MLOAD 00001129: PUSH3 0x461bcd 0000112d: PUSH1 0xe5 0000112f: SHL 00001130: DUP2 00001131: MSTORE 00001132: PUSH1 0x04 00001134: ADD 00001135: DUP1 00001136: DUP1 00001137: PUSH1 0x20 00001139: ADD 0000113a: DUP3 0000113b: DUP2 0000113c: SUB 0000113d: DUP3 0000113e: MSTORE 0000113f: PUSH1 0x2f 00001141: DUP2 00001142: MSTORE 00001143: PUSH1 0x20 00001145: ADD 00001146: DUP1 00001147: PUSH2 0x133f 0000114a: PUSH1 0x2f 0000114c: SWAP2 0000114d: CODECOPY 0000114e: PUSH1 0x40 00001150: ADD 00001151: SWAP2 00001152: POP 00001153: POP 00001154: PUSH1 0x40 00001156: MLOAD 00001157: DUP1 00001158: SWAP2 00001159: SUB 0000115a: SWAP1 0000115b: REVERT 0000115c: JUMPDEST 0000115d: PUSH1 0x01 0000115f: PUSH1 0x01 00001161: PUSH1 0xa0 00001163: SHL 00001164: SUB 00001165: DUP1 00001166: DUP4 00001167: AND 00001168: PUSH1 0x00 0000116a: SWAP1 0000116b: DUP2 0000116c: MSTORE 0000116d: PUSH1 0x01 0000116f: PUSH1 0x20 00001171: SWAP1 00001172: DUP2 00001173: MSTORE 00001174: PUSH1 0x40 00001176: DUP1 00001177: DUP4 00001178: KECCAK256 00001179: SWAP4 0000117a: DUP8 0000117b: AND 0000117c: DUP4 0000117d: MSTORE 0000117e: SWAP3 0000117f: SWAP1 00001180: MSTORE 00001181: KECCAK256 00001182: SLOAD 00001183: DUP1 00001184: DUP3 00001185: GT 00001186: ISZERO 00001187: PUSH2 0x11c1 0000118a: JUMPI 0000118b: PUSH1 0x40 0000118d: MLOAD 0000118e: PUSH3 0x461bcd 00001192: PUSH1 0xe5 00001194: SHL 00001195: DUP2 00001196: MSTORE 00001197: PUSH1 0x04 00001199: ADD 0000119a: DUP1 0000119b: DUP1 0000119c: PUSH1 0x20 0000119e: ADD 0000119f: DUP3 000011a0: DUP2 000011a1: SUB 000011a2: DUP3 000011a3: MSTORE 000011a4: PUSH1 0x32 000011a6: DUP2 000011a7: MSTORE 000011a8: PUSH1 0x20 000011aa: ADD 000011ab: DUP1 000011ac: PUSH2 0x13da 000011af: PUSH1 0x32 000011b1: SWAP2 000011b2: CODECOPY 000011b3: PUSH1 0x40 000011b5: ADD 000011b6: SWAP2 000011b7: POP 000011b8: POP 000011b9: PUSH1 0x40 000011bb: MLOAD 000011bc: DUP1 000011bd: SWAP2 000011be: SUB 000011bf: SWAP1 000011c0: REVERT 000011c1: JUMPDEST 000011c2: PUSH1 0x01 000011c4: PUSH1 0x01 000011c6: PUSH1 0xa0 000011c8: SHL 000011c9: SUB 000011ca: DUP1 000011cb: DUP6 000011cc: AND 000011cd: PUSH1 0x00 000011cf: DUP2 000011d0: DUP2 000011d1: MSTORE 000011d2: PUSH1 0x20 000011d4: DUP2 000011d5: DUP2 000011d6: MSTORE 000011d7: PUSH1 0x40 000011d9: DUP1 000011da: DUP4 000011db: KECCAK256 000011dc: DUP1 000011dd: SLOAD 000011de: DUP9 000011df: SWAP1 000011e0: SUB 000011e1: SWAP1 000011e2: SSTORE 000011e3: DUP1 000011e4: MLOAD 000011e5: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001206: DUP2 00001207: MSTORE 00001208: PUSH1 0x04 0000120a: DUP2 0000120b: ADD 0000120c: SWAP5 0000120d: SWAP1 0000120e: SWAP5 0000120f: MSTORE 00001210: PUSH1 0x24 00001212: DUP5 00001213: ADD 00001214: DUP8 00001215: SWAP1 00001216: MSTORE 00001217: MLOAD 00001218: DUP8 00001219: SWAP5 0000121a: SWAP3 0000121b: SWAP4 0000121c: SWAP3 0000121d: DUP6 0000121e: AND 0000121f: SWAP3 00001220: PUSH4 0xa9059cbb 00001225: SWAP3 00001226: PUSH1 0x44 00001228: DUP1 00001229: DUP4 0000122a: ADD 0000122b: SWAP4 0000122c: SWAP2 0000122d: SWAP3 0000122e: DUP3 0000122f: SWAP1 00001230: SUB 00001231: ADD 00001232: DUP2 00001233: DUP8 00001234: DUP8 00001235: DUP1 00001236: EXTCODESIZE 00001237: ISZERO 00001238: DUP1 00001239: ISZERO 0000123a: PUSH2 0x1242 0000123d: JUMPI 0000123e: PUSH1 0x00 00001240: DUP1 00001241: REVERT 00001242: JUMPDEST 00001243: POP 00001244: GAS 00001245: CALL 00001246: ISZERO 00001247: DUP1 00001248: ISZERO 00001249: PUSH2 0x1256 0000124c: JUMPI 0000124d: RETURNDATASIZE 0000124e: PUSH1 0x00 00001250: DUP1 00001251: RETURNDATACOPY 00001252: RETURNDATASIZE 00001253: PUSH1 0x00 00001255: REVERT 00001256: JUMPDEST 00001257: POP 00001258: POP 00001259: POP 0000125a: POP 0000125b: PUSH1 0x40 0000125d: MLOAD 0000125e: RETURNDATASIZE 0000125f: PUSH1 0x20 00001261: DUP2 00001262: LT 00001263: ISZERO 00001264: PUSH2 0x126c 00001267: JUMPI 00001268: PUSH1 0x00 0000126a: DUP1 0000126b: REVERT 0000126c: JUMPDEST 0000126d: POP 0000126e: MLOAD 0000126f: SWAP1 00001270: POP 00001271: DUP1 00001272: PUSH2 0x12ac 00001275: JUMPI 00001276: PUSH1 0x40 00001278: MLOAD 00001279: PUSH3 0x461bcd 0000127d: PUSH1 0xe5 0000127f: SHL 00001280: DUP2 00001281: MSTORE 00001282: PUSH1 0x04 00001284: ADD 00001285: DUP1 00001286: DUP1 00001287: PUSH1 0x20 00001289: ADD 0000128a: DUP3 0000128b: DUP2 0000128c: SUB 0000128d: DUP3 0000128e: MSTORE 0000128f: PUSH1 0x27 00001291: DUP2 00001292: MSTORE 00001293: PUSH1 0x20 00001295: ADD 00001296: DUP1 00001297: PUSH2 0x1488 0000129a: PUSH1 0x27 0000129c: SWAP2 0000129d: CODECOPY 0000129e: PUSH1 0x40 000012a0: ADD 000012a1: SWAP2 000012a2: POP 000012a3: POP 000012a4: PUSH1 0x40 000012a6: MLOAD 000012a7: DUP1 000012a8: SWAP2 000012a9: SUB 000012aa: SWAP1 000012ab: REVERT 000012ac: JUMPDEST 000012ad: DUP6 000012ae: PUSH1 0x01 000012b0: PUSH1 0x01 000012b2: PUSH1 0xa0 000012b4: SHL 000012b5: SUB 000012b6: AND 000012b7: DUP6 000012b8: PUSH1 0x01 000012ba: PUSH1 0x01 000012bc: PUSH1 0xa0 000012be: SHL 000012bf: SUB 000012c0: AND 000012c1: PUSH32 0xd2708b75549f9f4a149b80f5b152801c0e97e2419aa19930ad9cb1bb4cf4f91d 000012e2: DUP7 000012e3: PUSH1 0x40 000012e5: MLOAD 000012e6: DUP1 000012e7: DUP3 000012e8: DUP2 000012e9: MSTORE 000012ea: PUSH1 0x20 000012ec: ADD 000012ed: SWAP2 000012ee: POP 000012ef: POP 000012f0: PUSH1 0x40 000012f2: MLOAD 000012f3: DUP1 000012f4: SWAP2 000012f5: SUB 000012f6: SWAP1 000012f7: LOG3 000012f8: POP 000012f9: POP 000012fa: POP 000012fb: POP 000012fc: POP 000012fd: POP 000012fe: JUMP 000012ff: INVALID 00001300: POP 00001301: PUSH22 0x6c6c576974686472617761626c653a20455243323041 00001318: PUSH5 0x6472657373 0000131e: PUSH6 0x73206d757374 00001325: KECCAK256 00001326: PUSH3 0x652073 0000132a: PUSH2 0x6d65 0000132d: KECCAK256 0000132e: PUSH13 0x656e67746820617320616d6f75 0000133c: PUSH15 0x747350756c6c576974686472617761 0000134c: PUSH3 0x6c653a 00001350: KECCAK256 00001351: PUSH2 0x6d6f 00001354: PUSH22 0x6e74206d757374206265206772656174657220746861 0000136b: PUSH15 0x203050756c6c576974686472617761 0000137b: PUSH3 0x6c653a 0000137f: KECCAK256 00001380: PUSH19 0x6563697069656e7473206d7573742062652073 00001394: PUSH2 0x6d65 00001397: KECCAK256 00001398: PUSH13 0x656e67746820617320616d6f75 000013a6: PUSH15 0x747350756c6c576974686472617761 000013b6: PUSH3 0x6c653a 000013ba: KECCAK256 000013bb: UNKNOWN(0x4F) 000013bc: PUSH15 0x6c7920747275737465644f776e6572 000013cc: KECCAK256 000013cd: PUSH4 0x616e2063 000013d2: PUSH2 0x6c6c 000013d5: KECCAK256 000013d6: PUSH21 0x68697350756c6c576974686472617761626c653a20 000013ec: PUSH2 0x6d6f 000013ef: PUSH22 0x6e74206d757374206265206c657373207468616e2062 00001406: PUSH2 0x6c61 00001409: PUSH15 0x636550756c6c576974686472617761 00001419: PUSH3 0x6c653a 0000141d: KECCAK256 0000141e: SLOAD 0000141f: PUSH19 0x616e73666572206661696c656450756c6c5769 00001433: PUSH21 0x686472617761626c653a2063616e6e6f7420626520 00001449: PUSH15 0x756c6c20636f6e7472616374446570 00001459: PUSH16 0x7369743a2066616c6c6261636b206675 0000146a: PUSH15 0x6374696f6e20646f6573206e6f7420 0000147a: PUSH21 0x616b6520617267756d656e747350756c6c57697468 00001490: PUSH5 0x7261776162 00001496: PUSH13 0x653a204552433230207472616e 000014a4: PUSH20 0x666572206661696c656450756c6c576974686472 000014b9: PUSH2 0x7761 000014bc: PUSH3 0x6c653a 000014c0: KECCAK256 000014c1: PUSH4 0x616e6e6f 000014c6: PUSH21 0x206265206e756c6c206164647265737350756c6c57 000014dc: PUSH10 0x74686472617761626c65 000014e7: GASPRICE 000014e8: KECCAK256 000014e9: PUSH19 0x6563697069656e7473206d7573742062652067 000014fd: PUSH10 0x76656e50756c6c576974 00001508: PUSH9 0x6472617761626c653a 00001512: KECCAK256 00001513: PUSH19 0x6563697069656e7473206d7573742062652073 00001527: PUSH2 0x6d65 0000152a: KECCAK256 0000152b: PUSH13 0x656e6774682061732045524332 00001539: ADDRESS 0000153a: COINBASE 0000153b: PUSH5 0x6472657373 00001541: PUSH6 0x7350756c6c57 00001548: PUSH10 0x74686472617761626c65 00001553: GASPRICE 00001554: KECCAK256 00001555: PUSH15 0x65774f776e65722063616e6e6f7420 00001565: PUSH3 0x652065 00001569: PUSH14 0x707479a265627a7a72315820cd75 00001578: ADDMOD 00001579: BASEFEE 0000157a: SWAP9 0000157b: PUSH22 0xa45e7dd8f2fd73b1a0985a153279f68904083875d906 00001592: XOR 00001593: SSTORE 00001594: UNKNOWN(0xDB) 00001595: PUSH7 0x64736f6c634300 0000159d: SDIV 0000159e: UNKNOWN(0x0C) 0000159f: STOP 000015a0: ORIGIN
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xde1b0486",
"selector": "0xde1b0486",
"calldata_variants": [
"0xde1b0486",
"0xde1b04860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebeaa0a7",
"selector": "0xebeaa0a7",
"calldata_variants": [
"0xebeaa0a7",
"0xebeaa0a70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4f3b200",
"selector": "0xf4f3b200",
"calldata_variants": [
"0xf4f3b200",
"0xf4f3b2000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf99cc2a4",
"selector": "0xf99cc2a4",
"calldata_variants": [
"0xf99cc2a4",
"0xf99cc2a40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa51a828c",
"selector": "0xa51a828c",
"calldata_variants": [
"0xa51a828c",
"0xa51a828c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa8001d6f",
"selector": "0xa8001d6f",
"calldata_variants": [
"0xa8001d6f",
"0xa8001d6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb412cf20",
"selector": "0xb412cf20",
"calldata_variants": [
"0xb412cf20",
"0xb412cf200000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc7927b74",
"selector": "0xc7927b74",
"calldata_variants": [
"0xc7927b74",
"0xc7927b740000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 5536,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9
call_targets:
0xd27e44f7f4118db2c7812a363f5b76859c20e0b3
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xd27e44f7f4118db2c7812a363f5b76859c20e0b3"
],
"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": "0xde1b0486",
"selector": "0xde1b0486",
"calldata_variants": [
"0xde1b0486",
"0xde1b04860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebeaa0a7",
"selector": "0xebeaa0a7",
"calldata_variants": [
"0xebeaa0a7",
"0xebeaa0a70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4f3b200",
"selector": "0xf4f3b200",
"calldata_variants": [
"0xf4f3b200",
"0xf4f3b2000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf99cc2a4",
"selector": "0xf99cc2a4",
"calldata_variants": [
"0xf99cc2a4",
"0xf99cc2a40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa51a828c",
"selector": "0xa51a828c",
"calldata_variants": [
"0xa51a828c",
"0xa51a828c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa8001d6f",
"selector": "0xa8001d6f",
"calldata_variants": [
"0xa8001d6f",
"0xa8001d6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb412cf20",
"selector": "0xb412cf20",
"calldata_variants": [
"0xb412cf20",
"0xb412cf200000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc7927b74",
"selector": "0xc7927b74",
"calldata_variants": [
"0xc7927b74",
"0xc7927b740000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4057,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4677,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [
{
"pc": 5536,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 2
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9
call_targets:
0xd27e44f7f4118db2c7812a363f5b76859c20e0b3
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xd9cae5dfb32b83445b71d48b93ccb8723d553356ed630ee1e24a083488e914d9",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xd27e44f7f4118db2c7812a363f5b76859c20e0b3"
],
"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": "0xde1b0486",
"selector": "0xde1b0486",
"calldata_variants": [
"0xde1b0486",
"0xde1b04860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebeaa0a7",
"selector": "0xebeaa0a7",
"calldata_variants": [
"0xebeaa0a7",
"0xebeaa0a70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4f3b200",
"selector": "0xf4f3b200",
"calldata_variants": [
"0xf4f3b200",
"0xf4f3b2000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf99cc2a4",
"selector": "0xf99cc2a4",
"calldata_variants": [
"0xf99cc2a4",
"0xf99cc2a40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa51a828c",
"selector": "0xa51a828c",
"calldata_variants": [
"0xa51a828c",
"0xa51a828c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa8001d6f",
"selector": "0xa8001d6f",
"calldata_variants": [
"0xa8001d6f",
"0xa8001d6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb412cf20",
"selector": "0xb412cf20",
"calldata_variants": [
"0xb412cf20",
"0xb412cf200000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc7927b74",
"selector": "0xc7927b74",
"calldata_variants": [
"0xc7927b74",
"0xc7927b740000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4057,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4677,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": [
{
"pc": 5536,
"type": "tx_origin_used"
}
]
}
|