99041987-80f5-485d-80b1-2417648d8417
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 |
|---|---|---|---|---|
| 31737 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95845 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 95846 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 95847 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 95848 | capability.graph | complete | 1 / 3 | 1 week ago |
| 95849 | detector.run | complete | 1 / 3 | 1 week ago |
| 95850 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1217152] OpenAI Codex v0.77.0 (research preview)
[codex:1217152] --------
[codex:1217152] workdir: /tmp/codex-multi-hbpjsfoj
[codex:1217152] model: gpt-5.2-codex
[codex:1217152] provider: openai
[codex:1217152] approval: never
[codex:1217152] sandbox: read-only
[codex:1217152] reasoning effort: xhigh
[codex:1217152] reasoning summaries: auto
[codex:1217152] session id: 019b8f7c-a8ec-7c81-8208-eeec7ce285a5
[codex:1217152] --------
[codex:1217152] user
[codex:1217152] 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:1217152]
[codex:1217152] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1217152]
[codex:1217152] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1217152] - Gas inefficiency, code quality, or best practices
[codex:1217152] - Theoretical vulnerabilities without a clear extraction path
[codex:1217152] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1217152] - Issues requiring social engineering or off-chain coordination
[codex:1217152]
[codex:1217152] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1217152] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1217152] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1217152] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1217152] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1217152] - External calls before state updates (reentrancy)
[codex:1217152] - SELFDESTRUCT with controllable beneficiary
[codex:1217152] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1217152]
[codex:1217152] For each finding, you MUST explain:
[codex:1217152] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1217152] 2. The concrete sequence of transactions to extract value
[codex:1217152] 3. Why you believe this is exploitable (not just suspicious)
[codex:1217152]
[codex:1217152] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1217152] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1217152]
[codex:1217152] Output MUST be valid JSON matching the provided schema.
[codex:1217152] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1217152] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1217152] mcp startup: no servers
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Prioritizing BYTECODE_BUNDLE.txt reading**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc ls in /tmp/codex-multi-hbpjsfoj succeeded in 6ms:
[codex:1217152] BYTECODE_BUNDLE.txt
[codex:1217152] codex-output-schema.json
[codex:1217152] exec
[codex:1217152] /bin/bash -lc 'wc -l BYTECODE_BUNDLE.txt' in /tmp/codex-multi-hbpjsfoj succeeded in 6ms:
[codex:1217152] 5 BYTECODE_BUNDLE.txt
[codex:1217152] exec
[codex:1217152] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-hbpjsfoj succeeded in 5ms:
[codex:1217152] Runtime bytecode bundle for best-effort auditing.
[codex:1217152] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1217152]
[codex:1217152] FILE: runtime_bytecode.hex
[codex:1217152] 0x60806040526004361061010d5760003560e01c80638129fc1c11610095578063c49baebe11610064578063c49baebe14610304578063ccd9399814610338578063d547741f1461036c578063db2e21bc1461038c578063e12fba8d146103a157600080fd5b80638129fc1c1461027c57806391d1485414610291578063a217fddf146102b1578063ad3cb1cc146102c657600080fd5b806336568abe116100dc57806336568abe146101f45780634f1ef2861461021457806352d1902d1461022757806370ff8fdb1461023c5780637d2b9cc01461025c57600080fd5b806301ffc9a71461012257806305643f3914610157578063248a9ca3146101a65780632f2ff15d146101d457600080fd5b3661011d5761011b336103af565b005b600080fd5b34801561012e57600080fd5b5061014261013d366004611228565b610413565b60405190151581526020015b60405180910390f35b34801561016357600080fd5b50610142610172366004611252565b60009081527ff177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00602052604090205460ff1690565b3480156101b257600080fd5b506101c66101c1366004611252565b61044a565b60405190815260200161014e565b3480156101e057600080fd5b5061011b6101ef366004611287565b61046c565b34801561020057600080fd5b5061011b61020f366004611287565b61048e565b61011b61022236600461136a565b6104c6565b34801561023357600080fd5b506101c66104e5565b34801561024857600080fd5b5061011b61025736600461144b565b610502565b34801561026857600080fd5b5061011b610277366004611252565b610631565b34801561028857600080fd5b5061011b610661565b34801561029d57600080fd5b506101426102ac366004611287565b61078b565b3480156102bd57600080fd5b506101c6600081565b3480156102d257600080fd5b506102f7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161014e9190611581565b34801561031057600080fd5b506101c67f21702c8af46127c7fa207f89d0b0a8441bb32959a0ac7df790e9ab1a25c9892681565b34801561034457600080fd5b507f0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd4209300546101c6565b34801561037857600080fd5b5061011b610387366004611287565b6107c3565b34801561039857600080fd5b5061011b6107df565b61011b6103af3660046115b4565b346000036103d0576040516341abc80160e01b815260040160405180910390fd5b6040513481526001600160a01b0382169033907fb2d8c64c6b025b34c219301320c7cbc757fa77c134e652d33e449d9629735f539060200160405180910390a350565b60006001600160e01b03198216637965db0b60e01b148061044457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526000805160206116a0833981519152602052604090206001015490565b6104758261044a565b61047e81610816565b6104888383610823565b50505050565b6001600160a01b03811633146104b75760405163334bd91960e11b815260040160405180910390fd5b6104c182826108c8565b505050565b6104ce610944565b6104d7826109eb565b6104e182826109f6565b5050565b60006104ef610ab8565b5060008051602061168083398151915290565b7ff177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e006105308286868630610b01565b60008060008061053f86610e25565b929650909450925090506001600160a01b03811630146105725760405163412ce84360e01b815260040160405180910390fd5b60008281526020869052604090205460ff16156105a25760405163d0ebeb4b60e01b815260040160405180910390fd5b6000828152602086905260409020805460ff191660011790556105c58484610e7f565b6105e2576040516312171d8360e31b815260040160405180910390fd5b60408051848152602081018490526001600160a01b038616917f3b3ea932258c0790aa2c649875c0051f6eedd02c64674181babf9ecf6611f6aa910160405180910390a2505050505050505050565b600061063c81610816565b507f0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd420930055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106a75750825b905060008267ffffffffffffffff1660011480156106c45750303b155b9050811580156106d2575080155b156106f05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071a57845460ff60401b1916600160401b1785555b610722610edd565b61072a610ee9565b610732610ee9565b61073d600033610823565b50831561078457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60009182526000805160206116a0833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6107cc8261044a565b6107d581610816565b61048883836108c8565b60006107ea81610816565b60405133904780156108fc02916000818181858888f193505050501580156104e1573d6000803e3d6000fd5b6108208133610ef1565b50565b60006000805160206116a083398151915261083e848461078b565b6108be576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556108743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610444565b6000915050610444565b60006000805160206116a08339815191526108e3848461078b565b156108be576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610444565b306001600160a01b037f000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca1614806109cb57507f000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca6001600160a01b03166109bf600080516020611680833981519152546001600160a01b031690565b6001600160a01b031614155b156109e95760405163703e46dd60e11b815260040160405180910390fd5b565b60006104e181610816565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a50575060408051601f3d908101601f19168201909252610a4d918101906115cf565b60015b610a7d57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206116808339815191528114610aae57604051632a87526960e21b815260048101829052602401610a74565b6104c18383610f2a565b306001600160a01b037f000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca16146109e95760405163703e46dd60e11b815260040160405180910390fd5b8451606814610b2357604051636eca2e4b60e01b815260040160405180910390fd5b6000816001600160a01b031663ccd939986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8791906115cf565b90508085511015610bab576040516322e5ce4360e21b815260040160405180910390fd5b6000610bb687610f80565b905060008267ffffffffffffffff811115610bd357610bd36112b3565b604051908082528060200260200182016040528015610bfc578160200160208202803683370190505b50905060005b83811015610e1a5760006001848a8481518110610c2157610c216115e8565b60200260200101518a8581518110610c3b57610c3b6115e8565b60200260200101518a8681518110610c5557610c556115e8565b602002602001015160405160008152602001604052604051610c93949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610cb5573d6000803e3d6000fd5b505050602060405103519050856001600160a01b03166391d14854876001600160a01b031663c49baebe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3291906115cf565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b0384166024820152604401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da191906115fe565b610dbe57604051636caa20b560e11b815260040160405180910390fd5b610dc88382611002565b15610de6576040516323ef34dd60e21b815260040160405180910390fd5b80838381518110610df957610df96115e8565b6001600160a01b039092166020928302919091019091015250600101610c02565b505050505050505050565b600080600080610e36855160681490565b610e5357604051636eca2e4b60e01b815260040160405180910390fd5b6001600160a01b0360148601511693506034850151925060548501519150606885015190509193509193565b600080836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610ecd576040519150601f19603f3d011682016040523d82523d6000602084013e610ed2565b606091505b509095945050505050565b610ee561105d565b6109e95b6109e961105d565b610efb828261078b565b6104e15760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610a74565b610f33826110a6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f78576104c1828261110b565b6104e1611181565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a0000000000006020808301919091528251808401845260038152620c4c0d60ea1b81830152925160009391610fe39184918491889101611620565b6040516020818303038152906040528051906020012092505050919050565b6000805b835181101561105357826001600160a01b031684828151811061102b5761102b6115e8565b60200260200101516001600160a01b03160361104b576001915050610444565b600101611006565b5060009392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166109e957604051631afcd79f60e31b815260040160405180910390fd5b806001600160a01b03163b6000036110dc57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610a74565b60008051602061168083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516111289190611663565b600060405180830381855af49150503d8060008114611163576040519150601f19603f3d011682016040523d82523d6000602084013e611168565b606091505b50915091506111788583836111a0565b95945050505050565b34156109e95760405163b398979f60e01b815260040160405180910390fd5b6060826111b5576111b0826111ff565b6111f8565b81511580156111cc57506001600160a01b0384163b155b156111f557604051639996b31560e01b81526001600160a01b0385166004820152602401610a74565b50805b9392505050565b80511561120f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60006020828403121561123a57600080fd5b81356001600160e01b0319811681146111f857600080fd5b60006020828403121561126457600080fd5b5035919050565b80356001600160a01b038116811461128257600080fd5b919050565b6000806040838503121561129a57600080fd5b823591506112aa6020840161126b565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112f2576112f26112b3565b604052919050565b600082601f83011261130b57600080fd5b813567ffffffffffffffff811115611325576113256112b3565b611338601f8201601f19166020016112c9565b81815284602083860101111561134d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561137d57600080fd5b6113868361126b565b9150602083013567ffffffffffffffff8111156113a257600080fd5b6113ae858286016112fa565b9150509250929050565b600067ffffffffffffffff8211156113d2576113d26112b3565b5060051b60200190565b600082601f8301126113ed57600080fd5b813560206114026113fd836113b8565b6112c9565b8083825260208201915060208460051b87010193508684111561142457600080fd5b602086015b848110156114405780358352918301918301611429565b509695505050505050565b6000806000806080858703121561146157600080fd5b843567ffffffffffffffff8082111561147957600080fd5b818701915087601f83011261148d57600080fd5b8135602061149d6113fd836113b8565b82815260059290921b8401810191818101908b8411156114bc57600080fd5b948201945b838610156114ea57853560ff811681146114db5760008081fd5b825294820194908201906114c1565b9850508801359250508082111561150057600080fd5b61150c888389016113dc565b9450604087013591508082111561152257600080fd5b61152e888389016113dc565b9350606087013591508082111561154457600080fd5b50611551878288016112fa565b91505092959194509250565b60005b83811015611578578181015183820152602001611560565b50506000910152565b60208152600082518060208401526115a081604085016020870161155d565b601f01601f19169190910160400192915050565b6000602082840312156115c657600080fd5b6111f88261126b565b6000602082840312156115e157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561161057600080fd5b815180151581146111f857600080fd5b6000845161163281846020890161155d565b84519083019061164681836020890161155d565b845191019061165981836020880161155d565b0195945050505050565b6000825161167581846020870161155d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220f891248afd5fcbc7e1e4bee1536f70478d815adc30810eedbe9467a410a4ec2264736f6c63430008180033
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Inspecting upgradeable contract bytecode**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] from textwrap import shorten
[codex:1217152]
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] # opcode map
[codex:1217152] ops={
[codex:1217152] 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:1217152] 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:1217152] 0x20:'SHA3',
[codex:1217152] 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:1217152] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] out=[]
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] out.append((i,name,data.hex()))
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] out.append((i,name,''))
[codex:1217152] i+=1
[codex:1217152] return out
[codex:1217152]
[codex:1217152] # find function entry addresses 0x048e etc
[codex:1217152] for addr in [0x046c,0x048e,0x04c6,0x07df,0x078b,0x0823,0x08c8,0x0ef1]:
[codex:1217152] print('---',hex(addr))
[codex:1217152] for off,name,data in disasm(addr, addr+80):
[codex:1217152] if data:
[codex:1217152] print(f'{off:04x}: {name} 0x{data}')
[codex:1217152] else:
[codex:1217152] print(f'{off:04x}: {name}')
[codex:1217152]
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 30ms:
[codex:1217152] --- 0x46c
[codex:1217152] 046c: JUMPDEST
[codex:1217152] 046d: PUSH2 0x0475
[codex:1217152] 0470: DUP3
[codex:1217152] 0471: PUSH2 0x044a
[codex:1217152] 0474: JUMP
[codex:1217152] 0475: JUMPDEST
[codex:1217152] 0476: PUSH2 0x047e
[codex:1217152] 0479: DUP2
[codex:1217152] 047a: PUSH2 0x0816
[codex:1217152] 047d: JUMP
[codex:1217152] 047e: JUMPDEST
[codex:1217152] 047f: PUSH2 0x0488
[codex:1217152] 0482: DUP4
[codex:1217152] 0483: DUP4
[codex:1217152] 0484: PUSH2 0x0823
[codex:1217152] 0487: JUMP
[codex:1217152] 0488: JUMPDEST
[codex:1217152] 0489: POP
[codex:1217152] 048a: POP
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing function selector and parameter decoding**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x1280')
[codex:1217152] disasm(0x1280,0x1290)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 21ms:
[codex:1217152] --- 0x1280
[codex:1217152] 1280: DUP1
[codex:1217152] 1281: REVERT
[codex:1217152] 1282: JUMPDEST
[codex:1217152] 1283: SWAP2
[codex:1217152] 1284: SWAP1
[codex:1217152] 1285: POP
[codex:1217152] 1286: JUMP
[codex:1217152] 1287: JUMPDEST
[codex:1217152] 1288: PUSH1 0x00
[codex:1217152] 128a: DUP1
[codex:1217152] 128b: PUSH1 0x40
[codex:1217152] 128d: DUP4
[codex:1217152] 128e: DUP6
[codex:1217152] 128f: SUB
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Extending disassembly range**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x1260-0x12c0')
[codex:1217152] disasm(0x1260,0x12c0)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 25ms:
[codex:1217152] --- 0x1260-0x12c0
[codex:1217152] 1260: PUSH1 0x00
[codex:1217152] 1262: DUP1
[codex:1217152] 1263: REVERT
[codex:1217152] 1264: JUMPDEST
[codex:1217152] 1265: POP
[codex:1217152] 1266: CALLDATALOAD
[codex:1217152] 1267: SWAP2
[codex:1217152] 1268: SWAP1
[codex:1217152] 1269: POP
[codex:1217152] 126a: JUMP
[codex:1217152] 126b: JUMPDEST
[codex:1217152] 126c: DUP1
[codex:1217152] 126d: CALLDATALOAD
[codex:1217152] 126e: PUSH1 0x01
[codex:1217152] 1270: PUSH1 0x01
[codex:1217152] 1272: PUSH1 0xa0
[codex:1217152] 1274: SHL
[codex:1217152] 1275: SUB
[codex:1217152] 1276: DUP2
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Decoding function selectors and access control logic**
[codex:1217152]
[codex:1217152] I'm breaking down EVM bytecode to identify how various functions decode parameters—like addresses or bytes32—and mapping those to known AccessControl roles and checks, including how restricted calls send contract balance only to authorized callers. I'm piecing together the role-checking mechanism from opcode flows and constants embedded in code.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import hashlib
[codex:1217152]
[codex:1217152] def selector(sig):
[codex:1217152] return hashlib.sha3_256(sig.encode()).hexdigest()[:8]
[codex:1217152]
[codex:1217152] candidates=[
[codex:1217152] 'AccessControlUnauthorizedAccount(address,bytes32)',
[codex:1217152] 'AccessControlUnauthorizedAccount(address,string)',
[codex:1217152] 'AccessControlMissingRole(address,bytes32)',
[codex:1217152] 'AccessControlBadConfirmation()',
[codex:1217152] 'OwnableUnauthorizedAccount(address)',
[codex:1217152] 'OwnableInvalidOwner(address)',
[codex:1217152] 'Unauthorized()',
[codex:1217152] 'NotAuthorized()',
[codex:1217152] ]
[codex:1217152] for sig in candidates:
[codex:1217152] print(sig, selector(sig))
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 25ms:
[codex:1217152] AccessControlUnauthorizedAccount(address,bytes32) 4dd1b6f8
[codex:1217152] AccessControlUnauthorizedAccount(address,string) b9fb09f5
[codex:1217152] AccessControlMissingRole(address,bytes32) 39dd6470
[codex:1217152] AccessControlBadConfirmation() 5715c118
[codex:1217152] OwnableUnauthorizedAccount(address) 367c2886
[codex:1217152] OwnableInvalidOwner(address) 63d14d69
[codex:1217152] Unauthorized() 94b7950d
[codex:1217152] NotAuthorized() fd3fa225
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Comparing hash functions for event signature**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] try:
[codex:1217152] import sha3
[codex:1217152] def keccak256(x):
[codex:1217152] k=sha3.keccak_256(); k.update(x); return k.hexdigest()
[codex:1217152] for sig in ['AccessControlUnauthorizedAccount(address,bytes32)','AccessControlMissingRole(address,bytes32)','AccessControlBadConfirmation()','OwnableUnauthorizedAccount(address)']:
[codex:1217152] print(sig, keccak256(sig.encode())[:8])
[codex:1217152] except Exception as e:
[codex:1217152] print('no sha3', e)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] no sha3 No module named 'sha3'
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing contract call instructions**
[codex:1217152]
[codex:1217152] I'm noting that SHA3 isn't installed and debating keccak implementations but deciding not to pursue that now. I'm focusing on the access control check at 0x0ef1 and suspecting the withdraw function at 0x7df is role-restricted and thus not exploitable. To confirm, I'll scan for CALL, DELEGATECALL, and SELFDESTRUCT instructions with non-zero value transfers and analyze their contexts to detect any unguarded asset withdrawals. I'll write a script to locate these calls along with their offsets for deeper examination.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152]
[codex:1217152] ops={0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'}
[codex:1217152]
[codex:1217152] for i,b in enumerate(code):
[codex:1217152] if b in ops:
[codex:1217152] print(hex(i), ops[b])
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] 0xaa DELEGATECALL
[codex:1217152] 0xc5 SELFDESTRUCT
[codex:1217152] 0xe0 SELFDESTRUCT
[codex:1217152] 0x102 CALL
[codex:1217152] 0x179 CALL
[codex:1217152] 0x18a STATICCALL
[codex:1217152] 0x1a2 SELFDESTRUCT
[codex:1217152] 0x31a DELEGATECALL
[codex:1217152] 0x31e STATICCALL
[codex:1217152] 0x3f6 STATICCALL
[codex:1217152] 0x432 SELFDESTRUCT
[codex:1217152] 0x504 CALL
[codex:1217152] 0x515 STATICCALL
[codex:1217152] 0x583 SELFDESTRUCT
[codex:1217152] 0x5b4 SELFDESTRUCT
[codex:1217152] 0x66b CALL
[codex:1217152] 0x68d SELFDESTRUCT
[codex:1217152] 0x692 SELFDESTRUCT
[codex:1217152] 0x693 SELFDESTRUCT
[codex:1217152] 0x694 SELFDESTRUCT
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Planning precise opcode parsing**
[codex:1217152]
[codex:1217152] I see the naive disassembler picks up false SELFDESTRUCT opcodes inside data pushes and metadata, so I’ll focus on building a proper parser that honors PUSH data lengths and iterates sequentially to accurately find real opcodes like CALL, DELEGATECALL, SELFDESTRUCT, and STATICCALL before the metadata section. This way, I can avoid mistaking data bytes for opcodes.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152]
[codex:1217152] ops={
[codex:1217152] 0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] addrs=[]
[codex:1217152] i=0
[codex:1217152] while i<len(code):
[codex:1217152] op=code[i]
[codex:1217152] if op in ops:
[codex:1217152] addrs.append((i,ops[op]))
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] for off,name in addrs:
[codex:1217152] print(hex(off), name)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 21ms:
[codex:1217152] 0x800 CALL
[codex:1217152] 0xa23 STATICCALL
[codex:1217152] 0xb52 STATICCALL
[codex:1217152] 0xca4 STATICCALL
[codex:1217152] 0xcfd STATICCALL
[codex:1217152] 0xd6c STATICCALL
[codex:1217152] 0xe9d CALL
[codex:1217152] 0x1134 DELEGATECALL
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Inspecting external call instructions**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- around 0xe90')
[codex:1217152] disasm(0xe80,0xec0)
[codex:1217152] print('--- around 0x1120')
[codex:1217152] disasm(0x1110,0x1160)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 20ms:
[codex:1217152] --- around 0xe90
[codex:1217152] 0e80: PUSH1 0x00
[codex:1217152] 0e82: DUP1
[codex:1217152] 0e83: DUP4
[codex:1217152] 0e84: PUSH1 0x01
[codex:1217152] 0e86: PUSH1 0x01
[codex:1217152] 0e88: PUSH1 0xa0
[codex:1217152] 0e8a: SHL
[codex:1217152] 0e8b: SUB
[codex:1217152] 0e8c: AND
[codex:1217152] 0e8d: DUP4
[codex:1217152] 0e8e: PUSH1 0x40
[codex:1217152] 0e90: MLOAD
[codex:1217152] 0e91: PUSH1 0x00
[codex:1217152] 0e93: PUSH1 0x40
[codex:1217152] 0e95: MLOAD
[codex:1217152] 0e96: DUP1
[codex:1217152] 0e97: DUP4
[codex:1217152] 0e98: SUB
[codex:1217152] 0e99: DUP2
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing low-level CALL usage**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0xe40-0xea5')
[codex:1217152] disasm(0xe40,0xea5)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] --- 0xe40-0xea5
[codex:1217152] 0e40: UNKNOWN_ca
[codex:1217152] 0e41: UNKNOWN_2e
[codex:1217152] 0e42: UNKNOWN_4b
[codex:1217152] 0e43: PUSH1 0xe0
[codex:1217152] 0e45: SHL
[codex:1217152] 0e46: DUP2
[codex:1217152] 0e47: MSTORE
[codex:1217152] 0e48: PUSH1 0x04
[codex:1217152] 0e4a: ADD
[codex:1217152] 0e4b: PUSH1 0x40
[codex:1217152] 0e4d: MLOAD
[codex:1217152] 0e4e: DUP1
[codex:1217152] 0e4f: SWAP2
[codex:1217152] 0e50: SUB
[codex:1217152] 0e51: SWAP1
[codex:1217152] 0e52: REVERT
[codex:1217152] 0e53: JUMPDEST
[codex:1217152] 0e54: PUSH1 0x01
[codex:1217152] 0e56: PUSH1 0x01
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing potential function boundaries**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] pattern=bytes([0x61,0x0e,0x7f]) # PUSH2 0x0e7f
[codex:1217152] for i in range(len(code)-2):
[codex:1217152] if code[i:i+3]==pattern:
[codex:1217152] print(hex(i))
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] 0x5c1
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Inspecting disassembly near 0x5c1**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x5a0-0x5e5')
[codex:1217152] disasm(0x5a0,0x5e5)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x5a0-0x5e5
[codex:1217152] 05a0: SWAP1
[codex:1217152] 05a1: REVERT
[codex:1217152] 05a2: JUMPDEST
[codex:1217152] 05a3: PUSH1 0x00
[codex:1217152] 05a5: DUP3
[codex:1217152] 05a6: DUP2
[codex:1217152] 05a7: MSTORE
[codex:1217152] 05a8: PUSH1 0x20
[codex:1217152] 05aa: DUP7
[codex:1217152] 05ab: SWAP1
[codex:1217152] 05ac: MSTORE
[codex:1217152] 05ad: PUSH1 0x40
[codex:1217152] 05af: SWAP1
[codex:1217152] 05b0: SHA3
[codex:1217152] 05b1: DUP1
[codex:1217152] 05b2: SLOAD
[codex:1217152] 05b3: PUSH1 0xff
[codex:1217152] 05b5: NOT
[codex:1217152] 05b6: AND
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing function calls and dispatch mapping**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x500-0x620')
[codex:1217152] disasm(0x500,0x620)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] --- 0x500-0x620
[codex:1217152] 0500: SWAP1
[codex:1217152] 0501: JUMP
[codex:1217152] 0502: JUMPDEST
[codex:1217152] 0503: PUSH32 0xf177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00
[codex:1217152] 0524: PUSH2 0x0530
[codex:1217152] 0527: DUP3
[codex:1217152] 0528: DUP7
[codex:1217152] 0529: DUP7
[codex:1217152] 052a: DUP7
[codex:1217152] 052b: ADDRESS
[codex:1217152] 052c: PUSH2 0x0b01
[codex:1217152] 052f: JUMP
[codex:1217152] 0530: JUMPDEST
[codex:1217152] 0531: PUSH1 0x00
[codex:1217152] 0533: DUP1
[codex:1217152] 0534: PUSH1 0x00
[codex:1217152] 0536: DUP1
[codex:1217152] 0537: PUSH2 0x053f
[codex:1217152] 053a: DUP7
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing contract call and reentrancy logic**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x61d-0x690')
[codex:1217152] disasm(0x61d,0x690)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x61d-0x690
[codex:1217152] 061d: SWAP2
[codex:1217152] 061e: ADD
[codex:1217152] 061f: PUSH1 0x40
[codex:1217152] 0621: MLOAD
[codex:1217152] 0622: DUP1
[codex:1217152] 0623: SWAP2
[codex:1217152] 0624: SUB
[codex:1217152] 0625: SWAP1
[codex:1217152] 0626: LOG2
[codex:1217152] 0627: POP
[codex:1217152] 0628: POP
[codex:1217152] 0629: POP
[codex:1217152] 062a: POP
[codex:1217152] 062b: POP
[codex:1217152] 062c: POP
[codex:1217152] 062d: POP
[codex:1217152] 062e: POP
[codex:1217152] 062f: POP
[codex:1217152] 0630: JUMP
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing event and function roles**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0xe20-0xe80')
[codex:1217152] disasm(0xe20,0xe80)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 22ms:
[codex:1217152] --- 0xe20-0xe80
[codex:1217152] 0e20: POP
[codex:1217152] 0e21: POP
[codex:1217152] 0e22: POP
[codex:1217152] 0e23: POP
[codex:1217152] 0e24: JUMP
[codex:1217152] 0e25: JUMPDEST
[codex:1217152] 0e26: PUSH1 0x00
[codex:1217152] 0e28: DUP1
[codex:1217152] 0e29: PUSH1 0x00
[codex:1217152] 0e2b: DUP1
[codex:1217152] 0e2c: PUSH2 0x0e36
[codex:1217152] 0e2f: DUP6
[codex:1217152] 0e30: MLOAD
[codex:1217152] 0e31: PUSH1 0x68
[codex:1217152] 0e33: EQ
[codex:1217152] 0e34: SWAP1
[codex:1217152] 0e35: JUMP
[codex:1217152] 0e36: JUMPDEST
[codex:1217152] 0e37: PUSH2 0x0e53
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing memory decoding and call execution**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x144b-0x1500')
[codex:1217152] disasm(0x144b,0x1500)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x144b-0x1500
[codex:1217152] 144b: JUMPDEST
[codex:1217152] 144c: PUSH1 0x00
[codex:1217152] 144e: DUP1
[codex:1217152] 144f: PUSH1 0x00
[codex:1217152] 1451: DUP1
[codex:1217152] 1452: PUSH1 0x80
[codex:1217152] 1454: DUP6
[codex:1217152] 1455: DUP8
[codex:1217152] 1456: SUB
[codex:1217152] 1457: SLT
[codex:1217152] 1458: ISZERO
[codex:1217152] 1459: PUSH2 0x1461
[codex:1217152] 145c: JUMPI
[codex:1217152] 145d: PUSH1 0x00
[codex:1217152] 145f: DUP1
[codex:1217152] 1460: REVERT
[codex:1217152] 1461: JUMPDEST
[codex:1217152] 1462: DUP5
[codex:1217152] 1463: CALLDATALOAD
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Examining upgrade function protections**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x0944-0x09f0')
[codex:1217152] disasm(0x0944,0x09f0)
[codex:1217152] print('--- 0x09f0-0x0a40')
[codex:1217152] disasm(0x09f0,0x0a40)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 25ms:
[codex:1217152] --- 0x0944-0x09f0
[codex:1217152] 0944: JUMPDEST
[codex:1217152] 0945: ADDRESS
[codex:1217152] 0946: PUSH1 0x01
[codex:1217152] 0948: PUSH1 0x01
[codex:1217152] 094a: PUSH1 0xa0
[codex:1217152] 094c: SHL
[codex:1217152] 094d: SUB
[codex:1217152] 094e: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
[codex:1217152] 096f: AND
[codex:1217152] 0970: EQ
[codex:1217152] 0971: DUP1
[codex:1217152] 0972: PUSH2 0x09cb
[codex:1217152] 0975: JUMPI
[codex:1217152] 0976: POP
[codex:1217152] 0977: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
[codex:1217152] 0998: PUSH1 0x01
[codex:1217152] 099a: PUSH1 0x01
[codex:1217152] 099c: PUSH1 0xa0
[codex:1217152] 099e: SHL
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing access control and proxy checks in bytecode**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x0b01-0x0c20')
[codex:1217152] disasm(0x0b01,0x0c20)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x0b01-0x0c20
[codex:1217152] 0b01: JUMPDEST
[codex:1217152] 0b02: DUP5
[codex:1217152] 0b03: MLOAD
[codex:1217152] 0b04: PUSH1 0x68
[codex:1217152] 0b06: EQ
[codex:1217152] 0b07: PUSH2 0x0b23
[codex:1217152] 0b0a: JUMPI
[codex:1217152] 0b0b: PUSH1 0x40
[codex:1217152] 0b0d: MLOAD
[codex:1217152] 0b0e: PUSH4 0x6eca2e4b
[codex:1217152] 0b13: PUSH1 0xe0
[codex:1217152] 0b15: SHL
[codex:1217152] 0b16: DUP2
[codex:1217152] 0b17: MSTORE
[codex:1217152] 0b18: PUSH1 0x04
[codex:1217152] 0b1a: ADD
[codex:1217152] 0b1b: PUSH1 0x40
[codex:1217152] 0b1d: MLOAD
[codex:1217152] 0b1e: DUP1
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing function access and role checks**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import importlib.util
[codex:1217152] for m in ['eth_utils','Crypto','pycryptodome','sha3']:
[codex:1217152] spec=importlib.util.find_spec(m)
[codex:1217152] print(m, bool(spec))
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] eth_utils True
[codex:1217152] Crypto True
[codex:1217152] pycryptodome False
[codex:1217152] sha3 False
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing contract selectors and access control**
[codex:1217152]
[codex:1217152] I’m planning to compute keccak selectors for known AccessControl and AccessManager functions using eth_utils.keccak in Python to identify the functions behind selectors like 0x70ff8fdb. I'll compare these with event topics and role constants found in the code to confirm AccessControl usage. Then, I’ll look into whether critical functions, especially the one at 0x70ff8fdb, have proper access restrictions by searching for caller checks around relevant addresses like 0x0b01. I'll test for presence of CALLER opcodes in that region to understand access control enforcement.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] # disassemble between 0xb01 and 0xe20 to find CALLER usage
[codex:1217152] ops={
[codex:1217152] 0x33:'CALLER',0x35:'CALLDATALOAD',0x54:'SLOAD',0x55:'SSTORE',0xf1:'CALL'
[codex:1217152] }
[codex:1217152]
[codex:1217152] # simple disasm with push skipping
[codex:1217152]
[codex:1217152] i=0xb01
[codex:1217152] end=0xe20
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] if op==0x33:
[codex:1217152] print(hex(i), 'CALLER')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] i+=1
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152]
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing signature verification potential**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0xf60-0x10c0')
[codex:1217152] disasm(0xf60,0x10c0)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] --- 0xf60-0x10c0
[codex:1217152] 0f60: UNKNOWN_5c
[codex:1217152] 0f61: UNKNOWN_2d
[codex:1217152] 0f62: EXTCODESIZE
[codex:1217152] 0f63: SWAP1
[codex:1217152] 0f64: PUSH1 0x00
[codex:1217152] 0f66: SWAP1
[codex:1217152] 0f67: LOG2
[codex:1217152] 0f68: DUP1
[codex:1217152] 0f69: MLOAD
[codex:1217152] 0f6a: ISZERO
[codex:1217152] 0f6b: PUSH2 0x0f78
[codex:1217152] 0f6e: JUMPI
[codex:1217152] 0f6f: PUSH2 0x04c1
[codex:1217152] 0f72: DUP3
[codex:1217152] 0f73: DUP3
[codex:1217152] 0f74: PUSH2 0x110b
[codex:1217152] 0f77: JUMP
[codex:1217152] 0f78: JUMPDEST
[codex:1217152] 0f79: PUSH2 0x04e1
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Examining signature verification area**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0x11a0-0x1200')
[codex:1217152] disasm(0x11a0,0x1200)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 22ms:
[codex:1217152] --- 0x11a0-0x1200
[codex:1217152] 11a0: JUMPDEST
[codex:1217152] 11a1: PUSH1 0x60
[codex:1217152] 11a3: DUP3
[codex:1217152] 11a4: PUSH2 0x11b5
[codex:1217152] 11a7: JUMPI
[codex:1217152] 11a8: PUSH2 0x11b0
[codex:1217152] 11ab: DUP3
[codex:1217152] 11ac: PUSH2 0x11ff
[codex:1217152] 11af: JUMP
[codex:1217152] 11b0: JUMPDEST
[codex:1217152] 11b1: PUSH2 0x11f8
[codex:1217152] 11b4: JUMP
[codex:1217152] 11b5: JUMPDEST
[codex:1217152] 11b6: DUP2
[codex:1217152] 11b7: MLOAD
[codex:1217152] 11b8: ISZERO
[codex:1217152] 11b9: DUP1
[codex:1217152] 11ba: ISZERO
[codex:1217152] 11bb: PUSH2 0x11cc
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Investigating ecrecover usage**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:1217152] 0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 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',
[codex:1217152] 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:1217152] 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:1217152] 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:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152]
[codex:1217152] def disasm(start,end):
[codex:1217152] i=start
[codex:1217152] while i<end:
[codex:1217152] op=code[i]
[codex:1217152] name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152] if 0x60<=op<=0x7f:
[codex:1217152] n=op-0x5f
[codex:1217152] data=code[i+1:i+1+n]
[codex:1217152] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152] i+=1+n
[codex:1217152] else:
[codex:1217152] print(f'{i:04x}: {name}')
[codex:1217152] i+=1
[codex:1217152]
[codex:1217152] print('--- 0xc80-0xd20')
[codex:1217152] disasm(0xc80,0xd20)
[codex:1217152] print('--- 0xd20-0xd90')
[codex:1217152] disasm(0xd20,0xd90)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 21ms:
[codex:1217152] --- 0xc80-0xd20
[codex:1217152] 0c80: SHA3
[codex:1217152] 0c81: DUP5
[codex:1217152] 0c82: ADD
[codex:1217152] 0c83: MSTORE
[codex:1217152] 0c84: PUSH1 0x40
[codex:1217152] 0c86: DUP4
[codex:1217152] 0c87: ADD
[codex:1217152] 0c88: MSTORE
[codex:1217152] 0c89: PUSH1 0x60
[codex:1217152] 0c8b: DUP3
[codex:1217152] 0c8c: ADD
[codex:1217152] 0c8d: MSTORE
[codex:1217152] 0c8e: PUSH1 0x80
[codex:1217152] 0c90: ADD
[codex:1217152] 0c91: SWAP1
[codex:1217152] 0c92: JUMP
[codex:1217152] 0c93: JUMPDEST
[codex:1217152] 0c94: PUSH1 0x20
[codex:1217152] 0c96: PUSH1 0x40
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Analyzing contract security patterns**
[codex:1217152]
[codex:1217152] I'm reviewing contract calls and roles to assess vulnerabilities like unprotected executions or uninitialized proxies, focusing on concrete exploit paths that lead to profit. So far, access control checks and upgrade patterns suggest no obvious exploit, and I'll confirm this with a final JSON report stating no findings if everything looks secure.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-hbpjsfoj succeeded in 5ms:
[codex:1217152] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1217152]
[codex:1217152] thinking
[codex:1217152] **Summarizing bytecode security analysis**
[codex:1217152]
[codex:1217152] I’m preparing a concise JSON report stating no concrete exploit was found in the bytecode. My summary highlights the presence of AccessControl and UUPS guards and confirms no clear unprotected path to profit exists, keeping findings empty as requested.
[codex:1217152] codex
[codex:1217152] {"no_findings":true,"summary":"Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.","findings":[]}
[codex:1217152] tokens used
[codex:1217152] 100,663
[codex:1217152] {"no_findings":true,"summary":"Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-05T19:00:16.176703+00:00",
"returncode": 0
},
"summary": "Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.",
"raw_final": {
"summary": "Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident 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 0x010d 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8129fc1c 00000019: GT 0000001a: PUSH2 0x0095 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xc49baebe 00000024: GT 00000025: PUSH2 0x0064 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xc49baebe 0000002f: EQ 00000030: PUSH2 0x0304 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xccd93998 0000003a: EQ 0000003b: PUSH2 0x0338 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xd547741f 00000045: EQ 00000046: PUSH2 0x036c 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xdb2e21bc 00000050: EQ 00000051: PUSH2 0x038c 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xe12fba8d 0000005b: EQ 0000005c: PUSH2 0x03a1 0000005f: JUMPI 00000060: PUSH1 0x00 00000062: DUP1 00000063: REVERT 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0x8129fc1c 0000006b: EQ 0000006c: PUSH2 0x027c 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0x91d14854 00000076: EQ 00000077: PUSH2 0x0291 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xa217fddf 00000081: EQ 00000082: PUSH2 0x02b1 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xad3cb1cc 0000008c: EQ 0000008d: PUSH2 0x02c6 00000090: JUMPI 00000091: PUSH1 0x00 00000093: DUP1 00000094: REVERT 00000095: JUMPDEST 00000096: DUP1 00000097: PUSH4 0x36568abe 0000009c: GT 0000009d: PUSH2 0x00dc 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0x36568abe 000000a7: EQ 000000a8: PUSH2 0x01f4 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0x4f1ef286 000000b2: EQ 000000b3: PUSH2 0x0214 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0x52d1902d 000000bd: EQ 000000be: PUSH2 0x0227 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0x70ff8fdb 000000c8: EQ 000000c9: PUSH2 0x023c 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0x7d2b9cc0 000000d3: EQ 000000d4: PUSH2 0x025c 000000d7: JUMPI 000000d8: PUSH1 0x00 000000da: DUP1 000000db: REVERT 000000dc: JUMPDEST 000000dd: DUP1 000000de: PUSH4 0x01ffc9a7 000000e3: EQ 000000e4: PUSH2 0x0122 000000e7: JUMPI 000000e8: DUP1 000000e9: PUSH4 0x05643f39 000000ee: EQ 000000ef: PUSH2 0x0157 000000f2: JUMPI 000000f3: DUP1 000000f4: PUSH4 0x248a9ca3 000000f9: EQ 000000fa: PUSH2 0x01a6 000000fd: JUMPI 000000fe: DUP1 000000ff: PUSH4 0x2f2ff15d 00000104: EQ 00000105: PUSH2 0x01d4 00000108: JUMPI 00000109: PUSH1 0x00 0000010b: DUP1 0000010c: REVERT 0000010d: JUMPDEST 0000010e: CALLDATASIZE 0000010f: PUSH2 0x011d 00000112: JUMPI 00000113: PUSH2 0x011b 00000116: CALLER 00000117: PUSH2 0x03af 0000011a: JUMP 0000011b: JUMPDEST 0000011c: STOP 0000011d: JUMPDEST 0000011e: PUSH1 0x00 00000120: DUP1 00000121: REVERT 00000122: JUMPDEST 00000123: CALLVALUE 00000124: DUP1 00000125: ISZERO 00000126: PUSH2 0x012e 00000129: JUMPI 0000012a: PUSH1 0x00 0000012c: DUP1 0000012d: REVERT 0000012e: JUMPDEST 0000012f: POP 00000130: PUSH2 0x0142 00000133: PUSH2 0x013d 00000136: CALLDATASIZE 00000137: PUSH1 0x04 00000139: PUSH2 0x1228 0000013c: JUMP 0000013d: JUMPDEST 0000013e: PUSH2 0x0413 00000141: JUMP 00000142: JUMPDEST 00000143: PUSH1 0x40 00000145: MLOAD 00000146: SWAP1 00000147: ISZERO 00000148: ISZERO 00000149: DUP2 0000014a: MSTORE 0000014b: PUSH1 0x20 0000014d: ADD 0000014e: JUMPDEST 0000014f: PUSH1 0x40 00000151: MLOAD 00000152: DUP1 00000153: SWAP2 00000154: SUB 00000155: SWAP1 00000156: RETURN 00000157: JUMPDEST 00000158: CALLVALUE 00000159: DUP1 0000015a: ISZERO 0000015b: PUSH2 0x0163 0000015e: JUMPI 0000015f: PUSH1 0x00 00000161: DUP1 00000162: REVERT 00000163: JUMPDEST 00000164: POP 00000165: PUSH2 0x0142 00000168: PUSH2 0x0172 0000016b: CALLDATASIZE 0000016c: PUSH1 0x04 0000016e: PUSH2 0x1252 00000171: JUMP 00000172: JUMPDEST 00000173: PUSH1 0x00 00000175: SWAP1 00000176: DUP2 00000177: MSTORE 00000178: PUSH32 0xf177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00 00000199: PUSH1 0x20 0000019b: MSTORE 0000019c: PUSH1 0x40 0000019e: SWAP1 0000019f: KECCAK256 000001a0: SLOAD 000001a1: PUSH1 0xff 000001a3: AND 000001a4: SWAP1 000001a5: JUMP 000001a6: JUMPDEST 000001a7: CALLVALUE 000001a8: DUP1 000001a9: ISZERO 000001aa: PUSH2 0x01b2 000001ad: JUMPI 000001ae: PUSH1 0x00 000001b0: DUP1 000001b1: REVERT 000001b2: JUMPDEST 000001b3: POP 000001b4: PUSH2 0x01c6 000001b7: PUSH2 0x01c1 000001ba: CALLDATASIZE 000001bb: PUSH1 0x04 000001bd: PUSH2 0x1252 000001c0: JUMP 000001c1: JUMPDEST 000001c2: PUSH2 0x044a 000001c5: JUMP 000001c6: JUMPDEST 000001c7: PUSH1 0x40 000001c9: MLOAD 000001ca: SWAP1 000001cb: DUP2 000001cc: MSTORE 000001cd: PUSH1 0x20 000001cf: ADD 000001d0: PUSH2 0x014e 000001d3: JUMP 000001d4: JUMPDEST 000001d5: CALLVALUE 000001d6: DUP1 000001d7: ISZERO 000001d8: PUSH2 0x01e0 000001db: JUMPI 000001dc: PUSH1 0x00 000001de: DUP1 000001df: REVERT 000001e0: JUMPDEST 000001e1: POP 000001e2: PUSH2 0x011b 000001e5: PUSH2 0x01ef 000001e8: CALLDATASIZE 000001e9: PUSH1 0x04 000001eb: PUSH2 0x1287 000001ee: JUMP 000001ef: JUMPDEST 000001f0: PUSH2 0x046c 000001f3: JUMP 000001f4: JUMPDEST 000001f5: CALLVALUE 000001f6: DUP1 000001f7: ISZERO 000001f8: PUSH2 0x0200 000001fb: JUMPI 000001fc: PUSH1 0x00 000001fe: DUP1 000001ff: REVERT 00000200: JUMPDEST 00000201: POP 00000202: PUSH2 0x011b 00000205: PUSH2 0x020f 00000208: CALLDATASIZE 00000209: PUSH1 0x04 0000020b: PUSH2 0x1287 0000020e: JUMP 0000020f: JUMPDEST 00000210: PUSH2 0x048e 00000213: JUMP 00000214: JUMPDEST 00000215: PUSH2 0x011b 00000218: PUSH2 0x0222 0000021b: CALLDATASIZE 0000021c: PUSH1 0x04 0000021e: PUSH2 0x136a 00000221: JUMP 00000222: JUMPDEST 00000223: PUSH2 0x04c6 00000226: JUMP 00000227: JUMPDEST 00000228: CALLVALUE 00000229: DUP1 0000022a: ISZERO 0000022b: PUSH2 0x0233 0000022e: JUMPI 0000022f: PUSH1 0x00 00000231: DUP1 00000232: REVERT 00000233: JUMPDEST 00000234: POP 00000235: PUSH2 0x01c6 00000238: PUSH2 0x04e5 0000023b: JUMP 0000023c: JUMPDEST 0000023d: CALLVALUE 0000023e: DUP1 0000023f: ISZERO 00000240: PUSH2 0x0248 00000243: JUMPI 00000244: PUSH1 0x00 00000246: DUP1 00000247: REVERT 00000248: JUMPDEST 00000249: POP 0000024a: PUSH2 0x011b 0000024d: PUSH2 0x0257 00000250: CALLDATASIZE 00000251: PUSH1 0x04 00000253: PUSH2 0x144b 00000256: JUMP 00000257: JUMPDEST 00000258: PUSH2 0x0502 0000025b: JUMP 0000025c: JUMPDEST 0000025d: CALLVALUE 0000025e: DUP1 0000025f: ISZERO 00000260: PUSH2 0x0268 00000263: JUMPI 00000264: PUSH1 0x00 00000266: DUP1 00000267: REVERT 00000268: JUMPDEST 00000269: POP 0000026a: PUSH2 0x011b 0000026d: PUSH2 0x0277 00000270: CALLDATASIZE 00000271: PUSH1 0x04 00000273: PUSH2 0x1252 00000276: JUMP 00000277: JUMPDEST 00000278: PUSH2 0x0631 0000027b: JUMP 0000027c: JUMPDEST 0000027d: CALLVALUE 0000027e: DUP1 0000027f: ISZERO 00000280: PUSH2 0x0288 00000283: JUMPI 00000284: PUSH1 0x00 00000286: DUP1 00000287: REVERT 00000288: JUMPDEST 00000289: POP 0000028a: PUSH2 0x011b 0000028d: PUSH2 0x0661 00000290: JUMP 00000291: JUMPDEST 00000292: CALLVALUE 00000293: DUP1 00000294: ISZERO 00000295: PUSH2 0x029d 00000298: JUMPI 00000299: PUSH1 0x00 0000029b: DUP1 0000029c: REVERT 0000029d: JUMPDEST 0000029e: POP 0000029f: PUSH2 0x0142 000002a2: PUSH2 0x02ac 000002a5: CALLDATASIZE 000002a6: PUSH1 0x04 000002a8: PUSH2 0x1287 000002ab: JUMP 000002ac: JUMPDEST 000002ad: PUSH2 0x078b 000002b0: JUMP 000002b1: JUMPDEST 000002b2: CALLVALUE 000002b3: DUP1 000002b4: ISZERO 000002b5: PUSH2 0x02bd 000002b8: JUMPI 000002b9: PUSH1 0x00 000002bb: DUP1 000002bc: REVERT 000002bd: JUMPDEST 000002be: POP 000002bf: PUSH2 0x01c6 000002c2: PUSH1 0x00 000002c4: DUP2 000002c5: JUMP 000002c6: JUMPDEST 000002c7: CALLVALUE 000002c8: DUP1 000002c9: ISZERO 000002ca: PUSH2 0x02d2 000002cd: JUMPI 000002ce: PUSH1 0x00 000002d0: DUP1 000002d1: REVERT 000002d2: JUMPDEST 000002d3: POP 000002d4: PUSH2 0x02f7 000002d7: PUSH1 0x40 000002d9: MLOAD 000002da: DUP1 000002db: PUSH1 0x40 000002dd: ADD 000002de: PUSH1 0x40 000002e0: MSTORE 000002e1: DUP1 000002e2: PUSH1 0x05 000002e4: DUP2 000002e5: MSTORE 000002e6: PUSH1 0x20 000002e8: ADD 000002e9: PUSH5 0x0352e302e3 000002ef: PUSH1 0xdc 000002f1: SHL 000002f2: DUP2 000002f3: MSTORE 000002f4: POP 000002f5: DUP2 000002f6: JUMP 000002f7: JUMPDEST 000002f8: PUSH1 0x40 000002fa: MLOAD 000002fb: PUSH2 0x014e 000002fe: SWAP2 000002ff: SWAP1 00000300: PUSH2 0x1581 00000303: JUMP 00000304: JUMPDEST 00000305: CALLVALUE 00000306: DUP1 00000307: ISZERO 00000308: PUSH2 0x0310 0000030b: JUMPI 0000030c: PUSH1 0x00 0000030e: DUP1 0000030f: REVERT 00000310: JUMPDEST 00000311: POP 00000312: PUSH2 0x01c6 00000315: PUSH32 0x21702c8af46127c7fa207f89d0b0a8441bb32959a0ac7df790e9ab1a25c98926 00000336: DUP2 00000337: JUMP 00000338: JUMPDEST 00000339: CALLVALUE 0000033a: DUP1 0000033b: ISZERO 0000033c: PUSH2 0x0344 0000033f: JUMPI 00000340: PUSH1 0x00 00000342: DUP1 00000343: REVERT 00000344: JUMPDEST 00000345: POP 00000346: PUSH32 0x0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd4209300 00000367: SLOAD 00000368: PUSH2 0x01c6 0000036b: JUMP 0000036c: JUMPDEST 0000036d: CALLVALUE 0000036e: DUP1 0000036f: ISZERO 00000370: PUSH2 0x0378 00000373: JUMPI 00000374: PUSH1 0x00 00000376: DUP1 00000377: REVERT 00000378: JUMPDEST 00000379: POP 0000037a: PUSH2 0x011b 0000037d: PUSH2 0x0387 00000380: CALLDATASIZE 00000381: PUSH1 0x04 00000383: PUSH2 0x1287 00000386: JUMP 00000387: JUMPDEST 00000388: PUSH2 0x07c3 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 0x011b 0000039d: PUSH2 0x07df 000003a0: JUMP 000003a1: JUMPDEST 000003a2: PUSH2 0x011b 000003a5: PUSH2 0x03af 000003a8: CALLDATASIZE 000003a9: PUSH1 0x04 000003ab: PUSH2 0x15b4 000003ae: JUMP 000003af: JUMPDEST 000003b0: CALLVALUE 000003b1: PUSH1 0x00 000003b3: SUB 000003b4: PUSH2 0x03d0 000003b7: JUMPI 000003b8: PUSH1 0x40 000003ba: MLOAD 000003bb: PUSH4 0x41abc801 000003c0: PUSH1 0xe0 000003c2: SHL 000003c3: DUP2 000003c4: MSTORE 000003c5: PUSH1 0x04 000003c7: ADD 000003c8: PUSH1 0x40 000003ca: MLOAD 000003cb: DUP1 000003cc: SWAP2 000003cd: SUB 000003ce: SWAP1 000003cf: REVERT 000003d0: JUMPDEST 000003d1: PUSH1 0x40 000003d3: MLOAD 000003d4: CALLVALUE 000003d5: DUP2 000003d6: MSTORE 000003d7: PUSH1 0x01 000003d9: PUSH1 0x01 000003db: PUSH1 0xa0 000003dd: SHL 000003de: SUB 000003df: DUP3 000003e0: AND 000003e1: SWAP1 000003e2: CALLER 000003e3: SWAP1 000003e4: PUSH32 0xb2d8c64c6b025b34c219301320c7cbc757fa77c134e652d33e449d9629735f53 00000405: SWAP1 00000406: PUSH1 0x20 00000408: ADD 00000409: PUSH1 0x40 0000040b: MLOAD 0000040c: DUP1 0000040d: SWAP2 0000040e: SUB 0000040f: SWAP1 00000410: LOG3 00000411: POP 00000412: JUMP 00000413: JUMPDEST 00000414: PUSH1 0x00 00000416: PUSH1 0x01 00000418: PUSH1 0x01 0000041a: PUSH1 0xe0 0000041c: SHL 0000041d: SUB 0000041e: NOT 0000041f: DUP3 00000420: AND 00000421: PUSH4 0x7965db0b 00000426: PUSH1 0xe0 00000428: SHL 00000429: EQ 0000042a: DUP1 0000042b: PUSH2 0x0444 0000042e: JUMPI 0000042f: POP 00000430: PUSH4 0x01ffc9a7 00000435: PUSH1 0xe0 00000437: SHL 00000438: PUSH1 0x01 0000043a: PUSH1 0x01 0000043c: PUSH1 0xe0 0000043e: SHL 0000043f: SUB 00000440: NOT 00000441: DUP4 00000442: AND 00000443: EQ 00000444: JUMPDEST 00000445: SWAP3 00000446: SWAP2 00000447: POP 00000448: POP 00000449: JUMP 0000044a: JUMPDEST 0000044b: PUSH1 0x00 0000044d: SWAP1 0000044e: DUP2 0000044f: MSTORE 00000450: PUSH1 0x00 00000452: DUP1 00000453: MLOAD 00000454: PUSH1 0x20 00000456: PUSH2 0x16a0 00000459: DUP4 0000045a: CODECOPY 0000045b: DUP2 0000045c: MLOAD 0000045d: SWAP2 0000045e: MSTORE 0000045f: PUSH1 0x20 00000461: MSTORE 00000462: PUSH1 0x40 00000464: SWAP1 00000465: KECCAK256 00000466: PUSH1 0x01 00000468: ADD 00000469: SLOAD 0000046a: SWAP1 0000046b: JUMP 0000046c: JUMPDEST 0000046d: PUSH2 0x0475 00000470: DUP3 00000471: PUSH2 0x044a 00000474: JUMP 00000475: JUMPDEST 00000476: PUSH2 0x047e 00000479: DUP2 0000047a: PUSH2 0x0816 0000047d: JUMP 0000047e: JUMPDEST 0000047f: PUSH2 0x0488 00000482: DUP4 00000483: DUP4 00000484: PUSH2 0x0823 00000487: JUMP 00000488: JUMPDEST 00000489: POP 0000048a: POP 0000048b: POP 0000048c: POP 0000048d: JUMP 0000048e: JUMPDEST 0000048f: PUSH1 0x01 00000491: PUSH1 0x01 00000493: PUSH1 0xa0 00000495: SHL 00000496: SUB 00000497: DUP2 00000498: AND 00000499: CALLER 0000049a: EQ 0000049b: PUSH2 0x04b7 0000049e: JUMPI 0000049f: PUSH1 0x40 000004a1: MLOAD 000004a2: PUSH4 0x334bd919 000004a7: PUSH1 0xe1 000004a9: SHL 000004aa: DUP2 000004ab: MSTORE 000004ac: PUSH1 0x04 000004ae: ADD 000004af: PUSH1 0x40 000004b1: MLOAD 000004b2: DUP1 000004b3: SWAP2 000004b4: SUB 000004b5: SWAP1 000004b6: REVERT 000004b7: JUMPDEST 000004b8: PUSH2 0x04c1 000004bb: DUP3 000004bc: DUP3 000004bd: PUSH2 0x08c8 000004c0: JUMP 000004c1: JUMPDEST 000004c2: POP 000004c3: POP 000004c4: POP 000004c5: JUMP 000004c6: JUMPDEST 000004c7: PUSH2 0x04ce 000004ca: PUSH2 0x0944 000004cd: JUMP 000004ce: JUMPDEST 000004cf: PUSH2 0x04d7 000004d2: DUP3 000004d3: PUSH2 0x09eb 000004d6: JUMP 000004d7: JUMPDEST 000004d8: PUSH2 0x04e1 000004db: DUP3 000004dc: DUP3 000004dd: PUSH2 0x09f6 000004e0: JUMP 000004e1: JUMPDEST 000004e2: POP 000004e3: POP 000004e4: JUMP 000004e5: JUMPDEST 000004e6: PUSH1 0x00 000004e8: PUSH2 0x04ef 000004eb: PUSH2 0x0ab8 000004ee: JUMP 000004ef: JUMPDEST 000004f0: POP 000004f1: PUSH1 0x00 000004f3: DUP1 000004f4: MLOAD 000004f5: PUSH1 0x20 000004f7: PUSH2 0x1680 000004fa: DUP4 000004fb: CODECOPY 000004fc: DUP2 000004fd: MLOAD 000004fe: SWAP2 000004ff: MSTORE 00000500: SWAP1 00000501: JUMP 00000502: JUMPDEST 00000503: PUSH32 0xf177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00 00000524: PUSH2 0x0530 00000527: DUP3 00000528: DUP7 00000529: DUP7 0000052a: DUP7 0000052b: ADDRESS 0000052c: PUSH2 0x0b01 0000052f: JUMP 00000530: JUMPDEST 00000531: PUSH1 0x00 00000533: DUP1 00000534: PUSH1 0x00 00000536: DUP1 00000537: PUSH2 0x053f 0000053a: DUP7 0000053b: PUSH2 0x0e25 0000053e: JUMP 0000053f: JUMPDEST 00000540: SWAP3 00000541: SWAP7 00000542: POP 00000543: SWAP1 00000544: SWAP5 00000545: POP 00000546: SWAP3 00000547: POP 00000548: SWAP1 00000549: POP 0000054a: PUSH1 0x01 0000054c: PUSH1 0x01 0000054e: PUSH1 0xa0 00000550: SHL 00000551: SUB 00000552: DUP2 00000553: AND 00000554: ADDRESS 00000555: EQ 00000556: PUSH2 0x0572 00000559: JUMPI 0000055a: PUSH1 0x40 0000055c: MLOAD 0000055d: PUSH4 0x412ce843 00000562: PUSH1 0xe0 00000564: SHL 00000565: DUP2 00000566: MSTORE 00000567: PUSH1 0x04 00000569: ADD 0000056a: PUSH1 0x40 0000056c: MLOAD 0000056d: DUP1 0000056e: SWAP2 0000056f: SUB 00000570: SWAP1 00000571: REVERT 00000572: JUMPDEST 00000573: PUSH1 0x00 00000575: DUP3 00000576: DUP2 00000577: MSTORE 00000578: PUSH1 0x20 0000057a: DUP7 0000057b: SWAP1 0000057c: MSTORE 0000057d: PUSH1 0x40 0000057f: SWAP1 00000580: KECCAK256 00000581: SLOAD 00000582: PUSH1 0xff 00000584: AND 00000585: ISZERO 00000586: PUSH2 0x05a2 00000589: JUMPI 0000058a: PUSH1 0x40 0000058c: MLOAD 0000058d: PUSH4 0xd0ebeb4b 00000592: PUSH1 0xe0 00000594: SHL 00000595: DUP2 00000596: MSTORE 00000597: PUSH1 0x04 00000599: ADD 0000059a: PUSH1 0x40 0000059c: MLOAD 0000059d: DUP1 0000059e: SWAP2 0000059f: SUB 000005a0: SWAP1 000005a1: REVERT 000005a2: JUMPDEST 000005a3: PUSH1 0x00 000005a5: DUP3 000005a6: DUP2 000005a7: MSTORE 000005a8: PUSH1 0x20 000005aa: DUP7 000005ab: SWAP1 000005ac: MSTORE 000005ad: PUSH1 0x40 000005af: SWAP1 000005b0: KECCAK256 000005b1: DUP1 000005b2: SLOAD 000005b3: PUSH1 0xff 000005b5: NOT 000005b6: AND 000005b7: PUSH1 0x01 000005b9: OR 000005ba: SWAP1 000005bb: SSTORE 000005bc: PUSH2 0x05c5 000005bf: DUP5 000005c0: DUP5 000005c1: PUSH2 0x0e7f 000005c4: JUMP 000005c5: JUMPDEST 000005c6: PUSH2 0x05e2 000005c9: JUMPI 000005ca: PUSH1 0x40 000005cc: MLOAD 000005cd: PUSH4 0x12171d83 000005d2: PUSH1 0xe3 000005d4: SHL 000005d5: DUP2 000005d6: MSTORE 000005d7: PUSH1 0x04 000005d9: ADD 000005da: PUSH1 0x40 000005dc: MLOAD 000005dd: DUP1 000005de: SWAP2 000005df: SUB 000005e0: SWAP1 000005e1: REVERT 000005e2: JUMPDEST 000005e3: PUSH1 0x40 000005e5: DUP1 000005e6: MLOAD 000005e7: DUP5 000005e8: DUP2 000005e9: MSTORE 000005ea: PUSH1 0x20 000005ec: DUP2 000005ed: ADD 000005ee: DUP5 000005ef: SWAP1 000005f0: MSTORE 000005f1: PUSH1 0x01 000005f3: PUSH1 0x01 000005f5: PUSH1 0xa0 000005f7: SHL 000005f8: SUB 000005f9: DUP7 000005fa: AND 000005fb: SWAP2 000005fc: PUSH32 0x3b3ea932258c0790aa2c649875c0051f6eedd02c64674181babf9ecf6611f6aa 0000061d: SWAP2 0000061e: ADD 0000061f: PUSH1 0x40 00000621: MLOAD 00000622: DUP1 00000623: SWAP2 00000624: SUB 00000625: SWAP1 00000626: LOG2 00000627: POP 00000628: POP 00000629: POP 0000062a: POP 0000062b: POP 0000062c: POP 0000062d: POP 0000062e: POP 0000062f: POP 00000630: JUMP 00000631: JUMPDEST 00000632: PUSH1 0x00 00000634: PUSH2 0x063c 00000637: DUP2 00000638: PUSH2 0x0816 0000063b: JUMP 0000063c: JUMPDEST 0000063d: POP 0000063e: PUSH32 0x0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd4209300 0000065f: SSTORE 00000660: JUMP 00000661: JUMPDEST 00000662: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 00000683: DUP1 00000684: SLOAD 00000685: PUSH1 0x01 00000687: PUSH1 0x40 00000689: SHL 0000068a: DUP2 0000068b: DIV 0000068c: PUSH1 0xff 0000068e: AND 0000068f: ISZERO 00000690: SWAP1 00000691: PUSH8 0xffffffffffffffff 0000069a: AND 0000069b: PUSH1 0x00 0000069d: DUP2 0000069e: ISZERO 0000069f: DUP1 000006a0: ISZERO 000006a1: PUSH2 0x06a7 000006a4: JUMPI 000006a5: POP 000006a6: DUP3 000006a7: JUMPDEST 000006a8: SWAP1 000006a9: POP 000006aa: PUSH1 0x00 000006ac: DUP3 000006ad: PUSH8 0xffffffffffffffff 000006b6: AND 000006b7: PUSH1 0x01 000006b9: EQ 000006ba: DUP1 000006bb: ISZERO 000006bc: PUSH2 0x06c4 000006bf: JUMPI 000006c0: POP 000006c1: ADDRESS 000006c2: EXTCODESIZE 000006c3: ISZERO 000006c4: JUMPDEST 000006c5: SWAP1 000006c6: POP 000006c7: DUP2 000006c8: ISZERO 000006c9: DUP1 000006ca: ISZERO 000006cb: PUSH2 0x06d2 000006ce: JUMPI 000006cf: POP 000006d0: DUP1 000006d1: ISZERO 000006d2: JUMPDEST 000006d3: ISZERO 000006d4: PUSH2 0x06f0 000006d7: JUMPI 000006d8: PUSH1 0x40 000006da: MLOAD 000006db: PUSH4 0xf92ee8a9 000006e0: PUSH1 0xe0 000006e2: SHL 000006e3: DUP2 000006e4: MSTORE 000006e5: PUSH1 0x04 000006e7: ADD 000006e8: PUSH1 0x40 000006ea: MLOAD 000006eb: DUP1 000006ec: SWAP2 000006ed: SUB 000006ee: SWAP1 000006ef: REVERT 000006f0: JUMPDEST 000006f1: DUP5 000006f2: SLOAD 000006f3: PUSH8 0xffffffffffffffff 000006fc: NOT 000006fd: AND 000006fe: PUSH1 0x01 00000700: OR 00000701: DUP6 00000702: SSTORE 00000703: DUP4 00000704: ISZERO 00000705: PUSH2 0x071a 00000708: JUMPI 00000709: DUP5 0000070a: SLOAD 0000070b: PUSH1 0xff 0000070d: PUSH1 0x40 0000070f: SHL 00000710: NOT 00000711: AND 00000712: PUSH1 0x01 00000714: PUSH1 0x40 00000716: SHL 00000717: OR 00000718: DUP6 00000719: SSTORE 0000071a: JUMPDEST 0000071b: PUSH2 0x0722 0000071e: PUSH2 0x0edd 00000721: JUMP 00000722: JUMPDEST 00000723: PUSH2 0x072a 00000726: PUSH2 0x0ee9 00000729: JUMP 0000072a: JUMPDEST 0000072b: PUSH2 0x0732 0000072e: PUSH2 0x0ee9 00000731: JUMP 00000732: JUMPDEST 00000733: PUSH2 0x073d 00000736: PUSH1 0x00 00000738: CALLER 00000739: PUSH2 0x0823 0000073c: JUMP 0000073d: JUMPDEST 0000073e: POP 0000073f: DUP4 00000740: ISZERO 00000741: PUSH2 0x0784 00000744: JUMPI 00000745: DUP5 00000746: SLOAD 00000747: PUSH1 0xff 00000749: PUSH1 0x40 0000074b: SHL 0000074c: NOT 0000074d: AND 0000074e: DUP6 0000074f: SSTORE 00000750: PUSH1 0x40 00000752: MLOAD 00000753: PUSH1 0x01 00000755: DUP2 00000756: MSTORE 00000757: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 00000778: SWAP1 00000779: PUSH1 0x20 0000077b: ADD 0000077c: PUSH1 0x40 0000077e: MLOAD 0000077f: DUP1 00000780: SWAP2 00000781: SUB 00000782: SWAP1 00000783: LOG1 00000784: JUMPDEST 00000785: POP 00000786: POP 00000787: POP 00000788: POP 00000789: POP 0000078a: JUMP 0000078b: JUMPDEST 0000078c: PUSH1 0x00 0000078e: SWAP2 0000078f: DUP3 00000790: MSTORE 00000791: PUSH1 0x00 00000793: DUP1 00000794: MLOAD 00000795: PUSH1 0x20 00000797: PUSH2 0x16a0 0000079a: DUP4 0000079b: CODECOPY 0000079c: DUP2 0000079d: MLOAD 0000079e: SWAP2 0000079f: MSTORE 000007a0: PUSH1 0x20 000007a2: SWAP1 000007a3: DUP2 000007a4: MSTORE 000007a5: PUSH1 0x40 000007a7: DUP1 000007a8: DUP5 000007a9: KECCAK256 000007aa: PUSH1 0x01 000007ac: PUSH1 0x01 000007ae: PUSH1 0xa0 000007b0: SHL 000007b1: SUB 000007b2: SWAP4 000007b3: SWAP1 000007b4: SWAP4 000007b5: AND 000007b6: DUP5 000007b7: MSTORE 000007b8: SWAP2 000007b9: SWAP1 000007ba: MSTORE 000007bb: SWAP1 000007bc: KECCAK256 000007bd: SLOAD 000007be: PUSH1 0xff 000007c0: AND 000007c1: SWAP1 000007c2: JUMP 000007c3: JUMPDEST 000007c4: PUSH2 0x07cc 000007c7: DUP3 000007c8: PUSH2 0x044a 000007cb: JUMP 000007cc: JUMPDEST 000007cd: PUSH2 0x07d5 000007d0: DUP2 000007d1: PUSH2 0x0816 000007d4: JUMP 000007d5: JUMPDEST 000007d6: PUSH2 0x0488 000007d9: DUP4 000007da: DUP4 000007db: PUSH2 0x08c8 000007de: JUMP 000007df: JUMPDEST 000007e0: PUSH1 0x00 000007e2: PUSH2 0x07ea 000007e5: DUP2 000007e6: PUSH2 0x0816 000007e9: JUMP 000007ea: JUMPDEST 000007eb: PUSH1 0x40 000007ed: MLOAD 000007ee: CALLER 000007ef: SWAP1 000007f0: SELFBALANCE 000007f1: DUP1 000007f2: ISZERO 000007f3: PUSH2 0x08fc 000007f6: MUL 000007f7: SWAP2 000007f8: PUSH1 0x00 000007fa: DUP2 000007fb: DUP2 000007fc: DUP2 000007fd: DUP6 000007fe: DUP9 000007ff: DUP9 00000800: CALL 00000801: SWAP4 00000802: POP 00000803: POP 00000804: POP 00000805: POP 00000806: ISZERO 00000807: DUP1 00000808: ISZERO 00000809: PUSH2 0x04e1 0000080c: JUMPI 0000080d: RETURNDATASIZE 0000080e: PUSH1 0x00 00000810: DUP1 00000811: RETURNDATACOPY 00000812: RETURNDATASIZE 00000813: PUSH1 0x00 00000815: REVERT 00000816: JUMPDEST 00000817: PUSH2 0x0820 0000081a: DUP2 0000081b: CALLER 0000081c: PUSH2 0x0ef1 0000081f: JUMP 00000820: JUMPDEST 00000821: POP 00000822: JUMP 00000823: JUMPDEST 00000824: PUSH1 0x00 00000826: PUSH1 0x00 00000828: DUP1 00000829: MLOAD 0000082a: PUSH1 0x20 0000082c: PUSH2 0x16a0 0000082f: DUP4 00000830: CODECOPY 00000831: DUP2 00000832: MLOAD 00000833: SWAP2 00000834: MSTORE 00000835: PUSH2 0x083e 00000838: DUP5 00000839: DUP5 0000083a: PUSH2 0x078b 0000083d: JUMP 0000083e: JUMPDEST 0000083f: PUSH2 0x08be 00000842: JUMPI 00000843: PUSH1 0x00 00000845: DUP5 00000846: DUP2 00000847: MSTORE 00000848: PUSH1 0x20 0000084a: DUP3 0000084b: DUP2 0000084c: MSTORE 0000084d: PUSH1 0x40 0000084f: DUP1 00000850: DUP4 00000851: KECCAK256 00000852: PUSH1 0x01 00000854: PUSH1 0x01 00000856: PUSH1 0xa0 00000858: SHL 00000859: SUB 0000085a: DUP8 0000085b: AND 0000085c: DUP5 0000085d: MSTORE 0000085e: SWAP1 0000085f: SWAP2 00000860: MSTORE 00000861: SWAP1 00000862: KECCAK256 00000863: DUP1 00000864: SLOAD 00000865: PUSH1 0xff 00000867: NOT 00000868: AND 00000869: PUSH1 0x01 0000086b: OR 0000086c: SWAP1 0000086d: SSTORE 0000086e: PUSH2 0x0874 00000871: CALLER 00000872: SWAP1 00000873: JUMP 00000874: JUMPDEST 00000875: PUSH1 0x01 00000877: PUSH1 0x01 00000879: PUSH1 0xa0 0000087b: SHL 0000087c: SUB 0000087d: AND 0000087e: DUP4 0000087f: PUSH1 0x01 00000881: PUSH1 0x01 00000883: PUSH1 0xa0 00000885: SHL 00000886: SUB 00000887: AND 00000888: DUP6 00000889: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d 000008aa: PUSH1 0x40 000008ac: MLOAD 000008ad: PUSH1 0x40 000008af: MLOAD 000008b0: DUP1 000008b1: SWAP2 000008b2: SUB 000008b3: SWAP1 000008b4: LOG4 000008b5: PUSH1 0x01 000008b7: SWAP2 000008b8: POP 000008b9: POP 000008ba: PUSH2 0x0444 000008bd: JUMP 000008be: JUMPDEST 000008bf: PUSH1 0x00 000008c1: SWAP2 000008c2: POP 000008c3: POP 000008c4: PUSH2 0x0444 000008c7: JUMP 000008c8: JUMPDEST 000008c9: PUSH1 0x00 000008cb: PUSH1 0x00 000008cd: DUP1 000008ce: MLOAD 000008cf: PUSH1 0x20 000008d1: PUSH2 0x16a0 000008d4: DUP4 000008d5: CODECOPY 000008d6: DUP2 000008d7: MLOAD 000008d8: SWAP2 000008d9: MSTORE 000008da: PUSH2 0x08e3 000008dd: DUP5 000008de: DUP5 000008df: PUSH2 0x078b 000008e2: JUMP 000008e3: JUMPDEST 000008e4: ISZERO 000008e5: PUSH2 0x08be 000008e8: JUMPI 000008e9: PUSH1 0x00 000008eb: DUP5 000008ec: DUP2 000008ed: MSTORE 000008ee: PUSH1 0x20 000008f0: DUP3 000008f1: DUP2 000008f2: MSTORE 000008f3: PUSH1 0x40 000008f5: DUP1 000008f6: DUP4 000008f7: KECCAK256 000008f8: PUSH1 0x01 000008fa: PUSH1 0x01 000008fc: PUSH1 0xa0 000008fe: SHL 000008ff: SUB 00000900: DUP8 00000901: AND 00000902: DUP1 00000903: DUP6 00000904: MSTORE 00000905: SWAP3 00000906: MSTORE 00000907: DUP1 00000908: DUP4 00000909: KECCAK256 0000090a: DUP1 0000090b: SLOAD 0000090c: PUSH1 0xff 0000090e: NOT 0000090f: AND 00000910: SWAP1 00000911: SSTORE 00000912: MLOAD 00000913: CALLER 00000914: SWAP3 00000915: DUP8 00000916: SWAP2 00000917: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b 00000938: SWAP2 00000939: SWAP1 0000093a: LOG4 0000093b: PUSH1 0x01 0000093d: SWAP2 0000093e: POP 0000093f: POP 00000940: PUSH2 0x0444 00000943: JUMP 00000944: JUMPDEST 00000945: ADDRESS 00000946: PUSH1 0x01 00000948: PUSH1 0x01 0000094a: PUSH1 0xa0 0000094c: SHL 0000094d: SUB 0000094e: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca 0000096f: AND 00000970: EQ 00000971: DUP1 00000972: PUSH2 0x09cb 00000975: JUMPI 00000976: POP 00000977: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca 00000998: PUSH1 0x01 0000099a: PUSH1 0x01 0000099c: PUSH1 0xa0 0000099e: SHL 0000099f: SUB 000009a0: AND 000009a1: PUSH2 0x09bf 000009a4: PUSH1 0x00 000009a6: DUP1 000009a7: MLOAD 000009a8: PUSH1 0x20 000009aa: PUSH2 0x1680 000009ad: DUP4 000009ae: CODECOPY 000009af: DUP2 000009b0: MLOAD 000009b1: SWAP2 000009b2: MSTORE 000009b3: SLOAD 000009b4: PUSH1 0x01 000009b6: PUSH1 0x01 000009b8: PUSH1 0xa0 000009ba: SHL 000009bb: SUB 000009bc: AND 000009bd: SWAP1 000009be: JUMP 000009bf: JUMPDEST 000009c0: PUSH1 0x01 000009c2: PUSH1 0x01 000009c4: PUSH1 0xa0 000009c6: SHL 000009c7: SUB 000009c8: AND 000009c9: EQ 000009ca: ISZERO 000009cb: JUMPDEST 000009cc: ISZERO 000009cd: PUSH2 0x09e9 000009d0: JUMPI 000009d1: PUSH1 0x40 000009d3: MLOAD 000009d4: PUSH4 0x703e46dd 000009d9: PUSH1 0xe1 000009db: SHL 000009dc: DUP2 000009dd: MSTORE 000009de: PUSH1 0x04 000009e0: ADD 000009e1: PUSH1 0x40 000009e3: MLOAD 000009e4: DUP1 000009e5: SWAP2 000009e6: SUB 000009e7: SWAP1 000009e8: REVERT 000009e9: JUMPDEST 000009ea: JUMP 000009eb: JUMPDEST 000009ec: PUSH1 0x00 000009ee: PUSH2 0x04e1 000009f1: DUP2 000009f2: PUSH2 0x0816 000009f5: JUMP 000009f6: JUMPDEST 000009f7: DUP2 000009f8: PUSH1 0x01 000009fa: PUSH1 0x01 000009fc: PUSH1 0xa0 000009fe: SHL 000009ff: SUB 00000a00: AND 00000a01: PUSH4 0x52d1902d 00000a06: PUSH1 0x40 00000a08: MLOAD 00000a09: DUP2 00000a0a: PUSH4 0xffffffff 00000a0f: AND 00000a10: PUSH1 0xe0 00000a12: SHL 00000a13: DUP2 00000a14: MSTORE 00000a15: PUSH1 0x04 00000a17: ADD 00000a18: PUSH1 0x20 00000a1a: PUSH1 0x40 00000a1c: MLOAD 00000a1d: DUP1 00000a1e: DUP4 00000a1f: SUB 00000a20: DUP2 00000a21: DUP7 00000a22: GAS 00000a23: STATICCALL 00000a24: SWAP3 00000a25: POP 00000a26: POP 00000a27: POP 00000a28: DUP1 00000a29: ISZERO 00000a2a: PUSH2 0x0a50 00000a2d: JUMPI 00000a2e: POP 00000a2f: PUSH1 0x40 00000a31: DUP1 00000a32: MLOAD 00000a33: PUSH1 0x1f 00000a35: RETURNDATASIZE 00000a36: SWAP1 00000a37: DUP2 00000a38: ADD 00000a39: PUSH1 0x1f 00000a3b: NOT 00000a3c: AND 00000a3d: DUP3 00000a3e: ADD 00000a3f: SWAP1 00000a40: SWAP3 00000a41: MSTORE 00000a42: PUSH2 0x0a4d 00000a45: SWAP2 00000a46: DUP2 00000a47: ADD 00000a48: SWAP1 00000a49: PUSH2 0x15cf 00000a4c: JUMP 00000a4d: JUMPDEST 00000a4e: PUSH1 0x01 00000a50: JUMPDEST 00000a51: PUSH2 0x0a7d 00000a54: JUMPI 00000a55: PUSH1 0x40 00000a57: MLOAD 00000a58: PUSH4 0x4c9c8ce3 00000a5d: PUSH1 0xe0 00000a5f: SHL 00000a60: DUP2 00000a61: MSTORE 00000a62: PUSH1 0x01 00000a64: PUSH1 0x01 00000a66: PUSH1 0xa0 00000a68: SHL 00000a69: SUB 00000a6a: DUP4 00000a6b: AND 00000a6c: PUSH1 0x04 00000a6e: DUP3 00000a6f: ADD 00000a70: MSTORE 00000a71: PUSH1 0x24 00000a73: ADD 00000a74: JUMPDEST 00000a75: PUSH1 0x40 00000a77: MLOAD 00000a78: DUP1 00000a79: SWAP2 00000a7a: SUB 00000a7b: SWAP1 00000a7c: REVERT 00000a7d: JUMPDEST 00000a7e: PUSH1 0x00 00000a80: DUP1 00000a81: MLOAD 00000a82: PUSH1 0x20 00000a84: PUSH2 0x1680 00000a87: DUP4 00000a88: CODECOPY 00000a89: DUP2 00000a8a: MLOAD 00000a8b: SWAP2 00000a8c: MSTORE 00000a8d: DUP2 00000a8e: EQ 00000a8f: PUSH2 0x0aae 00000a92: JUMPI 00000a93: PUSH1 0x40 00000a95: MLOAD 00000a96: PUSH4 0x2a875269 00000a9b: PUSH1 0xe2 00000a9d: SHL 00000a9e: DUP2 00000a9f: MSTORE 00000aa0: PUSH1 0x04 00000aa2: DUP2 00000aa3: ADD 00000aa4: DUP3 00000aa5: SWAP1 00000aa6: MSTORE 00000aa7: PUSH1 0x24 00000aa9: ADD 00000aaa: PUSH2 0x0a74 00000aad: JUMP 00000aae: JUMPDEST 00000aaf: PUSH2 0x04c1 00000ab2: DUP4 00000ab3: DUP4 00000ab4: PUSH2 0x0f2a 00000ab7: JUMP 00000ab8: JUMPDEST 00000ab9: ADDRESS 00000aba: PUSH1 0x01 00000abc: PUSH1 0x01 00000abe: PUSH1 0xa0 00000ac0: SHL 00000ac1: SUB 00000ac2: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca 00000ae3: AND 00000ae4: EQ 00000ae5: PUSH2 0x09e9 00000ae8: JUMPI 00000ae9: PUSH1 0x40 00000aeb: MLOAD 00000aec: PUSH4 0x703e46dd 00000af1: PUSH1 0xe1 00000af3: SHL 00000af4: DUP2 00000af5: MSTORE 00000af6: PUSH1 0x04 00000af8: ADD 00000af9: PUSH1 0x40 00000afb: MLOAD 00000afc: DUP1 00000afd: SWAP2 00000afe: SUB 00000aff: SWAP1 00000b00: REVERT 00000b01: JUMPDEST 00000b02: DUP5 00000b03: MLOAD 00000b04: PUSH1 0x68 00000b06: EQ 00000b07: PUSH2 0x0b23 00000b0a: JUMPI 00000b0b: PUSH1 0x40 00000b0d: MLOAD 00000b0e: PUSH4 0x6eca2e4b 00000b13: PUSH1 0xe0 00000b15: SHL 00000b16: DUP2 00000b17: MSTORE 00000b18: PUSH1 0x04 00000b1a: ADD 00000b1b: PUSH1 0x40 00000b1d: MLOAD 00000b1e: DUP1 00000b1f: SWAP2 00000b20: SUB 00000b21: SWAP1 00000b22: REVERT 00000b23: JUMPDEST 00000b24: PUSH1 0x00 00000b26: DUP2 00000b27: PUSH1 0x01 00000b29: PUSH1 0x01 00000b2b: PUSH1 0xa0 00000b2d: SHL 00000b2e: SUB 00000b2f: AND 00000b30: PUSH4 0xccd93998 00000b35: PUSH1 0x40 00000b37: MLOAD 00000b38: DUP2 00000b39: PUSH4 0xffffffff 00000b3e: AND 00000b3f: PUSH1 0xe0 00000b41: SHL 00000b42: DUP2 00000b43: MSTORE 00000b44: PUSH1 0x04 00000b46: ADD 00000b47: PUSH1 0x20 00000b49: PUSH1 0x40 00000b4b: MLOAD 00000b4c: DUP1 00000b4d: DUP4 00000b4e: SUB 00000b4f: DUP2 00000b50: DUP7 00000b51: GAS 00000b52: STATICCALL 00000b53: ISZERO 00000b54: DUP1 00000b55: ISZERO 00000b56: PUSH2 0x0b63 00000b59: JUMPI 00000b5a: RETURNDATASIZE 00000b5b: PUSH1 0x00 00000b5d: DUP1 00000b5e: RETURNDATACOPY 00000b5f: RETURNDATASIZE 00000b60: PUSH1 0x00 00000b62: REVERT 00000b63: JUMPDEST 00000b64: POP 00000b65: POP 00000b66: POP 00000b67: POP 00000b68: PUSH1 0x40 00000b6a: MLOAD 00000b6b: RETURNDATASIZE 00000b6c: PUSH1 0x1f 00000b6e: NOT 00000b6f: PUSH1 0x1f 00000b71: DUP3 00000b72: ADD 00000b73: AND 00000b74: DUP3 00000b75: ADD 00000b76: DUP1 00000b77: PUSH1 0x40 00000b79: MSTORE 00000b7a: POP 00000b7b: DUP2 00000b7c: ADD 00000b7d: SWAP1 00000b7e: PUSH2 0x0b87 00000b81: SWAP2 00000b82: SWAP1 00000b83: PUSH2 0x15cf 00000b86: JUMP 00000b87: JUMPDEST 00000b88: SWAP1 00000b89: POP 00000b8a: DUP1 00000b8b: DUP6 00000b8c: MLOAD 00000b8d: LT 00000b8e: ISZERO 00000b8f: PUSH2 0x0bab 00000b92: JUMPI 00000b93: PUSH1 0x40 00000b95: MLOAD 00000b96: PUSH4 0x22e5ce43 00000b9b: PUSH1 0xe2 00000b9d: SHL 00000b9e: DUP2 00000b9f: MSTORE 00000ba0: PUSH1 0x04 00000ba2: ADD 00000ba3: PUSH1 0x40 00000ba5: MLOAD 00000ba6: DUP1 00000ba7: SWAP2 00000ba8: SUB 00000ba9: SWAP1 00000baa: REVERT 00000bab: JUMPDEST 00000bac: PUSH1 0x00 00000bae: PUSH2 0x0bb6 00000bb1: DUP8 00000bb2: PUSH2 0x0f80 00000bb5: JUMP 00000bb6: JUMPDEST 00000bb7: SWAP1 00000bb8: POP 00000bb9: PUSH1 0x00 00000bbb: DUP3 00000bbc: PUSH8 0xffffffffffffffff 00000bc5: DUP2 00000bc6: GT 00000bc7: ISZERO 00000bc8: PUSH2 0x0bd3 00000bcb: JUMPI 00000bcc: PUSH2 0x0bd3 00000bcf: PUSH2 0x12b3 00000bd2: JUMP 00000bd3: JUMPDEST 00000bd4: PUSH1 0x40 00000bd6: MLOAD 00000bd7: SWAP1 00000bd8: DUP1 00000bd9: DUP3 00000bda: MSTORE 00000bdb: DUP1 00000bdc: PUSH1 0x20 00000bde: MUL 00000bdf: PUSH1 0x20 00000be1: ADD 00000be2: DUP3 00000be3: ADD 00000be4: PUSH1 0x40 00000be6: MSTORE 00000be7: DUP1 00000be8: ISZERO 00000be9: PUSH2 0x0bfc 00000bec: JUMPI 00000bed: DUP2 00000bee: PUSH1 0x20 00000bf0: ADD 00000bf1: PUSH1 0x20 00000bf3: DUP3 00000bf4: MUL 00000bf5: DUP1 00000bf6: CALLDATASIZE 00000bf7: DUP4 00000bf8: CALLDATACOPY 00000bf9: ADD 00000bfa: SWAP1 00000bfb: POP 00000bfc: JUMPDEST 00000bfd: POP 00000bfe: SWAP1 00000bff: POP 00000c00: PUSH1 0x00 00000c02: JUMPDEST 00000c03: DUP4 00000c04: DUP2 00000c05: LT 00000c06: ISZERO 00000c07: PUSH2 0x0e1a 00000c0a: JUMPI 00000c0b: PUSH1 0x00 00000c0d: PUSH1 0x01 00000c0f: DUP5 00000c10: DUP11 00000c11: DUP5 00000c12: DUP2 00000c13: MLOAD 00000c14: DUP2 00000c15: LT 00000c16: PUSH2 0x0c21 00000c19: JUMPI 00000c1a: PUSH2 0x0c21 00000c1d: PUSH2 0x15e8 00000c20: JUMP 00000c21: JUMPDEST 00000c22: PUSH1 0x20 00000c24: MUL 00000c25: PUSH1 0x20 00000c27: ADD 00000c28: ADD 00000c29: MLOAD 00000c2a: DUP11 00000c2b: DUP6 00000c2c: DUP2 00000c2d: MLOAD 00000c2e: DUP2 00000c2f: LT 00000c30: PUSH2 0x0c3b 00000c33: JUMPI 00000c34: PUSH2 0x0c3b 00000c37: PUSH2 0x15e8 00000c3a: JUMP 00000c3b: JUMPDEST 00000c3c: PUSH1 0x20 00000c3e: MUL 00000c3f: PUSH1 0x20 00000c41: ADD 00000c42: ADD 00000c43: MLOAD 00000c44: DUP11 00000c45: DUP7 00000c46: DUP2 00000c47: MLOAD 00000c48: DUP2 00000c49: LT 00000c4a: PUSH2 0x0c55 00000c4d: JUMPI 00000c4e: PUSH2 0x0c55 00000c51: PUSH2 0x15e8 00000c54: JUMP 00000c55: JUMPDEST 00000c56: PUSH1 0x20 00000c58: MUL 00000c59: PUSH1 0x20 00000c5b: ADD 00000c5c: ADD 00000c5d: MLOAD 00000c5e: PUSH1 0x40 00000c60: MLOAD 00000c61: PUSH1 0x00 00000c63: DUP2 00000c64: MSTORE 00000c65: PUSH1 0x20 00000c67: ADD 00000c68: PUSH1 0x40 00000c6a: MSTORE 00000c6b: PUSH1 0x40 00000c6d: MLOAD 00000c6e: PUSH2 0x0c93 00000c71: SWAP5 00000c72: SWAP4 00000c73: SWAP3 00000c74: SWAP2 00000c75: SWAP1 00000c76: SWAP4 00000c77: DUP5 00000c78: MSTORE 00000c79: PUSH1 0xff 00000c7b: SWAP3 00000c7c: SWAP1 00000c7d: SWAP3 00000c7e: AND 00000c7f: PUSH1 0x20 00000c81: DUP5 00000c82: ADD 00000c83: MSTORE 00000c84: PUSH1 0x40 00000c86: DUP4 00000c87: ADD 00000c88: MSTORE 00000c89: PUSH1 0x60 00000c8b: DUP3 00000c8c: ADD 00000c8d: MSTORE 00000c8e: PUSH1 0x80 00000c90: ADD 00000c91: SWAP1 00000c92: JUMP 00000c93: JUMPDEST 00000c94: PUSH1 0x20 00000c96: PUSH1 0x40 00000c98: MLOAD 00000c99: PUSH1 0x20 00000c9b: DUP2 00000c9c: SUB 00000c9d: SWAP1 00000c9e: DUP1 00000c9f: DUP5 00000ca0: SUB 00000ca1: SWAP1 00000ca2: DUP6 00000ca3: GAS 00000ca4: STATICCALL 00000ca5: ISZERO 00000ca6: DUP1 00000ca7: ISZERO 00000ca8: PUSH2 0x0cb5 00000cab: JUMPI 00000cac: RETURNDATASIZE 00000cad: PUSH1 0x00 00000caf: DUP1 00000cb0: RETURNDATACOPY 00000cb1: RETURNDATASIZE 00000cb2: PUSH1 0x00 00000cb4: REVERT 00000cb5: JUMPDEST 00000cb6: POP 00000cb7: POP 00000cb8: POP 00000cb9: PUSH1 0x20 00000cbb: PUSH1 0x40 00000cbd: MLOAD 00000cbe: SUB 00000cbf: MLOAD 00000cc0: SWAP1 00000cc1: POP 00000cc2: DUP6 00000cc3: PUSH1 0x01 00000cc5: PUSH1 0x01 00000cc7: PUSH1 0xa0 00000cc9: SHL 00000cca: SUB 00000ccb: AND 00000ccc: PUSH4 0x91d14854 00000cd1: DUP8 00000cd2: PUSH1 0x01 00000cd4: PUSH1 0x01 00000cd6: PUSH1 0xa0 00000cd8: SHL 00000cd9: SUB 00000cda: AND 00000cdb: PUSH4 0xc49baebe 00000ce0: PUSH1 0x40 00000ce2: MLOAD 00000ce3: DUP2 00000ce4: PUSH4 0xffffffff 00000ce9: AND 00000cea: PUSH1 0xe0 00000cec: SHL 00000ced: DUP2 00000cee: MSTORE 00000cef: PUSH1 0x04 00000cf1: ADD 00000cf2: PUSH1 0x20 00000cf4: PUSH1 0x40 00000cf6: MLOAD 00000cf7: DUP1 00000cf8: DUP4 00000cf9: SUB 00000cfa: DUP2 00000cfb: DUP7 00000cfc: GAS 00000cfd: STATICCALL 00000cfe: ISZERO 00000cff: DUP1 00000d00: ISZERO 00000d01: PUSH2 0x0d0e 00000d04: JUMPI 00000d05: RETURNDATASIZE 00000d06: PUSH1 0x00 00000d08: DUP1 00000d09: RETURNDATACOPY 00000d0a: RETURNDATASIZE 00000d0b: PUSH1 0x00 00000d0d: REVERT 00000d0e: JUMPDEST 00000d0f: POP 00000d10: POP 00000d11: POP 00000d12: POP 00000d13: PUSH1 0x40 00000d15: MLOAD 00000d16: RETURNDATASIZE 00000d17: PUSH1 0x1f 00000d19: NOT 00000d1a: PUSH1 0x1f 00000d1c: DUP3 00000d1d: ADD 00000d1e: AND 00000d1f: DUP3 00000d20: ADD 00000d21: DUP1 00000d22: PUSH1 0x40 00000d24: MSTORE 00000d25: POP 00000d26: DUP2 00000d27: ADD 00000d28: SWAP1 00000d29: PUSH2 0x0d32 00000d2c: SWAP2 00000d2d: SWAP1 00000d2e: PUSH2 0x15cf 00000d31: JUMP 00000d32: JUMPDEST 00000d33: PUSH1 0x40 00000d35: MLOAD 00000d36: PUSH1 0x01 00000d38: PUSH1 0x01 00000d3a: PUSH1 0xe0 00000d3c: SHL 00000d3d: SUB 00000d3e: NOT 00000d3f: PUSH1 0xe0 00000d41: DUP5 00000d42: SWAP1 00000d43: SHL 00000d44: AND 00000d45: DUP2 00000d46: MSTORE 00000d47: PUSH1 0x04 00000d49: DUP2 00000d4a: ADD 00000d4b: SWAP2 00000d4c: SWAP1 00000d4d: SWAP2 00000d4e: MSTORE 00000d4f: PUSH1 0x01 00000d51: PUSH1 0x01 00000d53: PUSH1 0xa0 00000d55: SHL 00000d56: SUB 00000d57: DUP5 00000d58: AND 00000d59: PUSH1 0x24 00000d5b: DUP3 00000d5c: ADD 00000d5d: MSTORE 00000d5e: PUSH1 0x44 00000d60: ADD 00000d61: PUSH1 0x20 00000d63: PUSH1 0x40 00000d65: MLOAD 00000d66: DUP1 00000d67: DUP4 00000d68: SUB 00000d69: DUP2 00000d6a: DUP7 00000d6b: GAS 00000d6c: STATICCALL 00000d6d: ISZERO 00000d6e: DUP1 00000d6f: ISZERO 00000d70: PUSH2 0x0d7d 00000d73: JUMPI 00000d74: RETURNDATASIZE 00000d75: PUSH1 0x00 00000d77: DUP1 00000d78: RETURNDATACOPY 00000d79: RETURNDATASIZE 00000d7a: PUSH1 0x00 00000d7c: REVERT 00000d7d: JUMPDEST 00000d7e: POP 00000d7f: POP 00000d80: POP 00000d81: POP 00000d82: PUSH1 0x40 00000d84: MLOAD 00000d85: RETURNDATASIZE 00000d86: PUSH1 0x1f 00000d88: NOT 00000d89: PUSH1 0x1f 00000d8b: DUP3 00000d8c: ADD 00000d8d: AND 00000d8e: DUP3 00000d8f: ADD 00000d90: DUP1 00000d91: PUSH1 0x40 00000d93: MSTORE 00000d94: POP 00000d95: DUP2 00000d96: ADD 00000d97: SWAP1 00000d98: PUSH2 0x0da1 00000d9b: SWAP2 00000d9c: SWAP1 00000d9d: PUSH2 0x15fe 00000da0: JUMP 00000da1: JUMPDEST 00000da2: PUSH2 0x0dbe 00000da5: JUMPI 00000da6: PUSH1 0x40 00000da8: MLOAD 00000da9: PUSH4 0x6caa20b5 00000dae: PUSH1 0xe1 00000db0: SHL 00000db1: DUP2 00000db2: MSTORE 00000db3: PUSH1 0x04 00000db5: ADD 00000db6: PUSH1 0x40 00000db8: MLOAD 00000db9: DUP1 00000dba: SWAP2 00000dbb: SUB 00000dbc: SWAP1 00000dbd: REVERT 00000dbe: JUMPDEST 00000dbf: PUSH2 0x0dc8 00000dc2: DUP4 00000dc3: DUP3 00000dc4: PUSH2 0x1002 00000dc7: JUMP 00000dc8: JUMPDEST 00000dc9: ISZERO 00000dca: PUSH2 0x0de6 00000dcd: JUMPI 00000dce: PUSH1 0x40 00000dd0: MLOAD 00000dd1: PUSH4 0x23ef34dd 00000dd6: PUSH1 0xe2 00000dd8: SHL 00000dd9: DUP2 00000dda: MSTORE 00000ddb: PUSH1 0x04 00000ddd: ADD 00000dde: PUSH1 0x40 00000de0: MLOAD 00000de1: DUP1 00000de2: SWAP2 00000de3: SUB 00000de4: SWAP1 00000de5: REVERT 00000de6: JUMPDEST 00000de7: DUP1 00000de8: DUP4 00000de9: DUP4 00000dea: DUP2 00000deb: MLOAD 00000dec: DUP2 00000ded: LT 00000dee: PUSH2 0x0df9 00000df1: JUMPI 00000df2: PUSH2 0x0df9 00000df5: PUSH2 0x15e8 00000df8: JUMP 00000df9: JUMPDEST 00000dfa: PUSH1 0x01 00000dfc: PUSH1 0x01 00000dfe: PUSH1 0xa0 00000e00: SHL 00000e01: SUB 00000e02: SWAP1 00000e03: SWAP3 00000e04: AND 00000e05: PUSH1 0x20 00000e07: SWAP3 00000e08: DUP4 00000e09: MUL 00000e0a: SWAP2 00000e0b: SWAP1 00000e0c: SWAP2 00000e0d: ADD 00000e0e: SWAP1 00000e0f: SWAP2 00000e10: ADD 00000e11: MSTORE 00000e12: POP 00000e13: PUSH1 0x01 00000e15: ADD 00000e16: PUSH2 0x0c02 00000e19: JUMP 00000e1a: JUMPDEST 00000e1b: POP 00000e1c: POP 00000e1d: POP 00000e1e: POP 00000e1f: POP 00000e20: POP 00000e21: POP 00000e22: POP 00000e23: POP 00000e24: JUMP 00000e25: JUMPDEST 00000e26: PUSH1 0x00 00000e28: DUP1 00000e29: PUSH1 0x00 00000e2b: DUP1 00000e2c: PUSH2 0x0e36 00000e2f: DUP6 00000e30: MLOAD 00000e31: PUSH1 0x68 00000e33: EQ 00000e34: SWAP1 00000e35: JUMP 00000e36: JUMPDEST 00000e37: PUSH2 0x0e53 00000e3a: JUMPI 00000e3b: PUSH1 0x40 00000e3d: MLOAD 00000e3e: PUSH4 0x6eca2e4b 00000e43: PUSH1 0xe0 00000e45: SHL 00000e46: DUP2 00000e47: MSTORE 00000e48: PUSH1 0x04 00000e4a: ADD 00000e4b: PUSH1 0x40 00000e4d: MLOAD 00000e4e: DUP1 00000e4f: SWAP2 00000e50: SUB 00000e51: SWAP1 00000e52: REVERT 00000e53: JUMPDEST 00000e54: PUSH1 0x01 00000e56: PUSH1 0x01 00000e58: PUSH1 0xa0 00000e5a: SHL 00000e5b: SUB 00000e5c: PUSH1 0x14 00000e5e: DUP7 00000e5f: ADD 00000e60: MLOAD 00000e61: AND 00000e62: SWAP4 00000e63: POP 00000e64: PUSH1 0x34 00000e66: DUP6 00000e67: ADD 00000e68: MLOAD 00000e69: SWAP3 00000e6a: POP 00000e6b: PUSH1 0x54 00000e6d: DUP6 00000e6e: ADD 00000e6f: MLOAD 00000e70: SWAP2 00000e71: POP 00000e72: PUSH1 0x68 00000e74: DUP6 00000e75: ADD 00000e76: MLOAD 00000e77: SWAP1 00000e78: POP 00000e79: SWAP2 00000e7a: SWAP4 00000e7b: POP 00000e7c: SWAP2 00000e7d: SWAP4 00000e7e: JUMP 00000e7f: JUMPDEST 00000e80: PUSH1 0x00 00000e82: DUP1 00000e83: DUP4 00000e84: PUSH1 0x01 00000e86: PUSH1 0x01 00000e88: PUSH1 0xa0 00000e8a: SHL 00000e8b: SUB 00000e8c: AND 00000e8d: DUP4 00000e8e: PUSH1 0x40 00000e90: MLOAD 00000e91: PUSH1 0x00 00000e93: PUSH1 0x40 00000e95: MLOAD 00000e96: DUP1 00000e97: DUP4 00000e98: SUB 00000e99: DUP2 00000e9a: DUP6 00000e9b: DUP8 00000e9c: GAS 00000e9d: CALL 00000e9e: SWAP3 00000e9f: POP 00000ea0: POP 00000ea1: POP 00000ea2: RETURNDATASIZE 00000ea3: DUP1 00000ea4: PUSH1 0x00 00000ea6: DUP2 00000ea7: EQ 00000ea8: PUSH2 0x0ecd 00000eab: JUMPI 00000eac: PUSH1 0x40 00000eae: MLOAD 00000eaf: SWAP2 00000eb0: POP 00000eb1: PUSH1 0x1f 00000eb3: NOT 00000eb4: PUSH1 0x3f 00000eb6: RETURNDATASIZE 00000eb7: ADD 00000eb8: AND 00000eb9: DUP3 00000eba: ADD 00000ebb: PUSH1 0x40 00000ebd: MSTORE 00000ebe: RETURNDATASIZE 00000ebf: DUP3 00000ec0: MSTORE 00000ec1: RETURNDATASIZE 00000ec2: PUSH1 0x00 00000ec4: PUSH1 0x20 00000ec6: DUP5 00000ec7: ADD 00000ec8: RETURNDATACOPY 00000ec9: PUSH2 0x0ed2 00000ecc: JUMP 00000ecd: JUMPDEST 00000ece: PUSH1 0x60 00000ed0: SWAP2 00000ed1: POP 00000ed2: JUMPDEST 00000ed3: POP 00000ed4: SWAP1 00000ed5: SWAP6 00000ed6: SWAP5 00000ed7: POP 00000ed8: POP 00000ed9: POP 00000eda: POP 00000edb: POP 00000edc: JUMP 00000edd: JUMPDEST 00000ede: PUSH2 0x0ee5 00000ee1: PUSH2 0x105d 00000ee4: JUMP 00000ee5: JUMPDEST 00000ee6: PUSH2 0x09e9 00000ee9: JUMPDEST 00000eea: PUSH2 0x09e9 00000eed: PUSH2 0x105d 00000ef0: JUMP 00000ef1: JUMPDEST 00000ef2: PUSH2 0x0efb 00000ef5: DUP3 00000ef6: DUP3 00000ef7: PUSH2 0x078b 00000efa: JUMP 00000efb: JUMPDEST 00000efc: PUSH2 0x04e1 00000eff: JUMPI 00000f00: PUSH1 0x40 00000f02: MLOAD 00000f03: PUSH4 0xe2517d3f 00000f08: PUSH1 0xe0 00000f0a: SHL 00000f0b: DUP2 00000f0c: MSTORE 00000f0d: PUSH1 0x01 00000f0f: PUSH1 0x01 00000f11: PUSH1 0xa0 00000f13: SHL 00000f14: SUB 00000f15: DUP3 00000f16: AND 00000f17: PUSH1 0x04 00000f19: DUP3 00000f1a: ADD 00000f1b: MSTORE 00000f1c: PUSH1 0x24 00000f1e: DUP2 00000f1f: ADD 00000f20: DUP4 00000f21: SWAP1 00000f22: MSTORE 00000f23: PUSH1 0x44 00000f25: ADD 00000f26: PUSH2 0x0a74 00000f29: JUMP 00000f2a: JUMPDEST 00000f2b: PUSH2 0x0f33 00000f2e: DUP3 00000f2f: PUSH2 0x10a6 00000f32: JUMP 00000f33: JUMPDEST 00000f34: PUSH1 0x40 00000f36: MLOAD 00000f37: PUSH1 0x01 00000f39: PUSH1 0x01 00000f3b: PUSH1 0xa0 00000f3d: SHL 00000f3e: SUB 00000f3f: DUP4 00000f40: AND 00000f41: SWAP1 00000f42: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 00000f63: SWAP1 00000f64: PUSH1 0x00 00000f66: SWAP1 00000f67: LOG2 00000f68: DUP1 00000f69: MLOAD 00000f6a: ISZERO 00000f6b: PUSH2 0x0f78 00000f6e: JUMPI 00000f6f: PUSH2 0x04c1 00000f72: DUP3 00000f73: DUP3 00000f74: PUSH2 0x110b 00000f77: JUMP 00000f78: JUMPDEST 00000f79: PUSH2 0x04e1 00000f7c: PUSH2 0x1181 00000f7f: JUMP 00000f80: JUMPDEST 00000f81: PUSH1 0x40 00000f83: DUP1 00000f84: MLOAD 00000f85: DUP1 00000f86: DUP3 00000f87: ADD 00000f88: DUP3 00000f89: MSTORE 00000f8a: PUSH1 0x1a 00000f8c: DUP2 00000f8d: MSTORE 00000f8e: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a000000000000 00000faf: PUSH1 0x20 00000fb1: DUP1 00000fb2: DUP4 00000fb3: ADD 00000fb4: SWAP2 00000fb5: SWAP1 00000fb6: SWAP2 00000fb7: MSTORE 00000fb8: DUP3 00000fb9: MLOAD 00000fba: DUP1 00000fbb: DUP5 00000fbc: ADD 00000fbd: DUP5 00000fbe: MSTORE 00000fbf: PUSH1 0x03 00000fc1: DUP2 00000fc2: MSTORE 00000fc3: PUSH3 0x0c4c0d 00000fc7: PUSH1 0xea 00000fc9: SHL 00000fca: DUP2 00000fcb: DUP4 00000fcc: ADD 00000fcd: MSTORE 00000fce: SWAP3 00000fcf: MLOAD 00000fd0: PUSH1 0x00 00000fd2: SWAP4 00000fd3: SWAP2 00000fd4: PUSH2 0x0fe3 00000fd7: SWAP2 00000fd8: DUP5 00000fd9: SWAP2 00000fda: DUP5 00000fdb: SWAP2 00000fdc: DUP9 00000fdd: SWAP2 00000fde: ADD 00000fdf: PUSH2 0x1620 00000fe2: JUMP 00000fe3: JUMPDEST 00000fe4: PUSH1 0x40 00000fe6: MLOAD 00000fe7: PUSH1 0x20 00000fe9: DUP2 00000fea: DUP4 00000feb: SUB 00000fec: SUB 00000fed: DUP2 00000fee: MSTORE 00000fef: SWAP1 00000ff0: PUSH1 0x40 00000ff2: MSTORE 00000ff3: DUP1 00000ff4: MLOAD 00000ff5: SWAP1 00000ff6: PUSH1 0x20 00000ff8: ADD 00000ff9: KECCAK256 00000ffa: SWAP3 00000ffb: POP 00000ffc: POP 00000ffd: POP 00000ffe: SWAP2 00000fff: SWAP1 00001000: POP 00001001: JUMP 00001002: JUMPDEST 00001003: PUSH1 0x00 00001005: DUP1 00001006: JUMPDEST 00001007: DUP4 00001008: MLOAD 00001009: DUP2 0000100a: LT 0000100b: ISZERO 0000100c: PUSH2 0x1053 0000100f: JUMPI 00001010: DUP3 00001011: PUSH1 0x01 00001013: PUSH1 0x01 00001015: PUSH1 0xa0 00001017: SHL 00001018: SUB 00001019: AND 0000101a: DUP5 0000101b: DUP3 0000101c: DUP2 0000101d: MLOAD 0000101e: DUP2 0000101f: LT 00001020: PUSH2 0x102b 00001023: JUMPI 00001024: PUSH2 0x102b 00001027: PUSH2 0x15e8 0000102a: JUMP 0000102b: JUMPDEST 0000102c: PUSH1 0x20 0000102e: MUL 0000102f: PUSH1 0x20 00001031: ADD 00001032: ADD 00001033: MLOAD 00001034: PUSH1 0x01 00001036: PUSH1 0x01 00001038: PUSH1 0xa0 0000103a: SHL 0000103b: SUB 0000103c: AND 0000103d: SUB 0000103e: PUSH2 0x104b 00001041: JUMPI 00001042: PUSH1 0x01 00001044: SWAP2 00001045: POP 00001046: POP 00001047: PUSH2 0x0444 0000104a: JUMP 0000104b: JUMPDEST 0000104c: PUSH1 0x01 0000104e: ADD 0000104f: PUSH2 0x1006 00001052: JUMP 00001053: JUMPDEST 00001054: POP 00001055: PUSH1 0x00 00001057: SWAP4 00001058: SWAP3 00001059: POP 0000105a: POP 0000105b: POP 0000105c: JUMP 0000105d: JUMPDEST 0000105e: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 0000107f: SLOAD 00001080: PUSH1 0x01 00001082: PUSH1 0x40 00001084: SHL 00001085: SWAP1 00001086: DIV 00001087: PUSH1 0xff 00001089: AND 0000108a: PUSH2 0x09e9 0000108d: JUMPI 0000108e: PUSH1 0x40 00001090: MLOAD 00001091: PUSH4 0x1afcd79f 00001096: PUSH1 0xe3 00001098: SHL 00001099: DUP2 0000109a: MSTORE 0000109b: PUSH1 0x04 0000109d: ADD 0000109e: PUSH1 0x40 000010a0: MLOAD 000010a1: DUP1 000010a2: SWAP2 000010a3: SUB 000010a4: SWAP1 000010a5: REVERT 000010a6: JUMPDEST 000010a7: DUP1 000010a8: PUSH1 0x01 000010aa: PUSH1 0x01 000010ac: PUSH1 0xa0 000010ae: SHL 000010af: SUB 000010b0: AND 000010b1: EXTCODESIZE 000010b2: PUSH1 0x00 000010b4: SUB 000010b5: PUSH2 0x10dc 000010b8: JUMPI 000010b9: PUSH1 0x40 000010bb: MLOAD 000010bc: PUSH4 0x4c9c8ce3 000010c1: PUSH1 0xe0 000010c3: SHL 000010c4: DUP2 000010c5: MSTORE 000010c6: PUSH1 0x01 000010c8: PUSH1 0x01 000010ca: PUSH1 0xa0 000010cc: SHL 000010cd: SUB 000010ce: DUP3 000010cf: AND 000010d0: PUSH1 0x04 000010d2: DUP3 000010d3: ADD 000010d4: MSTORE 000010d5: PUSH1 0x24 000010d7: ADD 000010d8: PUSH2 0x0a74 000010db: JUMP 000010dc: JUMPDEST 000010dd: PUSH1 0x00 000010df: DUP1 000010e0: MLOAD 000010e1: PUSH1 0x20 000010e3: PUSH2 0x1680 000010e6: DUP4 000010e7: CODECOPY 000010e8: DUP2 000010e9: MLOAD 000010ea: SWAP2 000010eb: MSTORE 000010ec: DUP1 000010ed: SLOAD 000010ee: PUSH1 0x01 000010f0: PUSH1 0x01 000010f2: PUSH1 0xa0 000010f4: SHL 000010f5: SUB 000010f6: NOT 000010f7: AND 000010f8: PUSH1 0x01 000010fa: PUSH1 0x01 000010fc: PUSH1 0xa0 000010fe: SHL 000010ff: SUB 00001100: SWAP3 00001101: SWAP1 00001102: SWAP3 00001103: AND 00001104: SWAP2 00001105: SWAP1 00001106: SWAP2 00001107: OR 00001108: SWAP1 00001109: SSTORE 0000110a: JUMP 0000110b: JUMPDEST 0000110c: PUSH1 0x60 0000110e: PUSH1 0x00 00001110: DUP1 00001111: DUP5 00001112: PUSH1 0x01 00001114: PUSH1 0x01 00001116: PUSH1 0xa0 00001118: SHL 00001119: SUB 0000111a: AND 0000111b: DUP5 0000111c: PUSH1 0x40 0000111e: MLOAD 0000111f: PUSH2 0x1128 00001122: SWAP2 00001123: SWAP1 00001124: PUSH2 0x1663 00001127: JUMP 00001128: JUMPDEST 00001129: PUSH1 0x00 0000112b: PUSH1 0x40 0000112d: MLOAD 0000112e: DUP1 0000112f: DUP4 00001130: SUB 00001131: DUP2 00001132: DUP6 00001133: GAS 00001134: DELEGATECALL 00001135: SWAP2 00001136: POP 00001137: POP 00001138: RETURNDATASIZE 00001139: DUP1 0000113a: PUSH1 0x00 0000113c: DUP2 0000113d: EQ 0000113e: PUSH2 0x1163 00001141: JUMPI 00001142: PUSH1 0x40 00001144: MLOAD 00001145: SWAP2 00001146: POP 00001147: PUSH1 0x1f 00001149: NOT 0000114a: PUSH1 0x3f 0000114c: RETURNDATASIZE 0000114d: ADD 0000114e: AND 0000114f: DUP3 00001150: ADD 00001151: PUSH1 0x40 00001153: MSTORE 00001154: RETURNDATASIZE 00001155: DUP3 00001156: MSTORE 00001157: RETURNDATASIZE 00001158: PUSH1 0x00 0000115a: PUSH1 0x20 0000115c: DUP5 0000115d: ADD 0000115e: RETURNDATACOPY 0000115f: PUSH2 0x1168 00001162: JUMP 00001163: JUMPDEST 00001164: PUSH1 0x60 00001166: SWAP2 00001167: POP 00001168: JUMPDEST 00001169: POP 0000116a: SWAP2 0000116b: POP 0000116c: SWAP2 0000116d: POP 0000116e: PUSH2 0x1178 00001171: DUP6 00001172: DUP4 00001173: DUP4 00001174: PUSH2 0x11a0 00001177: JUMP 00001178: JUMPDEST 00001179: SWAP6 0000117a: SWAP5 0000117b: POP 0000117c: POP 0000117d: POP 0000117e: POP 0000117f: POP 00001180: JUMP 00001181: JUMPDEST 00001182: CALLVALUE 00001183: ISZERO 00001184: PUSH2 0x09e9 00001187: JUMPI 00001188: PUSH1 0x40 0000118a: MLOAD 0000118b: PUSH4 0xb398979f 00001190: PUSH1 0xe0 00001192: SHL 00001193: DUP2 00001194: MSTORE 00001195: PUSH1 0x04 00001197: ADD 00001198: PUSH1 0x40 0000119a: MLOAD 0000119b: DUP1 0000119c: SWAP2 0000119d: SUB 0000119e: SWAP1 0000119f: REVERT 000011a0: JUMPDEST 000011a1: PUSH1 0x60 000011a3: DUP3 000011a4: PUSH2 0x11b5 000011a7: JUMPI 000011a8: PUSH2 0x11b0 000011ab: DUP3 000011ac: PUSH2 0x11ff 000011af: JUMP 000011b0: JUMPDEST 000011b1: PUSH2 0x11f8 000011b4: JUMP 000011b5: JUMPDEST 000011b6: DUP2 000011b7: MLOAD 000011b8: ISZERO 000011b9: DUP1 000011ba: ISZERO 000011bb: PUSH2 0x11cc 000011be: JUMPI 000011bf: POP 000011c0: PUSH1 0x01 000011c2: PUSH1 0x01 000011c4: PUSH1 0xa0 000011c6: SHL 000011c7: SUB 000011c8: DUP5 000011c9: AND 000011ca: EXTCODESIZE 000011cb: ISZERO 000011cc: JUMPDEST 000011cd: ISZERO 000011ce: PUSH2 0x11f5 000011d1: JUMPI 000011d2: PUSH1 0x40 000011d4: MLOAD 000011d5: PUSH4 0x9996b315 000011da: PUSH1 0xe0 000011dc: SHL 000011dd: DUP2 000011de: MSTORE 000011df: PUSH1 0x01 000011e1: PUSH1 0x01 000011e3: PUSH1 0xa0 000011e5: SHL 000011e6: SUB 000011e7: DUP6 000011e8: AND 000011e9: PUSH1 0x04 000011eb: DUP3 000011ec: ADD 000011ed: MSTORE 000011ee: PUSH1 0x24 000011f0: ADD 000011f1: PUSH2 0x0a74 000011f4: JUMP 000011f5: JUMPDEST 000011f6: POP 000011f7: DUP1 000011f8: JUMPDEST 000011f9: SWAP4 000011fa: SWAP3 000011fb: POP 000011fc: POP 000011fd: POP 000011fe: JUMP 000011ff: JUMPDEST 00001200: DUP1 00001201: MLOAD 00001202: ISZERO 00001203: PUSH2 0x120f 00001206: JUMPI 00001207: DUP1 00001208: MLOAD 00001209: DUP1 0000120a: DUP3 0000120b: PUSH1 0x20 0000120d: ADD 0000120e: REVERT 0000120f: JUMPDEST 00001210: PUSH1 0x40 00001212: MLOAD 00001213: PUSH4 0xd6bda275 00001218: PUSH1 0xe0 0000121a: SHL 0000121b: DUP2 0000121c: MSTORE 0000121d: PUSH1 0x04 0000121f: ADD 00001220: PUSH1 0x40 00001222: MLOAD 00001223: DUP1 00001224: SWAP2 00001225: SUB 00001226: SWAP1 00001227: REVERT 00001228: JUMPDEST 00001229: PUSH1 0x00 0000122b: PUSH1 0x20 0000122d: DUP3 0000122e: DUP5 0000122f: SUB 00001230: SLT 00001231: ISZERO 00001232: PUSH2 0x123a 00001235: JUMPI 00001236: PUSH1 0x00 00001238: DUP1 00001239: REVERT 0000123a: JUMPDEST 0000123b: DUP2 0000123c: CALLDATALOAD 0000123d: PUSH1 0x01 0000123f: PUSH1 0x01 00001241: PUSH1 0xe0 00001243: SHL 00001244: SUB 00001245: NOT 00001246: DUP2 00001247: AND 00001248: DUP2 00001249: EQ 0000124a: PUSH2 0x11f8 0000124d: JUMPI 0000124e: PUSH1 0x00 00001250: DUP1 00001251: REVERT 00001252: JUMPDEST 00001253: PUSH1 0x00 00001255: PUSH1 0x20 00001257: DUP3 00001258: DUP5 00001259: SUB 0000125a: SLT 0000125b: ISZERO 0000125c: PUSH2 0x1264 0000125f: JUMPI 00001260: PUSH1 0x00 00001262: DUP1 00001263: REVERT 00001264: JUMPDEST 00001265: POP 00001266: CALLDATALOAD 00001267: SWAP2 00001268: SWAP1 00001269: POP 0000126a: JUMP 0000126b: JUMPDEST 0000126c: DUP1 0000126d: CALLDATALOAD 0000126e: PUSH1 0x01 00001270: PUSH1 0x01 00001272: PUSH1 0xa0 00001274: SHL 00001275: SUB 00001276: DUP2 00001277: AND 00001278: DUP2 00001279: EQ 0000127a: PUSH2 0x1282 0000127d: JUMPI 0000127e: PUSH1 0x00 00001280: DUP1 00001281: REVERT 00001282: JUMPDEST 00001283: SWAP2 00001284: SWAP1 00001285: POP 00001286: JUMP 00001287: JUMPDEST 00001288: PUSH1 0x00 0000128a: DUP1 0000128b: PUSH1 0x40 0000128d: DUP4 0000128e: DUP6 0000128f: SUB 00001290: SLT 00001291: ISZERO 00001292: PUSH2 0x129a 00001295: JUMPI 00001296: PUSH1 0x00 00001298: DUP1 00001299: REVERT 0000129a: JUMPDEST 0000129b: DUP3 0000129c: CALLDATALOAD 0000129d: SWAP2 0000129e: POP 0000129f: PUSH2 0x12aa 000012a2: PUSH1 0x20 000012a4: DUP5 000012a5: ADD 000012a6: PUSH2 0x126b 000012a9: JUMP 000012aa: JUMPDEST 000012ab: SWAP1 000012ac: POP 000012ad: SWAP3 000012ae: POP 000012af: SWAP3 000012b0: SWAP1 000012b1: POP 000012b2: JUMP 000012b3: JUMPDEST 000012b4: PUSH4 0x4e487b71 000012b9: PUSH1 0xe0 000012bb: SHL 000012bc: PUSH1 0x00 000012be: MSTORE 000012bf: PUSH1 0x41 000012c1: PUSH1 0x04 000012c3: MSTORE 000012c4: PUSH1 0x24 000012c6: PUSH1 0x00 000012c8: REVERT 000012c9: JUMPDEST 000012ca: PUSH1 0x40 000012cc: MLOAD 000012cd: PUSH1 0x1f 000012cf: DUP3 000012d0: ADD 000012d1: PUSH1 0x1f 000012d3: NOT 000012d4: AND 000012d5: DUP2 000012d6: ADD 000012d7: PUSH8 0xffffffffffffffff 000012e0: DUP2 000012e1: GT 000012e2: DUP3 000012e3: DUP3 000012e4: LT 000012e5: OR 000012e6: ISZERO 000012e7: PUSH2 0x12f2 000012ea: JUMPI 000012eb: PUSH2 0x12f2 000012ee: PUSH2 0x12b3 000012f1: JUMP 000012f2: JUMPDEST 000012f3: PUSH1 0x40 000012f5: MSTORE 000012f6: SWAP2 000012f7: SWAP1 000012f8: POP 000012f9: JUMP 000012fa: JUMPDEST 000012fb: PUSH1 0x00 000012fd: DUP3 000012fe: PUSH1 0x1f 00001300: DUP4 00001301: ADD 00001302: SLT 00001303: PUSH2 0x130b 00001306: JUMPI 00001307: PUSH1 0x00 00001309: DUP1 0000130a: REVERT 0000130b: JUMPDEST 0000130c: DUP2 0000130d: CALLDATALOAD 0000130e: PUSH8 0xffffffffffffffff 00001317: DUP2 00001318: GT 00001319: ISZERO 0000131a: PUSH2 0x1325 0000131d: JUMPI 0000131e: PUSH2 0x1325 00001321: PUSH2 0x12b3 00001324: JUMP 00001325: JUMPDEST 00001326: PUSH2 0x1338 00001329: PUSH1 0x1f 0000132b: DUP3 0000132c: ADD 0000132d: PUSH1 0x1f 0000132f: NOT 00001330: AND 00001331: PUSH1 0x20 00001333: ADD 00001334: PUSH2 0x12c9 00001337: JUMP 00001338: JUMPDEST 00001339: DUP2 0000133a: DUP2 0000133b: MSTORE 0000133c: DUP5 0000133d: PUSH1 0x20 0000133f: DUP4 00001340: DUP7 00001341: ADD 00001342: ADD 00001343: GT 00001344: ISZERO 00001345: PUSH2 0x134d 00001348: JUMPI 00001349: PUSH1 0x00 0000134b: DUP1 0000134c: REVERT 0000134d: JUMPDEST 0000134e: DUP2 0000134f: PUSH1 0x20 00001351: DUP6 00001352: ADD 00001353: PUSH1 0x20 00001355: DUP4 00001356: ADD 00001357: CALLDATACOPY 00001358: PUSH1 0x00 0000135a: SWAP2 0000135b: DUP2 0000135c: ADD 0000135d: PUSH1 0x20 0000135f: ADD 00001360: SWAP2 00001361: SWAP1 00001362: SWAP2 00001363: MSTORE 00001364: SWAP4 00001365: SWAP3 00001366: POP 00001367: POP 00001368: POP 00001369: JUMP 0000136a: JUMPDEST 0000136b: PUSH1 0x00 0000136d: DUP1 0000136e: PUSH1 0x40 00001370: DUP4 00001371: DUP6 00001372: SUB 00001373: SLT 00001374: ISZERO 00001375: PUSH2 0x137d 00001378: JUMPI 00001379: PUSH1 0x00 0000137b: DUP1 0000137c: REVERT 0000137d: JUMPDEST 0000137e: PUSH2 0x1386 00001381: DUP4 00001382: PUSH2 0x126b 00001385: JUMP 00001386: JUMPDEST 00001387: SWAP2 00001388: POP 00001389: PUSH1 0x20 0000138b: DUP4 0000138c: ADD 0000138d: CALLDATALOAD 0000138e: PUSH8 0xffffffffffffffff 00001397: DUP2 00001398: GT 00001399: ISZERO 0000139a: PUSH2 0x13a2 0000139d: JUMPI 0000139e: PUSH1 0x00 000013a0: DUP1 000013a1: REVERT 000013a2: JUMPDEST 000013a3: PUSH2 0x13ae 000013a6: DUP6 000013a7: DUP3 000013a8: DUP7 000013a9: ADD 000013aa: PUSH2 0x12fa 000013ad: JUMP 000013ae: JUMPDEST 000013af: SWAP2 000013b0: POP 000013b1: POP 000013b2: SWAP3 000013b3: POP 000013b4: SWAP3 000013b5: SWAP1 000013b6: POP 000013b7: JUMP 000013b8: JUMPDEST 000013b9: PUSH1 0x00 000013bb: PUSH8 0xffffffffffffffff 000013c4: DUP3 000013c5: GT 000013c6: ISZERO 000013c7: PUSH2 0x13d2 000013ca: JUMPI 000013cb: PUSH2 0x13d2 000013ce: PUSH2 0x12b3 000013d1: JUMP 000013d2: JUMPDEST 000013d3: POP 000013d4: PUSH1 0x05 000013d6: SHL 000013d7: PUSH1 0x20 000013d9: ADD 000013da: SWAP1 000013db: JUMP 000013dc: JUMPDEST 000013dd: PUSH1 0x00 000013df: DUP3 000013e0: PUSH1 0x1f 000013e2: DUP4 000013e3: ADD 000013e4: SLT 000013e5: PUSH2 0x13ed 000013e8: JUMPI 000013e9: PUSH1 0x00 000013eb: DUP1 000013ec: REVERT 000013ed: JUMPDEST 000013ee: DUP2 000013ef: CALLDATALOAD 000013f0: PUSH1 0x20 000013f2: PUSH2 0x1402 000013f5: PUSH2 0x13fd 000013f8: DUP4 000013f9: PUSH2 0x13b8 000013fc: JUMP 000013fd: JUMPDEST 000013fe: PUSH2 0x12c9 00001401: JUMP 00001402: JUMPDEST 00001403: DUP1 00001404: DUP4 00001405: DUP3 00001406: MSTORE 00001407: PUSH1 0x20 00001409: DUP3 0000140a: ADD 0000140b: SWAP2 0000140c: POP 0000140d: PUSH1 0x20 0000140f: DUP5 00001410: PUSH1 0x05 00001412: SHL 00001413: DUP8 00001414: ADD 00001415: ADD 00001416: SWAP4 00001417: POP 00001418: DUP7 00001419: DUP5 0000141a: GT 0000141b: ISZERO 0000141c: PUSH2 0x1424 0000141f: JUMPI 00001420: PUSH1 0x00 00001422: DUP1 00001423: REVERT 00001424: JUMPDEST 00001425: PUSH1 0x20 00001427: DUP7 00001428: ADD 00001429: JUMPDEST 0000142a: DUP5 0000142b: DUP2 0000142c: LT 0000142d: ISZERO 0000142e: PUSH2 0x1440 00001431: JUMPI 00001432: DUP1 00001433: CALLDATALOAD 00001434: DUP4 00001435: MSTORE 00001436: SWAP2 00001437: DUP4 00001438: ADD 00001439: SWAP2 0000143a: DUP4 0000143b: ADD 0000143c: PUSH2 0x1429 0000143f: JUMP 00001440: JUMPDEST 00001441: POP 00001442: SWAP7 00001443: SWAP6 00001444: POP 00001445: POP 00001446: POP 00001447: POP 00001448: POP 00001449: POP 0000144a: JUMP 0000144b: JUMPDEST 0000144c: PUSH1 0x00 0000144e: DUP1 0000144f: PUSH1 0x00 00001451: DUP1 00001452: PUSH1 0x80 00001454: DUP6 00001455: DUP8 00001456: SUB 00001457: SLT 00001458: ISZERO 00001459: PUSH2 0x1461 0000145c: JUMPI 0000145d: PUSH1 0x00 0000145f: DUP1 00001460: REVERT 00001461: JUMPDEST 00001462: DUP5 00001463: CALLDATALOAD 00001464: PUSH8 0xffffffffffffffff 0000146d: DUP1 0000146e: DUP3 0000146f: GT 00001470: ISZERO 00001471: PUSH2 0x1479 00001474: JUMPI 00001475: PUSH1 0x00 00001477: DUP1 00001478: REVERT 00001479: JUMPDEST 0000147a: DUP2 0000147b: DUP8 0000147c: ADD 0000147d: SWAP2 0000147e: POP 0000147f: DUP8 00001480: PUSH1 0x1f 00001482: DUP4 00001483: ADD 00001484: SLT 00001485: PUSH2 0x148d 00001488: JUMPI 00001489: PUSH1 0x00 0000148b: DUP1 0000148c: REVERT 0000148d: JUMPDEST 0000148e: DUP2 0000148f: CALLDATALOAD 00001490: PUSH1 0x20 00001492: PUSH2 0x149d 00001495: PUSH2 0x13fd 00001498: DUP4 00001499: PUSH2 0x13b8 0000149c: JUMP 0000149d: JUMPDEST 0000149e: DUP3 0000149f: DUP2 000014a0: MSTORE 000014a1: PUSH1 0x05 000014a3: SWAP3 000014a4: SWAP1 000014a5: SWAP3 000014a6: SHL 000014a7: DUP5 000014a8: ADD 000014a9: DUP2 000014aa: ADD 000014ab: SWAP2 000014ac: DUP2 000014ad: DUP2 000014ae: ADD 000014af: SWAP1 000014b0: DUP12 000014b1: DUP5 000014b2: GT 000014b3: ISZERO 000014b4: PUSH2 0x14bc 000014b7: JUMPI 000014b8: PUSH1 0x00 000014ba: DUP1 000014bb: REVERT 000014bc: JUMPDEST 000014bd: SWAP5 000014be: DUP3 000014bf: ADD 000014c0: SWAP5 000014c1: JUMPDEST 000014c2: DUP4 000014c3: DUP7 000014c4: LT 000014c5: ISZERO 000014c6: PUSH2 0x14ea 000014c9: JUMPI 000014ca: DUP6 000014cb: CALLDATALOAD 000014cc: PUSH1 0xff 000014ce: DUP2 000014cf: AND 000014d0: DUP2 000014d1: EQ 000014d2: PUSH2 0x14db 000014d5: JUMPI 000014d6: PUSH1 0x00 000014d8: DUP1 000014d9: DUP2 000014da: REVERT 000014db: JUMPDEST 000014dc: DUP3 000014dd: MSTORE 000014de: SWAP5 000014df: DUP3 000014e0: ADD 000014e1: SWAP5 000014e2: SWAP1 000014e3: DUP3 000014e4: ADD 000014e5: SWAP1 000014e6: PUSH2 0x14c1 000014e9: JUMP 000014ea: JUMPDEST 000014eb: SWAP9 000014ec: POP 000014ed: POP 000014ee: DUP9 000014ef: ADD 000014f0: CALLDATALOAD 000014f1: SWAP3 000014f2: POP 000014f3: POP 000014f4: DUP1 000014f5: DUP3 000014f6: GT 000014f7: ISZERO 000014f8: PUSH2 0x1500 000014fb: JUMPI 000014fc: PUSH1 0x00 000014fe: DUP1 000014ff: REVERT 00001500: JUMPDEST 00001501: PUSH2 0x150c 00001504: DUP9 00001505: DUP4 00001506: DUP10 00001507: ADD 00001508: PUSH2 0x13dc 0000150b: JUMP 0000150c: JUMPDEST 0000150d: SWAP5 0000150e: POP 0000150f: PUSH1 0x40 00001511: DUP8 00001512: ADD 00001513: CALLDATALOAD 00001514: SWAP2 00001515: POP 00001516: DUP1 00001517: DUP3 00001518: GT 00001519: ISZERO 0000151a: PUSH2 0x1522 0000151d: JUMPI 0000151e: PUSH1 0x00 00001520: DUP1 00001521: REVERT 00001522: JUMPDEST 00001523: PUSH2 0x152e 00001526: DUP9 00001527: DUP4 00001528: DUP10 00001529: ADD 0000152a: PUSH2 0x13dc 0000152d: JUMP 0000152e: JUMPDEST 0000152f: SWAP4 00001530: POP 00001531: PUSH1 0x60 00001533: DUP8 00001534: ADD 00001535: CALLDATALOAD 00001536: SWAP2 00001537: POP 00001538: DUP1 00001539: DUP3 0000153a: GT 0000153b: ISZERO 0000153c: PUSH2 0x1544 0000153f: JUMPI 00001540: PUSH1 0x00 00001542: DUP1 00001543: REVERT 00001544: JUMPDEST 00001545: POP 00001546: PUSH2 0x1551 00001549: DUP8 0000154a: DUP3 0000154b: DUP9 0000154c: ADD 0000154d: PUSH2 0x12fa 00001550: JUMP 00001551: JUMPDEST 00001552: SWAP2 00001553: POP 00001554: POP 00001555: SWAP3 00001556: SWAP6 00001557: SWAP2 00001558: SWAP5 00001559: POP 0000155a: SWAP3 0000155b: POP 0000155c: JUMP 0000155d: JUMPDEST 0000155e: PUSH1 0x00 00001560: JUMPDEST 00001561: DUP4 00001562: DUP2 00001563: LT 00001564: ISZERO 00001565: PUSH2 0x1578 00001568: JUMPI 00001569: DUP2 0000156a: DUP2 0000156b: ADD 0000156c: MLOAD 0000156d: DUP4 0000156e: DUP3 0000156f: ADD 00001570: MSTORE 00001571: PUSH1 0x20 00001573: ADD 00001574: PUSH2 0x1560 00001577: JUMP 00001578: JUMPDEST 00001579: POP 0000157a: POP 0000157b: PUSH1 0x00 0000157d: SWAP2 0000157e: ADD 0000157f: MSTORE 00001580: JUMP 00001581: JUMPDEST 00001582: PUSH1 0x20 00001584: DUP2 00001585: MSTORE 00001586: PUSH1 0x00 00001588: DUP3 00001589: MLOAD 0000158a: DUP1 0000158b: PUSH1 0x20 0000158d: DUP5 0000158e: ADD 0000158f: MSTORE 00001590: PUSH2 0x15a0 00001593: DUP2 00001594: PUSH1 0x40 00001596: DUP6 00001597: ADD 00001598: PUSH1 0x20 0000159a: DUP8 0000159b: ADD 0000159c: PUSH2 0x155d 0000159f: JUMP 000015a0: JUMPDEST 000015a1: PUSH1 0x1f 000015a3: ADD 000015a4: PUSH1 0x1f 000015a6: NOT 000015a7: AND 000015a8: SWAP2 000015a9: SWAP1 000015aa: SWAP2 000015ab: ADD 000015ac: PUSH1 0x40 000015ae: ADD 000015af: SWAP3 000015b0: SWAP2 000015b1: POP 000015b2: POP 000015b3: JUMP 000015b4: JUMPDEST 000015b5: PUSH1 0x00 000015b7: PUSH1 0x20 000015b9: DUP3 000015ba: DUP5 000015bb: SUB 000015bc: SLT 000015bd: ISZERO 000015be: PUSH2 0x15c6 000015c1: JUMPI 000015c2: PUSH1 0x00 000015c4: DUP1 000015c5: REVERT 000015c6: JUMPDEST 000015c7: PUSH2 0x11f8 000015ca: DUP3 000015cb: PUSH2 0x126b 000015ce: JUMP 000015cf: JUMPDEST 000015d0: PUSH1 0x00 000015d2: PUSH1 0x20 000015d4: DUP3 000015d5: DUP5 000015d6: SUB 000015d7: SLT 000015d8: ISZERO 000015d9: PUSH2 0x15e1 000015dc: JUMPI 000015dd: PUSH1 0x00 000015df: DUP1 000015e0: REVERT 000015e1: JUMPDEST 000015e2: POP 000015e3: MLOAD 000015e4: SWAP2 000015e5: SWAP1 000015e6: POP 000015e7: JUMP 000015e8: JUMPDEST 000015e9: PUSH4 0x4e487b71 000015ee: PUSH1 0xe0 000015f0: SHL 000015f1: PUSH1 0x00 000015f3: MSTORE 000015f4: PUSH1 0x32 000015f6: PUSH1 0x04 000015f8: MSTORE 000015f9: PUSH1 0x24 000015fb: PUSH1 0x00 000015fd: REVERT 000015fe: JUMPDEST 000015ff: PUSH1 0x00 00001601: PUSH1 0x20 00001603: DUP3 00001604: DUP5 00001605: SUB 00001606: SLT 00001607: ISZERO 00001608: PUSH2 0x1610 0000160b: JUMPI 0000160c: PUSH1 0x00 0000160e: DUP1 0000160f: REVERT 00001610: JUMPDEST 00001611: DUP2 00001612: MLOAD 00001613: DUP1 00001614: ISZERO 00001615: ISZERO 00001616: DUP2 00001617: EQ 00001618: PUSH2 0x11f8 0000161b: JUMPI 0000161c: PUSH1 0x00 0000161e: DUP1 0000161f: REVERT 00001620: JUMPDEST 00001621: PUSH1 0x00 00001623: DUP5 00001624: MLOAD 00001625: PUSH2 0x1632 00001628: DUP2 00001629: DUP5 0000162a: PUSH1 0x20 0000162c: DUP10 0000162d: ADD 0000162e: PUSH2 0x155d 00001631: JUMP 00001632: JUMPDEST 00001633: DUP5 00001634: MLOAD 00001635: SWAP1 00001636: DUP4 00001637: ADD 00001638: SWAP1 00001639: PUSH2 0x1646 0000163c: DUP2 0000163d: DUP4 0000163e: PUSH1 0x20 00001640: DUP10 00001641: ADD 00001642: PUSH2 0x155d 00001645: JUMP 00001646: JUMPDEST 00001647: DUP5 00001648: MLOAD 00001649: SWAP2 0000164a: ADD 0000164b: SWAP1 0000164c: PUSH2 0x1659 0000164f: DUP2 00001650: DUP4 00001651: PUSH1 0x20 00001653: DUP9 00001654: ADD 00001655: PUSH2 0x155d 00001658: JUMP 00001659: JUMPDEST 0000165a: ADD 0000165b: SWAP6 0000165c: SWAP5 0000165d: POP 0000165e: POP 0000165f: POP 00001660: POP 00001661: POP 00001662: JUMP 00001663: JUMPDEST 00001664: PUSH1 0x00 00001666: DUP3 00001667: MLOAD 00001668: PUSH2 0x1675 0000166b: DUP2 0000166c: DUP5 0000166d: PUSH1 0x20 0000166f: DUP8 00001670: ADD 00001671: PUSH2 0x155d 00001674: JUMP 00001675: JUMPDEST 00001676: SWAP2 00001677: SWAP1 00001678: SWAP2 00001679: ADD 0000167a: SWAP3 0000167b: SWAP2 0000167c: POP 0000167d: POP 0000167e: JUMP 0000167f: INVALID 00001680: CALLDATASIZE 00001681: ADDMOD 00001682: SWAP5 00001683: LOG1 00001684: EXTCODESIZE 00001685: LOG1 00001686: LOG3 00001687: UNKNOWN(0x21) 00001688: MOD 00001689: PUSH8 0xc828492db98dca3e 00001692: KECCAK256 00001693: PUSH23 0xcc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775 000016ab: UNKNOWN(0xE5) 000016ac: DUP14 000016ad: UNKNOWN(0xD5) 000016ae: COINBASE 000016af: UNKNOWN(0xE0) 000016b0: DUP11 000016b1: GT 000016b2: PUSH13 0x6c53815c0bd028192f7b626800 000016c0: LOG2 000016c1: PUSH5 0x6970667358 000016c7: UNKNOWN(0x22) 000016c8: SLT 000016c9: KECCAK256 000016ca: UNKNOWN(0xF8) 000016cb: SWAP2 000016cc: UNKNOWN(0x24) 000016cd: DUP11 000016ce: REVERT 000016cf: PUSH0 000016d0: UNKNOWN(0xCB) 000016d1: UNKNOWN(0xC7) 000016d2: UNKNOWN(0xE1) 000016d3: UNKNOWN(0xE4) 000016d4: UNKNOWN(0xBE) 000016d5: UNKNOWN(0xE1) 000016d6: MSTORE8 000016d7: PUSH16 0x70478d815adc30810eedbe9467a410a4 000016e8: UNKNOWN(0xEC) 000016e9: UNKNOWN(0x22) 000016ea: PUSH5 0x736f6c6343 000016f0: STOP 000016f1: ADDMOD 000016f2: XOR 000016f3: STOP 000016f4: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | upgradeability | detector | Untrusted DELEGATECALL target reachable | 70 | no | no |
viewtrace_id: 0x491f4f8eef34f3d4f343bbb38b3765103eae27b51fe8ef9d75c6c64cf018f4a3
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x491f4f8eef34f3d4f343bbb38b3765103eae27b51fe8ef9d75c6c64cf018f4a3",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xc49baebe",
"selector": "0xc49baebe",
"calldata_variants": [
"0xc49baebe",
"0xc49baebe0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccd93998",
"selector": "0xccd93998",
"calldata_variants": [
"0xccd93998",
"0xccd939980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdb2e21bc",
"selector": "0xdb2e21bc",
"calldata_variants": [
"0xdb2e21bc",
"0xdb2e21bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe12fba8d",
"selector": "0xe12fba8d",
"calldata_variants": [
"0xe12fba8d",
"0xe12fba8d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8129fc1c",
"selector": "0x8129fc1c",
"calldata_variants": [
"0x8129fc1c",
"0x8129fc1c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91d14854",
"selector": "0x91d14854",
"calldata_variants": [
"0x91d14854",
"0x91d148540000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa217fddf",
"selector": "0xa217fddf",
"calldata_variants": [
"0xa217fddf",
"0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4404,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a
call_targets:
0xbdead28e8a46457646de417d0295c535e2bad4ca
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xbdead28e8a46457646de417d0295c535e2bad4ca"
],
"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": "0xc49baebe",
"selector": "0xc49baebe",
"calldata_variants": [
"0xc49baebe",
"0xc49baebe0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccd93998",
"selector": "0xccd93998",
"calldata_variants": [
"0xccd93998",
"0xccd939980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdb2e21bc",
"selector": "0xdb2e21bc",
"calldata_variants": [
"0xdb2e21bc",
"0xdb2e21bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe12fba8d",
"selector": "0xe12fba8d",
"calldata_variants": [
"0xe12fba8d",
"0xe12fba8d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8129fc1c",
"selector": "0x8129fc1c",
"calldata_variants": [
"0x8129fc1c",
"0x8129fc1c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91d14854",
"selector": "0x91d14854",
"calldata_variants": [
"0x91d14854",
"0x91d148540000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa217fddf",
"selector": "0xa217fddf",
"calldata_variants": [
"0xa217fddf",
"0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2048,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3741,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a
call_targets:
0xbdead28e8a46457646de417d0295c535e2bad4ca
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xbdead28e8a46457646de417d0295c535e2bad4ca"
],
"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": "0xc49baebe",
"selector": "0xc49baebe",
"calldata_variants": [
"0xc49baebe",
"0xc49baebe0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccd93998",
"selector": "0xccd93998",
"calldata_variants": [
"0xccd93998",
"0xccd939980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdb2e21bc",
"selector": "0xdb2e21bc",
"calldata_variants": [
"0xdb2e21bc",
"0xdb2e21bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe12fba8d",
"selector": "0xe12fba8d",
"calldata_variants": [
"0xe12fba8d",
"0xe12fba8d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8129fc1c",
"selector": "0x8129fc1c",
"calldata_variants": [
"0x8129fc1c",
"0x8129fc1c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91d14854",
"selector": "0x91d14854",
"calldata_variants": [
"0x91d14854",
"0x91d148540000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa217fddf",
"selector": "0xa217fddf",
"calldata_variants": [
"0xa217fddf",
"0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2048,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3741,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|