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

Analysis Run

4461348a-3101-4598-a289-fbd5b88aa3c5

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 3, 2026 2:03 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
Authorization based on tx.origin
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
31424 report.consolidate complete 1 / 1 3 months ago
77170 artifact.fetch complete 1 / 3 1 week ago
77171 tool.cast_disasm complete 1 / 3 1 week ago
77172 analysis.bundle complete 1 / 3 1 week ago
77173 capability.graph complete 1 / 3 1 week ago
77174 detector.run complete 1 / 3 1 week ago
77175 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
No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.
View stderr
[codex:987965] OpenAI Codex v0.77.0 (research preview)
[codex:987965] --------
[codex:987965] workdir: /tmp/codex-multi-cyu1asis
[codex:987965] model: gpt-5.2-codex
[codex:987965] provider: openai
[codex:987965] approval: never
[codex:987965] sandbox: read-only
[codex:987965] reasoning effort: xhigh
[codex:987965] reasoning summaries: auto
[codex:987965] session id: 019b818d-a960-7720-ba01-dff97449ab55
[codex:987965] --------
[codex:987965] user
[codex:987965] 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:987965] 
[codex:987965] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:987965] 
[codex:987965] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:987965] - Gas inefficiency, code quality, or best practices
[codex:987965] - Theoretical vulnerabilities without a clear extraction path
[codex:987965] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:987965] - Issues requiring social engineering or off-chain coordination
[codex:987965] 
[codex:987965] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:987965] - CALL/DELEGATECALL with controllable destination or calldata
[codex:987965] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:987965] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:987965] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:987965] - External calls before state updates (reentrancy)
[codex:987965] - SELFDESTRUCT with controllable beneficiary
[codex:987965] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:987965] 
[codex:987965] For each finding, you MUST explain:
[codex:987965] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:987965] 2. The concrete sequence of transactions to extract value
[codex:987965] 3. Why you believe this is exploitable (not just suspicious)
[codex:987965] 
[codex:987965] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:987965] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:987965] 
[codex:987965] Output MUST be valid JSON matching the provided schema.
[codex:987965] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:987965] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:987965] mcp startup: no servers
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Accessing BYTECODE_BUNDLE.txt**
[codex:987965] exec
[codex:987965] /bin/bash -lc ls in /tmp/codex-multi-cyu1asis succeeded in 5ms:
[codex:987965] BYTECODE_BUNDLE.txt
[codex:987965] codex-output-schema.json
[codex:987965] exec
[codex:987965] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-cyu1asis succeeded in 5ms:
[codex:987965] Runtime bytecode bundle for best-effort auditing.
[codex:987965] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:987965] 
[codex:987965] FILE: runtime_bytecode.hex
[codex:987965] 0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816301cce4be146116d357508063043fa11d1461131057806324057e1014610a115780632b7ac3f3146109bf57806330c2f42d1461094e5780633644e515146108f55780636b8a3fa21461089c578063715018a6146108005780638da5cb5b146107ae578063a654575d1461069e578063a7c3210214610634578063ac9650d81461032b578063af83a9fa146102d2578063cdae7c66146102095763f2fde38b146100cf573861000f565b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576101066117c3565b61010e611844565b73ffffffffffffffffffffffffffffffffffffffff80911690811561018057600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b600080fd5b346102045760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576102406117c3565b6024359081151580920361020457602073ffffffffffffffffffffffffffffffffffffffff7ff74a7e0211c0b5093895ff26748f0867f9ba95a25bf0ef5a83a1893584118d3c9261028f611844565b1692836000526003825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a2005b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760206040517f83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d48152f35b34610204576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045767ffffffffffffffff6004358181116102045761037c90369060040161176f565b909161038782611934565b9261039560405194856118f3565b8284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103c284611934565b018560005b8281106106255750505060005b83811061045757604080518781528651818901819052600092600582901b8301810191898b01918b9085015b82871061040d5785850386f35b909192938280610447837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a6001960301865288516117e6565b9601920196019592919092610400565b8060051b8201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112156102045782018035908482116102045787018136038113610204576104ac913691611986565b604051906104b9826118d7565b602782527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c888301527f206661696c6564000000000000000000000000000000000000000000000000006040830152303b156105a15790600080838a61052d95519101305af4610527611a00565b90611a30565b61053782876119bd565b5261054281866119bd565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610572576001016103d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b608488604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b606087820183015281016103c7565b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045773ffffffffffffffffffffffffffffffffffffffff6106806117c3565b166000526003602052602060ff604060002054166040519015158152f35b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576106d0611740565b7fe2d720c0ec6278814542be7b28dc57fd374b4c0920247e0ce632703fe8c7cc4c60606106fb6117a0565b927fffffffffffffffffffffffffffffffff0000000000000000000000000000000060443591169384600052600260205261073b60406000205415611a8e565b436107995784600052600260205260016040600020555b73ffffffffffffffffffffffffffffffffffffffff81169182610787575050345b6040519182526020820152336040820152a2005b6107949130903390611ea7565b610773565b84600052600260205243604060002055610752565b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457610837611844565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760206040517f128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b8152f35b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760206040517f48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf8152f35b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204577fffffffffffffffffffffffffffffffff000000000000000000000000000000006109a6611740565b1660005260016020526020604060002054604051908152f35b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346102045760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457610a48611740565b610a506117a0565b9073ffffffffffffffffffffffffffffffffffffffff60843516608435036102045767ffffffffffffffff60a435116102045736602360a4350112156102045767ffffffffffffffff60a43560040135116102045736602460a4356004013560a4350101116102045760c43567ffffffffffffffff811161020457610ad990369060040161176f565b9033600052600360205260ff6040600020541680156112fd575b15610204577fffffffffffffffffffffffffffffffff0000000000000000000000000000000083166000526001602052610b3260406000205415611a8e565b436112c6577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600052600160205260016040600020555b610b813660a43560040135602460a43501611986565b6020815191012091604051927f128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b60208501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008516604085015273ffffffffffffffffffffffffffffffffffffffff86166060850152604435608085015260643560a085015273ffffffffffffffffffffffffffffffffffffffff6084351660c085015260e084015260e083528261010081011067ffffffffffffffff610100850111176112975760209161010084016040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084610cf28151868301209473ffffffffffffffffffffffffffffffffffffffff60045416947f8394786f000000000000000000000000000000000000000000000000000000006101008501526101008401967f48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf6101048601611b0b565b0301906101008501905afa9081156110835760009161125f575b50156112015773ffffffffffffffffffffffffffffffffffffffff8216610e2c577fa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e906060907fffffffffffffffffffffffffffffffff0000000000000000000000000000000090600460a435013515610e0e57610dc5610d91606435604435611c17565b610da73660a43560040135602460a43501611986565b73ffffffffffffffffffffffffffffffffffffffff60843516611d3c565b505b73ffffffffffffffffffffffffffffffffffffffff60405195168552604435602086015273ffffffffffffffffffffffffffffffffffffffff6084351660408601521692a2005b610e27610e1f606435604435611c17565b608435611c24565b610dc7565b600460a43501351561117f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff87165afa9081156110835760009161114d575b50604435116110c95773ffffffffffffffffffffffffffffffffffffffff82163b15610204576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff608435811660048301526044803560248401526000918391908290849088165af18015611083576110ba575b50610f3c606435610da73660a43560040135602460a43501611986565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff87165afa80156110835761108f575b5073ffffffffffffffffffffffffffffffffffffffff82163b15610204576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff608435166004820152600060248201526000816044818373ffffffffffffffffffffffffffffffffffffffff88165af18015611083577fa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e926060927fffffffffffffffffffffffffffffffff0000000000000000000000000000000092611074575b50610dc7565b61107d906118c3565b8561106e565b6040513d6000823e3d90fd5b602090813d83116110b3575b6110a581836118f3565b810103126102045782610f93565b503d61109b565b6110c3906118c3565b82610f1f565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f53616665546f6b656e3a20696e73756666696369656e742062616c616e63652060448201527f666f7220617070726f76650000000000000000000000000000000000000000006064820152fd5b90506020813d602011611177575b81611168602093836118f3565b81010312610204575183610e92565b3d915061115b565b60607fffffffffffffffffffffffffffffffff000000000000000000000000000000007fa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e926111ea60443573ffffffffffffffffffffffffffffffffffffffff608435163088611ea7565b5060643515610dc757610e27606435608435611c24565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a20696e76616c6964207369676e6174757265730000000000006044820152fd5b61128a915060203d602011611290575b6101008161128082938386016118f3565b8301019101611af3565b83610d0c565b503d61126f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600052600160205243604060002055610b6b565b503260005260ff60406000205416610af3565b346102045760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760043573ffffffffffffffffffffffffffffffffffffffff8082168092036102045760243567ffffffffffffffff6044358181116102045761138590369060040161176f565b606492919235828111610204576113a090369060040161176f565b91909385421161167557604051602096878201907f83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d482528a60408401526060830152606082526080820195828710908711176112975785604052815190209487817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80846114787f48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf987f8394786f00000000000000000000000000000000000000000000000000000000988986528c8b60848601611b0b565b0301818d5afa91821561108357600092611642575b5050156115be5760045496871692836114cb575b7fffffffffffffffffffffffff000000000000000000000000000000000000000088168917600455005b906114e9879594939260405197889687958695865260048601611b0b565b03915afa90811561108357600091611591575b501561150d578080808080806114a1565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f4272696467653a20696e76616c6964207369676e617475726520666f72206f6c60448201527f64207665726966696572000000000000000000000000000000000000000000006064820152fd5b6115b19150823d84116115b7575b6115a981836118f3565b810190611af3565b846114fc565b503d61159f565b608486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f4272696467653a20696e76616c6964207369676e617475726520666f72206e6560448201527f77207665726966696572000000000000000000000000000000000000000000006064820152fd5b611666925060809089903d8b1161166d575b61165e82856118f3565b010190611af3565b898061148d565b3d9150611654565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4272696467653a206578706972656400000000000000000000000000000000006044820152fd5b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576020907fffffffffffffffffffffffffffffffff0000000000000000000000000000000061172e611740565b16600052600282526040600020548152f35b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361020457565b9181601f840112156102045782359167ffffffffffffffff8311610204576020808501948460051b01011161020457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361020457565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361020457565b919082519283825260005b8481106118305750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016117f1565b73ffffffffffffffffffffffffffffffffffffffff60005416330361186557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b67ffffffffffffffff811161129757604052565b6060810190811067ffffffffffffffff82111761129757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761129757604052565b67ffffffffffffffff81116112975760051b60200190565b67ffffffffffffffff811161129757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926119928261194c565b916119a060405193846118f3565b829481845281830111610204578281602093846000960137010152565b80518210156119d15760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3d15611a2b573d90611a118261194c565b91611a1f60405193846118f3565b82523d6000602084013e565b606090565b90919015611a3c575090565b815115611a4c5750805190602001fd5b611a8a906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906117e6565b0390fd5b15611a9557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4272696467653a207575696420616c72656164792075736564000000000000006044820152fd5b90816020910312610204575180151581036102045790565b9380929160608601908652602092838701526060604087015252608084019360808360051b82010194846000925b858410611b4a575050505050505090565b909192939495967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082820301845287357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181121561020457830186810191903567ffffffffffffffff81116102045780360383136102045787827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f848060019886989787985286860137600085828601015201160101990194019401929594939190611b39565b9190820180921161057257565b814710611cde57600080809373ffffffffffffffffffffffffffffffffffffffff8294165af1611c52611a00565b5015611c5a57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6040519192611d4a836118d7565b602983527f416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c60208401527f7565206661696c656400000000000000000000000000000000000000000000006040840152804710611e2357813b15611dc5578360009283926020611dc297519301915af1610527611a00565b90565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152fd5b9273ffffffffffffffffffffffffffffffffffffffff809416936040948551947f70a082310000000000000000000000000000000000000000000000000000000080875283600096169060049582878a015260209360249985818c818a5afa90811561212b579083918b916121b6575b5010612135578a5196838852811693848989015285888c818a5afa97881561212b578a986120f8575b503081036120815750853b1561207d578a517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116888201908152602081019290925290889082908190604001038183895af180156120735791888a92869594612051575b50505b8a5195869384928352898301525afa96871561204857508496612018575b50508403938411611fef5750505090565b6011907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9080929650813d8311612041575b61203081836118f3565b810103126102045751933880611fde565b503d612026565b513d86823e3d90fd5b909250612060919394506118c3565b61206f57908783928838611fbd565b8680fd5b8a513d8a823e3d90fd5b8880fd5b919050853b1561207d578a51917f23b872dd00000000000000000000000000000000000000000000000000000000835288830152838a8301526044820152878160648183895af1801561207357908992916120e1575b5090839291611fc0565b976120ef85949392996118c3565b979091926120d7565b9097508581813d8311612124575b61211081836118f3565b8101031261212057519638611f40565b8980fd5b503d612106565b8c513d8c823e3d90fd5b60848860288c888f51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f53616665546f6b656e3a20696e73756666696369656e742062616c616e63652060448201527f666f72206d6f76650000000000000000000000000000000000000000000000006064820152fd5b809250878092503d83116121e0575b6121cf81836118f3565b810103126121205782905138611f17565b503d6121c556fea26469706673582212205be635b01603a215078403ef71329b0b36e7ade37f78096f0f65d071d4d8293864736f6c63430008110033
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing bytecode for delegatecall exploits**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # simple disasm
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] # produce list with offsets and opcodes
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0, name, arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # find delegatecall occurrences
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965]     if name=='DELEGATECALL':
[codex:987965]         # show few ops around
[codex:987965]         start=max(0,i-10); end=min(len(out),i+10)
[codex:987965]         print('--- delegatecall at',hex(pc))
[codex:987965]         for j in range(start,end):
[codex:987965]             p,n,a=out[j]
[codex:987965]             if a is None:
[codex:987965]                 print(hex(p), n)
[codex:987965]             else:
[codex:987965]                 print(hex(p), n, a)
[codex:987965] 
[codex:987965] # find CALL with value non-zero? Hard to know.
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 33ms:
[codex:987965] --- delegatecall at 0x51f
[codex:987965] 0x513 OP80
[codex:987965] 0x514 OP83
[codex:987965] 0x515 OP8a
[codex:987965] 0x516 PUSH2 052d
[codex:987965] 0x519 OP95
[codex:987965] 0x51a MLOAD
[codex:987965] 0x51b OP91
[codex:987965] 0x51c ADD
[codex:987965] 0x51d ADDRESS
[codex:987965] 0x51e GAS
[codex:987965] 0x51f DELEGATECALL
[codex:987965] 0x520 PUSH2 0527
[codex:987965] 0x523 PUSH2 1a00
[codex:987965] 0x526 JUMP
[codex:987965] 0x527 JUMPDEST
[codex:987965] 0x528 OP90
[codex:987965] 0x529 PUSH2 1a30
[codex:987965] 0x52c JUMP
[codex:987965] 0x52d JUMPDEST
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Extending opcode mappings**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] 
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # helper to print window
[codex:987965] 
[codex:987965] def print_window(start_pc, window=40):
[codex:987965]     # find index by pc
[codex:987965]     idx=next(i for i,(pc,_,_) in enumerate(out) if pc>=start_pc)
[codex:987965]     for i in range(idx, min(len(out), idx+window)):
[codex:987965]         pc,n,a=out[i]
[codex:987965]         if a is None:
[codex:987965]             print(f'{pc:04x} {n}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {n} {a}')
[codex:987965] 
[codex:987965] # show around delegatecall
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965]     if name=='DELEGATECALL':
[codex:987965]         print('--- delegatecall at',hex(pc))
[codex:987965]         print_window(pc-40, 80)
[codex:987965]         print()
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] --- delegatecall at 0x51f
[codex:987965] 0504 PUSH1 40
[codex:987965] 0506 DUP4
[codex:987965] 0507 ADD
[codex:987965] 0508 MSTORE
[codex:987965] 0509 ADDRESS
[codex:987965] 050a EXTCODESIZE
[codex:987965] 050b ISZERO
[codex:987965] 050c PUSH2 05a1
[codex:987965] 050f JUMPI
[codex:987965] 0510 SWAP1
[codex:987965] 0511 PUSH1 00
[codex:987965] 0513 DUP1
[codex:987965] 0514 DUP4
[codex:987965] 0515 DUP11
[codex:987965] 0516 PUSH2 052d
[codex:987965] 0519 SWAP6
[codex:987965] 051a MLOAD
[codex:987965] 051b SWAP2
[codex:987965] 051c ADD
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing delegatecall usage and access control**
[codex:987965] 
[codex:987965] I'm trying to understand why delegatecall points to the contract itself and whether it relates to multi-sig verification or upgrade logic. There’s also a focus on confirming if sensitive setters like `setVerifier` are guarded by onlyOwner, because if not, that could allow malicious verifier changes enabling token drains. I plan to trace storage writes and their authorization checks by scanning opcode patterns around SSTORE instructions to clarify protection enforcement.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] 
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] # disasm
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # indexes of SSTORE
[codex:987965] sstore_idxs=[i for i,(pc,name,arg) in enumerate(out) if name=='SSTORE']
[codex:987965] 
[codex:987965] for idx in sstore_idxs:
[codex:987965]     pc,_,_=out[idx]
[codex:987965]     print('--- SSTORE at',hex(pc))
[codex:987965]     # print a small window
[codex:987965]     start=max(0,idx-12)
[codex:987965]     end=min(len(out),idx+8)
[codex:987965]     for j in range(start,end):
[codex:987965]         p,n,a=out[j]
[codex:987965]         if a is None:
[codex:987965]             print(f'{p:04x} {n}')
[codex:987965]         else:
[codex:987965]             print(f'{p:04x} {n} {a}')
[codex:987965]     print()
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 27ms:
[codex:987965] --- SSTORE at 0x158
[codex:987965] 0128 DUP2
[codex:987965] 0129 ISZERO
[codex:987965] 012a PUSH2 0180
[codex:987965] 012d JUMPI
[codex:987965] 012e PUSH1 00
[codex:987965] 0130 SLOAD
[codex:987965] 0131 DUP3
[codex:987965] 0132 PUSH32 ffffffffffffffffffffffff0000000000000000000000000000000000000000
[codex:987965] 0153 DUP3
[codex:987965] 0154 AND
[codex:987965] 0155 OR
[codex:987965] 0156 PUSH1 00
[codex:987965] 0158 SSTORE
[codex:987965] 0159 AND
[codex:987965] 015a PUSH32 8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
[codex:987965] 017b PUSH1 00
[codex:987965] 017d DUP1
[codex:987965] 017e LOG3
[codex:987965] 017f STOP
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing SSTORE usage and access control**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] 
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print around 0x1844
[codex:987965] start=0x1830
[codex:987965] end=0x1875
[codex:987965] for pc,name,arg in out:
[codex:987965]     if start<=pc<=end:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 1830 JUMPDEST
[codex:987965] 1831 PUSH1 20
[codex:987965] 1833 DUP2
[codex:987965] 1834 DUP4
[codex:987965] 1835 ADD
[codex:987965] 1836 DUP2
[codex:987965] 1837 ADD
[codex:987965] 1838 MLOAD
[codex:987965] 1839 DUP5
[codex:987965] 183a DUP4
[codex:987965] 183b ADD
[codex:987965] 183c DUP3
[codex:987965] 183d ADD
[codex:987965] 183e MSTORE
[codex:987965] 183f ADD
[codex:987965] 1840 PUSH2 17f1
[codex:987965] 1843 JUMP
[codex:987965] 1844 JUMPDEST
[codex:987965] 1845 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 185a PUSH1 00
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing onlyOwner jump references**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] 
[codex:987965] # disasm
[codex:987965] opcodes={**{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},**{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},**{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},**{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg))
[codex:987965] 
[codex:987965] # find sequences PUSH2 0x1844 JUMP
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965]     if name=='PUSH2' and arg==bytes.fromhex('1844'):
[codex:987965]         # check next opcode is JUMP
[codex:987965]         if i+1<len(out) and out[i+1][1]=='JUMP':
[codex:987965]             print('jump to 0x1844 at',hex(pc))
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] jump to 0x1844 at 0x10a
[codex:987965] jump to 0x1844 at 0x28b
[codex:987965] jump to 0x1844 at 0x833
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Mapping onlyOwner usage and ORIGIN inspection**
[codex:987965] 
[codex:987965] I'm tracking which functions use the onlyOwner guard—transferOwnership, renounceOwnership, and another likely setVerifier-type function at 0x0209—and then looking for any suspicious uses of SSTORE or delegatecall outside those. The use of ORIGIN (tx.origin) near 0x12fe jumps out as a potential security risk, so I'm planning a detailed inspection around 0x12c0 to 0x1330 to see how that factors into signature verification or token transfers.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print around 0x12c0-0x1340
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x12c0<=pc<=0x1340:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 27ms:
[codex:987965] 12c0 MSTORE
[codex:987965] 12c1 PUSH1 24
[codex:987965] 12c3 PUSH1 00
[codex:987965] 12c5 REVERT
[codex:987965] 12c6 JUMPDEST
[codex:987965] 12c7 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 12e8 DUP4
[codex:987965] 12e9 AND
[codex:987965] 12ea PUSH1 00
[codex:987965] 12ec MSTORE
[codex:987965] 12ed PUSH1 01
[codex:987965] 12ef PUSH1 20
[codex:987965] 12f1 MSTORE
[codex:987965] 12f2 NUMBER
[codex:987965] 12f3 PUSH1 40
[codex:987965] 12f5 PUSH1 00
[codex:987965] 12f7 SHA3
[codex:987965] 12f8 SSTORE
[codex:987965] 12f9 PUSH2 0b6b
[codex:987965] 12fc JUMP
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing storage slot computation and tx.origin usage**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print around 0x0a11 function entry 0x0a11 is JUMPDEST? We'll show from 0x0a00 to 0x0c00
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x0a00<=pc<=0x0c00:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0a06 PUSH1 04
[codex:987965] 0a08 SLOAD
[codex:987965] 0a09 AND
[codex:987965] 0a0a PUSH1 40
[codex:987965] 0a0c MLOAD
[codex:987965] 0a0d SWAP1
[codex:987965] 0a0e DUP2
[codex:987965] 0a0f MSTORE
[codex:987965] 0a10 RETURN
[codex:987965] 0a11 JUMPDEST
[codex:987965] 0a12 CALLVALUE
[codex:987965] 0a13 PUSH2 0204
[codex:987965] 0a16 JUMPI
[codex:987965] 0a17 PUSH1 e0
[codex:987965] 0a19 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0a3a CALLDATASIZE
[codex:987965] 0a3b ADD
[codex:987965] 0a3c SLT
[codex:987965] 0a3d PUSH2 0204
[codex:987965] 0a40 JUMPI
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing complex function structure**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print around 0xb80 to 0xd40
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x0b80<=pc<=0x0d40:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0b80 JUMP
[codex:987965] 0b81 JUMPDEST
[codex:987965] 0b82 PUSH1 20
[codex:987965] 0b84 DUP2
[codex:987965] 0b85 MLOAD
[codex:987965] 0b86 SWAP2
[codex:987965] 0b87 ADD
[codex:987965] 0b88 SHA3
[codex:987965] 0b89 SWAP2
[codex:987965] 0b8a PUSH1 40
[codex:987965] 0b8c MLOAD
[codex:987965] 0b8d SWAP3
[codex:987965] 0b8e PUSH32 128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b
[codex:987965] 0baf PUSH1 20
[codex:987965] 0bb1 DUP6
[codex:987965] 0bb2 ADD
[codex:987965] 0bb3 MSTORE
[codex:987965] 0bb4 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 0bd5 DUP6
[codex:987965] 0bd6 AND
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing signature verification and reentrancy**
[codex:987965] 
[codex:987965] I'm piecing together how this function verifies signatures using STATICCALL with specific selectors and addresses stored in contract storage. I see it tracks UUID usage in a mapping before signature checks, which likely protects against reentrancy by marking UUIDs early. There might be some special caller conditions that bypass signature verification, so I'll keep exploring the code to confirm how signature validation and token transfers are handled in detail.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print around 0xd0c to 0xf80
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x0d0c<=pc<=0x0f80:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0d0c JUMPDEST
[codex:987965] 0d0d POP
[codex:987965] 0d0e ISZERO
[codex:987965] 0d0f PUSH2 1201
[codex:987965] 0d12 JUMPI
[codex:987965] 0d13 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 0d28 DUP3
[codex:987965] 0d29 AND
[codex:987965] 0d2a PUSH2 0e2c
[codex:987965] 0d2d JUMPI
[codex:987965] 0d2e PUSH32 a3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e
[codex:987965] 0d4f SWAP1
[codex:987965] 0d50 PUSH1 60
[codex:987965] 0d52 SWAP1
[codex:987965] 0d53 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 0d74 SWAP1
[codex:987965] 0d75 PUSH1 04
[codex:987965] 0d77 PUSH1 a4
[codex:987965] 0d79 CALLDATALOAD
[codex:987965] 0d7a ADD
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Scrolling through address range**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print around 0x0f80 to 0x1110
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x0f80<=pc<=0x1110:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 32ms:
[codex:987965] 0f85 DUP8
[codex:987965] 0f86 AND
[codex:987965] 0f87 GAS
[codex:987965] 0f88 STATICCALL
[codex:987965] 0f89 DUP1
[codex:987965] 0f8a ISZERO
[codex:987965] 0f8b PUSH2 1083
[codex:987965] 0f8e JUMPI
[codex:987965] 0f8f PUSH2 108f
[codex:987965] 0f92 JUMPI
[codex:987965] 0f93 JUMPDEST
[codex:987965] 0f94 POP
[codex:987965] 0f95 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 0faa DUP3
[codex:987965] 0fab AND
[codex:987965] 0fac EXTCODESIZE
[codex:987965] 0fad ISZERO
[codex:987965] 0fae PUSH2 0204
[codex:987965] 0fb1 JUMPI
[codex:987965] 0fb2 PUSH1 40
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Investigating token transfer authorization risks**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x1460<=pc<=0x1520:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 30ms:
[codex:987965] 146a SWAP9
[codex:987965] 146b DUP10
[codex:987965] 146c DUP7
[codex:987965] 146d MSTORE
[codex:987965] 146e DUP13
[codex:987965] 146f DUP12
[codex:987965] 1470 PUSH1 84
[codex:987965] 1472 DUP7
[codex:987965] 1473 ADD
[codex:987965] 1474 PUSH2 1b0b
[codex:987965] 1477 JUMP
[codex:987965] 1478 JUMPDEST
[codex:987965] 1479 SUB
[codex:987965] 147a ADD
[codex:987965] 147b DUP2
[codex:987965] 147c DUP14
[codex:987965] 147d GAS
[codex:987965] 147e STATICCALL
[codex:987965] 147f SWAP2
[codex:987965] 1480 DUP3
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing function boundaries and verifier update**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x1360<=pc<=0x146a:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 1361 JUMPI
[codex:987965] 1362 PUSH1 24
[codex:987965] 1364 CALLDATALOAD
[codex:987965] 1365 PUSH8 ffffffffffffffff
[codex:987965] 136e PUSH1 44
[codex:987965] 1370 CALLDATALOAD
[codex:987965] 1371 DUP2
[codex:987965] 1372 DUP2
[codex:987965] 1373 GT
[codex:987965] 1374 PUSH2 0204
[codex:987965] 1377 JUMPI
[codex:987965] 1378 PUSH2 1385
[codex:987965] 137b SWAP1
[codex:987965] 137c CALLDATASIZE
[codex:987965] 137d SWAP1
[codex:987965] 137e PUSH1 04
[codex:987965] 1380 ADD
[codex:987965] 1381 PUSH2 176f
[codex:987965] 1384 JUMP
[codex:987965] 1385 JUMPDEST
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Mapping function behaviors in disassembly**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] # disasm to list
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # print from 0x032b to 0x0625
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x032b<=pc<=0x0625:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 29ms:
[codex:987965] 032b JUMPDEST
[codex:987965] 032c CALLVALUE
[codex:987965] 032d PUSH2 0204
[codex:987965] 0330 JUMPI
[codex:987965] 0331 PUSH1 20
[codex:987965] 0333 DUP1
[codex:987965] 0334 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0355 CALLDATASIZE
[codex:987965] 0356 ADD
[codex:987965] 0357 SLT
[codex:987965] 0358 PUSH2 0204
[codex:987965] 035b JUMPI
[codex:987965] 035c PUSH8 ffffffffffffffff
[codex:987965] 0365 PUSH1 04
[codex:987965] 0367 CALLDATALOAD
[codex:987965] 0368 DUP2
[codex:987965] 0369 DUP2
[codex:987965] 036a GT
[codex:987965] 036b PUSH2 0204
[codex:987965] 036e JUMPI
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing delegatecall-based multicall function**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x0200<=pc<=0x02d5:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 30ms:
[codex:987965] 0200 DUP3
[codex:987965] 0201 ADD
[codex:987965] 0202 MSTORE
[codex:987965] 0203 REVERT
[codex:987965] 0204 JUMPDEST
[codex:987965] 0205 PUSH1 00
[codex:987965] 0207 DUP1
[codex:987965] 0208 REVERT
[codex:987965] 0209 JUMPDEST
[codex:987965] 020a CALLVALUE
[codex:987965] 020b PUSH2 0204
[codex:987965] 020e JUMPI
[codex:987965] 020f PUSH1 40
[codex:987965] 0211 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0232 CALLDATASIZE
[codex:987965] 0233 ADD
[codex:987965] 0234 SLT
[codex:987965] 0235 PUSH2 0204
[codex:987965] 0238 JUMPI
[codex:987965] 0239 PUSH2 0240
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing calldata handling and authorization check**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x02d2<=pc<=0x032b:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] 02d2 JUMPDEST
[codex:987965] 02d3 CALLVALUE
[codex:987965] 02d4 PUSH2 0204
[codex:987965] 02d7 JUMPI
[codex:987965] 02d8 PUSH1 00
[codex:987965] 02da PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 02fb CALLDATASIZE
[codex:987965] 02fc ADD
[codex:987965] 02fd SLT
[codex:987965] 02fe PUSH2 0204
[codex:987965] 0301 JUMPI
[codex:987965] 0302 PUSH1 20
[codex:987965] 0304 PUSH1 40
[codex:987965] 0306 MLOAD
[codex:987965] 0307 PUSH32 83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d4
[codex:987965] 0328 DUP2
[codex:987965] 0329 MSTORE
[codex:987965] 032a RETURN
[codex:987965] 032b JUMPDEST
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing potential exploit vectors**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] 
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] # functions around 0x0634 to 0x07ae
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x0634<=pc<=0x07c0:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0634 JUMPDEST
[codex:987965] 0635 CALLVALUE
[codex:987965] 0636 PUSH2 0204
[codex:987965] 0639 JUMPI
[codex:987965] 063a PUSH1 20
[codex:987965] 063c PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 065d CALLDATASIZE
[codex:987965] 065e ADD
[codex:987965] 065f SLT
[codex:987965] 0660 PUSH2 0204
[codex:987965] 0663 JUMPI
[codex:987965] 0664 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 0679 PUSH2 0680
[codex:987965] 067c PUSH2 17c3
[codex:987965] 067f JUMP
[codex:987965] 0680 JUMPDEST
[codex:987965] 0681 AND
[codex:987965] 0682 PUSH1 00
[codex:987965] 0684 MSTORE
[codex:987965] 0685 PUSH1 03
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing token deposit and transfer functions**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] 
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965]     if name=='CALL':
[codex:987965]         print('--- CALL at',hex(pc))
[codex:987965]         for j in range(max(0,i-8), min(len(out), i+8)):
[codex:987965]             p,n,a=out[j]
[codex:987965]             if a:
[codex:987965]                 print(f'{p:04x} {n} {a}')
[codex:987965]             else:
[codex:987965]                 print(f'{p:04x} {n}')
[codex:987965]         print()
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] --- CALL at 0xf14
[codex:987965] 0f0c SWAP1
[codex:987965] 0f0d DUP3
[codex:987965] 0f0e SWAP1
[codex:987965] 0f0f DUP5
[codex:987965] 0f10 SWAP1
[codex:987965] 0f11 DUP9
[codex:987965] 0f12 AND
[codex:987965] 0f13 GAS
[codex:987965] 0f14 CALL
[codex:987965] 0f15 DUP1
[codex:987965] 0f16 ISZERO
[codex:987965] 0f17 PUSH2 1083
[codex:987965] 0f1a JUMPI
[codex:987965] 0f1b PUSH2 10ba
[codex:987965] 0f1e JUMPI
[codex:987965] 0f1f JUMPDEST
[codex:987965] 
[codex:987965] --- CALL at 0x101c
[codex:987965] 0fff DUP2
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing internal token and ETH transfer calls**
[codex:987965] 
[codex:987965] I'm examining several internal calls related to token approvals and safe ETH/token transfers, focusing on whether user inputs can manipulate transfer values or recipients without authorization. I’ll inspect functions around specific addresses like 0x1c17 and 0x116d3 to understand any potential vulnerabilities, especially around withdrawal mechanisms that might allow unauthorized fund extraction.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x116d3<=pc<=0x11850:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] 
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Checking bytecode length**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] import re
[codex:987965] from binascii import unhexlify
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] print('len', len(hexstr)//2)
[codex:987965] print('max pc', hex(len(hexstr)//2-1))
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 25ms:
[codex:987965] len 8733
[codex:987965] max pc 0x221c
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Clarifying jump destination in bytecode**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x16d3<=pc<=0x1760:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 31ms:
[codex:987965] 16d3 JUMPDEST
[codex:987965] 16d4 CALLVALUE
[codex:987965] 16d5 PUSH2 0204
[codex:987965] 16d8 JUMPI
[codex:987965] 16d9 PUSH1 20
[codex:987965] 16db PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 16fc CALLDATASIZE
[codex:987965] 16fd ADD
[codex:987965] 16fe SLT
[codex:987965] 16ff PUSH2 0204
[codex:987965] 1702 JUMPI
[codex:987965] 1703 PUSH1 20
[codex:987965] 1705 SWAP1
[codex:987965] 1706 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 1727 PUSH2 172e
[codex:987965] 172a PUSH2 1740
[codex:987965] 172d JUMP
[codex:987965] 172e JUMPDEST
[codex:987965] 172f AND
[codex:987965] 1730 PUSH1 00
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing contract functions for vulnerabilities**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x094e<=pc<=0x0a20:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 094e JUMPDEST
[codex:987965] 094f CALLVALUE
[codex:987965] 0950 PUSH2 0204
[codex:987965] 0953 JUMPI
[codex:987965] 0954 PUSH1 20
[codex:987965] 0956 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0977 CALLDATASIZE
[codex:987965] 0978 ADD
[codex:987965] 0979 SLT
[codex:987965] 097a PUSH2 0204
[codex:987965] 097d JUMPI
[codex:987965] 097e PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 099f PUSH2 09a6
[codex:987965] 09a2 PUSH2 1740
[codex:987965] 09a5 JUMP
[codex:987965] 09a6 JUMPDEST
[codex:987965] 09a7 AND
[codex:987965] 09a8 PUSH1 00
[codex:987965] 09aa MSTORE
[codex:987965] 09ab PUSH1 01
[codex:987965] Reconnecting... 1/5
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing signature and replay protections**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] print('SELFDESTRUCT occurrences', bytecode.count(bytes([0xff])))
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] SELFDESTRUCT occurrences 1792
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Checking for SELFDESTRUCT opcode**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # simple disasm to find SELFDESTRUCT op
[codex:987965] pc=0
[codex:987965] selfdes=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     if op==0xff:
[codex:987965]         selfdes.append(pc)
[codex:987965]     pc+=1
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         pc+=op-0x5f
[codex:987965] 
[codex:987965] print(selfdes[:10], 'count', len(selfdes))
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 25ms:
[codex:987965] [] count 0
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing delegatecall and verifier update risks**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965]     0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:987965]     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:987965]     0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965]     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:987965]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965] 
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965]     op=bytecode[pc]
[codex:987965]     name=opcodes.get(op, f'OP{op:02x}')
[codex:987965]     pc0=pc
[codex:987965]     pc+=1
[codex:987965]     arg=None
[codex:987965]     if 0x60<=op<=0x7f:
[codex:987965]         n=op-0x5f
[codex:987965]         arg=bytecode[pc:pc+n]
[codex:987965]         pc+=n
[codex:987965]     out.append((pc0,name,arg.hex() if arg else None))
[codex:987965] 
[codex:987965] for pc,name,arg in out:
[codex:987965]     if 0x1310<=pc<=0x16d2:
[codex:987965]         if arg:
[codex:987965]             print(f'{pc:04x} {name} {arg}')
[codex:987965]         else:
[codex:987965]             print(f'{pc:04x} {name}')
[codex:987965] 
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 1310 JUMPDEST
[codex:987965] 1311 CALLVALUE
[codex:987965] 1312 PUSH2 0204
[codex:987965] 1315 JUMPI
[codex:987965] 1316 PUSH1 80
[codex:987965] 1318 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 1339 CALLDATASIZE
[codex:987965] 133a ADD
[codex:987965] 133b SLT
[codex:987965] 133c PUSH2 0204
[codex:987965] 133f JUMPI
[codex:987965] 1340 PUSH1 04
[codex:987965] 1342 CALLDATALOAD
[codex:987965] 1343 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 1358 DUP1
[codex:987965] 1359 DUP3
[codex:987965] 135a AND
[codex:987965] 135b DUP1
[codex:987965] 135c SWAP3
[codex:987965] 135d SUB
[codex:987965] 
[codex:987965] thinking
[codex:987965] **Analyzing updateVerifier function security**
[codex:987965] 
[codex:987965] I’m carefully reviewing the updateVerifier function and its signature checks, focusing on expiry validation, staticcall verifications to old and new verifiers, and whether it protects against zero-address assignment. Although no obvious exploit or bypass surfaces from the bytecode, I want to finalize a strict JSON summary indicating no exploitable profit path was found. This ensures clear, concise reporting while strictly adhering to the user’s schema requirements.
[codex:987965] codex
[codex:987965] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.","findings":[]}
[codex:987965] tokens used
[codex:987965] 103,632
[codex:987965] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-03T02:03:59.243467+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.",
    "raw_final": {
        "summary": "No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
14
EXT*/BALANCE
6
Total opcodes
3336
Flags
delegatecall_present heavy_ext_balance_usage call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: DUP1
00000003: PUSH1 0x40
00000005: MSTORE
00000006: PUSH1 0x04
00000008: CALLDATASIZE
00000009: LT
0000000a: ISZERO
0000000b: PUSH2 0x001d
0000000e: JUMPI
0000000f: JUMPDEST
00000010: POP
00000011: CALLDATASIZE
00000012: ISZERO
00000013: PUSH2 0x001b
00000016: JUMPI
00000017: PUSH1 0x00
00000019: DUP1
0000001a: REVERT
0000001b: JUMPDEST
0000001c: STOP
0000001d: JUMPDEST
0000001e: PUSH1 0x00
00000020: CALLDATALOAD
00000021: PUSH1 0xe0
00000023: SHR
00000024: SWAP1
00000025: DUP2
00000026: PUSH4 0x01cce4be
0000002b: EQ
0000002c: PUSH2 0x16d3
0000002f: JUMPI
00000030: POP
00000031: DUP1
00000032: PUSH4 0x043fa11d
00000037: EQ
00000038: PUSH2 0x1310
0000003b: JUMPI
0000003c: DUP1
0000003d: PUSH4 0x24057e10
00000042: EQ
00000043: PUSH2 0x0a11
00000046: JUMPI
00000047: DUP1
00000048: PUSH4 0x2b7ac3f3
0000004d: EQ
0000004e: PUSH2 0x09bf
00000051: JUMPI
00000052: DUP1
00000053: PUSH4 0x30c2f42d
00000058: EQ
00000059: PUSH2 0x094e
0000005c: JUMPI
0000005d: DUP1
0000005e: PUSH4 0x3644e515
00000063: EQ
00000064: PUSH2 0x08f5
00000067: JUMPI
00000068: DUP1
00000069: PUSH4 0x6b8a3fa2
0000006e: EQ
0000006f: PUSH2 0x089c
00000072: JUMPI
00000073: DUP1
00000074: PUSH4 0x715018a6
00000079: EQ
0000007a: PUSH2 0x0800
0000007d: JUMPI
0000007e: DUP1
0000007f: PUSH4 0x8da5cb5b
00000084: EQ
00000085: PUSH2 0x07ae
00000088: JUMPI
00000089: DUP1
0000008a: PUSH4 0xa654575d
0000008f: EQ
00000090: PUSH2 0x069e
00000093: JUMPI
00000094: DUP1
00000095: PUSH4 0xa7c32102
0000009a: EQ
0000009b: PUSH2 0x0634
0000009e: JUMPI
0000009f: DUP1
000000a0: PUSH4 0xac9650d8
000000a5: EQ
000000a6: PUSH2 0x032b
000000a9: JUMPI
000000aa: DUP1
000000ab: PUSH4 0xaf83a9fa
000000b0: EQ
000000b1: PUSH2 0x02d2
000000b4: JUMPI
000000b5: DUP1
000000b6: PUSH4 0xcdae7c66
000000bb: EQ
000000bc: PUSH2 0x0209
000000bf: JUMPI
000000c0: PUSH4 0xf2fde38b
000000c5: EQ
000000c6: PUSH2 0x00cf
000000c9: JUMPI
000000ca: CODESIZE
000000cb: PUSH2 0x000f
000000ce: JUMP
000000cf: JUMPDEST
000000d0: CALLVALUE
000000d1: PUSH2 0x0204
000000d4: JUMPI
000000d5: PUSH1 0x20
000000d7: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000000f8: CALLDATASIZE
000000f9: ADD
000000fa: SLT
000000fb: PUSH2 0x0204
000000fe: JUMPI
000000ff: PUSH2 0x0106
00000102: PUSH2 0x17c3
00000105: JUMP
00000106: JUMPDEST
00000107: PUSH2 0x010e
0000010a: PUSH2 0x1844
0000010d: JUMP
0000010e: JUMPDEST
0000010f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000124: DUP1
00000125: SWAP2
00000126: AND
00000127: SWAP1
00000128: DUP2
00000129: ISZERO
0000012a: PUSH2 0x0180
0000012d: JUMPI
0000012e: PUSH1 0x00
00000130: SLOAD
00000131: DUP3
00000132: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000153: DUP3
00000154: AND
00000155: OR
00000156: PUSH1 0x00
00000158: SSTORE
00000159: AND
0000015a: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
0000017b: PUSH1 0x00
0000017d: DUP1
0000017e: LOG3
0000017f: STOP
00000180: JUMPDEST
00000181: PUSH1 0x84
00000183: PUSH1 0x40
00000185: MLOAD
00000186: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000001a7: DUP2
000001a8: MSTORE
000001a9: PUSH1 0x20
000001ab: PUSH1 0x04
000001ad: DUP3
000001ae: ADD
000001af: MSTORE
000001b0: PUSH1 0x26
000001b2: PUSH1 0x24
000001b4: DUP3
000001b5: ADD
000001b6: MSTORE
000001b7: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061
000001d8: PUSH1 0x44
000001da: DUP3
000001db: ADD
000001dc: MSTORE
000001dd: PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000
000001fe: PUSH1 0x64
00000200: DUP3
00000201: ADD
00000202: MSTORE
00000203: REVERT
00000204: JUMPDEST
00000205: PUSH1 0x00
00000207: DUP1
00000208: REVERT
00000209: JUMPDEST
0000020a: CALLVALUE
0000020b: PUSH2 0x0204
0000020e: JUMPI
0000020f: PUSH1 0x40
00000211: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
00000232: CALLDATASIZE
00000233: ADD
00000234: SLT
00000235: PUSH2 0x0204
00000238: JUMPI
00000239: PUSH2 0x0240
0000023c: PUSH2 0x17c3
0000023f: JUMP
00000240: JUMPDEST
00000241: PUSH1 0x24
00000243: CALLDATALOAD
00000244: SWAP1
00000245: DUP2
00000246: ISZERO
00000247: ISZERO
00000248: DUP1
00000249: SWAP3
0000024a: SUB
0000024b: PUSH2 0x0204
0000024e: JUMPI
0000024f: PUSH1 0x20
00000251: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000266: PUSH32 0xf74a7e0211c0b5093895ff26748f0867f9ba95a25bf0ef5a83a1893584118d3c
00000287: SWAP3
00000288: PUSH2 0x028f
0000028b: PUSH2 0x1844
0000028e: JUMP
0000028f: JUMPDEST
00000290: AND
00000291: SWAP3
00000292: DUP4
00000293: PUSH1 0x00
00000295: MSTORE
00000296: PUSH1 0x03
00000298: DUP3
00000299: MSTORE
0000029a: PUSH1 0x40
0000029c: PUSH1 0x00
0000029e: KECCAK256
0000029f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
000002c0: DUP2
000002c1: SLOAD
000002c2: AND
000002c3: PUSH1 0xff
000002c5: DUP4
000002c6: AND
000002c7: OR
000002c8: SWAP1
000002c9: SSTORE
000002ca: PUSH1 0x40
000002cc: MLOAD
000002cd: SWAP1
000002ce: DUP2
000002cf: MSTORE
000002d0: LOG2
000002d1: STOP
000002d2: JUMPDEST
000002d3: CALLVALUE
000002d4: PUSH2 0x0204
000002d7: JUMPI
000002d8: PUSH1 0x00
000002da: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000002fb: CALLDATASIZE
000002fc: ADD
000002fd: SLT
000002fe: PUSH2 0x0204
00000301: JUMPI
00000302: PUSH1 0x20
00000304: PUSH1 0x40
00000306: MLOAD
00000307: PUSH32 0x83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d4
00000328: DUP2
00000329: MSTORE
0000032a: RETURN
0000032b: JUMPDEST
0000032c: CALLVALUE
0000032d: PUSH2 0x0204
00000330: JUMPI
00000331: PUSH1 0x20
00000333: DUP1
00000334: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
00000355: CALLDATASIZE
00000356: ADD
00000357: SLT
00000358: PUSH2 0x0204
0000035b: JUMPI
0000035c: PUSH8 0xffffffffffffffff
00000365: PUSH1 0x04
00000367: CALLDATALOAD
00000368: DUP2
00000369: DUP2
0000036a: GT
0000036b: PUSH2 0x0204
0000036e: JUMPI
0000036f: PUSH2 0x037c
00000372: SWAP1
00000373: CALLDATASIZE
00000374: SWAP1
00000375: PUSH1 0x04
00000377: ADD
00000378: PUSH2 0x176f
0000037b: JUMP
0000037c: JUMPDEST
0000037d: SWAP1
0000037e: SWAP2
0000037f: PUSH2 0x0387
00000382: DUP3
00000383: PUSH2 0x1934
00000386: JUMP
00000387: JUMPDEST
00000388: SWAP3
00000389: PUSH2 0x0395
0000038c: PUSH1 0x40
0000038e: MLOAD
0000038f: SWAP5
00000390: DUP6
00000391: PUSH2 0x18f3
00000394: JUMP
00000395: JUMPDEST
00000396: DUP3
00000397: DUP5
00000398: MSTORE
00000399: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000003ba: PUSH2 0x03c2
000003bd: DUP5
000003be: PUSH2 0x1934
000003c1: JUMP
000003c2: JUMPDEST
000003c3: ADD
000003c4: DUP6
000003c5: PUSH1 0x00
000003c7: JUMPDEST
000003c8: DUP3
000003c9: DUP2
000003ca: LT
000003cb: PUSH2 0x0625
000003ce: JUMPI
000003cf: POP
000003d0: POP
000003d1: POP
000003d2: PUSH1 0x00
000003d4: JUMPDEST
000003d5: DUP4
000003d6: DUP2
000003d7: LT
000003d8: PUSH2 0x0457
000003db: JUMPI
000003dc: PUSH1 0x40
000003de: DUP1
000003df: MLOAD
000003e0: DUP8
000003e1: DUP2
000003e2: MSTORE
000003e3: DUP7
000003e4: MLOAD
000003e5: DUP2
000003e6: DUP10
000003e7: ADD
000003e8: DUP2
000003e9: SWAP1
000003ea: MSTORE
000003eb: PUSH1 0x00
000003ed: SWAP3
000003ee: PUSH1 0x05
000003f0: DUP3
000003f1: SWAP1
000003f2: SHL
000003f3: DUP4
000003f4: ADD
000003f5: DUP2
000003f6: ADD
000003f7: SWAP2
000003f8: DUP10
000003f9: DUP12
000003fa: ADD
000003fb: SWAP2
000003fc: DUP12
000003fd: SWAP1
000003fe: DUP6
000003ff: ADD
00000400: JUMPDEST
00000401: DUP3
00000402: DUP8
00000403: LT
00000404: PUSH2 0x040d
00000407: JUMPI
00000408: DUP6
00000409: DUP6
0000040a: SUB
0000040b: DUP7
0000040c: RETURN
0000040d: JUMPDEST
0000040e: SWAP1
0000040f: SWAP2
00000410: SWAP3
00000411: SWAP4
00000412: DUP3
00000413: DUP1
00000414: PUSH2 0x0447
00000417: DUP4
00000418: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0
00000439: DUP11
0000043a: PUSH1 0x01
0000043c: SWAP7
0000043d: SUB
0000043e: ADD
0000043f: DUP7
00000440: MSTORE
00000441: DUP9
00000442: MLOAD
00000443: PUSH2 0x17e6
00000446: JUMP
00000447: JUMPDEST
00000448: SWAP7
00000449: ADD
0000044a: SWAP3
0000044b: ADD
0000044c: SWAP7
0000044d: ADD
0000044e: SWAP6
0000044f: SWAP3
00000450: SWAP2
00000451: SWAP1
00000452: SWAP3
00000453: PUSH2 0x0400
00000456: JUMP
00000457: JUMPDEST
00000458: DUP1
00000459: PUSH1 0x05
0000045b: SHL
0000045c: DUP3
0000045d: ADD
0000045e: CALLDATALOAD
0000045f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1
00000480: DUP4
00000481: CALLDATASIZE
00000482: SUB
00000483: ADD
00000484: DUP2
00000485: SLT
00000486: ISZERO
00000487: PUSH2 0x0204
0000048a: JUMPI
0000048b: DUP3
0000048c: ADD
0000048d: DUP1
0000048e: CALLDATALOAD
0000048f: SWAP1
00000490: DUP5
00000491: DUP3
00000492: GT
00000493: PUSH2 0x0204
00000496: JUMPI
00000497: DUP8
00000498: ADD
00000499: DUP2
0000049a: CALLDATASIZE
0000049b: SUB
0000049c: DUP2
0000049d: SGT
0000049e: PUSH2 0x0204
000004a1: JUMPI
000004a2: PUSH2 0x04ac
000004a5: SWAP2
000004a6: CALLDATASIZE
000004a7: SWAP2
000004a8: PUSH2 0x1986
000004ab: JUMP
000004ac: JUMPDEST
000004ad: PUSH1 0x40
000004af: MLOAD
000004b0: SWAP1
000004b1: PUSH2 0x04b9
000004b4: DUP3
000004b5: PUSH2 0x18d7
000004b8: JUMP
000004b9: JUMPDEST
000004ba: PUSH1 0x27
000004bc: DUP3
000004bd: MSTORE
000004be: PUSH32 0x416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c
000004df: DUP9
000004e0: DUP4
000004e1: ADD
000004e2: MSTORE
000004e3: PUSH32 0x206661696c656400000000000000000000000000000000000000000000000000
00000504: PUSH1 0x40
00000506: DUP4
00000507: ADD
00000508: MSTORE
00000509: ADDRESS
0000050a: EXTCODESIZE
0000050b: ISZERO
0000050c: PUSH2 0x05a1
0000050f: JUMPI
00000510: SWAP1
00000511: PUSH1 0x00
00000513: DUP1
00000514: DUP4
00000515: DUP11
00000516: PUSH2 0x052d
00000519: SWAP6
0000051a: MLOAD
0000051b: SWAP2
0000051c: ADD
0000051d: ADDRESS
0000051e: GAS
0000051f: DELEGATECALL
00000520: PUSH2 0x0527
00000523: PUSH2 0x1a00
00000526: JUMP
00000527: JUMPDEST
00000528: SWAP1
00000529: PUSH2 0x1a30
0000052c: JUMP
0000052d: JUMPDEST
0000052e: PUSH2 0x0537
00000531: DUP3
00000532: DUP8
00000533: PUSH2 0x19bd
00000536: JUMP
00000537: JUMPDEST
00000538: MSTORE
00000539: PUSH2 0x0542
0000053c: DUP2
0000053d: DUP7
0000053e: PUSH2 0x19bd
00000541: JUMP
00000542: JUMPDEST
00000543: POP
00000544: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000565: DUP2
00000566: EQ
00000567: PUSH2 0x0572
0000056a: JUMPI
0000056b: PUSH1 0x01
0000056d: ADD
0000056e: PUSH2 0x03d4
00000571: JUMP
00000572: JUMPDEST
00000573: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00000594: PUSH1 0x00
00000596: MSTORE
00000597: PUSH1 0x11
00000599: PUSH1 0x04
0000059b: MSTORE
0000059c: PUSH1 0x24
0000059e: PUSH1 0x00
000005a0: REVERT
000005a1: JUMPDEST
000005a2: PUSH1 0x84
000005a4: DUP9
000005a5: PUSH1 0x40
000005a7: MLOAD
000005a8: SWAP1
000005a9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000005ca: DUP3
000005cb: MSTORE
000005cc: PUSH1 0x04
000005ce: DUP3
000005cf: ADD
000005d0: MSTORE
000005d1: PUSH1 0x26
000005d3: PUSH1 0x24
000005d5: DUP3
000005d6: ADD
000005d7: MSTORE
000005d8: PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f
000005f9: PUSH1 0x44
000005fb: DUP3
000005fc: ADD
000005fd: MSTORE
000005fe: PUSH32 0x6e74726163740000000000000000000000000000000000000000000000000000
0000061f: PUSH1 0x64
00000621: DUP3
00000622: ADD
00000623: MSTORE
00000624: REVERT
00000625: JUMPDEST
00000626: PUSH1 0x60
00000628: DUP8
00000629: DUP3
0000062a: ADD
0000062b: DUP4
0000062c: ADD
0000062d: MSTORE
0000062e: DUP2
0000062f: ADD
00000630: PUSH2 0x03c7
00000633: JUMP
00000634: JUMPDEST
00000635: CALLVALUE
00000636: PUSH2 0x0204
00000639: JUMPI
0000063a: PUSH1 0x20
0000063c: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
0000065d: CALLDATASIZE
0000065e: ADD
0000065f: SLT
00000660: PUSH2 0x0204
00000663: JUMPI
00000664: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000679: PUSH2 0x0680
0000067c: PUSH2 0x17c3
0000067f: JUMP
00000680: JUMPDEST
00000681: AND
00000682: PUSH1 0x00
00000684: MSTORE
00000685: PUSH1 0x03
00000687: PUSH1 0x20
00000689: MSTORE
0000068a: PUSH1 0x20
0000068c: PUSH1 0xff
0000068e: PUSH1 0x40
00000690: PUSH1 0x00
00000692: KECCAK256
00000693: SLOAD
00000694: AND
00000695: PUSH1 0x40
00000697: MLOAD
00000698: SWAP1
00000699: ISZERO
0000069a: ISZERO
0000069b: DUP2
0000069c: MSTORE
0000069d: RETURN
0000069e: JUMPDEST
0000069f: PUSH1 0x60
000006a1: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000006c2: CALLDATASIZE
000006c3: ADD
000006c4: SLT
000006c5: PUSH2 0x0204
000006c8: JUMPI
000006c9: PUSH2 0x06d0
000006cc: PUSH2 0x1740
000006cf: JUMP
000006d0: JUMPDEST
000006d1: PUSH32 0xe2d720c0ec6278814542be7b28dc57fd374b4c0920247e0ce632703fe8c7cc4c
000006f2: PUSH1 0x60
000006f4: PUSH2 0x06fb
000006f7: PUSH2 0x17a0
000006fa: JUMP
000006fb: JUMPDEST
000006fc: SWAP3
000006fd: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
0000071e: PUSH1 0x44
00000720: CALLDATALOAD
00000721: SWAP2
00000722: AND
00000723: SWAP4
00000724: DUP5
00000725: PUSH1 0x00
00000727: MSTORE
00000728: PUSH1 0x02
0000072a: PUSH1 0x20
0000072c: MSTORE
0000072d: PUSH2 0x073b
00000730: PUSH1 0x40
00000732: PUSH1 0x00
00000734: KECCAK256
00000735: SLOAD
00000736: ISZERO
00000737: PUSH2 0x1a8e
0000073a: JUMP
0000073b: JUMPDEST
0000073c: NUMBER
0000073d: PUSH2 0x0799
00000740: JUMPI
00000741: DUP5
00000742: PUSH1 0x00
00000744: MSTORE
00000745: PUSH1 0x02
00000747: PUSH1 0x20
00000749: MSTORE
0000074a: PUSH1 0x01
0000074c: PUSH1 0x40
0000074e: PUSH1 0x00
00000750: KECCAK256
00000751: SSTORE
00000752: JUMPDEST
00000753: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000768: DUP2
00000769: AND
0000076a: SWAP2
0000076b: DUP3
0000076c: PUSH2 0x0787
0000076f: JUMPI
00000770: POP
00000771: POP
00000772: CALLVALUE
00000773: JUMPDEST
00000774: PUSH1 0x40
00000776: MLOAD
00000777: SWAP2
00000778: DUP3
00000779: MSTORE
0000077a: PUSH1 0x20
0000077c: DUP3
0000077d: ADD
0000077e: MSTORE
0000077f: CALLER
00000780: PUSH1 0x40
00000782: DUP3
00000783: ADD
00000784: MSTORE
00000785: LOG2
00000786: STOP
00000787: JUMPDEST
00000788: PUSH2 0x0794
0000078b: SWAP2
0000078c: ADDRESS
0000078d: SWAP1
0000078e: CALLER
0000078f: SWAP1
00000790: PUSH2 0x1ea7
00000793: JUMP
00000794: JUMPDEST
00000795: PUSH2 0x0773
00000798: JUMP
00000799: JUMPDEST
0000079a: DUP5
0000079b: PUSH1 0x00
0000079d: MSTORE
0000079e: PUSH1 0x02
000007a0: PUSH1 0x20
000007a2: MSTORE
000007a3: NUMBER
000007a4: PUSH1 0x40
000007a6: PUSH1 0x00
000007a8: KECCAK256
000007a9: SSTORE
000007aa: PUSH2 0x0752
000007ad: JUMP
000007ae: JUMPDEST
000007af: CALLVALUE
000007b0: PUSH2 0x0204
000007b3: JUMPI
000007b4: PUSH1 0x00
000007b6: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000007d7: CALLDATASIZE
000007d8: ADD
000007d9: SLT
000007da: PUSH2 0x0204
000007dd: JUMPI
000007de: PUSH1 0x20
000007e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007f5: PUSH1 0x00
000007f7: SLOAD
000007f8: AND
000007f9: PUSH1 0x40
000007fb: MLOAD
000007fc: SWAP1
000007fd: DUP2
000007fe: MSTORE
000007ff: RETURN
00000800: JUMPDEST
00000801: CALLVALUE
00000802: PUSH2 0x0204
00000805: JUMPI
00000806: PUSH1 0x00
00000808: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
00000829: CALLDATASIZE
0000082a: ADD
0000082b: SLT
0000082c: PUSH2 0x0204
0000082f: JUMPI
00000830: PUSH2 0x0837
00000833: PUSH2 0x1844
00000836: JUMP
00000837: JUMPDEST
00000838: PUSH1 0x00
0000083a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000084f: DUP2
00000850: SLOAD
00000851: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000872: DUP2
00000873: AND
00000874: DUP4
00000875: SSTORE
00000876: AND
00000877: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00000898: DUP3
00000899: DUP1
0000089a: LOG3
0000089b: STOP
0000089c: JUMPDEST
0000089d: CALLVALUE
0000089e: PUSH2 0x0204
000008a1: JUMPI
000008a2: PUSH1 0x00
000008a4: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000008c5: CALLDATASIZE
000008c6: ADD
000008c7: SLT
000008c8: PUSH2 0x0204
000008cb: JUMPI
000008cc: PUSH1 0x20
000008ce: PUSH1 0x40
000008d0: MLOAD
000008d1: PUSH32 0x128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b
000008f2: DUP2
000008f3: MSTORE
000008f4: RETURN
000008f5: JUMPDEST
000008f6: CALLVALUE
000008f7: PUSH2 0x0204
000008fa: JUMPI
000008fb: PUSH1 0x00
000008fd: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
0000091e: CALLDATASIZE
0000091f: ADD
00000920: SLT
00000921: PUSH2 0x0204
00000924: JUMPI
00000925: PUSH1 0x20
00000927: PUSH1 0x40
00000929: MLOAD
0000092a: PUSH32 0x48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf
0000094b: DUP2
0000094c: MSTORE
0000094d: RETURN
0000094e: JUMPDEST
0000094f: CALLVALUE
00000950: PUSH2 0x0204
00000953: JUMPI
00000954: PUSH1 0x20
00000956: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
00000977: CALLDATASIZE
00000978: ADD
00000979: SLT
0000097a: PUSH2 0x0204
0000097d: JUMPI
0000097e: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
0000099f: PUSH2 0x09a6
000009a2: PUSH2 0x1740
000009a5: JUMP
000009a6: JUMPDEST
000009a7: AND
000009a8: PUSH1 0x00
000009aa: MSTORE
000009ab: PUSH1 0x01
000009ad: PUSH1 0x20
000009af: MSTORE
000009b0: PUSH1 0x20
000009b2: PUSH1 0x40
000009b4: PUSH1 0x00
000009b6: KECCAK256
000009b7: SLOAD
000009b8: PUSH1 0x40
000009ba: MLOAD
000009bb: SWAP1
000009bc: DUP2
000009bd: MSTORE
000009be: RETURN
000009bf: JUMPDEST
000009c0: CALLVALUE
000009c1: PUSH2 0x0204
000009c4: JUMPI
000009c5: PUSH1 0x00
000009c7: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000009e8: CALLDATASIZE
000009e9: ADD
000009ea: SLT
000009eb: PUSH2 0x0204
000009ee: JUMPI
000009ef: PUSH1 0x20
000009f1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a06: PUSH1 0x04
00000a08: SLOAD
00000a09: AND
00000a0a: PUSH1 0x40
00000a0c: MLOAD
00000a0d: SWAP1
00000a0e: DUP2
00000a0f: MSTORE
00000a10: RETURN
00000a11: JUMPDEST
00000a12: CALLVALUE
00000a13: PUSH2 0x0204
00000a16: JUMPI
00000a17: PUSH1 0xe0
00000a19: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
00000a3a: CALLDATASIZE
00000a3b: ADD
00000a3c: SLT
00000a3d: PUSH2 0x0204
00000a40: JUMPI
00000a41: PUSH2 0x0a48
00000a44: PUSH2 0x1740
00000a47: JUMP
00000a48: JUMPDEST
00000a49: PUSH2 0x0a50
00000a4c: PUSH2 0x17a0
00000a4f: JUMP
00000a50: JUMPDEST
00000a51: SWAP1
00000a52: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a67: PUSH1 0x84
00000a69: CALLDATALOAD
00000a6a: AND
00000a6b: PUSH1 0x84
00000a6d: CALLDATALOAD
00000a6e: SUB
00000a6f: PUSH2 0x0204
00000a72: JUMPI
00000a73: PUSH8 0xffffffffffffffff
00000a7c: PUSH1 0xa4
00000a7e: CALLDATALOAD
00000a7f: GT
00000a80: PUSH2 0x0204
00000a83: JUMPI
00000a84: CALLDATASIZE
00000a85: PUSH1 0x23
00000a87: PUSH1 0xa4
00000a89: CALLDATALOAD
00000a8a: ADD
00000a8b: SLT
00000a8c: ISZERO
00000a8d: PUSH2 0x0204
00000a90: JUMPI
00000a91: PUSH8 0xffffffffffffffff
00000a9a: PUSH1 0xa4
00000a9c: CALLDATALOAD
00000a9d: PUSH1 0x04
00000a9f: ADD
00000aa0: CALLDATALOAD
00000aa1: GT
00000aa2: PUSH2 0x0204
00000aa5: JUMPI
00000aa6: CALLDATASIZE
00000aa7: PUSH1 0x24
00000aa9: PUSH1 0xa4
00000aab: CALLDATALOAD
00000aac: PUSH1 0x04
00000aae: ADD
00000aaf: CALLDATALOAD
00000ab0: PUSH1 0xa4
00000ab2: CALLDATALOAD
00000ab3: ADD
00000ab4: ADD
00000ab5: GT
00000ab6: PUSH2 0x0204
00000ab9: JUMPI
00000aba: PUSH1 0xc4
00000abc: CALLDATALOAD
00000abd: PUSH8 0xffffffffffffffff
00000ac6: DUP2
00000ac7: GT
00000ac8: PUSH2 0x0204
00000acb: JUMPI
00000acc: PUSH2 0x0ad9
00000acf: SWAP1
00000ad0: CALLDATASIZE
00000ad1: SWAP1
00000ad2: PUSH1 0x04
00000ad4: ADD
00000ad5: PUSH2 0x176f
00000ad8: JUMP
00000ad9: JUMPDEST
00000ada: SWAP1
00000adb: CALLER
00000adc: PUSH1 0x00
00000ade: MSTORE
00000adf: PUSH1 0x03
00000ae1: PUSH1 0x20
00000ae3: MSTORE
00000ae4: PUSH1 0xff
00000ae6: PUSH1 0x40
00000ae8: PUSH1 0x00
00000aea: KECCAK256
00000aeb: SLOAD
00000aec: AND
00000aed: DUP1
00000aee: ISZERO
00000aef: PUSH2 0x12fd
00000af2: JUMPI
00000af3: JUMPDEST
00000af4: ISZERO
00000af5: PUSH2 0x0204
00000af8: JUMPI
00000af9: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00000b1a: DUP4
00000b1b: AND
00000b1c: PUSH1 0x00
00000b1e: MSTORE
00000b1f: PUSH1 0x01
00000b21: PUSH1 0x20
00000b23: MSTORE
00000b24: PUSH2 0x0b32
00000b27: PUSH1 0x40
00000b29: PUSH1 0x00
00000b2b: KECCAK256
00000b2c: SLOAD
00000b2d: ISZERO
00000b2e: PUSH2 0x1a8e
00000b31: JUMP
00000b32: JUMPDEST
00000b33: NUMBER
00000b34: PUSH2 0x12c6
00000b37: JUMPI
00000b38: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00000b59: DUP4
00000b5a: AND
00000b5b: PUSH1 0x00
00000b5d: MSTORE
00000b5e: PUSH1 0x01
00000b60: PUSH1 0x20
00000b62: MSTORE
00000b63: PUSH1 0x01
00000b65: PUSH1 0x40
00000b67: PUSH1 0x00
00000b69: KECCAK256
00000b6a: SSTORE
00000b6b: JUMPDEST
00000b6c: PUSH2 0x0b81
00000b6f: CALLDATASIZE
00000b70: PUSH1 0xa4
00000b72: CALLDATALOAD
00000b73: PUSH1 0x04
00000b75: ADD
00000b76: CALLDATALOAD
00000b77: PUSH1 0x24
00000b79: PUSH1 0xa4
00000b7b: CALLDATALOAD
00000b7c: ADD
00000b7d: PUSH2 0x1986
00000b80: JUMP
00000b81: JUMPDEST
00000b82: PUSH1 0x20
00000b84: DUP2
00000b85: MLOAD
00000b86: SWAP2
00000b87: ADD
00000b88: KECCAK256
00000b89: SWAP2
00000b8a: PUSH1 0x40
00000b8c: MLOAD
00000b8d: SWAP3
00000b8e: PUSH32 0x128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b
00000baf: PUSH1 0x20
00000bb1: DUP6
00000bb2: ADD
00000bb3: MSTORE
00000bb4: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00000bd5: DUP6
00000bd6: AND
00000bd7: PUSH1 0x40
00000bd9: DUP6
00000bda: ADD
00000bdb: MSTORE
00000bdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bf1: DUP7
00000bf2: AND
00000bf3: PUSH1 0x60
00000bf5: DUP6
00000bf6: ADD
00000bf7: MSTORE
00000bf8: PUSH1 0x44
00000bfa: CALLDATALOAD
00000bfb: PUSH1 0x80
00000bfd: DUP6
00000bfe: ADD
00000bff: MSTORE
00000c00: PUSH1 0x64
00000c02: CALLDATALOAD
00000c03: PUSH1 0xa0
00000c05: DUP6
00000c06: ADD
00000c07: MSTORE
00000c08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c1d: PUSH1 0x84
00000c1f: CALLDATALOAD
00000c20: AND
00000c21: PUSH1 0xc0
00000c23: DUP6
00000c24: ADD
00000c25: MSTORE
00000c26: PUSH1 0xe0
00000c28: DUP5
00000c29: ADD
00000c2a: MSTORE
00000c2b: PUSH1 0xe0
00000c2d: DUP4
00000c2e: MSTORE
00000c2f: DUP3
00000c30: PUSH2 0x0100
00000c33: DUP2
00000c34: ADD
00000c35: LT
00000c36: PUSH8 0xffffffffffffffff
00000c3f: PUSH2 0x0100
00000c42: DUP6
00000c43: ADD
00000c44: GT
00000c45: OR
00000c46: PUSH2 0x1297
00000c49: JUMPI
00000c4a: PUSH1 0x20
00000c4c: SWAP2
00000c4d: PUSH2 0x0100
00000c50: DUP5
00000c51: ADD
00000c52: PUSH1 0x40
00000c54: MSTORE
00000c55: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000c76: DUP5
00000c77: PUSH2 0x0cf2
00000c7a: DUP2
00000c7b: MLOAD
00000c7c: DUP7
00000c7d: DUP4
00000c7e: ADD
00000c7f: KECCAK256
00000c80: SWAP5
00000c81: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c96: PUSH1 0x04
00000c98: SLOAD
00000c99: AND
00000c9a: SWAP5
00000c9b: PUSH32 0x8394786f00000000000000000000000000000000000000000000000000000000
00000cbc: PUSH2 0x0100
00000cbf: DUP6
00000cc0: ADD
00000cc1: MSTORE
00000cc2: PUSH2 0x0100
00000cc5: DUP5
00000cc6: ADD
00000cc7: SWAP7
00000cc8: PUSH32 0x48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf
00000ce9: PUSH2 0x0104
00000cec: DUP7
00000ced: ADD
00000cee: PUSH2 0x1b0b
00000cf1: JUMP
00000cf2: JUMPDEST
00000cf3: SUB
00000cf4: ADD
00000cf5: SWAP1
00000cf6: PUSH2 0x0100
00000cf9: DUP6
00000cfa: ADD
00000cfb: SWAP1
00000cfc: GAS
00000cfd: STATICCALL
00000cfe: SWAP1
00000cff: DUP2
00000d00: ISZERO
00000d01: PUSH2 0x1083
00000d04: JUMPI
00000d05: PUSH1 0x00
00000d07: SWAP2
00000d08: PUSH2 0x125f
00000d0b: JUMPI
00000d0c: JUMPDEST
00000d0d: POP
00000d0e: ISZERO
00000d0f: PUSH2 0x1201
00000d12: JUMPI
00000d13: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d28: DUP3
00000d29: AND
00000d2a: PUSH2 0x0e2c
00000d2d: JUMPI
00000d2e: PUSH32 0xa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e
00000d4f: SWAP1
00000d50: PUSH1 0x60
00000d52: SWAP1
00000d53: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00000d74: SWAP1
00000d75: PUSH1 0x04
00000d77: PUSH1 0xa4
00000d79: CALLDATALOAD
00000d7a: ADD
00000d7b: CALLDATALOAD
00000d7c: ISZERO
00000d7d: PUSH2 0x0e0e
00000d80: JUMPI
00000d81: PUSH2 0x0dc5
00000d84: PUSH2 0x0d91
00000d87: PUSH1 0x64
00000d89: CALLDATALOAD
00000d8a: PUSH1 0x44
00000d8c: CALLDATALOAD
00000d8d: PUSH2 0x1c17
00000d90: JUMP
00000d91: JUMPDEST
00000d92: PUSH2 0x0da7
00000d95: CALLDATASIZE
00000d96: PUSH1 0xa4
00000d98: CALLDATALOAD
00000d99: PUSH1 0x04
00000d9b: ADD
00000d9c: CALLDATALOAD
00000d9d: PUSH1 0x24
00000d9f: PUSH1 0xa4
00000da1: CALLDATALOAD
00000da2: ADD
00000da3: PUSH2 0x1986
00000da6: JUMP
00000da7: JUMPDEST
00000da8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000dbd: PUSH1 0x84
00000dbf: CALLDATALOAD
00000dc0: AND
00000dc1: PUSH2 0x1d3c
00000dc4: JUMP
00000dc5: JUMPDEST
00000dc6: POP
00000dc7: JUMPDEST
00000dc8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ddd: PUSH1 0x40
00000ddf: MLOAD
00000de0: SWAP6
00000de1: AND
00000de2: DUP6
00000de3: MSTORE
00000de4: PUSH1 0x44
00000de6: CALLDATALOAD
00000de7: PUSH1 0x20
00000de9: DUP7
00000dea: ADD
00000deb: MSTORE
00000dec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e01: PUSH1 0x84
00000e03: CALLDATALOAD
00000e04: AND
00000e05: PUSH1 0x40
00000e07: DUP7
00000e08: ADD
00000e09: MSTORE
00000e0a: AND
00000e0b: SWAP3
00000e0c: LOG2
00000e0d: STOP
00000e0e: JUMPDEST
00000e0f: PUSH2 0x0e27
00000e12: PUSH2 0x0e1f
00000e15: PUSH1 0x64
00000e17: CALLDATALOAD
00000e18: PUSH1 0x44
00000e1a: CALLDATALOAD
00000e1b: PUSH2 0x1c17
00000e1e: JUMP
00000e1f: JUMPDEST
00000e20: PUSH1 0x84
00000e22: CALLDATALOAD
00000e23: PUSH2 0x1c24
00000e26: JUMP
00000e27: JUMPDEST
00000e28: PUSH2 0x0dc7
00000e2b: JUMP
00000e2c: JUMPDEST
00000e2d: PUSH1 0x04
00000e2f: PUSH1 0xa4
00000e31: CALLDATALOAD
00000e32: ADD
00000e33: CALLDATALOAD
00000e34: ISZERO
00000e35: PUSH2 0x117f
00000e38: JUMPI
00000e39: PUSH1 0x40
00000e3b: MLOAD
00000e3c: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
00000e5d: DUP2
00000e5e: MSTORE
00000e5f: ADDRESS
00000e60: PUSH1 0x04
00000e62: DUP3
00000e63: ADD
00000e64: MSTORE
00000e65: PUSH1 0x20
00000e67: DUP2
00000e68: PUSH1 0x24
00000e6a: DUP2
00000e6b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e80: DUP8
00000e81: AND
00000e82: GAS
00000e83: STATICCALL
00000e84: SWAP1
00000e85: DUP2
00000e86: ISZERO
00000e87: PUSH2 0x1083
00000e8a: JUMPI
00000e8b: PUSH1 0x00
00000e8d: SWAP2
00000e8e: PUSH2 0x114d
00000e91: JUMPI
00000e92: JUMPDEST
00000e93: POP
00000e94: PUSH1 0x44
00000e96: CALLDATALOAD
00000e97: GT
00000e98: PUSH2 0x10c9
00000e9b: JUMPI
00000e9c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000eb1: DUP3
00000eb2: AND
00000eb3: EXTCODESIZE
00000eb4: ISZERO
00000eb5: PUSH2 0x0204
00000eb8: JUMPI
00000eb9: PUSH1 0x40
00000ebb: MLOAD
00000ebc: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00000edd: DUP2
00000ede: MSTORE
00000edf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ef4: PUSH1 0x84
00000ef6: CALLDATALOAD
00000ef7: DUP2
00000ef8: AND
00000ef9: PUSH1 0x04
00000efb: DUP4
00000efc: ADD
00000efd: MSTORE
00000efe: PUSH1 0x44
00000f00: DUP1
00000f01: CALLDATALOAD
00000f02: PUSH1 0x24
00000f04: DUP5
00000f05: ADD
00000f06: MSTORE
00000f07: PUSH1 0x00
00000f09: SWAP2
00000f0a: DUP4
00000f0b: SWAP2
00000f0c: SWAP1
00000f0d: DUP3
00000f0e: SWAP1
00000f0f: DUP5
00000f10: SWAP1
00000f11: DUP9
00000f12: AND
00000f13: GAS
00000f14: CALL
00000f15: DUP1
00000f16: ISZERO
00000f17: PUSH2 0x1083
00000f1a: JUMPI
00000f1b: PUSH2 0x10ba
00000f1e: JUMPI
00000f1f: JUMPDEST
00000f20: POP
00000f21: PUSH2 0x0f3c
00000f24: PUSH1 0x64
00000f26: CALLDATALOAD
00000f27: PUSH2 0x0da7
00000f2a: CALLDATASIZE
00000f2b: PUSH1 0xa4
00000f2d: CALLDATALOAD
00000f2e: PUSH1 0x04
00000f30: ADD
00000f31: CALLDATALOAD
00000f32: PUSH1 0x24
00000f34: PUSH1 0xa4
00000f36: CALLDATALOAD
00000f37: ADD
00000f38: PUSH2 0x1986
00000f3b: JUMP
00000f3c: JUMPDEST
00000f3d: POP
00000f3e: PUSH1 0x40
00000f40: MLOAD
00000f41: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
00000f62: DUP2
00000f63: MSTORE
00000f64: ADDRESS
00000f65: PUSH1 0x04
00000f67: DUP3
00000f68: ADD
00000f69: MSTORE
00000f6a: PUSH1 0x20
00000f6c: DUP2
00000f6d: PUSH1 0x24
00000f6f: DUP2
00000f70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f85: DUP8
00000f86: AND
00000f87: GAS
00000f88: STATICCALL
00000f89: DUP1
00000f8a: ISZERO
00000f8b: PUSH2 0x1083
00000f8e: JUMPI
00000f8f: PUSH2 0x108f
00000f92: JUMPI
00000f93: JUMPDEST
00000f94: POP
00000f95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000faa: DUP3
00000fab: AND
00000fac: EXTCODESIZE
00000fad: ISZERO
00000fae: PUSH2 0x0204
00000fb1: JUMPI
00000fb2: PUSH1 0x40
00000fb4: MLOAD
00000fb5: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00000fd6: DUP2
00000fd7: MSTORE
00000fd8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fed: PUSH1 0x84
00000fef: CALLDATALOAD
00000ff0: AND
00000ff1: PUSH1 0x04
00000ff3: DUP3
00000ff4: ADD
00000ff5: MSTORE
00000ff6: PUSH1 0x00
00000ff8: PUSH1 0x24
00000ffa: DUP3
00000ffb: ADD
00000ffc: MSTORE
00000ffd: PUSH1 0x00
00000fff: DUP2
00001000: PUSH1 0x44
00001002: DUP2
00001003: DUP4
00001004: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001019: DUP9
0000101a: AND
0000101b: GAS
0000101c: CALL
0000101d: DUP1
0000101e: ISZERO
0000101f: PUSH2 0x1083
00001022: JUMPI
00001023: PUSH32 0xa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e
00001044: SWAP3
00001045: PUSH1 0x60
00001047: SWAP3
00001048: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00001069: SWAP3
0000106a: PUSH2 0x1074
0000106d: JUMPI
0000106e: JUMPDEST
0000106f: POP
00001070: PUSH2 0x0dc7
00001073: JUMP
00001074: JUMPDEST
00001075: PUSH2 0x107d
00001078: SWAP1
00001079: PUSH2 0x18c3
0000107c: JUMP
0000107d: JUMPDEST
0000107e: DUP6
0000107f: PUSH2 0x106e
00001082: JUMP
00001083: JUMPDEST
00001084: PUSH1 0x40
00001086: MLOAD
00001087: RETURNDATASIZE
00001088: PUSH1 0x00
0000108a: DUP3
0000108b: RETURNDATACOPY
0000108c: RETURNDATASIZE
0000108d: SWAP1
0000108e: REVERT
0000108f: JUMPDEST
00001090: PUSH1 0x20
00001092: SWAP1
00001093: DUP2
00001094: RETURNDATASIZE
00001095: DUP4
00001096: GT
00001097: PUSH2 0x10b3
0000109a: JUMPI
0000109b: JUMPDEST
0000109c: PUSH2 0x10a5
0000109f: DUP2
000010a0: DUP4
000010a1: PUSH2 0x18f3
000010a4: JUMP
000010a5: JUMPDEST
000010a6: DUP2
000010a7: ADD
000010a8: SUB
000010a9: SLT
000010aa: PUSH2 0x0204
000010ad: JUMPI
000010ae: DUP3
000010af: PUSH2 0x0f93
000010b2: JUMP
000010b3: JUMPDEST
000010b4: POP
000010b5: RETURNDATASIZE
000010b6: PUSH2 0x109b
000010b9: JUMP
000010ba: JUMPDEST
000010bb: PUSH2 0x10c3
000010be: SWAP1
000010bf: PUSH2 0x18c3
000010c2: JUMP
000010c3: JUMPDEST
000010c4: DUP3
000010c5: PUSH2 0x0f1f
000010c8: JUMP
000010c9: JUMPDEST
000010ca: PUSH1 0x84
000010cc: PUSH1 0x40
000010ce: MLOAD
000010cf: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000010f0: DUP2
000010f1: MSTORE
000010f2: PUSH1 0x20
000010f4: PUSH1 0x04
000010f6: DUP3
000010f7: ADD
000010f8: MSTORE
000010f9: PUSH1 0x2b
000010fb: PUSH1 0x24
000010fd: DUP3
000010fe: ADD
000010ff: MSTORE
00001100: PUSH32 0x53616665546f6b656e3a20696e73756666696369656e742062616c616e636520
00001121: PUSH1 0x44
00001123: DUP3
00001124: ADD
00001125: MSTORE
00001126: PUSH32 0x666f7220617070726f7665000000000000000000000000000000000000000000
00001147: PUSH1 0x64
00001149: DUP3
0000114a: ADD
0000114b: MSTORE
0000114c: REVERT
0000114d: JUMPDEST
0000114e: SWAP1
0000114f: POP
00001150: PUSH1 0x20
00001152: DUP2
00001153: RETURNDATASIZE
00001154: PUSH1 0x20
00001156: GT
00001157: PUSH2 0x1177
0000115a: JUMPI
0000115b: JUMPDEST
0000115c: DUP2
0000115d: PUSH2 0x1168
00001160: PUSH1 0x20
00001162: SWAP4
00001163: DUP4
00001164: PUSH2 0x18f3
00001167: JUMP
00001168: JUMPDEST
00001169: DUP2
0000116a: ADD
0000116b: SUB
0000116c: SLT
0000116d: PUSH2 0x0204
00001170: JUMPI
00001171: MLOAD
00001172: DUP4
00001173: PUSH2 0x0e92
00001176: JUMP
00001177: JUMPDEST
00001178: RETURNDATASIZE
00001179: SWAP2
0000117a: POP
0000117b: PUSH2 0x115b
0000117e: JUMP
0000117f: JUMPDEST
00001180: PUSH1 0x60
00001182: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
000011a3: PUSH32 0xa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e
000011c4: SWAP3
000011c5: PUSH2 0x11ea
000011c8: PUSH1 0x44
000011ca: CALLDATALOAD
000011cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011e0: PUSH1 0x84
000011e2: CALLDATALOAD
000011e3: AND
000011e4: ADDRESS
000011e5: DUP9
000011e6: PUSH2 0x1ea7
000011e9: JUMP
000011ea: JUMPDEST
000011eb: POP
000011ec: PUSH1 0x64
000011ee: CALLDATALOAD
000011ef: ISZERO
000011f0: PUSH2 0x0dc7
000011f3: JUMPI
000011f4: PUSH2 0x0e27
000011f7: PUSH1 0x64
000011f9: CALLDATALOAD
000011fa: PUSH1 0x84
000011fc: CALLDATALOAD
000011fd: PUSH2 0x1c24
00001200: JUMP
00001201: JUMPDEST
00001202: PUSH1 0x64
00001204: PUSH1 0x40
00001206: MLOAD
00001207: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001228: DUP2
00001229: MSTORE
0000122a: PUSH1 0x20
0000122c: PUSH1 0x04
0000122e: DUP3
0000122f: ADD
00001230: MSTORE
00001231: PUSH1 0x1a
00001233: PUSH1 0x24
00001235: DUP3
00001236: ADD
00001237: MSTORE
00001238: PUSH32 0x4272696467653a20696e76616c6964207369676e617475726573000000000000
00001259: PUSH1 0x44
0000125b: DUP3
0000125c: ADD
0000125d: MSTORE
0000125e: REVERT
0000125f: JUMPDEST
00001260: PUSH2 0x128a
00001263: SWAP2
00001264: POP
00001265: PUSH1 0x20
00001267: RETURNDATASIZE
00001268: PUSH1 0x20
0000126a: GT
0000126b: PUSH2 0x1290
0000126e: JUMPI
0000126f: JUMPDEST
00001270: PUSH2 0x0100
00001273: DUP2
00001274: PUSH2 0x1280
00001277: DUP3
00001278: SWAP4
00001279: DUP4
0000127a: DUP7
0000127b: ADD
0000127c: PUSH2 0x18f3
0000127f: JUMP
00001280: JUMPDEST
00001281: DUP4
00001282: ADD
00001283: ADD
00001284: SWAP2
00001285: ADD
00001286: PUSH2 0x1af3
00001289: JUMP
0000128a: JUMPDEST
0000128b: DUP4
0000128c: PUSH2 0x0d0c
0000128f: JUMP
00001290: JUMPDEST
00001291: POP
00001292: RETURNDATASIZE
00001293: PUSH2 0x126f
00001296: JUMP
00001297: JUMPDEST
00001298: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000012b9: PUSH1 0x00
000012bb: MSTORE
000012bc: PUSH1 0x41
000012be: PUSH1 0x04
000012c0: MSTORE
000012c1: PUSH1 0x24
000012c3: PUSH1 0x00
000012c5: REVERT
000012c6: JUMPDEST
000012c7: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
000012e8: DUP4
000012e9: AND
000012ea: PUSH1 0x00
000012ec: MSTORE
000012ed: PUSH1 0x01
000012ef: PUSH1 0x20
000012f1: MSTORE
000012f2: NUMBER
000012f3: PUSH1 0x40
000012f5: PUSH1 0x00
000012f7: KECCAK256
000012f8: SSTORE
000012f9: PUSH2 0x0b6b
000012fc: JUMP
000012fd: JUMPDEST
000012fe: POP
000012ff: ORIGIN
00001300: PUSH1 0x00
00001302: MSTORE
00001303: PUSH1 0xff
00001305: PUSH1 0x40
00001307: PUSH1 0x00
00001309: KECCAK256
0000130a: SLOAD
0000130b: AND
0000130c: PUSH2 0x0af3
0000130f: JUMP
00001310: JUMPDEST
00001311: CALLVALUE
00001312: PUSH2 0x0204
00001315: JUMPI
00001316: PUSH1 0x80
00001318: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
00001339: CALLDATASIZE
0000133a: ADD
0000133b: SLT
0000133c: PUSH2 0x0204
0000133f: JUMPI
00001340: PUSH1 0x04
00001342: CALLDATALOAD
00001343: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001358: DUP1
00001359: DUP3
0000135a: AND
0000135b: DUP1
0000135c: SWAP3
0000135d: SUB
0000135e: PUSH2 0x0204
00001361: JUMPI
00001362: PUSH1 0x24
00001364: CALLDATALOAD
00001365: PUSH8 0xffffffffffffffff
0000136e: PUSH1 0x44
00001370: CALLDATALOAD
00001371: DUP2
00001372: DUP2
00001373: GT
00001374: PUSH2 0x0204
00001377: JUMPI
00001378: PUSH2 0x1385
0000137b: SWAP1
0000137c: CALLDATASIZE
0000137d: SWAP1
0000137e: PUSH1 0x04
00001380: ADD
00001381: PUSH2 0x176f
00001384: JUMP
00001385: JUMPDEST
00001386: PUSH1 0x64
00001388: SWAP3
00001389: SWAP2
0000138a: SWAP3
0000138b: CALLDATALOAD
0000138c: DUP3
0000138d: DUP2
0000138e: GT
0000138f: PUSH2 0x0204
00001392: JUMPI
00001393: PUSH2 0x13a0
00001396: SWAP1
00001397: CALLDATASIZE
00001398: SWAP1
00001399: PUSH1 0x04
0000139b: ADD
0000139c: PUSH2 0x176f
0000139f: JUMP
000013a0: JUMPDEST
000013a1: SWAP2
000013a2: SWAP1
000013a3: SWAP4
000013a4: DUP6
000013a5: TIMESTAMP
000013a6: GT
000013a7: PUSH2 0x1675
000013aa: JUMPI
000013ab: PUSH1 0x40
000013ad: MLOAD
000013ae: PUSH1 0x20
000013b0: SWAP7
000013b1: DUP8
000013b2: DUP3
000013b3: ADD
000013b4: SWAP1
000013b5: PUSH32 0x83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d4
000013d6: DUP3
000013d7: MSTORE
000013d8: DUP11
000013d9: PUSH1 0x40
000013db: DUP5
000013dc: ADD
000013dd: MSTORE
000013de: PUSH1 0x60
000013e0: DUP4
000013e1: ADD
000013e2: MSTORE
000013e3: PUSH1 0x60
000013e5: DUP3
000013e6: MSTORE
000013e7: PUSH1 0x80
000013e9: DUP3
000013ea: ADD
000013eb: SWAP6
000013ec: DUP3
000013ed: DUP8
000013ee: LT
000013ef: SWAP1
000013f0: DUP8
000013f1: GT
000013f2: OR
000013f3: PUSH2 0x1297
000013f6: JUMPI
000013f7: DUP6
000013f8: PUSH1 0x40
000013fa: MSTORE
000013fb: DUP2
000013fc: MLOAD
000013fd: SWAP1
000013fe: KECCAK256
000013ff: SWAP5
00001400: DUP8
00001401: DUP2
00001402: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
00001423: DUP5
00001424: PUSH2 0x1478
00001427: PUSH32 0x48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf
00001448: SWAP9
00001449: PUSH32 0x8394786f00000000000000000000000000000000000000000000000000000000
0000146a: SWAP9
0000146b: DUP10
0000146c: DUP7
0000146d: MSTORE
0000146e: DUP13
0000146f: DUP12
00001470: PUSH1 0x84
00001472: DUP7
00001473: ADD
00001474: PUSH2 0x1b0b
00001477: JUMP
00001478: JUMPDEST
00001479: SUB
0000147a: ADD
0000147b: DUP2
0000147c: DUP14
0000147d: GAS
0000147e: STATICCALL
0000147f: SWAP2
00001480: DUP3
00001481: ISZERO
00001482: PUSH2 0x1083
00001485: JUMPI
00001486: PUSH1 0x00
00001488: SWAP3
00001489: PUSH2 0x1642
0000148c: JUMPI
0000148d: JUMPDEST
0000148e: POP
0000148f: POP
00001490: ISZERO
00001491: PUSH2 0x15be
00001494: JUMPI
00001495: PUSH1 0x04
00001497: SLOAD
00001498: SWAP7
00001499: DUP8
0000149a: AND
0000149b: SWAP3
0000149c: DUP4
0000149d: PUSH2 0x14cb
000014a0: JUMPI
000014a1: JUMPDEST
000014a2: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
000014c3: DUP9
000014c4: AND
000014c5: DUP10
000014c6: OR
000014c7: PUSH1 0x04
000014c9: SSTORE
000014ca: STOP
000014cb: JUMPDEST
000014cc: SWAP1
000014cd: PUSH2 0x14e9
000014d0: DUP8
000014d1: SWAP6
000014d2: SWAP5
000014d3: SWAP4
000014d4: SWAP3
000014d5: PUSH1 0x40
000014d7: MLOAD
000014d8: SWAP8
000014d9: DUP9
000014da: SWAP7
000014db: DUP8
000014dc: SWAP6
000014dd: DUP7
000014de: SWAP6
000014df: DUP7
000014e0: MSTORE
000014e1: PUSH1 0x04
000014e3: DUP7
000014e4: ADD
000014e5: PUSH2 0x1b0b
000014e8: JUMP
000014e9: JUMPDEST
000014ea: SUB
000014eb: SWAP2
000014ec: GAS
000014ed: STATICCALL
000014ee: SWAP1
000014ef: DUP2
000014f0: ISZERO
000014f1: PUSH2 0x1083
000014f4: JUMPI
000014f5: PUSH1 0x00
000014f7: SWAP2
000014f8: PUSH2 0x1591
000014fb: JUMPI
000014fc: JUMPDEST
000014fd: POP
000014fe: ISZERO
000014ff: PUSH2 0x150d
00001502: JUMPI
00001503: DUP1
00001504: DUP1
00001505: DUP1
00001506: DUP1
00001507: DUP1
00001508: DUP1
00001509: PUSH2 0x14a1
0000150c: JUMP
0000150d: JUMPDEST
0000150e: PUSH1 0x84
00001510: SWAP1
00001511: PUSH1 0x40
00001513: MLOAD
00001514: SWAP1
00001515: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001536: DUP3
00001537: MSTORE
00001538: PUSH1 0x04
0000153a: DUP3
0000153b: ADD
0000153c: MSTORE
0000153d: PUSH1 0x2a
0000153f: PUSH1 0x24
00001541: DUP3
00001542: ADD
00001543: MSTORE
00001544: PUSH32 0x4272696467653a20696e76616c6964207369676e617475726520666f72206f6c
00001565: PUSH1 0x44
00001567: DUP3
00001568: ADD
00001569: MSTORE
0000156a: PUSH32 0x6420766572696669657200000000000000000000000000000000000000000000
0000158b: PUSH1 0x64
0000158d: DUP3
0000158e: ADD
0000158f: MSTORE
00001590: REVERT
00001591: JUMPDEST
00001592: PUSH2 0x15b1
00001595: SWAP2
00001596: POP
00001597: DUP3
00001598: RETURNDATASIZE
00001599: DUP5
0000159a: GT
0000159b: PUSH2 0x15b7
0000159e: JUMPI
0000159f: JUMPDEST
000015a0: PUSH2 0x15a9
000015a3: DUP2
000015a4: DUP4
000015a5: PUSH2 0x18f3
000015a8: JUMP
000015a9: JUMPDEST
000015aa: DUP2
000015ab: ADD
000015ac: SWAP1
000015ad: PUSH2 0x1af3
000015b0: JUMP
000015b1: JUMPDEST
000015b2: DUP5
000015b3: PUSH2 0x14fc
000015b6: JUMP
000015b7: JUMPDEST
000015b8: POP
000015b9: RETURNDATASIZE
000015ba: PUSH2 0x159f
000015bd: JUMP
000015be: JUMPDEST
000015bf: PUSH1 0x84
000015c1: DUP7
000015c2: PUSH1 0x40
000015c4: MLOAD
000015c5: SWAP1
000015c6: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000015e7: DUP3
000015e8: MSTORE
000015e9: PUSH1 0x04
000015eb: DUP3
000015ec: ADD
000015ed: MSTORE
000015ee: PUSH1 0x2a
000015f0: PUSH1 0x24
000015f2: DUP3
000015f3: ADD
000015f4: MSTORE
000015f5: PUSH32 0x4272696467653a20696e76616c6964207369676e617475726520666f72206e65
00001616: PUSH1 0x44
00001618: DUP3
00001619: ADD
0000161a: MSTORE
0000161b: PUSH32 0x7720766572696669657200000000000000000000000000000000000000000000
0000163c: PUSH1 0x64
0000163e: DUP3
0000163f: ADD
00001640: MSTORE
00001641: REVERT
00001642: JUMPDEST
00001643: PUSH2 0x1666
00001646: SWAP3
00001647: POP
00001648: PUSH1 0x80
0000164a: SWAP1
0000164b: DUP10
0000164c: SWAP1
0000164d: RETURNDATASIZE
0000164e: DUP12
0000164f: GT
00001650: PUSH2 0x166d
00001653: JUMPI
00001654: JUMPDEST
00001655: PUSH2 0x165e
00001658: DUP3
00001659: DUP6
0000165a: PUSH2 0x18f3
0000165d: JUMP
0000165e: JUMPDEST
0000165f: ADD
00001660: ADD
00001661: SWAP1
00001662: PUSH2 0x1af3
00001665: JUMP
00001666: JUMPDEST
00001667: DUP10
00001668: DUP1
00001669: PUSH2 0x148d
0000166c: JUMP
0000166d: JUMPDEST
0000166e: RETURNDATASIZE
0000166f: SWAP2
00001670: POP
00001671: PUSH2 0x1654
00001674: JUMP
00001675: JUMPDEST
00001676: PUSH1 0x64
00001678: PUSH1 0x40
0000167a: MLOAD
0000167b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000169c: DUP2
0000169d: MSTORE
0000169e: PUSH1 0x20
000016a0: PUSH1 0x04
000016a2: DUP3
000016a3: ADD
000016a4: MSTORE
000016a5: PUSH1 0x0f
000016a7: PUSH1 0x24
000016a9: DUP3
000016aa: ADD
000016ab: MSTORE
000016ac: PUSH32 0x4272696467653a20657870697265640000000000000000000000000000000000
000016cd: PUSH1 0x44
000016cf: DUP3
000016d0: ADD
000016d1: MSTORE
000016d2: REVERT
000016d3: JUMPDEST
000016d4: CALLVALUE
000016d5: PUSH2 0x0204
000016d8: JUMPI
000016d9: PUSH1 0x20
000016db: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
000016fc: CALLDATASIZE
000016fd: ADD
000016fe: SLT
000016ff: PUSH2 0x0204
00001702: JUMPI
00001703: PUSH1 0x20
00001705: SWAP1
00001706: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00001727: PUSH2 0x172e
0000172a: PUSH2 0x1740
0000172d: JUMP
0000172e: JUMPDEST
0000172f: AND
00001730: PUSH1 0x00
00001732: MSTORE
00001733: PUSH1 0x02
00001735: DUP3
00001736: MSTORE
00001737: PUSH1 0x40
00001739: PUSH1 0x00
0000173b: KECCAK256
0000173c: SLOAD
0000173d: DUP2
0000173e: MSTORE
0000173f: RETURN
00001740: JUMPDEST
00001741: PUSH1 0x04
00001743: CALLDATALOAD
00001744: SWAP1
00001745: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
00001766: DUP3
00001767: AND
00001768: DUP3
00001769: SUB
0000176a: PUSH2 0x0204
0000176d: JUMPI
0000176e: JUMP
0000176f: JUMPDEST
00001770: SWAP2
00001771: DUP2
00001772: PUSH1 0x1f
00001774: DUP5
00001775: ADD
00001776: SLT
00001777: ISZERO
00001778: PUSH2 0x0204
0000177b: JUMPI
0000177c: DUP3
0000177d: CALLDATALOAD
0000177e: SWAP2
0000177f: PUSH8 0xffffffffffffffff
00001788: DUP4
00001789: GT
0000178a: PUSH2 0x0204
0000178d: JUMPI
0000178e: PUSH1 0x20
00001790: DUP1
00001791: DUP6
00001792: ADD
00001793: SWAP5
00001794: DUP5
00001795: PUSH1 0x05
00001797: SHL
00001798: ADD
00001799: ADD
0000179a: GT
0000179b: PUSH2 0x0204
0000179e: JUMPI
0000179f: JUMP
000017a0: JUMPDEST
000017a1: PUSH1 0x24
000017a3: CALLDATALOAD
000017a4: SWAP1
000017a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017ba: DUP3
000017bb: AND
000017bc: DUP3
000017bd: SUB
000017be: PUSH2 0x0204
000017c1: JUMPI
000017c2: JUMP
000017c3: JUMPDEST
000017c4: PUSH1 0x04
000017c6: CALLDATALOAD
000017c7: SWAP1
000017c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017dd: DUP3
000017de: AND
000017df: DUP3
000017e0: SUB
000017e1: PUSH2 0x0204
000017e4: JUMPI
000017e5: JUMP
000017e6: JUMPDEST
000017e7: SWAP2
000017e8: SWAP1
000017e9: DUP3
000017ea: MLOAD
000017eb: SWAP3
000017ec: DUP4
000017ed: DUP3
000017ee: MSTORE
000017ef: PUSH1 0x00
000017f1: JUMPDEST
000017f2: DUP5
000017f3: DUP2
000017f4: LT
000017f5: PUSH2 0x1830
000017f8: JUMPI
000017f9: POP
000017fa: POP
000017fb: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000181c: PUSH1 0x1f
0000181e: DUP5
0000181f: PUSH1 0x00
00001821: PUSH1 0x20
00001823: DUP1
00001824: SWAP7
00001825: SWAP8
00001826: DUP7
00001827: ADD
00001828: ADD
00001829: MSTORE
0000182a: ADD
0000182b: AND
0000182c: ADD
0000182d: ADD
0000182e: SWAP1
0000182f: JUMP
00001830: JUMPDEST
00001831: PUSH1 0x20
00001833: DUP2
00001834: DUP4
00001835: ADD
00001836: DUP2
00001837: ADD
00001838: MLOAD
00001839: DUP5
0000183a: DUP4
0000183b: ADD
0000183c: DUP3
0000183d: ADD
0000183e: MSTORE
0000183f: ADD
00001840: PUSH2 0x17f1
00001843: JUMP
00001844: JUMPDEST
00001845: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000185a: PUSH1 0x00
0000185c: SLOAD
0000185d: AND
0000185e: CALLER
0000185f: SUB
00001860: PUSH2 0x1865
00001863: JUMPI
00001864: JUMP
00001865: JUMPDEST
00001866: PUSH1 0x64
00001868: PUSH1 0x40
0000186a: MLOAD
0000186b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000188c: DUP2
0000188d: MSTORE
0000188e: PUSH1 0x20
00001890: PUSH1 0x04
00001892: DUP3
00001893: ADD
00001894: MSTORE
00001895: PUSH1 0x20
00001897: PUSH1 0x24
00001899: DUP3
0000189a: ADD
0000189b: MSTORE
0000189c: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
000018bd: PUSH1 0x44
000018bf: DUP3
000018c0: ADD
000018c1: MSTORE
000018c2: REVERT
000018c3: JUMPDEST
000018c4: PUSH8 0xffffffffffffffff
000018cd: DUP2
000018ce: GT
000018cf: PUSH2 0x1297
000018d2: JUMPI
000018d3: PUSH1 0x40
000018d5: MSTORE
000018d6: JUMP
000018d7: JUMPDEST
000018d8: PUSH1 0x60
000018da: DUP2
000018db: ADD
000018dc: SWAP1
000018dd: DUP2
000018de: LT
000018df: PUSH8 0xffffffffffffffff
000018e8: DUP3
000018e9: GT
000018ea: OR
000018eb: PUSH2 0x1297
000018ee: JUMPI
000018ef: PUSH1 0x40
000018f1: MSTORE
000018f2: JUMP
000018f3: JUMPDEST
000018f4: SWAP1
000018f5: PUSH1 0x1f
000018f7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001918: SWAP2
00001919: ADD
0000191a: AND
0000191b: DUP2
0000191c: ADD
0000191d: SWAP1
0000191e: DUP2
0000191f: LT
00001920: PUSH8 0xffffffffffffffff
00001929: DUP3
0000192a: GT
0000192b: OR
0000192c: PUSH2 0x1297
0000192f: JUMPI
00001930: PUSH1 0x40
00001932: MSTORE
00001933: JUMP
00001934: JUMPDEST
00001935: PUSH8 0xffffffffffffffff
0000193e: DUP2
0000193f: GT
00001940: PUSH2 0x1297
00001943: JUMPI
00001944: PUSH1 0x05
00001946: SHL
00001947: PUSH1 0x20
00001949: ADD
0000194a: SWAP1
0000194b: JUMP
0000194c: JUMPDEST
0000194d: PUSH8 0xffffffffffffffff
00001956: DUP2
00001957: GT
00001958: PUSH2 0x1297
0000195b: JUMPI
0000195c: PUSH1 0x1f
0000195e: ADD
0000195f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001980: AND
00001981: PUSH1 0x20
00001983: ADD
00001984: SWAP1
00001985: JUMP
00001986: JUMPDEST
00001987: SWAP3
00001988: SWAP2
00001989: SWAP3
0000198a: PUSH2 0x1992
0000198d: DUP3
0000198e: PUSH2 0x194c
00001991: JUMP
00001992: JUMPDEST
00001993: SWAP2
00001994: PUSH2 0x19a0
00001997: PUSH1 0x40
00001999: MLOAD
0000199a: SWAP4
0000199b: DUP5
0000199c: PUSH2 0x18f3
0000199f: JUMP
000019a0: JUMPDEST
000019a1: DUP3
000019a2: SWAP5
000019a3: DUP2
000019a4: DUP5
000019a5: MSTORE
000019a6: DUP2
000019a7: DUP4
000019a8: ADD
000019a9: GT
000019aa: PUSH2 0x0204
000019ad: JUMPI
000019ae: DUP3
000019af: DUP2
000019b0: PUSH1 0x20
000019b2: SWAP4
000019b3: DUP5
000019b4: PUSH1 0x00
000019b6: SWAP7
000019b7: ADD
000019b8: CALLDATACOPY
000019b9: ADD
000019ba: ADD
000019bb: MSTORE
000019bc: JUMP
000019bd: JUMPDEST
000019be: DUP1
000019bf: MLOAD
000019c0: DUP3
000019c1: LT
000019c2: ISZERO
000019c3: PUSH2 0x19d1
000019c6: JUMPI
000019c7: PUSH1 0x20
000019c9: SWAP2
000019ca: PUSH1 0x05
000019cc: SHL
000019cd: ADD
000019ce: ADD
000019cf: SWAP1
000019d0: JUMP
000019d1: JUMPDEST
000019d2: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000019f3: PUSH1 0x00
000019f5: MSTORE
000019f6: PUSH1 0x32
000019f8: PUSH1 0x04
000019fa: MSTORE
000019fb: PUSH1 0x24
000019fd: PUSH1 0x00
000019ff: REVERT
00001a00: JUMPDEST
00001a01: RETURNDATASIZE
00001a02: ISZERO
00001a03: PUSH2 0x1a2b
00001a06: JUMPI
00001a07: RETURNDATASIZE
00001a08: SWAP1
00001a09: PUSH2 0x1a11
00001a0c: DUP3
00001a0d: PUSH2 0x194c
00001a10: JUMP
00001a11: JUMPDEST
00001a12: SWAP2
00001a13: PUSH2 0x1a1f
00001a16: PUSH1 0x40
00001a18: MLOAD
00001a19: SWAP4
00001a1a: DUP5
00001a1b: PUSH2 0x18f3
00001a1e: JUMP
00001a1f: JUMPDEST
00001a20: DUP3
00001a21: MSTORE
00001a22: RETURNDATASIZE
00001a23: PUSH1 0x00
00001a25: PUSH1 0x20
00001a27: DUP5
00001a28: ADD
00001a29: RETURNDATACOPY
00001a2a: JUMP
00001a2b: JUMPDEST
00001a2c: PUSH1 0x60
00001a2e: SWAP1
00001a2f: JUMP
00001a30: JUMPDEST
00001a31: SWAP1
00001a32: SWAP2
00001a33: SWAP1
00001a34: ISZERO
00001a35: PUSH2 0x1a3c
00001a38: JUMPI
00001a39: POP
00001a3a: SWAP1
00001a3b: JUMP
00001a3c: JUMPDEST
00001a3d: DUP2
00001a3e: MLOAD
00001a3f: ISZERO
00001a40: PUSH2 0x1a4c
00001a43: JUMPI
00001a44: POP
00001a45: DUP1
00001a46: MLOAD
00001a47: SWAP1
00001a48: PUSH1 0x20
00001a4a: ADD
00001a4b: REVERT
00001a4c: JUMPDEST
00001a4d: PUSH2 0x1a8a
00001a50: SWAP1
00001a51: PUSH1 0x40
00001a53: MLOAD
00001a54: SWAP2
00001a55: DUP3
00001a56: SWAP2
00001a57: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001a78: DUP4
00001a79: MSTORE
00001a7a: PUSH1 0x20
00001a7c: PUSH1 0x04
00001a7e: DUP5
00001a7f: ADD
00001a80: MSTORE
00001a81: PUSH1 0x24
00001a83: DUP4
00001a84: ADD
00001a85: SWAP1
00001a86: PUSH2 0x17e6
00001a89: JUMP
00001a8a: JUMPDEST
00001a8b: SUB
00001a8c: SWAP1
00001a8d: REVERT
00001a8e: JUMPDEST
00001a8f: ISZERO
00001a90: PUSH2 0x1a95
00001a93: JUMPI
00001a94: JUMP
00001a95: JUMPDEST
00001a96: PUSH1 0x64
00001a98: PUSH1 0x40
00001a9a: MLOAD
00001a9b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001abc: DUP2
00001abd: MSTORE
00001abe: PUSH1 0x20
00001ac0: PUSH1 0x04
00001ac2: DUP3
00001ac3: ADD
00001ac4: MSTORE
00001ac5: PUSH1 0x19
00001ac7: PUSH1 0x24
00001ac9: DUP3
00001aca: ADD
00001acb: MSTORE
00001acc: PUSH32 0x4272696467653a207575696420616c7265616479207573656400000000000000
00001aed: PUSH1 0x44
00001aef: DUP3
00001af0: ADD
00001af1: MSTORE
00001af2: REVERT
00001af3: JUMPDEST
00001af4: SWAP1
00001af5: DUP2
00001af6: PUSH1 0x20
00001af8: SWAP2
00001af9: SUB
00001afa: SLT
00001afb: PUSH2 0x0204
00001afe: JUMPI
00001aff: MLOAD
00001b00: DUP1
00001b01: ISZERO
00001b02: ISZERO
00001b03: DUP2
00001b04: SUB
00001b05: PUSH2 0x0204
00001b08: JUMPI
00001b09: SWAP1
00001b0a: JUMP
00001b0b: JUMPDEST
00001b0c: SWAP4
00001b0d: DUP1
00001b0e: SWAP3
00001b0f: SWAP2
00001b10: PUSH1 0x60
00001b12: DUP7
00001b13: ADD
00001b14: SWAP1
00001b15: DUP7
00001b16: MSTORE
00001b17: PUSH1 0x20
00001b19: SWAP3
00001b1a: DUP4
00001b1b: DUP8
00001b1c: ADD
00001b1d: MSTORE
00001b1e: PUSH1 0x60
00001b20: PUSH1 0x40
00001b22: DUP8
00001b23: ADD
00001b24: MSTORE
00001b25: MSTORE
00001b26: PUSH1 0x80
00001b28: DUP5
00001b29: ADD
00001b2a: SWAP4
00001b2b: PUSH1 0x80
00001b2d: DUP4
00001b2e: PUSH1 0x05
00001b30: SHL
00001b31: DUP3
00001b32: ADD
00001b33: ADD
00001b34: SWAP5
00001b35: DUP5
00001b36: PUSH1 0x00
00001b38: SWAP3
00001b39: JUMPDEST
00001b3a: DUP6
00001b3b: DUP5
00001b3c: LT
00001b3d: PUSH2 0x1b4a
00001b40: JUMPI
00001b41: POP
00001b42: POP
00001b43: POP
00001b44: POP
00001b45: POP
00001b46: POP
00001b47: POP
00001b48: SWAP1
00001b49: JUMP
00001b4a: JUMPDEST
00001b4b: SWAP1
00001b4c: SWAP2
00001b4d: SWAP3
00001b4e: SWAP4
00001b4f: SWAP5
00001b50: SWAP6
00001b51: SWAP7
00001b52: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
00001b73: DUP3
00001b74: DUP3
00001b75: SUB
00001b76: ADD
00001b77: DUP5
00001b78: MSTORE
00001b79: DUP8
00001b7a: CALLDATALOAD
00001b7b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1
00001b9c: DUP5
00001b9d: CALLDATASIZE
00001b9e: SUB
00001b9f: ADD
00001ba0: DUP2
00001ba1: SLT
00001ba2: ISZERO
00001ba3: PUSH2 0x0204
00001ba6: JUMPI
00001ba7: DUP4
00001ba8: ADD
00001ba9: DUP7
00001baa: DUP2
00001bab: ADD
00001bac: SWAP2
00001bad: SWAP1
00001bae: CALLDATALOAD
00001baf: PUSH8 0xffffffffffffffff
00001bb8: DUP2
00001bb9: GT
00001bba: PUSH2 0x0204
00001bbd: JUMPI
00001bbe: DUP1
00001bbf: CALLDATASIZE
00001bc0: SUB
00001bc1: DUP4
00001bc2: SGT
00001bc3: PUSH2 0x0204
00001bc6: JUMPI
00001bc7: DUP8
00001bc8: DUP3
00001bc9: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001bea: PUSH1 0x1f
00001bec: DUP5
00001bed: DUP1
00001bee: PUSH1 0x01
00001bf0: SWAP9
00001bf1: DUP7
00001bf2: SWAP9
00001bf3: SWAP8
00001bf4: DUP8
00001bf5: SWAP9
00001bf6: MSTORE
00001bf7: DUP7
00001bf8: DUP7
00001bf9: ADD
00001bfa: CALLDATACOPY
00001bfb: PUSH1 0x00
00001bfd: DUP6
00001bfe: DUP3
00001bff: DUP7
00001c00: ADD
00001c01: ADD
00001c02: MSTORE
00001c03: ADD
00001c04: AND
00001c05: ADD
00001c06: ADD
00001c07: SWAP10
00001c08: ADD
00001c09: SWAP5
00001c0a: ADD
00001c0b: SWAP5
00001c0c: ADD
00001c0d: SWAP3
00001c0e: SWAP6
00001c0f: SWAP5
00001c10: SWAP4
00001c11: SWAP2
00001c12: SWAP1
00001c13: PUSH2 0x1b39
00001c16: JUMP
00001c17: JUMPDEST
00001c18: SWAP2
00001c19: SWAP1
00001c1a: DUP3
00001c1b: ADD
00001c1c: DUP1
00001c1d: SWAP3
00001c1e: GT
00001c1f: PUSH2 0x0572
00001c22: JUMPI
00001c23: JUMP
00001c24: JUMPDEST
00001c25: DUP2
00001c26: SELFBALANCE
00001c27: LT
00001c28: PUSH2 0x1cde
00001c2b: JUMPI
00001c2c: PUSH1 0x00
00001c2e: DUP1
00001c2f: DUP1
00001c30: SWAP4
00001c31: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c46: DUP3
00001c47: SWAP5
00001c48: AND
00001c49: GAS
00001c4a: CALL
00001c4b: PUSH2 0x1c52
00001c4e: PUSH2 0x1a00
00001c51: JUMP
00001c52: JUMPDEST
00001c53: POP
00001c54: ISZERO
00001c55: PUSH2 0x1c5a
00001c58: JUMPI
00001c59: JUMP
00001c5a: JUMPDEST
00001c5b: PUSH1 0x84
00001c5d: PUSH1 0x40
00001c5f: MLOAD
00001c60: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001c81: DUP2
00001c82: MSTORE
00001c83: PUSH1 0x20
00001c85: PUSH1 0x04
00001c87: DUP3
00001c88: ADD
00001c89: MSTORE
00001c8a: PUSH1 0x3a
00001c8c: PUSH1 0x24
00001c8e: DUP3
00001c8f: ADD
00001c90: MSTORE
00001c91: PUSH32 0x416464726573733a20756e61626c6520746f2073656e642076616c75652c2072
00001cb2: PUSH1 0x44
00001cb4: DUP3
00001cb5: ADD
00001cb6: MSTORE
00001cb7: PUSH32 0x6563697069656e74206d61792068617665207265766572746564000000000000
00001cd8: PUSH1 0x64
00001cda: DUP3
00001cdb: ADD
00001cdc: MSTORE
00001cdd: REVERT
00001cde: JUMPDEST
00001cdf: PUSH1 0x64
00001ce1: PUSH1 0x40
00001ce3: MLOAD
00001ce4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001d05: DUP2
00001d06: MSTORE
00001d07: PUSH1 0x20
00001d09: PUSH1 0x04
00001d0b: DUP3
00001d0c: ADD
00001d0d: MSTORE
00001d0e: PUSH1 0x1d
00001d10: PUSH1 0x24
00001d12: DUP3
00001d13: ADD
00001d14: MSTORE
00001d15: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000
00001d36: PUSH1 0x44
00001d38: DUP3
00001d39: ADD
00001d3a: MSTORE
00001d3b: REVERT
00001d3c: JUMPDEST
00001d3d: PUSH1 0x40
00001d3f: MLOAD
00001d40: SWAP2
00001d41: SWAP3
00001d42: PUSH2 0x1d4a
00001d45: DUP4
00001d46: PUSH2 0x18d7
00001d49: JUMP
00001d4a: JUMPDEST
00001d4b: PUSH1 0x29
00001d4d: DUP4
00001d4e: MSTORE
00001d4f: PUSH32 0x416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c
00001d70: PUSH1 0x20
00001d72: DUP5
00001d73: ADD
00001d74: MSTORE
00001d75: PUSH32 0x7565206661696c65640000000000000000000000000000000000000000000000
00001d96: PUSH1 0x40
00001d98: DUP5
00001d99: ADD
00001d9a: MSTORE
00001d9b: DUP1
00001d9c: SELFBALANCE
00001d9d: LT
00001d9e: PUSH2 0x1e23
00001da1: JUMPI
00001da2: DUP2
00001da3: EXTCODESIZE
00001da4: ISZERO
00001da5: PUSH2 0x1dc5
00001da8: JUMPI
00001da9: DUP4
00001daa: PUSH1 0x00
00001dac: SWAP3
00001dad: DUP4
00001dae: SWAP3
00001daf: PUSH1 0x20
00001db1: PUSH2 0x1dc2
00001db4: SWAP8
00001db5: MLOAD
00001db6: SWAP4
00001db7: ADD
00001db8: SWAP2
00001db9: GAS
00001dba: CALL
00001dbb: PUSH2 0x0527
00001dbe: PUSH2 0x1a00
00001dc1: JUMP
00001dc2: JUMPDEST
00001dc3: SWAP1
00001dc4: JUMP
00001dc5: JUMPDEST
00001dc6: PUSH1 0x64
00001dc8: PUSH1 0x40
00001dca: MLOAD
00001dcb: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001dec: DUP2
00001ded: MSTORE
00001dee: PUSH1 0x20
00001df0: PUSH1 0x04
00001df2: DUP3
00001df3: ADD
00001df4: MSTORE
00001df5: PUSH1 0x1d
00001df7: PUSH1 0x24
00001df9: DUP3
00001dfa: ADD
00001dfb: MSTORE
00001dfc: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000
00001e1d: PUSH1 0x44
00001e1f: DUP3
00001e20: ADD
00001e21: MSTORE
00001e22: REVERT
00001e23: JUMPDEST
00001e24: PUSH1 0x84
00001e26: PUSH1 0x40
00001e28: MLOAD
00001e29: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001e4a: DUP2
00001e4b: MSTORE
00001e4c: PUSH1 0x20
00001e4e: PUSH1 0x04
00001e50: DUP3
00001e51: ADD
00001e52: MSTORE
00001e53: PUSH1 0x26
00001e55: PUSH1 0x24
00001e57: DUP3
00001e58: ADD
00001e59: MSTORE
00001e5a: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f
00001e7b: PUSH1 0x44
00001e7d: DUP3
00001e7e: ADD
00001e7f: MSTORE
00001e80: PUSH32 0x722063616c6c0000000000000000000000000000000000000000000000000000
00001ea1: PUSH1 0x64
00001ea3: DUP3
00001ea4: ADD
00001ea5: MSTORE
00001ea6: REVERT
00001ea7: JUMPDEST
00001ea8: SWAP3
00001ea9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ebe: DUP1
00001ebf: SWAP5
00001ec0: AND
00001ec1: SWAP4
00001ec2: PUSH1 0x40
00001ec4: SWAP5
00001ec5: DUP6
00001ec6: MLOAD
00001ec7: SWAP5
00001ec8: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
00001ee9: DUP1
00001eea: DUP8
00001eeb: MSTORE
00001eec: DUP4
00001eed: PUSH1 0x00
00001eef: SWAP7
00001ef0: AND
00001ef1: SWAP1
00001ef2: PUSH1 0x04
00001ef4: SWAP6
00001ef5: DUP3
00001ef6: DUP8
00001ef7: DUP11
00001ef8: ADD
00001ef9: MSTORE
00001efa: PUSH1 0x20
00001efc: SWAP4
00001efd: PUSH1 0x24
00001eff: SWAP10
00001f00: DUP6
00001f01: DUP2
00001f02: DUP13
00001f03: DUP2
00001f04: DUP11
00001f05: GAS
00001f06: STATICCALL
00001f07: SWAP1
00001f08: DUP2
00001f09: ISZERO
00001f0a: PUSH2 0x212b
00001f0d: JUMPI
00001f0e: SWAP1
00001f0f: DUP4
00001f10: SWAP2
00001f11: DUP12
00001f12: SWAP2
00001f13: PUSH2 0x21b6
00001f16: JUMPI
00001f17: JUMPDEST
00001f18: POP
00001f19: LT
00001f1a: PUSH2 0x2135
00001f1d: JUMPI
00001f1e: DUP11
00001f1f: MLOAD
00001f20: SWAP7
00001f21: DUP4
00001f22: DUP9
00001f23: MSTORE
00001f24: DUP2
00001f25: AND
00001f26: SWAP4
00001f27: DUP5
00001f28: DUP10
00001f29: DUP10
00001f2a: ADD
00001f2b: MSTORE
00001f2c: DUP6
00001f2d: DUP9
00001f2e: DUP13
00001f2f: DUP2
00001f30: DUP11
00001f31: GAS
00001f32: STATICCALL
00001f33: SWAP8
00001f34: DUP9
00001f35: ISZERO
00001f36: PUSH2 0x212b
00001f39: JUMPI
00001f3a: DUP11
00001f3b: SWAP9
00001f3c: PUSH2 0x20f8
00001f3f: JUMPI
00001f40: JUMPDEST
00001f41: POP
00001f42: ADDRESS
00001f43: DUP2
00001f44: SUB
00001f45: PUSH2 0x2081
00001f48: JUMPI
00001f49: POP
00001f4a: DUP6
00001f4b: EXTCODESIZE
00001f4c: ISZERO
00001f4d: PUSH2 0x207d
00001f50: JUMPI
00001f51: DUP11
00001f52: MLOAD
00001f53: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001f74: DUP2
00001f75: MSTORE
00001f76: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f8b: SWAP1
00001f8c: SWAP2
00001f8d: AND
00001f8e: DUP9
00001f8f: DUP3
00001f90: ADD
00001f91: SWAP1
00001f92: DUP2
00001f93: MSTORE
00001f94: PUSH1 0x20
00001f96: DUP2
00001f97: ADD
00001f98: SWAP3
00001f99: SWAP1
00001f9a: SWAP3
00001f9b: MSTORE
00001f9c: SWAP1
00001f9d: DUP9
00001f9e: SWAP1
00001f9f: DUP3
00001fa0: SWAP1
00001fa1: DUP2
00001fa2: SWAP1
00001fa3: PUSH1 0x40
00001fa5: ADD
00001fa6: SUB
00001fa7: DUP2
00001fa8: DUP4
00001fa9: DUP10
00001faa: GAS
00001fab: CALL
00001fac: DUP1
00001fad: ISZERO
00001fae: PUSH2 0x2073
00001fb1: JUMPI
00001fb2: SWAP2
00001fb3: DUP9
00001fb4: DUP11
00001fb5: SWAP3
00001fb6: DUP7
00001fb7: SWAP6
00001fb8: SWAP5
00001fb9: PUSH2 0x2051
00001fbc: JUMPI
00001fbd: JUMPDEST
00001fbe: POP
00001fbf: POP
00001fc0: JUMPDEST
00001fc1: DUP11
00001fc2: MLOAD
00001fc3: SWAP6
00001fc4: DUP7
00001fc5: SWAP4
00001fc6: DUP5
00001fc7: SWAP3
00001fc8: DUP4
00001fc9: MSTORE
00001fca: DUP10
00001fcb: DUP4
00001fcc: ADD
00001fcd: MSTORE
00001fce: GAS
00001fcf: STATICCALL
00001fd0: SWAP7
00001fd1: DUP8
00001fd2: ISZERO
00001fd3: PUSH2 0x2048
00001fd6: JUMPI
00001fd7: POP
00001fd8: DUP5
00001fd9: SWAP7
00001fda: PUSH2 0x2018
00001fdd: JUMPI
00001fde: JUMPDEST
00001fdf: POP
00001fe0: POP
00001fe1: DUP5
00001fe2: SUB
00001fe3: SWAP4
00001fe4: DUP5
00001fe5: GT
00001fe6: PUSH2 0x1fef
00001fe9: JUMPI
00001fea: POP
00001feb: POP
00001fec: POP
00001fed: SWAP1
00001fee: JUMP
00001fef: JUMPDEST
00001ff0: PUSH1 0x11
00001ff2: SWAP1
00001ff3: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002014: DUP4
00002015: MSTORE
00002016: MSTORE
00002017: REVERT
00002018: JUMPDEST
00002019: SWAP1
0000201a: DUP1
0000201b: SWAP3
0000201c: SWAP7
0000201d: POP
0000201e: DUP2
0000201f: RETURNDATASIZE
00002020: DUP4
00002021: GT
00002022: PUSH2 0x2041
00002025: JUMPI
00002026: JUMPDEST
00002027: PUSH2 0x2030
0000202a: DUP2
0000202b: DUP4
0000202c: PUSH2 0x18f3
0000202f: JUMP
00002030: JUMPDEST
00002031: DUP2
00002032: ADD
00002033: SUB
00002034: SLT
00002035: PUSH2 0x0204
00002038: JUMPI
00002039: MLOAD
0000203a: SWAP4
0000203b: CODESIZE
0000203c: DUP1
0000203d: PUSH2 0x1fde
00002040: JUMP
00002041: JUMPDEST
00002042: POP
00002043: RETURNDATASIZE
00002044: PUSH2 0x2026
00002047: JUMP
00002048: JUMPDEST
00002049: MLOAD
0000204a: RETURNDATASIZE
0000204b: DUP7
0000204c: DUP3
0000204d: RETURNDATACOPY
0000204e: RETURNDATASIZE
0000204f: SWAP1
00002050: REVERT
00002051: JUMPDEST
00002052: SWAP1
00002053: SWAP3
00002054: POP
00002055: PUSH2 0x2060
00002058: SWAP2
00002059: SWAP4
0000205a: SWAP5
0000205b: POP
0000205c: PUSH2 0x18c3
0000205f: JUMP
00002060: JUMPDEST
00002061: PUSH2 0x206f
00002064: JUMPI
00002065: SWAP1
00002066: DUP8
00002067: DUP4
00002068: SWAP3
00002069: DUP9
0000206a: CODESIZE
0000206b: PUSH2 0x1fbd
0000206e: JUMP
0000206f: JUMPDEST
00002070: DUP7
00002071: DUP1
00002072: REVERT
00002073: JUMPDEST
00002074: DUP11
00002075: MLOAD
00002076: RETURNDATASIZE
00002077: DUP11
00002078: DUP3
00002079: RETURNDATACOPY
0000207a: RETURNDATASIZE
0000207b: SWAP1
0000207c: REVERT
0000207d: JUMPDEST
0000207e: DUP9
0000207f: DUP1
00002080: REVERT
00002081: JUMPDEST
00002082: SWAP2
00002083: SWAP1
00002084: POP
00002085: DUP6
00002086: EXTCODESIZE
00002087: ISZERO
00002088: PUSH2 0x207d
0000208b: JUMPI
0000208c: DUP11
0000208d: MLOAD
0000208e: SWAP2
0000208f: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
000020b0: DUP4
000020b1: MSTORE
000020b2: DUP9
000020b3: DUP4
000020b4: ADD
000020b5: MSTORE
000020b6: DUP4
000020b7: DUP11
000020b8: DUP4
000020b9: ADD
000020ba: MSTORE
000020bb: PUSH1 0x44
000020bd: DUP3
000020be: ADD
000020bf: MSTORE
000020c0: DUP8
000020c1: DUP2
000020c2: PUSH1 0x64
000020c4: DUP2
000020c5: DUP4
000020c6: DUP10
000020c7: GAS
000020c8: CALL
000020c9: DUP1
000020ca: ISZERO
000020cb: PUSH2 0x2073
000020ce: JUMPI
000020cf: SWAP1
000020d0: DUP10
000020d1: SWAP3
000020d2: SWAP2
000020d3: PUSH2 0x20e1
000020d6: JUMPI
000020d7: JUMPDEST
000020d8: POP
000020d9: SWAP1
000020da: DUP4
000020db: SWAP3
000020dc: SWAP2
000020dd: PUSH2 0x1fc0
000020e0: JUMP
000020e1: JUMPDEST
000020e2: SWAP8
000020e3: PUSH2 0x20ef
000020e6: DUP6
000020e7: SWAP5
000020e8: SWAP4
000020e9: SWAP3
000020ea: SWAP10
000020eb: PUSH2 0x18c3
000020ee: JUMP
000020ef: JUMPDEST
000020f0: SWAP8
000020f1: SWAP1
000020f2: SWAP2
000020f3: SWAP3
000020f4: PUSH2 0x20d7
000020f7: JUMP
000020f8: JUMPDEST
000020f9: SWAP1
000020fa: SWAP8
000020fb: POP
000020fc: DUP6
000020fd: DUP2
000020fe: DUP2
000020ff: RETURNDATASIZE
00002100: DUP4
00002101: GT
00002102: PUSH2 0x2124
00002105: JUMPI
00002106: JUMPDEST
00002107: PUSH2 0x2110
0000210a: DUP2
0000210b: DUP4
0000210c: PUSH2 0x18f3
0000210f: JUMP
00002110: JUMPDEST
00002111: DUP2
00002112: ADD
00002113: SUB
00002114: SLT
00002115: PUSH2 0x2120
00002118: JUMPI
00002119: MLOAD
0000211a: SWAP7
0000211b: CODESIZE
0000211c: PUSH2 0x1f40
0000211f: JUMP
00002120: JUMPDEST
00002121: DUP10
00002122: DUP1
00002123: REVERT
00002124: JUMPDEST
00002125: POP
00002126: RETURNDATASIZE
00002127: PUSH2 0x2106
0000212a: JUMP
0000212b: JUMPDEST
0000212c: DUP13
0000212d: MLOAD
0000212e: RETURNDATASIZE
0000212f: DUP13
00002130: DUP3
00002131: RETURNDATACOPY
00002132: RETURNDATASIZE
00002133: SWAP1
00002134: REVERT
00002135: JUMPDEST
00002136: PUSH1 0x84
00002138: DUP9
00002139: PUSH1 0x28
0000213b: DUP13
0000213c: DUP9
0000213d: DUP16
0000213e: MLOAD
0000213f: SWAP4
00002140: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002161: DUP6
00002162: MSTORE
00002163: DUP5
00002164: ADD
00002165: MSTORE
00002166: DUP3
00002167: ADD
00002168: MSTORE
00002169: PUSH32 0x53616665546f6b656e3a20696e73756666696369656e742062616c616e636520
0000218a: PUSH1 0x44
0000218c: DUP3
0000218d: ADD
0000218e: MSTORE
0000218f: PUSH32 0x666f72206d6f7665000000000000000000000000000000000000000000000000
000021b0: PUSH1 0x64
000021b2: DUP3
000021b3: ADD
000021b4: MSTORE
000021b5: REVERT
000021b6: JUMPDEST
000021b7: DUP1
000021b8: SWAP3
000021b9: POP
000021ba: DUP8
000021bb: DUP1
000021bc: SWAP3
000021bd: POP
000021be: RETURNDATASIZE
000021bf: DUP4
000021c0: GT
000021c1: PUSH2 0x21e0
000021c4: JUMPI
000021c5: JUMPDEST
000021c6: PUSH2 0x21cf
000021c9: DUP2
000021ca: DUP4
000021cb: PUSH2 0x18f3
000021ce: JUMP
000021cf: JUMPDEST
000021d0: DUP2
000021d1: ADD
000021d2: SUB
000021d3: SLT
000021d4: PUSH2 0x2120
000021d7: JUMPI
000021d8: DUP3
000021d9: SWAP1
000021da: MLOAD
000021db: CODESIZE
000021dc: PUSH2 0x1f17
000021df: JUMP
000021e0: JUMPDEST
000021e1: POP
000021e2: RETURNDATASIZE
000021e3: PUSH2 0x21c5
000021e6: JUMP
000021e7: INVALID
000021e8: LOG2
000021e9: PUSH5 0x6970667358
000021ef: UNKNOWN(0x22)
000021f0: SLT
000021f1: KECCAK256
000021f2: JUMPDEST
000021f3: UNKNOWN(0xE6)
000021f4: CALLDATALOAD
000021f5: UNKNOWN(0xB0)
000021f6: AND
000021f7: SUB
000021f8: LOG2
000021f9: ISZERO
000021fa: SMOD
000021fb: DUP5
000021fc: SUB
000021fd: UNKNOWN(0xEF)
000021fe: PUSH18 0x329b0b36e7ade37f78096f0f65d071d4d829
00002211: CODESIZE
00002212: PUSH5 0x736f6c6343
00002218: STOP
00002219: ADDMOD
0000221a: GT
0000221b: STOP
0000221c: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x01cce4be",
            "selector": "0x01cce4be",
            "calldata_variants": [
                "0x01cce4be",
                "0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x043fa11d",
            "selector": "0x043fa11d",
            "calldata_variants": [
                "0x043fa11d",
                "0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x24057e10",
            "selector": "0x24057e10",
            "calldata_variants": [
                "0x24057e10",
                "0x24057e100000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2b7ac3f3",
            "selector": "0x2b7ac3f3",
            "calldata_variants": [
                "0x2b7ac3f3",
                "0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x30c2f42d",
            "selector": "0x30c2f42d",
            "calldata_variants": [
                "0x30c2f42d",
                "0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3644e515",
            "selector": "0x3644e515",
            "calldata_variants": [
                "0x3644e515",
                "0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6b8a3fa2",
            "selector": "0x6b8a3fa2",
            "calldata_variants": [
                "0x6b8a3fa2",
                "0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 4863,
            "type": "tx_origin_used"
        }
    ]
}
high upgradeability detector Untrusted DELEGATECALL target reachable 55 no no
view
trace_id: 0xe8011ffcc0c71540cb7d8eaf9998e42d346d1dbcbeb01895bcd0766684a85b86
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 180,
    "trace_id": "0xe8011ffcc0c71540cb7d8eaf9998e42d346d1dbcbeb01895bcd0766684a85b86",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x01cce4be",
            "selector": "0x01cce4be",
            "calldata_variants": [
                "0x01cce4be",
                "0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x043fa11d",
            "selector": "0x043fa11d",
            "calldata_variants": [
                "0x043fa11d",
                "0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x24057e10",
            "selector": "0x24057e10",
            "calldata_variants": [
                "0x24057e10",
                "0x24057e100000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2b7ac3f3",
            "selector": "0x2b7ac3f3",
            "calldata_variants": [
                "0x2b7ac3f3",
                "0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x30c2f42d",
            "selector": "0x30c2f42d",
            "calldata_variants": [
                "0x30c2f42d",
                "0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3644e515",
            "selector": "0x3644e515",
            "calldata_variants": [
                "0x3644e515",
                "0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6b8a3fa2",
            "selector": "0x6b8a3fa2",
            "calldata_variants": [
                "0x6b8a3fa2",
                "0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1311,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [
        {
            "pc": 4863,
            "type": "tx_origin_used"
        }
    ],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5
call_targets: 0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26"
    ],
    "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": "0x01cce4be",
            "selector": "0x01cce4be",
            "calldata_variants": [
                "0x01cce4be",
                "0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x043fa11d",
            "selector": "0x043fa11d",
            "calldata_variants": [
                "0x043fa11d",
                "0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x24057e10",
            "selector": "0x24057e10",
            "calldata_variants": [
                "0x24057e10",
                "0x24057e100000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2b7ac3f3",
            "selector": "0x2b7ac3f3",
            "calldata_variants": [
                "0x2b7ac3f3",
                "0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x30c2f42d",
            "selector": "0x30c2f42d",
            "calldata_variants": [
                "0x30c2f42d",
                "0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3644e515",
            "selector": "0x3644e515",
            "calldata_variants": [
                "0x3644e515",
                "0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6b8a3fa2",
            "selector": "0x6b8a3fa2",
            "calldata_variants": [
                "0x6b8a3fa2",
                "0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3860,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4124,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 7242,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 6,
    "guards_detected": [
        {
            "pc": 4863,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 6
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5
call_targets: 0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26"
    ],
    "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": "0x01cce4be",
            "selector": "0x01cce4be",
            "calldata_variants": [
                "0x01cce4be",
                "0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x043fa11d",
            "selector": "0x043fa11d",
            "calldata_variants": [
                "0x043fa11d",
                "0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x24057e10",
            "selector": "0x24057e10",
            "calldata_variants": [
                "0x24057e10",
                "0x24057e100000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2b7ac3f3",
            "selector": "0x2b7ac3f3",
            "calldata_variants": [
                "0x2b7ac3f3",
                "0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x30c2f42d",
            "selector": "0x30c2f42d",
            "calldata_variants": [
                "0x30c2f42d",
                "0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3644e515",
            "selector": "0x3644e515",
            "calldata_variants": [
                "0x3644e515",
                "0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6b8a3fa2",
            "selector": "0x6b8a3fa2",
            "calldata_variants": [
                "0x6b8a3fa2",
                "0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3860,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4124,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 7242,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 6,
    "guards_detected": [
        {
            "pc": 4863,
            "type": "tx_origin_used"
        }
    ]
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 1
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 14
}
info other cast Heavy EXTCODE*/BALANCE usage 55 no
view
evidence_json
{
    "notes": "frequent external code or balance checks; may indicate introspection or validation logic",
    "ext_balance_count": 6
}