451b66eb-635f-4ddb-8083-b64c57dc8a38
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 |
|---|---|---|---|---|
| 31561 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77993 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77994 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77995 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77996 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77997 | detector.run | complete | 1 / 3 | 1 week ago |
| 77998 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:343406] OpenAI Codex v0.77.0 (research preview)
[codex:343406] --------
[codex:343406] workdir: /tmp/codex-multi-zqo1iphn
[codex:343406] model: gpt-5.2-codex
[codex:343406] provider: openai
[codex:343406] approval: never
[codex:343406] sandbox: read-only
[codex:343406] reasoning effort: xhigh
[codex:343406] reasoning summaries: auto
[codex:343406] session id: 019b8758-3bf1-73c3-accc-7ebcbeb141a2
[codex:343406] --------
[codex:343406] user
[codex:343406] 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:343406]
[codex:343406] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:343406]
[codex:343406] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:343406] - Gas inefficiency, code quality, or best practices
[codex:343406] - Theoretical vulnerabilities without a clear extraction path
[codex:343406] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:343406] - Issues requiring social engineering or off-chain coordination
[codex:343406]
[codex:343406] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:343406] - CALL/DELEGATECALL with controllable destination or calldata
[codex:343406] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:343406] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:343406] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:343406] - External calls before state updates (reentrancy)
[codex:343406] - SELFDESTRUCT with controllable beneficiary
[codex:343406] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:343406]
[codex:343406] For each finding, you MUST explain:
[codex:343406] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:343406] 2. The concrete sequence of transactions to extract value
[codex:343406] 3. Why you believe this is exploitable (not just suspicious)
[codex:343406]
[codex:343406] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:343406] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:343406]
[codex:343406] Output MUST be valid JSON matching the provided schema.
[codex:343406] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:343406] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:343406] mcp startup: no servers
[codex:343406]
[codex:343406] thinking
[codex:343406] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:343406] exec
[codex:343406] /bin/bash -lc ls in /tmp/codex-multi-zqo1iphn succeeded in 5ms:
[codex:343406] BYTECODE_BUNDLE.txt
[codex:343406] codex-output-schema.json
[codex:343406] exec
[codex:343406] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-zqo1iphn succeeded in 6ms:
[codex:343406] Runtime bytecode bundle for best-effort auditing.
[codex:343406] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:343406]
[codex:343406] FILE: runtime_bytecode.hex
[codex:343406] 0x6060604052361561011a5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b85780632f54bf6e146101d05780633411c81c1461020357806354741525146102395780637065cb4814610268578063784547a7146102895780638b51d13f146102b35780639ace38c2146102db578063a0e67e2b1461039a578063a8abe69a14610401578063b5dc40c314610478578063b77bf600146104e2578063ba51a6df14610507578063c01a8c841461051f578063c642747414610537578063d74f8edd146105ae578063dc8452cd146105d3578063e20056e6146105f8578063ee22610b1461061f575b5b60003411156101625733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b5b005b341561017057600080fd5b61017b600435610637565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610162600160a060020a0360043516610669565b005b34156101c357600080fd5b61016260043561081a565b005b34156101db57600080fd5b6101ef600160a060020a03600435166108fc565b604051901515815260200160405180910390f35b341561020e57600080fd5b6101ef600435600160a060020a0360243516610911565b604051901515815260200160405180910390f35b341561024457600080fd5b61025660043515156024351515610931565b60405190815260200160405180910390f35b341561027357600080fd5b610162600160a060020a03600435166109a0565b005b341561029457600080fd5b6101ef600435610add565b604051901515815260200160405180910390f35b34156102be57600080fd5b610256600435610b71565b60405190815260200160405180910390f35b34156102e657600080fd5b6102f1600435610bf0565b604051600160a060020a03851681526020810184905281151560608201526080604082018181528454600260001961010060018416150201909116049183018290529060a0830190859080156103885780601f1061035d57610100808354040283529160200191610388565b820191906000526020600020905b81548152906001019060200180831161036b57829003601f168201915b50509550505050505060405180910390f35b34156103a557600080fd5b6103ad610c24565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103ed5780820151818401525b6020016103d4565b505050509050019250505060405180910390f35b341561040c57600080fd5b6103ad60043560243560443515156064351515610c8d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103ed5780820151818401525b6020016103d4565b505050509050019250505060405180910390f35b341561048357600080fd5b6103ad600435610dbb565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103ed5780820151818401525b6020016103d4565b505050509050019250505060405180910390f35b34156104ed57600080fd5b610256610f3d565b60405190815260200160405180910390f35b341561051257600080fd5b610162600435610f43565b005b341561052a57600080fd5b610162600435610fd9565b005b341561054257600080fd5b61025660048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506110cb95505050505050565b60405190815260200160405180910390f35b34156105b957600080fd5b6102566110eb565b60405190815260200160405180910390f35b34156105de57600080fd5b6102566110f0565b60405190815260200160405180910390f35b341561060357600080fd5b610162600160a060020a03600435811690602435166110f6565b005b341561062a57600080fd5b6101626004356112b7565b005b600380548290811061064557fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a031614151561068b57600080fd5b600160a060020a038216600090815260026020526040902054829060ff1615156106b457600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156107af5782600160a060020a03166003838154811015156106fe57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156107a35760038054600019810190811061073f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561076e57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506107af565b5b6001909101906106d7565b6003805460001901906107c290826115cd565b5060035460045411156107db576003546107db90610f43565b5b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff16151561084257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561087757600080fd5b600084815260208190526040902060030154849060ff161561089857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35b5b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b6005548110156109985783801561095e575060008181526020819052604090206003015460ff16155b806109825750828015610982575060008181526020819052604090206003015460ff165b5b1561098f576001820191505b5b600101610935565b5b5092915050565b30600160a060020a031633600160a060020a03161415156109c057600080fd5b600160a060020a038116600090815260026020526040902054819060ff16156109e857600080fd5b81600160a060020a03811615156109fe57600080fd5b60038054905060010160045460328211158015610a1b5750818111155b8015610a2657508015155b8015610a3157508115155b1515610a3c57600080fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610a7483826115cd565b916000526020600020900160005b8154600160a060020a03808a166101009390930a8381029102199091161790915590507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25b5b50505b505b505b50565b600080805b600354811015610b695760008481526001602052604081206003805491929184908110610b0b57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610b4d576001820191505b600454821415610b605760019250610b69565b5b600101610ae2565b5b5050919050565b6000805b600354811015610be95760008381526001602052604081206003805491929184908110610b9e57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610be0576001820191505b5b600101610b75565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b610c2c611621565b6003805480602002602001604051908101604052809291908181526020018280548015610c8257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610c64575b505050505090505b90565b610c95611621565b610c9d611621565b600080600554604051805910610cb05750595b908082528060200260200182016040525b50925060009150600090505b600554811015610d4857858015610cf6575060008181526020819052604090206003015460ff16155b80610d1a5750848015610d1a575060008181526020819052604090206003015460ff165b5b15610d3f5780838381518110610d2d57fe5b60209081029091010152600191909101905b5b600101610ccd565b878703604051805910610d585750595b908082528060200260200182016040525b5093508790505b86811015610daf57828181518110610d8457fe5b906020019060200201518489830381518110610d9c57fe5b602090810290910101525b600101610d70565b5b505050949350505050565b610dc3611621565b610dcb611621565b6003546000908190604051805910610de05750595b908082528060200260200182016040525b50925060009150600090505b600354811015610ec35760008581526001602052604081206003805491929184908110610e2657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610eba576003805482908110610e6f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316838381518110610e9b57fe5b600160a060020a03909216602092830290910190910152600191909101905b5b600101610dfd565b81604051805910610ed15750595b908082528060200260200182016040525b509350600090505b81811015610f3457828181518110610efe57fe5b90602001906020020151848281518110610f1457fe5b600160a060020a039092166020928302909101909101525b600101610eea565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610f6357600080fd5b6003548160328211801590610f785750818111155b8015610f8357508015155b8015610f8e57508115155b1515610f9957600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff16151561100157600080fd5b6000828152602081905260409020548290600160a060020a0316151561102657600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff161561105a57600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a36108f2856112b7565b5b5b50505b505b5050565b60006110d88484846114a6565b90506110e381610fd9565b5b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a031614151561111857600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561114157600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561116957600080fd5b600092505b6003548310156112115784600160a060020a031660038481548110151561119157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316141561120557836003848154811015156111d057fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550611211565b5b60019092019161116e565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25b5b505b505b505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156112e257600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff16151561131757600080fd5b600085815260208190526040902060030154859060ff161561133857600080fd5b61134186610add565b15611499576000868152602081815260409182902060038101805460ff1916600190811790915581548183015460028085018054959c5061142897600160a060020a039094169692956000199581161561010002959095019094160492918391601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801561141e5780601f106113f35761010080835404028352916020019161141e565b820191906000526020600020905b81548152906001019060200180831161140157829003601f168201915b50505050506115a5565b1561145f57857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a2611499565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b5b5b5b505b50505b505050565b600083600160a060020a03811615156114be57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039190911617815560208201518160010155604082015181600201908051611549929160200190611645565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a25b5b509392505050565b6000806040516020840160008287838a8c6187965a03f1925050508091505b50949350505050565b815481835581811511610813576000838152602090206108139181019083016116c4565b5b505050565b815481835581811511610813576000838152602090206108139181019083016116c4565b5b505050565b60206040519081016040526000815290565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061168657805160ff19168380011785556116b3565b828001600101855582156116b3579182015b828111156116b3578251825591602001919060010190611698565b5b506116c09291506116c4565b5090565b610c8a91905b808211156116c057600081556001016116ca565b5090565b905600a165627a7a72305820706ed24401b5b8a3842b02ace1947993b89d52ff0b9ad48f97724e993f26a72b0029
[codex:343406]
[codex:343406] thinking
[codex:343406] **Planning bytecode analysis for exploits**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import binascii
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] # extract hex after 0x
[codex:343406] import re
[codex:343406] m = re.search(r'0x([0-9a-fA-F]+)', code)
[codex:343406] hexstr = m.group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcodes mapping
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] # add DUP, SWAP
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] # base opcodes
[codex:343406] base = {
[codex:343406] 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:343406] 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:343406] 0x20:'SHA3',
[codex:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:343406] }
[codex:343406] opmap.update(base)
[codex:343406] # disassemble; record CALL/DELEGATECALL/SELFDESTRUCT locations with context
[codex:343406] interesting = []
[codex:343406] ops = []
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op = code_bytes[pc]
[codex:343406] opname = opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n = op-0x5f
[codex:343406] data = code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc, opname, data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc, opname, None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] # find CALL/DELEGATECALL/SELFDESTRUCT
[codex:343406] for i,(pc,opname,data) in enumerate(ops):
[codex:343406] if opname in ('CALL','DELEGATECALL','SELFDESTRUCT'):
[codex:343406] # get last few ops for context
[codex:343406] start=max(0,i-10)
[codex:343406] ctx=ops[start:i+1]
[codex:343406] interesting.append((pc,opname,ctx))
[codex:343406]
[codex:343406] print('Total ops',len(ops),'calls',len(interesting))
[codex:343406] for pc,opname,ctx in interesting:
[codex:343406] print('\\n',pc,opname)
[codex:343406] for cpc,coname,cdata in ctx:
[codex:343406] if cdata is None:
[codex:343406] print(f' {cpc:04x}: {coname}')
[codex:343406] else:
[codex:343406] print(f' {cpc:04x}: {coname} 0x{cdata}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 34ms:
[codex:343406] Total ops 4161 calls 2
[codex:343406]
[codex:343406] 5564 CALL
[codex:343406] 15af: ADD
[codex:343406] 15b0: PUSH1 0x00
[codex:343406] 15b2: DUP3
[codex:343406] 15b3: DUP8
[codex:343406] 15b4: DUP4
[codex:343406] 15b5: DUP11
[codex:343406] 15b6: DUP13
[codex:343406] 15b7: PUSH2 0x8796
[codex:343406] 15ba: GAS
[codex:343406] 15bb: SUB
[codex:343406] 15bc: CALL
[codex:343406]
[codex:343406] 5890 SELFDESTRUCT
[codex:343406] 16e1: JUMP
[codex:343406] 16e2: JUMPDEST
[codex:343406] 16e3: SWAP1
[codex:343406] 16e4: JUMP
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing CALL and selfdestruct metadata**
[codex:343406]
[codex:343406] I'm checking the bytecode around the single external CALL at 0x15bc to understand its arguments and see if value sent is controllable or if access control exists. The selfdestruct opcode appears only in metadata and isn't reachable during execution. I'll disassemble a wider range of instructions, including stack effects, to better understand the call context and contract structure, which seems to manage address lists and might have role-based or multi-sig features.
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',
[codex:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op = code_bytes[pc]
[codex:343406] opname = opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data = code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] # find index of CALL
[codex:343406] call_index = [i for i,(pc,op,dat) in enumerate(ops) if op=='CALL'][0]
[codex:343406] start = max(0, call_index-40)
[codex:343406] end = min(len(ops), call_index+10)
[codex:343406] for i in range(start,end):
[codex:343406] pc,op,dat = ops[i]
[codex:343406] if dat:
[codex:343406] print(f'{i:04d} {pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{i:04d} {pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 38ms:
[codex:343406] 3872 156c: ADD
[codex:343406] 3873 156d: SWAP1
[codex:343406] 3874 156e: SSTORE
[codex:343406] 3875 156f: DUP2
[codex:343406] 3876 1570: PUSH32 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51
[codex:343406] 3877 1591: PUSH1 0x40
[codex:343406] 3878 1593: MLOAD
[codex:343406] 3879 1594: PUSH1 0x40
[codex:343406] 3880 1596: MLOAD
[codex:343406] 3881 1597: DUP1
[codex:343406] 3882 1598: SWAP2
[codex:343406] 3883 1599: SUB
[codex:343406] 3884 159a: SWAP1
[codex:343406] 3885 159b: LOG3
[codex:343406] 3886 159c: JUMPDEST
[codex:343406] 3887 159d: JUMPDEST
[codex:343406] 3888 159e: POP
[codex:343406] 3889 159f: SWAP4
[codex:343406] 3890 15a0: SWAP3
[codex:343406] 3891 15a1: POP
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing CALL stack and function entry points**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] # find occurrences of 0x6115a5 (PUSH2 0x15a5)
[codex:343406] pattern = '6115a5'
[codex:343406] idxs = [m.start()//2 for m in re.finditer(pattern, hexstr)]
[codex:343406] print('occurrences',idxs)
[codex:343406] # show surrounding bytes for each
[codex:343406] for idx in idxs:
[codex:343406] start=max(0, idx-10)
[codex:343406] end=idx+10
[codex:343406] print(hex(idx), hexstr[start*2:end*2])
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 28ms:
[codex:343406] occurrences [5156]
[codex:343406] 0x1424 168201915b50505050506115a5565b1561145f57
[codex:343406]
[codex:343406] thinking
[codex:343406] **Examining function references around 0x1424**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # op map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',
[codex:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406]
[codex:343406] # disassemble in range
[codex:343406] start=0x13d0
[codex:343406] end=0x1460
[codex:343406] pc=0
[codex:343406] ops=[]
[codex:343406] while pc < len(code_bytes):
[codex:343406] op=code_bytes[pc]
[codex:343406] opname=opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data=code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] for pc,op,dat in ops:
[codex:343406] if start <= pc <= end:
[codex:343406] if dat:
[codex:343406] print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 33ms:
[codex:343406] 13d0: SWAP1
[codex:343406] 13d1: DIV
[codex:343406] 13d2: DUP1
[codex:343406] 13d3: ISZERO
[codex:343406] 13d4: PUSH2 0x141e
[codex:343406] 13d7: JUMPI
[codex:343406] 13d8: DUP1
[codex:343406] 13d9: PUSH1 0x1f
[codex:343406] 13db: LT
[codex:343406] 13dc: PUSH2 0x13f3
[codex:343406] 13df: JUMPI
[codex:343406] 13e0: PUSH2 0x0100
[codex:343406] 13e3: DUP1
[codex:343406] 13e4: DUP4
[codex:343406] 13e5: SLOAD
[codex:343406] 13e6: DIV
[codex:343406] 13e7: MUL
[codex:343406] 13e8: DUP4
[codex:343406] 13e9: MSTORE
[codex:343406] 13ea: SWAP2
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing MultiSig wallet bytecode**
[codex:343406]
[codex:343406] This contract looks like a multisig wallet, possibly Gnosis or Aragon style, based on function selectors, loops, event logs, and external calls with value and data. I'm trying to verify if the external call can be executed without proper ownership or confirmations by mapping selectors and event signatures, checking if access controls prevent exploits like unauthorized transaction submission or owner modification. I'll attempt to offline match event signatures and confirm safeguards around owner and transaction management.
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import hashlib
[codex:343406]
[codex:343406] def keccak(text):
[codex:343406] return hashlib.new('sha3_256', text.encode()).hexdigest() # Ethereum uses Keccak-256, not NIST; but python's sha3_256 is NIST. Need pysha3 for keccak.
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 25ms:
[codex:343406]
[codex:343406]
[codex:343406] thinking
[codex:343406] **Identifying contract by function selectors**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] try:
[codex:343406] from Crypto.Hash import keccak
[codex:343406] print('have pycryptodome')
[codex:343406] k = keccak.new(digest_bits=256)
[codex:343406] k.update(b'getOwners()')
[codex:343406] print(k.hexdigest())
[codex:343406] except Exception as e:
[codex:343406] print('no', e)
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 49ms:
[codex:343406] have pycryptodome
[codex:343406] a0e67e2bdc0a6d8a09ccd6c353c9df590807ad66ff5e6630c4f31a86dfa84821
[codex:343406]
[codex:343406] thinking
[codex:343406] **Preparing function selectors for matching**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] from Crypto.Hash import keccak
[codex:343406] selectors = {
[codex:343406] '025e7c27','173825d9','20ea8d86','2f54bf6e','3411c81c','54741525','7065cb48','784547a7','8b51d13f','9ace38c2','a0e67e2b','a8abe69a','b5dc40c3','b77bf600','ba51a6df','c01a8c84','c6427474','d74f8edd','dc8452cd','e20056e6','ee22610b'
[codex:343406] }
[codex:343406] # candidate function signatures for Gnosis MultiSigWallet (old)
[codex:343406] candidates = [
[codex:343406] 'addOwner(address)',
[codex:343406] 'removeOwner(address)',
[codex:343406] 'replaceOwner(address,address)',
[codex:343406] 'changeRequirement(uint256)',
[codex:343406] 'confirmTransaction(uint256)',
[codex:343406] 'revokeConfirmation(uint256)',
[codex:343406] 'executeTransaction(uint256)',
[codex:343406] 'submitTransaction(address,uint256,bytes)',
[codex:343406] 'isConfirmed(uint256)',
[codex:343406] 'getConfirmationCount(uint256)',
[codex:343406] 'getTransactionCount(bool,bool)',
[codex:343406] 'getOwners()',
[codex:343406] 'getOwnerCount()',
[codex:343406] 'getConfirmations(uint256)',
[codex:343406] 'getTransactionIds(uint256,uint256,bool,bool)',
[codex:343406] 'transactionCount()',
[codex:343406] 'transactions(uint256)',
[codex:343406] 'isOwner(address)'
[codex:343406] ]
[codex:343406]
[codex:343406] candidates += [
[codex:343406] # Gnosis Safe (v0.5/1.0) style
[codex:343406] 'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:343406] 'getThreshold()',
[codex:343406] 'getOwners()',
[codex:343406] 'nonce()',
[codex:343406] 'approvedHashes(address,bytes32)',
[codex:343406] 'domainSeparator()',
[codex:343406] 'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:343406] 'isOwner(address)',
[codex:343406] 'getModules()',
[codex:343406] 'enableModule(address)',
[codex:343406] 'disableModule(address,address)',
[codex:343406] 'setGuard(address)',
[codex:343406] 'getGuard()',
[codex:343406] 'approveHash(bytes32)',
[codex:343406] ]
[codex:343406]
[codex:343406] # compute selectors
[codex:343406] for sig in candidates:
[codex:343406] k = keccak.new(digest_bits=256)
[codex:343406] k.update(sig.encode())
[codex:343406] sel = k.hexdigest()[:8]
[codex:343406] if sel in selectors:
[codex:343406] print(sel, sig)
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 36ms:
[codex:343406] 7065cb48 addOwner(address)
[codex:343406] 173825d9 removeOwner(address)
[codex:343406] e20056e6 replaceOwner(address,address)
[codex:343406] ba51a6df changeRequirement(uint256)
[codex:343406] c01a8c84 confirmTransaction(uint256)
[codex:343406] 20ea8d86 revokeConfirmation(uint256)
[codex:343406] ee22610b executeTransaction(uint256)
[codex:343406] c6427474 submitTransaction(address,uint256,bytes)
[codex:343406] 784547a7 isConfirmed(uint256)
[codex:343406] 8b51d13f getConfirmationCount(uint256)
[codex:343406] 54741525 getTransactionCount(bool,bool)
[codex:343406] a0e67e2b getOwners()
[codex:343406] b5dc40c3 getConfirmations(uint256)
[codex:343406] a8abe69a getTransactionIds(uint256,uint256,bool,bool)
[codex:343406] b77bf600 transactionCount()
[codex:343406] 9ace38c2 transactions(uint256)
[codex:343406] 2f54bf6e isOwner(address)
[codex:343406] a0e67e2b getOwners()
[codex:343406] 2f54bf6e isOwner(address)
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing MultiSigWallet for vulnerabilities**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] from Crypto.Hash import keccak
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # disassemble to ops with immediate
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op = code_bytes[pc]
[codex:343406] opname = opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data = code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] # scan for pattern PUSH4 sel, EQ, PUSH2 dest, JUMPI
[codex:343406] mapping = []
[codex:343406] for i in range(len(ops)-3):
[codex:343406] pc1,op1,data1 = ops[i]
[codex:343406] pc2,op2,data2 = ops[i+1]
[codex:343406] pc3,op3,data3 = ops[i+2]
[codex:343406] pc4,op4,data4 = ops[i+3]
[codex:343406] if op1=='PUSH4' and op2=='EQ' and op3=='PUSH2' and op4=='JUMPI':
[codex:343406] sel = data1.hex()
[codex:343406] dest = int.from_bytes(data3,'big')
[codex:343406] mapping.append((sel,dest,pc1))
[codex:343406]
[codex:343406] print('selector mapping count',len(mapping))
[codex:343406] for sel,dest,pc1 in mapping:
[codex:343406] print(sel, hex(dest), 'at', hex(pc1))
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 74ms:
[codex:343406] selector mapping count 20
[codex:343406] 173825d9 0x197 at 0x3f
[codex:343406] 20ea8d86 0x1b8 at 0x4a
[codex:343406] 2f54bf6e 0x1d0 at 0x55
[codex:343406] 3411c81c 0x203 at 0x60
[codex:343406] 54741525 0x239 at 0x6b
[codex:343406] 7065cb48 0x268 at 0x76
[codex:343406] 784547a7 0x289 at 0x81
[codex:343406] 8b51d13f 0x2b3 at 0x8c
[codex:343406] 9ace38c2 0x2db at 0x97
[codex:343406] a0e67e2b 0x39a at 0xa2
[codex:343406] a8abe69a 0x401 at 0xad
[codex:343406] b5dc40c3 0x478 at 0xb8
[codex:343406] b77bf600 0x4e2 at 0xc3
[codex:343406] ba51a6df 0x507 at 0xce
[codex:343406] c01a8c84 0x51f at 0xd9
[codex:343406] c6427474 0x537 at 0xe4
[codex:343406] d74f8edd 0x5ae at 0xef
[codex:343406] dc8452cd 0x5d3 at 0xfa
[codex:343406] e20056e6 0x5f8 at 0x105
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing fallback selector and dispatch start**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op=code_bytes[pc]
[codex:343406] opname=opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data=code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] # show around 0x537 dest
[codex:343406] start=0x520
[codex:343406] end=0x5a0
[codex:343406] for pc,op,dat in ops:
[codex:343406] if start <= pc <= end:
[codex:343406] if dat:
[codex:343406] print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 32ms:
[codex:343406] 0520: CALLVALUE
[codex:343406] 0521: ISZERO
[codex:343406] 0522: PUSH2 0x052a
[codex:343406] 0525: JUMPI
[codex:343406] 0526: PUSH1 0x00
[codex:343406] 0528: DUP1
[codex:343406] 0529: REVERT
[codex:343406] 052a: JUMPDEST
[codex:343406] 052b: PUSH2 0x0162
[codex:343406] 052e: PUSH1 0x04
[codex:343406] 0530: CALLDATALOAD
[codex:343406] 0531: PUSH2 0x0fd9
[codex:343406] 0534: JUMP
[codex:343406] 0535: JUMPDEST
[codex:343406] 0536: STOP
[codex:343406] 0537: JUMPDEST
[codex:343406] 0538: CALLVALUE
[codex:343406] 0539: ISZERO
[codex:343406] 053a: PUSH2 0x0542
[codex:343406] 053d: JUMPI
[codex:343406]
[codex:343406] thinking
[codex:343406] **Inspecting internal submitTransaction function**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406]
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op=code_bytes[pc]
[codex:343406] opname=opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data=code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] start=0x10b0
[codex:343406] end=0x1120
[codex:343406] for pc,op,dat in ops:
[codex:343406] if start <= pc <= end:
[codex:343406] if dat:
[codex:343406] print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 34ms:
[codex:343406] 10b0: PUSH1 0x40
[codex:343406] 10b2: MLOAD
[codex:343406] 10b3: DUP1
[codex:343406] 10b4: SWAP2
[codex:343406] 10b5: SUB
[codex:343406] 10b6: SWAP1
[codex:343406] 10b7: LOG4
[codex:343406] 10b8: PUSH2 0x08f2
[codex:343406] 10bb: DUP6
[codex:343406] 10bc: PUSH2 0x12b7
[codex:343406] 10bf: JUMP
[codex:343406] 10c0: JUMPDEST
[codex:343406] 10c1: JUMPDEST
[codex:343406] 10c2: JUMPDEST
[codex:343406] 10c3: POP
[codex:343406] 10c4: POP
[codex:343406] 10c5: JUMPDEST
[codex:343406] 10c6: POP
[codex:343406] 10c7: JUMPDEST
[codex:343406] 10c8: POP
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing function call structure**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # op map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406]
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op=code_bytes[pc]
[codex:343406] opname=opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data=code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] start=0x0fd0
[codex:343406] end=0x1060
[codex:343406] for pc,op,dat in ops:
[codex:343406] if start <= pc <= end:
[codex:343406] if dat:
[codex:343406] print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 33ms:
[codex:343406] 0fd0: SWAP1
[codex:343406] 0fd1: LOG2
[codex:343406] 0fd2: JUMPDEST
[codex:343406] 0fd3: JUMPDEST
[codex:343406] 0fd4: POP
[codex:343406] 0fd5: POP
[codex:343406] 0fd6: JUMPDEST
[codex:343406] 0fd7: POP
[codex:343406] 0fd8: JUMP
[codex:343406] 0fd9: JUMPDEST
[codex:343406] 0fda: CALLER
[codex:343406] 0fdb: PUSH1 0x01
[codex:343406] 0fdd: PUSH1 0xa0
[codex:343406] 0fdf: PUSH1 0x02
[codex:343406] 0fe1: EXP
[codex:343406] 0fe2: SUB
[codex:343406] 0fe3: DUP2
[codex:343406] 0fe4: AND
[codex:343406] 0fe5: PUSH1 0x00
[codex:343406] 0fe7: SWAP1
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing MultiSigWallet access controls**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] from Crypto.Hash import keccak
[codex:343406] selectors = {'025e7c27','3411c81c','dc8452cd'}
[codex:343406] # guess function signatures from MultiSigWallet
[codex:343406] candidates = [
[codex:343406] 'getOwnerCount()',
[codex:343406] 'ownerExists(address)',
[codex:343406] 'transactionExists(uint256)',
[codex:343406] 'confirmationCount(uint256)',
[codex:343406] 'required()',
[codex:343406] 'getRequirement()',
[codex:343406] 'isConfirmed(uint256)',
[codex:343406] 'getOwners()',
[codex:343406] 'getTransactionCount(bool,bool)',
[codex:343406] 'getConfirmations(uint256)',
[codex:343406] 'getTransactionIds(uint256,uint256,bool,bool)',
[codex:343406] 'getTransaction(uint256)',
[codex:343406] 'getDailyLimit()',
[codex:343406] 'isUnderLimit(uint256)',
[codex:343406] 'calcMaxWithdraw()',
[codex:343406] 'resetSpentToday()',
[codex:343406] 'setDailyLimit(uint256)',
[codex:343406] 'spentToday()',
[codex:343406] 'lastDay()',
[codex:343406] 'transactions(uint256)',
[codex:343406] 'required()',
[codex:343406] 'ownerCount()'
[codex:343406] ]
[codex:343406]
[codex:343406] for sig in candidates:
[codex:343406] k = keccak.new(digest_bits=256); k.update(sig.encode()); sel = k.hexdigest()[:8]
[codex:343406] if sel in selectors:
[codex:343406] print(sel, sig)
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 38ms:
[codex:343406] dc8452cd required()
[codex:343406] dc8452cd required()
[codex:343406]
[codex:343406] thinking
[codex:343406] **Confirming function associations**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] from Crypto.Hash import keccak
[codex:343406] for sig in ['getOwnerCount()','getConfirmationCount(uint256)','getTransactionCount(bool,bool)','getConfirmations(uint256)','getTransactionIds(uint256,uint256,bool,bool)','getOwners()','transactionCount()','confirmations(uint256,address)','owners(uint256)','isOwner(address)']:
[codex:343406] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:343406] print(sig, k.hexdigest()[:8])
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 40ms:
[codex:343406] getOwnerCount() ef18374a
[codex:343406] getConfirmationCount(uint256) 8b51d13f
[codex:343406] getTransactionCount(bool,bool) 54741525
[codex:343406] getConfirmations(uint256) b5dc40c3
[codex:343406] getTransactionIds(uint256,uint256,bool,bool) a8abe69a
[codex:343406] getOwners() a0e67e2b
[codex:343406] transactionCount() b77bf600
[codex:343406] confirmations(uint256,address) 3411c81c
[codex:343406] owners(uint256) 025e7c27
[codex:343406] isOwner(address) 2f54bf6e
[codex:343406]
[codex:343406] thinking
[codex:343406] **Verifying MultiSigWallet security assumptions**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406]
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op=code_bytes[pc]
[codex:343406] opname=opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data=code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] start=0x61f
[codex:343406] end=0x6b0
[codex:343406] for pc,op,dat in ops:
[codex:343406] if start <= pc <= end:
[codex:343406] if dat:
[codex:343406] print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 31ms:
[codex:343406] 061f: JUMPDEST
[codex:343406] 0620: CALLVALUE
[codex:343406] 0621: ISZERO
[codex:343406] 0622: PUSH2 0x062a
[codex:343406] 0625: JUMPI
[codex:343406] 0626: PUSH1 0x00
[codex:343406] 0628: DUP1
[codex:343406] 0629: REVERT
[codex:343406] 062a: JUMPDEST
[codex:343406] 062b: PUSH2 0x0162
[codex:343406] 062e: PUSH1 0x04
[codex:343406] 0630: CALLDATALOAD
[codex:343406] 0631: PUSH2 0x12b7
[codex:343406] 0634: JUMP
[codex:343406] 0635: JUMPDEST
[codex:343406] 0636: STOP
[codex:343406] 0637: JUMPDEST
[codex:343406] 0638: PUSH1 0x03
[codex:343406] 063a: DUP1
[codex:343406] 063b: SLOAD
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing internal jump in executeTransaction**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:343406] 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:343406] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406]
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406] op=code_bytes[pc]
[codex:343406] opname=opmap.get(op, f'OP{op:02x}')
[codex:343406] if 0x60 <= op <= 0x7f:
[codex:343406] n=op-0x5f
[codex:343406] data=code_bytes[pc+1:pc+1+n]
[codex:343406] ops.append((pc,opname,data.hex()))
[codex:343406] pc += 1+n
[codex:343406] else:
[codex:343406] ops.append((pc,opname,None))
[codex:343406] pc += 1
[codex:343406]
[codex:343406] start=0x12b0
[codex:343406] end=0x1350
[codex:343406] for pc,op,dat in ops:
[codex:343406] if start <= pc <= end:
[codex:343406] if dat:
[codex:343406] print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406] else:
[codex:343406] print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 40ms:
[codex:343406] 12b0: JUMPDEST
[codex:343406] 12b1: POP
[codex:343406] 12b2: JUMPDEST
[codex:343406] 12b3: POP
[codex:343406] 12b4: POP
[codex:343406] 12b5: POP
[codex:343406] 12b6: JUMP
[codex:343406] 12b7: JUMPDEST
[codex:343406] 12b8: CALLER
[codex:343406] 12b9: PUSH1 0x01
[codex:343406] 12bb: PUSH1 0xa0
[codex:343406] 12bd: PUSH1 0x02
[codex:343406] 12bf: EXP
[codex:343406] 12c0: SUB
[codex:343406] 12c1: DUP2
[codex:343406] 12c2: AND
[codex:343406] 12c3: PUSH1 0x00
[codex:343406] 12c5: SWAP1
[codex:343406] 12c6: DUP2
[codex:343406] 12c7: MSTORE
[codex:343406]
[codex:343406] thinking
[codex:343406] **Analyzing MultiSigWallet bytecode for exploits**
[codex:343406] codex
[codex:343406] {"no_findings":true,"summary":"No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.","findings":[]}
[codex:343406] tokens used
[codex:343406] 74,346
[codex:343406] {"no_findings":true,"summary":"No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.","findings":[]}
{
"codex": {
"ran_at": "2026-01-04T04:57:01.671565+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.",
"raw_final": {
"summary": "No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x011a 0000000a: JUMPI 0000000b: PUSH4 0xffffffff 00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002e: PUSH1 0x00 00000030: CALLDATALOAD 00000031: DIV 00000032: AND 00000033: PUSH4 0x025e7c27 00000038: DUP2 00000039: EQ 0000003a: PUSH2 0x0165 0000003d: JUMPI 0000003e: DUP1 0000003f: PUSH4 0x173825d9 00000044: EQ 00000045: PUSH2 0x0197 00000048: JUMPI 00000049: DUP1 0000004a: PUSH4 0x20ea8d86 0000004f: EQ 00000050: PUSH2 0x01b8 00000053: JUMPI 00000054: DUP1 00000055: PUSH4 0x2f54bf6e 0000005a: EQ 0000005b: PUSH2 0x01d0 0000005e: JUMPI 0000005f: DUP1 00000060: PUSH4 0x3411c81c 00000065: EQ 00000066: PUSH2 0x0203 00000069: JUMPI 0000006a: DUP1 0000006b: PUSH4 0x54741525 00000070: EQ 00000071: PUSH2 0x0239 00000074: JUMPI 00000075: DUP1 00000076: PUSH4 0x7065cb48 0000007b: EQ 0000007c: PUSH2 0x0268 0000007f: JUMPI 00000080: DUP1 00000081: PUSH4 0x784547a7 00000086: EQ 00000087: PUSH2 0x0289 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0x8b51d13f 00000091: EQ 00000092: PUSH2 0x02b3 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0x9ace38c2 0000009c: EQ 0000009d: PUSH2 0x02db 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xa0e67e2b 000000a7: EQ 000000a8: PUSH2 0x039a 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0xa8abe69a 000000b2: EQ 000000b3: PUSH2 0x0401 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0xb5dc40c3 000000bd: EQ 000000be: PUSH2 0x0478 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0xb77bf600 000000c8: EQ 000000c9: PUSH2 0x04e2 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0xba51a6df 000000d3: EQ 000000d4: PUSH2 0x0507 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0xc01a8c84 000000de: EQ 000000df: PUSH2 0x051f 000000e2: JUMPI 000000e3: DUP1 000000e4: PUSH4 0xc6427474 000000e9: EQ 000000ea: PUSH2 0x0537 000000ed: JUMPI 000000ee: DUP1 000000ef: PUSH4 0xd74f8edd 000000f4: EQ 000000f5: PUSH2 0x05ae 000000f8: JUMPI 000000f9: DUP1 000000fa: PUSH4 0xdc8452cd 000000ff: EQ 00000100: PUSH2 0x05d3 00000103: JUMPI 00000104: DUP1 00000105: PUSH4 0xe20056e6 0000010a: EQ 0000010b: PUSH2 0x05f8 0000010e: JUMPI 0000010f: DUP1 00000110: PUSH4 0xee22610b 00000115: EQ 00000116: PUSH2 0x061f 00000119: JUMPI 0000011a: JUMPDEST 0000011b: JUMPDEST 0000011c: PUSH1 0x00 0000011e: CALLVALUE 0000011f: GT 00000120: ISZERO 00000121: PUSH2 0x0162 00000124: JUMPI 00000125: CALLER 00000126: PUSH1 0x01 00000128: PUSH1 0xa0 0000012a: PUSH1 0x02 0000012c: EXP 0000012d: SUB 0000012e: AND 0000012f: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c 00000150: CALLVALUE 00000151: PUSH1 0x40 00000153: MLOAD 00000154: SWAP1 00000155: DUP2 00000156: MSTORE 00000157: PUSH1 0x20 00000159: ADD 0000015a: PUSH1 0x40 0000015c: MLOAD 0000015d: DUP1 0000015e: SWAP2 0000015f: SUB 00000160: SWAP1 00000161: LOG2 00000162: JUMPDEST 00000163: JUMPDEST 00000164: STOP 00000165: JUMPDEST 00000166: CALLVALUE 00000167: ISZERO 00000168: PUSH2 0x0170 0000016b: JUMPI 0000016c: PUSH1 0x00 0000016e: DUP1 0000016f: REVERT 00000170: JUMPDEST 00000171: PUSH2 0x017b 00000174: PUSH1 0x04 00000176: CALLDATALOAD 00000177: PUSH2 0x0637 0000017a: JUMP 0000017b: JUMPDEST 0000017c: PUSH1 0x40 0000017e: MLOAD 0000017f: PUSH1 0x01 00000181: PUSH1 0xa0 00000183: PUSH1 0x02 00000185: EXP 00000186: SUB 00000187: SWAP1 00000188: SWAP2 00000189: AND 0000018a: DUP2 0000018b: MSTORE 0000018c: PUSH1 0x20 0000018e: ADD 0000018f: PUSH1 0x40 00000191: MLOAD 00000192: DUP1 00000193: SWAP2 00000194: SUB 00000195: SWAP1 00000196: RETURN 00000197: JUMPDEST 00000198: CALLVALUE 00000199: ISZERO 0000019a: PUSH2 0x01a2 0000019d: JUMPI 0000019e: PUSH1 0x00 000001a0: DUP1 000001a1: REVERT 000001a2: JUMPDEST 000001a3: PUSH2 0x0162 000001a6: PUSH1 0x01 000001a8: PUSH1 0xa0 000001aa: PUSH1 0x02 000001ac: EXP 000001ad: SUB 000001ae: PUSH1 0x04 000001b0: CALLDATALOAD 000001b1: AND 000001b2: PUSH2 0x0669 000001b5: JUMP 000001b6: JUMPDEST 000001b7: STOP 000001b8: JUMPDEST 000001b9: CALLVALUE 000001ba: ISZERO 000001bb: PUSH2 0x01c3 000001be: JUMPI 000001bf: PUSH1 0x00 000001c1: DUP1 000001c2: REVERT 000001c3: JUMPDEST 000001c4: PUSH2 0x0162 000001c7: PUSH1 0x04 000001c9: CALLDATALOAD 000001ca: PUSH2 0x081a 000001cd: JUMP 000001ce: JUMPDEST 000001cf: STOP 000001d0: JUMPDEST 000001d1: CALLVALUE 000001d2: ISZERO 000001d3: PUSH2 0x01db 000001d6: JUMPI 000001d7: PUSH1 0x00 000001d9: DUP1 000001da: REVERT 000001db: JUMPDEST 000001dc: PUSH2 0x01ef 000001df: PUSH1 0x01 000001e1: PUSH1 0xa0 000001e3: PUSH1 0x02 000001e5: EXP 000001e6: SUB 000001e7: PUSH1 0x04 000001e9: CALLDATALOAD 000001ea: AND 000001eb: PUSH2 0x08fc 000001ee: JUMP 000001ef: JUMPDEST 000001f0: PUSH1 0x40 000001f2: MLOAD 000001f3: SWAP1 000001f4: ISZERO 000001f5: ISZERO 000001f6: DUP2 000001f7: MSTORE 000001f8: PUSH1 0x20 000001fa: ADD 000001fb: PUSH1 0x40 000001fd: MLOAD 000001fe: DUP1 000001ff: SWAP2 00000200: SUB 00000201: SWAP1 00000202: RETURN 00000203: JUMPDEST 00000204: CALLVALUE 00000205: ISZERO 00000206: PUSH2 0x020e 00000209: JUMPI 0000020a: PUSH1 0x00 0000020c: DUP1 0000020d: REVERT 0000020e: JUMPDEST 0000020f: PUSH2 0x01ef 00000212: PUSH1 0x04 00000214: CALLDATALOAD 00000215: PUSH1 0x01 00000217: PUSH1 0xa0 00000219: PUSH1 0x02 0000021b: EXP 0000021c: SUB 0000021d: PUSH1 0x24 0000021f: CALLDATALOAD 00000220: AND 00000221: PUSH2 0x0911 00000224: JUMP 00000225: JUMPDEST 00000226: PUSH1 0x40 00000228: MLOAD 00000229: SWAP1 0000022a: ISZERO 0000022b: ISZERO 0000022c: DUP2 0000022d: MSTORE 0000022e: PUSH1 0x20 00000230: ADD 00000231: PUSH1 0x40 00000233: MLOAD 00000234: DUP1 00000235: SWAP2 00000236: SUB 00000237: SWAP1 00000238: RETURN 00000239: JUMPDEST 0000023a: CALLVALUE 0000023b: ISZERO 0000023c: PUSH2 0x0244 0000023f: JUMPI 00000240: PUSH1 0x00 00000242: DUP1 00000243: REVERT 00000244: JUMPDEST 00000245: PUSH2 0x0256 00000248: PUSH1 0x04 0000024a: CALLDATALOAD 0000024b: ISZERO 0000024c: ISZERO 0000024d: PUSH1 0x24 0000024f: CALLDATALOAD 00000250: ISZERO 00000251: ISZERO 00000252: PUSH2 0x0931 00000255: JUMP 00000256: JUMPDEST 00000257: PUSH1 0x40 00000259: MLOAD 0000025a: SWAP1 0000025b: DUP2 0000025c: MSTORE 0000025d: PUSH1 0x20 0000025f: ADD 00000260: PUSH1 0x40 00000262: MLOAD 00000263: DUP1 00000264: SWAP2 00000265: SUB 00000266: SWAP1 00000267: RETURN 00000268: JUMPDEST 00000269: CALLVALUE 0000026a: ISZERO 0000026b: PUSH2 0x0273 0000026e: JUMPI 0000026f: PUSH1 0x00 00000271: DUP1 00000272: REVERT 00000273: JUMPDEST 00000274: PUSH2 0x0162 00000277: PUSH1 0x01 00000279: PUSH1 0xa0 0000027b: PUSH1 0x02 0000027d: EXP 0000027e: SUB 0000027f: PUSH1 0x04 00000281: CALLDATALOAD 00000282: AND 00000283: PUSH2 0x09a0 00000286: JUMP 00000287: JUMPDEST 00000288: STOP 00000289: JUMPDEST 0000028a: CALLVALUE 0000028b: ISZERO 0000028c: PUSH2 0x0294 0000028f: JUMPI 00000290: PUSH1 0x00 00000292: DUP1 00000293: REVERT 00000294: JUMPDEST 00000295: PUSH2 0x01ef 00000298: PUSH1 0x04 0000029a: CALLDATALOAD 0000029b: PUSH2 0x0add 0000029e: JUMP 0000029f: JUMPDEST 000002a0: PUSH1 0x40 000002a2: MLOAD 000002a3: SWAP1 000002a4: ISZERO 000002a5: ISZERO 000002a6: DUP2 000002a7: MSTORE 000002a8: PUSH1 0x20 000002aa: ADD 000002ab: PUSH1 0x40 000002ad: MLOAD 000002ae: DUP1 000002af: SWAP2 000002b0: SUB 000002b1: SWAP1 000002b2: RETURN 000002b3: JUMPDEST 000002b4: CALLVALUE 000002b5: ISZERO 000002b6: PUSH2 0x02be 000002b9: JUMPI 000002ba: PUSH1 0x00 000002bc: DUP1 000002bd: REVERT 000002be: JUMPDEST 000002bf: PUSH2 0x0256 000002c2: PUSH1 0x04 000002c4: CALLDATALOAD 000002c5: PUSH2 0x0b71 000002c8: JUMP 000002c9: JUMPDEST 000002ca: PUSH1 0x40 000002cc: MLOAD 000002cd: SWAP1 000002ce: DUP2 000002cf: MSTORE 000002d0: PUSH1 0x20 000002d2: ADD 000002d3: PUSH1 0x40 000002d5: MLOAD 000002d6: DUP1 000002d7: SWAP2 000002d8: SUB 000002d9: SWAP1 000002da: RETURN 000002db: JUMPDEST 000002dc: CALLVALUE 000002dd: ISZERO 000002de: PUSH2 0x02e6 000002e1: JUMPI 000002e2: PUSH1 0x00 000002e4: DUP1 000002e5: REVERT 000002e6: JUMPDEST 000002e7: PUSH2 0x02f1 000002ea: PUSH1 0x04 000002ec: CALLDATALOAD 000002ed: PUSH2 0x0bf0 000002f0: JUMP 000002f1: JUMPDEST 000002f2: PUSH1 0x40 000002f4: MLOAD 000002f5: PUSH1 0x01 000002f7: PUSH1 0xa0 000002f9: PUSH1 0x02 000002fb: EXP 000002fc: SUB 000002fd: DUP6 000002fe: AND 000002ff: DUP2 00000300: MSTORE 00000301: PUSH1 0x20 00000303: DUP2 00000304: ADD 00000305: DUP5 00000306: SWAP1 00000307: MSTORE 00000308: DUP2 00000309: ISZERO 0000030a: ISZERO 0000030b: PUSH1 0x60 0000030d: DUP3 0000030e: ADD 0000030f: MSTORE 00000310: PUSH1 0x80 00000312: PUSH1 0x40 00000314: DUP3 00000315: ADD 00000316: DUP2 00000317: DUP2 00000318: MSTORE 00000319: DUP5 0000031a: SLOAD 0000031b: PUSH1 0x02 0000031d: PUSH1 0x00 0000031f: NOT 00000320: PUSH2 0x0100 00000323: PUSH1 0x01 00000325: DUP5 00000326: AND 00000327: ISZERO 00000328: MUL 00000329: ADD 0000032a: SWAP1 0000032b: SWAP2 0000032c: AND 0000032d: DIV 0000032e: SWAP2 0000032f: DUP4 00000330: ADD 00000331: DUP3 00000332: SWAP1 00000333: MSTORE 00000334: SWAP1 00000335: PUSH1 0xa0 00000337: DUP4 00000338: ADD 00000339: SWAP1 0000033a: DUP6 0000033b: SWAP1 0000033c: DUP1 0000033d: ISZERO 0000033e: PUSH2 0x0388 00000341: JUMPI 00000342: DUP1 00000343: PUSH1 0x1f 00000345: LT 00000346: PUSH2 0x035d 00000349: JUMPI 0000034a: PUSH2 0x0100 0000034d: DUP1 0000034e: DUP4 0000034f: SLOAD 00000350: DIV 00000351: MUL 00000352: DUP4 00000353: MSTORE 00000354: SWAP2 00000355: PUSH1 0x20 00000357: ADD 00000358: SWAP2 00000359: PUSH2 0x0388 0000035c: JUMP 0000035d: JUMPDEST 0000035e: DUP3 0000035f: ADD 00000360: SWAP2 00000361: SWAP1 00000362: PUSH1 0x00 00000364: MSTORE 00000365: PUSH1 0x20 00000367: PUSH1 0x00 00000369: KECCAK256 0000036a: SWAP1 0000036b: JUMPDEST 0000036c: DUP2 0000036d: SLOAD 0000036e: DUP2 0000036f: MSTORE 00000370: SWAP1 00000371: PUSH1 0x01 00000373: ADD 00000374: SWAP1 00000375: PUSH1 0x20 00000377: ADD 00000378: DUP1 00000379: DUP4 0000037a: GT 0000037b: PUSH2 0x036b 0000037e: JUMPI 0000037f: DUP3 00000380: SWAP1 00000381: SUB 00000382: PUSH1 0x1f 00000384: AND 00000385: DUP3 00000386: ADD 00000387: SWAP2 00000388: JUMPDEST 00000389: POP 0000038a: POP 0000038b: SWAP6 0000038c: POP 0000038d: POP 0000038e: POP 0000038f: POP 00000390: POP 00000391: POP 00000392: PUSH1 0x40 00000394: MLOAD 00000395: DUP1 00000396: SWAP2 00000397: SUB 00000398: SWAP1 00000399: RETURN 0000039a: JUMPDEST 0000039b: CALLVALUE 0000039c: ISZERO 0000039d: PUSH2 0x03a5 000003a0: JUMPI 000003a1: PUSH1 0x00 000003a3: DUP1 000003a4: REVERT 000003a5: JUMPDEST 000003a6: PUSH2 0x03ad 000003a9: PUSH2 0x0c24 000003ac: JUMP 000003ad: JUMPDEST 000003ae: PUSH1 0x40 000003b0: MLOAD 000003b1: PUSH1 0x20 000003b3: DUP1 000003b4: DUP3 000003b5: MSTORE 000003b6: DUP2 000003b7: SWAP1 000003b8: DUP2 000003b9: ADD 000003ba: DUP4 000003bb: DUP2 000003bc: DUP2 000003bd: MLOAD 000003be: DUP2 000003bf: MSTORE 000003c0: PUSH1 0x20 000003c2: ADD 000003c3: SWAP2 000003c4: POP 000003c5: DUP1 000003c6: MLOAD 000003c7: SWAP1 000003c8: PUSH1 0x20 000003ca: ADD 000003cb: SWAP1 000003cc: PUSH1 0x20 000003ce: MUL 000003cf: DUP1 000003d0: DUP4 000003d1: DUP4 000003d2: PUSH1 0x00 000003d4: JUMPDEST 000003d5: DUP4 000003d6: DUP2 000003d7: LT 000003d8: ISZERO 000003d9: PUSH2 0x03ed 000003dc: JUMPI 000003dd: DUP1 000003de: DUP3 000003df: ADD 000003e0: MLOAD 000003e1: DUP2 000003e2: DUP5 000003e3: ADD 000003e4: MSTORE 000003e5: JUMPDEST 000003e6: PUSH1 0x20 000003e8: ADD 000003e9: PUSH2 0x03d4 000003ec: JUMP 000003ed: JUMPDEST 000003ee: POP 000003ef: POP 000003f0: POP 000003f1: POP 000003f2: SWAP1 000003f3: POP 000003f4: ADD 000003f5: SWAP3 000003f6: POP 000003f7: POP 000003f8: POP 000003f9: PUSH1 0x40 000003fb: MLOAD 000003fc: DUP1 000003fd: SWAP2 000003fe: SUB 000003ff: SWAP1 00000400: RETURN 00000401: JUMPDEST 00000402: CALLVALUE 00000403: ISZERO 00000404: PUSH2 0x040c 00000407: JUMPI 00000408: PUSH1 0x00 0000040a: DUP1 0000040b: REVERT 0000040c: JUMPDEST 0000040d: PUSH2 0x03ad 00000410: PUSH1 0x04 00000412: CALLDATALOAD 00000413: PUSH1 0x24 00000415: CALLDATALOAD 00000416: PUSH1 0x44 00000418: CALLDATALOAD 00000419: ISZERO 0000041a: ISZERO 0000041b: PUSH1 0x64 0000041d: CALLDATALOAD 0000041e: ISZERO 0000041f: ISZERO 00000420: PUSH2 0x0c8d 00000423: JUMP 00000424: JUMPDEST 00000425: PUSH1 0x40 00000427: MLOAD 00000428: PUSH1 0x20 0000042a: DUP1 0000042b: DUP3 0000042c: MSTORE 0000042d: DUP2 0000042e: SWAP1 0000042f: DUP2 00000430: ADD 00000431: DUP4 00000432: DUP2 00000433: DUP2 00000434: MLOAD 00000435: DUP2 00000436: MSTORE 00000437: PUSH1 0x20 00000439: ADD 0000043a: SWAP2 0000043b: POP 0000043c: DUP1 0000043d: MLOAD 0000043e: SWAP1 0000043f: PUSH1 0x20 00000441: ADD 00000442: SWAP1 00000443: PUSH1 0x20 00000445: MUL 00000446: DUP1 00000447: DUP4 00000448: DUP4 00000449: PUSH1 0x00 0000044b: JUMPDEST 0000044c: DUP4 0000044d: DUP2 0000044e: LT 0000044f: ISZERO 00000450: PUSH2 0x03ed 00000453: JUMPI 00000454: DUP1 00000455: DUP3 00000456: ADD 00000457: MLOAD 00000458: DUP2 00000459: DUP5 0000045a: ADD 0000045b: MSTORE 0000045c: JUMPDEST 0000045d: PUSH1 0x20 0000045f: ADD 00000460: PUSH2 0x03d4 00000463: JUMP 00000464: JUMPDEST 00000465: POP 00000466: POP 00000467: POP 00000468: POP 00000469: SWAP1 0000046a: POP 0000046b: ADD 0000046c: SWAP3 0000046d: POP 0000046e: POP 0000046f: POP 00000470: PUSH1 0x40 00000472: MLOAD 00000473: DUP1 00000474: SWAP2 00000475: SUB 00000476: SWAP1 00000477: RETURN 00000478: JUMPDEST 00000479: CALLVALUE 0000047a: ISZERO 0000047b: PUSH2 0x0483 0000047e: JUMPI 0000047f: PUSH1 0x00 00000481: DUP1 00000482: REVERT 00000483: JUMPDEST 00000484: PUSH2 0x03ad 00000487: PUSH1 0x04 00000489: CALLDATALOAD 0000048a: PUSH2 0x0dbb 0000048d: JUMP 0000048e: JUMPDEST 0000048f: PUSH1 0x40 00000491: MLOAD 00000492: PUSH1 0x20 00000494: DUP1 00000495: DUP3 00000496: MSTORE 00000497: DUP2 00000498: SWAP1 00000499: DUP2 0000049a: ADD 0000049b: DUP4 0000049c: DUP2 0000049d: DUP2 0000049e: MLOAD 0000049f: DUP2 000004a0: MSTORE 000004a1: PUSH1 0x20 000004a3: ADD 000004a4: SWAP2 000004a5: POP 000004a6: DUP1 000004a7: MLOAD 000004a8: SWAP1 000004a9: PUSH1 0x20 000004ab: ADD 000004ac: SWAP1 000004ad: PUSH1 0x20 000004af: MUL 000004b0: DUP1 000004b1: DUP4 000004b2: DUP4 000004b3: PUSH1 0x00 000004b5: JUMPDEST 000004b6: DUP4 000004b7: DUP2 000004b8: LT 000004b9: ISZERO 000004ba: PUSH2 0x03ed 000004bd: JUMPI 000004be: DUP1 000004bf: DUP3 000004c0: ADD 000004c1: MLOAD 000004c2: DUP2 000004c3: DUP5 000004c4: ADD 000004c5: MSTORE 000004c6: JUMPDEST 000004c7: PUSH1 0x20 000004c9: ADD 000004ca: PUSH2 0x03d4 000004cd: JUMP 000004ce: JUMPDEST 000004cf: POP 000004d0: POP 000004d1: POP 000004d2: POP 000004d3: SWAP1 000004d4: POP 000004d5: ADD 000004d6: SWAP3 000004d7: POP 000004d8: POP 000004d9: POP 000004da: PUSH1 0x40 000004dc: MLOAD 000004dd: DUP1 000004de: SWAP2 000004df: SUB 000004e0: SWAP1 000004e1: RETURN 000004e2: JUMPDEST 000004e3: CALLVALUE 000004e4: ISZERO 000004e5: PUSH2 0x04ed 000004e8: JUMPI 000004e9: PUSH1 0x00 000004eb: DUP1 000004ec: REVERT 000004ed: JUMPDEST 000004ee: PUSH2 0x0256 000004f1: PUSH2 0x0f3d 000004f4: JUMP 000004f5: JUMPDEST 000004f6: PUSH1 0x40 000004f8: MLOAD 000004f9: SWAP1 000004fa: DUP2 000004fb: MSTORE 000004fc: PUSH1 0x20 000004fe: ADD 000004ff: PUSH1 0x40 00000501: MLOAD 00000502: DUP1 00000503: SWAP2 00000504: SUB 00000505: SWAP1 00000506: RETURN 00000507: JUMPDEST 00000508: CALLVALUE 00000509: ISZERO 0000050a: PUSH2 0x0512 0000050d: JUMPI 0000050e: PUSH1 0x00 00000510: DUP1 00000511: REVERT 00000512: JUMPDEST 00000513: PUSH2 0x0162 00000516: PUSH1 0x04 00000518: CALLDATALOAD 00000519: PUSH2 0x0f43 0000051c: JUMP 0000051d: JUMPDEST 0000051e: STOP 0000051f: JUMPDEST 00000520: CALLVALUE 00000521: ISZERO 00000522: PUSH2 0x052a 00000525: JUMPI 00000526: PUSH1 0x00 00000528: DUP1 00000529: REVERT 0000052a: JUMPDEST 0000052b: PUSH2 0x0162 0000052e: PUSH1 0x04 00000530: CALLDATALOAD 00000531: PUSH2 0x0fd9 00000534: JUMP 00000535: JUMPDEST 00000536: STOP 00000537: JUMPDEST 00000538: CALLVALUE 00000539: ISZERO 0000053a: PUSH2 0x0542 0000053d: JUMPI 0000053e: PUSH1 0x00 00000540: DUP1 00000541: REVERT 00000542: JUMPDEST 00000543: PUSH2 0x0256 00000546: PUSH1 0x04 00000548: DUP1 00000549: CALLDATALOAD 0000054a: PUSH1 0x01 0000054c: PUSH1 0xa0 0000054e: PUSH1 0x02 00000550: EXP 00000551: SUB 00000552: AND 00000553: SWAP1 00000554: PUSH1 0x24 00000556: DUP1 00000557: CALLDATALOAD 00000558: SWAP2 00000559: SWAP1 0000055a: PUSH1 0x64 0000055c: SWAP1 0000055d: PUSH1 0x44 0000055f: CALLDATALOAD 00000560: SWAP1 00000561: DUP2 00000562: ADD 00000563: SWAP1 00000564: DUP4 00000565: ADD 00000566: CALLDATALOAD 00000567: DUP1 00000568: PUSH1 0x20 0000056a: PUSH1 0x1f 0000056c: DUP3 0000056d: ADD 0000056e: DUP2 0000056f: SWAP1 00000570: DIV 00000571: DUP2 00000572: MUL 00000573: ADD 00000574: PUSH1 0x40 00000576: MLOAD 00000577: SWAP1 00000578: DUP2 00000579: ADD 0000057a: PUSH1 0x40 0000057c: MSTORE 0000057d: DUP2 0000057e: DUP2 0000057f: MSTORE 00000580: SWAP3 00000581: SWAP2 00000582: SWAP1 00000583: PUSH1 0x20 00000585: DUP5 00000586: ADD 00000587: DUP4 00000588: DUP4 00000589: DUP1 0000058a: DUP3 0000058b: DUP5 0000058c: CALLDATACOPY 0000058d: POP 0000058e: SWAP5 0000058f: SWAP7 00000590: POP 00000591: PUSH2 0x10cb 00000594: SWAP6 00000595: POP 00000596: POP 00000597: POP 00000598: POP 00000599: POP 0000059a: POP 0000059b: JUMP 0000059c: JUMPDEST 0000059d: PUSH1 0x40 0000059f: MLOAD 000005a0: SWAP1 000005a1: DUP2 000005a2: MSTORE 000005a3: PUSH1 0x20 000005a5: ADD 000005a6: PUSH1 0x40 000005a8: MLOAD 000005a9: DUP1 000005aa: SWAP2 000005ab: SUB 000005ac: SWAP1 000005ad: RETURN 000005ae: JUMPDEST 000005af: CALLVALUE 000005b0: ISZERO 000005b1: PUSH2 0x05b9 000005b4: JUMPI 000005b5: PUSH1 0x00 000005b7: DUP1 000005b8: REVERT 000005b9: JUMPDEST 000005ba: PUSH2 0x0256 000005bd: PUSH2 0x10eb 000005c0: JUMP 000005c1: JUMPDEST 000005c2: PUSH1 0x40 000005c4: MLOAD 000005c5: SWAP1 000005c6: DUP2 000005c7: MSTORE 000005c8: PUSH1 0x20 000005ca: ADD 000005cb: PUSH1 0x40 000005cd: MLOAD 000005ce: DUP1 000005cf: SWAP2 000005d0: SUB 000005d1: SWAP1 000005d2: RETURN 000005d3: JUMPDEST 000005d4: CALLVALUE 000005d5: ISZERO 000005d6: PUSH2 0x05de 000005d9: JUMPI 000005da: PUSH1 0x00 000005dc: DUP1 000005dd: REVERT 000005de: JUMPDEST 000005df: PUSH2 0x0256 000005e2: PUSH2 0x10f0 000005e5: JUMP 000005e6: JUMPDEST 000005e7: PUSH1 0x40 000005e9: MLOAD 000005ea: SWAP1 000005eb: DUP2 000005ec: MSTORE 000005ed: PUSH1 0x20 000005ef: ADD 000005f0: PUSH1 0x40 000005f2: MLOAD 000005f3: DUP1 000005f4: SWAP2 000005f5: SUB 000005f6: SWAP1 000005f7: RETURN 000005f8: JUMPDEST 000005f9: CALLVALUE 000005fa: ISZERO 000005fb: PUSH2 0x0603 000005fe: JUMPI 000005ff: PUSH1 0x00 00000601: DUP1 00000602: REVERT 00000603: JUMPDEST 00000604: PUSH2 0x0162 00000607: PUSH1 0x01 00000609: PUSH1 0xa0 0000060b: PUSH1 0x02 0000060d: EXP 0000060e: SUB 0000060f: PUSH1 0x04 00000611: CALLDATALOAD 00000612: DUP2 00000613: AND 00000614: SWAP1 00000615: PUSH1 0x24 00000617: CALLDATALOAD 00000618: AND 00000619: PUSH2 0x10f6 0000061c: JUMP 0000061d: JUMPDEST 0000061e: STOP 0000061f: JUMPDEST 00000620: CALLVALUE 00000621: ISZERO 00000622: PUSH2 0x062a 00000625: JUMPI 00000626: PUSH1 0x00 00000628: DUP1 00000629: REVERT 0000062a: JUMPDEST 0000062b: PUSH2 0x0162 0000062e: PUSH1 0x04 00000630: CALLDATALOAD 00000631: PUSH2 0x12b7 00000634: JUMP 00000635: JUMPDEST 00000636: STOP 00000637: JUMPDEST 00000638: PUSH1 0x03 0000063a: DUP1 0000063b: SLOAD 0000063c: DUP3 0000063d: SWAP1 0000063e: DUP2 0000063f: LT 00000640: PUSH2 0x0645 00000643: JUMPI 00000644: INVALID 00000645: JUMPDEST 00000646: SWAP1 00000647: PUSH1 0x00 00000649: MSTORE 0000064a: PUSH1 0x20 0000064c: PUSH1 0x00 0000064e: KECCAK256 0000064f: SWAP1 00000650: ADD 00000651: PUSH1 0x00 00000653: JUMPDEST 00000654: SWAP2 00000655: POP 00000656: SLOAD 00000657: SWAP1 00000658: PUSH2 0x0100 0000065b: EXP 0000065c: SWAP1 0000065d: DIV 0000065e: PUSH1 0x01 00000660: PUSH1 0xa0 00000662: PUSH1 0x02 00000664: EXP 00000665: SUB 00000666: AND 00000667: DUP2 00000668: JUMP 00000669: JUMPDEST 0000066a: PUSH1 0x00 0000066c: ADDRESS 0000066d: PUSH1 0x01 0000066f: PUSH1 0xa0 00000671: PUSH1 0x02 00000673: EXP 00000674: SUB 00000675: AND 00000676: CALLER 00000677: PUSH1 0x01 00000679: PUSH1 0xa0 0000067b: PUSH1 0x02 0000067d: EXP 0000067e: SUB 0000067f: AND 00000680: EQ 00000681: ISZERO 00000682: ISZERO 00000683: PUSH2 0x068b 00000686: JUMPI 00000687: PUSH1 0x00 00000689: DUP1 0000068a: REVERT 0000068b: JUMPDEST 0000068c: PUSH1 0x01 0000068e: PUSH1 0xa0 00000690: PUSH1 0x02 00000692: EXP 00000693: SUB 00000694: DUP3 00000695: AND 00000696: PUSH1 0x00 00000698: SWAP1 00000699: DUP2 0000069a: MSTORE 0000069b: PUSH1 0x02 0000069d: PUSH1 0x20 0000069f: MSTORE 000006a0: PUSH1 0x40 000006a2: SWAP1 000006a3: KECCAK256 000006a4: SLOAD 000006a5: DUP3 000006a6: SWAP1 000006a7: PUSH1 0xff 000006a9: AND 000006aa: ISZERO 000006ab: ISZERO 000006ac: PUSH2 0x06b4 000006af: JUMPI 000006b0: PUSH1 0x00 000006b2: DUP1 000006b3: REVERT 000006b4: JUMPDEST 000006b5: PUSH1 0x01 000006b7: PUSH1 0xa0 000006b9: PUSH1 0x02 000006bb: EXP 000006bc: SUB 000006bd: DUP4 000006be: AND 000006bf: PUSH1 0x00 000006c1: SWAP1 000006c2: DUP2 000006c3: MSTORE 000006c4: PUSH1 0x02 000006c6: PUSH1 0x20 000006c8: MSTORE 000006c9: PUSH1 0x40 000006cb: DUP2 000006cc: KECCAK256 000006cd: DUP1 000006ce: SLOAD 000006cf: PUSH1 0xff 000006d1: NOT 000006d2: AND 000006d3: SWAP1 000006d4: SSTORE 000006d5: SWAP2 000006d6: POP 000006d7: JUMPDEST 000006d8: PUSH1 0x03 000006da: SLOAD 000006db: PUSH1 0x00 000006dd: NOT 000006de: ADD 000006df: DUP3 000006e0: LT 000006e1: ISZERO 000006e2: PUSH2 0x07af 000006e5: JUMPI 000006e6: DUP3 000006e7: PUSH1 0x01 000006e9: PUSH1 0xa0 000006eb: PUSH1 0x02 000006ed: EXP 000006ee: SUB 000006ef: AND 000006f0: PUSH1 0x03 000006f2: DUP4 000006f3: DUP2 000006f4: SLOAD 000006f5: DUP2 000006f6: LT 000006f7: ISZERO 000006f8: ISZERO 000006f9: PUSH2 0x06fe 000006fc: JUMPI 000006fd: INVALID 000006fe: JUMPDEST 000006ff: SWAP1 00000700: PUSH1 0x00 00000702: MSTORE 00000703: PUSH1 0x20 00000705: PUSH1 0x00 00000707: KECCAK256 00000708: SWAP1 00000709: ADD 0000070a: PUSH1 0x00 0000070c: JUMPDEST 0000070d: SWAP1 0000070e: SLOAD 0000070f: SWAP1 00000710: PUSH2 0x0100 00000713: EXP 00000714: SWAP1 00000715: DIV 00000716: PUSH1 0x01 00000718: PUSH1 0xa0 0000071a: PUSH1 0x02 0000071c: EXP 0000071d: SUB 0000071e: AND 0000071f: PUSH1 0x01 00000721: PUSH1 0xa0 00000723: PUSH1 0x02 00000725: EXP 00000726: SUB 00000727: AND 00000728: EQ 00000729: ISZERO 0000072a: PUSH2 0x07a3 0000072d: JUMPI 0000072e: PUSH1 0x03 00000730: DUP1 00000731: SLOAD 00000732: PUSH1 0x00 00000734: NOT 00000735: DUP2 00000736: ADD 00000737: SWAP1 00000738: DUP2 00000739: LT 0000073a: PUSH2 0x073f 0000073d: JUMPI 0000073e: INVALID 0000073f: JUMPDEST 00000740: SWAP1 00000741: PUSH1 0x00 00000743: MSTORE 00000744: PUSH1 0x20 00000746: PUSH1 0x00 00000748: KECCAK256 00000749: SWAP1 0000074a: ADD 0000074b: PUSH1 0x00 0000074d: JUMPDEST 0000074e: SWAP1 0000074f: SLOAD 00000750: SWAP1 00000751: PUSH2 0x0100 00000754: EXP 00000755: SWAP1 00000756: DIV 00000757: PUSH1 0x01 00000759: PUSH1 0xa0 0000075b: PUSH1 0x02 0000075d: EXP 0000075e: SUB 0000075f: AND 00000760: PUSH1 0x03 00000762: DUP4 00000763: DUP2 00000764: SLOAD 00000765: DUP2 00000766: LT 00000767: ISZERO 00000768: ISZERO 00000769: PUSH2 0x076e 0000076c: JUMPI 0000076d: INVALID 0000076e: JUMPDEST 0000076f: SWAP1 00000770: PUSH1 0x00 00000772: MSTORE 00000773: PUSH1 0x20 00000775: PUSH1 0x00 00000777: KECCAK256 00000778: SWAP1 00000779: ADD 0000077a: PUSH1 0x00 0000077c: JUMPDEST 0000077d: PUSH2 0x0100 00000780: EXP 00000781: DUP2 00000782: SLOAD 00000783: DUP2 00000784: PUSH1 0x01 00000786: PUSH1 0xa0 00000788: PUSH1 0x02 0000078a: EXP 0000078b: SUB 0000078c: MUL 0000078d: NOT 0000078e: AND 0000078f: SWAP1 00000790: DUP4 00000791: PUSH1 0x01 00000793: PUSH1 0xa0 00000795: PUSH1 0x02 00000797: EXP 00000798: SUB 00000799: AND 0000079a: MUL 0000079b: OR 0000079c: SWAP1 0000079d: SSTORE 0000079e: POP 0000079f: PUSH2 0x07af 000007a2: JUMP 000007a3: JUMPDEST 000007a4: JUMPDEST 000007a5: PUSH1 0x01 000007a7: SWAP1 000007a8: SWAP2 000007a9: ADD 000007aa: SWAP1 000007ab: PUSH2 0x06d7 000007ae: JUMP 000007af: JUMPDEST 000007b0: PUSH1 0x03 000007b2: DUP1 000007b3: SLOAD 000007b4: PUSH1 0x00 000007b6: NOT 000007b7: ADD 000007b8: SWAP1 000007b9: PUSH2 0x07c2 000007bc: SWAP1 000007bd: DUP3 000007be: PUSH2 0x15cd 000007c1: JUMP 000007c2: JUMPDEST 000007c3: POP 000007c4: PUSH1 0x03 000007c6: SLOAD 000007c7: PUSH1 0x04 000007c9: SLOAD 000007ca: GT 000007cb: ISZERO 000007cc: PUSH2 0x07db 000007cf: JUMPI 000007d0: PUSH1 0x03 000007d2: SLOAD 000007d3: PUSH2 0x07db 000007d6: SWAP1 000007d7: PUSH2 0x0f43 000007da: JUMP 000007db: JUMPDEST 000007dc: JUMPDEST 000007dd: DUP3 000007de: PUSH1 0x01 000007e0: PUSH1 0xa0 000007e2: PUSH1 0x02 000007e4: EXP 000007e5: SUB 000007e6: AND 000007e7: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90 00000808: PUSH1 0x40 0000080a: MLOAD 0000080b: PUSH1 0x40 0000080d: MLOAD 0000080e: DUP1 0000080f: SWAP2 00000810: SUB 00000811: SWAP1 00000812: LOG2 00000813: JUMPDEST 00000814: JUMPDEST 00000815: POP 00000816: JUMPDEST 00000817: POP 00000818: POP 00000819: JUMP 0000081a: JUMPDEST 0000081b: CALLER 0000081c: PUSH1 0x01 0000081e: PUSH1 0xa0 00000820: PUSH1 0x02 00000822: EXP 00000823: SUB 00000824: DUP2 00000825: AND 00000826: PUSH1 0x00 00000828: SWAP1 00000829: DUP2 0000082a: MSTORE 0000082b: PUSH1 0x02 0000082d: PUSH1 0x20 0000082f: MSTORE 00000830: PUSH1 0x40 00000832: SWAP1 00000833: KECCAK256 00000834: SLOAD 00000835: PUSH1 0xff 00000837: AND 00000838: ISZERO 00000839: ISZERO 0000083a: PUSH2 0x0842 0000083d: JUMPI 0000083e: PUSH1 0x00 00000840: DUP1 00000841: REVERT 00000842: JUMPDEST 00000843: PUSH1 0x00 00000845: DUP3 00000846: DUP2 00000847: MSTORE 00000848: PUSH1 0x01 0000084a: PUSH1 0x20 0000084c: SWAP1 0000084d: DUP2 0000084e: MSTORE 0000084f: PUSH1 0x40 00000851: DUP1 00000852: DUP4 00000853: KECCAK256 00000854: CALLER 00000855: PUSH1 0x01 00000857: PUSH1 0xa0 00000859: PUSH1 0x02 0000085b: EXP 0000085c: SUB 0000085d: DUP2 0000085e: AND 0000085f: DUP6 00000860: MSTORE 00000861: SWAP3 00000862: MSTORE 00000863: SWAP1 00000864: SWAP2 00000865: KECCAK256 00000866: SLOAD 00000867: DUP4 00000868: SWAP2 00000869: SWAP1 0000086a: PUSH1 0xff 0000086c: AND 0000086d: ISZERO 0000086e: ISZERO 0000086f: PUSH2 0x0877 00000872: JUMPI 00000873: PUSH1 0x00 00000875: DUP1 00000876: REVERT 00000877: JUMPDEST 00000878: PUSH1 0x00 0000087a: DUP5 0000087b: DUP2 0000087c: MSTORE 0000087d: PUSH1 0x20 0000087f: DUP2 00000880: SWAP1 00000881: MSTORE 00000882: PUSH1 0x40 00000884: SWAP1 00000885: KECCAK256 00000886: PUSH1 0x03 00000888: ADD 00000889: SLOAD 0000088a: DUP5 0000088b: SWAP1 0000088c: PUSH1 0xff 0000088e: AND 0000088f: ISZERO 00000890: PUSH2 0x0898 00000893: JUMPI 00000894: PUSH1 0x00 00000896: DUP1 00000897: REVERT 00000898: JUMPDEST 00000899: PUSH1 0x00 0000089b: DUP6 0000089c: DUP2 0000089d: MSTORE 0000089e: PUSH1 0x01 000008a0: PUSH1 0x20 000008a2: SWAP1 000008a3: DUP2 000008a4: MSTORE 000008a5: PUSH1 0x40 000008a7: DUP1 000008a8: DUP4 000008a9: KECCAK256 000008aa: PUSH1 0x01 000008ac: PUSH1 0xa0 000008ae: PUSH1 0x02 000008b0: EXP 000008b1: SUB 000008b2: CALLER 000008b3: AND 000008b4: DUP1 000008b5: DUP6 000008b6: MSTORE 000008b7: SWAP3 000008b8: MSTORE 000008b9: SWAP2 000008ba: DUP3 000008bb: SWAP1 000008bc: KECCAK256 000008bd: DUP1 000008be: SLOAD 000008bf: PUSH1 0xff 000008c1: NOT 000008c2: AND 000008c3: SWAP1 000008c4: SSTORE 000008c5: DUP7 000008c6: SWAP2 000008c7: PUSH32 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9 000008e8: SWAP1 000008e9: MLOAD 000008ea: PUSH1 0x40 000008ec: MLOAD 000008ed: DUP1 000008ee: SWAP2 000008ef: SUB 000008f0: SWAP1 000008f1: LOG3 000008f2: JUMPDEST 000008f3: JUMPDEST 000008f4: POP 000008f5: JUMPDEST 000008f6: POP 000008f7: POP 000008f8: JUMPDEST 000008f9: POP 000008fa: POP 000008fb: JUMP 000008fc: JUMPDEST 000008fd: PUSH1 0x02 000008ff: PUSH1 0x20 00000901: MSTORE 00000902: PUSH1 0x00 00000904: SWAP1 00000905: DUP2 00000906: MSTORE 00000907: PUSH1 0x40 00000909: SWAP1 0000090a: KECCAK256 0000090b: SLOAD 0000090c: PUSH1 0xff 0000090e: AND 0000090f: DUP2 00000910: JUMP 00000911: JUMPDEST 00000912: PUSH1 0x01 00000914: PUSH1 0x20 00000916: SWAP1 00000917: DUP2 00000918: MSTORE 00000919: PUSH1 0x00 0000091b: SWAP3 0000091c: DUP4 0000091d: MSTORE 0000091e: PUSH1 0x40 00000920: DUP1 00000921: DUP5 00000922: KECCAK256 00000923: SWAP1 00000924: SWAP2 00000925: MSTORE 00000926: SWAP1 00000927: DUP3 00000928: MSTORE 00000929: SWAP1 0000092a: KECCAK256 0000092b: SLOAD 0000092c: PUSH1 0xff 0000092e: AND 0000092f: DUP2 00000930: JUMP 00000931: JUMPDEST 00000932: PUSH1 0x00 00000934: DUP1 00000935: JUMPDEST 00000936: PUSH1 0x05 00000938: SLOAD 00000939: DUP2 0000093a: LT 0000093b: ISZERO 0000093c: PUSH2 0x0998 0000093f: JUMPI 00000940: DUP4 00000941: DUP1 00000942: ISZERO 00000943: PUSH2 0x095e 00000946: JUMPI 00000947: POP 00000948: PUSH1 0x00 0000094a: DUP2 0000094b: DUP2 0000094c: MSTORE 0000094d: PUSH1 0x20 0000094f: DUP2 00000950: SWAP1 00000951: MSTORE 00000952: PUSH1 0x40 00000954: SWAP1 00000955: KECCAK256 00000956: PUSH1 0x03 00000958: ADD 00000959: SLOAD 0000095a: PUSH1 0xff 0000095c: AND 0000095d: ISZERO 0000095e: JUMPDEST 0000095f: DUP1 00000960: PUSH2 0x0982 00000963: JUMPI 00000964: POP 00000965: DUP3 00000966: DUP1 00000967: ISZERO 00000968: PUSH2 0x0982 0000096b: JUMPI 0000096c: POP 0000096d: PUSH1 0x00 0000096f: DUP2 00000970: DUP2 00000971: MSTORE 00000972: PUSH1 0x20 00000974: DUP2 00000975: SWAP1 00000976: MSTORE 00000977: PUSH1 0x40 00000979: SWAP1 0000097a: KECCAK256 0000097b: PUSH1 0x03 0000097d: ADD 0000097e: SLOAD 0000097f: PUSH1 0xff 00000981: AND 00000982: JUMPDEST 00000983: JUMPDEST 00000984: ISZERO 00000985: PUSH2 0x098f 00000988: JUMPI 00000989: PUSH1 0x01 0000098b: DUP3 0000098c: ADD 0000098d: SWAP2 0000098e: POP 0000098f: JUMPDEST 00000990: JUMPDEST 00000991: PUSH1 0x01 00000993: ADD 00000994: PUSH2 0x0935 00000997: JUMP 00000998: JUMPDEST 00000999: JUMPDEST 0000099a: POP 0000099b: SWAP3 0000099c: SWAP2 0000099d: POP 0000099e: POP 0000099f: JUMP 000009a0: JUMPDEST 000009a1: ADDRESS 000009a2: PUSH1 0x01 000009a4: PUSH1 0xa0 000009a6: PUSH1 0x02 000009a8: EXP 000009a9: SUB 000009aa: AND 000009ab: CALLER 000009ac: PUSH1 0x01 000009ae: PUSH1 0xa0 000009b0: PUSH1 0x02 000009b2: EXP 000009b3: SUB 000009b4: AND 000009b5: EQ 000009b6: ISZERO 000009b7: ISZERO 000009b8: PUSH2 0x09c0 000009bb: JUMPI 000009bc: PUSH1 0x00 000009be: DUP1 000009bf: REVERT 000009c0: JUMPDEST 000009c1: PUSH1 0x01 000009c3: PUSH1 0xa0 000009c5: PUSH1 0x02 000009c7: EXP 000009c8: SUB 000009c9: DUP2 000009ca: AND 000009cb: PUSH1 0x00 000009cd: SWAP1 000009ce: DUP2 000009cf: MSTORE 000009d0: PUSH1 0x02 000009d2: PUSH1 0x20 000009d4: MSTORE 000009d5: PUSH1 0x40 000009d7: SWAP1 000009d8: KECCAK256 000009d9: SLOAD 000009da: DUP2 000009db: SWAP1 000009dc: PUSH1 0xff 000009de: AND 000009df: ISZERO 000009e0: PUSH2 0x09e8 000009e3: JUMPI 000009e4: PUSH1 0x00 000009e6: DUP1 000009e7: REVERT 000009e8: JUMPDEST 000009e9: DUP2 000009ea: PUSH1 0x01 000009ec: PUSH1 0xa0 000009ee: PUSH1 0x02 000009f0: EXP 000009f1: SUB 000009f2: DUP2 000009f3: AND 000009f4: ISZERO 000009f5: ISZERO 000009f6: PUSH2 0x09fe 000009f9: JUMPI 000009fa: PUSH1 0x00 000009fc: DUP1 000009fd: REVERT 000009fe: JUMPDEST 000009ff: PUSH1 0x03 00000a01: DUP1 00000a02: SLOAD 00000a03: SWAP1 00000a04: POP 00000a05: PUSH1 0x01 00000a07: ADD 00000a08: PUSH1 0x04 00000a0a: SLOAD 00000a0b: PUSH1 0x32 00000a0d: DUP3 00000a0e: GT 00000a0f: ISZERO 00000a10: DUP1 00000a11: ISZERO 00000a12: PUSH2 0x0a1b 00000a15: JUMPI 00000a16: POP 00000a17: DUP2 00000a18: DUP2 00000a19: GT 00000a1a: ISZERO 00000a1b: JUMPDEST 00000a1c: DUP1 00000a1d: ISZERO 00000a1e: PUSH2 0x0a26 00000a21: JUMPI 00000a22: POP 00000a23: DUP1 00000a24: ISZERO 00000a25: ISZERO 00000a26: JUMPDEST 00000a27: DUP1 00000a28: ISZERO 00000a29: PUSH2 0x0a31 00000a2c: JUMPI 00000a2d: POP 00000a2e: DUP2 00000a2f: ISZERO 00000a30: ISZERO 00000a31: JUMPDEST 00000a32: ISZERO 00000a33: ISZERO 00000a34: PUSH2 0x0a3c 00000a37: JUMPI 00000a38: PUSH1 0x00 00000a3a: DUP1 00000a3b: REVERT 00000a3c: JUMPDEST 00000a3d: PUSH1 0x01 00000a3f: PUSH1 0xa0 00000a41: PUSH1 0x02 00000a43: EXP 00000a44: SUB 00000a45: DUP6 00000a46: AND 00000a47: PUSH1 0x00 00000a49: SWAP1 00000a4a: DUP2 00000a4b: MSTORE 00000a4c: PUSH1 0x02 00000a4e: PUSH1 0x20 00000a50: MSTORE 00000a51: PUSH1 0x40 00000a53: SWAP1 00000a54: KECCAK256 00000a55: DUP1 00000a56: SLOAD 00000a57: PUSH1 0xff 00000a59: NOT 00000a5a: AND 00000a5b: PUSH1 0x01 00000a5d: SWAP1 00000a5e: DUP2 00000a5f: OR 00000a60: SWAP1 00000a61: SWAP2 00000a62: SSTORE 00000a63: PUSH1 0x03 00000a65: DUP1 00000a66: SLOAD 00000a67: SWAP1 00000a68: SWAP2 00000a69: DUP2 00000a6a: ADD 00000a6b: PUSH2 0x0a74 00000a6e: DUP4 00000a6f: DUP3 00000a70: PUSH2 0x15cd 00000a73: JUMP 00000a74: JUMPDEST 00000a75: SWAP2 00000a76: PUSH1 0x00 00000a78: MSTORE 00000a79: PUSH1 0x20 00000a7b: PUSH1 0x00 00000a7d: KECCAK256 00000a7e: SWAP1 00000a7f: ADD 00000a80: PUSH1 0x00 00000a82: JUMPDEST 00000a83: DUP2 00000a84: SLOAD 00000a85: PUSH1 0x01 00000a87: PUSH1 0xa0 00000a89: PUSH1 0x02 00000a8b: EXP 00000a8c: SUB 00000a8d: DUP1 00000a8e: DUP11 00000a8f: AND 00000a90: PUSH2 0x0100 00000a93: SWAP4 00000a94: SWAP1 00000a95: SWAP4 00000a96: EXP 00000a97: DUP4 00000a98: DUP2 00000a99: MUL 00000a9a: SWAP2 00000a9b: MUL 00000a9c: NOT 00000a9d: SWAP1 00000a9e: SWAP2 00000a9f: AND 00000aa0: OR 00000aa1: SWAP1 00000aa2: SWAP2 00000aa3: SSTORE 00000aa4: SWAP1 00000aa5: POP 00000aa6: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d 00000ac7: PUSH1 0x40 00000ac9: MLOAD 00000aca: PUSH1 0x40 00000acc: MLOAD 00000acd: DUP1 00000ace: SWAP2 00000acf: SUB 00000ad0: SWAP1 00000ad1: LOG2 00000ad2: JUMPDEST 00000ad3: JUMPDEST 00000ad4: POP 00000ad5: POP 00000ad6: JUMPDEST 00000ad7: POP 00000ad8: JUMPDEST 00000ad9: POP 00000ada: JUMPDEST 00000adb: POP 00000adc: JUMP 00000add: JUMPDEST 00000ade: PUSH1 0x00 00000ae0: DUP1 00000ae1: DUP1 00000ae2: JUMPDEST 00000ae3: PUSH1 0x03 00000ae5: SLOAD 00000ae6: DUP2 00000ae7: LT 00000ae8: ISZERO 00000ae9: PUSH2 0x0b69 00000aec: JUMPI 00000aed: PUSH1 0x00 00000aef: DUP5 00000af0: DUP2 00000af1: MSTORE 00000af2: PUSH1 0x01 00000af4: PUSH1 0x20 00000af6: MSTORE 00000af7: PUSH1 0x40 00000af9: DUP2 00000afa: KECCAK256 00000afb: PUSH1 0x03 00000afd: DUP1 00000afe: SLOAD 00000aff: SWAP2 00000b00: SWAP3 00000b01: SWAP2 00000b02: DUP5 00000b03: SWAP1 00000b04: DUP2 00000b05: LT 00000b06: PUSH2 0x0b0b 00000b09: JUMPI 00000b0a: INVALID 00000b0b: JUMPDEST 00000b0c: SWAP1 00000b0d: PUSH1 0x00 00000b0f: MSTORE 00000b10: PUSH1 0x20 00000b12: PUSH1 0x00 00000b14: KECCAK256 00000b15: SWAP1 00000b16: ADD 00000b17: PUSH1 0x00 00000b19: JUMPDEST 00000b1a: SWAP1 00000b1b: SLOAD 00000b1c: PUSH1 0x01 00000b1e: PUSH1 0xa0 00000b20: PUSH1 0x02 00000b22: EXP 00000b23: SUB 00000b24: PUSH2 0x0100 00000b27: SWAP3 00000b28: SWAP1 00000b29: SWAP3 00000b2a: EXP 00000b2b: SWAP1 00000b2c: DIV 00000b2d: AND 00000b2e: DUP2 00000b2f: MSTORE 00000b30: PUSH1 0x20 00000b32: DUP2 00000b33: ADD 00000b34: SWAP2 00000b35: SWAP1 00000b36: SWAP2 00000b37: MSTORE 00000b38: PUSH1 0x40 00000b3a: ADD 00000b3b: PUSH1 0x00 00000b3d: KECCAK256 00000b3e: SLOAD 00000b3f: PUSH1 0xff 00000b41: AND 00000b42: ISZERO 00000b43: PUSH2 0x0b4d 00000b46: JUMPI 00000b47: PUSH1 0x01 00000b49: DUP3 00000b4a: ADD 00000b4b: SWAP2 00000b4c: POP 00000b4d: JUMPDEST 00000b4e: PUSH1 0x04 00000b50: SLOAD 00000b51: DUP3 00000b52: EQ 00000b53: ISZERO 00000b54: PUSH2 0x0b60 00000b57: JUMPI 00000b58: PUSH1 0x01 00000b5a: SWAP3 00000b5b: POP 00000b5c: PUSH2 0x0b69 00000b5f: JUMP 00000b60: JUMPDEST 00000b61: JUMPDEST 00000b62: PUSH1 0x01 00000b64: ADD 00000b65: PUSH2 0x0ae2 00000b68: JUMP 00000b69: JUMPDEST 00000b6a: JUMPDEST 00000b6b: POP 00000b6c: POP 00000b6d: SWAP2 00000b6e: SWAP1 00000b6f: POP 00000b70: JUMP 00000b71: JUMPDEST 00000b72: PUSH1 0x00 00000b74: DUP1 00000b75: JUMPDEST 00000b76: PUSH1 0x03 00000b78: SLOAD 00000b79: DUP2 00000b7a: LT 00000b7b: ISZERO 00000b7c: PUSH2 0x0be9 00000b7f: JUMPI 00000b80: PUSH1 0x00 00000b82: DUP4 00000b83: DUP2 00000b84: MSTORE 00000b85: PUSH1 0x01 00000b87: PUSH1 0x20 00000b89: MSTORE 00000b8a: PUSH1 0x40 00000b8c: DUP2 00000b8d: KECCAK256 00000b8e: PUSH1 0x03 00000b90: DUP1 00000b91: SLOAD 00000b92: SWAP2 00000b93: SWAP3 00000b94: SWAP2 00000b95: DUP5 00000b96: SWAP1 00000b97: DUP2 00000b98: LT 00000b99: PUSH2 0x0b9e 00000b9c: JUMPI 00000b9d: INVALID 00000b9e: JUMPDEST 00000b9f: SWAP1 00000ba0: PUSH1 0x00 00000ba2: MSTORE 00000ba3: PUSH1 0x20 00000ba5: PUSH1 0x00 00000ba7: KECCAK256 00000ba8: SWAP1 00000ba9: ADD 00000baa: PUSH1 0x00 00000bac: JUMPDEST 00000bad: SWAP1 00000bae: SLOAD 00000baf: PUSH1 0x01 00000bb1: PUSH1 0xa0 00000bb3: PUSH1 0x02 00000bb5: EXP 00000bb6: SUB 00000bb7: PUSH2 0x0100 00000bba: SWAP3 00000bbb: SWAP1 00000bbc: SWAP3 00000bbd: EXP 00000bbe: SWAP1 00000bbf: DIV 00000bc0: AND 00000bc1: DUP2 00000bc2: MSTORE 00000bc3: PUSH1 0x20 00000bc5: DUP2 00000bc6: ADD 00000bc7: SWAP2 00000bc8: SWAP1 00000bc9: SWAP2 00000bca: MSTORE 00000bcb: PUSH1 0x40 00000bcd: ADD 00000bce: PUSH1 0x00 00000bd0: KECCAK256 00000bd1: SLOAD 00000bd2: PUSH1 0xff 00000bd4: AND 00000bd5: ISZERO 00000bd6: PUSH2 0x0be0 00000bd9: JUMPI 00000bda: PUSH1 0x01 00000bdc: DUP3 00000bdd: ADD 00000bde: SWAP2 00000bdf: POP 00000be0: JUMPDEST 00000be1: JUMPDEST 00000be2: PUSH1 0x01 00000be4: ADD 00000be5: PUSH2 0x0b75 00000be8: JUMP 00000be9: JUMPDEST 00000bea: JUMPDEST 00000beb: POP 00000bec: SWAP2 00000bed: SWAP1 00000bee: POP 00000bef: JUMP 00000bf0: JUMPDEST 00000bf1: PUSH1 0x00 00000bf3: PUSH1 0x20 00000bf5: DUP2 00000bf6: SWAP1 00000bf7: MSTORE 00000bf8: SWAP1 00000bf9: DUP2 00000bfa: MSTORE 00000bfb: PUSH1 0x40 00000bfd: SWAP1 00000bfe: KECCAK256 00000bff: DUP1 00000c00: SLOAD 00000c01: PUSH1 0x01 00000c03: DUP3 00000c04: ADD 00000c05: SLOAD 00000c06: PUSH1 0x03 00000c08: DUP4 00000c09: ADD 00000c0a: SLOAD 00000c0b: PUSH1 0x01 00000c0d: PUSH1 0xa0 00000c0f: PUSH1 0x02 00000c11: EXP 00000c12: SUB 00000c13: SWAP1 00000c14: SWAP3 00000c15: AND 00000c16: SWAP3 00000c17: SWAP1 00000c18: SWAP2 00000c19: PUSH1 0x02 00000c1b: SWAP1 00000c1c: SWAP2 00000c1d: ADD 00000c1e: SWAP1 00000c1f: PUSH1 0xff 00000c21: AND 00000c22: DUP5 00000c23: JUMP 00000c24: JUMPDEST 00000c25: PUSH2 0x0c2c 00000c28: PUSH2 0x1621 00000c2b: JUMP 00000c2c: JUMPDEST 00000c2d: PUSH1 0x03 00000c2f: DUP1 00000c30: SLOAD 00000c31: DUP1 00000c32: PUSH1 0x20 00000c34: MUL 00000c35: PUSH1 0x20 00000c37: ADD 00000c38: PUSH1 0x40 00000c3a: MLOAD 00000c3b: SWAP1 00000c3c: DUP2 00000c3d: ADD 00000c3e: PUSH1 0x40 00000c40: MSTORE 00000c41: DUP1 00000c42: SWAP3 00000c43: SWAP2 00000c44: SWAP1 00000c45: DUP2 00000c46: DUP2 00000c47: MSTORE 00000c48: PUSH1 0x20 00000c4a: ADD 00000c4b: DUP3 00000c4c: DUP1 00000c4d: SLOAD 00000c4e: DUP1 00000c4f: ISZERO 00000c50: PUSH2 0x0c82 00000c53: JUMPI 00000c54: PUSH1 0x20 00000c56: MUL 00000c57: DUP3 00000c58: ADD 00000c59: SWAP2 00000c5a: SWAP1 00000c5b: PUSH1 0x00 00000c5d: MSTORE 00000c5e: PUSH1 0x20 00000c60: PUSH1 0x00 00000c62: KECCAK256 00000c63: SWAP1 00000c64: JUMPDEST 00000c65: DUP2 00000c66: SLOAD 00000c67: PUSH1 0x01 00000c69: PUSH1 0xa0 00000c6b: PUSH1 0x02 00000c6d: EXP 00000c6e: SUB 00000c6f: AND 00000c70: DUP2 00000c71: MSTORE 00000c72: PUSH1 0x01 00000c74: SWAP1 00000c75: SWAP2 00000c76: ADD 00000c77: SWAP1 00000c78: PUSH1 0x20 00000c7a: ADD 00000c7b: DUP1 00000c7c: DUP4 00000c7d: GT 00000c7e: PUSH2 0x0c64 00000c81: JUMPI 00000c82: JUMPDEST 00000c83: POP 00000c84: POP 00000c85: POP 00000c86: POP 00000c87: POP 00000c88: SWAP1 00000c89: POP 00000c8a: JUMPDEST 00000c8b: SWAP1 00000c8c: JUMP 00000c8d: JUMPDEST 00000c8e: PUSH2 0x0c95 00000c91: PUSH2 0x1621 00000c94: JUMP 00000c95: JUMPDEST 00000c96: PUSH2 0x0c9d 00000c99: PUSH2 0x1621 00000c9c: JUMP 00000c9d: JUMPDEST 00000c9e: PUSH1 0x00 00000ca0: DUP1 00000ca1: PUSH1 0x05 00000ca3: SLOAD 00000ca4: PUSH1 0x40 00000ca6: MLOAD 00000ca7: DUP1 00000ca8: MSIZE 00000ca9: LT 00000caa: PUSH2 0x0cb0 00000cad: JUMPI 00000cae: POP 00000caf: MSIZE 00000cb0: JUMPDEST 00000cb1: SWAP1 00000cb2: DUP1 00000cb3: DUP3 00000cb4: MSTORE 00000cb5: DUP1 00000cb6: PUSH1 0x20 00000cb8: MUL 00000cb9: PUSH1 0x20 00000cbb: ADD 00000cbc: DUP3 00000cbd: ADD 00000cbe: PUSH1 0x40 00000cc0: MSTORE 00000cc1: JUMPDEST 00000cc2: POP 00000cc3: SWAP3 00000cc4: POP 00000cc5: PUSH1 0x00 00000cc7: SWAP2 00000cc8: POP 00000cc9: PUSH1 0x00 00000ccb: SWAP1 00000ccc: POP 00000ccd: JUMPDEST 00000cce: PUSH1 0x05 00000cd0: SLOAD 00000cd1: DUP2 00000cd2: LT 00000cd3: ISZERO 00000cd4: PUSH2 0x0d48 00000cd7: JUMPI 00000cd8: DUP6 00000cd9: DUP1 00000cda: ISZERO 00000cdb: PUSH2 0x0cf6 00000cde: JUMPI 00000cdf: POP 00000ce0: PUSH1 0x00 00000ce2: DUP2 00000ce3: DUP2 00000ce4: MSTORE 00000ce5: PUSH1 0x20 00000ce7: DUP2 00000ce8: SWAP1 00000ce9: MSTORE 00000cea: PUSH1 0x40 00000cec: SWAP1 00000ced: KECCAK256 00000cee: PUSH1 0x03 00000cf0: ADD 00000cf1: SLOAD 00000cf2: PUSH1 0xff 00000cf4: AND 00000cf5: ISZERO 00000cf6: JUMPDEST 00000cf7: DUP1 00000cf8: PUSH2 0x0d1a 00000cfb: JUMPI 00000cfc: POP 00000cfd: DUP5 00000cfe: DUP1 00000cff: ISZERO 00000d00: PUSH2 0x0d1a 00000d03: JUMPI 00000d04: POP 00000d05: PUSH1 0x00 00000d07: DUP2 00000d08: DUP2 00000d09: MSTORE 00000d0a: PUSH1 0x20 00000d0c: DUP2 00000d0d: SWAP1 00000d0e: MSTORE 00000d0f: PUSH1 0x40 00000d11: SWAP1 00000d12: KECCAK256 00000d13: PUSH1 0x03 00000d15: ADD 00000d16: SLOAD 00000d17: PUSH1 0xff 00000d19: AND 00000d1a: JUMPDEST 00000d1b: JUMPDEST 00000d1c: ISZERO 00000d1d: PUSH2 0x0d3f 00000d20: JUMPI 00000d21: DUP1 00000d22: DUP4 00000d23: DUP4 00000d24: DUP2 00000d25: MLOAD 00000d26: DUP2 00000d27: LT 00000d28: PUSH2 0x0d2d 00000d2b: JUMPI 00000d2c: INVALID 00000d2d: JUMPDEST 00000d2e: PUSH1 0x20 00000d30: SWAP1 00000d31: DUP2 00000d32: MUL 00000d33: SWAP1 00000d34: SWAP2 00000d35: ADD 00000d36: ADD 00000d37: MSTORE 00000d38: PUSH1 0x01 00000d3a: SWAP2 00000d3b: SWAP1 00000d3c: SWAP2 00000d3d: ADD 00000d3e: SWAP1 00000d3f: JUMPDEST 00000d40: JUMPDEST 00000d41: PUSH1 0x01 00000d43: ADD 00000d44: PUSH2 0x0ccd 00000d47: JUMP 00000d48: JUMPDEST 00000d49: DUP8 00000d4a: DUP8 00000d4b: SUB 00000d4c: PUSH1 0x40 00000d4e: MLOAD 00000d4f: DUP1 00000d50: MSIZE 00000d51: LT 00000d52: PUSH2 0x0d58 00000d55: JUMPI 00000d56: POP 00000d57: MSIZE 00000d58: JUMPDEST 00000d59: SWAP1 00000d5a: DUP1 00000d5b: DUP3 00000d5c: MSTORE 00000d5d: DUP1 00000d5e: PUSH1 0x20 00000d60: MUL 00000d61: PUSH1 0x20 00000d63: ADD 00000d64: DUP3 00000d65: ADD 00000d66: PUSH1 0x40 00000d68: MSTORE 00000d69: JUMPDEST 00000d6a: POP 00000d6b: SWAP4 00000d6c: POP 00000d6d: DUP8 00000d6e: SWAP1 00000d6f: POP 00000d70: JUMPDEST 00000d71: DUP7 00000d72: DUP2 00000d73: LT 00000d74: ISZERO 00000d75: PUSH2 0x0daf 00000d78: JUMPI 00000d79: DUP3 00000d7a: DUP2 00000d7b: DUP2 00000d7c: MLOAD 00000d7d: DUP2 00000d7e: LT 00000d7f: PUSH2 0x0d84 00000d82: JUMPI 00000d83: INVALID 00000d84: JUMPDEST 00000d85: SWAP1 00000d86: PUSH1 0x20 00000d88: ADD 00000d89: SWAP1 00000d8a: PUSH1 0x20 00000d8c: MUL 00000d8d: ADD 00000d8e: MLOAD 00000d8f: DUP5 00000d90: DUP10 00000d91: DUP4 00000d92: SUB 00000d93: DUP2 00000d94: MLOAD 00000d95: DUP2 00000d96: LT 00000d97: PUSH2 0x0d9c 00000d9a: JUMPI 00000d9b: INVALID 00000d9c: JUMPDEST 00000d9d: PUSH1 0x20 00000d9f: SWAP1 00000da0: DUP2 00000da1: MUL 00000da2: SWAP1 00000da3: SWAP2 00000da4: ADD 00000da5: ADD 00000da6: MSTORE 00000da7: JUMPDEST 00000da8: PUSH1 0x01 00000daa: ADD 00000dab: PUSH2 0x0d70 00000dae: JUMP 00000daf: JUMPDEST 00000db0: JUMPDEST 00000db1: POP 00000db2: POP 00000db3: POP 00000db4: SWAP5 00000db5: SWAP4 00000db6: POP 00000db7: POP 00000db8: POP 00000db9: POP 00000dba: JUMP 00000dbb: JUMPDEST 00000dbc: PUSH2 0x0dc3 00000dbf: PUSH2 0x1621 00000dc2: JUMP 00000dc3: JUMPDEST 00000dc4: PUSH2 0x0dcb 00000dc7: PUSH2 0x1621 00000dca: JUMP 00000dcb: JUMPDEST 00000dcc: PUSH1 0x03 00000dce: SLOAD 00000dcf: PUSH1 0x00 00000dd1: SWAP1 00000dd2: DUP2 00000dd3: SWAP1 00000dd4: PUSH1 0x40 00000dd6: MLOAD 00000dd7: DUP1 00000dd8: MSIZE 00000dd9: LT 00000dda: PUSH2 0x0de0 00000ddd: JUMPI 00000dde: POP 00000ddf: MSIZE 00000de0: JUMPDEST 00000de1: SWAP1 00000de2: DUP1 00000de3: DUP3 00000de4: MSTORE 00000de5: DUP1 00000de6: PUSH1 0x20 00000de8: MUL 00000de9: PUSH1 0x20 00000deb: ADD 00000dec: DUP3 00000ded: ADD 00000dee: PUSH1 0x40 00000df0: MSTORE 00000df1: JUMPDEST 00000df2: POP 00000df3: SWAP3 00000df4: POP 00000df5: PUSH1 0x00 00000df7: SWAP2 00000df8: POP 00000df9: PUSH1 0x00 00000dfb: SWAP1 00000dfc: POP 00000dfd: JUMPDEST 00000dfe: PUSH1 0x03 00000e00: SLOAD 00000e01: DUP2 00000e02: LT 00000e03: ISZERO 00000e04: PUSH2 0x0ec3 00000e07: JUMPI 00000e08: PUSH1 0x00 00000e0a: DUP6 00000e0b: DUP2 00000e0c: MSTORE 00000e0d: PUSH1 0x01 00000e0f: PUSH1 0x20 00000e11: MSTORE 00000e12: PUSH1 0x40 00000e14: DUP2 00000e15: KECCAK256 00000e16: PUSH1 0x03 00000e18: DUP1 00000e19: SLOAD 00000e1a: SWAP2 00000e1b: SWAP3 00000e1c: SWAP2 00000e1d: DUP5 00000e1e: SWAP1 00000e1f: DUP2 00000e20: LT 00000e21: PUSH2 0x0e26 00000e24: JUMPI 00000e25: INVALID 00000e26: JUMPDEST 00000e27: SWAP1 00000e28: PUSH1 0x00 00000e2a: MSTORE 00000e2b: PUSH1 0x20 00000e2d: PUSH1 0x00 00000e2f: KECCAK256 00000e30: SWAP1 00000e31: ADD 00000e32: PUSH1 0x00 00000e34: JUMPDEST 00000e35: SWAP1 00000e36: SLOAD 00000e37: PUSH1 0x01 00000e39: PUSH1 0xa0 00000e3b: PUSH1 0x02 00000e3d: EXP 00000e3e: SUB 00000e3f: PUSH2 0x0100 00000e42: SWAP3 00000e43: SWAP1 00000e44: SWAP3 00000e45: EXP 00000e46: SWAP1 00000e47: DIV 00000e48: AND 00000e49: DUP2 00000e4a: MSTORE 00000e4b: PUSH1 0x20 00000e4d: DUP2 00000e4e: ADD 00000e4f: SWAP2 00000e50: SWAP1 00000e51: SWAP2 00000e52: MSTORE 00000e53: PUSH1 0x40 00000e55: ADD 00000e56: PUSH1 0x00 00000e58: KECCAK256 00000e59: SLOAD 00000e5a: PUSH1 0xff 00000e5c: AND 00000e5d: ISZERO 00000e5e: PUSH2 0x0eba 00000e61: JUMPI 00000e62: PUSH1 0x03 00000e64: DUP1 00000e65: SLOAD 00000e66: DUP3 00000e67: SWAP1 00000e68: DUP2 00000e69: LT 00000e6a: PUSH2 0x0e6f 00000e6d: JUMPI 00000e6e: INVALID 00000e6f: JUMPDEST 00000e70: SWAP1 00000e71: PUSH1 0x00 00000e73: MSTORE 00000e74: PUSH1 0x20 00000e76: PUSH1 0x00 00000e78: KECCAK256 00000e79: SWAP1 00000e7a: ADD 00000e7b: PUSH1 0x00 00000e7d: JUMPDEST 00000e7e: SWAP1 00000e7f: SLOAD 00000e80: SWAP1 00000e81: PUSH2 0x0100 00000e84: EXP 00000e85: SWAP1 00000e86: DIV 00000e87: PUSH1 0x01 00000e89: PUSH1 0xa0 00000e8b: PUSH1 0x02 00000e8d: EXP 00000e8e: SUB 00000e8f: AND 00000e90: DUP4 00000e91: DUP4 00000e92: DUP2 00000e93: MLOAD 00000e94: DUP2 00000e95: LT 00000e96: PUSH2 0x0e9b 00000e99: JUMPI 00000e9a: INVALID 00000e9b: JUMPDEST 00000e9c: PUSH1 0x01 00000e9e: PUSH1 0xa0 00000ea0: PUSH1 0x02 00000ea2: EXP 00000ea3: SUB 00000ea4: SWAP1 00000ea5: SWAP3 00000ea6: AND 00000ea7: PUSH1 0x20 00000ea9: SWAP3 00000eaa: DUP4 00000eab: MUL 00000eac: SWAP1 00000ead: SWAP2 00000eae: ADD 00000eaf: SWAP1 00000eb0: SWAP2 00000eb1: ADD 00000eb2: MSTORE 00000eb3: PUSH1 0x01 00000eb5: SWAP2 00000eb6: SWAP1 00000eb7: SWAP2 00000eb8: ADD 00000eb9: SWAP1 00000eba: JUMPDEST 00000ebb: JUMPDEST 00000ebc: PUSH1 0x01 00000ebe: ADD 00000ebf: PUSH2 0x0dfd 00000ec2: JUMP 00000ec3: JUMPDEST 00000ec4: DUP2 00000ec5: PUSH1 0x40 00000ec7: MLOAD 00000ec8: DUP1 00000ec9: MSIZE 00000eca: LT 00000ecb: PUSH2 0x0ed1 00000ece: JUMPI 00000ecf: POP 00000ed0: MSIZE 00000ed1: JUMPDEST 00000ed2: SWAP1 00000ed3: DUP1 00000ed4: DUP3 00000ed5: MSTORE 00000ed6: DUP1 00000ed7: PUSH1 0x20 00000ed9: MUL 00000eda: PUSH1 0x20 00000edc: ADD 00000edd: DUP3 00000ede: ADD 00000edf: PUSH1 0x40 00000ee1: MSTORE 00000ee2: JUMPDEST 00000ee3: POP 00000ee4: SWAP4 00000ee5: POP 00000ee6: PUSH1 0x00 00000ee8: SWAP1 00000ee9: POP 00000eea: JUMPDEST 00000eeb: DUP2 00000eec: DUP2 00000eed: LT 00000eee: ISZERO 00000eef: PUSH2 0x0f34 00000ef2: JUMPI 00000ef3: DUP3 00000ef4: DUP2 00000ef5: DUP2 00000ef6: MLOAD 00000ef7: DUP2 00000ef8: LT 00000ef9: PUSH2 0x0efe 00000efc: JUMPI 00000efd: INVALID 00000efe: JUMPDEST 00000eff: SWAP1 00000f00: PUSH1 0x20 00000f02: ADD 00000f03: SWAP1 00000f04: PUSH1 0x20 00000f06: MUL 00000f07: ADD 00000f08: MLOAD 00000f09: DUP5 00000f0a: DUP3 00000f0b: DUP2 00000f0c: MLOAD 00000f0d: DUP2 00000f0e: LT 00000f0f: PUSH2 0x0f14 00000f12: JUMPI 00000f13: INVALID 00000f14: JUMPDEST 00000f15: PUSH1 0x01 00000f17: PUSH1 0xa0 00000f19: PUSH1 0x02 00000f1b: EXP 00000f1c: SUB 00000f1d: SWAP1 00000f1e: SWAP3 00000f1f: AND 00000f20: PUSH1 0x20 00000f22: SWAP3 00000f23: DUP4 00000f24: MUL 00000f25: SWAP1 00000f26: SWAP2 00000f27: ADD 00000f28: SWAP1 00000f29: SWAP2 00000f2a: ADD 00000f2b: MSTORE 00000f2c: JUMPDEST 00000f2d: PUSH1 0x01 00000f2f: ADD 00000f30: PUSH2 0x0eea 00000f33: JUMP 00000f34: JUMPDEST 00000f35: JUMPDEST 00000f36: POP 00000f37: POP 00000f38: POP 00000f39: SWAP2 00000f3a: SWAP1 00000f3b: POP 00000f3c: JUMP 00000f3d: JUMPDEST 00000f3e: PUSH1 0x05 00000f40: SLOAD 00000f41: DUP2 00000f42: JUMP 00000f43: JUMPDEST 00000f44: ADDRESS 00000f45: PUSH1 0x01 00000f47: PUSH1 0xa0 00000f49: PUSH1 0x02 00000f4b: EXP 00000f4c: SUB 00000f4d: AND 00000f4e: CALLER 00000f4f: PUSH1 0x01 00000f51: PUSH1 0xa0 00000f53: PUSH1 0x02 00000f55: EXP 00000f56: SUB 00000f57: AND 00000f58: EQ 00000f59: ISZERO 00000f5a: ISZERO 00000f5b: PUSH2 0x0f63 00000f5e: JUMPI 00000f5f: PUSH1 0x00 00000f61: DUP1 00000f62: REVERT 00000f63: JUMPDEST 00000f64: PUSH1 0x03 00000f66: SLOAD 00000f67: DUP2 00000f68: PUSH1 0x32 00000f6a: DUP3 00000f6b: GT 00000f6c: DUP1 00000f6d: ISZERO 00000f6e: SWAP1 00000f6f: PUSH2 0x0f78 00000f72: JUMPI 00000f73: POP 00000f74: DUP2 00000f75: DUP2 00000f76: GT 00000f77: ISZERO 00000f78: JUMPDEST 00000f79: DUP1 00000f7a: ISZERO 00000f7b: PUSH2 0x0f83 00000f7e: JUMPI 00000f7f: POP 00000f80: DUP1 00000f81: ISZERO 00000f82: ISZERO 00000f83: JUMPDEST 00000f84: DUP1 00000f85: ISZERO 00000f86: PUSH2 0x0f8e 00000f89: JUMPI 00000f8a: POP 00000f8b: DUP2 00000f8c: ISZERO 00000f8d: ISZERO 00000f8e: JUMPDEST 00000f8f: ISZERO 00000f90: ISZERO 00000f91: PUSH2 0x0f99 00000f94: JUMPI 00000f95: PUSH1 0x00 00000f97: DUP1 00000f98: REVERT 00000f99: JUMPDEST 00000f9a: PUSH1 0x04 00000f9c: DUP4 00000f9d: SWAP1 00000f9e: SSTORE 00000f9f: PUSH32 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a 00000fc0: DUP4 00000fc1: PUSH1 0x40 00000fc3: MLOAD 00000fc4: SWAP1 00000fc5: DUP2 00000fc6: MSTORE 00000fc7: PUSH1 0x20 00000fc9: ADD 00000fca: PUSH1 0x40 00000fcc: MLOAD 00000fcd: DUP1 00000fce: SWAP2 00000fcf: SUB 00000fd0: SWAP1 00000fd1: LOG1 00000fd2: JUMPDEST 00000fd3: JUMPDEST 00000fd4: POP 00000fd5: POP 00000fd6: JUMPDEST 00000fd7: POP 00000fd8: JUMP 00000fd9: JUMPDEST 00000fda: CALLER 00000fdb: PUSH1 0x01 00000fdd: PUSH1 0xa0 00000fdf: PUSH1 0x02 00000fe1: EXP 00000fe2: SUB 00000fe3: DUP2 00000fe4: AND 00000fe5: PUSH1 0x00 00000fe7: SWAP1 00000fe8: DUP2 00000fe9: MSTORE 00000fea: PUSH1 0x02 00000fec: PUSH1 0x20 00000fee: MSTORE 00000fef: PUSH1 0x40 00000ff1: SWAP1 00000ff2: KECCAK256 00000ff3: SLOAD 00000ff4: PUSH1 0xff 00000ff6: AND 00000ff7: ISZERO 00000ff8: ISZERO 00000ff9: PUSH2 0x1001 00000ffc: JUMPI 00000ffd: PUSH1 0x00 00000fff: DUP1 00001000: REVERT 00001001: JUMPDEST 00001002: PUSH1 0x00 00001004: DUP3 00001005: DUP2 00001006: MSTORE 00001007: PUSH1 0x20 00001009: DUP2 0000100a: SWAP1 0000100b: MSTORE 0000100c: PUSH1 0x40 0000100e: SWAP1 0000100f: KECCAK256 00001010: SLOAD 00001011: DUP3 00001012: SWAP1 00001013: PUSH1 0x01 00001015: PUSH1 0xa0 00001017: PUSH1 0x02 00001019: EXP 0000101a: SUB 0000101b: AND 0000101c: ISZERO 0000101d: ISZERO 0000101e: PUSH2 0x1026 00001021: JUMPI 00001022: PUSH1 0x00 00001024: DUP1 00001025: REVERT 00001026: JUMPDEST 00001027: PUSH1 0x00 00001029: DUP4 0000102a: DUP2 0000102b: MSTORE 0000102c: PUSH1 0x01 0000102e: PUSH1 0x20 00001030: SWAP1 00001031: DUP2 00001032: MSTORE 00001033: PUSH1 0x40 00001035: DUP1 00001036: DUP4 00001037: KECCAK256 00001038: CALLER 00001039: PUSH1 0x01 0000103b: PUSH1 0xa0 0000103d: PUSH1 0x02 0000103f: EXP 00001040: SUB 00001041: DUP2 00001042: AND 00001043: DUP6 00001044: MSTORE 00001045: SWAP3 00001046: MSTORE 00001047: SWAP1 00001048: SWAP2 00001049: KECCAK256 0000104a: SLOAD 0000104b: DUP5 0000104c: SWAP2 0000104d: SWAP1 0000104e: PUSH1 0xff 00001050: AND 00001051: ISZERO 00001052: PUSH2 0x105a 00001055: JUMPI 00001056: PUSH1 0x00 00001058: DUP1 00001059: REVERT 0000105a: JUMPDEST 0000105b: PUSH1 0x00 0000105d: DUP6 0000105e: DUP2 0000105f: MSTORE 00001060: PUSH1 0x01 00001062: PUSH1 0x20 00001064: DUP2 00001065: DUP2 00001066: MSTORE 00001067: PUSH1 0x40 00001069: DUP1 0000106a: DUP5 0000106b: KECCAK256 0000106c: PUSH1 0x01 0000106e: PUSH1 0xa0 00001070: PUSH1 0x02 00001072: EXP 00001073: SUB 00001074: CALLER 00001075: AND 00001076: DUP1 00001077: DUP7 00001078: MSTORE 00001079: SWAP3 0000107a: MSTORE 0000107b: SWAP3 0000107c: DUP4 0000107d: SWAP1 0000107e: KECCAK256 0000107f: DUP1 00001080: SLOAD 00001081: PUSH1 0xff 00001083: NOT 00001084: AND 00001085: SWAP1 00001086: SWAP3 00001087: OR 00001088: SWAP1 00001089: SWAP2 0000108a: SSTORE 0000108b: DUP7 0000108c: SWAP2 0000108d: PUSH32 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef 000010ae: SWAP1 000010af: MLOAD 000010b0: PUSH1 0x40 000010b2: MLOAD 000010b3: DUP1 000010b4: SWAP2 000010b5: SUB 000010b6: SWAP1 000010b7: LOG3 000010b8: PUSH2 0x08f2 000010bb: DUP6 000010bc: PUSH2 0x12b7 000010bf: JUMP 000010c0: JUMPDEST 000010c1: JUMPDEST 000010c2: JUMPDEST 000010c3: POP 000010c4: POP 000010c5: JUMPDEST 000010c6: POP 000010c7: JUMPDEST 000010c8: POP 000010c9: POP 000010ca: JUMP 000010cb: JUMPDEST 000010cc: PUSH1 0x00 000010ce: PUSH2 0x10d8 000010d1: DUP5 000010d2: DUP5 000010d3: DUP5 000010d4: PUSH2 0x14a6 000010d7: JUMP 000010d8: JUMPDEST 000010d9: SWAP1 000010da: POP 000010db: PUSH2 0x10e3 000010de: DUP2 000010df: PUSH2 0x0fd9 000010e2: JUMP 000010e3: JUMPDEST 000010e4: JUMPDEST 000010e5: SWAP4 000010e6: SWAP3 000010e7: POP 000010e8: POP 000010e9: POP 000010ea: JUMP 000010eb: JUMPDEST 000010ec: PUSH1 0x32 000010ee: DUP2 000010ef: JUMP 000010f0: JUMPDEST 000010f1: PUSH1 0x04 000010f3: SLOAD 000010f4: DUP2 000010f5: JUMP 000010f6: JUMPDEST 000010f7: PUSH1 0x00 000010f9: ADDRESS 000010fa: PUSH1 0x01 000010fc: PUSH1 0xa0 000010fe: PUSH1 0x02 00001100: EXP 00001101: SUB 00001102: AND 00001103: CALLER 00001104: PUSH1 0x01 00001106: PUSH1 0xa0 00001108: PUSH1 0x02 0000110a: EXP 0000110b: SUB 0000110c: AND 0000110d: EQ 0000110e: ISZERO 0000110f: ISZERO 00001110: PUSH2 0x1118 00001113: JUMPI 00001114: PUSH1 0x00 00001116: DUP1 00001117: REVERT 00001118: JUMPDEST 00001119: PUSH1 0x01 0000111b: PUSH1 0xa0 0000111d: PUSH1 0x02 0000111f: EXP 00001120: SUB 00001121: DUP4 00001122: AND 00001123: PUSH1 0x00 00001125: SWAP1 00001126: DUP2 00001127: MSTORE 00001128: PUSH1 0x02 0000112a: PUSH1 0x20 0000112c: MSTORE 0000112d: PUSH1 0x40 0000112f: SWAP1 00001130: KECCAK256 00001131: SLOAD 00001132: DUP4 00001133: SWAP1 00001134: PUSH1 0xff 00001136: AND 00001137: ISZERO 00001138: ISZERO 00001139: PUSH2 0x1141 0000113c: JUMPI 0000113d: PUSH1 0x00 0000113f: DUP1 00001140: REVERT 00001141: JUMPDEST 00001142: PUSH1 0x01 00001144: PUSH1 0xa0 00001146: PUSH1 0x02 00001148: EXP 00001149: SUB 0000114a: DUP4 0000114b: AND 0000114c: PUSH1 0x00 0000114e: SWAP1 0000114f: DUP2 00001150: MSTORE 00001151: PUSH1 0x02 00001153: PUSH1 0x20 00001155: MSTORE 00001156: PUSH1 0x40 00001158: SWAP1 00001159: KECCAK256 0000115a: SLOAD 0000115b: DUP4 0000115c: SWAP1 0000115d: PUSH1 0xff 0000115f: AND 00001160: ISZERO 00001161: PUSH2 0x1169 00001164: JUMPI 00001165: PUSH1 0x00 00001167: DUP1 00001168: REVERT 00001169: JUMPDEST 0000116a: PUSH1 0x00 0000116c: SWAP3 0000116d: POP 0000116e: JUMPDEST 0000116f: PUSH1 0x03 00001171: SLOAD 00001172: DUP4 00001173: LT 00001174: ISZERO 00001175: PUSH2 0x1211 00001178: JUMPI 00001179: DUP5 0000117a: PUSH1 0x01 0000117c: PUSH1 0xa0 0000117e: PUSH1 0x02 00001180: EXP 00001181: SUB 00001182: AND 00001183: PUSH1 0x03 00001185: DUP5 00001186: DUP2 00001187: SLOAD 00001188: DUP2 00001189: LT 0000118a: ISZERO 0000118b: ISZERO 0000118c: PUSH2 0x1191 0000118f: JUMPI 00001190: INVALID 00001191: JUMPDEST 00001192: SWAP1 00001193: PUSH1 0x00 00001195: MSTORE 00001196: PUSH1 0x20 00001198: PUSH1 0x00 0000119a: KECCAK256 0000119b: SWAP1 0000119c: ADD 0000119d: PUSH1 0x00 0000119f: JUMPDEST 000011a0: SWAP1 000011a1: SLOAD 000011a2: SWAP1 000011a3: PUSH2 0x0100 000011a6: EXP 000011a7: SWAP1 000011a8: DIV 000011a9: PUSH1 0x01 000011ab: PUSH1 0xa0 000011ad: PUSH1 0x02 000011af: EXP 000011b0: SUB 000011b1: AND 000011b2: PUSH1 0x01 000011b4: PUSH1 0xa0 000011b6: PUSH1 0x02 000011b8: EXP 000011b9: SUB 000011ba: AND 000011bb: EQ 000011bc: ISZERO 000011bd: PUSH2 0x1205 000011c0: JUMPI 000011c1: DUP4 000011c2: PUSH1 0x03 000011c4: DUP5 000011c5: DUP2 000011c6: SLOAD 000011c7: DUP2 000011c8: LT 000011c9: ISZERO 000011ca: ISZERO 000011cb: PUSH2 0x11d0 000011ce: JUMPI 000011cf: INVALID 000011d0: JUMPDEST 000011d1: SWAP1 000011d2: PUSH1 0x00 000011d4: MSTORE 000011d5: PUSH1 0x20 000011d7: PUSH1 0x00 000011d9: KECCAK256 000011da: SWAP1 000011db: ADD 000011dc: PUSH1 0x00 000011de: JUMPDEST 000011df: PUSH2 0x0100 000011e2: EXP 000011e3: DUP2 000011e4: SLOAD 000011e5: DUP2 000011e6: PUSH1 0x01 000011e8: PUSH1 0xa0 000011ea: PUSH1 0x02 000011ec: EXP 000011ed: SUB 000011ee: MUL 000011ef: NOT 000011f0: AND 000011f1: SWAP1 000011f2: DUP4 000011f3: PUSH1 0x01 000011f5: PUSH1 0xa0 000011f7: PUSH1 0x02 000011f9: EXP 000011fa: SUB 000011fb: AND 000011fc: MUL 000011fd: OR 000011fe: SWAP1 000011ff: SSTORE 00001200: POP 00001201: PUSH2 0x1211 00001204: JUMP 00001205: JUMPDEST 00001206: JUMPDEST 00001207: PUSH1 0x01 00001209: SWAP1 0000120a: SWAP3 0000120b: ADD 0000120c: SWAP2 0000120d: PUSH2 0x116e 00001210: JUMP 00001211: JUMPDEST 00001212: PUSH1 0x01 00001214: PUSH1 0xa0 00001216: PUSH1 0x02 00001218: EXP 00001219: SUB 0000121a: DUP1 0000121b: DUP7 0000121c: AND 0000121d: PUSH1 0x00 0000121f: DUP2 00001220: DUP2 00001221: MSTORE 00001222: PUSH1 0x02 00001224: PUSH1 0x20 00001226: MSTORE 00001227: PUSH1 0x40 00001229: DUP1 0000122a: DUP3 0000122b: KECCAK256 0000122c: DUP1 0000122d: SLOAD 0000122e: PUSH1 0xff 00001230: NOT 00001231: SWAP1 00001232: DUP2 00001233: AND 00001234: SWAP1 00001235: SWAP2 00001236: SSTORE 00001237: SWAP4 00001238: DUP9 00001239: AND 0000123a: DUP3 0000123b: MSTORE 0000123c: SWAP1 0000123d: DUP2 0000123e: SWAP1 0000123f: KECCAK256 00001240: DUP1 00001241: SLOAD 00001242: SWAP1 00001243: SWAP4 00001244: AND 00001245: PUSH1 0x01 00001247: OR 00001248: SWAP1 00001249: SWAP3 0000124a: SSTORE 0000124b: SWAP1 0000124c: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90 0000126d: SWAP1 0000126e: MLOAD 0000126f: PUSH1 0x40 00001271: MLOAD 00001272: DUP1 00001273: SWAP2 00001274: SUB 00001275: SWAP1 00001276: LOG2 00001277: DUP4 00001278: PUSH1 0x01 0000127a: PUSH1 0xa0 0000127c: PUSH1 0x02 0000127e: EXP 0000127f: SUB 00001280: AND 00001281: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d 000012a2: PUSH1 0x40 000012a4: MLOAD 000012a5: PUSH1 0x40 000012a7: MLOAD 000012a8: DUP1 000012a9: SWAP2 000012aa: SUB 000012ab: SWAP1 000012ac: LOG2 000012ad: JUMPDEST 000012ae: JUMPDEST 000012af: POP 000012b0: JUMPDEST 000012b1: POP 000012b2: JUMPDEST 000012b3: POP 000012b4: POP 000012b5: POP 000012b6: JUMP 000012b7: JUMPDEST 000012b8: CALLER 000012b9: PUSH1 0x01 000012bb: PUSH1 0xa0 000012bd: PUSH1 0x02 000012bf: EXP 000012c0: SUB 000012c1: DUP2 000012c2: AND 000012c3: PUSH1 0x00 000012c5: SWAP1 000012c6: DUP2 000012c7: MSTORE 000012c8: PUSH1 0x02 000012ca: PUSH1 0x20 000012cc: MSTORE 000012cd: PUSH1 0x40 000012cf: DUP2 000012d0: KECCAK256 000012d1: SLOAD 000012d2: SWAP1 000012d3: SWAP2 000012d4: SWAP1 000012d5: PUSH1 0xff 000012d7: AND 000012d8: ISZERO 000012d9: ISZERO 000012da: PUSH2 0x12e2 000012dd: JUMPI 000012de: PUSH1 0x00 000012e0: DUP1 000012e1: REVERT 000012e2: JUMPDEST 000012e3: PUSH1 0x00 000012e5: DUP4 000012e6: DUP2 000012e7: MSTORE 000012e8: PUSH1 0x01 000012ea: PUSH1 0x20 000012ec: SWAP1 000012ed: DUP2 000012ee: MSTORE 000012ef: PUSH1 0x40 000012f1: DUP1 000012f2: DUP4 000012f3: KECCAK256 000012f4: CALLER 000012f5: PUSH1 0x01 000012f7: PUSH1 0xa0 000012f9: PUSH1 0x02 000012fb: EXP 000012fc: SUB 000012fd: DUP2 000012fe: AND 000012ff: DUP6 00001300: MSTORE 00001301: SWAP3 00001302: MSTORE 00001303: SWAP1 00001304: SWAP2 00001305: KECCAK256 00001306: SLOAD 00001307: DUP5 00001308: SWAP2 00001309: SWAP1 0000130a: PUSH1 0xff 0000130c: AND 0000130d: ISZERO 0000130e: ISZERO 0000130f: PUSH2 0x1317 00001312: JUMPI 00001313: PUSH1 0x00 00001315: DUP1 00001316: REVERT 00001317: JUMPDEST 00001318: PUSH1 0x00 0000131a: DUP6 0000131b: DUP2 0000131c: MSTORE 0000131d: PUSH1 0x20 0000131f: DUP2 00001320: SWAP1 00001321: MSTORE 00001322: PUSH1 0x40 00001324: SWAP1 00001325: KECCAK256 00001326: PUSH1 0x03 00001328: ADD 00001329: SLOAD 0000132a: DUP6 0000132b: SWAP1 0000132c: PUSH1 0xff 0000132e: AND 0000132f: ISZERO 00001330: PUSH2 0x1338 00001333: JUMPI 00001334: PUSH1 0x00 00001336: DUP1 00001337: REVERT 00001338: JUMPDEST 00001339: PUSH2 0x1341 0000133c: DUP7 0000133d: PUSH2 0x0add 00001340: JUMP 00001341: JUMPDEST 00001342: ISZERO 00001343: PUSH2 0x1499 00001346: JUMPI 00001347: PUSH1 0x00 00001349: DUP7 0000134a: DUP2 0000134b: MSTORE 0000134c: PUSH1 0x20 0000134e: DUP2 0000134f: DUP2 00001350: MSTORE 00001351: PUSH1 0x40 00001353: SWAP2 00001354: DUP3 00001355: SWAP1 00001356: KECCAK256 00001357: PUSH1 0x03 00001359: DUP2 0000135a: ADD 0000135b: DUP1 0000135c: SLOAD 0000135d: PUSH1 0xff 0000135f: NOT 00001360: AND 00001361: PUSH1 0x01 00001363: SWAP1 00001364: DUP2 00001365: OR 00001366: SWAP1 00001367: SWAP2 00001368: SSTORE 00001369: DUP2 0000136a: SLOAD 0000136b: DUP2 0000136c: DUP4 0000136d: ADD 0000136e: SLOAD 0000136f: PUSH1 0x02 00001371: DUP1 00001372: DUP6 00001373: ADD 00001374: DUP1 00001375: SLOAD 00001376: SWAP6 00001377: SWAP13 00001378: POP 00001379: PUSH2 0x1428 0000137c: SWAP8 0000137d: PUSH1 0x01 0000137f: PUSH1 0xa0 00001381: PUSH1 0x02 00001383: EXP 00001384: SUB 00001385: SWAP1 00001386: SWAP5 00001387: AND 00001388: SWAP7 00001389: SWAP3 0000138a: SWAP6 0000138b: PUSH1 0x00 0000138d: NOT 0000138e: SWAP6 0000138f: DUP2 00001390: AND 00001391: ISZERO 00001392: PUSH2 0x0100 00001395: MUL 00001396: SWAP6 00001397: SWAP1 00001398: SWAP6 00001399: ADD 0000139a: SWAP1 0000139b: SWAP5 0000139c: AND 0000139d: DIV 0000139e: SWAP3 0000139f: SWAP2 000013a0: DUP4 000013a1: SWAP2 000013a2: PUSH1 0x1f 000013a4: DUP4 000013a5: ADD 000013a6: DUP2 000013a7: SWAP1 000013a8: DIV 000013a9: DUP2 000013aa: MUL 000013ab: ADD 000013ac: SWAP1 000013ad: MLOAD 000013ae: SWAP1 000013af: DUP2 000013b0: ADD 000013b1: PUSH1 0x40 000013b3: MSTORE 000013b4: DUP1 000013b5: SWAP3 000013b6: SWAP2 000013b7: SWAP1 000013b8: DUP2 000013b9: DUP2 000013ba: MSTORE 000013bb: PUSH1 0x20 000013bd: ADD 000013be: DUP3 000013bf: DUP1 000013c0: SLOAD 000013c1: PUSH1 0x01 000013c3: DUP2 000013c4: PUSH1 0x01 000013c6: AND 000013c7: ISZERO 000013c8: PUSH2 0x0100 000013cb: MUL 000013cc: SUB 000013cd: AND 000013ce: PUSH1 0x02 000013d0: SWAP1 000013d1: DIV 000013d2: DUP1 000013d3: ISZERO 000013d4: PUSH2 0x141e 000013d7: JUMPI 000013d8: DUP1 000013d9: PUSH1 0x1f 000013db: LT 000013dc: PUSH2 0x13f3 000013df: JUMPI 000013e0: PUSH2 0x0100 000013e3: DUP1 000013e4: DUP4 000013e5: SLOAD 000013e6: DIV 000013e7: MUL 000013e8: DUP4 000013e9: MSTORE 000013ea: SWAP2 000013eb: PUSH1 0x20 000013ed: ADD 000013ee: SWAP2 000013ef: PUSH2 0x141e 000013f2: JUMP 000013f3: JUMPDEST 000013f4: DUP3 000013f5: ADD 000013f6: SWAP2 000013f7: SWAP1 000013f8: PUSH1 0x00 000013fa: MSTORE 000013fb: PUSH1 0x20 000013fd: PUSH1 0x00 000013ff: KECCAK256 00001400: SWAP1 00001401: JUMPDEST 00001402: DUP2 00001403: SLOAD 00001404: DUP2 00001405: MSTORE 00001406: SWAP1 00001407: PUSH1 0x01 00001409: ADD 0000140a: SWAP1 0000140b: PUSH1 0x20 0000140d: ADD 0000140e: DUP1 0000140f: DUP4 00001410: GT 00001411: PUSH2 0x1401 00001414: JUMPI 00001415: DUP3 00001416: SWAP1 00001417: SUB 00001418: PUSH1 0x1f 0000141a: AND 0000141b: DUP3 0000141c: ADD 0000141d: SWAP2 0000141e: JUMPDEST 0000141f: POP 00001420: POP 00001421: POP 00001422: POP 00001423: POP 00001424: PUSH2 0x15a5 00001427: JUMP 00001428: JUMPDEST 00001429: ISZERO 0000142a: PUSH2 0x145f 0000142d: JUMPI 0000142e: DUP6 0000142f: PUSH32 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75 00001450: PUSH1 0x40 00001452: MLOAD 00001453: PUSH1 0x40 00001455: MLOAD 00001456: DUP1 00001457: SWAP2 00001458: SUB 00001459: SWAP1 0000145a: LOG2 0000145b: PUSH2 0x1499 0000145e: JUMP 0000145f: JUMPDEST 00001460: DUP6 00001461: PUSH32 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236 00001482: PUSH1 0x40 00001484: MLOAD 00001485: PUSH1 0x40 00001487: MLOAD 00001488: DUP1 00001489: SWAP2 0000148a: SUB 0000148b: SWAP1 0000148c: LOG2 0000148d: PUSH1 0x03 0000148f: DUP6 00001490: ADD 00001491: DUP1 00001492: SLOAD 00001493: PUSH1 0xff 00001495: NOT 00001496: AND 00001497: SWAP1 00001498: SSTORE 00001499: JUMPDEST 0000149a: JUMPDEST 0000149b: JUMPDEST 0000149c: JUMPDEST 0000149d: POP 0000149e: JUMPDEST 0000149f: POP 000014a0: POP 000014a1: JUMPDEST 000014a2: POP 000014a3: POP 000014a4: POP 000014a5: JUMP 000014a6: JUMPDEST 000014a7: PUSH1 0x00 000014a9: DUP4 000014aa: PUSH1 0x01 000014ac: PUSH1 0xa0 000014ae: PUSH1 0x02 000014b0: EXP 000014b1: SUB 000014b2: DUP2 000014b3: AND 000014b4: ISZERO 000014b5: ISZERO 000014b6: PUSH2 0x14be 000014b9: JUMPI 000014ba: PUSH1 0x00 000014bc: DUP1 000014bd: REVERT 000014be: JUMPDEST 000014bf: PUSH1 0x05 000014c1: SLOAD 000014c2: SWAP2 000014c3: POP 000014c4: PUSH1 0x80 000014c6: PUSH1 0x40 000014c8: MLOAD 000014c9: SWAP1 000014ca: DUP2 000014cb: ADD 000014cc: PUSH1 0x40 000014ce: SWAP1 000014cf: DUP2 000014d0: MSTORE 000014d1: PUSH1 0x01 000014d3: PUSH1 0xa0 000014d5: PUSH1 0x02 000014d7: EXP 000014d8: SUB 000014d9: DUP8 000014da: AND 000014db: DUP3 000014dc: MSTORE 000014dd: PUSH1 0x20 000014df: DUP1 000014e0: DUP4 000014e1: ADD 000014e2: DUP8 000014e3: SWAP1 000014e4: MSTORE 000014e5: DUP2 000014e6: DUP4 000014e7: ADD 000014e8: DUP7 000014e9: SWAP1 000014ea: MSTORE 000014eb: PUSH1 0x00 000014ed: PUSH1 0x60 000014ef: DUP5 000014f0: ADD 000014f1: DUP2 000014f2: SWAP1 000014f3: MSTORE 000014f4: DUP6 000014f5: DUP2 000014f6: MSTORE 000014f7: SWAP1 000014f8: DUP2 000014f9: SWAP1 000014fa: MSTORE 000014fb: KECCAK256 000014fc: DUP2 000014fd: MLOAD 000014fe: DUP2 000014ff: SLOAD 00001500: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001515: NOT 00001516: AND 00001517: PUSH1 0x01 00001519: PUSH1 0xa0 0000151b: PUSH1 0x02 0000151d: EXP 0000151e: SUB 0000151f: SWAP2 00001520: SWAP1 00001521: SWAP2 00001522: AND 00001523: OR 00001524: DUP2 00001525: SSTORE 00001526: PUSH1 0x20 00001528: DUP3 00001529: ADD 0000152a: MLOAD 0000152b: DUP2 0000152c: PUSH1 0x01 0000152e: ADD 0000152f: SSTORE 00001530: PUSH1 0x40 00001532: DUP3 00001533: ADD 00001534: MLOAD 00001535: DUP2 00001536: PUSH1 0x02 00001538: ADD 00001539: SWAP1 0000153a: DUP1 0000153b: MLOAD 0000153c: PUSH2 0x1549 0000153f: SWAP3 00001540: SWAP2 00001541: PUSH1 0x20 00001543: ADD 00001544: SWAP1 00001545: PUSH2 0x1645 00001548: JUMP 00001549: JUMPDEST 0000154a: POP 0000154b: PUSH1 0x60 0000154d: DUP3 0000154e: ADD 0000154f: MLOAD 00001550: PUSH1 0x03 00001552: SWAP2 00001553: SWAP1 00001554: SWAP2 00001555: ADD 00001556: DUP1 00001557: SLOAD 00001558: PUSH1 0xff 0000155a: NOT 0000155b: AND 0000155c: SWAP2 0000155d: ISZERO 0000155e: ISZERO 0000155f: SWAP2 00001560: SWAP1 00001561: SWAP2 00001562: OR 00001563: SWAP1 00001564: SSTORE 00001565: POP 00001566: PUSH1 0x05 00001568: DUP1 00001569: SLOAD 0000156a: PUSH1 0x01 0000156c: ADD 0000156d: SWAP1 0000156e: SSTORE 0000156f: DUP2 00001570: PUSH32 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51 00001591: PUSH1 0x40 00001593: MLOAD 00001594: PUSH1 0x40 00001596: MLOAD 00001597: DUP1 00001598: SWAP2 00001599: SUB 0000159a: SWAP1 0000159b: LOG2 0000159c: JUMPDEST 0000159d: JUMPDEST 0000159e: POP 0000159f: SWAP4 000015a0: SWAP3 000015a1: POP 000015a2: POP 000015a3: POP 000015a4: JUMP 000015a5: JUMPDEST 000015a6: PUSH1 0x00 000015a8: DUP1 000015a9: PUSH1 0x40 000015ab: MLOAD 000015ac: PUSH1 0x20 000015ae: DUP5 000015af: ADD 000015b0: PUSH1 0x00 000015b2: DUP3 000015b3: DUP8 000015b4: DUP4 000015b5: DUP11 000015b6: DUP13 000015b7: PUSH2 0x8796 000015ba: GAS 000015bb: SUB 000015bc: CALL 000015bd: SWAP3 000015be: POP 000015bf: POP 000015c0: POP 000015c1: DUP1 000015c2: SWAP2 000015c3: POP 000015c4: JUMPDEST 000015c5: POP 000015c6: SWAP5 000015c7: SWAP4 000015c8: POP 000015c9: POP 000015ca: POP 000015cb: POP 000015cc: JUMP 000015cd: JUMPDEST 000015ce: DUP2 000015cf: SLOAD 000015d0: DUP2 000015d1: DUP4 000015d2: SSTORE 000015d3: DUP2 000015d4: DUP2 000015d5: ISZERO 000015d6: GT 000015d7: PUSH2 0x0813 000015da: JUMPI 000015db: PUSH1 0x00 000015dd: DUP4 000015de: DUP2 000015df: MSTORE 000015e0: PUSH1 0x20 000015e2: SWAP1 000015e3: KECCAK256 000015e4: PUSH2 0x0813 000015e7: SWAP2 000015e8: DUP2 000015e9: ADD 000015ea: SWAP1 000015eb: DUP4 000015ec: ADD 000015ed: PUSH2 0x16c4 000015f0: JUMP 000015f1: JUMPDEST 000015f2: JUMPDEST 000015f3: POP 000015f4: POP 000015f5: POP 000015f6: JUMP 000015f7: JUMPDEST 000015f8: DUP2 000015f9: SLOAD 000015fa: DUP2 000015fb: DUP4 000015fc: SSTORE 000015fd: DUP2 000015fe: DUP2 000015ff: ISZERO 00001600: GT 00001601: PUSH2 0x0813 00001604: JUMPI 00001605: PUSH1 0x00 00001607: DUP4 00001608: DUP2 00001609: MSTORE 0000160a: PUSH1 0x20 0000160c: SWAP1 0000160d: KECCAK256 0000160e: PUSH2 0x0813 00001611: SWAP2 00001612: DUP2 00001613: ADD 00001614: SWAP1 00001615: DUP4 00001616: ADD 00001617: PUSH2 0x16c4 0000161a: JUMP 0000161b: JUMPDEST 0000161c: JUMPDEST 0000161d: POP 0000161e: POP 0000161f: POP 00001620: JUMP 00001621: JUMPDEST 00001622: PUSH1 0x20 00001624: PUSH1 0x40 00001626: MLOAD 00001627: SWAP1 00001628: DUP2 00001629: ADD 0000162a: PUSH1 0x40 0000162c: MSTORE 0000162d: PUSH1 0x00 0000162f: DUP2 00001630: MSTORE 00001631: SWAP1 00001632: JUMP 00001633: JUMPDEST 00001634: PUSH1 0x20 00001636: PUSH1 0x40 00001638: MLOAD 00001639: SWAP1 0000163a: DUP2 0000163b: ADD 0000163c: PUSH1 0x40 0000163e: MSTORE 0000163f: PUSH1 0x00 00001641: DUP2 00001642: MSTORE 00001643: SWAP1 00001644: JUMP 00001645: JUMPDEST 00001646: DUP3 00001647: DUP1 00001648: SLOAD 00001649: PUSH1 0x01 0000164b: DUP2 0000164c: PUSH1 0x01 0000164e: AND 0000164f: ISZERO 00001650: PUSH2 0x0100 00001653: MUL 00001654: SUB 00001655: AND 00001656: PUSH1 0x02 00001658: SWAP1 00001659: DIV 0000165a: SWAP1 0000165b: PUSH1 0x00 0000165d: MSTORE 0000165e: PUSH1 0x20 00001660: PUSH1 0x00 00001662: KECCAK256 00001663: SWAP1 00001664: PUSH1 0x1f 00001666: ADD 00001667: PUSH1 0x20 00001669: SWAP1 0000166a: DIV 0000166b: DUP2 0000166c: ADD 0000166d: SWAP3 0000166e: DUP3 0000166f: PUSH1 0x1f 00001671: LT 00001672: PUSH2 0x1686 00001675: JUMPI 00001676: DUP1 00001677: MLOAD 00001678: PUSH1 0xff 0000167a: NOT 0000167b: AND 0000167c: DUP4 0000167d: DUP1 0000167e: ADD 0000167f: OR 00001680: DUP6 00001681: SSTORE 00001682: PUSH2 0x16b3 00001685: JUMP 00001686: JUMPDEST 00001687: DUP3 00001688: DUP1 00001689: ADD 0000168a: PUSH1 0x01 0000168c: ADD 0000168d: DUP6 0000168e: SSTORE 0000168f: DUP3 00001690: ISZERO 00001691: PUSH2 0x16b3 00001694: JUMPI 00001695: SWAP2 00001696: DUP3 00001697: ADD 00001698: JUMPDEST 00001699: DUP3 0000169a: DUP2 0000169b: GT 0000169c: ISZERO 0000169d: PUSH2 0x16b3 000016a0: JUMPI 000016a1: DUP3 000016a2: MLOAD 000016a3: DUP3 000016a4: SSTORE 000016a5: SWAP2 000016a6: PUSH1 0x20 000016a8: ADD 000016a9: SWAP2 000016aa: SWAP1 000016ab: PUSH1 0x01 000016ad: ADD 000016ae: SWAP1 000016af: PUSH2 0x1698 000016b2: JUMP 000016b3: JUMPDEST 000016b4: JUMPDEST 000016b5: POP 000016b6: PUSH2 0x16c0 000016b9: SWAP3 000016ba: SWAP2 000016bb: POP 000016bc: PUSH2 0x16c4 000016bf: JUMP 000016c0: JUMPDEST 000016c1: POP 000016c2: SWAP1 000016c3: JUMP 000016c4: JUMPDEST 000016c5: PUSH2 0x0c8a 000016c8: SWAP2 000016c9: SWAP1 000016ca: JUMPDEST 000016cb: DUP1 000016cc: DUP3 000016cd: GT 000016ce: ISZERO 000016cf: PUSH2 0x16c0 000016d2: JUMPI 000016d3: PUSH1 0x00 000016d5: DUP2 000016d6: SSTORE 000016d7: PUSH1 0x01 000016d9: ADD 000016da: PUSH2 0x16ca 000016dd: JUMP 000016de: JUMPDEST 000016df: POP 000016e0: SWAP1 000016e1: JUMP 000016e2: JUMPDEST 000016e3: SWAP1 000016e4: JUMP 000016e5: STOP 000016e6: LOG1 000016e7: PUSH6 0x627a7a723058 000016ee: KECCAK256 000016ef: PUSH17 0x6ed24401b5b8a3842b02ace1947993b89d 00001701: MSTORE 00001702: SELFDESTRUCT 00001703: SIGNEXTEND 00001704: SWAP11 00001705: UNKNOWN(0xD4) 00001706: DUP16 00001707: SWAP8 00001708: PUSH19
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | cast | SELFDESTRUCT present | 85 | no | — |
viewevidence_json{
"notes": "selfdestruct can remove contract code and send funds; review reachability",
"selfdestruct_count": 1
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57
call_targets:
0xf7815c3b9187c0109206e71aea20e97c6940ea0e
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf7815c3b9187c0109206e71aea20e97c6940ea0e"
],
"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": "0x025e7c27",
"selector": "0x025e7c27",
"calldata_variants": [
"0x025e7c27",
"0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x173825d9",
"selector": "0x173825d9",
"calldata_variants": [
"0x173825d9",
"0x173825d90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x20ea8d86",
"selector": "0x20ea8d86",
"calldata_variants": [
"0x20ea8d86",
"0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3411c81c",
"selector": "0x3411c81c",
"calldata_variants": [
"0x3411c81c",
"0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x54741525",
"selector": "0x54741525",
"calldata_variants": [
"0x54741525",
"0x547415250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7065cb48",
"selector": "0x7065cb48",
"calldata_variants": [
"0x7065cb48",
"0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x784547a7",
"selector": "0x784547a7",
"calldata_variants": [
"0x784547a7",
"0x784547a70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5564,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [],
"untrusted_call_count": 1
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57
call_targets:
0xf7815c3b9187c0109206e71aea20e97c6940ea0e
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf7815c3b9187c0109206e71aea20e97c6940ea0e"
],
"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": "0x025e7c27",
"selector": "0x025e7c27",
"calldata_variants": [
"0x025e7c27",
"0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x173825d9",
"selector": "0x173825d9",
"calldata_variants": [
"0x173825d9",
"0x173825d90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x20ea8d86",
"selector": "0x20ea8d86",
"calldata_variants": [
"0x20ea8d86",
"0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3411c81c",
"selector": "0x3411c81c",
"calldata_variants": [
"0x3411c81c",
"0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x54741525",
"selector": "0x54741525",
"calldata_variants": [
"0x54741525",
"0x547415250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7065cb48",
"selector": "0x7065cb48",
"calldata_variants": [
"0x7065cb48",
"0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x784547a7",
"selector": "0x784547a7",
"calldata_variants": [
"0x784547a7",
"0x784547a70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5564,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|
| high | other | detector | SELFDESTRUCT reachable | 65 | no | no |
viewtrace_id: 0x08ef3b624704427257b43e311dc7a4ff0b8ce2dd9fac211df4dcdf4819d06a5b
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0x08ef3b624704427257b43e311dc7a4ff0b8ce2dd9fac211df4dcdf4819d06a5b",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x025e7c27",
"selector": "0x025e7c27",
"calldata_variants": [
"0x025e7c27",
"0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x173825d9",
"selector": "0x173825d9",
"calldata_variants": [
"0x173825d9",
"0x173825d90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x20ea8d86",
"selector": "0x20ea8d86",
"calldata_variants": [
"0x20ea8d86",
"0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3411c81c",
"selector": "0x3411c81c",
"calldata_variants": [
"0x3411c81c",
"0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x54741525",
"selector": "0x54741525",
"calldata_variants": [
"0x54741525",
"0x547415250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7065cb48",
"selector": "0x7065cb48",
"calldata_variants": [
"0x7065cb48",
"0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x784547a7",
"selector": "0x784547a7",
"calldata_variants": [
"0x784547a7",
"0x784547a70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [],
"selfdestruct_count": 1
}
|