TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

c199db1d-4317-45d1-adb5-a775fe66025c

complete
Chain ID
1
Address
Block Number
Created
Mon, Jan 5, 2026 2:23 AM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Bytecode only
Review Backing
Not yet
Best current signal
SELFDESTRUCT present
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31653 report.consolidate complete 1 / 1 3 months ago
95341 artifact.fetch complete 1 / 3 1 week ago
95342 tool.cast_disasm complete 1 / 3 1 week ago
95343 analysis.bundle complete 1 / 3 1 week ago
95344 capability.graph complete 1 / 3 1 week ago
95345 detector.run complete 1 / 3 1 week ago
95346 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: no

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.
View stderr
[codex:152518] OpenAI Codex v0.77.0 (research preview)
[codex:152518] --------
[codex:152518] workdir: /tmp/codex-multi-f_8wa29r
[codex:152518] model: gpt-5.2-codex
[codex:152518] provider: openai
[codex:152518] approval: never
[codex:152518] sandbox: read-only
[codex:152518] reasoning effort: xhigh
[codex:152518] reasoning summaries: auto
[codex:152518] session id: 019b8bf1-3ce7-7433-882d-39f438aef1cb
[codex:152518] --------
[codex:152518] user
[codex:152518] 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:152518] 
[codex:152518] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:152518] 
[codex:152518] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:152518] - Gas inefficiency, code quality, or best practices
[codex:152518] - Theoretical vulnerabilities without a clear extraction path
[codex:152518] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:152518] - Issues requiring social engineering or off-chain coordination
[codex:152518] 
[codex:152518] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:152518] - CALL/DELEGATECALL with controllable destination or calldata
[codex:152518] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:152518] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:152518] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:152518] - External calls before state updates (reentrancy)
[codex:152518] - SELFDESTRUCT with controllable beneficiary
[codex:152518] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:152518] 
[codex:152518] For each finding, you MUST explain:
[codex:152518] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:152518] 2. The concrete sequence of transactions to extract value
[codex:152518] 3. Why you believe this is exploitable (not just suspicious)
[codex:152518] 
[codex:152518] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:152518] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:152518] 
[codex:152518] Output MUST be valid JSON matching the provided schema.
[codex:152518] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:152518] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:152518] mcp startup: no servers
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Reading BYTECODE_BUNDLE.txt**
[codex:152518] exec
[codex:152518] /bin/bash -lc ls in /tmp/codex-multi-f_8wa29r succeeded in 5ms:
[codex:152518] BYTECODE_BUNDLE.txt
[codex:152518] codex-output-schema.json
[codex:152518] exec
[codex:152518] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-f_8wa29r succeeded in 5ms:
[codex:152518] Runtime bytecode bundle for best-effort auditing.
[codex:152518] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:152518] 
[codex:152518] FILE: runtime_bytecode.hex
[codex:152518] 0x60606040523615610110576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304ed00ac1461016d57806318fd89031461019657806322f3e2d4146101f957806356b4997f14610226578063570ca73514610249578063574022271461029e578063609c9c711461034d57806387c1ed12146103bd57806388ea41b9146103e05780638da5cb5b146104035780639619367d14610458578063a4de306b14610481578063a87783ba146104a7578063aaae0284146104bc578063ab6b1f68146104eb578063b139b032146106a6578063b3ab15fb146106bb578063d263b7eb146106f4578063e0176de814610709578063efd5913a14610732575b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561016b57600080fd5b005b341561017857600080fd5b610180610755565b6040518082815260200191505060405180910390f35b34156101a157600080fd5b6101df600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190505061075b565b604051808215151515815260200191505060405180910390f35b341561020457600080fd5b61020c6109a8565b604051808215151515815260200191505060405180910390f35b341561023157600080fd5b61024760048080359060200190919050506109bb565b005b341561025457600080fd5b61025c610a21565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102a957600080fd5b610333600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050610a47565b604051808215151515815260200191505060405180910390f35b6103bb600480803560ff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091908035906020019091905050610c9a565b005b34156103c857600080fd5b6103de6004808035906020019091905050611002565b005b34156103eb57600080fd5b610401600480803590602001909190505061117a565b005b341561040e57600080fd5b6104166111e0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561046357600080fd5b61046b611205565b6040518082815260200191505060405180910390f35b341561048c57600080fd5b6104a5600480803560ff1690602001909190505061120b565b005b34156104b257600080fd5b6104ba611285565b005b34156104c757600080fd5b6104cf6112fd565b604051808260ff1660ff16815260200191505060405180910390f35b34156104f657600080fd5b61052b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611310565b604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018581526020018415151515815260200183810383528881815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b505083810382528781815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561068f5780601f106106645761010080835404028352916020019161068f565b820191906000526020600020905b81548152906001019060200180831161067257829003601f168201915b50509a505050505050505050505060405180910390f35b34156106b157600080fd5b6106b9611390565b005b34156106c657600080fd5b6106f2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611409565b005b34156106ff57600080fd5b6107076114a8565b005b341561071457600080fd5b61071c61153d565b6040518082815260200191505060405180910390f35b341561073d57600080fd5b6107536004808035906020019091905050611543565b005b60045481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107ba57600080fd5b84846000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600001541480610882575060011515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060070160009054906101000a900460ff161515145b1561088c57600080fd5b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002092506020604051908101604052806000815250836004019080519060200190610906929190611703565b5084836005018190555061091a87866115a9565b60018360070160006101000a81548160ff02191690831515021790555082600601546004600082825403925050819055508673ffffffffffffffffffffffffffffffffffffffff16867f167f60e12ad331289e861c37279d2fdeda6dcfbeef21597c81762879de8fac66876040518082815260200191505060405180910390a3600193505050509392505050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a1757600080fd5b8060038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aa657600080fd5b86866000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600001541480610b6e575060011515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060070160009054906101000a900460ff161515145b15610b7857600080fd5b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000898152602001908152602001600020925085836004019080519060200190610be2929190611703565b508487018360050181905550610bfc8984600501546115a9565b610c0a898460050154611655565b60018360070160006101000a81548160ff02191690831515021790555082600601546004600082825403925050819055508873ffffffffffffffffffffffffffffffffffffffff16887fb50460b1554461a9018f3e2240e902901793d4ff8a09cd2b4d560fff86217aba876040518082815260200191505060405180910390a36001935050505095945050505050565b610ca2611783565b600160149054906101000a900460ff161515610cbd57600080fd5b600254341015610ccc57600080fd5b81600354811115610cdc57600080fd5b8260008060006064600560009054906101000a900460ff1660ff163073ffffffffffffffffffffffffffffffffffffffff163102811515610d1957fe5b049250600454915083828403039050600081131515610d3757600080fd5b876000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154141515610d9a57600080fd5b610100604051908101604052808a81526020013373ffffffffffffffffffffffffffffffffffffffff1681526020013481526020018b8152602001602060405190810160405280600081525081526020016000815260200189815260200160001515815250965086600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003019080519060200190610ec99291906117ed565b506080820151816004019080519060200190610ee69291906117ed565b5060a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff0219169083151502179055509050503373ffffffffffffffffffffffffffffffffffffffff16897f4ead6f22ac4b1017882b5bb9f05325089a293747c0529c29df915e080ac3326d8d8d34604051808460ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610fa9578082015181840152602081019050610f8e565b50505050905090810190601f168015610fd65780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3876004600082825401925050819055505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561105d57600080fd5b6000600454823073ffffffffffffffffffffffffffffffffffffffff16310303131515611115577feaa8cb7c8218ecdd86fac0e3865d6681cec404c025161f64a01d66a8794ebe4d6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1611177565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561117657600080fd5b5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111d657600080fd5b8060028190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561126757600080fd5b80600560006101000a81548160ff021916908360ff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112e157600080fd5b60018060146101000a81548160ff021916908315150217905550565b600560009054906101000a900460ff1681565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003019080600401908060050154908060060154908060070160009054906101000a900460ff16905088565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ec57600080fd5b6000600160146101000a81548160ff021916908315150217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146457600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561150357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561159f57600080fd5b8060048190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561160557600080fd5b806000811115611650578273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561164f57600080fd5b5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116b157600080fd5b806000811115156116fe578273ffffffffffffffffffffffffffffffffffffffff166108fc60019081150290604051600060405180830381858888f1935050505015156116fd57600080fd5b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061174457805160ff1916838001178555611772565b82800160010185558215611772579182015b82811115611771578251825591602001919060010190611756565b5b50905061177f919061186d565b5090565b6101006040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016117c3611892565b81526020016117d0611892565b815260200160008152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061182e57805160ff191683800117855561185c565b8280016001018555821561185c579182015b8281111561185b578251825591602001919060010190611840565b5b509050611869919061186d565b5090565b61188f91905b8082111561188b576000816000905550600101611873565b5090565b90565b6020604051908101604052806000815250905600a165627a7a723058208a9f4458d940fb640e57bba853560d915d42e3a677f727a02d3aacc0aab22a120029
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing bytecode functions and security checks**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re, sys
[codex:152518] from pathlib import Path
[codex:152518] 
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] # extract hex after 0x
[codex:152518] m = re.search(r'0x[0-9a-fA-F]+', hexdata)
[codex:152518] hexstr = m.group(0)[2:]
[codex:152518] 
[codex:152518] # simple disassembler
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] # fill opcodes
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] 
[codex:152518] # push, dup, swap, log
[codex:152518] for i in range(1,33):
[codex:152518]     opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518]     opnames[0x7f+i]=f'DUP{i}'
[codex:152518]     opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518]     opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] code = bytes.fromhex(hexstr)
[codex:152518] 
[codex:152518] # disassemble around CALL, DELEGATECALL, SELFDESTRUCT
[codex:152518] interesting = {0xf1,0xf4,0xff,0xf2}
[codex:152518] 
[codex:152518] # build map of pc->(op, imm)
[codex:152518] ops = []
[codex:152518] pc=0
[codex:152518] while pc < len(code):
[codex:152518]     op = code[pc]
[codex:152518]     name = opnames.get(op, f'OP{op:02x}')
[codex:152518]     imm = None
[codex:152518]     pc0 = pc
[codex:152518]     pc += 1
[codex:152518]     if 0x60 <= op <= 0x7f: # PUSH
[codex:152518]         n = op - 0x5f
[codex:152518]         imm = code[pc:pc+n]
[codex:152518]         pc += n
[codex:152518]     ops.append((pc0, op, name, imm))
[codex:152518] 
[codex:152518] # find function boundaries by JUMPDEST after JUMPI maybe? not needed
[codex:152518] 
[codex:152518] print('CALL/DELEGATECALL/SELFDESTRUCT ops:')
[codex:152518] for pc,op,name,imm in ops:
[codex:152518]     if op in interesting:
[codex:152518]         # show previous few ops
[codex:152518]         idx = next(i for i,v in enumerate(ops) if v[0]==pc)
[codex:152518]         start = max(0, idx-10)
[codex:152518]         context = ops[start:idx+1]
[codex:152518]         print('--- pc', pc)
[codex:152518]         for p,o,n,im in context:
[codex:152518]             if im is None:
[codex:152518]                 print(f'{p:04x}: {n}')
[codex:152518]             else:
[codex:152518]                 print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] # also find SSTORE to low slots (0-10) maybe
[codex:152518] print('\\nSSTORE contexts for low slots (0-10):')
[codex:152518] low_slots=set(range(0,11))
[codex:152518] # naive: look for PUSH1 slot just before SSTORE with SWAP etc; we try to detect patterns
[codex:152518] for i,(pc,op,name,imm) in enumerate(ops):
[codex:152518]     if op==0x55: # SSTORE
[codex:152518]         # look back for immediate slot constant in last 5 ops
[codex:152518]         const=None
[codex:152518]         for j in range(1,6):
[codex:152518]             if i-j<0: break
[codex:152518]             p,o,n,im=ops[i-j]
[codex:152518]             if o==0x60 and im is not None: # PUSH1
[codex:152518]                 const = im[0]
[codex:152518]                 break
[codex:152518]         if const in low_slots:
[codex:152518]             print('pc',hex(pc),'slot maybe',const)
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 41ms:
[codex:152518] CALL/DELEGATECALL/SELFDESTRUCT ops:
[codex:152518] --- pc 4454
[codex:152518] 115a: PUSH1 0x00
[codex:152518] 115c: PUSH1 0x40
[codex:152518] 115e: MLOAD
[codex:152518] 115f: DUP1
[codex:152518] 1160: DUP4
[codex:152518] 1161: SUB
[codex:152518] 1162: DUP2
[codex:152518] 1163: DUP6
[codex:152518] 1164: DUP9
[codex:152518] 1165: DUP9
[codex:152518] 1166: CALL
[codex:152518] --- pc 5436
[codex:152518] 1508: SLOAD
[codex:152518] 1509: SWAP1
[codex:152518] 150a: PUSH2 0x0100
[codex:152518] 150d: EXP
[codex:152518] 150e: SWAP1
[codex:152518] 150f: DIV
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Investigating CALL operations for vulnerabilities**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] 
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] import re
[codex:152518] m = re.search(r'0x[0-9a-fA-F]+', hexdata)
[codex:152518] code = bytes.fromhex(m.group(0)[2:])
[codex:152518] 
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33):
[codex:152518]     opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518]     opnames[0x7f+i]=f'DUP{i}'
[codex:152518]     opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518]     opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]
[codex:152518] pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]
[codex:152518]     name=opnames.get(op,f'OP{op:02x}')
[codex:152518]     imm=None
[codex:152518]     pc0=pc
[codex:152518]     pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f
[codex:152518]         imm=code[pc:pc+n]
[codex:152518]         pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] # map pc->index
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518] 
[codex:152518] call_pcs=[pc for pc,op,_,_ in ops if op in (0xf1,0xf4,0xf2)]
[codex:152518] for pc in call_pcs:
[codex:152518]     idx=pc_to_idx[pc]
[codex:152518]     start=max(0, idx-25)
[codex:152518]     end=min(len(ops), idx+5)
[codex:152518]     print('\\n=== context for CALL at pc',hex(pc))
[codex:152518]     for p,o,n,im in ops[start:end]:
[codex:152518]         if im is None:
[codex:152518]             print(f'{p:04x}: {n}')
[codex:152518]         else:
[codex:152518]             print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 32ms:
[codex:152518] 
[codex:152518] === context for CALL at pc 0x1166
[codex:152518] 1120: SWAP1
[codex:152518] 1121: DIV
[codex:152518] 1122: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 1137: AND
[codex:152518] 1138: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 114d: AND
[codex:152518] 114e: PUSH2 0x08fc
[codex:152518] 1151: DUP3
[codex:152518] 1152: SWAP1
[codex:152518] 1153: DUP2
[codex:152518] 1154: ISZERO
[codex:152518] 1155: MUL
[codex:152518] 1156: SWAP1
[codex:152518] 1157: PUSH1 0x40
[codex:152518] 1159: MLOAD
[codex:152518] 115a: PUSH1 0x00
[codex:152518] 115c: PUSH1 0x40
[codex:152518] 115e: MLOAD
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing EVM call parameters and stack**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] 
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] code = bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33):
[codex:152518]     opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518]     opnames[0x7f+i]=f'DUP{i}'
[codex:152518]     opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518]     opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]
[codex:152518] pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]
[codex:152518]     name=opnames.get(op,f'OP{op:02x}')
[codex:152518]     imm=None
[codex:152518]     pc0=pc
[codex:152518]     pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f
[codex:152518]         imm=code[pc:pc+n]
[codex:152518]         pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518] 
[codex:152518] for target in [0x1166,0x163f,0x16ed]:
[codex:152518]     idx=pc_to_idx[target]
[codex:152518]     start=max(0, idx-60)
[codex:152518]     end=min(len(ops), idx+10)
[codex:152518]     print('\\n=== context for CALL at',hex(target))
[codex:152518]     for p,o,n,im in ops[start:end]:
[codex:152518]         if im is None:
[codex:152518]             print(f'{p:04x}: {n}')
[codex:152518]         else:
[codex:152518]             print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 33ms:
[codex:152518] 
[codex:152518] === context for CALL at 0x1166
[codex:152518] 10cd: DUP4
[codex:152518] 10ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 10e3: AND
[codex:152518] 10e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 10f9: AND
[codex:152518] 10fa: DUP2
[codex:152518] 10fb: MSTORE
[codex:152518] 10fc: PUSH1 0x20
[codex:152518] 10fe: ADD
[codex:152518] 10ff: DUP3
[codex:152518] 1100: DUP2
[codex:152518] 1101: MSTORE
[codex:152518] 1102: PUSH1 0x20
[codex:152518] 1104: ADD
[codex:152518] 1105: SWAP3
[codex:152518] 1106: POP
[codex:152518] 1107: POP
[codex:152518] 1108: POP
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing call and storage patterns**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] 
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] code = bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33):
[codex:152518]     opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518]     opnames[0x7f+i]=f'DUP{i}'
[codex:152518]     opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518]     opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]
[codex:152518] pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]
[codex:152518]     name=opnames.get(op,f'OP{op:02x}')
[codex:152518]     imm=None
[codex:152518]     pc0=pc
[codex:152518]     pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f
[codex:152518]         imm=code[pc:pc+n]
[codex:152518]         pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518] 
[codex:152518] sstore_pcs=[pc for pc,op,_,_ in ops if op==0x55]
[codex:152518] for target in [0x174c,0x1836]:
[codex:152518]     if target not in pc_to_idx:
[codex:152518]         print('missing',hex(target));
[codex:152518]         continue
[codex:152518]     idx=pc_to_idx[target]
[codex:152518]     start=max(0, idx-40)
[codex:152518]     end=min(len(ops), idx+6)
[codex:152518]     print('\\n=== context for SSTORE at',hex(target))
[codex:152518]     for p,o,n,im in ops[start:end]:
[codex:152518]         if im is None:
[codex:152518]             print(f'{p:04x}: {n}')
[codex:152518]         else:
[codex:152518]             print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 33ms:
[codex:152518] 
[codex:152518] === context for SSTORE at 0x174c
[codex:152518] 1718: SWAP1
[codex:152518] 1719: PUSH1 0x00
[codex:152518] 171b: MSTORE
[codex:152518] 171c: PUSH1 0x20
[codex:152518] 171e: PUSH1 0x00
[codex:152518] 1720: SHA3
[codex:152518] 1721: SWAP1
[codex:152518] 1722: PUSH1 0x1f
[codex:152518] 1724: ADD
[codex:152518] 1725: PUSH1 0x20
[codex:152518] 1727: SWAP1
[codex:152518] 1728: DIV
[codex:152518] 1729: DUP2
[codex:152518] 172a: ADD
[codex:152518] 172b: SWAP3
[codex:152518] 172c: DUP3
[codex:152518] 172d: PUSH1 0x1f
[codex:152518] 172f: LT
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing SSTORE writes to slot0**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] 
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames={i: name for i,name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518] 
[codex:152518] for target in [0xe5c,0x1882]:
[codex:152518]     if target not in pc_to_idx:
[codex:152518]         print('missing',hex(target)); continue
[codex:152518]     idx=pc_to_idx[target]
[codex:152518]     start=max(0, idx-40); end=min(len(ops), idx+8)
[codex:152518]     print('\\n=== context for SSTORE at',hex(target))
[codex:152518]     for p,o,n,im in ops[start:end]:
[codex:152518]         if im is None:
[codex:152518]             print(f'{p:04x}: {n}')
[codex:152518]         else:
[codex:152518]             print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 33ms:
[codex:152518] 
[codex:152518] === context for SSTORE at 0xe5c
[codex:152518] 0e01: POP
[codex:152518] 0e02: DUP7
[codex:152518] 0e03: PUSH1 0x06
[codex:152518] 0e05: PUSH1 0x00
[codex:152518] 0e07: CALLER
[codex:152518] 0e08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0e1d: AND
[codex:152518] 0e1e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0e33: AND
[codex:152518] 0e34: DUP2
[codex:152518] 0e35: MSTORE
[codex:152518] 0e36: PUSH1 0x20
[codex:152518] 0e38: ADD
[codex:152518] 0e39: SWAP1
[codex:152518] 0e3a: DUP2
[codex:152518] 0e3b: MSTORE
[codex:152518] 0e3c: PUSH1 0x20
[codex:152518] 0e3e: ADD
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing storage and function ownership**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] code = bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] # find jumpdest at 0x117a? Actually function body start 0x117a maybe pc.
[codex:152518] start=0x117a
[codex:152518] # print 80 ops from start
[codex:152518] for p,o,n,im in ops:
[codex:152518]     if p<start: continue
[codex:152518]     if p>start+120: break
[codex:152518]     if im is None:
[codex:152518]         print(f'{p:04x}: {n}')
[codex:152518]     else:
[codex:152518]         print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 30ms:
[codex:152518] 117a: JUMPDEST
[codex:152518] 117b: PUSH1 0x01
[codex:152518] 117d: PUSH1 0x00
[codex:152518] 117f: SWAP1
[codex:152518] 1180: SLOAD
[codex:152518] 1181: SWAP1
[codex:152518] 1182: PUSH2 0x0100
[codex:152518] 1185: EXP
[codex:152518] 1186: SWAP1
[codex:152518] 1187: DIV
[codex:152518] 1188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 119d: AND
[codex:152518] 119e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 11b3: AND
[codex:152518] 11b4: CALLER
[codex:152518] 11b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 11ca: AND
[codex:152518] 11cb: EQ
[codex:152518] 11cc: ISZERO
[codex:152518] 11cd: ISZERO
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing owner and withdrawal checks**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] # print from 0x0c9a to 0x1002
[codex:152518] start=0x0c9a; end=0x1002
[codex:152518] for p,o,n,im in ops:
[codex:152518]     if p<start: continue
[codex:152518]     if p>=end: break
[codex:152518]     if im is None:
[codex:152518]         print(f'{p:04x}: {n}')
[codex:152518]     else:
[codex:152518]         print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] 0c9a: JUMPDEST
[codex:152518] 0c9b: PUSH2 0x0ca2
[codex:152518] 0c9e: PUSH2 0x1783
[codex:152518] 0ca1: JUMP
[codex:152518] 0ca2: JUMPDEST
[codex:152518] 0ca3: PUSH1 0x01
[codex:152518] 0ca5: PUSH1 0x14
[codex:152518] 0ca7: SWAP1
[codex:152518] 0ca8: SLOAD
[codex:152518] 0ca9: SWAP1
[codex:152518] 0caa: PUSH2 0x0100
[codex:152518] 0cad: EXP
[codex:152518] 0cae: SWAP1
[codex:152518] 0caf: DIV
[codex:152518] 0cb0: PUSH1 0xff
[codex:152518] 0cb2: AND
[codex:152518] 0cb3: ISZERO
[codex:152518] 0cb4: ISZERO
[codex:152518] 0cb5: PUSH2 0x0cbd
[codex:152518] 0cb8: JUMPI
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing contract functions and permissions**
[codex:152518] 
[codex:152518] I'm dissecting key contract functions, focusing on which are owner-only versus user-accessible. I’m checking for withdrawal or call operations that could allow unauthorized fund access, verifying if only the owner can modify critical mappings or trigger external calls, and seeing if any vulnerable signature recovery or reentrancy risks exist. So far, no direct exploit paths are apparent, but I’m continuing to map out call addresses and function selectors to be sure.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] start=0x1500; end=0x1710
[codex:152518] for p,o,n,im in ops:
[codex:152518]     if p<start: continue
[codex:152518]     if p>=end: break
[codex:152518]     if im is None:
[codex:152518]         print(f'{p:04x}: {n}')
[codex:152518]     else:
[codex:152518]         print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] 1501: DUP1
[codex:152518] 1502: REVERT
[codex:152518] 1503: JUMPDEST
[codex:152518] 1504: PUSH1 0x00
[codex:152518] 1506: DUP1
[codex:152518] 1507: SWAP1
[codex:152518] 1508: SLOAD
[codex:152518] 1509: SWAP1
[codex:152518] 150a: PUSH2 0x0100
[codex:152518] 150d: EXP
[codex:152518] 150e: SWAP1
[codex:152518] 150f: DIV
[codex:152518] 1510: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 1525: AND
[codex:152518] 1526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 153b: AND
[codex:152518] 153c: SELFDESTRUCT
[codex:152518] 153d: JUMPDEST
[codex:152518] 153e: PUSH1 0x03
[codex:152518] 1540: SLOAD
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing internal function authorization checks**
[codex:152518] 
[codex:152518] I'm piecing together how internal functions at 0x15a9 and 0x1655 enforce caller authorization by comparing `msg.sender` to an address stored in slot1; this impacts which external functions can successfully invoke them depending on who owns or controls slot1. I'm double-checking the disassembly to clarify these permission dynamics and the relationships between owner, slot1, and function calls.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] start=0x075b; end=0x09a8
[codex:152518] for p,o,n,im in ops:
[codex:152518]     if p<start: continue
[codex:152518]     if p>=end: break
[codex:152518]     if im is None:
[codex:152518]         print(f'{p:04x}: {n}')
[codex:152518]     else:
[codex:152518]         print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 34ms:
[codex:152518] 075b: JUMPDEST
[codex:152518] 075c: PUSH1 0x00
[codex:152518] 075e: DUP1
[codex:152518] 075f: PUSH1 0x01
[codex:152518] 0761: PUSH1 0x00
[codex:152518] 0763: SWAP1
[codex:152518] 0764: SLOAD
[codex:152518] 0765: SWAP1
[codex:152518] 0766: PUSH2 0x0100
[codex:152518] 0769: EXP
[codex:152518] 076a: SWAP1
[codex:152518] 076b: DIV
[codex:152518] 076c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0781: AND
[codex:152518] 0782: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0797: AND
[codex:152518] 0798: CALLER
[codex:152518] 0799: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 07ae: AND
[codex:152518] 07af: EQ
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Analyzing privileged storage access and owner control**
[codex:152518] 
[codex:152518] I'm examining how the contract restricts key functions to the address in slot1, a privileged operator set only by the owner at slot0. I want to verify if slot0 or slot1 could be overwritten via storage collision or unprotected methods, so I'm planning a simple symbolic stack tracking to find direct storage writes (SSTORE) to these slots to confirm owner control safety and detect potential attack vectors.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames={}
[codex:152518] for i in range(1,33): opnames[0x5f+i]=('PUSH',i)
[codex:152518] for i in range(1,17): opnames[0x7f+i]=('DUP',i)
[codex:152518] for i in range(1,17): opnames[0x8f+i]=('SWAP',i)
[codex:152518] 
[codex:152518] # build op list
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; pc0=pc; pc+=1; imm=None
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=int.from_bytes(code[pc:pc+n],'big'); pc+=n
[codex:152518]     ops.append((pc0,op,imm))
[codex:152518] 
[codex:152518] # simple stack constants tracking
[codex:152518] stack=[]
[codex:152518] const_stores=[]
[codex:152518] for pc,op,imm in ops:
[codex:152518]     if op in opnames:
[codex:152518]         kind,arg=opnames[op]
[codex:152518]         if kind=='PUSH':
[codex:152518]             stack.append(imm)
[codex:152518]         elif kind=='DUP':
[codex:152518]             if len(stack)>=arg:
[codex:152518]                 stack.append(stack[-arg])
[codex:152518]             else:
[codex:152518]                 stack.append(None)
[codex:152518]         elif kind=='SWAP':
[codex:152518]             if len(stack)>arg:
[codex:152518]                 stack[-1],stack[-1-arg]=stack[-1-arg],stack[-1]
[codex:152518]     else:
[codex:152518]         if op==0x50: # POP
[codex:152518]             if stack: stack.pop()
[codex:152518]         elif op==0x54: # SLOAD
[codex:152518]             # pop key, push unknown value
[codex:152518]             if stack: stack.pop()
[codex:152518]             stack.append(None)
[codex:152518]         elif op==0x55: # SSTORE
[codex:152518]             # pops key and value (value top?) Actually SSTORE: key, value (top is value). Stack top: value; below: key.
[codex:152518]             if len(stack)>=2:
[codex:152518]                 value=stack.pop(); key=stack.pop()
[codex:152518]             else:
[codex:152518]                 key=value=None
[codex:152518]             if isinstance(key,int):
[codex:152518]                 const_stores.append((pc,key))
[codex:152518]         elif op in (0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x20):
[codex:152518]             # arithmetic/logical: pop operands push unknown or constant if possible
[codex:152518]             # for simplicity, mark unknown
[codex:152518]             # determine arity: most binary except ISZERO, NOT etc
[codex:152518]             if op in (0x15,0x19): # ISZERO, NOT unary
[codex:152518]                 if stack: stack.pop()
[codex:152518]                 stack.append(None)
[codex:152518]             elif op==0x1a: # BYTE
[codex:152518]                 if len(stack)>=2:
[codex:152518]                     stack.pop(); stack.pop(); stack.append(None)
[codex:152518]                 else:
[codex:152518]                     stack.clear(); stack.append(None)
[codex:152518]             else:
[codex:152518]                 if len(stack)>=2:
[codex:152518]                     stack.pop(); stack.pop(); stack.append(None)
[codex:152518]                 else:
[codex:152518]                     stack.clear(); stack.append(None)
[codex:152518]         elif op in (0x56,0x57,0x5b,0x58,0x59,0x5a,0xf1,0xf2,0xf4,0xf0,0xf5,0xf3,0xfd,0xfe):
[codex:152518]             # control flow / calls: we won't simulate effects precisely
[codex:152518]             if op in (0xf1,0xf2,0xf4):
[codex:152518]                 # CALL: pop 7 args push 1
[codex:152518]                 if len(stack)>=7:
[codex:152518]                     for _ in range(7): stack.pop()
[codex:152518]                 else:
[codex:152518]                     stack.clear()
[codex:152518]                 stack.append(None)
[codex:152518]             elif op in (0x56,0x57):
[codex:152518]                 # JUMP/JUMPI pop destination (and condition)
[codex:152518]                 if op==0x56 and stack: stack.pop()
[codex:152518]                 if op==0x57:
[codex:152518]                     if len(stack)>=2:
[codex:152518]                         stack.pop(); stack.pop()
[codex:152518]                     elif stack: stack.pop();
[codex:152518]                 # unclear flow; reset stack
[codex:152518]                 # skip resetting to not lose all info
[codex:152518]             elif op in (0xf3,0xfd):
[codex:152518]                 # RETURN/REVERT pop 2
[codex:152518]                 if len(stack)>=2:
[codex:152518]                     stack.pop(); stack.pop()
[codex:152518]                 else:
[codex:152518]                     stack.clear()
[codex:152518]             else:
[codex:152518]                 pass
[codex:152518]         elif op in (0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48):
[codex:152518]             stack.append(None)
[codex:152518]         elif 0xa0<=op<=0xa4:
[codex:152518]             # LOG op: pop (2+topic count)
[codex:152518]             topics=op-0xa0
[codex:152518]             count=2+topics
[codex:152518]             if len(stack)>=count:
[codex:152518]                 for _ in range(count): stack.pop()
[codex:152518]             else:
[codex:152518]                 stack.clear()
[codex:152518]         else:
[codex:152518]             # unknown, reset stack to avoid false positives
[codex:152518]             pass
[codex:152518] 
[codex:152518] # show const stores
[codex:152518] print('Constant-key SSTOREs:')
[codex:152518] for pc,key in const_stores:
[codex:152518]     if key<=20:
[codex:152518]         print(hex(pc), 'slot', key)
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] Constant-key SSTOREs:
[codex:152518] 0x1882 slot 0
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Evaluating contract storage and access control**
[codex:152518] 
[codex:152518] I’m analyzing contract storage writes and access control to see if unauthorized users can withdraw value. Although naive stack tracking shows only a constant write at slot0, manual checks show owner-only writes to several slots. I’m particularly focused on slot1 (operator) controlling payout calls and verifying if setting slot1 is properly restricted to prevent unauthorized payouts. Next, I’ll disassemble at 0x1409 to confirm owner-only access for the operator-setting function.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518] 
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({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:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({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:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({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:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518] 
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518]     op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518]     if 0x60<=op<=0x7f:
[codex:152518]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518]     ops.append((pc0,op,name,imm))
[codex:152518] 
[codex:152518] start=0x1390; end=0x1460
[codex:152518] for p,o,n,im in ops:
[codex:152518]     if p<start: continue
[codex:152518]     if p>=end: break
[codex:152518]     if im is None:
[codex:152518]         print(f'{p:04x}: {n}')
[codex:152518]     else:
[codex:152518]         print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518] 
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] 1390: JUMPDEST
[codex:152518] 1391: PUSH1 0x01
[codex:152518] 1393: PUSH1 0x00
[codex:152518] 1395: SWAP1
[codex:152518] 1396: SLOAD
[codex:152518] 1397: SWAP1
[codex:152518] 1398: PUSH2 0x0100
[codex:152518] 139b: EXP
[codex:152518] 139c: SWAP1
[codex:152518] 139d: DIV
[codex:152518] 139e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 13b3: AND
[codex:152518] 13b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 13c9: AND
[codex:152518] 13ca: CALLER
[codex:152518] 13cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 13e0: AND
[codex:152518] 13e1: EQ
[codex:152518] 13e2: ISZERO
[codex:152518] 13e3: ISZERO
[codex:152518] 
[codex:152518] thinking
[codex:152518] **Verifying absence of exploitable CALLs**
[codex:152518] codex
[codex:152518] {"no_findings":true,"summary":"Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.","findings":[]}
[codex:152518] tokens used
[codex:152518] 80,386
[codex:152518] {"no_findings":true,"summary":"Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-05T02:23:13.126753+00:00",
        "returncode": 0
    },
    "summary": "Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.",
    "raw_final": {
        "summary": "Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
1
CREATE2
0
CALL-family (heavy)
3
EXT*/BALANCE
2
Total opcodes
3362
Flags
selfdestruct_present
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0110
0000000a: JUMPI
0000000b: PUSH1 0x00
0000000d: CALLDATALOAD
0000000e: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0000002c: SWAP1
0000002d: DIV
0000002e: PUSH4 0xffffffff
00000033: AND
00000034: DUP1
00000035: PUSH4 0x04ed00ac
0000003a: EQ
0000003b: PUSH2 0x016d
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0x18fd8903
00000045: EQ
00000046: PUSH2 0x0196
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0x22f3e2d4
00000050: EQ
00000051: PUSH2 0x01f9
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0x56b4997f
0000005b: EQ
0000005c: PUSH2 0x0226
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0x570ca735
00000066: EQ
00000067: PUSH2 0x0249
0000006a: JUMPI
0000006b: DUP1
0000006c: PUSH4 0x57402227
00000071: EQ
00000072: PUSH2 0x029e
00000075: JUMPI
00000076: DUP1
00000077: PUSH4 0x609c9c71
0000007c: EQ
0000007d: PUSH2 0x034d
00000080: JUMPI
00000081: DUP1
00000082: PUSH4 0x87c1ed12
00000087: EQ
00000088: PUSH2 0x03bd
0000008b: JUMPI
0000008c: DUP1
0000008d: PUSH4 0x88ea41b9
00000092: EQ
00000093: PUSH2 0x03e0
00000096: JUMPI
00000097: DUP1
00000098: PUSH4 0x8da5cb5b
0000009d: EQ
0000009e: PUSH2 0x0403
000000a1: JUMPI
000000a2: DUP1
000000a3: PUSH4 0x9619367d
000000a8: EQ
000000a9: PUSH2 0x0458
000000ac: JUMPI
000000ad: DUP1
000000ae: PUSH4 0xa4de306b
000000b3: EQ
000000b4: PUSH2 0x0481
000000b7: JUMPI
000000b8: DUP1
000000b9: PUSH4 0xa87783ba
000000be: EQ
000000bf: PUSH2 0x04a7
000000c2: JUMPI
000000c3: DUP1
000000c4: PUSH4 0xaaae0284
000000c9: EQ
000000ca: PUSH2 0x04bc
000000cd: JUMPI
000000ce: DUP1
000000cf: PUSH4 0xab6b1f68
000000d4: EQ
000000d5: PUSH2 0x04eb
000000d8: JUMPI
000000d9: DUP1
000000da: PUSH4 0xb139b032
000000df: EQ
000000e0: PUSH2 0x06a6
000000e3: JUMPI
000000e4: DUP1
000000e5: PUSH4 0xb3ab15fb
000000ea: EQ
000000eb: PUSH2 0x06bb
000000ee: JUMPI
000000ef: DUP1
000000f0: PUSH4 0xd263b7eb
000000f5: EQ
000000f6: PUSH2 0x06f4
000000f9: JUMPI
000000fa: DUP1
000000fb: PUSH4 0xe0176de8
00000100: EQ
00000101: PUSH2 0x0709
00000104: JUMPI
00000105: DUP1
00000106: PUSH4 0xefd5913a
0000010b: EQ
0000010c: PUSH2 0x0732
0000010f: JUMPI
00000110: JUMPDEST
00000111: PUSH1 0x00
00000113: DUP1
00000114: SWAP1
00000115: SLOAD
00000116: SWAP1
00000117: PUSH2 0x0100
0000011a: EXP
0000011b: SWAP1
0000011c: DIV
0000011d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000132: AND
00000133: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000148: AND
00000149: CALLER
0000014a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000015f: AND
00000160: EQ
00000161: ISZERO
00000162: ISZERO
00000163: PUSH2 0x016b
00000166: JUMPI
00000167: PUSH1 0x00
00000169: DUP1
0000016a: REVERT
0000016b: JUMPDEST
0000016c: STOP
0000016d: JUMPDEST
0000016e: CALLVALUE
0000016f: ISZERO
00000170: PUSH2 0x0178
00000173: JUMPI
00000174: PUSH1 0x00
00000176: DUP1
00000177: REVERT
00000178: JUMPDEST
00000179: PUSH2 0x0180
0000017c: PUSH2 0x0755
0000017f: JUMP
00000180: JUMPDEST
00000181: PUSH1 0x40
00000183: MLOAD
00000184: DUP1
00000185: DUP3
00000186: DUP2
00000187: MSTORE
00000188: PUSH1 0x20
0000018a: ADD
0000018b: SWAP2
0000018c: POP
0000018d: POP
0000018e: PUSH1 0x40
00000190: MLOAD
00000191: DUP1
00000192: SWAP2
00000193: SUB
00000194: SWAP1
00000195: RETURN
00000196: JUMPDEST
00000197: CALLVALUE
00000198: ISZERO
00000199: PUSH2 0x01a1
0000019c: JUMPI
0000019d: PUSH1 0x00
0000019f: DUP1
000001a0: REVERT
000001a1: JUMPDEST
000001a2: PUSH2 0x01df
000001a5: PUSH1 0x04
000001a7: DUP1
000001a8: DUP1
000001a9: CALLDATALOAD
000001aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001bf: AND
000001c0: SWAP1
000001c1: PUSH1 0x20
000001c3: ADD
000001c4: SWAP1
000001c5: SWAP2
000001c6: SWAP1
000001c7: DUP1
000001c8: CALLDATALOAD
000001c9: SWAP1
000001ca: PUSH1 0x20
000001cc: ADD
000001cd: SWAP1
000001ce: SWAP2
000001cf: SWAP1
000001d0: DUP1
000001d1: CALLDATALOAD
000001d2: SWAP1
000001d3: PUSH1 0x20
000001d5: ADD
000001d6: SWAP1
000001d7: SWAP2
000001d8: SWAP1
000001d9: POP
000001da: POP
000001db: PUSH2 0x075b
000001de: JUMP
000001df: JUMPDEST
000001e0: PUSH1 0x40
000001e2: MLOAD
000001e3: DUP1
000001e4: DUP3
000001e5: ISZERO
000001e6: ISZERO
000001e7: ISZERO
000001e8: ISZERO
000001e9: DUP2
000001ea: MSTORE
000001eb: PUSH1 0x20
000001ed: ADD
000001ee: SWAP2
000001ef: POP
000001f0: POP
000001f1: PUSH1 0x40
000001f3: MLOAD
000001f4: DUP1
000001f5: SWAP2
000001f6: SUB
000001f7: SWAP1
000001f8: RETURN
000001f9: JUMPDEST
000001fa: CALLVALUE
000001fb: ISZERO
000001fc: PUSH2 0x0204
000001ff: JUMPI
00000200: PUSH1 0x00
00000202: DUP1
00000203: REVERT
00000204: JUMPDEST
00000205: PUSH2 0x020c
00000208: PUSH2 0x09a8
0000020b: JUMP
0000020c: JUMPDEST
0000020d: PUSH1 0x40
0000020f: MLOAD
00000210: DUP1
00000211: DUP3
00000212: ISZERO
00000213: ISZERO
00000214: ISZERO
00000215: ISZERO
00000216: DUP2
00000217: MSTORE
00000218: PUSH1 0x20
0000021a: ADD
0000021b: SWAP2
0000021c: POP
0000021d: POP
0000021e: PUSH1 0x40
00000220: MLOAD
00000221: DUP1
00000222: SWAP2
00000223: SUB
00000224: SWAP1
00000225: RETURN
00000226: JUMPDEST
00000227: CALLVALUE
00000228: ISZERO
00000229: PUSH2 0x0231
0000022c: JUMPI
0000022d: PUSH1 0x00
0000022f: DUP1
00000230: REVERT
00000231: JUMPDEST
00000232: PUSH2 0x0247
00000235: PUSH1 0x04
00000237: DUP1
00000238: DUP1
00000239: CALLDATALOAD
0000023a: SWAP1
0000023b: PUSH1 0x20
0000023d: ADD
0000023e: SWAP1
0000023f: SWAP2
00000240: SWAP1
00000241: POP
00000242: POP
00000243: PUSH2 0x09bb
00000246: JUMP
00000247: JUMPDEST
00000248: STOP
00000249: JUMPDEST
0000024a: CALLVALUE
0000024b: ISZERO
0000024c: PUSH2 0x0254
0000024f: JUMPI
00000250: PUSH1 0x00
00000252: DUP1
00000253: REVERT
00000254: JUMPDEST
00000255: PUSH2 0x025c
00000258: PUSH2 0x0a21
0000025b: JUMP
0000025c: JUMPDEST
0000025d: PUSH1 0x40
0000025f: MLOAD
00000260: DUP1
00000261: DUP3
00000262: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000277: AND
00000278: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000028d: AND
0000028e: DUP2
0000028f: MSTORE
00000290: PUSH1 0x20
00000292: ADD
00000293: SWAP2
00000294: POP
00000295: POP
00000296: PUSH1 0x40
00000298: MLOAD
00000299: DUP1
0000029a: SWAP2
0000029b: SUB
0000029c: SWAP1
0000029d: RETURN
0000029e: JUMPDEST
0000029f: CALLVALUE
000002a0: ISZERO
000002a1: PUSH2 0x02a9
000002a4: JUMPI
000002a5: PUSH1 0x00
000002a7: DUP1
000002a8: REVERT
000002a9: JUMPDEST
000002aa: PUSH2 0x0333
000002ad: PUSH1 0x04
000002af: DUP1
000002b0: DUP1
000002b1: CALLDATALOAD
000002b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002c7: AND
000002c8: SWAP1
000002c9: PUSH1 0x20
000002cb: ADD
000002cc: SWAP1
000002cd: SWAP2
000002ce: SWAP1
000002cf: DUP1
000002d0: CALLDATALOAD
000002d1: SWAP1
000002d2: PUSH1 0x20
000002d4: ADD
000002d5: SWAP1
000002d6: SWAP2
000002d7: SWAP1
000002d8: DUP1
000002d9: CALLDATALOAD
000002da: SWAP1
000002db: PUSH1 0x20
000002dd: ADD
000002de: SWAP1
000002df: SWAP2
000002e0: SWAP1
000002e1: DUP1
000002e2: CALLDATALOAD
000002e3: SWAP1
000002e4: PUSH1 0x20
000002e6: ADD
000002e7: SWAP1
000002e8: DUP3
000002e9: ADD
000002ea: DUP1
000002eb: CALLDATALOAD
000002ec: SWAP1
000002ed: PUSH1 0x20
000002ef: ADD
000002f0: SWAP1
000002f1: DUP1
000002f2: DUP1
000002f3: PUSH1 0x1f
000002f5: ADD
000002f6: PUSH1 0x20
000002f8: DUP1
000002f9: SWAP2
000002fa: DIV
000002fb: MUL
000002fc: PUSH1 0x20
000002fe: ADD
000002ff: PUSH1 0x40
00000301: MLOAD
00000302: SWAP1
00000303: DUP2
00000304: ADD
00000305: PUSH1 0x40
00000307: MSTORE
00000308: DUP1
00000309: SWAP4
0000030a: SWAP3
0000030b: SWAP2
0000030c: SWAP1
0000030d: DUP2
0000030e: DUP2
0000030f: MSTORE
00000310: PUSH1 0x20
00000312: ADD
00000313: DUP4
00000314: DUP4
00000315: DUP1
00000316: DUP3
00000317: DUP5
00000318: CALLDATACOPY
00000319: DUP3
0000031a: ADD
0000031b: SWAP2
0000031c: POP
0000031d: POP
0000031e: POP
0000031f: POP
00000320: POP
00000321: POP
00000322: SWAP2
00000323: SWAP1
00000324: DUP1
00000325: CALLDATALOAD
00000326: SWAP1
00000327: PUSH1 0x20
00000329: ADD
0000032a: SWAP1
0000032b: SWAP2
0000032c: SWAP1
0000032d: POP
0000032e: POP
0000032f: PUSH2 0x0a47
00000332: JUMP
00000333: JUMPDEST
00000334: PUSH1 0x40
00000336: MLOAD
00000337: DUP1
00000338: DUP3
00000339: ISZERO
0000033a: ISZERO
0000033b: ISZERO
0000033c: ISZERO
0000033d: DUP2
0000033e: MSTORE
0000033f: PUSH1 0x20
00000341: ADD
00000342: SWAP2
00000343: POP
00000344: POP
00000345: PUSH1 0x40
00000347: MLOAD
00000348: DUP1
00000349: SWAP2
0000034a: SUB
0000034b: SWAP1
0000034c: RETURN
0000034d: JUMPDEST
0000034e: PUSH2 0x03bb
00000351: PUSH1 0x04
00000353: DUP1
00000354: DUP1
00000355: CALLDATALOAD
00000356: PUSH1 0xff
00000358: AND
00000359: SWAP1
0000035a: PUSH1 0x20
0000035c: ADD
0000035d: SWAP1
0000035e: SWAP2
0000035f: SWAP1
00000360: DUP1
00000361: CALLDATALOAD
00000362: SWAP1
00000363: PUSH1 0x20
00000365: ADD
00000366: SWAP1
00000367: DUP3
00000368: ADD
00000369: DUP1
0000036a: CALLDATALOAD
0000036b: SWAP1
0000036c: PUSH1 0x20
0000036e: ADD
0000036f: SWAP1
00000370: DUP1
00000371: DUP1
00000372: PUSH1 0x1f
00000374: ADD
00000375: PUSH1 0x20
00000377: DUP1
00000378: SWAP2
00000379: DIV
0000037a: MUL
0000037b: PUSH1 0x20
0000037d: ADD
0000037e: PUSH1 0x40
00000380: MLOAD
00000381: SWAP1
00000382: DUP2
00000383: ADD
00000384: PUSH1 0x40
00000386: MSTORE
00000387: DUP1
00000388: SWAP4
00000389: SWAP3
0000038a: SWAP2
0000038b: SWAP1
0000038c: DUP2
0000038d: DUP2
0000038e: MSTORE
0000038f: PUSH1 0x20
00000391: ADD
00000392: DUP4
00000393: DUP4
00000394: DUP1
00000395: DUP3
00000396: DUP5
00000397: CALLDATACOPY
00000398: DUP3
00000399: ADD
0000039a: SWAP2
0000039b: POP
0000039c: POP
0000039d: POP
0000039e: POP
0000039f: POP
000003a0: POP
000003a1: SWAP2
000003a2: SWAP1
000003a3: DUP1
000003a4: CALLDATALOAD
000003a5: SWAP1
000003a6: PUSH1 0x20
000003a8: ADD
000003a9: SWAP1
000003aa: SWAP2
000003ab: SWAP1
000003ac: DUP1
000003ad: CALLDATALOAD
000003ae: SWAP1
000003af: PUSH1 0x20
000003b1: ADD
000003b2: SWAP1
000003b3: SWAP2
000003b4: SWAP1
000003b5: POP
000003b6: POP
000003b7: PUSH2 0x0c9a
000003ba: JUMP
000003bb: JUMPDEST
000003bc: STOP
000003bd: JUMPDEST
000003be: CALLVALUE
000003bf: ISZERO
000003c0: PUSH2 0x03c8
000003c3: JUMPI
000003c4: PUSH1 0x00
000003c6: DUP1
000003c7: REVERT
000003c8: JUMPDEST
000003c9: PUSH2 0x03de
000003cc: PUSH1 0x04
000003ce: DUP1
000003cf: DUP1
000003d0: CALLDATALOAD
000003d1: SWAP1
000003d2: PUSH1 0x20
000003d4: ADD
000003d5: SWAP1
000003d6: SWAP2
000003d7: SWAP1
000003d8: POP
000003d9: POP
000003da: PUSH2 0x1002
000003dd: JUMP
000003de: JUMPDEST
000003df: STOP
000003e0: JUMPDEST
000003e1: CALLVALUE
000003e2: ISZERO
000003e3: PUSH2 0x03eb
000003e6: JUMPI
000003e7: PUSH1 0x00
000003e9: DUP1
000003ea: REVERT
000003eb: JUMPDEST
000003ec: PUSH2 0x0401
000003ef: PUSH1 0x04
000003f1: DUP1
000003f2: DUP1
000003f3: CALLDATALOAD
000003f4: SWAP1
000003f5: PUSH1 0x20
000003f7: ADD
000003f8: SWAP1
000003f9: SWAP2
000003fa: SWAP1
000003fb: POP
000003fc: POP
000003fd: PUSH2 0x117a
00000400: JUMP
00000401: JUMPDEST
00000402: STOP
00000403: JUMPDEST
00000404: CALLVALUE
00000405: ISZERO
00000406: PUSH2 0x040e
00000409: JUMPI
0000040a: PUSH1 0x00
0000040c: DUP1
0000040d: REVERT
0000040e: JUMPDEST
0000040f: PUSH2 0x0416
00000412: PUSH2 0x11e0
00000415: JUMP
00000416: JUMPDEST
00000417: PUSH1 0x40
00000419: MLOAD
0000041a: DUP1
0000041b: DUP3
0000041c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000431: AND
00000432: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000447: AND
00000448: DUP2
00000449: MSTORE
0000044a: PUSH1 0x20
0000044c: ADD
0000044d: SWAP2
0000044e: POP
0000044f: POP
00000450: PUSH1 0x40
00000452: MLOAD
00000453: DUP1
00000454: SWAP2
00000455: SUB
00000456: SWAP1
00000457: RETURN
00000458: JUMPDEST
00000459: CALLVALUE
0000045a: ISZERO
0000045b: PUSH2 0x0463
0000045e: JUMPI
0000045f: PUSH1 0x00
00000461: DUP1
00000462: REVERT
00000463: JUMPDEST
00000464: PUSH2 0x046b
00000467: PUSH2 0x1205
0000046a: JUMP
0000046b: JUMPDEST
0000046c: PUSH1 0x40
0000046e: MLOAD
0000046f: DUP1
00000470: DUP3
00000471: DUP2
00000472: MSTORE
00000473: PUSH1 0x20
00000475: ADD
00000476: SWAP2
00000477: POP
00000478: POP
00000479: PUSH1 0x40
0000047b: MLOAD
0000047c: DUP1
0000047d: SWAP2
0000047e: SUB
0000047f: SWAP1
00000480: RETURN
00000481: JUMPDEST
00000482: CALLVALUE
00000483: ISZERO
00000484: PUSH2 0x048c
00000487: JUMPI
00000488: PUSH1 0x00
0000048a: DUP1
0000048b: REVERT
0000048c: JUMPDEST
0000048d: PUSH2 0x04a5
00000490: PUSH1 0x04
00000492: DUP1
00000493: DUP1
00000494: CALLDATALOAD
00000495: PUSH1 0xff
00000497: AND
00000498: SWAP1
00000499: PUSH1 0x20
0000049b: ADD
0000049c: SWAP1
0000049d: SWAP2
0000049e: SWAP1
0000049f: POP
000004a0: POP
000004a1: PUSH2 0x120b
000004a4: JUMP
000004a5: JUMPDEST
000004a6: STOP
000004a7: JUMPDEST
000004a8: CALLVALUE
000004a9: ISZERO
000004aa: PUSH2 0x04b2
000004ad: JUMPI
000004ae: PUSH1 0x00
000004b0: DUP1
000004b1: REVERT
000004b2: JUMPDEST
000004b3: PUSH2 0x04ba
000004b6: PUSH2 0x1285
000004b9: JUMP
000004ba: JUMPDEST
000004bb: STOP
000004bc: JUMPDEST
000004bd: CALLVALUE
000004be: ISZERO
000004bf: PUSH2 0x04c7
000004c2: JUMPI
000004c3: PUSH1 0x00
000004c5: DUP1
000004c6: REVERT
000004c7: JUMPDEST
000004c8: PUSH2 0x04cf
000004cb: PUSH2 0x12fd
000004ce: JUMP
000004cf: JUMPDEST
000004d0: PUSH1 0x40
000004d2: MLOAD
000004d3: DUP1
000004d4: DUP3
000004d5: PUSH1 0xff
000004d7: AND
000004d8: PUSH1 0xff
000004da: AND
000004db: DUP2
000004dc: MSTORE
000004dd: PUSH1 0x20
000004df: ADD
000004e0: SWAP2
000004e1: POP
000004e2: POP
000004e3: PUSH1 0x40
000004e5: MLOAD
000004e6: DUP1
000004e7: SWAP2
000004e8: SUB
000004e9: SWAP1
000004ea: RETURN
000004eb: JUMPDEST
000004ec: CALLVALUE
000004ed: ISZERO
000004ee: PUSH2 0x04f6
000004f1: JUMPI
000004f2: PUSH1 0x00
000004f4: DUP1
000004f5: REVERT
000004f6: JUMPDEST
000004f7: PUSH2 0x052b
000004fa: PUSH1 0x04
000004fc: DUP1
000004fd: DUP1
000004fe: CALLDATALOAD
000004ff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000514: AND
00000515: SWAP1
00000516: PUSH1 0x20
00000518: ADD
00000519: SWAP1
0000051a: SWAP2
0000051b: SWAP1
0000051c: DUP1
0000051d: CALLDATALOAD
0000051e: SWAP1
0000051f: PUSH1 0x20
00000521: ADD
00000522: SWAP1
00000523: SWAP2
00000524: SWAP1
00000525: POP
00000526: POP
00000527: PUSH2 0x1310
0000052a: JUMP
0000052b: JUMPDEST
0000052c: PUSH1 0x40
0000052e: MLOAD
0000052f: DUP1
00000530: DUP10
00000531: DUP2
00000532: MSTORE
00000533: PUSH1 0x20
00000535: ADD
00000536: DUP9
00000537: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000054c: AND
0000054d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000562: AND
00000563: DUP2
00000564: MSTORE
00000565: PUSH1 0x20
00000567: ADD
00000568: DUP8
00000569: DUP2
0000056a: MSTORE
0000056b: PUSH1 0x20
0000056d: ADD
0000056e: DUP1
0000056f: PUSH1 0x20
00000571: ADD
00000572: DUP1
00000573: PUSH1 0x20
00000575: ADD
00000576: DUP7
00000577: DUP2
00000578: MSTORE
00000579: PUSH1 0x20
0000057b: ADD
0000057c: DUP6
0000057d: DUP2
0000057e: MSTORE
0000057f: PUSH1 0x20
00000581: ADD
00000582: DUP5
00000583: ISZERO
00000584: ISZERO
00000585: ISZERO
00000586: ISZERO
00000587: DUP2
00000588: MSTORE
00000589: PUSH1 0x20
0000058b: ADD
0000058c: DUP4
0000058d: DUP2
0000058e: SUB
0000058f: DUP4
00000590: MSTORE
00000591: DUP9
00000592: DUP2
00000593: DUP2
00000594: SLOAD
00000595: PUSH1 0x01
00000597: DUP2
00000598: PUSH1 0x01
0000059a: AND
0000059b: ISZERO
0000059c: PUSH2 0x0100
0000059f: MUL
000005a0: SUB
000005a1: AND
000005a2: PUSH1 0x02
000005a4: SWAP1
000005a5: DIV
000005a6: DUP2
000005a7: MSTORE
000005a8: PUSH1 0x20
000005aa: ADD
000005ab: SWAP2
000005ac: POP
000005ad: DUP1
000005ae: SLOAD
000005af: PUSH1 0x01
000005b1: DUP2
000005b2: PUSH1 0x01
000005b4: AND
000005b5: ISZERO
000005b6: PUSH2 0x0100
000005b9: MUL
000005ba: SUB
000005bb: AND
000005bc: PUSH1 0x02
000005be: SWAP1
000005bf: DIV
000005c0: DUP1
000005c1: ISZERO
000005c2: PUSH2 0x060c
000005c5: JUMPI
000005c6: DUP1
000005c7: PUSH1 0x1f
000005c9: LT
000005ca: PUSH2 0x05e1
000005cd: JUMPI
000005ce: PUSH2 0x0100
000005d1: DUP1
000005d2: DUP4
000005d3: SLOAD
000005d4: DIV
000005d5: MUL
000005d6: DUP4
000005d7: MSTORE
000005d8: SWAP2
000005d9: PUSH1 0x20
000005db: ADD
000005dc: SWAP2
000005dd: PUSH2 0x060c
000005e0: JUMP
000005e1: JUMPDEST
000005e2: DUP3
000005e3: ADD
000005e4: SWAP2
000005e5: SWAP1
000005e6: PUSH1 0x00
000005e8: MSTORE
000005e9: PUSH1 0x20
000005eb: PUSH1 0x00
000005ed: KECCAK256
000005ee: SWAP1
000005ef: JUMPDEST
000005f0: DUP2
000005f1: SLOAD
000005f2: DUP2
000005f3: MSTORE
000005f4: SWAP1
000005f5: PUSH1 0x01
000005f7: ADD
000005f8: SWAP1
000005f9: PUSH1 0x20
000005fb: ADD
000005fc: DUP1
000005fd: DUP4
000005fe: GT
000005ff: PUSH2 0x05ef
00000602: JUMPI
00000603: DUP3
00000604: SWAP1
00000605: SUB
00000606: PUSH1 0x1f
00000608: AND
00000609: DUP3
0000060a: ADD
0000060b: SWAP2
0000060c: JUMPDEST
0000060d: POP
0000060e: POP
0000060f: DUP4
00000610: DUP2
00000611: SUB
00000612: DUP3
00000613: MSTORE
00000614: DUP8
00000615: DUP2
00000616: DUP2
00000617: SLOAD
00000618: PUSH1 0x01
0000061a: DUP2
0000061b: PUSH1 0x01
0000061d: AND
0000061e: ISZERO
0000061f: PUSH2 0x0100
00000622: MUL
00000623: SUB
00000624: AND
00000625: PUSH1 0x02
00000627: SWAP1
00000628: DIV
00000629: DUP2
0000062a: MSTORE
0000062b: PUSH1 0x20
0000062d: ADD
0000062e: SWAP2
0000062f: POP
00000630: DUP1
00000631: SLOAD
00000632: PUSH1 0x01
00000634: DUP2
00000635: PUSH1 0x01
00000637: AND
00000638: ISZERO
00000639: PUSH2 0x0100
0000063c: MUL
0000063d: SUB
0000063e: AND
0000063f: PUSH1 0x02
00000641: SWAP1
00000642: DIV
00000643: DUP1
00000644: ISZERO
00000645: PUSH2 0x068f
00000648: JUMPI
00000649: DUP1
0000064a: PUSH1 0x1f
0000064c: LT
0000064d: PUSH2 0x0664
00000650: JUMPI
00000651: PUSH2 0x0100
00000654: DUP1
00000655: DUP4
00000656: SLOAD
00000657: DIV
00000658: MUL
00000659: DUP4
0000065a: MSTORE
0000065b: SWAP2
0000065c: PUSH1 0x20
0000065e: ADD
0000065f: SWAP2
00000660: PUSH2 0x068f
00000663: JUMP
00000664: JUMPDEST
00000665: DUP3
00000666: ADD
00000667: SWAP2
00000668: SWAP1
00000669: PUSH1 0x00
0000066b: MSTORE
0000066c: PUSH1 0x20
0000066e: PUSH1 0x00
00000670: KECCAK256
00000671: SWAP1
00000672: JUMPDEST
00000673: DUP2
00000674: SLOAD
00000675: DUP2
00000676: MSTORE
00000677: SWAP1
00000678: PUSH1 0x01
0000067a: ADD
0000067b: SWAP1
0000067c: PUSH1 0x20
0000067e: ADD
0000067f: DUP1
00000680: DUP4
00000681: GT
00000682: PUSH2 0x0672
00000685: JUMPI
00000686: DUP3
00000687: SWAP1
00000688: SUB
00000689: PUSH1 0x1f
0000068b: AND
0000068c: DUP3
0000068d: ADD
0000068e: SWAP2
0000068f: JUMPDEST
00000690: POP
00000691: POP
00000692: SWAP11
00000693: POP
00000694: POP
00000695: POP
00000696: POP
00000697: POP
00000698: POP
00000699: POP
0000069a: POP
0000069b: POP
0000069c: POP
0000069d: POP
0000069e: PUSH1 0x40
000006a0: MLOAD
000006a1: DUP1
000006a2: SWAP2
000006a3: SUB
000006a4: SWAP1
000006a5: RETURN
000006a6: JUMPDEST
000006a7: CALLVALUE
000006a8: ISZERO
000006a9: PUSH2 0x06b1
000006ac: JUMPI
000006ad: PUSH1 0x00
000006af: DUP1
000006b0: REVERT
000006b1: JUMPDEST
000006b2: PUSH2 0x06b9
000006b5: PUSH2 0x1390
000006b8: JUMP
000006b9: JUMPDEST
000006ba: STOP
000006bb: JUMPDEST
000006bc: CALLVALUE
000006bd: ISZERO
000006be: PUSH2 0x06c6
000006c1: JUMPI
000006c2: PUSH1 0x00
000006c4: DUP1
000006c5: REVERT
000006c6: JUMPDEST
000006c7: PUSH2 0x06f2
000006ca: PUSH1 0x04
000006cc: DUP1
000006cd: DUP1
000006ce: CALLDATALOAD
000006cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006e4: AND
000006e5: SWAP1
000006e6: PUSH1 0x20
000006e8: ADD
000006e9: SWAP1
000006ea: SWAP2
000006eb: SWAP1
000006ec: POP
000006ed: POP
000006ee: PUSH2 0x1409
000006f1: JUMP
000006f2: JUMPDEST
000006f3: STOP
000006f4: JUMPDEST
000006f5: CALLVALUE
000006f6: ISZERO
000006f7: PUSH2 0x06ff
000006fa: JUMPI
000006fb: PUSH1 0x00
000006fd: DUP1
000006fe: REVERT
000006ff: JUMPDEST
00000700: PUSH2 0x0707
00000703: PUSH2 0x14a8
00000706: JUMP
00000707: JUMPDEST
00000708: STOP
00000709: JUMPDEST
0000070a: CALLVALUE
0000070b: ISZERO
0000070c: PUSH2 0x0714
0000070f: JUMPI
00000710: PUSH1 0x00
00000712: DUP1
00000713: REVERT
00000714: JUMPDEST
00000715: PUSH2 0x071c
00000718: PUSH2 0x153d
0000071b: JUMP
0000071c: JUMPDEST
0000071d: PUSH1 0x40
0000071f: MLOAD
00000720: DUP1
00000721: DUP3
00000722: DUP2
00000723: MSTORE
00000724: PUSH1 0x20
00000726: ADD
00000727: SWAP2
00000728: POP
00000729: POP
0000072a: PUSH1 0x40
0000072c: MLOAD
0000072d: DUP1
0000072e: SWAP2
0000072f: SUB
00000730: SWAP1
00000731: RETURN
00000732: JUMPDEST
00000733: CALLVALUE
00000734: ISZERO
00000735: PUSH2 0x073d
00000738: JUMPI
00000739: PUSH1 0x00
0000073b: DUP1
0000073c: REVERT
0000073d: JUMPDEST
0000073e: PUSH2 0x0753
00000741: PUSH1 0x04
00000743: DUP1
00000744: DUP1
00000745: CALLDATALOAD
00000746: SWAP1
00000747: PUSH1 0x20
00000749: ADD
0000074a: SWAP1
0000074b: SWAP2
0000074c: SWAP1
0000074d: POP
0000074e: POP
0000074f: PUSH2 0x1543
00000752: JUMP
00000753: JUMPDEST
00000754: STOP
00000755: JUMPDEST
00000756: PUSH1 0x04
00000758: SLOAD
00000759: DUP2
0000075a: JUMP
0000075b: JUMPDEST
0000075c: PUSH1 0x00
0000075e: DUP1
0000075f: PUSH1 0x01
00000761: PUSH1 0x00
00000763: SWAP1
00000764: SLOAD
00000765: SWAP1
00000766: PUSH2 0x0100
00000769: EXP
0000076a: SWAP1
0000076b: DIV
0000076c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000781: AND
00000782: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000797: AND
00000798: CALLER
00000799: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007ae: AND
000007af: EQ
000007b0: ISZERO
000007b1: ISZERO
000007b2: PUSH2 0x07ba
000007b5: JUMPI
000007b6: PUSH1 0x00
000007b8: DUP1
000007b9: REVERT
000007ba: JUMPDEST
000007bb: DUP5
000007bc: DUP5
000007bd: PUSH1 0x00
000007bf: PUSH1 0x06
000007c1: PUSH1 0x00
000007c3: DUP5
000007c4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007d9: AND
000007da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007ef: AND
000007f0: DUP2
000007f1: MSTORE
000007f2: PUSH1 0x20
000007f4: ADD
000007f5: SWAP1
000007f6: DUP2
000007f7: MSTORE
000007f8: PUSH1 0x20
000007fa: ADD
000007fb: PUSH1 0x00
000007fd: KECCAK256
000007fe: PUSH1 0x00
00000800: DUP4
00000801: DUP2
00000802: MSTORE
00000803: PUSH1 0x20
00000805: ADD
00000806: SWAP1
00000807: DUP2
00000808: MSTORE
00000809: PUSH1 0x20
0000080b: ADD
0000080c: PUSH1 0x00
0000080e: KECCAK256
0000080f: PUSH1 0x00
00000811: ADD
00000812: SLOAD
00000813: EQ
00000814: DUP1
00000815: PUSH2 0x0882
00000818: JUMPI
00000819: POP
0000081a: PUSH1 0x01
0000081c: ISZERO
0000081d: ISZERO
0000081e: PUSH1 0x06
00000820: PUSH1 0x00
00000822: DUP5
00000823: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000838: AND
00000839: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000084e: AND
0000084f: DUP2
00000850: MSTORE
00000851: PUSH1 0x20
00000853: ADD
00000854: SWAP1
00000855: DUP2
00000856: MSTORE
00000857: PUSH1 0x20
00000859: ADD
0000085a: PUSH1 0x00
0000085c: KECCAK256
0000085d: PUSH1 0x00
0000085f: DUP4
00000860: DUP2
00000861: MSTORE
00000862: PUSH1 0x20
00000864: ADD
00000865: SWAP1
00000866: DUP2
00000867: MSTORE
00000868: PUSH1 0x20
0000086a: ADD
0000086b: PUSH1 0x00
0000086d: KECCAK256
0000086e: PUSH1 0x07
00000870: ADD
00000871: PUSH1 0x00
00000873: SWAP1
00000874: SLOAD
00000875: SWAP1
00000876: PUSH2 0x0100
00000879: EXP
0000087a: SWAP1
0000087b: DIV
0000087c: PUSH1 0xff
0000087e: AND
0000087f: ISZERO
00000880: ISZERO
00000881: EQ
00000882: JUMPDEST
00000883: ISZERO
00000884: PUSH2 0x088c
00000887: JUMPI
00000888: PUSH1 0x00
0000088a: DUP1
0000088b: REVERT
0000088c: JUMPDEST
0000088d: PUSH1 0x06
0000088f: PUSH1 0x00
00000891: DUP9
00000892: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008a7: AND
000008a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008bd: AND
000008be: DUP2
000008bf: MSTORE
000008c0: PUSH1 0x20
000008c2: ADD
000008c3: SWAP1
000008c4: DUP2
000008c5: MSTORE
000008c6: PUSH1 0x20
000008c8: ADD
000008c9: PUSH1 0x00
000008cb: KECCAK256
000008cc: PUSH1 0x00
000008ce: DUP8
000008cf: DUP2
000008d0: MSTORE
000008d1: PUSH1 0x20
000008d3: ADD
000008d4: SWAP1
000008d5: DUP2
000008d6: MSTORE
000008d7: PUSH1 0x20
000008d9: ADD
000008da: PUSH1 0x00
000008dc: KECCAK256
000008dd: SWAP3
000008de: POP
000008df: PUSH1 0x20
000008e1: PUSH1 0x40
000008e3: MLOAD
000008e4: SWAP1
000008e5: DUP2
000008e6: ADD
000008e7: PUSH1 0x40
000008e9: MSTORE
000008ea: DUP1
000008eb: PUSH1 0x00
000008ed: DUP2
000008ee: MSTORE
000008ef: POP
000008f0: DUP4
000008f1: PUSH1 0x04
000008f3: ADD
000008f4: SWAP1
000008f5: DUP1
000008f6: MLOAD
000008f7: SWAP1
000008f8: PUSH1 0x20
000008fa: ADD
000008fb: SWAP1
000008fc: PUSH2 0x0906
000008ff: SWAP3
00000900: SWAP2
00000901: SWAP1
00000902: PUSH2 0x1703
00000905: JUMP
00000906: JUMPDEST
00000907: POP
00000908: DUP5
00000909: DUP4
0000090a: PUSH1 0x05
0000090c: ADD
0000090d: DUP2
0000090e: SWAP1
0000090f: SSTORE
00000910: POP
00000911: PUSH2 0x091a
00000914: DUP8
00000915: DUP7
00000916: PUSH2 0x15a9
00000919: JUMP
0000091a: JUMPDEST
0000091b: PUSH1 0x01
0000091d: DUP4
0000091e: PUSH1 0x07
00000920: ADD
00000921: PUSH1 0x00
00000923: PUSH2 0x0100
00000926: EXP
00000927: DUP2
00000928: SLOAD
00000929: DUP2
0000092a: PUSH1 0xff
0000092c: MUL
0000092d: NOT
0000092e: AND
0000092f: SWAP1
00000930: DUP4
00000931: ISZERO
00000932: ISZERO
00000933: MUL
00000934: OR
00000935: SWAP1
00000936: SSTORE
00000937: POP
00000938: DUP3
00000939: PUSH1 0x06
0000093b: ADD
0000093c: SLOAD
0000093d: PUSH1 0x04
0000093f: PUSH1 0x00
00000941: DUP3
00000942: DUP3
00000943: SLOAD
00000944: SUB
00000945: SWAP3
00000946: POP
00000947: POP
00000948: DUP2
00000949: SWAP1
0000094a: SSTORE
0000094b: POP
0000094c: DUP7
0000094d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000962: AND
00000963: DUP7
00000964: PUSH32 0x167f60e12ad331289e861c37279d2fdeda6dcfbeef21597c81762879de8fac66
00000985: DUP8
00000986: PUSH1 0x40
00000988: MLOAD
00000989: DUP1
0000098a: DUP3
0000098b: DUP2
0000098c: MSTORE
0000098d: PUSH1 0x20
0000098f: ADD
00000990: SWAP2
00000991: POP
00000992: POP
00000993: PUSH1 0x40
00000995: MLOAD
00000996: DUP1
00000997: SWAP2
00000998: SUB
00000999: SWAP1
0000099a: LOG3
0000099b: PUSH1 0x01
0000099d: SWAP4
0000099e: POP
0000099f: POP
000009a0: POP
000009a1: POP
000009a2: SWAP4
000009a3: SWAP3
000009a4: POP
000009a5: POP
000009a6: POP
000009a7: JUMP
000009a8: JUMPDEST
000009a9: PUSH1 0x01
000009ab: PUSH1 0x14
000009ad: SWAP1
000009ae: SLOAD
000009af: SWAP1
000009b0: PUSH2 0x0100
000009b3: EXP
000009b4: SWAP1
000009b5: DIV
000009b6: PUSH1 0xff
000009b8: AND
000009b9: DUP2
000009ba: JUMP
000009bb: JUMPDEST
000009bc: PUSH1 0x01
000009be: PUSH1 0x00
000009c0: SWAP1
000009c1: SLOAD
000009c2: SWAP1
000009c3: PUSH2 0x0100
000009c6: EXP
000009c7: SWAP1
000009c8: DIV
000009c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009de: AND
000009df: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009f4: AND
000009f5: CALLER
000009f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a0b: AND
00000a0c: EQ
00000a0d: ISZERO
00000a0e: ISZERO
00000a0f: PUSH2 0x0a17
00000a12: JUMPI
00000a13: PUSH1 0x00
00000a15: DUP1
00000a16: REVERT
00000a17: JUMPDEST
00000a18: DUP1
00000a19: PUSH1 0x03
00000a1b: DUP2
00000a1c: SWAP1
00000a1d: SSTORE
00000a1e: POP
00000a1f: POP
00000a20: JUMP
00000a21: JUMPDEST
00000a22: PUSH1 0x01
00000a24: PUSH1 0x00
00000a26: SWAP1
00000a27: SLOAD
00000a28: SWAP1
00000a29: PUSH2 0x0100
00000a2c: EXP
00000a2d: SWAP1
00000a2e: DIV
00000a2f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a44: AND
00000a45: DUP2
00000a46: JUMP
00000a47: JUMPDEST
00000a48: PUSH1 0x00
00000a4a: DUP1
00000a4b: PUSH1 0x01
00000a4d: PUSH1 0x00
00000a4f: SWAP1
00000a50: SLOAD
00000a51: SWAP1
00000a52: PUSH2 0x0100
00000a55: EXP
00000a56: SWAP1
00000a57: DIV
00000a58: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a6d: AND
00000a6e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a83: AND
00000a84: CALLER
00000a85: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a9a: AND
00000a9b: EQ
00000a9c: ISZERO
00000a9d: ISZERO
00000a9e: PUSH2 0x0aa6
00000aa1: JUMPI
00000aa2: PUSH1 0x00
00000aa4: DUP1
00000aa5: REVERT
00000aa6: JUMPDEST
00000aa7: DUP7
00000aa8: DUP7
00000aa9: PUSH1 0x00
00000aab: PUSH1 0x06
00000aad: PUSH1 0x00
00000aaf: DUP5
00000ab0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ac5: AND
00000ac6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000adb: AND
00000adc: DUP2
00000add: MSTORE
00000ade: PUSH1 0x20
00000ae0: ADD
00000ae1: SWAP1
00000ae2: DUP2
00000ae3: MSTORE
00000ae4: PUSH1 0x20
00000ae6: ADD
00000ae7: PUSH1 0x00
00000ae9: KECCAK256
00000aea: PUSH1 0x00
00000aec: DUP4
00000aed: DUP2
00000aee: MSTORE
00000aef: PUSH1 0x20
00000af1: ADD
00000af2: SWAP1
00000af3: DUP2
00000af4: MSTORE
00000af5: PUSH1 0x20
00000af7: ADD
00000af8: PUSH1 0x00
00000afa: KECCAK256
00000afb: PUSH1 0x00
00000afd: ADD
00000afe: SLOAD
00000aff: EQ
00000b00: DUP1
00000b01: PUSH2 0x0b6e
00000b04: JUMPI
00000b05: POP
00000b06: PUSH1 0x01
00000b08: ISZERO
00000b09: ISZERO
00000b0a: PUSH1 0x06
00000b0c: PUSH1 0x00
00000b0e: DUP5
00000b0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b24: AND
00000b25: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b3a: AND
00000b3b: DUP2
00000b3c: MSTORE
00000b3d: PUSH1 0x20
00000b3f: ADD
00000b40: SWAP1
00000b41: DUP2
00000b42: MSTORE
00000b43: PUSH1 0x20
00000b45: ADD
00000b46: PUSH1 0x00
00000b48: KECCAK256
00000b49: PUSH1 0x00
00000b4b: DUP4
00000b4c: DUP2
00000b4d: MSTORE
00000b4e: PUSH1 0x20
00000b50: ADD
00000b51: SWAP1
00000b52: DUP2
00000b53: MSTORE
00000b54: PUSH1 0x20
00000b56: ADD
00000b57: PUSH1 0x00
00000b59: KECCAK256
00000b5a: PUSH1 0x07
00000b5c: ADD
00000b5d: PUSH1 0x00
00000b5f: SWAP1
00000b60: SLOAD
00000b61: SWAP1
00000b62: PUSH2 0x0100
00000b65: EXP
00000b66: SWAP1
00000b67: DIV
00000b68: PUSH1 0xff
00000b6a: AND
00000b6b: ISZERO
00000b6c: ISZERO
00000b6d: EQ
00000b6e: JUMPDEST
00000b6f: ISZERO
00000b70: PUSH2 0x0b78
00000b73: JUMPI
00000b74: PUSH1 0x00
00000b76: DUP1
00000b77: REVERT
00000b78: JUMPDEST
00000b79: PUSH1 0x06
00000b7b: PUSH1 0x00
00000b7d: DUP11
00000b7e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b93: AND
00000b94: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ba9: AND
00000baa: DUP2
00000bab: MSTORE
00000bac: PUSH1 0x20
00000bae: ADD
00000baf: SWAP1
00000bb0: DUP2
00000bb1: MSTORE
00000bb2: PUSH1 0x20
00000bb4: ADD
00000bb5: PUSH1 0x00
00000bb7: KECCAK256
00000bb8: PUSH1 0x00
00000bba: DUP10
00000bbb: DUP2
00000bbc: MSTORE
00000bbd: PUSH1 0x20
00000bbf: ADD
00000bc0: SWAP1
00000bc1: DUP2
00000bc2: MSTORE
00000bc3: PUSH1 0x20
00000bc5: ADD
00000bc6: PUSH1 0x00
00000bc8: KECCAK256
00000bc9: SWAP3
00000bca: POP
00000bcb: DUP6
00000bcc: DUP4
00000bcd: PUSH1 0x04
00000bcf: ADD
00000bd0: SWAP1
00000bd1: DUP1
00000bd2: MLOAD
00000bd3: SWAP1
00000bd4: PUSH1 0x20
00000bd6: ADD
00000bd7: SWAP1
00000bd8: PUSH2 0x0be2
00000bdb: SWAP3
00000bdc: SWAP2
00000bdd: SWAP1
00000bde: PUSH2 0x1703
00000be1: JUMP
00000be2: JUMPDEST
00000be3: POP
00000be4: DUP5
00000be5: DUP8
00000be6: ADD
00000be7: DUP4
00000be8: PUSH1 0x05
00000bea: ADD
00000beb: DUP2
00000bec: SWAP1
00000bed: SSTORE
00000bee: POP
00000bef: PUSH2 0x0bfc
00000bf2: DUP10
00000bf3: DUP5
00000bf4: PUSH1 0x05
00000bf6: ADD
00000bf7: SLOAD
00000bf8: PUSH2 0x15a9
00000bfb: JUMP
00000bfc: JUMPDEST
00000bfd: PUSH2 0x0c0a
00000c00: DUP10
00000c01: DUP5
00000c02: PUSH1 0x05
00000c04: ADD
00000c05: SLOAD
00000c06: PUSH2 0x1655
00000c09: JUMP
00000c0a: JUMPDEST
00000c0b: PUSH1 0x01
00000c0d: DUP4
00000c0e: PUSH1 0x07
00000c10: ADD
00000c11: PUSH1 0x00
00000c13: PUSH2 0x0100
00000c16: EXP
00000c17: DUP2
00000c18: SLOAD
00000c19: DUP2
00000c1a: PUSH1 0xff
00000c1c: MUL
00000c1d: NOT
00000c1e: AND
00000c1f: SWAP1
00000c20: DUP4
00000c21: ISZERO
00000c22: ISZERO
00000c23: MUL
00000c24: OR
00000c25: SWAP1
00000c26: SSTORE
00000c27: POP
00000c28: DUP3
00000c29: PUSH1 0x06
00000c2b: ADD
00000c2c: SLOAD
00000c2d: PUSH1 0x04
00000c2f: PUSH1 0x00
00000c31: DUP3
00000c32: DUP3
00000c33: SLOAD
00000c34: SUB
00000c35: SWAP3
00000c36: POP
00000c37: POP
00000c38: DUP2
00000c39: SWAP1
00000c3a: SSTORE
00000c3b: POP
00000c3c: DUP9
00000c3d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c52: AND
00000c53: DUP9
00000c54: PUSH32 0xb50460b1554461a9018f3e2240e902901793d4ff8a09cd2b4d560fff86217aba
00000c75: DUP8
00000c76: PUSH1 0x40
00000c78: MLOAD
00000c79: DUP1
00000c7a: DUP3
00000c7b: DUP2
00000c7c: MSTORE
00000c7d: PUSH1 0x20
00000c7f: ADD
00000c80: SWAP2
00000c81: POP
00000c82: POP
00000c83: PUSH1 0x40
00000c85: MLOAD
00000c86: DUP1
00000c87: SWAP2
00000c88: SUB
00000c89: SWAP1
00000c8a: LOG3
00000c8b: PUSH1 0x01
00000c8d: SWAP4
00000c8e: POP
00000c8f: POP
00000c90: POP
00000c91: POP
00000c92: SWAP6
00000c93: SWAP5
00000c94: POP
00000c95: POP
00000c96: POP
00000c97: POP
00000c98: POP
00000c99: JUMP
00000c9a: JUMPDEST
00000c9b: PUSH2 0x0ca2
00000c9e: PUSH2 0x1783
00000ca1: JUMP
00000ca2: JUMPDEST
00000ca3: PUSH1 0x01
00000ca5: PUSH1 0x14
00000ca7: SWAP1
00000ca8: SLOAD
00000ca9: SWAP1
00000caa: PUSH2 0x0100
00000cad: EXP
00000cae: SWAP1
00000caf: DIV
00000cb0: PUSH1 0xff
00000cb2: AND
00000cb3: ISZERO
00000cb4: ISZERO
00000cb5: PUSH2 0x0cbd
00000cb8: JUMPI
00000cb9: PUSH1 0x00
00000cbb: DUP1
00000cbc: REVERT
00000cbd: JUMPDEST
00000cbe: PUSH1 0x02
00000cc0: SLOAD
00000cc1: CALLVALUE
00000cc2: LT
00000cc3: ISZERO
00000cc4: PUSH2 0x0ccc
00000cc7: JUMPI
00000cc8: PUSH1 0x00
00000cca: DUP1
00000ccb: REVERT
00000ccc: JUMPDEST
00000ccd: DUP2
00000cce: PUSH1 0x03
00000cd0: SLOAD
00000cd1: DUP2
00000cd2: GT
00000cd3: ISZERO
00000cd4: PUSH2 0x0cdc
00000cd7: JUMPI
00000cd8: PUSH1 0x00
00000cda: DUP1
00000cdb: REVERT
00000cdc: JUMPDEST
00000cdd: DUP3
00000cde: PUSH1 0x00
00000ce0: DUP1
00000ce1: PUSH1 0x00
00000ce3: PUSH1 0x64
00000ce5: PUSH1 0x05
00000ce7: PUSH1 0x00
00000ce9: SWAP1
00000cea: SLOAD
00000ceb: SWAP1
00000cec: PUSH2 0x0100
00000cef: EXP
00000cf0: SWAP1
00000cf1: DIV
00000cf2: PUSH1 0xff
00000cf4: AND
00000cf5: PUSH1 0xff
00000cf7: AND
00000cf8: ADDRESS
00000cf9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d0e: AND
00000d0f: BALANCE
00000d10: MUL
00000d11: DUP2
00000d12: ISZERO
00000d13: ISZERO
00000d14: PUSH2 0x0d19
00000d17: JUMPI
00000d18: INVALID
00000d19: JUMPDEST
00000d1a: DIV
00000d1b: SWAP3
00000d1c: POP
00000d1d: PUSH1 0x04
00000d1f: SLOAD
00000d20: SWAP2
00000d21: POP
00000d22: DUP4
00000d23: DUP3
00000d24: DUP5
00000d25: SUB
00000d26: SUB
00000d27: SWAP1
00000d28: POP
00000d29: PUSH1 0x00
00000d2b: DUP2
00000d2c: SGT
00000d2d: ISZERO
00000d2e: ISZERO
00000d2f: PUSH2 0x0d37
00000d32: JUMPI
00000d33: PUSH1 0x00
00000d35: DUP1
00000d36: REVERT
00000d37: JUMPDEST
00000d38: DUP8
00000d39: PUSH1 0x00
00000d3b: PUSH1 0x06
00000d3d: PUSH1 0x00
00000d3f: CALLER
00000d40: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d55: AND
00000d56: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d6b: AND
00000d6c: DUP2
00000d6d: MSTORE
00000d6e: PUSH1 0x20
00000d70: ADD
00000d71: SWAP1
00000d72: DUP2
00000d73: MSTORE
00000d74: PUSH1 0x20
00000d76: ADD
00000d77: PUSH1 0x00
00000d79: KECCAK256
00000d7a: PUSH1 0x00
00000d7c: DUP4
00000d7d: DUP2
00000d7e: MSTORE
00000d7f: PUSH1 0x20
00000d81: ADD
00000d82: SWAP1
00000d83: DUP2
00000d84: MSTORE
00000d85: PUSH1 0x20
00000d87: ADD
00000d88: PUSH1 0x00
00000d8a: KECCAK256
00000d8b: PUSH1 0x00
00000d8d: ADD
00000d8e: SLOAD
00000d8f: EQ
00000d90: ISZERO
00000d91: ISZERO
00000d92: PUSH2 0x0d9a
00000d95: JUMPI
00000d96: PUSH1 0x00
00000d98: DUP1
00000d99: REVERT
00000d9a: JUMPDEST
00000d9b: PUSH2 0x0100
00000d9e: PUSH1 0x40
00000da0: MLOAD
00000da1: SWAP1
00000da2: DUP2
00000da3: ADD
00000da4: PUSH1 0x40
00000da6: MSTORE
00000da7: DUP1
00000da8: DUP11
00000da9: DUP2
00000daa: MSTORE
00000dab: PUSH1 0x20
00000dad: ADD
00000dae: CALLER
00000daf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000dc4: AND
00000dc5: DUP2
00000dc6: MSTORE
00000dc7: PUSH1 0x20
00000dc9: ADD
00000dca: CALLVALUE
00000dcb: DUP2
00000dcc: MSTORE
00000dcd: PUSH1 0x20
00000dcf: ADD
00000dd0: DUP12
00000dd1: DUP2
00000dd2: MSTORE
00000dd3: PUSH1 0x20
00000dd5: ADD
00000dd6: PUSH1 0x20
00000dd8: PUSH1 0x40
00000dda: MLOAD
00000ddb: SWAP1
00000ddc: DUP2
00000ddd: ADD
00000dde: PUSH1 0x40
00000de0: MSTORE
00000de1: DUP1
00000de2: PUSH1 0x00
00000de4: DUP2
00000de5: MSTORE
00000de6: POP
00000de7: DUP2
00000de8: MSTORE
00000de9: PUSH1 0x20
00000deb: ADD
00000dec: PUSH1 0x00
00000dee: DUP2
00000def: MSTORE
00000df0: PUSH1 0x20
00000df2: ADD
00000df3: DUP10
00000df4: DUP2
00000df5: MSTORE
00000df6: PUSH1 0x20
00000df8: ADD
00000df9: PUSH1 0x00
00000dfb: ISZERO
00000dfc: ISZERO
00000dfd: DUP2
00000dfe: MSTORE
00000dff: POP
00000e00: SWAP7
00000e01: POP
00000e02: DUP7
00000e03: PUSH1 0x06
00000e05: PUSH1 0x00
00000e07: CALLER
00000e08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e1d: AND
00000e1e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e33: AND
00000e34: DUP2
00000e35: MSTORE
00000e36: PUSH1 0x20
00000e38: ADD
00000e39: SWAP1
00000e3a: DUP2
00000e3b: MSTORE
00000e3c: PUSH1 0x20
00000e3e: ADD
00000e3f: PUSH1 0x00
00000e41: KECCAK256
00000e42: PUSH1 0x00
00000e44: DUP12
00000e45: DUP2
00000e46: MSTORE
00000e47: PUSH1 0x20
00000e49: ADD
00000e4a: SWAP1
00000e4b: DUP2
00000e4c: MSTORE
00000e4d: PUSH1 0x20
00000e4f: ADD
00000e50: PUSH1 0x00
00000e52: KECCAK256
00000e53: PUSH1 0x00
00000e55: DUP3
00000e56: ADD
00000e57: MLOAD
00000e58: DUP2
00000e59: PUSH1 0x00
00000e5b: ADD
00000e5c: SSTORE
00000e5d: PUSH1 0x20
00000e5f: DUP3
00000e60: ADD
00000e61: MLOAD
00000e62: DUP2
00000e63: PUSH1 0x01
00000e65: ADD
00000e66: PUSH1 0x00
00000e68: PUSH2 0x0100
00000e6b: EXP
00000e6c: DUP2
00000e6d: SLOAD
00000e6e: DUP2
00000e6f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e84: MUL
00000e85: NOT
00000e86: AND
00000e87: SWAP1
00000e88: DUP4
00000e89: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e9e: AND
00000e9f: MUL
00000ea0: OR
00000ea1: SWAP1
00000ea2: SSTORE
00000ea3: POP
00000ea4: PUSH1 0x40
00000ea6: DUP3
00000ea7: ADD
00000ea8: MLOAD
00000ea9: DUP2
00000eaa: PUSH1 0x02
00000eac: ADD
00000ead: SSTORE
00000eae: PUSH1 0x60
00000eb0: DUP3
00000eb1: ADD
00000eb2: MLOAD
00000eb3: DUP2
00000eb4: PUSH1 0x03
00000eb6: ADD
00000eb7: SWAP1
00000eb8: DUP1
00000eb9: MLOAD
00000eba: SWAP1
00000ebb: PUSH1 0x20
00000ebd: ADD
00000ebe: SWAP1
00000ebf: PUSH2 0x0ec9
00000ec2: SWAP3
00000ec3: SWAP2
00000ec4: SWAP1
00000ec5: PUSH2 0x17ed
00000ec8: JUMP
00000ec9: JUMPDEST
00000eca: POP
00000ecb: PUSH1 0x80
00000ecd: DUP3
00000ece: ADD
00000ecf: MLOAD
00000ed0: DUP2
00000ed1: PUSH1 0x04
00000ed3: ADD
00000ed4: SWAP1
00000ed5: DUP1
00000ed6: MLOAD
00000ed7: SWAP1
00000ed8: PUSH1 0x20
00000eda: ADD
00000edb: SWAP1
00000edc: PUSH2 0x0ee6
00000edf: SWAP3
00000ee0: SWAP2
00000ee1: SWAP1
00000ee2: PUSH2 0x17ed
00000ee5: JUMP
00000ee6: JUMPDEST
00000ee7: POP
00000ee8: PUSH1 0xa0
00000eea: DUP3
00000eeb: ADD
00000eec: MLOAD
00000eed: DUP2
00000eee: PUSH1 0x05
00000ef0: ADD
00000ef1: SSTORE
00000ef2: PUSH1 0xc0
00000ef4: DUP3
00000ef5: ADD
00000ef6: MLOAD
00000ef7: DUP2
00000ef8: PUSH1 0x06
00000efa: ADD
00000efb: SSTORE
00000efc: PUSH1 0xe0
00000efe: DUP3
00000eff: ADD
00000f00: MLOAD
00000f01: DUP2
00000f02: PUSH1 0x07
00000f04: ADD
00000f05: PUSH1 0x00
00000f07: PUSH2 0x0100
00000f0a: EXP
00000f0b: DUP2
00000f0c: SLOAD
00000f0d: DUP2
00000f0e: PUSH1 0xff
00000f10: MUL
00000f11: NOT
00000f12: AND
00000f13: SWAP1
00000f14: DUP4
00000f15: ISZERO
00000f16: ISZERO
00000f17: MUL
00000f18: OR
00000f19: SWAP1
00000f1a: SSTORE
00000f1b: POP
00000f1c: SWAP1
00000f1d: POP
00000f1e: POP
00000f1f: CALLER
00000f20: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f35: AND
00000f36: DUP10
00000f37: PUSH32 0x4ead6f22ac4b1017882b5bb9f05325089a293747c0529c29df915e080ac3326d
00000f58: DUP14
00000f59: DUP14
00000f5a: CALLVALUE
00000f5b: PUSH1 0x40
00000f5d: MLOAD
00000f5e: DUP1
00000f5f: DUP5
00000f60: PUSH1 0xff
00000f62: AND
00000f63: DUP2
00000f64: MSTORE
00000f65: PUSH1 0x20
00000f67: ADD
00000f68: DUP1
00000f69: PUSH1 0x20
00000f6b: ADD
00000f6c: DUP4
00000f6d: DUP2
00000f6e: MSTORE
00000f6f: PUSH1 0x20
00000f71: ADD
00000f72: DUP3
00000f73: DUP2
00000f74: SUB
00000f75: DUP3
00000f76: MSTORE
00000f77: DUP5
00000f78: DUP2
00000f79: DUP2
00000f7a: MLOAD
00000f7b: DUP2
00000f7c: MSTORE
00000f7d: PUSH1 0x20
00000f7f: ADD
00000f80: SWAP2
00000f81: POP
00000f82: DUP1
00000f83: MLOAD
00000f84: SWAP1
00000f85: PUSH1 0x20
00000f87: ADD
00000f88: SWAP1
00000f89: DUP1
00000f8a: DUP4
00000f8b: DUP4
00000f8c: PUSH1 0x00
00000f8e: JUMPDEST
00000f8f: DUP4
00000f90: DUP2
00000f91: LT
00000f92: ISZERO
00000f93: PUSH2 0x0fa9
00000f96: JUMPI
00000f97: DUP1
00000f98: DUP3
00000f99: ADD
00000f9a: MLOAD
00000f9b: DUP2
00000f9c: DUP5
00000f9d: ADD
00000f9e: MSTORE
00000f9f: PUSH1 0x20
00000fa1: DUP2
00000fa2: ADD
00000fa3: SWAP1
00000fa4: POP
00000fa5: PUSH2 0x0f8e
00000fa8: JUMP
00000fa9: JUMPDEST
00000faa: POP
00000fab: POP
00000fac: POP
00000fad: POP
00000fae: SWAP1
00000faf: POP
00000fb0: SWAP1
00000fb1: DUP2
00000fb2: ADD
00000fb3: SWAP1
00000fb4: PUSH1 0x1f
00000fb6: AND
00000fb7: DUP1
00000fb8: ISZERO
00000fb9: PUSH2 0x0fd6
00000fbc: JUMPI
00000fbd: DUP1
00000fbe: DUP3
00000fbf: SUB
00000fc0: DUP1
00000fc1: MLOAD
00000fc2: PUSH1 0x01
00000fc4: DUP4
00000fc5: PUSH1 0x20
00000fc7: SUB
00000fc8: PUSH2 0x0100
00000fcb: EXP
00000fcc: SUB
00000fcd: NOT
00000fce: AND
00000fcf: DUP2
00000fd0: MSTORE
00000fd1: PUSH1 0x20
00000fd3: ADD
00000fd4: SWAP2
00000fd5: POP
00000fd6: JUMPDEST
00000fd7: POP
00000fd8: SWAP5
00000fd9: POP
00000fda: POP
00000fdb: POP
00000fdc: POP
00000fdd: POP
00000fde: PUSH1 0x40
00000fe0: MLOAD
00000fe1: DUP1
00000fe2: SWAP2
00000fe3: SUB
00000fe4: SWAP1
00000fe5: LOG3
00000fe6: DUP8
00000fe7: PUSH1 0x04
00000fe9: PUSH1 0x00
00000feb: DUP3
00000fec: DUP3
00000fed: SLOAD
00000fee: ADD
00000fef: SWAP3
00000ff0: POP
00000ff1: POP
00000ff2: DUP2
00000ff3: SWAP1
00000ff4: SSTORE
00000ff5: POP
00000ff6: POP
00000ff7: POP
00000ff8: POP
00000ff9: POP
00000ffa: POP
00000ffb: POP
00000ffc: POP
00000ffd: POP
00000ffe: POP
00000fff: POP
00001000: POP
00001001: JUMP
00001002: JUMPDEST
00001003: PUSH1 0x00
00001005: DUP1
00001006: SWAP1
00001007: SLOAD
00001008: SWAP1
00001009: PUSH2 0x0100
0000100c: EXP
0000100d: SWAP1
0000100e: DIV
0000100f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001024: AND
00001025: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000103a: AND
0000103b: CALLER
0000103c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001051: AND
00001052: EQ
00001053: ISZERO
00001054: ISZERO
00001055: PUSH2 0x105d
00001058: JUMPI
00001059: PUSH1 0x00
0000105b: DUP1
0000105c: REVERT
0000105d: JUMPDEST
0000105e: PUSH1 0x00
00001060: PUSH1 0x04
00001062: SLOAD
00001063: DUP3
00001064: ADDRESS
00001065: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000107a: AND
0000107b: BALANCE
0000107c: SUB
0000107d: SUB
0000107e: SGT
0000107f: ISZERO
00001080: ISZERO
00001081: PUSH2 0x1115
00001084: JUMPI
00001085: PUSH32 0xeaa8cb7c8218ecdd86fac0e3865d6681cec404c025161f64a01d66a8794ebe4d
000010a6: PUSH1 0x00
000010a8: DUP1
000010a9: SWAP1
000010aa: SLOAD
000010ab: SWAP1
000010ac: PUSH2 0x0100
000010af: EXP
000010b0: SWAP1
000010b1: DIV
000010b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010c7: AND
000010c8: DUP3
000010c9: PUSH1 0x40
000010cb: MLOAD
000010cc: DUP1
000010cd: DUP4
000010ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010e3: AND
000010e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010f9: AND
000010fa: DUP2
000010fb: MSTORE
000010fc: PUSH1 0x20
000010fe: ADD
000010ff: DUP3
00001100: DUP2
00001101: MSTORE
00001102: PUSH1 0x20
00001104: ADD
00001105: SWAP3
00001106: POP
00001107: POP
00001108: POP
00001109: PUSH1 0x40
0000110b: MLOAD
0000110c: DUP1
0000110d: SWAP2
0000110e: SUB
0000110f: SWAP1
00001110: LOG1
00001111: PUSH2 0x1177
00001114: JUMP
00001115: JUMPDEST
00001116: PUSH1 0x00
00001118: DUP1
00001119: SWAP1
0000111a: SLOAD
0000111b: SWAP1
0000111c: PUSH2 0x0100
0000111f: EXP
00001120: SWAP1
00001121: DIV
00001122: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001137: AND
00001138: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000114d: AND
0000114e: PUSH2 0x08fc
00001151: DUP3
00001152: SWAP1
00001153: DUP2
00001154: ISZERO
00001155: MUL
00001156: SWAP1
00001157: PUSH1 0x40
00001159: MLOAD
0000115a: PUSH1 0x00
0000115c: PUSH1 0x40
0000115e: MLOAD
0000115f: DUP1
00001160: DUP4
00001161: SUB
00001162: DUP2
00001163: DUP6
00001164: DUP9
00001165: DUP9
00001166: CALL
00001167: SWAP4
00001168: POP
00001169: POP
0000116a: POP
0000116b: POP
0000116c: ISZERO
0000116d: ISZERO
0000116e: PUSH2 0x1176
00001171: JUMPI
00001172: PUSH1 0x00
00001174: DUP1
00001175: REVERT
00001176: JUMPDEST
00001177: JUMPDEST
00001178: POP
00001179: JUMP
0000117a: JUMPDEST
0000117b: PUSH1 0x01
0000117d: PUSH1 0x00
0000117f: SWAP1
00001180: SLOAD
00001181: SWAP1
00001182: PUSH2 0x0100
00001185: EXP
00001186: SWAP1
00001187: DIV
00001188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000119d: AND
0000119e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011b3: AND
000011b4: CALLER
000011b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011ca: AND
000011cb: EQ
000011cc: ISZERO
000011cd: ISZERO
000011ce: PUSH2 0x11d6
000011d1: JUMPI
000011d2: PUSH1 0x00
000011d4: DUP1
000011d5: REVERT
000011d6: JUMPDEST
000011d7: DUP1
000011d8: PUSH1 0x02
000011da: DUP2
000011db: SWAP1
000011dc: SSTORE
000011dd: POP
000011de: POP
000011df: JUMP
000011e0: JUMPDEST
000011e1: PUSH1 0x00
000011e3: DUP1
000011e4: SWAP1
000011e5: SLOAD
000011e6: SWAP1
000011e7: PUSH2 0x0100
000011ea: EXP
000011eb: SWAP1
000011ec: DIV
000011ed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001202: AND
00001203: DUP2
00001204: JUMP
00001205: JUMPDEST
00001206: PUSH1 0x02
00001208: SLOAD
00001209: DUP2
0000120a: JUMP
0000120b: JUMPDEST
0000120c: PUSH1 0x01
0000120e: PUSH1 0x00
00001210: SWAP1
00001211: SLOAD
00001212: SWAP1
00001213: PUSH2 0x0100
00001216: EXP
00001217: SWAP1
00001218: DIV
00001219: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000122e: AND
0000122f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001244: AND
00001245: CALLER
00001246: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000125b: AND
0000125c: EQ
0000125d: ISZERO
0000125e: ISZERO
0000125f: PUSH2 0x1267
00001262: JUMPI
00001263: PUSH1 0x00
00001265: DUP1
00001266: REVERT
00001267: JUMPDEST
00001268: DUP1
00001269: PUSH1 0x05
0000126b: PUSH1 0x00
0000126d: PUSH2 0x0100
00001270: EXP
00001271: DUP2
00001272: SLOAD
00001273: DUP2
00001274: PUSH1 0xff
00001276: MUL
00001277: NOT
00001278: AND
00001279: SWAP1
0000127a: DUP4
0000127b: PUSH1 0xff
0000127d: AND
0000127e: MUL
0000127f: OR
00001280: SWAP1
00001281: SSTORE
00001282: POP
00001283: POP
00001284: JUMP
00001285: JUMPDEST
00001286: PUSH1 0x01
00001288: PUSH1 0x00
0000128a: SWAP1
0000128b: SLOAD
0000128c: SWAP1
0000128d: PUSH2 0x0100
00001290: EXP
00001291: SWAP1
00001292: DIV
00001293: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012a8: AND
000012a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012be: AND
000012bf: CALLER
000012c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012d5: AND
000012d6: EQ
000012d7: ISZERO
000012d8: ISZERO
000012d9: PUSH2 0x12e1
000012dc: JUMPI
000012dd: PUSH1 0x00
000012df: DUP1
000012e0: REVERT
000012e1: JUMPDEST
000012e2: PUSH1 0x01
000012e4: DUP1
000012e5: PUSH1 0x14
000012e7: PUSH2 0x0100
000012ea: EXP
000012eb: DUP2
000012ec: SLOAD
000012ed: DUP2
000012ee: PUSH1 0xff
000012f0: MUL
000012f1: NOT
000012f2: AND
000012f3: SWAP1
000012f4: DUP4
000012f5: ISZERO
000012f6: ISZERO
000012f7: MUL
000012f8: OR
000012f9: SWAP1
000012fa: SSTORE
000012fb: POP
000012fc: JUMP
000012fd: JUMPDEST
000012fe: PUSH1 0x05
00001300: PUSH1 0x00
00001302: SWAP1
00001303: SLOAD
00001304: SWAP1
00001305: PUSH2 0x0100
00001308: EXP
00001309: SWAP1
0000130a: DIV
0000130b: PUSH1 0xff
0000130d: AND
0000130e: DUP2
0000130f: JUMP
00001310: JUMPDEST
00001311: PUSH1 0x06
00001313: PUSH1 0x20
00001315: MSTORE
00001316: DUP2
00001317: PUSH1 0x00
00001319: MSTORE
0000131a: PUSH1 0x40
0000131c: PUSH1 0x00
0000131e: KECCAK256
0000131f: PUSH1 0x20
00001321: MSTORE
00001322: DUP1
00001323: PUSH1 0x00
00001325: MSTORE
00001326: PUSH1 0x40
00001328: PUSH1 0x00
0000132a: KECCAK256
0000132b: PUSH1 0x00
0000132d: SWAP2
0000132e: POP
0000132f: SWAP2
00001330: POP
00001331: POP
00001332: DUP1
00001333: PUSH1 0x00
00001335: ADD
00001336: SLOAD
00001337: SWAP1
00001338: DUP1
00001339: PUSH1 0x01
0000133b: ADD
0000133c: PUSH1 0x00
0000133e: SWAP1
0000133f: SLOAD
00001340: SWAP1
00001341: PUSH2 0x0100
00001344: EXP
00001345: SWAP1
00001346: DIV
00001347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000135c: AND
0000135d: SWAP1
0000135e: DUP1
0000135f: PUSH1 0x02
00001361: ADD
00001362: SLOAD
00001363: SWAP1
00001364: DUP1
00001365: PUSH1 0x03
00001367: ADD
00001368: SWAP1
00001369: DUP1
0000136a: PUSH1 0x04
0000136c: ADD
0000136d: SWAP1
0000136e: DUP1
0000136f: PUSH1 0x05
00001371: ADD
00001372: SLOAD
00001373: SWAP1
00001374: DUP1
00001375: PUSH1 0x06
00001377: ADD
00001378: SLOAD
00001379: SWAP1
0000137a: DUP1
0000137b: PUSH1 0x07
0000137d: ADD
0000137e: PUSH1 0x00
00001380: SWAP1
00001381: SLOAD
00001382: SWAP1
00001383: PUSH2 0x0100
00001386: EXP
00001387: SWAP1
00001388: DIV
00001389: PUSH1 0xff
0000138b: AND
0000138c: SWAP1
0000138d: POP
0000138e: DUP9
0000138f: JUMP
00001390: JUMPDEST
00001391: PUSH1 0x01
00001393: PUSH1 0x00
00001395: SWAP1
00001396: SLOAD
00001397: SWAP1
00001398: PUSH2 0x0100
0000139b: EXP
0000139c: SWAP1
0000139d: DIV
0000139e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013b3: AND
000013b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013c9: AND
000013ca: CALLER
000013cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013e0: AND
000013e1: EQ
000013e2: ISZERO
000013e3: ISZERO
000013e4: PUSH2 0x13ec
000013e7: JUMPI
000013e8: PUSH1 0x00
000013ea: DUP1
000013eb: REVERT
000013ec: JUMPDEST
000013ed: PUSH1 0x00
000013ef: PUSH1 0x01
000013f1: PUSH1 0x14
000013f3: PUSH2 0x0100
000013f6: EXP
000013f7: DUP2
000013f8: SLOAD
000013f9: DUP2
000013fa: PUSH1 0xff
000013fc: MUL
000013fd: NOT
000013fe: AND
000013ff: SWAP1
00001400: DUP4
00001401: ISZERO
00001402: ISZERO
00001403: MUL
00001404: OR
00001405: SWAP1
00001406: SSTORE
00001407: POP
00001408: JUMP
00001409: JUMPDEST
0000140a: PUSH1 0x00
0000140c: DUP1
0000140d: SWAP1
0000140e: SLOAD
0000140f: SWAP1
00001410: PUSH2 0x0100
00001413: EXP
00001414: SWAP1
00001415: DIV
00001416: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000142b: AND
0000142c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001441: AND
00001442: CALLER
00001443: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001458: AND
00001459: EQ
0000145a: ISZERO
0000145b: ISZERO
0000145c: PUSH2 0x1464
0000145f: JUMPI
00001460: PUSH1 0x00
00001462: DUP1
00001463: REVERT
00001464: JUMPDEST
00001465: DUP1
00001466: PUSH1 0x01
00001468: PUSH1 0x00
0000146a: PUSH2 0x0100
0000146d: EXP
0000146e: DUP2
0000146f: SLOAD
00001470: DUP2
00001471: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001486: MUL
00001487: NOT
00001488: AND
00001489: SWAP1
0000148a: DUP4
0000148b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014a0: AND
000014a1: MUL
000014a2: OR
000014a3: SWAP1
000014a4: SSTORE
000014a5: POP
000014a6: POP
000014a7: JUMP
000014a8: JUMPDEST
000014a9: PUSH1 0x00
000014ab: DUP1
000014ac: SWAP1
000014ad: SLOAD
000014ae: SWAP1
000014af: PUSH2 0x0100
000014b2: EXP
000014b3: SWAP1
000014b4: DIV
000014b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014ca: AND
000014cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014e0: AND
000014e1: CALLER
000014e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014f7: AND
000014f8: EQ
000014f9: ISZERO
000014fa: ISZERO
000014fb: PUSH2 0x1503
000014fe: JUMPI
000014ff: PUSH1 0x00
00001501: DUP1
00001502: REVERT
00001503: JUMPDEST
00001504: PUSH1 0x00
00001506: DUP1
00001507: SWAP1
00001508: SLOAD
00001509: SWAP1
0000150a: PUSH2 0x0100
0000150d: EXP
0000150e: SWAP1
0000150f: DIV
00001510: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001525: AND
00001526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000153b: AND
0000153c: SELFDESTRUCT
0000153d: JUMPDEST
0000153e: PUSH1 0x03
00001540: SLOAD
00001541: DUP2
00001542: JUMP
00001543: JUMPDEST
00001544: PUSH1 0x01
00001546: PUSH1 0x00
00001548: SWAP1
00001549: SLOAD
0000154a: SWAP1
0000154b: PUSH2 0x0100
0000154e: EXP
0000154f: SWAP1
00001550: DIV
00001551: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001566: AND
00001567: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000157c: AND
0000157d: CALLER
0000157e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001593: AND
00001594: EQ
00001595: ISZERO
00001596: ISZERO
00001597: PUSH2 0x159f
0000159a: JUMPI
0000159b: PUSH1 0x00
0000159d: DUP1
0000159e: REVERT
0000159f: JUMPDEST
000015a0: DUP1
000015a1: PUSH1 0x04
000015a3: DUP2
000015a4: SWAP1
000015a5: SSTORE
000015a6: POP
000015a7: POP
000015a8: JUMP
000015a9: JUMPDEST
000015aa: PUSH1 0x01
000015ac: PUSH1 0x00
000015ae: SWAP1
000015af: SLOAD
000015b0: SWAP1
000015b1: PUSH2 0x0100
000015b4: EXP
000015b5: SWAP1
000015b6: DIV
000015b7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015cc: AND
000015cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015e2: AND
000015e3: CALLER
000015e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015f9: AND
000015fa: EQ
000015fb: ISZERO
000015fc: ISZERO
000015fd: PUSH2 0x1605
00001600: JUMPI
00001601: PUSH1 0x00
00001603: DUP1
00001604: REVERT
00001605: JUMPDEST
00001606: DUP1
00001607: PUSH1 0x00
00001609: DUP2
0000160a: GT
0000160b: ISZERO
0000160c: PUSH2 0x1650
0000160f: JUMPI
00001610: DUP3
00001611: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001626: AND
00001627: PUSH2 0x08fc
0000162a: DUP4
0000162b: SWAP1
0000162c: DUP2
0000162d: ISZERO
0000162e: MUL
0000162f: SWAP1
00001630: PUSH1 0x40
00001632: MLOAD
00001633: PUSH1 0x00
00001635: PUSH1 0x40
00001637: MLOAD
00001638: DUP1
00001639: DUP4
0000163a: SUB
0000163b: DUP2
0000163c: DUP6
0000163d: DUP9
0000163e: DUP9
0000163f: CALL
00001640: SWAP4
00001641: POP
00001642: POP
00001643: POP
00001644: POP
00001645: ISZERO
00001646: ISZERO
00001647: PUSH2 0x164f
0000164a: JUMPI
0000164b: PUSH1 0x00
0000164d: DUP1
0000164e: REVERT
0000164f: JUMPDEST
00001650: JUMPDEST
00001651: POP
00001652: POP
00001653: POP
00001654: JUMP
00001655: JUMPDEST
00001656: PUSH1 0x01
00001658: PUSH1 0x00
0000165a: SWAP1
0000165b: SLOAD
0000165c: SWAP1
0000165d: PUSH2 0x0100
00001660: EXP
00001661: SWAP1
00001662: DIV
00001663: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001678: AND
00001679: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000168e: AND
0000168f: CALLER
00001690: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016a5: AND
000016a6: EQ
000016a7: ISZERO
000016a8: ISZERO
000016a9: PUSH2 0x16b1
000016ac: JUMPI
000016ad: PUSH1 0x00
000016af: DUP1
000016b0: REVERT
000016b1: JUMPDEST
000016b2: DUP1
000016b3: PUSH1 0x00
000016b5: DUP2
000016b6: GT
000016b7: ISZERO
000016b8: ISZERO
000016b9: PUSH2 0x16fe
000016bc: JUMPI
000016bd: DUP3
000016be: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016d3: AND
000016d4: PUSH2 0x08fc
000016d7: PUSH1 0x01
000016d9: SWAP1
000016da: DUP2
000016db: ISZERO
000016dc: MUL
000016dd: SWAP1
000016de: PUSH1 0x40
000016e0: MLOAD
000016e1: PUSH1 0x00
000016e3: PUSH1 0x40
000016e5: MLOAD
000016e6: DUP1
000016e7: DUP4
000016e8: SUB
000016e9: DUP2
000016ea: DUP6
000016eb: DUP9
000016ec: DUP9
000016ed: CALL
000016ee: SWAP4
000016ef: POP
000016f0: POP
000016f1: POP
000016f2: POP
000016f3: ISZERO
000016f4: ISZERO
000016f5: PUSH2 0x16fd
000016f8: JUMPI
000016f9: PUSH1 0x00
000016fb: DUP1
000016fc: REVERT
000016fd: JUMPDEST
000016fe: JUMPDEST
000016ff: POP
00001700: POP
00001701: POP
00001702: JUMP
00001703: JUMPDEST
00001704: DUP3
00001705: DUP1
00001706: SLOAD
00001707: PUSH1 0x01
00001709: DUP2
0000170a: PUSH1 0x01
0000170c: AND
0000170d: ISZERO
0000170e: PUSH2 0x0100
00001711: MUL
00001712: SUB
00001713: AND
00001714: PUSH1 0x02
00001716: SWAP1
00001717: DIV
00001718: SWAP1
00001719: PUSH1 0x00
0000171b: MSTORE
0000171c: PUSH1 0x20
0000171e: PUSH1 0x00
00001720: KECCAK256
00001721: SWAP1
00001722: PUSH1 0x1f
00001724: ADD
00001725: PUSH1 0x20
00001727: SWAP1
00001728: DIV
00001729: DUP2
0000172a: ADD
0000172b: SWAP3
0000172c: DUP3
0000172d: PUSH1 0x1f
0000172f: LT
00001730: PUSH2 0x1744
00001733: JUMPI
00001734: DUP1
00001735: MLOAD
00001736: PUSH1 0xff
00001738: NOT
00001739: AND
0000173a: DUP4
0000173b: DUP1
0000173c: ADD
0000173d: OR
0000173e: DUP6
0000173f: SSTORE
00001740: PUSH2 0x1772
00001743: JUMP
00001744: JUMPDEST
00001745: DUP3
00001746: DUP1
00001747: ADD
00001748: PUSH1 0x01
0000174a: ADD
0000174b: DUP6
0000174c: SSTORE
0000174d: DUP3
0000174e: ISZERO
0000174f: PUSH2 0x1772
00001752: JUMPI
00001753: SWAP2
00001754: DUP3
00001755: ADD
00001756: JUMPDEST
00001757: DUP3
00001758: DUP2
00001759: GT
0000175a: ISZERO
0000175b: PUSH2 0x1771
0000175e: JUMPI
0000175f: DUP3
00001760: MLOAD
00001761: DUP3
00001762: SSTORE
00001763: SWAP2
00001764: PUSH1 0x20
00001766: ADD
00001767: SWAP2
00001768: SWAP1
00001769: PUSH1 0x01
0000176b: ADD
0000176c: SWAP1
0000176d: PUSH2 0x1756
00001770: JUMP
00001771: JUMPDEST
00001772: JUMPDEST
00001773: POP
00001774: SWAP1
00001775: POP
00001776: PUSH2 0x177f
00001779: SWAP2
0000177a: SWAP1
0000177b: PUSH2 0x186d
0000177e: JUMP
0000177f: JUMPDEST
00001780: POP
00001781: SWAP1
00001782: JUMP
00001783: JUMPDEST
00001784: PUSH2 0x0100
00001787: PUSH1 0x40
00001789: MLOAD
0000178a: SWAP1
0000178b: DUP2
0000178c: ADD
0000178d: PUSH1 0x40
0000178f: MSTORE
00001790: DUP1
00001791: PUSH1 0x00
00001793: DUP2
00001794: MSTORE
00001795: PUSH1 0x20
00001797: ADD
00001798: PUSH1 0x00
0000179a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017af: AND
000017b0: DUP2
000017b1: MSTORE
000017b2: PUSH1 0x20
000017b4: ADD
000017b5: PUSH1 0x00
000017b7: DUP2
000017b8: MSTORE
000017b9: PUSH1 0x20
000017bb: ADD
000017bc: PUSH2 0x17c3
000017bf: PUSH2 0x1892
000017c2: JUMP
000017c3: JUMPDEST
000017c4: DUP2
000017c5: MSTORE
000017c6: PUSH1 0x20
000017c8: ADD
000017c9: PUSH2 0x17d0
000017cc: PUSH2 0x1892
000017cf: JUMP
000017d0: JUMPDEST
000017d1: DUP2
000017d2: MSTORE
000017d3: PUSH1 0x20
000017d5: ADD
000017d6: PUSH1 0x00
000017d8: DUP2
000017d9: MSTORE
000017da: PUSH1 0x20
000017dc: ADD
000017dd: PUSH1 0x00
000017df: DUP2
000017e0: MSTORE
000017e1: PUSH1 0x20
000017e3: ADD
000017e4: PUSH1 0x00
000017e6: ISZERO
000017e7: ISZERO
000017e8: DUP2
000017e9: MSTORE
000017ea: POP
000017eb: SWAP1
000017ec: JUMP
000017ed: JUMPDEST
000017ee: DUP3
000017ef: DUP1
000017f0: SLOAD
000017f1: PUSH1 0x01
000017f3: DUP2
000017f4: PUSH1 0x01
000017f6: AND
000017f7: ISZERO
000017f8: PUSH2 0x0100
000017fb: MUL
000017fc: SUB
000017fd: AND
000017fe: PUSH1 0x02
00001800: SWAP1
00001801: DIV
00001802: SWAP1
00001803: PUSH1 0x00
00001805: MSTORE
00001806: PUSH1 0x20
00001808: PUSH1 0x00
0000180a: KECCAK256
0000180b: SWAP1
0000180c: PUSH1 0x1f
0000180e: ADD
0000180f: PUSH1 0x20
00001811: SWAP1
00001812: DIV
00001813: DUP2
00001814: ADD
00001815: SWAP3
00001816: DUP3
00001817: PUSH1 0x1f
00001819: LT
0000181a: PUSH2 0x182e
0000181d: JUMPI
0000181e: DUP1
0000181f: MLOAD
00001820: PUSH1 0xff
00001822: NOT
00001823: AND
00001824: DUP4
00001825: DUP1
00001826: ADD
00001827: OR
00001828: DUP6
00001829: SSTORE
0000182a: PUSH2 0x185c
0000182d: JUMP
0000182e: JUMPDEST
0000182f: DUP3
00001830: DUP1
00001831: ADD
00001832: PUSH1 0x01
00001834: ADD
00001835: DUP6
00001836: SSTORE
00001837: DUP3
00001838: ISZERO
00001839: PUSH2 0x185c
0000183c: JUMPI
0000183d: SWAP2
0000183e: DUP3
0000183f: ADD
00001840: JUMPDEST
00001841: DUP3
00001842: DUP2
00001843: GT
00001844: ISZERO
00001845: PUSH2 0x185b
00001848: JUMPI
00001849: DUP3
0000184a: MLOAD
0000184b: DUP3
0000184c: SSTORE
0000184d: SWAP2
0000184e: PUSH1 0x20
00001850: ADD
00001851: SWAP2
00001852: SWAP1
00001853: PUSH1 0x01
00001855: ADD
00001856: SWAP1
00001857: PUSH2 0x1840
0000185a: JUMP
0000185b: JUMPDEST
0000185c: JUMPDEST
0000185d: POP
0000185e: SWAP1
0000185f: POP
00001860: PUSH2 0x1869
00001863: SWAP2
00001864: SWAP1
00001865: PUSH2 0x186d
00001868: JUMP
00001869: JUMPDEST
0000186a: POP
0000186b: SWAP1
0000186c: JUMP
0000186d: JUMPDEST
0000186e: PUSH2 0x188f
00001871: SWAP2
00001872: SWAP1
00001873: JUMPDEST
00001874: DUP1
00001875: DUP3
00001876: GT
00001877: ISZERO
00001878: PUSH2 0x188b
0000187b: JUMPI
0000187c: PUSH1 0x00
0000187e: DUP2
0000187f: PUSH1 0x00
00001881: SWAP1
00001882: SSTORE
00001883: POP
00001884: PUSH1 0x01
00001886: ADD
00001887: PUSH2 0x1873
0000188a: JUMP
0000188b: JUMPDEST
0000188c: POP
0000188d: SWAP1
0000188e: JUMP
0000188f: JUMPDEST
00001890: SWAP1
00001891: JUMP
00001892: JUMPDEST
00001893: PUSH1 0x20
00001895: PUSH1 0x40
00001897: MLOAD
00001898: SWAP1
00001899: DUP2
0000189a: ADD
0000189b: PUSH1 0x40
0000189d: MSTORE
0000189e: DUP1
0000189f: PUSH1 0x00
000018a1: DUP2
000018a2: MSTORE
000018a3: POP
000018a4: SWAP1
000018a5: JUMP
000018a6: STOP
000018a7: LOG1
000018a8: PUSH6 0x627a7a723058
000018af: KECCAK256
000018b0: DUP11
000018b1: SWAP16
000018b2: DIFFICULTY
000018b3: PC
000018b4: UNKNOWN(0xD9)
000018b5: BLOCKHASH
000018b6: UNKNOWN(0xFB)
000018b7: PUSH5 0x0e57bba853
000018bd: JUMP
000018be: UNKNOWN(0x0D)
000018bf: SWAP2
000018c0: TSTORE
000018c1: TIMESTAMP
000018c2: UNKNOWN(0xE3)
000018c3: UNKNOWN(0xA6)
000018c4: PUSH24

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other cast SELFDESTRUCT present 85 no
view
evidence_json
{
    "notes": "selfdestruct can remove contract code and send funds; review reachability",
    "selfdestruct_count": 1
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0
call_targets: 0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06"
    ],
    "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": "0xffffffff",
            "selector": "0xffffffff",
            "calldata_variants": [
                "0xffffffff",
                "0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x04ed00ac",
            "selector": "0x04ed00ac",
            "calldata_variants": [
                "0x04ed00ac",
                "0x04ed00ac0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18fd8903",
            "selector": "0x18fd8903",
            "calldata_variants": [
                "0x18fd8903",
                "0x18fd89030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x22f3e2d4",
            "selector": "0x22f3e2d4",
            "calldata_variants": [
                "0x22f3e2d4",
                "0x22f3e2d40000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x56b4997f",
            "selector": "0x56b4997f",
            "calldata_variants": [
                "0x56b4997f",
                "0x56b4997f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x570ca735",
            "selector": "0x570ca735",
            "calldata_variants": [
                "0x570ca735",
                "0x570ca7350000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x57402227",
            "selector": "0x57402227",
            "calldata_variants": [
                "0x57402227",
                "0x574022270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x609c9c71",
            "selector": "0x609c9c71",
            "calldata_variants": [
                "0x609c9c71",
                "0x609c9c710000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4454,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5695,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5869,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 3,
    "guards_detected": [
        {
            "pc": 329,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 1944,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 2549,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 2692,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4155,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4532,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4677,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4799,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5066,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5186,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5345,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5501,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5603,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5775,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ],
    "untrusted_call_count": 3
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0
call_targets: 0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06"
    ],
    "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": "0xffffffff",
            "selector": "0xffffffff",
            "calldata_variants": [
                "0xffffffff",
                "0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x04ed00ac",
            "selector": "0x04ed00ac",
            "calldata_variants": [
                "0x04ed00ac",
                "0x04ed00ac0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18fd8903",
            "selector": "0x18fd8903",
            "calldata_variants": [
                "0x18fd8903",
                "0x18fd89030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x22f3e2d4",
            "selector": "0x22f3e2d4",
            "calldata_variants": [
                "0x22f3e2d4",
                "0x22f3e2d40000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x56b4997f",
            "selector": "0x56b4997f",
            "calldata_variants": [
                "0x56b4997f",
                "0x56b4997f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x570ca735",
            "selector": "0x570ca735",
            "calldata_variants": [
                "0x570ca735",
                "0x570ca7350000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x57402227",
            "selector": "0x57402227",
            "calldata_variants": [
                "0x57402227",
                "0x574022270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x609c9c71",
            "selector": "0x609c9c71",
            "calldata_variants": [
                "0x609c9c71",
                "0x609c9c710000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4454,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5695,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5869,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 3,
    "guards_detected": [
        {
            "pc": 329,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 1944,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 2549,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 2692,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4155,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4532,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4677,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4799,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5066,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5186,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5345,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5501,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5603,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5775,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ]
}
medium other detector SELFDESTRUCT reachable 45 no no
view
trace_id: 0xddc8c1930598fc2d57e33ef877ac1b47661446e25ed096a6ed7774ea46a8be18
validation_json
{
    "sink": "SELFDESTRUCT",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0xddc8c1930598fc2d57e33ef877ac1b47661446e25ed096a6ed7774ea46a8be18",
    "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": "0xffffffff",
            "selector": "0xffffffff",
            "calldata_variants": [
                "0xffffffff",
                "0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x04ed00ac",
            "selector": "0x04ed00ac",
            "calldata_variants": [
                "0x04ed00ac",
                "0x04ed00ac0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18fd8903",
            "selector": "0x18fd8903",
            "calldata_variants": [
                "0x18fd8903",
                "0x18fd89030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x22f3e2d4",
            "selector": "0x22f3e2d4",
            "calldata_variants": [
                "0x22f3e2d4",
                "0x22f3e2d40000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x56b4997f",
            "selector": "0x56b4997f",
            "calldata_variants": [
                "0x56b4997f",
                "0x56b4997f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x570ca735",
            "selector": "0x570ca735",
            "calldata_variants": [
                "0x570ca735",
                "0x570ca7350000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x57402227",
            "selector": "0x57402227",
            "calldata_variants": [
                "0x57402227",
                "0x574022270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x609c9c71",
            "selector": "0x609c9c71",
            "calldata_variants": [
                "0x609c9c71",
                "0x609c9c710000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 329,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 1944,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 2549,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 2692,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4155,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4532,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4677,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 4799,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5066,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5186,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5345,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5501,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5603,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 5775,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ],
    "selfdestruct_count": 1
}