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

Analysis Run

75ec90a9-7b3b-496b-80fc-91ad3182cb8b

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 3, 2026 12:46 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
Untrusted DELEGATECALL target reachable
crit 0 high 0 proxy context implementation known
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
31406 report.consolidate complete 1 / 1 3 months ago
77062 artifact.fetch complete 1 / 3 1 week ago
77063 tool.cast_disasm complete 1 / 3 1 week ago
77064 analysis.bundle complete 1 / 3 1 week ago
77065 capability.graph complete 1 / 3 1 week ago
77066 detector.run complete 1 / 3 1 week ago
77067 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: yes
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 value-extraction path could be proven from the provided bytecode alone.
View stderr
[codex:686963] OpenAI Codex v0.77.0 (research preview)
[codex:686963] --------
[codex:686963] workdir: /tmp/codex-multi-93vz2sxq
[codex:686963] model: gpt-5.2-codex
[codex:686963] provider: openai
[codex:686963] approval: never
[codex:686963] sandbox: read-only
[codex:686963] reasoning effort: xhigh
[codex:686963] reasoning summaries: auto
[codex:686963] session id: 019b8144-ea5a-7cf3-a953-6fb53244091f
[codex:686963] --------
[codex:686963] user
[codex:686963] 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:686963] 
[codex:686963] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:686963] 
[codex:686963] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:686963] - Gas inefficiency, code quality, or best practices
[codex:686963] - Theoretical vulnerabilities without a clear extraction path
[codex:686963] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:686963] - Issues requiring social engineering or off-chain coordination
[codex:686963] 
[codex:686963] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:686963] - CALL/DELEGATECALL with controllable destination or calldata
[codex:686963] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:686963] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:686963] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:686963] - External calls before state updates (reentrancy)
[codex:686963] - SELFDESTRUCT with controllable beneficiary
[codex:686963] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:686963] 
[codex:686963] For each finding, you MUST explain:
[codex:686963] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:686963] 2. The concrete sequence of transactions to extract value
[codex:686963] 3. Why you believe this is exploitable (not just suspicious)
[codex:686963] 
[codex:686963] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:686963] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:686963] 
[codex:686963] Output MUST be valid JSON matching the provided schema.
[codex:686963] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:686963] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:686963] mcp startup: no servers
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Reading BYTECODE_BUNDLE file**
[codex:686963] exec
[codex:686963] /bin/bash -lc ls in /tmp/codex-multi-93vz2sxq succeeded in 5ms:
[codex:686963] BYTECODE_BUNDLE.txt
[codex:686963] codex-output-schema.json
[codex:686963] exec
[codex:686963] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-93vz2sxq succeeded in 6ms:
[codex:686963] Runtime bytecode bundle for best-effort auditing.
[codex:686963] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:686963] 
[codex:686963] FILE: runtime_bytecode.hex
[codex:686963] 0x6080604052600436106101145760003560e01c8063744d49cc116100a0578063de35f5cb11610064578063de35f5cb14610392578063dfbc6269146103bd578063e0acac7f146103e8578063ed72eb2414610413578063f358ec611461043e57610114565b8063744d49cc146102ab578063b2b22a85146102d6578063b81f853c14610301578063c7a983b51461032a578063dde4d9501461035557610114565b80634bd2d7f9116100e75780634bd2d7f9146101b257806352d1902d146101ef578063593777b51461021a5780635b69a7d814610245578063612411101461028257610114565b8063073b142214610119578063183bdeaa146101355780632333ad8b14610160578063465c4d1514610189575b600080fd5b610133600480360381019061012e9190612669565b610467565b005b34801561014157600080fd5b5061014a6105de565b6040516101579190613513565b60405180910390f35b34801561016c57600080fd5b5061018760048036038101906101829190612945565b6105f8565b005b34801561019557600080fd5b506101b060048036038101906101ab9190612814565b610a6a565b005b3480156101be57600080fd5b506101d960048036038101906101d491906127e7565b610f2c565b6040516101e691906130e5565b60405180910390f35b3480156101fb57600080fd5b50610204610f44565b60405161021191906130e5565b60405180910390f35b34801561022657600080fd5b5061022f610ffd565b60405161023c91906134f8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612723565b611003565b60405161027991906130ca565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906128ae565b611042565b005b3480156102b757600080fd5b506102c061126a565b6040516102cd91906134f8565b60405180910390f35b3480156102e257600080fd5b506102eb611270565b6040516102f891906134f8565b60405180910390f35b34801561030d57600080fd5b50610328600480360381019061032391906126c3565b611276565b005b34801561033657600080fd5b5061033f61154a565b60405161034c91906131a0565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190612723565b611570565b60405161038991906130e5565b60405180910390f35b34801561039e57600080fd5b506103a7611588565b6040516103b49190613513565b60405180910390f35b3480156103c957600080fd5b506103d26115a2565b6040516103df9190613513565b60405180910390f35b3480156103f457600080fd5b506103fd6115bc565b60405161040a91906134f8565b60405180910390f35b34801561041f57600080fd5b506104286115c2565b60405161043591906134f8565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612750565b6115cf565b005b346001541115801561047b57506002543411155b6104ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b190613418565b60405180910390fd5b600060f81b816000601581106104d3576104d2613bbc565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090613298565b60405180910390fd5b60008060029054906101000a900467ffffffffffffffff1690506001600060028282829054906101000a900467ffffffffffffffff16610579919061379c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f01bc4bb7c8ad3891d2159f29189c74d9528104fb81b05893732d1f06621e2c4f8183346040516105d2939291906135d4565b60405180910390a15050565b600760009054906101000a900467ffffffffffffffff1681565b600660149054906101000a900467ffffffffffffffff1667ffffffffffffffff168667ffffffffffffffff161015610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90613438565b60405180910390fd5b6000604090506000818787905061067c91906137da565b9050600081116106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b8906134d8565b60405180910390fd5b6000600230600760009054906101000a900467ffffffffffffffff16888b8b6040516020016106f4959493929190612f68565b6040516020818303038152906040526040516107109190613013565b602060405180830381855afa15801561072d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107509190612696565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d574bc68a8388886040518563ffffffff1660e01b81526004016107b3949392919061360b565b60206040518083038186803b1580156107cb57600080fd5b505afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610803919061263c565b610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990613378565b60405180910390fd5b8560086000600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000208190555060008267ffffffffffffffff8111156108a05761089f613beb565b5b6040519080825280602002602001820160405280156108ce5781602001602082028036833780820191505090505b50905060005b838110156109c95760008a8a87846108ec919061380b565b90886001866108fb9190613746565b610905919061380b565b926109129392919061370b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506000818051906020012060001c90508084848151811061097a57610979613bbc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050505080806109c190613a5d565b9150506108d4565b5080600590805190602001906109e0929190612331565b506001600760008282829054906101000a900467ffffffffffffffff16610a07919061379c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555089600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600060038190555050505050505050505050565b60045484600354610a7b9190613746565b1115610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab3906132b8565b60405180910390fd5b6000604190506000600230600760009054906101000a900467ffffffffffffffff168a8a8a604051602001610af5959493929190612fb4565b604051602081830303815290604052604051610b119190613013565b602060405180830381855afa158015610b2e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b519190612696565b9050600080600084905060005b878790508211610d3057600088888885610b789190613865565b908592610b879392919061370b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090505b6005805490508463ffffffff16108015610bff5750600060018563ffffffff168c63ffffffff16901c1663ffffffff16145b15610c17578380610c0f90613aa6565b945050610bcd565b6005805490508463ffffffff161415610c305750610d30565b610c3a8682611775565b73ffffffffffffffffffffffffffffffffffffffff1660058563ffffffff1681548110610c6a57610c69613bbc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613378565b60405180910390fd5b8363ffffffff16600163ffffffff16901b821791508380610d0b90613aa6565b9450508480610d1990613a5d565b9550508683610d289190613746565b925050610b5e565b60016002600580549050610d4491906137da565b610d4e9190613746565b841015610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790613258565b60405180910390fd5b8960036000828254610da29190613746565b9250508190555060008c67ffffffffffffffff166040600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff16901b610de59190613746565b90506000801b600960008381526020019081526020016000205414610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e36906132f8565b60405180910390fd5b6000600760009054906101000a900467ffffffffffffffff168e8e8e604051602001610e6e949392919061307c565b6040516020818303038152906040528051906020012090508060096000848152602001908152602001600020819055507f028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a8e8e8e600760009054906101000a900467ffffffffffffffff1687604051610eeb959493929190613581565b60405180910390a1610f1c8c8e73ffffffffffffffffffffffffffffffffffffffff1661179c90919063ffffffff16565b5050505050505050505050505050565b60086020528060005260406000206000915090505481565b60007f0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d39773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb906134b8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60025481565b6005818154811061101357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020549050600060028787876040516020016110879392919061303f565b6040516020818303038152906040526040516110a39190613013565b602060405180830381855afa1580156110c0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110e39190612696565b90506110f0838383611890565b61112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613278565b60405180910390fd5b60008767ffffffffffffffff1660408667ffffffffffffffff16901b6111559190613746565b9050600085898989604051602001611170949392919061307c565b60405160208183030381529060405280519060200120905080600960008481526020019081526020016000205414156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d5906132f8565b60405180910390fd5b8060096000848152602001908152602001600020819055507f028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a89898989600060405161122e95949392919061352e565b60405180910390a161125f878973ffffffffffffffffffffffffffffffffffffffff1661179c90919063ffffffff16565b505050505050505050565b60015481565b60045481565b7f0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d39773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613478565b60405180910390fd5b7f0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d39773ffffffffffffffffffffffffffffffffffffffff166113446119d6565b73ffffffffffffffffffffffffffffffffffffffff161461139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190613218565b60405180910390fd5b60006002306113a76119d6565b846040516020016113ba93929190612f2b565b6040516020818303038152906040526040516113d69190613013565b602060405180830381855afa1580156113f3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114169190612696565b9050611420611a2d565b73ffffffffffffffffffffffffffffffffffffffff1663a7c5b1118286866040518463ffffffff1660e01b815260040161145c93929190613129565b60206040518083038186803b15801561147457600080fd5b505afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ac919061263c565b6114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e2906132d8565b60405180910390fd5b61154482600067ffffffffffffffff81111561150a57611509613beb565b5b6040519080825280601f01601f19166020018201604052801561153c5781602001600182028036833780820191505090505b506000611a57565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090505481565b600060029054906101000a900467ffffffffffffffff1681565b600660149054906101000a900467ffffffffffffffff1681565b60035481565b6000600580549050905090565b60006115db6001611bd4565b905080156115ff576001600060016101000a81548160ff0219169083151502179055505b60008060026101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508560018190555084600281905550836004819055506000600381905550826005908051906020019061165b929190612331565b5081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600760006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550801561174a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161174191906131bb565b60405180910390a15b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060006117848585611cc4565b9150915061179181611d47565b819250505092915050565b804710156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690613358565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516118059061302a565b60006040518083038185875af1925050503d8060008114611842576040519150601f19603f3d011682016040523d82523d6000602084013e611847565b606091505b505090508061188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613318565b60405180910390fd5b505050565b60008082905060005b85518110156119c85760008682815181106118b7576118b6613bbc565b5b6020026020010151905080831161194057600283826040516020016118dd929190613100565b6040516020818303038152906040526040516118f99190613013565b602060405180830381855afa158015611916573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119399190612696565b92506119b4565b60028184604051602001611955929190613100565b6040516020818303038152906040526040516119719190613013565b602060405180830381855afa15801561198e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119b19190612696565b92505b5080806119c090613a5d565b915050611899565b508381149150509392505050565b6000611a047f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f1c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a837f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f26565b60000160009054906101000a900460ff1615611aa757611aa283611f30565b611bcf565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611aed57600080fd5b505afa925050508015611b1e57506040513d601f19601f82011682018060405250810190611b1b9190612696565b60015b611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b54906133f8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990613398565b60405180910390fd5b50611bce838383611fe9565b5b505050565b60008060019054906101000a900460ff1615611c4b5760018260ff16148015611c035750611c0130611752565b155b611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c39906133b8565b60405180910390fd5b60009050611cbf565b8160ff1660008054906101000a900460ff1660ff1610611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906133b8565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b600080604183511415611d065760008060006020860151925060408601519150606086015160001a9050611cfa87828585612015565b94509450505050611d40565b604083511415611d37576000806020850151915060408501519050611d2c868383612122565b935093505050611d40565b60006002915091505b9250929050565b60006004811115611d5b57611d5a613b8d565b5b816004811115611d6e57611d6d613b8d565b5b1415611d7957611f19565b60016004811115611d8d57611d8c613b8d565b5b816004811115611da057611d9f613b8d565b5b1415611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906131f8565b60405180910390fd5b60026004811115611df557611df4613b8d565b5b816004811115611e0857611e07613b8d565b5b1415611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4090613238565b60405180910390fd5b60036004811115611e5d57611e5c613b8d565b5b816004811115611e7057611e6f613b8d565b5b1415611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613338565b60405180910390fd5b600480811115611ec457611ec3613b8d565b5b816004811115611ed757611ed6613b8d565b5b1415611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f906133d8565b60405180910390fd5b5b50565b6000819050919050565b6000819050919050565b611f3981611752565b611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90613458565b60405180910390fd5b80611fa57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f1c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ff283612181565b600082511180611fff5750805b156120105761200e83836121d0565b505b505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612050576000600391509150612119565b601b8560ff16141580156120685750601c8560ff1614155b1561207a576000600491509150612119565b60006001878787876040516000815260200160405260405161209f949392919061315b565b6020604051602081039080840390855afa1580156120c1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561211057600060019250925050612119565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6121659190613746565b905061217387828885612015565b935093505050935093915050565b61218a81611f30565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606121f58383604051806060016040528060278152602001614243602791396121fd565b905092915050565b606061220884611752565b612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613498565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161226f9190613013565b600060405180830381855af49150503d80600081146122aa576040519150601f19603f3d011682016040523d82523d6000602084013e6122af565b606091505b50915091506122bf8282866122ca565b925050509392505050565b606083156122da5782905061232a565b6000835111156122ed5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232191906131d6565b60405180910390fd5b9392505050565b8280548282559060005260206000209081019282156123aa579160200282015b828111156123a95782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612351565b5b5090506123b791906123bb565b5090565b5b808211156123d45760008160009055506001016123bc565b5090565b60006123eb6123e684613670565b61364b565b9050808382526020820190508285602086028201111561240e5761240d613c2e565b5b60005b8581101561243e578161242488826124b8565b845260208401935060208301925050600181019050612411565b5050509392505050565b600061245b6124568461369c565b61364b565b9050808382526020820190508285602086028201111561247e5761247d613c2e565b5b60005b858110156124ae57816124948882612568565b845260208401935060208301925050600181019050612481565b5050509392505050565b6000813590506124c781614173565b92915050565b6000813590506124dc8161418a565b92915050565b600082601f8301126124f7576124f6613c1f565b5b81356125078482602086016123d8565b91505092915050565b600082601f83011261252557612524613c1f565b5b8135612535848260208601612448565b91505092915050565b60008151905061254d816141a1565b92915050565b600081359050612562816141b8565b92915050565b600081359050612577816141cf565b92915050565b60008151905061258c816141cf565b92915050565b60008083601f8401126125a8576125a7613c1f565b5b8235905067ffffffffffffffff8111156125c5576125c4613c1a565b5b6020830191508360018202830111156125e1576125e0613c2e565b5b9250929050565b6000813590506125f7816141e6565b92915050565b60008135905061260c816141fd565b92915050565b60008135905061262181614214565b92915050565b6000813590506126368161422b565b92915050565b60006020828403121561265257612651613c38565b5b60006126608482850161253e565b91505092915050565b60006020828403121561267f5761267e613c38565b5b600061268d84828501612553565b91505092915050565b6000602082840312156126ac576126ab613c38565b5b60006126ba8482850161257d565b91505092915050565b6000806000604084860312156126dc576126db613c38565b5b600084013567ffffffffffffffff8111156126fa576126f9613c33565b5b61270686828701612592565b93509350506020612719868287016124b8565b9150509250925092565b60006020828403121561273957612738613c38565b5b6000612747848285016125fd565b91505092915050565b600080600080600060a0868803121561276c5761276b613c38565b5b600061277a888289016125fd565b955050602061278b888289016125fd565b945050604061279c888289016125fd565b935050606086013567ffffffffffffffff8111156127bd576127bc613c33565b5b6127c9888289016124e2565b92505060806127da888289016125e8565b9150509295509295909350565b6000602082840312156127fd576127fc613c38565b5b600061280b84828501612627565b91505092915050565b60008060008060008060a0878903121561283157612830613c38565b5b600061283f89828a01612627565b965050602061285089828a016124cd565b955050604061286189828a016125fd565b945050606061287289828a01612612565b935050608087013567ffffffffffffffff81111561289357612892613c33565b5b61289f89828a01612592565b92509250509295509295509295565b600080600080600060a086880312156128ca576128c9613c38565b5b60006128d888828901612627565b95505060206128e9888289016124cd565b94505060406128fa888289016125fd565b935050606061290b88828901612627565b925050608086013567ffffffffffffffff81111561292c5761292b613c33565b5b61293888828901612510565b9150509295509295909350565b6000806000806000806080878903121561296257612961613c38565b5b600061297089828a01612627565b965050602087013567ffffffffffffffff81111561299157612990613c33565b5b61299d89828a01612592565b955095505060406129b089828a01612568565b935050606087013567ffffffffffffffff8111156129d1576129d0613c33565b5b6129dd89828a01612592565b92509250509295509295509295565b6129f58161396c565b82525050565b612a0c612a07826138ab565b613ae5565b82525050565b612a1b81613899565b82525050565b612a32612a2d82613899565b613ad3565b82525050565b612a41816138c9565b82525050565b612a50816138f5565b82525050565b612a67612a62826138f5565b613af7565b82525050565b6000612a7983856136de565b9350612a868385846139ea565b612a8f83613c3d565b840190509392505050565b6000612aa683856136ef565b9350612ab38385846139ea565b82840190509392505050565b6000612aca826136c8565b612ad481856136ef565b9350612ae48185602086016139f9565b80840191505092915050565b612af98161397e565b82525050565b612b08816139a2565b82525050565b612b17816139b4565b82525050565b6000612b28826136d3565b612b3281856136fa565b9350612b428185602086016139f9565b612b4b81613c3d565b840191505092915050565b6000612b636018836136fa565b9150612b6e82613c68565b602082019050919050565b6000612b86601c836136fa565b9150612b9182613c91565b602082019050919050565b6000612ba9601f836136fa565b9150612bb482613cba565b602082019050919050565b6000612bcc6015836136fa565b9150612bd782613ce3565b602082019050919050565b6000612bef6016836136fa565b9150612bfa82613d0c565b602082019050919050565b6000612c126013836136fa565b9150612c1d82613d35565b602082019050919050565b6000612c356019836136fa565b9150612c4082613d5e565b602082019050919050565b6000612c586011836136fa565b9150612c6382613d87565b602082019050919050565b6000612c7b601c836136fa565b9150612c8682613db0565b602082019050919050565b6000612c9e603a836136fa565b9150612ca982613dd9565b604082019050919050565b6000612cc16022836136fa565b9150612ccc82613e28565b604082019050919050565b6000612ce4601d836136fa565b9150612cef82613e77565b602082019050919050565b6000612d07601a836136fa565b9150612d1282613ea0565b602082019050919050565b6000612d2a6029836136fa565b9150612d3582613ec9565b604082019050919050565b6000612d4d602e836136fa565b9150612d5882613f18565b604082019050919050565b6000612d706022836136fa565b9150612d7b82613f67565b604082019050919050565b6000612d93602e836136fa565b9150612d9e82613fb6565b604082019050919050565b6000612db66016836136fa565b9150612dc182614005565b602082019050919050565b6000612dd9601f836136fa565b9150612de48261402e565b602082019050919050565b6000612dfc602d836136fa565b9150612e0782614057565b604082019050919050565b6000612e1f601c836136fa565b9150612e2a826140a6565b602082019050919050565b6000612e426026836136fa565b9150612e4d826140cf565b604082019050919050565b6000612e656000836136ef565b9150612e708261411e565b600082019050919050565b6000612e886020836136fa565b9150612e9382614121565b602082019050919050565b6000612eab600a836136fa565b9150612eb68261414a565b602082019050919050565b612eca81613931565b82525050565b612ee1612edc82613931565b613b13565b82525050565b612ef08161393b565b82525050565b612eff8161394b565b82525050565b612f16612f118261394b565b613b1d565b82525050565b612f258161395f565b82525050565b6000612f378286612a21565b601482019150612f478285612a21565b601482019150612f578284612a21565b601482019150819050949350505050565b6000612f748288612a21565b601482019150612f848287612f05565b600882019150612f948286612a56565b602082019150612fa5828486612a9a565b91508190509695505050505050565b6000612fc08288612a21565b601482019150612fd08287612f05565b600882019150612fe08286612f05565b600882019150612ff082856129fb565b6014820191506130008284612ed0565b6020820191508190509695505050505050565b600061301f8284612abf565b915081905092915050565b600061303582612e58565b9150819050919050565b600061304b8286612f05565b60088201915061305b82856129fb565b60148201915061306b8284612ed0565b602082019150819050949350505050565b60006130888287612f05565b6008820191506130988286612f05565b6008820191506130a882856129fb565b6014820191506130b88284612ed0565b60208201915081905095945050505050565b60006020820190506130df6000830184612a12565b92915050565b60006020820190506130fa6000830184612a47565b92915050565b60006040820190506131156000830185612a47565b6131226020830184612a47565b9392505050565b600060408201905061313e6000830186612a47565b8181036020830152613151818486612a6d565b9050949350505050565b60006080820190506131706000830187612a47565b61317d6020830186612f1c565b61318a6040830185612a47565b6131976060830184612a47565b95945050505050565b60006020820190506131b56000830184612af0565b92915050565b60006020820190506131d06000830184612b0e565b92915050565b600060208201905081810360008301526131f08184612b1d565b905092915050565b6000602082019050818103600083015261321181612b56565b9050919050565b6000602082019050818103600083015261323181612b79565b9050919050565b6000602082019050818103600083015261325181612b9c565b9050919050565b6000602082019050818103600083015261327181612bbf565b9050919050565b6000602082019050818103600083015261329181612be2565b9050919050565b600060208201905081810360008301526132b181612c05565b9050919050565b600060208201905081810360008301526132d181612c28565b9050919050565b600060208201905081810360008301526132f181612c4b565b9050919050565b6000602082019050818103600083015261331181612c6e565b9050919050565b6000602082019050818103600083015261333181612c91565b9050919050565b6000602082019050818103600083015261335181612cb4565b9050919050565b6000602082019050818103600083015261337181612cd7565b9050919050565b6000602082019050818103600083015261339181612cfa565b9050919050565b600060208201905081810360008301526133b181612d1d565b9050919050565b600060208201905081810360008301526133d181612d40565b9050919050565b600060208201905081810360008301526133f181612d63565b9050919050565b6000602082019050818103600083015261341181612d86565b9050919050565b6000602082019050818103600083015261343181612da9565b9050919050565b6000602082019050818103600083015261345181612dcc565b9050919050565b6000602082019050818103600083015261347181612def565b9050919050565b6000602082019050818103600083015261349181612e12565b9050919050565b600060208201905081810360008301526134b181612e35565b9050919050565b600060208201905081810360008301526134d181612e7b565b9050919050565b600060208201905081810360008301526134f181612e9e565b9050919050565b600060208201905061350d6000830184612ec1565b92915050565b60006020820190506135286000830184612ef6565b92915050565b600060a0820190506135436000830188612ef6565b61355060208301876129ec565b61355d6040830186612ec1565b61356a6060830185612ef6565b6135776080830184612aff565b9695505050505050565b600060a0820190506135966000830188612ef6565b6135a360208301876129ec565b6135b06040830186612ec1565b6135bd6060830185612ef6565b6135ca6080830184612ee7565b9695505050505050565b60006060820190506135e96000830186612ef6565b6135f66020830185612a38565b6136036040830184612ec1565b949350505050565b60006060820190506136206000830187612ef6565b61362d6020830186612a47565b8181036040830152613640818486612a6d565b905095945050505050565b6000613655613666565b90506136618282613a2c565b919050565b6000604051905090565b600067ffffffffffffffff82111561368b5761368a613beb565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136b7576136b6613beb565b5b602082029050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000808585111561371f5761371e613c29565b5b838611156137305761372f613c24565b5b6001850283019150848603905094509492505050565b600061375182613931565b915061375c83613931565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561379157613790613b2f565b5b828201905092915050565b60006137a78261394b565b91506137b28361394b565b92508267ffffffffffffffff038211156137cf576137ce613b2f565b5b828201905092915050565b60006137e582613931565b91506137f083613931565b925082613800576137ff613b5e565b5b828204905092915050565b600061381682613931565b915061382183613931565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561385a57613859613b2f565b5b828202905092915050565b600061387082613931565b915061387b83613931565b92508282101561388e5761388d613b2f565b5b828203905092915050565b60006138a482613911565b9050919050565b60006138b682613911565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffffff000000000000000000000082169050919050565b6000819050919050565b600061390a82613899565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000613977826139c6565b9050919050565b600061398982613990565b9050919050565b600061399b82613911565b9050919050565b60006139ad8261393b565b9050919050565b60006139bf8261395f565b9050919050565b60006139d1826139d8565b9050919050565b60006139e382613911565b9050919050565b82818337600083830152505050565b60005b83811015613a175780820151818401526020810190506139fc565b83811115613a26576000848401525b50505050565b613a3582613c3d565b810181811067ffffffffffffffff82111715613a5457613a53613beb565b5b80604052505050565b6000613a6882613931565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9b57613a9a613b2f565b5b600182019050919050565b6000613ab18261393b565b915063ffffffff821415613ac857613ac7613b2f565b5b600182019050919050565b6000613ade82613b01565b9050919050565b6000613af082613b01565b9050919050565b6000819050919050565b6000613b0c82613c5b565b9050919050565b6000819050919050565b6000613b2882613c4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160c01b9050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f6d757374206265207468726f756768206163746976652070726f787900000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4e6f7420656e6f756768207369676e6174757265730000000000000000000000600082015250565b7f556e61626c6520746f207665726966792070726f6f6600000000000000000000600082015250565b7f496e76616c69642064657374696e6174696f6e00000000000000000000000000600082015250565b7f556e61626c6520746f20776974686472617720616d6f756e7400000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f5769746864726177616c20616c72656164792070726f63657373656400000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f436f756c64206e6f7420766572696679207369676e6174757265000000000000600082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f496e76616c6964206465706f73697420616d6f756e7400000000000000000000600082015250565b7f496e76616c6964206e6f6e636520666f72206f7261636c652075706461746500600082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f6d757374206265207468726f7567682064656c656761746563616c6c00000000600082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b50565b7f6d757374206e6f74206265207468726f7567682064656c656761746563616c6c600082015250565b7f4e6f206f7261636c657300000000000000000000000000000000000000000000600082015250565b61417c81613899565b811461418757600080fd5b50565b614193816138ab565b811461419e57600080fd5b50565b6141aa816138bd565b81146141b557600080fd5b50565b6141c1816138c9565b81146141cc57600080fd5b50565b6141d8816138f5565b81146141e357600080fd5b50565b6141ef816138ff565b81146141fa57600080fd5b50565b61420681613931565b811461421157600080fd5b50565b61421d8161393b565b811461422857600080fd5b50565b6142348161394b565b811461423f57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220569a15327a2ccc3fc8b285be7a0c08fd860cd6f57e1a4d060ae04c2037f8fb6364736f6c63430008060033
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing EVM bytecode for vulnerabilities**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] 
[codex:686963] # load bytecode from file
[codex:686963] import sys
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] # find runtime hex after 'FILE: runtime_bytecode.hex'
[codex:686963] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text)
[codex:686963] if not m:
[codex:686963]     print('no hex found'); sys.exit(1)
[codex:686963] hexstr=m.group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # opcode names
[codex:686963] opnames={
[codex:686963]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] # base opcodes mapping for relevant ones
[codex:686963] base={
[codex:686963] 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:686963] 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:686963] 0x20:'SHA3',
[codex:686963] 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:686963] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:686963] 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:686963] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:686963] }
[codex:686963] 
[codex:686963] opnames.update(base)
[codex:686963] 
[codex:686963] def disasm(code):
[codex:686963]     i=0
[codex:686963]     out=[]
[codex:686963]     while i < len(code):
[codex:686963]         op=code[i]
[codex:686963]         name=opnames.get(op, 'UNKNOWN')
[codex:686963]         if 0x60 <= op <= 0x7f:
[codex:686963]             n=op-0x5f
[codex:686963]             data=code[i+1:i+1+n]
[codex:686963]             out.append((i,name,data))
[codex:686963]             i+=1+n
[codex:686963]         else:
[codex:686963]             out.append((i,name,None))
[codex:686963]             i+=1
[codex:686963]     return out
[codex:686963] 
[codex:686963] ops=disasm(code)
[codex:686963] 
[codex:686963] # gather call-like
[codex:686963] call_ops=[o for o in ops if o[1] in ('CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT')]
[codex:686963] print('call-like ops count', len(call_ops))
[codex:686963] for off,name,data in call_ops:
[codex:686963]     print(hex(off), name)
[codex:686963] 
[codex:686963] # gather SSTORE offsets
[codex:686963] sstore=[o for o in ops if o[1]=='SSTORE']
[codex:686963] print('SSTORE count', len(sstore))
[codex:686963] print('first few', [hex(o[0]) for o in sstore[:10]])
[codex:686963] 
[codex:686963] # find PUSH before selfdestruct etc? For now just print context of call ops
[codex:686963] # build map offset->index for easier context
[codex:686963] idx={off:i for i,(off,_,_) in enumerate(ops)}
[codex:686963] 
[codex:686963] # function to print context
[codex:686963] for off,name,data in call_ops:
[codex:686963]     i=idx[off]
[codex:686963]     ctx=ops[max(0,i-10):i+1]
[codex:686963]     # show last few ops before call
[codex:686963]     print('\\ncontext for',name,'at',hex(off))
[codex:686963]     for off2,name2,data2 in ctx:
[codex:686963]         if data2 is None:
[codex:686963]             print(hex(off2).rjust(6), name2)
[codex:686963]         else:
[codex:686963]             print(hex(off2).rjust(6), name2, data2.hex())
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 34ms:
[codex:686963] call-like ops count 12
[codex:686963] 0x71c STATICCALL
[codex:686963] 0x7ce STATICCALL
[codex:686963] 0xb1d STATICCALL
[codex:686963] 0x10af STATICCALL
[codex:686963] 0x13e2 STATICCALL
[codex:686963] 0x1477 STATICCALL
[codex:686963] 0x1812 CALL
[codex:686963] 0x1905 STATICCALL
[codex:686963] 0x197d STATICCALL
[codex:686963] 0x1af0 STATICCALL
[codex:686963] 0x20b0 STATICCALL
[codex:686963] 0x227b DELEGATECALL
[codex:686963] SSTORE count 23
[codex:686963] first few ['0x59e', '0x883', '0xa2c', '0xa55', '0xa5d', '0xda8', '0xe9d', '0x11f5', '0x15fd', '0x1627']
[codex:686963] 
[codex:686963] context for STATICCALL at 0x71c
[codex:686963]  0x710 JUMPDEST
[codex:686963]  0x711 PUSH1 20
[codex:686963]  0x713 PUSH1 40
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing contract call patterns and potential withdrawal risks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] # disasm quick
[codex:686963] i=0
[codex:686963] chain_offsets=[]
[codex:686963] while i<len(code):
[codex:686963]     op=code[i]
[codex:686963]     if op==0x46: # CHAINID
[codex:686963]         chain_offsets.append(i)
[codex:686963]         i+=1; continue
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         i+=1+(op-0x5f)
[codex:686963]     else:
[codex:686963]         i+=1
[codex:686963] print('CHAINID offsets', [hex(x) for x in chain_offsets])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] CHAINID offsets []
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing contract initialization and upgrade functions**
[codex:686963] 
[codex:686963] I'm assessing whether the contract has unprotected initialization exposing ownership or fund withdrawal risks, checking for missing chain ID in signatures that could lead to replay attacks across chains, and trying to decode its function dispatch table to identify critical functions like upgrades or signatures by parsing selectors and jump destinations. This will clarify if any concrete exploit paths exist or if I should mark no findings.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # Disassemble small to identify selectors: pattern PUSH4 <sig> EQ PUSH2 <dest> JUMPI
[codex:686963] 
[codex:686963] def read_push(i):
[codex:686963]     op=code[i]
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         return n,data
[codex:686963]     return None,None
[codex:686963] 
[codex:686963] selectors=[]
[codex:686963] i=0
[codex:686963] while i<len(code)-1:
[codex:686963]     op=code[i]
[codex:686963]     if op==0x63: # PUSH4
[codex:686963]         n,data=read_push(i)
[codex:686963]         if n==4:
[codex:686963]             sig=data.hex()
[codex:686963]             # look ahead for EQ PUSH2 dest JUMPI
[codex:686963]             j=i+1+n
[codex:686963]             # skip maybe? But typical pattern: PUSH4 sig; EQ; PUSH2 dest; JUMPI
[codex:686963]             if code[j]==0x14 and code[j+1]==0x61: # EQ, PUSH2
[codex:686963]                 dest=int.from_bytes(code[j+2:j+4],'big')
[codex:686963]                 if code[j+4]==0x57: # JUMPI
[codex:686963]                     selectors.append((sig,dest,i))
[codex:686963]             
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         i+=1
[codex:686963] 
[codex:686963] print('selectors count', len(selectors))
[codex:686963] for sig,dest,off in selectors:
[codex:686963]     print(sig, hex(dest))
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 30ms:
[codex:686963] selectors count 19
[codex:686963] de35f5cb 0x392
[codex:686963] dfbc6269 0x3bd
[codex:686963] e0acac7f 0x3e8
[codex:686963] ed72eb24 0x413
[codex:686963] f358ec61 0x43e
[codex:686963] 744d49cc 0x2ab
[codex:686963] b2b22a85 0x2d6
[codex:686963] b81f853c 0x301
[codex:686963] c7a983b5 0x32a
[codex:686963] dde4d950 0x355
[codex:686963] 4bd2d7f9 0x1b2
[codex:686963] 52d1902d 0x1ef
[codex:686963] 593777b5 0x21a
[codex:686963] 5b69a7d8 0x245
[codex:686963] 61241110 0x282
[codex:686963] 073b1422 0x119
[codex:686963] 183bdeaa 0x135
[codex:686963] 2333ad8b 0x160
[codex:686963] 465c4d15 0x189
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Mapping functions for access checks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # find CALLER opcodes
[codex:686963] caller_offsets=[]
[codex:686963] i=0
[codex:686963] while i < len(code):
[codex:686963]     op=code[i]
[codex:686963]     if op==0x33:
[codex:686963]         caller_offsets.append(i)
[codex:686963]         i+=1
[codex:686963]         continue
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         i+=1+(op-0x5f)
[codex:686963]     else:
[codex:686963]         i+=1
[codex:686963] print('CALLER offsets', [hex(x) for x in caller_offsets])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] CALLER offsets ['0x429e']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Investigating CALLER opcode usage**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # disasm around 0x429e
[codex:686963] start=0x4280
[codex:686963] end=0x42c0
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=''
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'PUSH{n}', data.hex())
[codex:686963]         i+=1+n
[codex:686963]         continue
[codex:686963]     # map known op
[codex:686963]     names={0x33:'CALLER',0x56:'JUMP',0x57:'JUMPI',0x5b:'JUMPDEST',0x54:'SLOAD',0x55:'SSTORE',0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xfd:'REVERT',0xf3:'RETURN'}
[codex:686963]     name=names.get(op, f'OP_{op:02x}')
[codex:686963]     print(hex(i).rjust(6), name)
[codex:686963]     i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq exited 1 in 35ms:
[codex:686963] 0x4280 PUSH27 0c08fd860cd6f57e1a4d060ae04c2037f8fb6364736f6c63430008
[codex:686963] 0x429c OP_06
[codex:686963] 0x429d OP_00
[codex:686963] 0x429e CALLER
[codex:686963] Traceback (most recent call last):
[codex:686963]   File "<stdin>", line 13, in <module>
[codex:686963] IndexError: index out of range
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing contract bytecode for CALLER and ORIGIN opcodes**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # search for ORIGIN opcode 0x32
[codex:686963] origin_offsets=[]
[codex:686963] 
[codex:686963] i=0
[codex:686963] while i<len(code):
[codex:686963]     op=code[i]
[codex:686963]     if op==0x32:
[codex:686963]         origin_offsets.append(i)
[codex:686963]         i+=1
[codex:686963]         continue
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         i+=1+(op-0x5f)
[codex:686963]     else:
[codex:686963]         i+=1
[codex:686963] print('ORIGIN offsets', [hex(x) for x in origin_offsets])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 29ms:
[codex:686963] ORIGIN offsets ['0x4277']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Examining ACCESS CONTROL and CALLER usage**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={
[codex:686963]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={
[codex:686963] 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:686963] 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:686963] 0x20:'SHA3',
[codex:686963] 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:686963] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:686963] 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:686963] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:686963] }
[codex:686963] opnames.update(base)
[codex:686963] 
[codex:686963] # function selectors mapping from previous run
[codex:686963] selectors={
[codex:686963] '073b1422':0x119,
[codex:686963] '183bdeaa':0x135,
[codex:686963] '2333ad8b':0x160,
[codex:686963] '465c4d15':0x189,
[codex:686963] '4bd2d7f9':0x1b2,
[codex:686963] '52d1902d':0x1ef,
[codex:686963] '593777b5':0x21a,
[codex:686963] '5b69a7d8':0x245,
[codex:686963] '61241110':0x282,
[codex:686963] '744d49cc':0x2ab,
[codex:686963] 'b2b22a85':0x2d6,
[codex:686963] 'b81f853c':0x301,
[codex:686963] 'c7a983b5':0x32a,
[codex:686963] 'dde4d950':0x355,
[codex:686963] 'de35f5cb':0x392,
[codex:686963] 'dfbc6269':0x3bd,
[codex:686963] 'e0acac7f':0x3e8,
[codex:686963] 'ed72eb24':0x413,
[codex:686963] 'f358ec61':0x43e,
[codex:686963] }
[codex:686963] 
[codex:686963] # function to disasm from start for N bytes
[codex:686963] 
[codex:686963] def disasm(start, count=200):
[codex:686963]     i=start
[codex:686963]     end=min(len(code), start+count)
[codex:686963]     out=[]
[codex:686963]     while i<end:
[codex:686963]         op=code[i]
[codex:686963]         name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]         if 0x60<=op<=0x7f:
[codex:686963]             n=op-0x5f
[codex:686963]             data=code[i+1:i+1+n]
[codex:686963]             out.append((i,f'{name} {data.hex()}'))
[codex:686963]             i+=1+n
[codex:686963]         else:
[codex:686963]             out.append((i,name))
[codex:686963]             i+=1
[codex:686963]     return out
[codex:686963] 
[codex:686963] for sig, start in selectors.items():
[codex:686963]     print('\\nFunction',sig,'at',hex(start))
[codex:686963]     for off,ins in disasm(start,120):
[codex:686963]         print(hex(off).rjust(6), ins)
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] 
[codex:686963] Function 073b1422 at 0x119
[codex:686963]  0x119 JUMPDEST
[codex:686963]  0x11a PUSH2 0133
[codex:686963]  0x11d PUSH1 04
[codex:686963]  0x11f DUP1
[codex:686963]  0x120 CALLDATASIZE
[codex:686963]  0x121 SUB
[codex:686963]  0x122 DUP2
[codex:686963]  0x123 ADD
[codex:686963]  0x124 SWAP1
[codex:686963]  0x125 PUSH2 012e
[codex:686963]  0x128 SWAP2
[codex:686963]  0x129 SWAP1
[codex:686963]  0x12a PUSH2 2669
[codex:686963]  0x12d JUMP
[codex:686963]  0x12e JUMPDEST
[codex:686963]  0x12f PUSH2 0467
[codex:686963]  0x132 JUMP
[codex:686963]  0x133 JUMPDEST
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing internal function logic and flow**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # disasm from 0x0467 to 0x0550
[codex:686963] start=0x0467
[codex:686963] end=0x0550
[codex:686963] 
[codex:686963] opnames={
[codex:686963]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963]  0x467 JUMPDEST
[codex:686963]  0x468 CALLVALUE
[codex:686963]  0x469 PUSH1 01
[codex:686963]  0x46b SLOAD
[codex:686963]  0x46c GT
[codex:686963]  0x46d ISZERO
[codex:686963]  0x46e DUP1
[codex:686963]  0x46f ISZERO
[codex:686963]  0x470 PUSH2 047b
[codex:686963]  0x473 JUMPI
[codex:686963]  0x474 POP
[codex:686963]  0x475 PUSH1 02
[codex:686963]  0x477 SLOAD
[codex:686963]  0x478 CALLVALUE
[codex:686963]  0x479 GT
[codex:686963]  0x47a ISZERO
[codex:686963]  0x47b JUMPDEST
[codex:686963]  0x47c PUSH2 04ba
[codex:686963]  0x47f JUMPI
[codex:686963]  0x480 PUSH1 40
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Continuing exploration**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] start=0x0539
[codex:686963] end=0x05e0
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963]  0x539 JUMPDEST
[codex:686963]  0x53a PUSH1 00
[codex:686963]  0x53c DUP1
[codex:686963]  0x53d PUSH1 02
[codex:686963]  0x53f SWAP1
[codex:686963]  0x540 SLOAD
[codex:686963]  0x541 SWAP1
[codex:686963]  0x542 PUSH2 0100
[codex:686963]  0x545 EXP
[codex:686963]  0x546 SWAP1
[codex:686963]  0x547 DIV
[codex:686963]  0x548 PUSH8 ffffffffffffffff
[codex:686963]  0x551 AND
[codex:686963]  0x552 SWAP1
[codex:686963]  0x553 POP
[codex:686963]  0x554 PUSH1 01
[codex:686963]  0x556 PUSH1 00
[codex:686963]  0x558 PUSH1 02
[codex:686963]  0x55a DUP3
[codex:686963]  0x55b DUP3
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing payable function and seeking upgrade method**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x0f44
[codex:686963] end=0x0ff0
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963]  0xf44 JUMPDEST
[codex:686963]  0xf45 PUSH1 00
[codex:686963]  0xf47 PUSH32 0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397
[codex:686963]  0xf68 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963]  0xf7d AND
[codex:686963]  0xf7e ADDRESS
[codex:686963]  0xf7f PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963]  0xf94 AND
[codex:686963]  0xf95 EQ
[codex:686963]  0xf96 PUSH2 0fd4
[codex:686963]  0xf99 JUMPI
[codex:686963]  0xf9a PUSH1 40
[codex:686963]  0xf9c MLOAD
[codex:686963]  0xf9d PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963]  0xfbe DUP2
[codex:686963]  0xfbf MSTORE
[codex:686963]  0xfc0 PUSH1 04
[codex:686963]  0xfc2 ADD
[codex:686963]  0xfc3 PUSH2 0fcb
[codex:686963]  0xfc6 SWAP1
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Continuing process**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x0fd4
[codex:686963] end=0x1010
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963]  0xfd4 JUMPDEST
[codex:686963]  0xfd5 PUSH32 360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
[codex:686963]  0xff6 PUSH1 00
[codex:686963]  0xff8 SHL
[codex:686963]  0xff9 SWAP1
[codex:686963]  0xffa POP
[codex:686963]  0xffb SWAP1
[codex:686963]  0xffc JUMP
[codex:686963]  0xffd JUMPDEST
[codex:686963]  0xffe PUSH1 02
[codex:686963] 0x1000 SLOAD
[codex:686963] 0x1001 DUP2
[codex:686963] 0x1002 JUMP
[codex:686963] 0x1003 JUMPDEST
[codex:686963] 0x1004 PUSH1 05
[codex:686963] 0x1006 DUP2
[codex:686963] 0x1007 DUP2
[codex:686963] 0x1008 SLOAD
[codex:686963] 0x1009 DUP2
[codex:686963] 0x100a LT
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing UUPS proxy checks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # find string near 0x34b8 by scanning for ASCII bytes in that region
[codex:686963] start=0x34b8
[codex:686963] end=0x34b8+200
[codex:686963] sub=code[start:end]
[codex:686963] print(sub)
[codex:686963] # attempt to decode ascii sequences
[codex:686963] import re
[codex:686963] for m in re.finditer(b'([ -~]{5,})', sub):
[codex:686963]     print('ascii', m.group(1))
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 28ms:
[codex:686963] b'[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra4\xd1\x81a.{V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra4\xf1\x81a.\x9eV[\x90P\x91\x90PV[`\x00` \x82\x01\x90Pa5\r`\x00\x83\x01\x84a.\xc1V[\x92\x91PPV[`\x00` \x82\x01\x90Pa5(`\x00\x83\x01\x84a.\xf6V[\x92\x91PPV[`\x00`\xa0\x82\x01\x90Pa5C`\x00\x83\x01\x88a.\xf6V[a5P` \x83\x01\x87a)\xecV[a5]`@\x83\x01\x86a.\xc1V[a5j``\x83\x01\x85a.\xf6V[a5w`\x80\x83\x01\x84a*\xffV[\x96\x95PPPPPP'
[codex:686963] ascii b'a.{V['
[codex:686963] ascii b'PPV[`'
[codex:686963] ascii b'Pa5(`'
[codex:686963] ascii b'PPV[`'
[codex:686963] ascii b'Pa5C`'
[codex:686963] ascii b'V[a5P` '
[codex:686963] ascii b'V[a5]`@'
[codex:686963] ascii b'V[a5j``'
[codex:686963] ascii b'V[a5w`'
[codex:686963] ascii b'PPPPPP'
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing proxy-related checks and selectors**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x15cf
[codex:686963] end=0x1750
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x15cf JUMPDEST
[codex:686963] 0x15d0 PUSH1 00
[codex:686963] 0x15d2 PUSH2 15db
[codex:686963] 0x15d5 PUSH1 01
[codex:686963] 0x15d7 PUSH2 1bd4
[codex:686963] 0x15da JUMP
[codex:686963] 0x15db JUMPDEST
[codex:686963] 0x15dc SWAP1
[codex:686963] 0x15dd POP
[codex:686963] 0x15de DUP1
[codex:686963] 0x15df ISZERO
[codex:686963] 0x15e0 PUSH2 15ff
[codex:686963] 0x15e3 JUMPI
[codex:686963] 0x15e4 PUSH1 01
[codex:686963] 0x15e6 PUSH1 00
[codex:686963] 0x15e8 PUSH1 01
[codex:686963] 0x15ea PUSH2 0100
[codex:686963] 0x15ed EXP
[codex:686963] 0x15ee DUP2
[codex:686963] 0x15ef SLOAD
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing initializer function details**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1bd4
[codex:686963] end=0x1c80
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0x1bd4 JUMPDEST
[codex:686963] 0x1bd5 PUSH1 00
[codex:686963] 0x1bd7 DUP1
[codex:686963] 0x1bd8 PUSH1 01
[codex:686963] 0x1bda SWAP1
[codex:686963] 0x1bdb SLOAD
[codex:686963] 0x1bdc SWAP1
[codex:686963] 0x1bdd PUSH2 0100
[codex:686963] 0x1be0 EXP
[codex:686963] 0x1be1 SWAP1
[codex:686963] 0x1be2 DIV
[codex:686963] 0x1be3 PUSH1 ff
[codex:686963] 0x1be5 AND
[codex:686963] 0x1be6 ISZERO
[codex:686963] 0x1be7 PUSH2 1c4b
[codex:686963] 0x1bea JUMPI
[codex:686963] 0x1beb PUSH1 01
[codex:686963] 0x1bed DUP3
[codex:686963] 0x1bee PUSH1 ff
[codex:686963] 0x1bf0 AND
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgradeable contract logic**
[codex:686963] 
[codex:686963] I'm examining an OpenZeppelin Initializable pattern, realizing this contract is likely the UUPS implementation—not a proxy—and it contains upgrade functions without fallback delegatecall. I'll focus on finding the upgrade function by locating storage writes to the EIP1967 implementation slot to understand potential access control risks.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] const=bytes.fromhex('360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc')
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(const,i)]
[codex:686963] print('const occurrences', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 28ms:
[codex:686963] const occurrences ['0xfd6', '0x19dd', '0x1b5f', '0x1f7e']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Investigating constant usage locations**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x19c0
[codex:686963] end=0x1a30
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x19c0 JUMPDEST
[codex:686963] 0x19c1 SWAP2
[codex:686963] 0x19c2 POP
[codex:686963] 0x19c3 POP
[codex:686963] 0x19c4 PUSH2 1899
[codex:686963] 0x19c7 JUMP
[codex:686963] 0x19c8 JUMPDEST
[codex:686963] 0x19c9 POP
[codex:686963] 0x19ca DUP4
[codex:686963] 0x19cb DUP2
[codex:686963] 0x19cc EQ
[codex:686963] 0x19cd SWAP2
[codex:686963] 0x19ce POP
[codex:686963] 0x19cf POP
[codex:686963] 0x19d0 SWAP4
[codex:686963] 0x19d1 SWAP3
[codex:686963] 0x19d2 POP
[codex:686963] 0x19d3 POP
[codex:686963] 0x19d4 POP
[codex:686963] 0x19d5 JUMP
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing low-level implementation retrieval**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1b30
[codex:686963] end=0x1be5
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0x1b30 STOP
[codex:686963] 0x1b31 STOP
[codex:686963] 0x1b32 STOP
[codex:686963] 0x1b33 STOP
[codex:686963] 0x1b34 STOP
[codex:686963] 0x1b35 STOP
[codex:686963] 0x1b36 STOP
[codex:686963] 0x1b37 STOP
[codex:686963] 0x1b38 STOP
[codex:686963] 0x1b39 STOP
[codex:686963] 0x1b3a STOP
[codex:686963] 0x1b3b STOP
[codex:686963] 0x1b3c STOP
[codex:686963] 0x1b3d STOP
[codex:686963] 0x1b3e STOP
[codex:686963] 0x1b3f STOP
[codex:686963] 0x1b40 STOP
[codex:686963] 0x1b41 STOP
[codex:686963] 0x1b42 STOP
[codex:686963] 0x1b43 STOP
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function references**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # search for PUSH2 1b5d occurrences
[codex:686963] pattern=bytes([0x61,0x1b,0x5d])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1b5d at', [hex(i) for i in idx])
[codex:686963] 
[codex:686963] # search for PUSH2 1bce etc
[codex:686963] pattern=bytes([0x61,0x1b,0xce])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1bce at', [hex(i) for i in idx])
[codex:686963] 
[codex:686963] # search for PUSH2 1fe9 etc
[codex:686963] pattern=bytes([0x61,0x1f,0xe9])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1fe9 at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] PUSH2 1b5d at ['0x1b1f']
[codex:686963] PUSH2 1bce at ['0x1bc4']
[codex:686963] PUSH2 1fe9 at ['0x1bca']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Inspecting function around 0x1b00**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1af0
[codex:686963] end=0x1b30
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] 0x1af0 STATICCALL
[codex:686963] 0x1af1 SWAP3
[codex:686963] 0x1af2 POP
[codex:686963] 0x1af3 POP
[codex:686963] 0x1af4 POP
[codex:686963] 0x1af5 DUP1
[codex:686963] 0x1af6 ISZERO
[codex:686963] 0x1af7 PUSH2 1b1e
[codex:686963] 0x1afa JUMPI
[codex:686963] 0x1afb POP
[codex:686963] 0x1afc PUSH1 40
[codex:686963] 0x1afe MLOAD
[codex:686963] 0x1aff RETURNDATASIZE
[codex:686963] 0x1b00 PUSH1 1f
[codex:686963] 0x1b02 NOT
[codex:686963] 0x1b03 PUSH1 1f
[codex:686963] 0x1b05 DUP3
[codex:686963] 0x1b06 ADD
[codex:686963] 0x1b07 AND
[codex:686963] 0x1b08 DUP3
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function calls**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1a70
[codex:686963] end=0x1b00
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 25ms:
[codex:686963] 0x1a70 OP_b5
[codex:686963] 0x1a71 OP_b9
[codex:686963] 0x1a72 BLOCKHASH
[codex:686963] 0x1a73 PUSH14 12a635614ffd914360001b611f26
[codex:686963] 0x1a82 JUMP
[codex:686963] 0x1a83 JUMPDEST
[codex:686963] 0x1a84 PUSH1 00
[codex:686963] 0x1a86 ADD
[codex:686963] 0x1a87 PUSH1 00
[codex:686963] 0x1a89 SWAP1
[codex:686963] 0x1a8a SLOAD
[codex:686963] 0x1a8b SWAP1
[codex:686963] 0x1a8c PUSH2 0100
[codex:686963] 0x1a8f EXP
[codex:686963] 0x1a90 SWAP1
[codex:686963] 0x1a91 DIV
[codex:686963] 0x1a92 PUSH1 ff
[codex:686963] 0x1a94 AND
[codex:686963] 0x1a95 ISZERO
[codex:686963] 0x1a96 PUSH2 1aa7
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing initialization and proxy checks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1f20
[codex:686963] end=0x1f90
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x1f20 SWAP1
[codex:686963] 0x1f21 POP
[codex:686963] 0x1f22 SWAP2
[codex:686963] 0x1f23 SWAP1
[codex:686963] 0x1f24 POP
[codex:686963] 0x1f25 JUMP
[codex:686963] 0x1f26 JUMPDEST
[codex:686963] 0x1f27 PUSH1 00
[codex:686963] 0x1f29 DUP2
[codex:686963] 0x1f2a SWAP1
[codex:686963] 0x1f2b POP
[codex:686963] 0x1f2c SWAP2
[codex:686963] 0x1f2d SWAP1
[codex:686963] 0x1f2e POP
[codex:686963] 0x1f2f JUMP
[codex:686963] 0x1f30 JUMPDEST
[codex:686963] 0x1f31 PUSH2 1f39
[codex:686963] 0x1f34 DUP2
[codex:686963] 0x1f35 PUSH2 1752
[codex:686963] 0x1f38 JUMP
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Continuing process**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1f78
[codex:686963] end=0x2005
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0x1f78 JUMPDEST
[codex:686963] 0x1f79 DUP1
[codex:686963] 0x1f7a PUSH2 1fa5
[codex:686963] 0x1f7d PUSH32 360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
[codex:686963] 0x1f9e PUSH1 00
[codex:686963] 0x1fa0 SHL
[codex:686963] 0x1fa1 PUSH2 1f1c
[codex:686963] 0x1fa4 JUMP
[codex:686963] 0x1fa5 JUMPDEST
[codex:686963] 0x1fa6 PUSH1 00
[codex:686963] 0x1fa8 ADD
[codex:686963] 0x1fa9 PUSH1 00
[codex:686963] 0x1fab PUSH2 0100
[codex:686963] 0x1fae EXP
[codex:686963] 0x1faf DUP2
[codex:686963] 0x1fb0 SLOAD
[codex:686963] 0x1fb1 DUP2
[codex:686963] 0x1fb2 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0x1fc7 MUL
[codex:686963] 0x1fc8 NOT
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Mapping function selectors to internal calls**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] pattern=bytes([0x61,0x1a,0x83])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1a83 at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 25ms:
[codex:686963] PUSH2 1a83 at ['0x1a58']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Inspecting memory region near 0x1a58**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1a40
[codex:686963] end=0x1a70
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963] 0x1a40 SELFDESTRUCT
[codex:686963] 0x1a41 SELFDESTRUCT
[codex:686963] 0x1a42 SELFDESTRUCT
[codex:686963] 0x1a43 SELFDESTRUCT
[codex:686963] 0x1a44 SELFDESTRUCT
[codex:686963] 0x1a45 SELFDESTRUCT
[codex:686963] 0x1a46 SELFDESTRUCT
[codex:686963] 0x1a47 SELFDESTRUCT
[codex:686963] 0x1a48 SELFDESTRUCT
[codex:686963] 0x1a49 SELFDESTRUCT
[codex:686963] 0x1a4a SELFDESTRUCT
[codex:686963] 0x1a4b SELFDESTRUCT
[codex:686963] 0x1a4c SELFDESTRUCT
[codex:686963] 0x1a4d SELFDESTRUCT
[codex:686963] 0x1a4e SELFDESTRUCT
[codex:686963] 0x1a4f SELFDESTRUCT
[codex:686963] 0x1a50 SELFDESTRUCT
[codex:686963] 0x1a51 SELFDESTRUCT
[codex:686963] 0x1a52 AND
[codex:686963] 0x1a53 SWAP1
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Investigating suspicious SELFDESTRUCT opcodes**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1a57
[codex:686963] end=0x1ae0
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 29ms:
[codex:686963] 0x1a57 JUMPDEST
[codex:686963] 0x1a58 PUSH2 1a83
[codex:686963] 0x1a5b PUSH32 4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143
[codex:686963] 0x1a7c PUSH1 00
[codex:686963] 0x1a7e SHL
[codex:686963] 0x1a7f PUSH2 1f26
[codex:686963] 0x1a82 JUMP
[codex:686963] 0x1a83 JUMPDEST
[codex:686963] 0x1a84 PUSH1 00
[codex:686963] 0x1a86 ADD
[codex:686963] 0x1a87 PUSH1 00
[codex:686963] 0x1a89 SWAP1
[codex:686963] 0x1a8a SLOAD
[codex:686963] 0x1a8b SWAP1
[codex:686963] 0x1a8c PUSH2 0100
[codex:686963] 0x1a8f EXP
[codex:686963] 0x1a90 SWAP1
[codex:686963] 0x1a91 DIV
[codex:686963] 0x1a92 PUSH1 ff
[codex:686963] 0x1a94 AND
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing internal upgrade function signature**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] pattern=bytes([0x61,0x1a,0x57])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1a57 at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 25ms:
[codex:686963] PUSH2 1a57 at ['0x1540']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Inspecting function calls near 0x1540**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x14d0
[codex:686963] end=0x1560
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x14d0 STOP
[codex:686963] 0x14d1 STOP
[codex:686963] 0x14d2 STOP
[codex:686963] 0x14d3 STOP
[codex:686963] 0x14d4 STOP
[codex:686963] 0x14d5 DUP2
[codex:686963] 0x14d6 MSTORE
[codex:686963] 0x14d7 PUSH1 04
[codex:686963] 0x14d9 ADD
[codex:686963] 0x14da PUSH2 14e2
[codex:686963] 0x14dd SWAP1
[codex:686963] 0x14de PUSH2 32d8
[codex:686963] 0x14e1 JUMP
[codex:686963] 0x14e2 JUMPDEST
[codex:686963] 0x14e3 PUSH1 40
[codex:686963] 0x14e5 MLOAD
[codex:686963] 0x14e6 DUP1
[codex:686963] 0x14e7 SWAP2
[codex:686963] 0x14e8 SUB
[codex:686963] 0x14e9 SWAP1
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing internal function and selector mapping**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] pattern=bytes([0x61,0x14,0xeb])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 14eb at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] PUSH2 14eb at ['0x14ad']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing function jump addresses**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1380
[codex:686963] end=0x14c0
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 28ms:
[codex:686963] 0x1380 STOP
[codex:686963] 0x1381 STOP
[codex:686963] 0x1382 STOP
[codex:686963] 0x1383 STOP
[codex:686963] 0x1384 DUP2
[codex:686963] 0x1385 MSTORE
[codex:686963] 0x1386 PUSH1 04
[codex:686963] 0x1388 ADD
[codex:686963] 0x1389 PUSH2 1391
[codex:686963] 0x138c SWAP1
[codex:686963] 0x138d PUSH2 3218
[codex:686963] 0x1390 JUMP
[codex:686963] 0x1391 JUMPDEST
[codex:686963] 0x1392 PUSH1 40
[codex:686963] 0x1394 MLOAD
[codex:686963] 0x1395 DUP1
[codex:686963] 0x1396 SWAP2
[codex:686963] 0x1397 SUB
[codex:686963] 0x1398 SWAP1
[codex:686963] 0x1399 REVERT
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgrade-related low-level calls**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # disasm 0x1a2d-0x1a57
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1a2d
[codex:686963] end=0x1a57
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] 0x1a2d JUMPDEST
[codex:686963] 0x1a2e PUSH1 00
[codex:686963] 0x1a30 PUSH1 06
[codex:686963] 0x1a32 PUSH1 00
[codex:686963] 0x1a34 SWAP1
[codex:686963] 0x1a35 SLOAD
[codex:686963] 0x1a36 SWAP1
[codex:686963] 0x1a37 PUSH2 0100
[codex:686963] 0x1a3a EXP
[codex:686963] 0x1a3b SWAP1
[codex:686963] 0x1a3c DIV
[codex:686963] 0x1a3d PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0x1a52 AND
[codex:686963] 0x1a53 SWAP1
[codex:686963] 0x1a54 POP
[codex:686963] 0x1a55 SWAP1
[codex:686963] 0x1a56 JUMP
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing function selectors and upgrade logic**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] pattern=bytes([0x61,0x13,0x9a])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 139a at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 29ms:
[codex:686963] PUSH2 139a at ['0x135c']
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Investigating code around address 0x135c**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x1320
[codex:686963] end=0x1370
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x1320 OP_4c
[codex:686963] 0x1321 DUP8
[codex:686963] 0x1322 PUSH30 bb56d39773ffffffffffffffffffffffffffffffffffffffff1661134461
[codex:686963] 0x1341 NOT
[codex:686963] 0x1342 OP_d6
[codex:686963] 0x1343 JUMP
[codex:686963] 0x1344 JUMPDEST
[codex:686963] 0x1345 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0x135a AND
[codex:686963] 0x135b EQ
[codex:686963] 0x135c PUSH2 139a
[codex:686963] 0x135f JUMPI
[codex:686963] 0x1360 PUSH1 40
[codex:686963] 0x1362 MLOAD
[codex:686963] 0x1363 PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing CALLER opcode presence**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={
[codex:686963]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={
[codex:686963] 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:686963] 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:686963] 0x20:'SHA3',
[codex:686963] 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:686963] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:686963] 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:686963] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:686963] }
[codex:686963] 
[codex:686963] opnames.update(base)
[codex:686963] 
[codex:686963] # disassemble
[codex:686963] ops=[]
[codex:686963] i=0
[codex:686963] while i < len(code):
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op,'UNKNOWN')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         ops.append((i,name,data))
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         ops.append((i,name,None))
[codex:686963]         i+=1
[codex:686963] 
[codex:686963] # count CALLER/ORIGIN opcodes
[codex:686963] caller=[o for o in ops if o[1]=='CALLER']
[codex:686963] origin=[o for o in ops if o[1]=='ORIGIN']
[codex:686963] print('CALLER count', len(caller), 'offsets', [hex(o[0]) for o in caller])
[codex:686963] print('ORIGIN count', len(origin), 'offsets', [hex(o[0]) for o in origin])
[codex:686963] 
[codex:686963] # count CALLVALUE for sanity
[codex:686963] cv=[o for o in ops if o[1]=='CALLVALUE']
[codex:686963] print('CALLVALUE count', len(cv))
[codex:686963] 
[codex:686963] # count JUMPDEST to see size
[codex:686963] print('JUMPDEST count', len([o for o in ops if o[1]=='JUMPDEST']))
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 32ms:
[codex:686963] CALLER count 1 offsets ['0x429e']
[codex:686963] ORIGIN count 1 offsets ['0x4277']
[codex:686963] CALLVALUE count 21
[codex:686963] JUMPDEST count 889
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function access control and selectors**
[codex:686963] 
[codex:686963] I'm investigating whether the upgrade function is externally accessible and unprotected by sender checks since no CALLER opcodes appear. I’m tracing the call graph and parsing external function selectors and their ABI decoding routines to identify which function triggers upgrade and if signature checks or other protections exist. This will help clarify if there's a critical vulnerability or if upgrades require valid signatures instead of relying on msg.sender.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # disasm 0x26c3
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x26c3
[codex:686963] end=0x2750
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x26c3 JUMPDEST
[codex:686963] 0x26c4 PUSH1 00
[codex:686963] 0x26c6 DUP1
[codex:686963] 0x26c7 PUSH1 00
[codex:686963] 0x26c9 PUSH1 40
[codex:686963] 0x26cb DUP5
[codex:686963] 0x26cc DUP7
[codex:686963] 0x26cd SUB
[codex:686963] 0x26ce SLT
[codex:686963] 0x26cf ISZERO
[codex:686963] 0x26d0 PUSH2 26dc
[codex:686963] 0x26d3 JUMPI
[codex:686963] 0x26d4 PUSH2 26db
[codex:686963] 0x26d7 PUSH2 3c38
[codex:686963] 0x26da JUMP
[codex:686963] 0x26db JUMPDEST
[codex:686963] 0x26dc JUMPDEST
[codex:686963] 0x26dd PUSH1 00
[codex:686963] 0x26df DUP5
[codex:686963] 0x26e0 ADD
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing potential upgrade mechanisms**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x2200
[codex:686963] end=0x2290
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 30ms:
[codex:686963] 0x2200 PUSH2 2208
[codex:686963] 0x2203 DUP5
[codex:686963] 0x2204 PUSH2 1752
[codex:686963] 0x2207 JUMP
[codex:686963] 0x2208 JUMPDEST
[codex:686963] 0x2209 PUSH2 2247
[codex:686963] 0x220c JUMPI
[codex:686963] 0x220d PUSH1 40
[codex:686963] 0x220f MLOAD
[codex:686963] 0x2210 PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963] 0x2231 DUP2
[codex:686963] 0x2232 MSTORE
[codex:686963] 0x2233 PUSH1 04
[codex:686963] 0x2235 ADD
[codex:686963] 0x2236 PUSH2 223e
[codex:686963] 0x2239 SWAP1
[codex:686963] 0x223a PUSH2 3498
[codex:686963] 0x223d JUMP
[codex:686963] 0x223e JUMPDEST
[codex:686963] 0x223f PUSH1 40
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing delegatecall and upgrade functions**
[codex:686963] 
[codex:686963] I'm investigating how the delegatecall is used internally and whether upgrade functions are externally accessible by checking selectors against known upgrade function signatures. I’m also tracing internal functions that might trigger upgrades or privileged operations, while keeping an eye on potential initializer vulnerabilities and unreachable SELFDESTRUCT opcodes to assess risks.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] # disassemble and list SELFDESTRUCT opcodes
[codex:686963] opnames={
[codex:686963]     **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963]     **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963]     **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963]     **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={0xff:'SELFDESTRUCT',0x5b:'JUMPDEST'}
[codex:686963] opnames.update(base)
[codex:686963] 
[codex:686963] ops=[]
[codex:686963] i=0
[codex:686963] while i<len(code):
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, None)
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         i+=1+n
[codex:686963]         continue
[codex:686963]     if name:
[codex:686963]         ops.append((i,name))
[codex:686963]     i+=1
[codex:686963] 
[codex:686963] selfd=[o for o in ops if o[1]=='SELFDESTRUCT']
[codex:686963] jd=set(o[0] for o in ops if o[1]=='JUMPDEST')
[codex:686963] print('SELFDESTRUCT count', len(selfd))
[codex:686963] for off,_ in selfd:
[codex:686963]     print(hex(off), 'is_jumpdest', off in jd)
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 31ms:
[codex:686963] SELFDESTRUCT count 0
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgradeability and access control**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] for sig in ['3659cfe6','4f1ef286','5c60da1b','f851a440','8f283970','52d1902d']:
[codex:686963]     pattern=bytes.fromhex('63'+sig)
[codex:686963]     idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963]     print(sig, idx)
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 33ms:
[codex:686963] 3659cfe6 []
[codex:686963] 4f1ef286 []
[codex:686963] 5c60da1b []
[codex:686963] f851a440 []
[codex:686963] 8f283970 []
[codex:686963] 52d1902d [184, 6847]
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function selectors**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] 
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963] 
[codex:686963] start=0x0a6a
[codex:686963] end=0x0f2c
[codex:686963] 
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963]     op=code[i]
[codex:686963]     name=opnames.get(op, f'OP_{op:02x}')
[codex:686963]     if 0x60<=op<=0x7f:
[codex:686963]         n=op-0x5f
[codex:686963]         data=code[i+1:i+1+n]
[codex:686963]         print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963]         i+=1+n
[codex:686963]     else:
[codex:686963]         print(hex(i).rjust(6), name)
[codex:686963]         i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963]  0xa6a JUMPDEST
[codex:686963]  0xa6b PUSH1 04
[codex:686963]  0xa6d SLOAD
[codex:686963]  0xa6e DUP5
[codex:686963]  0xa6f PUSH1 03
[codex:686963]  0xa71 SLOAD
[codex:686963]  0xa72 PUSH2 0a7b
[codex:686963]  0xa75 SWAP2
[codex:686963]  0xa76 SWAP1
[codex:686963]  0xa77 PUSH2 3746
[codex:686963]  0xa7a JUMP
[codex:686963]  0xa7b JUMPDEST
[codex:686963]  0xa7c GT
[codex:686963]  0xa7d ISZERO
[codex:686963]  0xa7e PUSH2 0abc
[codex:686963]  0xa81 JUMPI
[codex:686963]  0xa82 PUSH1 40
[codex:686963]  0xa84 MLOAD
[codex:686963]  0xa85 PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963]  0xaa6 DUP2
[codex:686963] 
[codex:686963] thinking
[codex:686963] **Concluding no exploitable findings**
[codex:686963] codex
[codex:686963] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.","findings":[]}
[codex:686963] tokens used
[codex:686963] 236,843
[codex:686963] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-03T00:46:20.295655+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.",
    "raw_final": {
        "summary": "No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
11
EXT*/BALANCE
4
Total opcodes
9664
Flags
delegatecall_present
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0114
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x744d49cc
00000019: GT
0000001a: PUSH2 0x00a0
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xde35f5cb
00000024: GT
00000025: PUSH2 0x0064
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xde35f5cb
0000002f: EQ
00000030: PUSH2 0x0392
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xdfbc6269
0000003a: EQ
0000003b: PUSH2 0x03bd
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xe0acac7f
00000045: EQ
00000046: PUSH2 0x03e8
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xed72eb24
00000050: EQ
00000051: PUSH2 0x0413
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xf358ec61
0000005b: EQ
0000005c: PUSH2 0x043e
0000005f: JUMPI
00000060: PUSH2 0x0114
00000063: JUMP
00000064: JUMPDEST
00000065: DUP1
00000066: PUSH4 0x744d49cc
0000006b: EQ
0000006c: PUSH2 0x02ab
0000006f: JUMPI
00000070: DUP1
00000071: PUSH4 0xb2b22a85
00000076: EQ
00000077: PUSH2 0x02d6
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0xb81f853c
00000081: EQ
00000082: PUSH2 0x0301
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xc7a983b5
0000008c: EQ
0000008d: PUSH2 0x032a
00000090: JUMPI
00000091: DUP1
00000092: PUSH4 0xdde4d950
00000097: EQ
00000098: PUSH2 0x0355
0000009b: JUMPI
0000009c: PUSH2 0x0114
0000009f: JUMP
000000a0: JUMPDEST
000000a1: DUP1
000000a2: PUSH4 0x4bd2d7f9
000000a7: GT
000000a8: PUSH2 0x00e7
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0x4bd2d7f9
000000b2: EQ
000000b3: PUSH2 0x01b2
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0x52d1902d
000000bd: EQ
000000be: PUSH2 0x01ef
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0x593777b5
000000c8: EQ
000000c9: PUSH2 0x021a
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0x5b69a7d8
000000d3: EQ
000000d4: PUSH2 0x0245
000000d7: JUMPI
000000d8: DUP1
000000d9: PUSH4 0x61241110
000000de: EQ
000000df: PUSH2 0x0282
000000e2: JUMPI
000000e3: PUSH2 0x0114
000000e6: JUMP
000000e7: JUMPDEST
000000e8: DUP1
000000e9: PUSH4 0x073b1422
000000ee: EQ
000000ef: PUSH2 0x0119
000000f2: JUMPI
000000f3: DUP1
000000f4: PUSH4 0x183bdeaa
000000f9: EQ
000000fa: PUSH2 0x0135
000000fd: JUMPI
000000fe: DUP1
000000ff: PUSH4 0x2333ad8b
00000104: EQ
00000105: PUSH2 0x0160
00000108: JUMPI
00000109: DUP1
0000010a: PUSH4 0x465c4d15
0000010f: EQ
00000110: PUSH2 0x0189
00000113: JUMPI
00000114: JUMPDEST
00000115: PUSH1 0x00
00000117: DUP1
00000118: REVERT
00000119: JUMPDEST
0000011a: PUSH2 0x0133
0000011d: PUSH1 0x04
0000011f: DUP1
00000120: CALLDATASIZE
00000121: SUB
00000122: DUP2
00000123: ADD
00000124: SWAP1
00000125: PUSH2 0x012e
00000128: SWAP2
00000129: SWAP1
0000012a: PUSH2 0x2669
0000012d: JUMP
0000012e: JUMPDEST
0000012f: PUSH2 0x0467
00000132: JUMP
00000133: JUMPDEST
00000134: STOP
00000135: JUMPDEST
00000136: CALLVALUE
00000137: DUP1
00000138: ISZERO
00000139: PUSH2 0x0141
0000013c: JUMPI
0000013d: PUSH1 0x00
0000013f: DUP1
00000140: REVERT
00000141: JUMPDEST
00000142: POP
00000143: PUSH2 0x014a
00000146: PUSH2 0x05de
00000149: JUMP
0000014a: JUMPDEST
0000014b: PUSH1 0x40
0000014d: MLOAD
0000014e: PUSH2 0x0157
00000151: SWAP2
00000152: SWAP1
00000153: PUSH2 0x3513
00000156: JUMP
00000157: JUMPDEST
00000158: PUSH1 0x40
0000015a: MLOAD
0000015b: DUP1
0000015c: SWAP2
0000015d: SUB
0000015e: SWAP1
0000015f: RETURN
00000160: JUMPDEST
00000161: CALLVALUE
00000162: DUP1
00000163: ISZERO
00000164: PUSH2 0x016c
00000167: JUMPI
00000168: PUSH1 0x00
0000016a: DUP1
0000016b: REVERT
0000016c: JUMPDEST
0000016d: POP
0000016e: PUSH2 0x0187
00000171: PUSH1 0x04
00000173: DUP1
00000174: CALLDATASIZE
00000175: SUB
00000176: DUP2
00000177: ADD
00000178: SWAP1
00000179: PUSH2 0x0182
0000017c: SWAP2
0000017d: SWAP1
0000017e: PUSH2 0x2945
00000181: JUMP
00000182: JUMPDEST
00000183: PUSH2 0x05f8
00000186: JUMP
00000187: JUMPDEST
00000188: STOP
00000189: JUMPDEST
0000018a: CALLVALUE
0000018b: DUP1
0000018c: ISZERO
0000018d: PUSH2 0x0195
00000190: JUMPI
00000191: PUSH1 0x00
00000193: DUP1
00000194: REVERT
00000195: JUMPDEST
00000196: POP
00000197: PUSH2 0x01b0
0000019a: PUSH1 0x04
0000019c: DUP1
0000019d: CALLDATASIZE
0000019e: SUB
0000019f: DUP2
000001a0: ADD
000001a1: SWAP1
000001a2: PUSH2 0x01ab
000001a5: SWAP2
000001a6: SWAP1
000001a7: PUSH2 0x2814
000001aa: JUMP
000001ab: JUMPDEST
000001ac: PUSH2 0x0a6a
000001af: JUMP
000001b0: JUMPDEST
000001b1: STOP
000001b2: JUMPDEST
000001b3: CALLVALUE
000001b4: DUP1
000001b5: ISZERO
000001b6: PUSH2 0x01be
000001b9: JUMPI
000001ba: PUSH1 0x00
000001bc: DUP1
000001bd: REVERT
000001be: JUMPDEST
000001bf: POP
000001c0: PUSH2 0x01d9
000001c3: PUSH1 0x04
000001c5: DUP1
000001c6: CALLDATASIZE
000001c7: SUB
000001c8: DUP2
000001c9: ADD
000001ca: SWAP1
000001cb: PUSH2 0x01d4
000001ce: SWAP2
000001cf: SWAP1
000001d0: PUSH2 0x27e7
000001d3: JUMP
000001d4: JUMPDEST
000001d5: PUSH2 0x0f2c
000001d8: JUMP
000001d9: JUMPDEST
000001da: PUSH1 0x40
000001dc: MLOAD
000001dd: PUSH2 0x01e6
000001e0: SWAP2
000001e1: SWAP1
000001e2: PUSH2 0x30e5
000001e5: JUMP
000001e6: JUMPDEST
000001e7: PUSH1 0x40
000001e9: MLOAD
000001ea: DUP1
000001eb: SWAP2
000001ec: SUB
000001ed: SWAP1
000001ee: RETURN
000001ef: JUMPDEST
000001f0: CALLVALUE
000001f1: DUP1
000001f2: ISZERO
000001f3: PUSH2 0x01fb
000001f6: JUMPI
000001f7: PUSH1 0x00
000001f9: DUP1
000001fa: REVERT
000001fb: JUMPDEST
000001fc: POP
000001fd: PUSH2 0x0204
00000200: PUSH2 0x0f44
00000203: JUMP
00000204: JUMPDEST
00000205: PUSH1 0x40
00000207: MLOAD
00000208: PUSH2 0x0211
0000020b: SWAP2
0000020c: SWAP1
0000020d: PUSH2 0x30e5
00000210: JUMP
00000211: JUMPDEST
00000212: PUSH1 0x40
00000214: MLOAD
00000215: DUP1
00000216: SWAP2
00000217: SUB
00000218: SWAP1
00000219: RETURN
0000021a: JUMPDEST
0000021b: CALLVALUE
0000021c: DUP1
0000021d: ISZERO
0000021e: PUSH2 0x0226
00000221: JUMPI
00000222: PUSH1 0x00
00000224: DUP1
00000225: REVERT
00000226: JUMPDEST
00000227: POP
00000228: PUSH2 0x022f
0000022b: PUSH2 0x0ffd
0000022e: JUMP
0000022f: JUMPDEST
00000230: PUSH1 0x40
00000232: MLOAD
00000233: PUSH2 0x023c
00000236: SWAP2
00000237: SWAP1
00000238: PUSH2 0x34f8
0000023b: JUMP
0000023c: JUMPDEST
0000023d: PUSH1 0x40
0000023f: MLOAD
00000240: DUP1
00000241: SWAP2
00000242: SUB
00000243: SWAP1
00000244: RETURN
00000245: JUMPDEST
00000246: CALLVALUE
00000247: DUP1
00000248: ISZERO
00000249: PUSH2 0x0251
0000024c: JUMPI
0000024d: PUSH1 0x00
0000024f: DUP1
00000250: REVERT
00000251: JUMPDEST
00000252: POP
00000253: PUSH2 0x026c
00000256: PUSH1 0x04
00000258: DUP1
00000259: CALLDATASIZE
0000025a: SUB
0000025b: DUP2
0000025c: ADD
0000025d: SWAP1
0000025e: PUSH2 0x0267
00000261: SWAP2
00000262: SWAP1
00000263: PUSH2 0x2723
00000266: JUMP
00000267: JUMPDEST
00000268: PUSH2 0x1003
0000026b: JUMP
0000026c: JUMPDEST
0000026d: PUSH1 0x40
0000026f: MLOAD
00000270: PUSH2 0x0279
00000273: SWAP2
00000274: SWAP1
00000275: PUSH2 0x30ca
00000278: JUMP
00000279: JUMPDEST
0000027a: PUSH1 0x40
0000027c: MLOAD
0000027d: DUP1
0000027e: SWAP2
0000027f: SUB
00000280: SWAP1
00000281: RETURN
00000282: JUMPDEST
00000283: CALLVALUE
00000284: DUP1
00000285: ISZERO
00000286: PUSH2 0x028e
00000289: JUMPI
0000028a: PUSH1 0x00
0000028c: DUP1
0000028d: REVERT
0000028e: JUMPDEST
0000028f: POP
00000290: PUSH2 0x02a9
00000293: PUSH1 0x04
00000295: DUP1
00000296: CALLDATASIZE
00000297: SUB
00000298: DUP2
00000299: ADD
0000029a: SWAP1
0000029b: PUSH2 0x02a4
0000029e: SWAP2
0000029f: SWAP1
000002a0: PUSH2 0x28ae
000002a3: JUMP
000002a4: JUMPDEST
000002a5: PUSH2 0x1042
000002a8: JUMP
000002a9: JUMPDEST
000002aa: STOP
000002ab: JUMPDEST
000002ac: CALLVALUE
000002ad: DUP1
000002ae: ISZERO
000002af: PUSH2 0x02b7
000002b2: JUMPI
000002b3: PUSH1 0x00
000002b5: DUP1
000002b6: REVERT
000002b7: JUMPDEST
000002b8: POP
000002b9: PUSH2 0x02c0
000002bc: PUSH2 0x126a
000002bf: JUMP
000002c0: JUMPDEST
000002c1: PUSH1 0x40
000002c3: MLOAD
000002c4: PUSH2 0x02cd
000002c7: SWAP2
000002c8: SWAP1
000002c9: PUSH2 0x34f8
000002cc: JUMP
000002cd: JUMPDEST
000002ce: PUSH1 0x40
000002d0: MLOAD
000002d1: DUP1
000002d2: SWAP2
000002d3: SUB
000002d4: SWAP1
000002d5: RETURN
000002d6: JUMPDEST
000002d7: CALLVALUE
000002d8: DUP1
000002d9: ISZERO
000002da: PUSH2 0x02e2
000002dd: JUMPI
000002de: PUSH1 0x00
000002e0: DUP1
000002e1: REVERT
000002e2: JUMPDEST
000002e3: POP
000002e4: PUSH2 0x02eb
000002e7: PUSH2 0x1270
000002ea: JUMP
000002eb: JUMPDEST
000002ec: PUSH1 0x40
000002ee: MLOAD
000002ef: PUSH2 0x02f8
000002f2: SWAP2
000002f3: SWAP1
000002f4: PUSH2 0x34f8
000002f7: JUMP
000002f8: JUMPDEST
000002f9: PUSH1 0x40
000002fb: MLOAD
000002fc: DUP1
000002fd: SWAP2
000002fe: SUB
000002ff: SWAP1
00000300: RETURN
00000301: JUMPDEST
00000302: CALLVALUE
00000303: DUP1
00000304: ISZERO
00000305: PUSH2 0x030d
00000308: JUMPI
00000309: PUSH1 0x00
0000030b: DUP1
0000030c: REVERT
0000030d: JUMPDEST
0000030e: POP
0000030f: PUSH2 0x0328
00000312: PUSH1 0x04
00000314: DUP1
00000315: CALLDATASIZE
00000316: SUB
00000317: DUP2
00000318: ADD
00000319: SWAP1
0000031a: PUSH2 0x0323
0000031d: SWAP2
0000031e: SWAP1
0000031f: PUSH2 0x26c3
00000322: JUMP
00000323: JUMPDEST
00000324: PUSH2 0x1276
00000327: JUMP
00000328: JUMPDEST
00000329: STOP
0000032a: JUMPDEST
0000032b: CALLVALUE
0000032c: DUP1
0000032d: ISZERO
0000032e: PUSH2 0x0336
00000331: JUMPI
00000332: PUSH1 0x00
00000334: DUP1
00000335: REVERT
00000336: JUMPDEST
00000337: POP
00000338: PUSH2 0x033f
0000033b: PUSH2 0x154a
0000033e: JUMP
0000033f: JUMPDEST
00000340: PUSH1 0x40
00000342: MLOAD
00000343: PUSH2 0x034c
00000346: SWAP2
00000347: SWAP1
00000348: PUSH2 0x31a0
0000034b: JUMP
0000034c: JUMPDEST
0000034d: PUSH1 0x40
0000034f: MLOAD
00000350: DUP1
00000351: SWAP2
00000352: SUB
00000353: SWAP1
00000354: RETURN
00000355: JUMPDEST
00000356: CALLVALUE
00000357: DUP1
00000358: ISZERO
00000359: PUSH2 0x0361
0000035c: JUMPI
0000035d: PUSH1 0x00
0000035f: DUP1
00000360: REVERT
00000361: JUMPDEST
00000362: POP
00000363: PUSH2 0x037c
00000366: PUSH1 0x04
00000368: DUP1
00000369: CALLDATASIZE
0000036a: SUB
0000036b: DUP2
0000036c: ADD
0000036d: SWAP1
0000036e: PUSH2 0x0377
00000371: SWAP2
00000372: SWAP1
00000373: PUSH2 0x2723
00000376: JUMP
00000377: JUMPDEST
00000378: PUSH2 0x1570
0000037b: JUMP
0000037c: JUMPDEST
0000037d: PUSH1 0x40
0000037f: MLOAD
00000380: PUSH2 0x0389
00000383: SWAP2
00000384: SWAP1
00000385: PUSH2 0x30e5
00000388: JUMP
00000389: JUMPDEST
0000038a: PUSH1 0x40
0000038c: MLOAD
0000038d: DUP1
0000038e: SWAP2
0000038f: SUB
00000390: SWAP1
00000391: RETURN
00000392: JUMPDEST
00000393: CALLVALUE
00000394: DUP1
00000395: ISZERO
00000396: PUSH2 0x039e
00000399: JUMPI
0000039a: PUSH1 0x00
0000039c: DUP1
0000039d: REVERT
0000039e: JUMPDEST
0000039f: POP
000003a0: PUSH2 0x03a7
000003a3: PUSH2 0x1588
000003a6: JUMP
000003a7: JUMPDEST
000003a8: PUSH1 0x40
000003aa: MLOAD
000003ab: PUSH2 0x03b4
000003ae: SWAP2
000003af: SWAP1
000003b0: PUSH2 0x3513
000003b3: JUMP
000003b4: JUMPDEST
000003b5: PUSH1 0x40
000003b7: MLOAD
000003b8: DUP1
000003b9: SWAP2
000003ba: SUB
000003bb: SWAP1
000003bc: RETURN
000003bd: JUMPDEST
000003be: CALLVALUE
000003bf: DUP1
000003c0: ISZERO
000003c1: PUSH2 0x03c9
000003c4: JUMPI
000003c5: PUSH1 0x00
000003c7: DUP1
000003c8: REVERT
000003c9: JUMPDEST
000003ca: POP
000003cb: PUSH2 0x03d2
000003ce: PUSH2 0x15a2
000003d1: JUMP
000003d2: JUMPDEST
000003d3: PUSH1 0x40
000003d5: MLOAD
000003d6: PUSH2 0x03df
000003d9: SWAP2
000003da: SWAP1
000003db: PUSH2 0x3513
000003de: JUMP
000003df: JUMPDEST
000003e0: PUSH1 0x40
000003e2: MLOAD
000003e3: DUP1
000003e4: SWAP2
000003e5: SUB
000003e6: SWAP1
000003e7: RETURN
000003e8: JUMPDEST
000003e9: CALLVALUE
000003ea: DUP1
000003eb: ISZERO
000003ec: PUSH2 0x03f4
000003ef: JUMPI
000003f0: PUSH1 0x00
000003f2: DUP1
000003f3: REVERT
000003f4: JUMPDEST
000003f5: POP
000003f6: PUSH2 0x03fd
000003f9: PUSH2 0x15bc
000003fc: JUMP
000003fd: JUMPDEST
000003fe: PUSH1 0x40
00000400: MLOAD
00000401: PUSH2 0x040a
00000404: SWAP2
00000405: SWAP1
00000406: PUSH2 0x34f8
00000409: JUMP
0000040a: JUMPDEST
0000040b: PUSH1 0x40
0000040d: MLOAD
0000040e: DUP1
0000040f: SWAP2
00000410: SUB
00000411: SWAP1
00000412: RETURN
00000413: JUMPDEST
00000414: CALLVALUE
00000415: DUP1
00000416: ISZERO
00000417: PUSH2 0x041f
0000041a: JUMPI
0000041b: PUSH1 0x00
0000041d: DUP1
0000041e: REVERT
0000041f: JUMPDEST
00000420: POP
00000421: PUSH2 0x0428
00000424: PUSH2 0x15c2
00000427: JUMP
00000428: JUMPDEST
00000429: PUSH1 0x40
0000042b: MLOAD
0000042c: PUSH2 0x0435
0000042f: SWAP2
00000430: SWAP1
00000431: PUSH2 0x34f8
00000434: JUMP
00000435: JUMPDEST
00000436: PUSH1 0x40
00000438: MLOAD
00000439: DUP1
0000043a: SWAP2
0000043b: SUB
0000043c: SWAP1
0000043d: RETURN
0000043e: JUMPDEST
0000043f: CALLVALUE
00000440: DUP1
00000441: ISZERO
00000442: PUSH2 0x044a
00000445: JUMPI
00000446: PUSH1 0x00
00000448: DUP1
00000449: REVERT
0000044a: JUMPDEST
0000044b: POP
0000044c: PUSH2 0x0465
0000044f: PUSH1 0x04
00000451: DUP1
00000452: CALLDATASIZE
00000453: SUB
00000454: DUP2
00000455: ADD
00000456: SWAP1
00000457: PUSH2 0x0460
0000045a: SWAP2
0000045b: SWAP1
0000045c: PUSH2 0x2750
0000045f: JUMP
00000460: JUMPDEST
00000461: PUSH2 0x15cf
00000464: JUMP
00000465: JUMPDEST
00000466: STOP
00000467: JUMPDEST
00000468: CALLVALUE
00000469: PUSH1 0x01
0000046b: SLOAD
0000046c: GT
0000046d: ISZERO
0000046e: DUP1
0000046f: ISZERO
00000470: PUSH2 0x047b
00000473: JUMPI
00000474: POP
00000475: PUSH1 0x02
00000477: SLOAD
00000478: CALLVALUE
00000479: GT
0000047a: ISZERO
0000047b: JUMPDEST
0000047c: PUSH2 0x04ba
0000047f: JUMPI
00000480: PUSH1 0x40
00000482: MLOAD
00000483: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000004a4: DUP2
000004a5: MSTORE
000004a6: PUSH1 0x04
000004a8: ADD
000004a9: PUSH2 0x04b1
000004ac: SWAP1
000004ad: PUSH2 0x3418
000004b0: JUMP
000004b1: JUMPDEST
000004b2: PUSH1 0x40
000004b4: MLOAD
000004b5: DUP1
000004b6: SWAP2
000004b7: SUB
000004b8: SWAP1
000004b9: REVERT
000004ba: JUMPDEST
000004bb: PUSH1 0x00
000004bd: PUSH1 0xf8
000004bf: SHL
000004c0: DUP2
000004c1: PUSH1 0x00
000004c3: PUSH1 0x15
000004c5: DUP2
000004c6: LT
000004c7: PUSH2 0x04d3
000004ca: JUMPI
000004cb: PUSH2 0x04d2
000004ce: PUSH2 0x3bbc
000004d1: JUMP
000004d2: JUMPDEST
000004d3: JUMPDEST
000004d4: BYTE
000004d5: PUSH1 0xf8
000004d7: SHL
000004d8: PUSH31 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
000004f8: NOT
000004f9: AND
000004fa: EQ
000004fb: PUSH2 0x0539
000004fe: JUMPI
000004ff: PUSH1 0x40
00000501: MLOAD
00000502: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000523: DUP2
00000524: MSTORE
00000525: PUSH1 0x04
00000527: ADD
00000528: PUSH2 0x0530
0000052b: SWAP1
0000052c: PUSH2 0x3298
0000052f: JUMP
00000530: JUMPDEST
00000531: PUSH1 0x40
00000533: MLOAD
00000534: DUP1
00000535: SWAP2
00000536: SUB
00000537: SWAP1
00000538: REVERT
00000539: JUMPDEST
0000053a: PUSH1 0x00
0000053c: DUP1
0000053d: PUSH1 0x02
0000053f: SWAP1
00000540: SLOAD
00000541: SWAP1
00000542: PUSH2 0x0100
00000545: EXP
00000546: SWAP1
00000547: DIV
00000548: PUSH8 0xffffffffffffffff
00000551: AND
00000552: SWAP1
00000553: POP
00000554: PUSH1 0x01
00000556: PUSH1 0x00
00000558: PUSH1 0x02
0000055a: DUP3
0000055b: DUP3
0000055c: DUP3
0000055d: SWAP1
0000055e: SLOAD
0000055f: SWAP1
00000560: PUSH2 0x0100
00000563: EXP
00000564: SWAP1
00000565: DIV
00000566: PUSH8 0xffffffffffffffff
0000056f: AND
00000570: PUSH2 0x0579
00000573: SWAP2
00000574: SWAP1
00000575: PUSH2 0x379c
00000578: JUMP
00000579: JUMPDEST
0000057a: SWAP3
0000057b: POP
0000057c: PUSH2 0x0100
0000057f: EXP
00000580: DUP2
00000581: SLOAD
00000582: DUP2
00000583: PUSH8 0xffffffffffffffff
0000058c: MUL
0000058d: NOT
0000058e: AND
0000058f: SWAP1
00000590: DUP4
00000591: PUSH8 0xffffffffffffffff
0000059a: AND
0000059b: MUL
0000059c: OR
0000059d: SWAP1
0000059e: SSTORE
0000059f: POP
000005a0: PUSH32 0x01bc4bb7c8ad3891d2159f29189c74d9528104fb81b05893732d1f06621e2c4f
000005c1: DUP2
000005c2: DUP4
000005c3: CALLVALUE
000005c4: PUSH1 0x40
000005c6: MLOAD
000005c7: PUSH2 0x05d2
000005ca: SWAP4
000005cb: SWAP3
000005cc: SWAP2
000005cd: SWAP1
000005ce: PUSH2 0x35d4
000005d1: JUMP
000005d2: JUMPDEST
000005d3: PUSH1 0x40
000005d5: MLOAD
000005d6: DUP1
000005d7: SWAP2
000005d8: SUB
000005d9: SWAP1
000005da: LOG1
000005db: POP
000005dc: POP
000005dd: JUMP
000005de: JUMPDEST
000005df: PUSH1 0x07
000005e1: PUSH1 0x00
000005e3: SWAP1
000005e4: SLOAD
000005e5: SWAP1
000005e6: PUSH2 0x0100
000005e9: EXP
000005ea: SWAP1
000005eb: DIV
000005ec: PUSH8 0xffffffffffffffff
000005f5: AND
000005f6: DUP2
000005f7: JUMP
000005f8: JUMPDEST
000005f9: PUSH1 0x06
000005fb: PUSH1 0x14
000005fd: SWAP1
000005fe: SLOAD
000005ff: SWAP1
00000600: PUSH2 0x0100
00000603: EXP
00000604: SWAP1
00000605: DIV
00000606: PUSH8 0xffffffffffffffff
0000060f: AND
00000610: PUSH8 0xffffffffffffffff
00000619: AND
0000061a: DUP7
0000061b: PUSH8 0xffffffffffffffff
00000624: AND
00000625: LT
00000626: ISZERO
00000627: PUSH2 0x0665
0000062a: JUMPI
0000062b: PUSH1 0x40
0000062d: MLOAD
0000062e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000064f: DUP2
00000650: MSTORE
00000651: PUSH1 0x04
00000653: ADD
00000654: PUSH2 0x065c
00000657: SWAP1
00000658: PUSH2 0x3438
0000065b: JUMP
0000065c: JUMPDEST
0000065d: PUSH1 0x40
0000065f: MLOAD
00000660: DUP1
00000661: SWAP2
00000662: SUB
00000663: SWAP1
00000664: REVERT
00000665: JUMPDEST
00000666: PUSH1 0x00
00000668: PUSH1 0x40
0000066a: SWAP1
0000066b: POP
0000066c: PUSH1 0x00
0000066e: DUP2
0000066f: DUP8
00000670: DUP8
00000671: SWAP1
00000672: POP
00000673: PUSH2 0x067c
00000676: SWAP2
00000677: SWAP1
00000678: PUSH2 0x37da
0000067b: JUMP
0000067c: JUMPDEST
0000067d: SWAP1
0000067e: POP
0000067f: PUSH1 0x00
00000681: DUP2
00000682: GT
00000683: PUSH2 0x06c1
00000686: JUMPI
00000687: PUSH1 0x40
00000689: MLOAD
0000068a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000006ab: DUP2
000006ac: MSTORE
000006ad: PUSH1 0x04
000006af: ADD
000006b0: PUSH2 0x06b8
000006b3: SWAP1
000006b4: PUSH2 0x34d8
000006b7: JUMP
000006b8: JUMPDEST
000006b9: PUSH1 0x40
000006bb: MLOAD
000006bc: DUP1
000006bd: SWAP2
000006be: SUB
000006bf: SWAP1
000006c0: REVERT
000006c1: JUMPDEST
000006c2: PUSH1 0x00
000006c4: PUSH1 0x02
000006c6: ADDRESS
000006c7: PUSH1 0x07
000006c9: PUSH1 0x00
000006cb: SWAP1
000006cc: SLOAD
000006cd: SWAP1
000006ce: PUSH2 0x0100
000006d1: EXP
000006d2: SWAP1
000006d3: DIV
000006d4: PUSH8 0xffffffffffffffff
000006dd: AND
000006de: DUP9
000006df: DUP12
000006e0: DUP12
000006e1: PUSH1 0x40
000006e3: MLOAD
000006e4: PUSH1 0x20
000006e6: ADD
000006e7: PUSH2 0x06f4
000006ea: SWAP6
000006eb: SWAP5
000006ec: SWAP4
000006ed: SWAP3
000006ee: SWAP2
000006ef: SWAP1
000006f0: PUSH2 0x2f68
000006f3: JUMP
000006f4: JUMPDEST
000006f5: PUSH1 0x40
000006f7: MLOAD
000006f8: PUSH1 0x20
000006fa: DUP2
000006fb: DUP4
000006fc: SUB
000006fd: SUB
000006fe: DUP2
000006ff: MSTORE
00000700: SWAP1
00000701: PUSH1 0x40
00000703: MSTORE
00000704: PUSH1 0x40
00000706: MLOAD
00000707: PUSH2 0x0710
0000070a: SWAP2
0000070b: SWAP1
0000070c: PUSH2 0x3013
0000070f: JUMP
00000710: JUMPDEST
00000711: PUSH1 0x20
00000713: PUSH1 0x40
00000715: MLOAD
00000716: DUP1
00000717: DUP4
00000718: SUB
00000719: DUP2
0000071a: DUP6
0000071b: GAS
0000071c: STATICCALL
0000071d: ISZERO
0000071e: DUP1
0000071f: ISZERO
00000720: PUSH2 0x072d
00000723: JUMPI
00000724: RETURNDATASIZE
00000725: PUSH1 0x00
00000727: DUP1
00000728: RETURNDATACOPY
00000729: RETURNDATASIZE
0000072a: PUSH1 0x00
0000072c: REVERT
0000072d: JUMPDEST
0000072e: POP
0000072f: POP
00000730: POP
00000731: PUSH1 0x40
00000733: MLOAD
00000734: RETURNDATASIZE
00000735: PUSH1 0x1f
00000737: NOT
00000738: PUSH1 0x1f
0000073a: DUP3
0000073b: ADD
0000073c: AND
0000073d: DUP3
0000073e: ADD
0000073f: DUP1
00000740: PUSH1 0x40
00000742: MSTORE
00000743: POP
00000744: DUP2
00000745: ADD
00000746: SWAP1
00000747: PUSH2 0x0750
0000074a: SWAP2
0000074b: SWAP1
0000074c: PUSH2 0x2696
0000074f: JUMP
00000750: JUMPDEST
00000751: SWAP1
00000752: POP
00000753: PUSH1 0x06
00000755: PUSH1 0x00
00000757: SWAP1
00000758: SLOAD
00000759: SWAP1
0000075a: PUSH2 0x0100
0000075d: EXP
0000075e: SWAP1
0000075f: DIV
00000760: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000775: AND
00000776: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000078b: AND
0000078c: PUSH4 0x1d574bc6
00000791: DUP11
00000792: DUP4
00000793: DUP9
00000794: DUP9
00000795: PUSH1 0x40
00000797: MLOAD
00000798: DUP6
00000799: PUSH4 0xffffffff
0000079e: AND
0000079f: PUSH1 0xe0
000007a1: SHL
000007a2: DUP2
000007a3: MSTORE
000007a4: PUSH1 0x04
000007a6: ADD
000007a7: PUSH2 0x07b3
000007aa: SWAP5
000007ab: SWAP4
000007ac: SWAP3
000007ad: SWAP2
000007ae: SWAP1
000007af: PUSH2 0x360b
000007b2: JUMP
000007b3: JUMPDEST
000007b4: PUSH1 0x20
000007b6: PUSH1 0x40
000007b8: MLOAD
000007b9: DUP1
000007ba: DUP4
000007bb: SUB
000007bc: DUP2
000007bd: DUP7
000007be: DUP1
000007bf: EXTCODESIZE
000007c0: ISZERO
000007c1: DUP1
000007c2: ISZERO
000007c3: PUSH2 0x07cb
000007c6: JUMPI
000007c7: PUSH1 0x00
000007c9: DUP1
000007ca: REVERT
000007cb: JUMPDEST
000007cc: POP
000007cd: GAS
000007ce: STATICCALL
000007cf: ISZERO
000007d0: DUP1
000007d1: ISZERO
000007d2: PUSH2 0x07df
000007d5: JUMPI
000007d6: RETURNDATASIZE
000007d7: PUSH1 0x00
000007d9: DUP1
000007da: RETURNDATACOPY
000007db: RETURNDATASIZE
000007dc: PUSH1 0x00
000007de: REVERT
000007df: JUMPDEST
000007e0: POP
000007e1: POP
000007e2: POP
000007e3: POP
000007e4: PUSH1 0x40
000007e6: MLOAD
000007e7: RETURNDATASIZE
000007e8: PUSH1 0x1f
000007ea: NOT
000007eb: PUSH1 0x1f
000007ed: DUP3
000007ee: ADD
000007ef: AND
000007f0: DUP3
000007f1: ADD
000007f2: DUP1
000007f3: PUSH1 0x40
000007f5: MSTORE
000007f6: POP
000007f7: DUP2
000007f8: ADD
000007f9: SWAP1
000007fa: PUSH2 0x0803
000007fd: SWAP2
000007fe: SWAP1
000007ff: PUSH2 0x263c
00000802: JUMP
00000803: JUMPDEST
00000804: PUSH2 0x0842
00000807: JUMPI
00000808: PUSH1 0x40
0000080a: MLOAD
0000080b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000082c: DUP2
0000082d: MSTORE
0000082e: PUSH1 0x04
00000830: ADD
00000831: PUSH2 0x0839
00000834: SWAP1
00000835: PUSH2 0x3378
00000838: JUMP
00000839: JUMPDEST
0000083a: PUSH1 0x40
0000083c: MLOAD
0000083d: DUP1
0000083e: SWAP2
0000083f: SUB
00000840: SWAP1
00000841: REVERT
00000842: JUMPDEST
00000843: DUP6
00000844: PUSH1 0x08
00000846: PUSH1 0x00
00000848: PUSH1 0x07
0000084a: PUSH1 0x00
0000084c: SWAP1
0000084d: SLOAD
0000084e: SWAP1
0000084f: PUSH2 0x0100
00000852: EXP
00000853: SWAP1
00000854: DIV
00000855: PUSH8 0xffffffffffffffff
0000085e: AND
0000085f: PUSH8 0xffffffffffffffff
00000868: AND
00000869: PUSH8 0xffffffffffffffff
00000872: AND
00000873: DUP2
00000874: MSTORE
00000875: PUSH1 0x20
00000877: ADD
00000878: SWAP1
00000879: DUP2
0000087a: MSTORE
0000087b: PUSH1 0x20
0000087d: ADD
0000087e: PUSH1 0x00
00000880: KECCAK256
00000881: DUP2
00000882: SWAP1
00000883: SSTORE
00000884: POP
00000885: PUSH1 0x00
00000887: DUP3
00000888: PUSH8 0xffffffffffffffff
00000891: DUP2
00000892: GT
00000893: ISZERO
00000894: PUSH2 0x08a0
00000897: JUMPI
00000898: PUSH2 0x089f
0000089b: PUSH2 0x3beb
0000089e: JUMP
0000089f: JUMPDEST
000008a0: JUMPDEST
000008a1: PUSH1 0x40
000008a3: MLOAD
000008a4: SWAP1
000008a5: DUP1
000008a6: DUP3
000008a7: MSTORE
000008a8: DUP1
000008a9: PUSH1 0x20
000008ab: MUL
000008ac: PUSH1 0x20
000008ae: ADD
000008af: DUP3
000008b0: ADD
000008b1: PUSH1 0x40
000008b3: MSTORE
000008b4: DUP1
000008b5: ISZERO
000008b6: PUSH2 0x08ce
000008b9: JUMPI
000008ba: DUP2
000008bb: PUSH1 0x20
000008bd: ADD
000008be: PUSH1 0x20
000008c0: DUP3
000008c1: MUL
000008c2: DUP1
000008c3: CALLDATASIZE
000008c4: DUP4
000008c5: CALLDATACOPY
000008c6: DUP1
000008c7: DUP3
000008c8: ADD
000008c9: SWAP2
000008ca: POP
000008cb: POP
000008cc: SWAP1
000008cd: POP
000008ce: JUMPDEST
000008cf: POP
000008d0: SWAP1
000008d1: POP
000008d2: PUSH1 0x00
000008d4: JUMPDEST
000008d5: DUP4
000008d6: DUP2
000008d7: LT
000008d8: ISZERO
000008d9: PUSH2 0x09c9
000008dc: JUMPI
000008dd: PUSH1 0x00
000008df: DUP11
000008e0: DUP11
000008e1: DUP8
000008e2: DUP5
000008e3: PUSH2 0x08ec
000008e6: SWAP2
000008e7: SWAP1
000008e8: PUSH2 0x380b
000008eb: JUMP
000008ec: JUMPDEST
000008ed: SWAP1
000008ee: DUP9
000008ef: PUSH1 0x01
000008f1: DUP7
000008f2: PUSH2 0x08fb
000008f5: SWAP2
000008f6: SWAP1
000008f7: PUSH2 0x3746
000008fa: JUMP
000008fb: JUMPDEST
000008fc: PUSH2 0x0905
000008ff: SWAP2
00000900: SWAP1
00000901: PUSH2 0x380b
00000904: JUMP
00000905: JUMPDEST
00000906: SWAP3
00000907: PUSH2 0x0912
0000090a: SWAP4
0000090b: SWAP3
0000090c: SWAP2
0000090d: SWAP1
0000090e: PUSH2 0x370b
00000911: JUMP
00000912: JUMPDEST
00000913: DUP1
00000914: DUP1
00000915: PUSH1 0x1f
00000917: ADD
00000918: PUSH1 0x20
0000091a: DUP1
0000091b: SWAP2
0000091c: DIV
0000091d: MUL
0000091e: PUSH1 0x20
00000920: ADD
00000921: PUSH1 0x40
00000923: MLOAD
00000924: SWAP1
00000925: DUP2
00000926: ADD
00000927: PUSH1 0x40
00000929: MSTORE
0000092a: DUP1
0000092b: SWAP4
0000092c: SWAP3
0000092d: SWAP2
0000092e: SWAP1
0000092f: DUP2
00000930: DUP2
00000931: MSTORE
00000932: PUSH1 0x20
00000934: ADD
00000935: DUP4
00000936: DUP4
00000937: DUP1
00000938: DUP3
00000939: DUP5
0000093a: CALLDATACOPY
0000093b: PUSH1 0x00
0000093d: DUP2
0000093e: DUP5
0000093f: ADD
00000940: MSTORE
00000941: PUSH1 0x1f
00000943: NOT
00000944: PUSH1 0x1f
00000946: DUP3
00000947: ADD
00000948: AND
00000949: SWAP1
0000094a: POP
0000094b: DUP1
0000094c: DUP4
0000094d: ADD
0000094e: SWAP3
0000094f: POP
00000950: POP
00000951: POP
00000952: POP
00000953: POP
00000954: POP
00000955: POP
00000956: SWAP1
00000957: POP
00000958: PUSH1 0x00
0000095a: DUP2
0000095b: DUP1
0000095c: MLOAD
0000095d: SWAP1
0000095e: PUSH1 0x20
00000960: ADD
00000961: KECCAK256
00000962: PUSH1 0x00
00000964: SHR
00000965: SWAP1
00000966: POP
00000967: DUP1
00000968: DUP5
00000969: DUP5
0000096a: DUP2
0000096b: MLOAD
0000096c: DUP2
0000096d: LT
0000096e: PUSH2 0x097a
00000971: JUMPI
00000972: PUSH2 0x0979
00000975: PUSH2 0x3bbc
00000978: JUMP
00000979: JUMPDEST
0000097a: JUMPDEST
0000097b: PUSH1 0x20
0000097d: MUL
0000097e: PUSH1 0x20
00000980: ADD
00000981: ADD
00000982: SWAP1
00000983: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000998: AND
00000999: SWAP1
0000099a: DUP2
0000099b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009b0: AND
000009b1: DUP2
000009b2: MSTORE
000009b3: POP
000009b4: POP
000009b5: POP
000009b6: POP
000009b7: DUP1
000009b8: DUP1
000009b9: PUSH2 0x09c1
000009bc: SWAP1
000009bd: PUSH2 0x3a5d
000009c0: JUMP
000009c1: JUMPDEST
000009c2: SWAP2
000009c3: POP
000009c4: POP
000009c5: PUSH2 0x08d4
000009c8: JUMP
000009c9: JUMPDEST
000009ca: POP
000009cb: DUP1
000009cc: PUSH1 0x05
000009ce: SWAP1
000009cf: DUP1
000009d0: MLOAD
000009d1: SWAP1
000009d2: PUSH1 0x20
000009d4: ADD
000009d5: SWAP1
000009d6: PUSH2 0x09e0
000009d9: SWAP3
000009da: SWAP2
000009db: SWAP1
000009dc: PUSH2 0x2331
000009df: JUMP
000009e0: JUMPDEST
000009e1: POP
000009e2: PUSH1 0x01
000009e4: PUSH1 0x07
000009e6: PUSH1 0x00
000009e8: DUP3
000009e9: DUP3
000009ea: DUP3
000009eb: SWAP1
000009ec: SLOAD
000009ed: SWAP1
000009ee: PUSH2 0x0100
000009f1: EXP
000009f2: SWAP1
000009f3: DIV
000009f4: PUSH8 0xffffffffffffffff
000009fd: AND
000009fe: PUSH2 0x0a07
00000a01: SWAP2
00000a02: SWAP1
00000a03: PUSH2 0x379c
00000a06: JUMP
00000a07: JUMPDEST
00000a08: SWAP3
00000a09: POP
00000a0a: PUSH2 0x0100
00000a0d: EXP
00000a0e: DUP2
00000a0f: SLOAD
00000a10: DUP2
00000a11: PUSH8 0xffffffffffffffff
00000a1a: MUL
00000a1b: NOT
00000a1c: AND
00000a1d: SWAP1
00000a1e: DUP4
00000a1f: PUSH8 0xffffffffffffffff
00000a28: AND
00000a29: MUL
00000a2a: OR
00000a2b: SWAP1
00000a2c: SSTORE
00000a2d: POP
00000a2e: DUP10
00000a2f: PUSH1 0x06
00000a31: PUSH1 0x14
00000a33: PUSH2 0x0100
00000a36: EXP
00000a37: DUP2
00000a38: SLOAD
00000a39: DUP2
00000a3a: PUSH8 0xffffffffffffffff
00000a43: MUL
00000a44: NOT
00000a45: AND
00000a46: SWAP1
00000a47: DUP4
00000a48: PUSH8 0xffffffffffffffff
00000a51: AND
00000a52: MUL
00000a53: OR
00000a54: SWAP1
00000a55: SSTORE
00000a56: POP
00000a57: PUSH1 0x00
00000a59: PUSH1 0x03
00000a5b: DUP2
00000a5c: SWAP1
00000a5d: SSTORE
00000a5e: POP
00000a5f: POP
00000a60: POP
00000a61: POP
00000a62: POP
00000a63: POP
00000a64: POP
00000a65: POP
00000a66: POP
00000a67: POP
00000a68: POP
00000a69: JUMP
00000a6a: JUMPDEST
00000a6b: PUSH1 0x04
00000a6d: SLOAD
00000a6e: DUP5
00000a6f: PUSH1 0x03
00000a71: SLOAD
00000a72: PUSH2 0x0a7b
00000a75: SWAP2
00000a76: SWAP1
00000a77: PUSH2 0x3746
00000a7a: JUMP
00000a7b: JUMPDEST
00000a7c: GT
00000a7d: ISZERO
00000a7e: PUSH2 0x0abc
00000a81: JUMPI
00000a82: PUSH1 0x40
00000a84: MLOAD
00000a85: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000aa6: DUP2
00000aa7: MSTORE
00000aa8: PUSH1 0x04
00000aaa: ADD
00000aab: PUSH2 0x0ab3
00000aae: SWAP1
00000aaf: PUSH2 0x32b8
00000ab2: JUMP
00000ab3: JUMPDEST
00000ab4: PUSH1 0x40
00000ab6: MLOAD
00000ab7: DUP1
00000ab8: SWAP2
00000ab9: SUB
00000aba: SWAP1
00000abb: REVERT
00000abc: JUMPDEST
00000abd: PUSH1 0x00
00000abf: PUSH1 0x41
00000ac1: SWAP1
00000ac2: POP
00000ac3: PUSH1 0x00
00000ac5: PUSH1 0x02
00000ac7: ADDRESS
00000ac8: PUSH1 0x07
00000aca: PUSH1 0x00
00000acc: SWAP1
00000acd: SLOAD
00000ace: SWAP1
00000acf: PUSH2 0x0100
00000ad2: EXP
00000ad3: SWAP1
00000ad4: DIV
00000ad5: PUSH8 0xffffffffffffffff
00000ade: AND
00000adf: DUP11
00000ae0: DUP11
00000ae1: DUP11
00000ae2: PUSH1 0x40
00000ae4: MLOAD
00000ae5: PUSH1 0x20
00000ae7: ADD
00000ae8: PUSH2 0x0af5
00000aeb: SWAP6
00000aec: SWAP5
00000aed: SWAP4
00000aee: SWAP3
00000aef: SWAP2
00000af0: SWAP1
00000af1: PUSH2 0x2fb4
00000af4: JUMP
00000af5: JUMPDEST
00000af6: PUSH1 0x40
00000af8: MLOAD
00000af9: PUSH1 0x20
00000afb: DUP2
00000afc: DUP4
00000afd: SUB
00000afe: SUB
00000aff: DUP2
00000b00: MSTORE
00000b01: SWAP1
00000b02: PUSH1 0x40
00000b04: MSTORE
00000b05: PUSH1 0x40
00000b07: MLOAD
00000b08: PUSH2 0x0b11
00000b0b: SWAP2
00000b0c: SWAP1
00000b0d: PUSH2 0x3013
00000b10: JUMP
00000b11: JUMPDEST
00000b12: PUSH1 0x20
00000b14: PUSH1 0x40
00000b16: MLOAD
00000b17: DUP1
00000b18: DUP4
00000b19: SUB
00000b1a: DUP2
00000b1b: DUP6
00000b1c: GAS
00000b1d: STATICCALL
00000b1e: ISZERO
00000b1f: DUP1
00000b20: ISZERO
00000b21: PUSH2 0x0b2e
00000b24: JUMPI
00000b25: RETURNDATASIZE
00000b26: PUSH1 0x00
00000b28: DUP1
00000b29: RETURNDATACOPY
00000b2a: RETURNDATASIZE
00000b2b: PUSH1 0x00
00000b2d: REVERT
00000b2e: JUMPDEST
00000b2f: POP
00000b30: POP
00000b31: POP
00000b32: PUSH1 0x40
00000b34: MLOAD
00000b35: RETURNDATASIZE
00000b36: PUSH1 0x1f
00000b38: NOT
00000b39: PUSH1 0x1f
00000b3b: DUP3
00000b3c: ADD
00000b3d: AND
00000b3e: DUP3
00000b3f: ADD
00000b40: DUP1
00000b41: PUSH1 0x40
00000b43: MSTORE
00000b44: POP
00000b45: DUP2
00000b46: ADD
00000b47: SWAP1
00000b48: PUSH2 0x0b51
00000b4b: SWAP2
00000b4c: SWAP1
00000b4d: PUSH2 0x2696
00000b50: JUMP
00000b51: JUMPDEST
00000b52: SWAP1
00000b53: POP
00000b54: PUSH1 0x00
00000b56: DUP1
00000b57: PUSH1 0x00
00000b59: DUP5
00000b5a: SWAP1
00000b5b: POP
00000b5c: PUSH1 0x00
00000b5e: JUMPDEST
00000b5f: DUP8
00000b60: DUP8
00000b61: SWAP1
00000b62: POP
00000b63: DUP3
00000b64: GT
00000b65: PUSH2 0x0d30
00000b68: JUMPI
00000b69: PUSH1 0x00
00000b6b: DUP9
00000b6c: DUP9
00000b6d: DUP9
00000b6e: DUP6
00000b6f: PUSH2 0x0b78
00000b72: SWAP2
00000b73: SWAP1
00000b74: PUSH2 0x3865
00000b77: JUMP
00000b78: JUMPDEST
00000b79: SWAP1
00000b7a: DUP6
00000b7b: SWAP3
00000b7c: PUSH2 0x0b87
00000b7f: SWAP4
00000b80: SWAP3
00000b81: SWAP2
00000b82: SWAP1
00000b83: PUSH2 0x370b
00000b86: JUMP
00000b87: JUMPDEST
00000b88: DUP1
00000b89: DUP1
00000b8a: PUSH1 0x1f
00000b8c: ADD
00000b8d: PUSH1 0x20
00000b8f: DUP1
00000b90: SWAP2
00000b91: DIV
00000b92: MUL
00000b93: PUSH1 0x20
00000b95: ADD
00000b96: PUSH1 0x40
00000b98: MLOAD
00000b99: SWAP1
00000b9a: DUP2
00000b9b: ADD
00000b9c: PUSH1 0x40
00000b9e: MSTORE
00000b9f: DUP1
00000ba0: SWAP4
00000ba1: SWAP3
00000ba2: SWAP2
00000ba3: SWAP1
00000ba4: DUP2
00000ba5: DUP2
00000ba6: MSTORE
00000ba7: PUSH1 0x20
00000ba9: ADD
00000baa: DUP4
00000bab: DUP4
00000bac: DUP1
00000bad: DUP3
00000bae: DUP5
00000baf: CALLDATACOPY
00000bb0: PUSH1 0x00
00000bb2: DUP2
00000bb3: DUP5
00000bb4: ADD
00000bb5: MSTORE
00000bb6: PUSH1 0x1f
00000bb8: NOT
00000bb9: PUSH1 0x1f
00000bbb: DUP3
00000bbc: ADD
00000bbd: AND
00000bbe: SWAP1
00000bbf: POP
00000bc0: DUP1
00000bc1: DUP4
00000bc2: ADD
00000bc3: SWAP3
00000bc4: POP
00000bc5: POP
00000bc6: POP
00000bc7: POP
00000bc8: POP
00000bc9: POP
00000bca: POP
00000bcb: SWAP1
00000bcc: POP
00000bcd: JUMPDEST
00000bce: PUSH1 0x05
00000bd0: DUP1
00000bd1: SLOAD
00000bd2: SWAP1
00000bd3: POP
00000bd4: DUP5
00000bd5: PUSH4 0xffffffff
00000bda: AND
00000bdb: LT
00000bdc: DUP1
00000bdd: ISZERO
00000bde: PUSH2 0x0bff
00000be1: JUMPI
00000be2: POP
00000be3: PUSH1 0x00
00000be5: PUSH1 0x01
00000be7: DUP6
00000be8: PUSH4 0xffffffff
00000bed: AND
00000bee: DUP13
00000bef: PUSH4 0xffffffff
00000bf4: AND
00000bf5: SWAP1
00000bf6: SHR
00000bf7: AND
00000bf8: PUSH4 0xffffffff
00000bfd: AND
00000bfe: EQ
00000bff: JUMPDEST
00000c00: ISZERO
00000c01: PUSH2 0x0c17
00000c04: JUMPI
00000c05: DUP4
00000c06: DUP1
00000c07: PUSH2 0x0c0f
00000c0a: SWAP1
00000c0b: PUSH2 0x3aa6
00000c0e: JUMP
00000c0f: JUMPDEST
00000c10: SWAP5
00000c11: POP
00000c12: POP
00000c13: PUSH2 0x0bcd
00000c16: JUMP
00000c17: JUMPDEST
00000c18: PUSH1 0x05
00000c1a: DUP1
00000c1b: SLOAD
00000c1c: SWAP1
00000c1d: POP
00000c1e: DUP5
00000c1f: PUSH4 0xffffffff
00000c24: AND
00000c25: EQ
00000c26: ISZERO
00000c27: PUSH2 0x0c30
00000c2a: JUMPI
00000c2b: POP
00000c2c: PUSH2 0x0d30
00000c2f: JUMP
00000c30: JUMPDEST
00000c31: PUSH2 0x0c3a
00000c34: DUP7
00000c35: DUP3
00000c36: PUSH2 0x1775
00000c39: JUMP
00000c3a: JUMPDEST
00000c3b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c50: AND
00000c51: PUSH1 0x05
00000c53: DUP6
00000c54: PUSH4 0xffffffff
00000c59: AND
00000c5a: DUP2
00000c5b: SLOAD
00000c5c: DUP2
00000c5d: LT
00000c5e: PUSH2 0x0c6a
00000c61: JUMPI
00000c62: PUSH2 0x0c69
00000c65: PUSH2 0x3bbc
00000c68: JUMP
00000c69: JUMPDEST
00000c6a: JUMPDEST
00000c6b: SWAP1
00000c6c: PUSH1 0x00
00000c6e: MSTORE
00000c6f: PUSH1 0x20
00000c71: PUSH1 0x00
00000c73: KECCAK256
00000c74: ADD
00000c75: PUSH1 0x00
00000c77: SWAP1
00000c78: SLOAD
00000c79: SWAP1
00000c7a: PUSH2 0x0100
00000c7d: EXP
00000c7e: SWAP1
00000c7f: DIV
00000c80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c95: AND
00000c96: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000cab: AND
00000cac: EQ
00000cad: PUSH2 0x0ceb
00000cb0: JUMPI
00000cb1: PUSH1 0x40
00000cb3: MLOAD
00000cb4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000cd5: DUP2
00000cd6: MSTORE
00000cd7: PUSH1 0x04
00000cd9: ADD
00000cda: PUSH2 0x0ce2
00000cdd: SWAP1
00000cde: PUSH2 0x3378
00000ce1: JUMP
00000ce2: JUMPDEST
00000ce3: PUSH1 0x40
00000ce5: MLOAD
00000ce6: DUP1
00000ce7: SWAP2
00000ce8: SUB
00000ce9: SWAP1
00000cea: REVERT
00000ceb: JUMPDEST
00000cec: DUP4
00000ced: PUSH4 0xffffffff
00000cf2: AND
00000cf3: PUSH1 0x01
00000cf5: PUSH4 0xffffffff
00000cfa: AND
00000cfb: SWAP1
00000cfc: SHL
00000cfd: DUP3
00000cfe: OR
00000cff: SWAP2
00000d00: POP
00000d01: DUP4
00000d02: DUP1
00000d03: PUSH2 0x0d0b
00000d06: SWAP1
00000d07: PUSH2 0x3aa6
00000d0a: JUMP
00000d0b: JUMPDEST
00000d0c: SWAP5
00000d0d: POP
00000d0e: POP
00000d0f: DUP5
00000d10: DUP1
00000d11: PUSH2 0x0d19
00000d14: SWAP1
00000d15: PUSH2 0x3a5d
00000d18: JUMP
00000d19: JUMPDEST
00000d1a: SWAP6
00000d1b: POP
00000d1c: POP
00000d1d: DUP7
00000d1e: DUP4
00000d1f: PUSH2 0x0d28
00000d22: SWAP2
00000d23: SWAP1
00000d24: PUSH2 0x3746
00000d27: JUMP
00000d28: JUMPDEST
00000d29: SWAP3
00000d2a: POP
00000d2b: POP
00000d2c: PUSH2 0x0b5e
00000d2f: JUMP
00000d30: JUMPDEST
00000d31: PUSH1 0x01
00000d33: PUSH1 0x02
00000d35: PUSH1 0x05
00000d37: DUP1
00000d38: SLOAD
00000d39: SWAP1
00000d3a: POP
00000d3b: PUSH2 0x0d44
00000d3e: SWAP2
00000d3f: SWAP1
00000d40: PUSH2 0x37da
00000d43: JUMP
00000d44: JUMPDEST
00000d45: PUSH2 0x0d4e
00000d48: SWAP2
00000d49: SWAP1
00000d4a: PUSH2 0x3746
00000d4d: JUMP
00000d4e: JUMPDEST
00000d4f: DUP5
00000d50: LT
00000d51: ISZERO
00000d52: PUSH2 0x0d90
00000d55: JUMPI
00000d56: PUSH1 0x40
00000d58: MLOAD
00000d59: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000d7a: DUP2
00000d7b: MSTORE
00000d7c: PUSH1 0x04
00000d7e: ADD
00000d7f: PUSH2 0x0d87
00000d82: SWAP1
00000d83: PUSH2 0x3258
00000d86: JUMP
00000d87: JUMPDEST
00000d88: PUSH1 0x40
00000d8a: MLOAD
00000d8b: DUP1
00000d8c: SWAP2
00000d8d: SUB
00000d8e: SWAP1
00000d8f: REVERT
00000d90: JUMPDEST
00000d91: DUP10
00000d92: PUSH1 0x03
00000d94: PUSH1 0x00
00000d96: DUP3
00000d97: DUP3
00000d98: SLOAD
00000d99: PUSH2 0x0da2
00000d9c: SWAP2
00000d9d: SWAP1
00000d9e: PUSH2 0x3746
00000da1: JUMP
00000da2: JUMPDEST
00000da3: SWAP3
00000da4: POP
00000da5: POP
00000da6: DUP2
00000da7: SWAP1
00000da8: SSTORE
00000da9: POP
00000daa: PUSH1 0x00
00000dac: DUP13
00000dad: PUSH8 0xffffffffffffffff
00000db6: AND
00000db7: PUSH1 0x40
00000db9: PUSH1 0x07
00000dbb: PUSH1 0x00
00000dbd: SWAP1
00000dbe: SLOAD
00000dbf: SWAP1
00000dc0: PUSH2 0x0100
00000dc3: EXP
00000dc4: SWAP1
00000dc5: DIV
00000dc6: PUSH8 0xffffffffffffffff
00000dcf: AND
00000dd0: PUSH8 0xffffffffffffffff
00000dd9: AND
00000dda: SWAP1
00000ddb: SHL
00000ddc: PUSH2 0x0de5
00000ddf: SWAP2
00000de0: SWAP1
00000de1: PUSH2 0x3746
00000de4: JUMP
00000de5: JUMPDEST
00000de6: SWAP1
00000de7: POP
00000de8: PUSH1 0x00
00000dea: DUP1
00000deb: SHL
00000dec: PUSH1 0x09
00000dee: PUSH1 0x00
00000df0: DUP4
00000df1: DUP2
00000df2: MSTORE
00000df3: PUSH1 0x20
00000df5: ADD
00000df6: SWAP1
00000df7: DUP2
00000df8: MSTORE
00000df9: PUSH1 0x20
00000dfb: ADD
00000dfc: PUSH1 0x00
00000dfe: KECCAK256
00000dff: SLOAD
00000e00: EQ
00000e01: PUSH2 0x0e3f
00000e04: JUMPI
00000e05: PUSH1 0x40
00000e07: MLOAD
00000e08: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000e29: DUP2
00000e2a: MSTORE
00000e2b: PUSH1 0x04
00000e2d: ADD
00000e2e: PUSH2 0x0e36
00000e31: SWAP1
00000e32: PUSH2 0x32f8
00000e35: JUMP
00000e36: JUMPDEST
00000e37: PUSH1 0x40
00000e39: MLOAD
00000e3a: DUP1
00000e3b: SWAP2
00000e3c: SUB
00000e3d: SWAP1
00000e3e: REVERT
00000e3f: JUMPDEST
00000e40: PUSH1 0x00
00000e42: PUSH1 0x07
00000e44: PUSH1 0x00
00000e46: SWAP1
00000e47: SLOAD
00000e48: SWAP1
00000e49: PUSH2 0x0100
00000e4c: EXP
00000e4d: SWAP1
00000e4e: DIV
00000e4f: PUSH8 0xffffffffffffffff
00000e58: AND
00000e59: DUP15
00000e5a: DUP15
00000e5b: DUP15
00000e5c: PUSH1 0x40
00000e5e: MLOAD
00000e5f: PUSH1 0x20
00000e61: ADD
00000e62: PUSH2 0x0e6e
00000e65: SWAP5
00000e66: SWAP4
00000e67: SWAP3
00000e68: SWAP2
00000e69: SWAP1
00000e6a: PUSH2 0x307c
00000e6d: JUMP
00000e6e: JUMPDEST
00000e6f: PUSH1 0x40
00000e71: MLOAD
00000e72: PUSH1 0x20
00000e74: DUP2
00000e75: DUP4
00000e76: SUB
00000e77: SUB
00000e78: DUP2
00000e79: MSTORE
00000e7a: SWAP1
00000e7b: PUSH1 0x40
00000e7d: MSTORE
00000e7e: DUP1
00000e7f: MLOAD
00000e80: SWAP1
00000e81: PUSH1 0x20
00000e83: ADD
00000e84: KECCAK256
00000e85: SWAP1
00000e86: POP
00000e87: DUP1
00000e88: PUSH1 0x09
00000e8a: PUSH1 0x00
00000e8c: DUP5
00000e8d: DUP2
00000e8e: MSTORE
00000e8f: PUSH1 0x20
00000e91: ADD
00000e92: SWAP1
00000e93: DUP2
00000e94: MSTORE
00000e95: PUSH1 0x20
00000e97: ADD
00000e98: PUSH1 0x00
00000e9a: KECCAK256
00000e9b: DUP2
00000e9c: SWAP1
00000e9d: SSTORE
00000e9e: POP
00000e9f: PUSH32 0x028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a
00000ec0: DUP15
00000ec1: DUP15
00000ec2: DUP15
00000ec3: PUSH1 0x07
00000ec5: PUSH1 0x00
00000ec7: SWAP1
00000ec8: SLOAD
00000ec9: SWAP1
00000eca: PUSH2 0x0100
00000ecd: EXP
00000ece: SWAP1
00000ecf: DIV
00000ed0: PUSH8 0xffffffffffffffff
00000ed9: AND
00000eda: DUP8
00000edb: PUSH1 0x40
00000edd: MLOAD
00000ede: PUSH2 0x0eeb
00000ee1: SWAP6
00000ee2: SWAP5
00000ee3: SWAP4
00000ee4: SWAP3
00000ee5: SWAP2
00000ee6: SWAP1
00000ee7: PUSH2 0x3581
00000eea: JUMP
00000eeb: JUMPDEST
00000eec: PUSH1 0x40
00000eee: MLOAD
00000eef: DUP1
00000ef0: SWAP2
00000ef1: SUB
00000ef2: SWAP1
00000ef3: LOG1
00000ef4: PUSH2 0x0f1c
00000ef7: DUP13
00000ef8: DUP15
00000ef9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f0e: AND
00000f0f: PUSH2 0x179c
00000f12: SWAP1
00000f13: SWAP2
00000f14: SWAP1
00000f15: PUSH4 0xffffffff
00000f1a: AND
00000f1b: JUMP
00000f1c: JUMPDEST
00000f1d: POP
00000f1e: POP
00000f1f: POP
00000f20: POP
00000f21: POP
00000f22: POP
00000f23: POP
00000f24: POP
00000f25: POP
00000f26: POP
00000f27: POP
00000f28: POP
00000f29: POP
00000f2a: POP
00000f2b: JUMP
00000f2c: JUMPDEST
00000f2d: PUSH1 0x08
00000f2f: PUSH1 0x20
00000f31: MSTORE
00000f32: DUP1
00000f33: PUSH1 0x00
00000f35: MSTORE
00000f36: PUSH1 0x40
00000f38: PUSH1 0x00
00000f3a: KECCAK256
00000f3b: PUSH1 0x00
00000f3d: SWAP2
00000f3e: POP
00000f3f: SWAP1
00000f40: POP
00000f41: SLOAD
00000f42: DUP2
00000f43: JUMP
00000f44: JUMPDEST
00000f45: PUSH1 0x00
00000f47: PUSH32 0x0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397
00000f68: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f7d: AND
00000f7e: ADDRESS
00000f7f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f94: AND
00000f95: EQ
00000f96: PUSH2 0x0fd4
00000f99: JUMPI
00000f9a: PUSH1 0x40
00000f9c: MLOAD
00000f9d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000fbe: DUP2
00000fbf: MSTORE
00000fc0: PUSH1 0x04
00000fc2: ADD
00000fc3: PUSH2 0x0fcb
00000fc6: SWAP1
00000fc7: PUSH2 0x34b8
00000fca: JUMP
00000fcb: JUMPDEST
00000fcc: PUSH1 0x40
00000fce: MLOAD
00000fcf: DUP1
00000fd0: SWAP2
00000fd1: SUB
00000fd2: SWAP1
00000fd3: REVERT
00000fd4: JUMPDEST
00000fd5: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00000ff6: PUSH1 0x00
00000ff8: SHL
00000ff9: SWAP1
00000ffa: POP
00000ffb: SWAP1
00000ffc: JUMP
00000ffd: JUMPDEST
00000ffe: PUSH1 0x02
00001000: SLOAD
00001001: DUP2
00001002: JUMP
00001003: JUMPDEST
00001004: PUSH1 0x05
00001006: DUP2
00001007: DUP2
00001008: SLOAD
00001009: DUP2
0000100a: LT
0000100b: PUSH2 0x1013
0000100e: JUMPI
0000100f: PUSH1 0x00
00001011: DUP1
00001012: REVERT
00001013: JUMPDEST
00001014: SWAP1
00001015: PUSH1 0x00
00001017: MSTORE
00001018: PUSH1 0x20
0000101a: PUSH1 0x00
0000101c: KECCAK256
0000101d: ADD
0000101e: PUSH1 0x00
00001020: SWAP2
00001021: POP
00001022: SLOAD
00001023: SWAP1
00001024: PUSH2 0x0100
00001027: EXP
00001028: SWAP1
00001029: DIV
0000102a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000103f: AND
00001040: DUP2
00001041: JUMP
00001042: JUMPDEST
00001043: PUSH1 0x00
00001045: PUSH1 0x08
00001047: PUSH1 0x00
00001049: DUP5
0000104a: PUSH8 0xffffffffffffffff
00001053: AND
00001054: PUSH8 0xffffffffffffffff
0000105d: AND
0000105e: DUP2
0000105f: MSTORE
00001060: PUSH1 0x20
00001062: ADD
00001063: SWAP1
00001064: DUP2
00001065: MSTORE
00001066: PUSH1 0x20
00001068: ADD
00001069: PUSH1 0x00
0000106b: KECCAK256
0000106c: SLOAD
0000106d: SWAP1
0000106e: POP
0000106f: PUSH1 0x00
00001071: PUSH1 0x02
00001073: DUP8
00001074: DUP8
00001075: DUP8
00001076: PUSH1 0x40
00001078: MLOAD
00001079: PUSH1 0x20
0000107b: ADD
0000107c: PUSH2 0x1087
0000107f: SWAP4
00001080: SWAP3
00001081: SWAP2
00001082: SWAP1
00001083: PUSH2 0x303f
00001086: JUMP
00001087: JUMPDEST
00001088: PUSH1 0x40
0000108a: MLOAD
0000108b: PUSH1 0x20
0000108d: DUP2
0000108e: DUP4
0000108f: SUB
00001090: SUB
00001091: DUP2
00001092: MSTORE
00001093: SWAP1
00001094: PUSH1 0x40
00001096: MSTORE
00001097: PUSH1 0x40
00001099: MLOAD
0000109a: PUSH2 0x10a3
0000109d: SWAP2
0000109e: SWAP1
0000109f: PUSH2 0x3013
000010a2: JUMP
000010a3: JUMPDEST
000010a4: PUSH1 0x20
000010a6: PUSH1 0x40
000010a8: MLOAD
000010a9: DUP1
000010aa: DUP4
000010ab: SUB
000010ac: DUP2
000010ad: DUP6
000010ae: GAS
000010af: STATICCALL
000010b0: ISZERO
000010b1: DUP1
000010b2: ISZERO
000010b3: PUSH2 0x10c0
000010b6: JUMPI
000010b7: RETURNDATASIZE
000010b8: PUSH1 0x00
000010ba: DUP1
000010bb: RETURNDATACOPY
000010bc: RETURNDATASIZE
000010bd: PUSH1 0x00
000010bf: REVERT
000010c0: JUMPDEST
000010c1: POP
000010c2: POP
000010c3: POP
000010c4: PUSH1 0x40
000010c6: MLOAD
000010c7: RETURNDATASIZE
000010c8: PUSH1 0x1f
000010ca: NOT
000010cb: PUSH1 0x1f
000010cd: DUP3
000010ce: ADD
000010cf: AND
000010d0: DUP3
000010d1: ADD
000010d2: DUP1
000010d3: PUSH1 0x40
000010d5: MSTORE
000010d6: POP
000010d7: DUP2
000010d8: ADD
000010d9: SWAP1
000010da: PUSH2 0x10e3
000010dd: SWAP2
000010de: SWAP1
000010df: PUSH2 0x2696
000010e2: JUMP
000010e3: JUMPDEST
000010e4: SWAP1
000010e5: POP
000010e6: PUSH2 0x10f0
000010e9: DUP4
000010ea: DUP4
000010eb: DUP4
000010ec: PUSH2 0x1890
000010ef: JUMP
000010f0: JUMPDEST
000010f1: PUSH2 0x112f
000010f4: JUMPI
000010f5: PUSH1 0x40
000010f7: MLOAD
000010f8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001119: DUP2
0000111a: MSTORE
0000111b: PUSH1 0x04
0000111d: ADD
0000111e: PUSH2 0x1126
00001121: SWAP1
00001122: PUSH2 0x3278
00001125: JUMP
00001126: JUMPDEST
00001127: PUSH1 0x40
00001129: MLOAD
0000112a: DUP1
0000112b: SWAP2
0000112c: SUB
0000112d: SWAP1
0000112e: REVERT
0000112f: JUMPDEST
00001130: PUSH1 0x00
00001132: DUP8
00001133: PUSH8 0xffffffffffffffff
0000113c: AND
0000113d: PUSH1 0x40
0000113f: DUP7
00001140: PUSH8 0xffffffffffffffff
00001149: AND
0000114a: SWAP1
0000114b: SHL
0000114c: PUSH2 0x1155
0000114f: SWAP2
00001150: SWAP1
00001151: PUSH2 0x3746
00001154: JUMP
00001155: JUMPDEST
00001156: SWAP1
00001157: POP
00001158: PUSH1 0x00
0000115a: DUP6
0000115b: DUP10
0000115c: DUP10
0000115d: DUP10
0000115e: PUSH1 0x40
00001160: MLOAD
00001161: PUSH1 0x20
00001163: ADD
00001164: PUSH2 0x1170
00001167: SWAP5
00001168: SWAP4
00001169: SWAP3
0000116a: SWAP2
0000116b: SWAP1
0000116c: PUSH2 0x307c
0000116f: JUMP
00001170: JUMPDEST
00001171: PUSH1 0x40
00001173: MLOAD
00001174: PUSH1 0x20
00001176: DUP2
00001177: DUP4
00001178: SUB
00001179: SUB
0000117a: DUP2
0000117b: MSTORE
0000117c: SWAP1
0000117d: PUSH1 0x40
0000117f: MSTORE
00001180: DUP1
00001181: MLOAD
00001182: SWAP1
00001183: PUSH1 0x20
00001185: ADD
00001186: KECCAK256
00001187: SWAP1
00001188: POP
00001189: DUP1
0000118a: PUSH1 0x09
0000118c: PUSH1 0x00
0000118e: DUP5
0000118f: DUP2
00001190: MSTORE
00001191: PUSH1 0x20
00001193: ADD
00001194: SWAP1
00001195: DUP2
00001196: MSTORE
00001197: PUSH1 0x20
00001199: ADD
0000119a: PUSH1 0x00
0000119c: KECCAK256
0000119d: SLOAD
0000119e: EQ
0000119f: ISZERO
000011a0: PUSH2 0x11de
000011a3: JUMPI
000011a4: PUSH1 0x40
000011a6: MLOAD
000011a7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000011c8: DUP2
000011c9: MSTORE
000011ca: PUSH1 0x04
000011cc: ADD
000011cd: PUSH2 0x11d5
000011d0: SWAP1
000011d1: PUSH2 0x32f8
000011d4: JUMP
000011d5: JUMPDEST
000011d6: PUSH1 0x40
000011d8: MLOAD
000011d9: DUP1
000011da: SWAP2
000011db: SUB
000011dc: SWAP1
000011dd: REVERT
000011de: JUMPDEST
000011df: DUP1
000011e0: PUSH1 0x09
000011e2: PUSH1 0x00
000011e4: DUP5
000011e5: DUP2
000011e6: MSTORE
000011e7: PUSH1 0x20
000011e9: ADD
000011ea: SWAP1
000011eb: DUP2
000011ec: MSTORE
000011ed: PUSH1 0x20
000011ef: ADD
000011f0: PUSH1 0x00
000011f2: KECCAK256
000011f3: DUP2
000011f4: SWAP1
000011f5: SSTORE
000011f6: POP
000011f7: PUSH32 0x028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a
00001218: DUP10
00001219: DUP10
0000121a: DUP10
0000121b: DUP10
0000121c: PUSH1 0x00
0000121e: PUSH1 0x40
00001220: MLOAD
00001221: PUSH2 0x122e
00001224: SWAP6
00001225: SWAP5
00001226: SWAP4
00001227: SWAP3
00001228: SWAP2
00001229: SWAP1
0000122a: PUSH2 0x352e
0000122d: JUMP
0000122e: JUMPDEST
0000122f: PUSH1 0x40
00001231: MLOAD
00001232: DUP1
00001233: SWAP2
00001234: SUB
00001235: SWAP1
00001236: LOG1
00001237: PUSH2 0x125f
0000123a: DUP8
0000123b: DUP10
0000123c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001251: AND
00001252: PUSH2 0x179c
00001255: SWAP1
00001256: SWAP2
00001257: SWAP1
00001258: PUSH4 0xffffffff
0000125d: AND
0000125e: JUMP
0000125f: JUMPDEST
00001260: POP
00001261: POP
00001262: POP
00001263: POP
00001264: POP
00001265: POP
00001266: POP
00001267: POP
00001268: POP
00001269: JUMP
0000126a: JUMPDEST
0000126b: PUSH1 0x01
0000126d: SLOAD
0000126e: DUP2
0000126f: JUMP
00001270: JUMPDEST
00001271: PUSH1 0x04
00001273: SLOAD
00001274: DUP2
00001275: JUMP
00001276: JUMPDEST
00001277: PUSH32 0x0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397
00001298: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012ad: AND
000012ae: ADDRESS
000012af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012c4: AND
000012c5: EQ
000012c6: ISZERO
000012c7: PUSH2 0x1305
000012ca: JUMPI
000012cb: PUSH1 0x40
000012cd: MLOAD
000012ce: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000012ef: DUP2
000012f0: MSTORE
000012f1: PUSH1 0x04
000012f3: ADD
000012f4: PUSH2 0x12fc
000012f7: SWAP1
000012f8: PUSH2 0x3478
000012fb: JUMP
000012fc: JUMPDEST
000012fd: PUSH1 0x40
000012ff: MLOAD
00001300: DUP1
00001301: SWAP2
00001302: SUB
00001303: SWAP1
00001304: REVERT
00001305: JUMPDEST
00001306: PUSH32 0x0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397
00001327: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000133c: AND
0000133d: PUSH2 0x1344
00001340: PUSH2 0x19d6
00001343: JUMP
00001344: JUMPDEST
00001345: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000135a: AND
0000135b: EQ
0000135c: PUSH2 0x139a
0000135f: JUMPI
00001360: PUSH1 0x40
00001362: MLOAD
00001363: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001384: DUP2
00001385: MSTORE
00001386: PUSH1 0x04
00001388: ADD
00001389: PUSH2 0x1391
0000138c: SWAP1
0000138d: PUSH2 0x3218
00001390: JUMP
00001391: JUMPDEST
00001392: PUSH1 0x40
00001394: MLOAD
00001395: DUP1
00001396: SWAP2
00001397: SUB
00001398: SWAP1
00001399: REVERT
0000139a: JUMPDEST
0000139b: PUSH1 0x00
0000139d: PUSH1 0x02
0000139f: ADDRESS
000013a0: PUSH2 0x13a7
000013a3: PUSH2 0x19d6
000013a6: JUMP
000013a7: JUMPDEST
000013a8: DUP5
000013a9: PUSH1 0x40
000013ab: MLOAD
000013ac: PUSH1 0x20
000013ae: ADD
000013af: PUSH2 0x13ba
000013b2: SWAP4
000013b3: SWAP3
000013b4: SWAP2
000013b5: SWAP1
000013b6: PUSH2 0x2f2b
000013b9: JUMP
000013ba: JUMPDEST
000013bb: PUSH1 0x40
000013bd: MLOAD
000013be: PUSH1 0x20
000013c0: DUP2
000013c1: DUP4
000013c2: SUB
000013c3: SUB
000013c4: DUP2
000013c5: MSTORE
000013c6: SWAP1
000013c7: PUSH1 0x40
000013c9: MSTORE
000013ca: PUSH1 0x40
000013cc: MLOAD
000013cd: PUSH2 0x13d6
000013d0: SWAP2
000013d1: SWAP1
000013d2: PUSH2 0x3013
000013d5: JUMP
000013d6: JUMPDEST
000013d7: PUSH1 0x20
000013d9: PUSH1 0x40
000013db: MLOAD
000013dc: DUP1
000013dd: DUP4
000013de: SUB
000013df: DUP2
000013e0: DUP6
000013e1: GAS
000013e2: STATICCALL
000013e3: ISZERO
000013e4: DUP1
000013e5: ISZERO
000013e6: PUSH2 0x13f3
000013e9: JUMPI
000013ea: RETURNDATASIZE
000013eb: PUSH1 0x00
000013ed: DUP1
000013ee: RETURNDATACOPY
000013ef: RETURNDATASIZE
000013f0: PUSH1 0x00
000013f2: REVERT
000013f3: JUMPDEST
000013f4: POP
000013f5: POP
000013f6: POP
000013f7: PUSH1 0x40
000013f9: MLOAD
000013fa: RETURNDATASIZE
000013fb: PUSH1 0x1f
000013fd: NOT
000013fe: PUSH1 0x1f
00001400: DUP3
00001401: ADD
00001402: AND
00001403: DUP3
00001404: ADD
00001405: DUP1
00001406: PUSH1 0x40
00001408: MSTORE
00001409: POP
0000140a: DUP2
0000140b: ADD
0000140c: SWAP1
0000140d: PUSH2 0x1416
00001410: SWAP2
00001411: SWAP1
00001412: PUSH2 0x2696
00001415: JUMP
00001416: JUMPDEST
00001417: SWAP1
00001418: POP
00001419: PUSH2 0x1420
0000141c: PUSH2 0x1a2d
0000141f: JUMP
00001420: JUMPDEST
00001421: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001436: AND
00001437: PUSH4 0xa7c5b111
0000143c: DUP3
0000143d: DUP7
0000143e: DUP7
0000143f: PUSH1 0x40
00001441: MLOAD
00001442: DUP5
00001443: PUSH4 0xffffffff
00001448: AND
00001449: PUSH1 0xe0
0000144b: SHL
0000144c: DUP2
0000144d: MSTORE
0000144e: PUSH1 0x04
00001450: ADD
00001451: PUSH2 0x145c
00001454: SWAP4
00001455: SWAP3
00001456: SWAP2
00001457: SWAP1
00001458: PUSH2 0x3129
0000145b: JUMP
0000145c: JUMPDEST
0000145d: PUSH1 0x20
0000145f: PUSH1 0x40
00001461: MLOAD
00001462: DUP1
00001463: DUP4
00001464: SUB
00001465: DUP2
00001466: DUP7
00001467: DUP1
00001468: EXTCODESIZE
00001469: ISZERO
0000146a: DUP1
0000146b: ISZERO
0000146c: PUSH2 0x1474
0000146f: JUMPI
00001470: PUSH1 0x00
00001472: DUP1
00001473: REVERT
00001474: JUMPDEST
00001475: POP
00001476: GAS
00001477: STATICCALL
00001478: ISZERO
00001479: DUP1
0000147a: ISZERO
0000147b: PUSH2 0x1488
0000147e: JUMPI
0000147f: RETURNDATASIZE
00001480: PUSH1 0x00
00001482: DUP1
00001483: RETURNDATACOPY
00001484: RETURNDATASIZE
00001485: PUSH1 0x00
00001487: REVERT
00001488: JUMPDEST
00001489: POP
0000148a: POP
0000148b: POP
0000148c: POP
0000148d: PUSH1 0x40
0000148f: MLOAD
00001490: RETURNDATASIZE
00001491: PUSH1 0x1f
00001493: NOT
00001494: PUSH1 0x1f
00001496: DUP3
00001497: ADD
00001498: AND
00001499: DUP3
0000149a: ADD
0000149b: DUP1
0000149c: PUSH1 0x40
0000149e: MSTORE
0000149f: POP
000014a0: DUP2
000014a1: ADD
000014a2: SWAP1
000014a3: PUSH2 0x14ac
000014a6: SWAP2
000014a7: SWAP1
000014a8: PUSH2 0x263c
000014ab: JUMP
000014ac: JUMPDEST
000014ad: PUSH2 0x14eb
000014b0: JUMPI
000014b1: PUSH1 0x40
000014b3: MLOAD
000014b4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000014d5: DUP2
000014d6: MSTORE
000014d7: PUSH1 0x04
000014d9: ADD
000014da: PUSH2 0x14e2
000014dd: SWAP1
000014de: PUSH2 0x32d8
000014e1: JUMP
000014e2: JUMPDEST
000014e3: PUSH1 0x40
000014e5: MLOAD
000014e6: DUP1
000014e7: SWAP2
000014e8: SUB
000014e9: SWAP1
000014ea: REVERT
000014eb: JUMPDEST
000014ec: PUSH2 0x1544
000014ef: DUP3
000014f0: PUSH1 0x00
000014f2: PUSH8 0xffffffffffffffff
000014fb: DUP2
000014fc: GT
000014fd: ISZERO
000014fe: PUSH2 0x150a
00001501: JUMPI
00001502: PUSH2 0x1509
00001505: PUSH2 0x3beb
00001508: JUMP
00001509: JUMPDEST
0000150a: JUMPDEST
0000150b: PUSH1 0x40
0000150d: MLOAD
0000150e: SWAP1
0000150f: DUP1
00001510: DUP3
00001511: MSTORE
00001512: DUP1
00001513: PUSH1 0x1f
00001515: ADD
00001516: PUSH1 0x1f
00001518: NOT
00001519: AND
0000151a: PUSH1 0x20
0000151c: ADD
0000151d: DUP3
0000151e: ADD
0000151f: PUSH1 0x40
00001521: MSTORE
00001522: DUP1
00001523: ISZERO
00001524: PUSH2 0x153c
00001527: JUMPI
00001528: DUP2
00001529: PUSH1 0x20
0000152b: ADD
0000152c: PUSH1 0x01
0000152e: DUP3
0000152f: MUL
00001530: DUP1
00001531: CALLDATASIZE
00001532: DUP4
00001533: CALLDATACOPY
00001534: DUP1
00001535: DUP3
00001536: ADD
00001537: SWAP2
00001538: POP
00001539: POP
0000153a: SWAP1
0000153b: POP
0000153c: JUMPDEST
0000153d: POP
0000153e: PUSH1 0x00
00001540: PUSH2 0x1a57
00001543: JUMP
00001544: JUMPDEST
00001545: POP
00001546: POP
00001547: POP
00001548: POP
00001549: JUMP
0000154a: JUMPDEST
0000154b: PUSH1 0x06
0000154d: PUSH1 0x00
0000154f: SWAP1
00001550: SLOAD
00001551: SWAP1
00001552: PUSH2 0x0100
00001555: EXP
00001556: SWAP1
00001557: DIV
00001558: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000156d: AND
0000156e: DUP2
0000156f: JUMP
00001570: JUMPDEST
00001571: PUSH1 0x09
00001573: PUSH1 0x20
00001575: MSTORE
00001576: DUP1
00001577: PUSH1 0x00
00001579: MSTORE
0000157a: PUSH1 0x40
0000157c: PUSH1 0x00
0000157e: KECCAK256
0000157f: PUSH1 0x00
00001581: SWAP2
00001582: POP
00001583: SWAP1
00001584: POP
00001585: SLOAD
00001586: DUP2
00001587: JUMP
00001588: JUMPDEST
00001589: PUSH1 0x00
0000158b: PUSH1 0x02
0000158d: SWAP1
0000158e: SLOAD
0000158f: SWAP1
00001590: PUSH2 0x0100
00001593: EXP
00001594: SWAP1
00001595: DIV
00001596: PUSH8 0xffffffffffffffff
0000159f: AND
000015a0: DUP2
000015a1: JUMP
000015a2: JUMPDEST
000015a3: PUSH1 0x06
000015a5: PUSH1 0x14
000015a7: SWAP1
000015a8: SLOAD
000015a9: SWAP1
000015aa: PUSH2 0x0100
000015ad: EXP
000015ae: SWAP1
000015af: DIV
000015b0: PUSH8 0xffffffffffffffff
000015b9: AND
000015ba: DUP2
000015bb: JUMP
000015bc: JUMPDEST
000015bd: PUSH1 0x03
000015bf: SLOAD
000015c0: DUP2
000015c1: JUMP
000015c2: JUMPDEST
000015c3: PUSH1 0x00
000015c5: PUSH1 0x05
000015c7: DUP1
000015c8: SLOAD
000015c9: SWAP1
000015ca: POP
000015cb: SWAP1
000015cc: POP
000015cd: SWAP1
000015ce: JUMP
000015cf: JUMPDEST
000015d0: PUSH1 0x00
000015d2: PUSH2 0x15db
000015d5: PUSH1 0x01
000015d7: PUSH2 0x1bd4
000015da: JUMP
000015db: JUMPDEST
000015dc: SWAP1
000015dd: POP
000015de: DUP1
000015df: ISZERO
000015e0: PUSH2 0x15ff
000015e3: JUMPI
000015e4: PUSH1 0x01
000015e6: PUSH1 0x00
000015e8: PUSH1 0x01
000015ea: PUSH2 0x0100
000015ed: EXP
000015ee: DUP2
000015ef: SLOAD
000015f0: DUP2
000015f1: PUSH1 0xff
000015f3: MUL
000015f4: NOT
000015f5: AND
000015f6: SWAP1
000015f7: DUP4
000015f8: ISZERO
000015f9: ISZERO
000015fa: MUL
000015fb: OR
000015fc: SWAP1
000015fd: SSTORE
000015fe: POP
000015ff: JUMPDEST
00001600: PUSH1 0x00
00001602: DUP1
00001603: PUSH1 0x02
00001605: PUSH2 0x0100
00001608: EXP
00001609: DUP2
0000160a: SLOAD
0000160b: DUP2
0000160c: PUSH8 0xffffffffffffffff
00001615: MUL
00001616: NOT
00001617: AND
00001618: SWAP1
00001619: DUP4
0000161a: PUSH8 0xffffffffffffffff
00001623: AND
00001624: MUL
00001625: OR
00001626: SWAP1
00001627: SSTORE
00001628: POP
00001629: DUP6
0000162a: PUSH1 0x01
0000162c: DUP2
0000162d: SWAP1
0000162e: SSTORE
0000162f: POP
00001630: DUP5
00001631: PUSH1 0x02
00001633: DUP2
00001634: SWAP1
00001635: SSTORE
00001636: POP
00001637: DUP4
00001638: PUSH1 0x04
0000163a: DUP2
0000163b: SWAP1
0000163c: SSTORE
0000163d: POP
0000163e: PUSH1 0x00
00001640: PUSH1 0x03
00001642: DUP2
00001643: SWAP1
00001644: SSTORE
00001645: POP
00001646: DUP3
00001647: PUSH1 0x05
00001649: SWAP1
0000164a: DUP1
0000164b: MLOAD
0000164c: SWAP1
0000164d: PUSH1 0x20
0000164f: ADD
00001650: SWAP1
00001651: PUSH2 0x165b
00001654: SWAP3
00001655: SWAP2
00001656: SWAP1
00001657: PUSH2 0x2331
0000165a: JUMP
0000165b: JUMPDEST
0000165c: POP
0000165d: DUP2
0000165e: PUSH1 0x06
00001660: PUSH1 0x00
00001662: PUSH2 0x0100
00001665: EXP
00001666: DUP2
00001667: SLOAD
00001668: DUP2
00001669: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000167e: MUL
0000167f: NOT
00001680: AND
00001681: SWAP1
00001682: DUP4
00001683: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001698: AND
00001699: MUL
0000169a: OR
0000169b: SWAP1
0000169c: SSTORE
0000169d: POP
0000169e: PUSH1 0x00
000016a0: PUSH1 0x06
000016a2: PUSH1 0x14
000016a4: PUSH2 0x0100
000016a7: EXP
000016a8: DUP2
000016a9: SLOAD
000016aa: DUP2
000016ab: PUSH8 0xffffffffffffffff
000016b4: MUL
000016b5: NOT
000016b6: AND
000016b7: SWAP1
000016b8: DUP4
000016b9: PUSH8 0xffffffffffffffff
000016c2: AND
000016c3: MUL
000016c4: OR
000016c5: SWAP1
000016c6: SSTORE
000016c7: POP
000016c8: PUSH1 0x00
000016ca: PUSH1 0x07
000016cc: PUSH1 0x00
000016ce: PUSH2 0x0100
000016d1: EXP
000016d2: DUP2
000016d3: SLOAD
000016d4: DUP2
000016d5: PUSH8 0xffffffffffffffff
000016de: MUL
000016df: NOT
000016e0: AND
000016e1: SWAP1
000016e2: DUP4
000016e3: PUSH8 0xffffffffffffffff
000016ec: AND
000016ed: MUL
000016ee: OR
000016ef: SWAP1
000016f0: SSTORE
000016f1: POP
000016f2: DUP1
000016f3: ISZERO
000016f4: PUSH2 0x174a
000016f7: JUMPI
000016f8: PUSH1 0x00
000016fa: DUP1
000016fb: PUSH1 0x01
000016fd: PUSH2 0x0100
00001700: EXP
00001701: DUP2
00001702: SLOAD
00001703: DUP2
00001704: PUSH1 0xff
00001706: MUL
00001707: NOT
00001708: AND
00001709: SWAP1
0000170a: DUP4
0000170b: ISZERO
0000170c: ISZERO
0000170d: MUL
0000170e: OR
0000170f: SWAP1
00001710: SSTORE
00001711: POP
00001712: PUSH32 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498
00001733: PUSH1 0x01
00001735: PUSH1 0x40
00001737: MLOAD
00001738: PUSH2 0x1741
0000173b: SWAP2
0000173c: SWAP1
0000173d: PUSH2 0x31bb
00001740: JUMP
00001741: JUMPDEST
00001742: PUSH1 0x40
00001744: MLOAD
00001745: DUP1
00001746: SWAP2
00001747: SUB
00001748: SWAP1
00001749: LOG1
0000174a: JUMPDEST
0000174b: POP
0000174c: POP
0000174d: POP
0000174e: POP
0000174f: POP
00001750: POP
00001751: JUMP
00001752: JUMPDEST
00001753: PUSH1 0x00
00001755: DUP1
00001756: DUP3
00001757: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000176c: AND
0000176d: EXTCODESIZE
0000176e: GT
0000176f: SWAP1
00001770: POP
00001771: SWAP2
00001772: SWAP1
00001773: POP
00001774: JUMP
00001775: JUMPDEST
00001776: PUSH1 0x00
00001778: DUP1
00001779: PUSH1 0x00
0000177b: PUSH2 0x1784
0000177e: DUP6
0000177f: DUP6
00001780: PUSH2 0x1cc4
00001783: JUMP
00001784: JUMPDEST
00001785: SWAP2
00001786: POP
00001787: SWAP2
00001788: POP
00001789: PUSH2 0x1791
0000178c: DUP2
0000178d: PUSH2 0x1d47
00001790: JUMP
00001791: JUMPDEST
00001792: DUP2
00001793: SWAP3
00001794: POP
00001795: POP
00001796: POP
00001797: SWAP3
00001798: SWAP2
00001799: POP
0000179a: POP
0000179b: JUMP
0000179c: JUMPDEST
0000179d: DUP1
0000179e: SELFBALANCE
0000179f: LT
000017a0: ISZERO
000017a1: PUSH2 0x17df
000017a4: JUMPI
000017a5: PUSH1 0x40
000017a7: MLOAD
000017a8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000017c9: DUP2
000017ca: MSTORE
000017cb: PUSH1 0x04
000017cd: ADD
000017ce: PUSH2 0x17d6
000017d1: SWAP1
000017d2: PUSH2 0x3358
000017d5: JUMP
000017d6: JUMPDEST
000017d7: PUSH1 0x40
000017d9: MLOAD
000017da: DUP1
000017db: SWAP2
000017dc: SUB
000017dd: SWAP1
000017de: REVERT
000017df: JUMPDEST
000017e0: PUSH1 0x00
000017e2: DUP3
000017e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017f8: AND
000017f9: DUP3
000017fa: PUSH1 0x40
000017fc: MLOAD
000017fd: PUSH2 0x1805
00001800: SWAP1
00001801: PUSH2 0x302a
00001804: JUMP
00001805: JUMPDEST
00001806: PUSH1 0x00
00001808: PUSH1 0x40
0000180a: MLOAD
0000180b: DUP1
0000180c: DUP4
0000180d: SUB
0000180e: DUP2
0000180f: DUP6
00001810: DUP8
00001811: GAS
00001812: CALL
00001813: SWAP3
00001814: POP
00001815: POP
00001816: POP
00001817: RETURNDATASIZE
00001818: DUP1
00001819: PUSH1 0x00
0000181b: DUP2
0000181c: EQ
0000181d: PUSH2 0x1842
00001820: JUMPI
00001821: PUSH1 0x40
00001823: MLOAD
00001824: SWAP2
00001825: POP
00001826: PUSH1 0x1f
00001828: NOT
00001829: PUSH1 0x3f
0000182b: RETURNDATASIZE
0000182c: ADD
0000182d: AND
0000182e: DUP3
0000182f: ADD
00001830: PUSH1 0x40
00001832: MSTORE
00001833: RETURNDATASIZE
00001834: DUP3
00001835: MSTORE
00001836: RETURNDATASIZE
00001837: PUSH1 0x00
00001839: PUSH1 0x20
0000183b: DUP5
0000183c: ADD
0000183d: RETURNDATACOPY
0000183e: PUSH2 0x1847
00001841: JUMP
00001842: JUMPDEST
00001843: PUSH1 0x60
00001845: SWAP2
00001846: POP
00001847: JUMPDEST
00001848: POP
00001849: POP
0000184a: SWAP1
0000184b: POP
0000184c: DUP1
0000184d: PUSH2 0x188b
00001850: JUMPI
00001851: PUSH1 0x40
00001853: MLOAD
00001854: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001875: DUP2
00001876: MSTORE
00001877: PUSH1 0x04
00001879: ADD
0000187a: PUSH2 0x1882
0000187d: SWAP1
0000187e: PUSH2 0x3318
00001881: JUMP
00001882: JUMPDEST
00001883: PUSH1 0x40
00001885: MLOAD
00001886: DUP1
00001887: SWAP2
00001888: SUB
00001889: SWAP1
0000188a: REVERT
0000188b: JUMPDEST
0000188c: POP
0000188d: POP
0000188e: POP
0000188f: JUMP
00001890: JUMPDEST
00001891: PUSH1 0x00
00001893: DUP1
00001894: DUP3
00001895: SWAP1
00001896: POP
00001897: PUSH1 0x00
00001899: JUMPDEST
0000189a: DUP6
0000189b: MLOAD
0000189c: DUP2
0000189d: LT
0000189e: ISZERO
0000189f: PUSH2 0x19c8
000018a2: JUMPI
000018a3: PUSH1 0x00
000018a5: DUP7
000018a6: DUP3
000018a7: DUP2
000018a8: MLOAD
000018a9: DUP2
000018aa: LT
000018ab: PUSH2 0x18b7
000018ae: JUMPI
000018af: PUSH2 0x18b6
000018b2: PUSH2 0x3bbc
000018b5: JUMP
000018b6: JUMPDEST
000018b7: JUMPDEST
000018b8: PUSH1 0x20
000018ba: MUL
000018bb: PUSH1 0x20
000018bd: ADD
000018be: ADD
000018bf: MLOAD
000018c0: SWAP1
000018c1: POP
000018c2: DUP1
000018c3: DUP4
000018c4: GT
000018c5: PUSH2 0x1940
000018c8: JUMPI
000018c9: PUSH1 0x02
000018cb: DUP4
000018cc: DUP3
000018cd: PUSH1 0x40
000018cf: MLOAD
000018d0: PUSH1 0x20
000018d2: ADD
000018d3: PUSH2 0x18dd
000018d6: SWAP3
000018d7: SWAP2
000018d8: SWAP1
000018d9: PUSH2 0x3100
000018dc: JUMP
000018dd: JUMPDEST
000018de: PUSH1 0x40
000018e0: MLOAD
000018e1: PUSH1 0x20
000018e3: DUP2
000018e4: DUP4
000018e5: SUB
000018e6: SUB
000018e7: DUP2
000018e8: MSTORE
000018e9: SWAP1
000018ea: PUSH1 0x40
000018ec: MSTORE
000018ed: PUSH1 0x40
000018ef: MLOAD
000018f0: PUSH2 0x18f9
000018f3: SWAP2
000018f4: SWAP1
000018f5: PUSH2 0x3013
000018f8: JUMP
000018f9: JUMPDEST
000018fa: PUSH1 0x20
000018fc: PUSH1 0x40
000018fe: MLOAD
000018ff: DUP1
00001900: DUP4
00001901: SUB
00001902: DUP2
00001903: DUP6
00001904: GAS
00001905: STATICCALL
00001906: ISZERO
00001907: DUP1
00001908: ISZERO
00001909: PUSH2 0x1916
0000190c: JUMPI
0000190d: RETURNDATASIZE
0000190e: PUSH1 0x00
00001910: DUP1
00001911: RETURNDATACOPY
00001912: RETURNDATASIZE
00001913: PUSH1 0x00
00001915: REVERT
00001916: JUMPDEST
00001917: POP
00001918: POP
00001919: POP
0000191a: PUSH1 0x40
0000191c: MLOAD
0000191d: RETURNDATASIZE
0000191e: PUSH1 0x1f
00001920: NOT
00001921: PUSH1 0x1f
00001923: DUP3
00001924: ADD
00001925: AND
00001926: DUP3
00001927: ADD
00001928: DUP1
00001929: PUSH1 0x40
0000192b: MSTORE
0000192c: POP
0000192d: DUP2
0000192e: ADD
0000192f: SWAP1
00001930: PUSH2 0x1939
00001933: SWAP2
00001934: SWAP1
00001935: PUSH2 0x2696
00001938: JUMP
00001939: JUMPDEST
0000193a: SWAP3
0000193b: POP
0000193c: PUSH2 0x19b4
0000193f: JUMP
00001940: JUMPDEST
00001941: PUSH1 0x02
00001943: DUP2
00001944: DUP5
00001945: PUSH1 0x40
00001947: MLOAD
00001948: PUSH1 0x20
0000194a: ADD
0000194b: PUSH2 0x1955
0000194e: SWAP3
0000194f: SWAP2
00001950: SWAP1
00001951: PUSH2 0x3100
00001954: JUMP
00001955: JUMPDEST
00001956: PUSH1 0x40
00001958: MLOAD
00001959: PUSH1 0x20
0000195b: DUP2
0000195c: DUP4
0000195d: SUB
0000195e: SUB
0000195f: DUP2
00001960: MSTORE
00001961: SWAP1
00001962: PUSH1 0x40
00001964: MSTORE
00001965: PUSH1 0x40
00001967: MLOAD
00001968: PUSH2 0x1971
0000196b: SWAP2
0000196c: SWAP1
0000196d: PUSH2 0x3013
00001970: JUMP
00001971: JUMPDEST
00001972: PUSH1 0x20
00001974: PUSH1 0x40
00001976: MLOAD
00001977: DUP1
00001978: DUP4
00001979: SUB
0000197a: DUP2
0000197b: DUP6
0000197c: GAS
0000197d: STATICCALL
0000197e: ISZERO
0000197f: DUP1
00001980: ISZERO
00001981: PUSH2 0x198e
00001984: JUMPI
00001985: RETURNDATASIZE
00001986: PUSH1 0x00
00001988: DUP1
00001989: RETURNDATACOPY
0000198a: RETURNDATASIZE
0000198b: PUSH1 0x00
0000198d: REVERT
0000198e: JUMPDEST
0000198f: POP
00001990: POP
00001991: POP
00001992: PUSH1 0x40
00001994: MLOAD
00001995: RETURNDATASIZE
00001996: PUSH1 0x1f
00001998: NOT
00001999: PUSH1 0x1f
0000199b: DUP3
0000199c: ADD
0000199d: AND
0000199e: DUP3
0000199f: ADD
000019a0: DUP1
000019a1: PUSH1 0x40
000019a3: MSTORE
000019a4: POP
000019a5: DUP2
000019a6: ADD
000019a7: SWAP1
000019a8: PUSH2 0x19b1
000019ab: SWAP2
000019ac: SWAP1
000019ad: PUSH2 0x2696
000019b0: JUMP
000019b1: JUMPDEST
000019b2: SWAP3
000019b3: POP
000019b4: JUMPDEST
000019b5: POP
000019b6: DUP1
000019b7: DUP1
000019b8: PUSH2 0x19c0
000019bb: SWAP1
000019bc: PUSH2 0x3a5d
000019bf: JUMP
000019c0: JUMPDEST
000019c1: SWAP2
000019c2: POP
000019c3: POP
000019c4: PUSH2 0x1899
000019c7: JUMP
000019c8: JUMPDEST
000019c9: POP
000019ca: DUP4
000019cb: DUP2
000019cc: EQ
000019cd: SWAP2
000019ce: POP
000019cf: POP
000019d0: SWAP4
000019d1: SWAP3
000019d2: POP
000019d3: POP
000019d4: POP
000019d5: JUMP
000019d6: JUMPDEST
000019d7: PUSH1 0x00
000019d9: PUSH2 0x1a04
000019dc: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
000019fd: PUSH1 0x00
000019ff: SHL
00001a00: PUSH2 0x1f1c
00001a03: JUMP
00001a04: JUMPDEST
00001a05: PUSH1 0x00
00001a07: ADD
00001a08: PUSH1 0x00
00001a0a: SWAP1
00001a0b: SLOAD
00001a0c: SWAP1
00001a0d: PUSH2 0x0100
00001a10: EXP
00001a11: SWAP1
00001a12: DIV
00001a13: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a28: AND
00001a29: SWAP1
00001a2a: POP
00001a2b: SWAP1
00001a2c: JUMP
00001a2d: JUMPDEST
00001a2e: PUSH1 0x00
00001a30: PUSH1 0x06
00001a32: PUSH1 0x00
00001a34: SWAP1
00001a35: SLOAD
00001a36: SWAP1
00001a37: PUSH2 0x0100
00001a3a: EXP
00001a3b: SWAP1
00001a3c: DIV
00001a3d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a52: AND
00001a53: SWAP1
00001a54: POP
00001a55: SWAP1
00001a56: JUMP
00001a57: JUMPDEST
00001a58: PUSH2 0x1a83
00001a5b: PUSH32 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143
00001a7c: PUSH1 0x00
00001a7e: SHL
00001a7f: PUSH2 0x1f26
00001a82: JUMP
00001a83: JUMPDEST
00001a84: PUSH1 0x00
00001a86: ADD
00001a87: PUSH1 0x00
00001a89: SWAP1
00001a8a: SLOAD
00001a8b: SWAP1
00001a8c: PUSH2 0x0100
00001a8f: EXP
00001a90: SWAP1
00001a91: DIV
00001a92: PUSH1 0xff
00001a94: AND
00001a95: ISZERO
00001a96: PUSH2 0x1aa7
00001a99: JUMPI
00001a9a: PUSH2 0x1aa2
00001a9d: DUP4
00001a9e: PUSH2 0x1f30
00001aa1: JUMP
00001aa2: JUMPDEST
00001aa3: PUSH2 0x1bcf
00001aa6: JUMP
00001aa7: JUMPDEST
00001aa8: DUP3
00001aa9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001abe: AND
00001abf: PUSH4 0x52d1902d
00001ac4: PUSH1 0x40
00001ac6: MLOAD
00001ac7: DUP2
00001ac8: PUSH4 0xffffffff
00001acd: AND
00001ace: PUSH1 0xe0
00001ad0: SHL
00001ad1: DUP2
00001ad2: MSTORE
00001ad3: PUSH1 0x04
00001ad5: ADD
00001ad6: PUSH1 0x20
00001ad8: PUSH1 0x40
00001ada: MLOAD
00001adb: DUP1
00001adc: DUP4
00001add: SUB
00001ade: DUP2
00001adf: DUP7
00001ae0: DUP1
00001ae1: EXTCODESIZE
00001ae2: ISZERO
00001ae3: DUP1
00001ae4: ISZERO
00001ae5: PUSH2 0x1aed
00001ae8: JUMPI
00001ae9: PUSH1 0x00
00001aeb: DUP1
00001aec: REVERT
00001aed: JUMPDEST
00001aee: POP
00001aef: GAS
00001af0: STATICCALL
00001af1: SWAP3
00001af2: POP
00001af3: POP
00001af4: POP
00001af5: DUP1
00001af6: ISZERO
00001af7: PUSH2 0x1b1e
00001afa: JUMPI
00001afb: POP
00001afc: PUSH1 0x40
00001afe: MLOAD
00001aff: RETURNDATASIZE
00001b00: PUSH1 0x1f
00001b02: NOT
00001b03: PUSH1 0x1f
00001b05: DUP3
00001b06: ADD
00001b07: AND
00001b08: DUP3
00001b09: ADD
00001b0a: DUP1
00001b0b: PUSH1 0x40
00001b0d: MSTORE
00001b0e: POP
00001b0f: DUP2
00001b10: ADD
00001b11: SWAP1
00001b12: PUSH2 0x1b1b
00001b15: SWAP2
00001b16: SWAP1
00001b17: PUSH2 0x2696
00001b1a: JUMP
00001b1b: JUMPDEST
00001b1c: PUSH1 0x01
00001b1e: JUMPDEST
00001b1f: PUSH2 0x1b5d
00001b22: JUMPI
00001b23: PUSH1 0x40
00001b25: MLOAD
00001b26: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001b47: DUP2
00001b48: MSTORE
00001b49: PUSH1 0x04
00001b4b: ADD
00001b4c: PUSH2 0x1b54
00001b4f: SWAP1
00001b50: PUSH2 0x33f8
00001b53: JUMP
00001b54: JUMPDEST
00001b55: PUSH1 0x40
00001b57: MLOAD
00001b58: DUP1
00001b59: SWAP2
00001b5a: SUB
00001b5b: SWAP1
00001b5c: REVERT
00001b5d: JUMPDEST
00001b5e: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00001b7f: PUSH1 0x00
00001b81: SHL
00001b82: DUP2
00001b83: EQ
00001b84: PUSH2 0x1bc2
00001b87: JUMPI
00001b88: PUSH1 0x40
00001b8a: MLOAD
00001b8b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001bac: DUP2
00001bad: MSTORE
00001bae: PUSH1 0x04
00001bb0: ADD
00001bb1: PUSH2 0x1bb9
00001bb4: SWAP1
00001bb5: PUSH2 0x3398
00001bb8: JUMP
00001bb9: JUMPDEST
00001bba: PUSH1 0x40
00001bbc: MLOAD
00001bbd: DUP1
00001bbe: SWAP2
00001bbf: SUB
00001bc0: SWAP1
00001bc1: REVERT
00001bc2: JUMPDEST
00001bc3: POP
00001bc4: PUSH2 0x1bce
00001bc7: DUP4
00001bc8: DUP4
00001bc9: DUP4
00001bca: PUSH2 0x1fe9
00001bcd: JUMP
00001bce: JUMPDEST
00001bcf: JUMPDEST
00001bd0: POP
00001bd1: POP
00001bd2: POP
00001bd3: JUMP
00001bd4: JUMPDEST
00001bd5: PUSH1 0x00
00001bd7: DUP1
00001bd8: PUSH1 0x01
00001bda: SWAP1
00001bdb: SLOAD
00001bdc: SWAP1
00001bdd: PUSH2 0x0100
00001be0: EXP
00001be1: SWAP1
00001be2: DIV
00001be3: PUSH1 0xff
00001be5: AND
00001be6: ISZERO
00001be7: PUSH2 0x1c4b
00001bea: JUMPI
00001beb: PUSH1 0x01
00001bed: DUP3
00001bee: PUSH1 0xff
00001bf0: AND
00001bf1: EQ
00001bf2: DUP1
00001bf3: ISZERO
00001bf4: PUSH2 0x1c03
00001bf7: JUMPI
00001bf8: POP
00001bf9: PUSH2 0x1c01
00001bfc: ADDRESS
00001bfd: PUSH2 0x1752
00001c00: JUMP
00001c01: JUMPDEST
00001c02: ISZERO
00001c03: JUMPDEST
00001c04: PUSH2 0x1c42
00001c07: JUMPI
00001c08: PUSH1 0x40
00001c0a: MLOAD
00001c0b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001c2c: DUP2
00001c2d: MSTORE
00001c2e: PUSH1 0x04
00001c30: ADD
00001c31: PUSH2 0x1c39
00001c34: SWAP1
00001c35: PUSH2 0x33b8
00001c38: JUMP
00001c39: JUMPDEST
00001c3a: PUSH1 0x40
00001c3c: MLOAD
00001c3d: DUP1
00001c3e: SWAP2
00001c3f: SUB
00001c40: SWAP1
00001c41: REVERT
00001c42: JUMPDEST
00001c43: PUSH1 0x00
00001c45: SWAP1
00001c46: POP
00001c47: PUSH2 0x1cbf
00001c4a: JUMP
00001c4b: JUMPDEST
00001c4c: DUP2
00001c4d: PUSH1 0xff
00001c4f: AND
00001c50: PUSH1 0x00
00001c52: DUP1
00001c53: SLOAD
00001c54: SWAP1
00001c55: PUSH2 0x0100
00001c58: EXP
00001c59: SWAP1
00001c5a: DIV
00001c5b: PUSH1 0xff
00001c5d: AND
00001c5e: PUSH1 0xff
00001c60: AND
00001c61: LT
00001c62: PUSH2 0x1ca0
00001c65: JUMPI
00001c66: PUSH1 0x40
00001c68: MLOAD
00001c69: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001c8a: DUP2
00001c8b: MSTORE
00001c8c: PUSH1 0x04
00001c8e: ADD
00001c8f: PUSH2 0x1c97
00001c92: SWAP1
00001c93: PUSH2 0x33b8
00001c96: JUMP
00001c97: JUMPDEST
00001c98: PUSH1 0x40
00001c9a: MLOAD
00001c9b: DUP1
00001c9c: SWAP2
00001c9d: SUB
00001c9e: SWAP1
00001c9f: REVERT
00001ca0: JUMPDEST
00001ca1: DUP2
00001ca2: PUSH1 0x00
00001ca4: DUP1
00001ca5: PUSH2 0x0100
00001ca8: EXP
00001ca9: DUP2
00001caa: SLOAD
00001cab: DUP2
00001cac: PUSH1 0xff
00001cae: MUL
00001caf: NOT
00001cb0: AND
00001cb1: SWAP1
00001cb2: DUP4
00001cb3: PUSH1 0xff
00001cb5: AND
00001cb6: MUL
00001cb7: OR
00001cb8: SWAP1
00001cb9: SSTORE
00001cba: POP
00001cbb: PUSH1 0x01
00001cbd: SWAP1
00001cbe: POP
00001cbf: JUMPDEST
00001cc0: SWAP2
00001cc1: SWAP1
00001cc2: POP
00001cc3: JUMP
00001cc4: JUMPDEST
00001cc5: PUSH1 0x00
00001cc7: DUP1
00001cc8: PUSH1 0x41
00001cca: DUP4
00001ccb: MLOAD
00001ccc: EQ
00001ccd: ISZERO
00001cce: PUSH2 0x1d06
00001cd1: JUMPI
00001cd2: PUSH1 0x00
00001cd4: DUP1
00001cd5: PUSH1 0x00
00001cd7: PUSH1 0x20
00001cd9: DUP7
00001cda: ADD
00001cdb: MLOAD
00001cdc: SWAP3
00001cdd: POP
00001cde: PUSH1 0x40
00001ce0: DUP7
00001ce1: ADD
00001ce2: MLOAD
00001ce3: SWAP2
00001ce4: POP
00001ce5: PUSH1 0x60
00001ce7: DUP7
00001ce8: ADD
00001ce9: MLOAD
00001cea: PUSH1 0x00
00001cec: BYTE
00001ced: SWAP1
00001cee: POP
00001cef: PUSH2 0x1cfa
00001cf2: DUP8
00001cf3: DUP3
00001cf4: DUP6
00001cf5: DUP6
00001cf6: PUSH2 0x2015
00001cf9: JUMP
00001cfa: JUMPDEST
00001cfb: SWAP5
00001cfc: POP
00001cfd: SWAP5
00001cfe: POP
00001cff: POP
00001d00: POP
00001d01: POP
00001d02: PUSH2 0x1d40
00001d05: JUMP
00001d06: JUMPDEST
00001d07: PUSH1 0x40
00001d09: DUP4
00001d0a: MLOAD
00001d0b: EQ
00001d0c: ISZERO
00001d0d: PUSH2 0x1d37
00001d10: JUMPI
00001d11: PUSH1 0x00
00001d13: DUP1
00001d14: PUSH1 0x20
00001d16: DUP6
00001d17: ADD
00001d18: MLOAD
00001d19: SWAP2
00001d1a: POP
00001d1b: PUSH1 0x40
00001d1d: DUP6
00001d1e: ADD
00001d1f: MLOAD
00001d20: SWAP1
00001d21: POP
00001d22: PUSH2 0x1d2c
00001d25: DUP7
00001d26: DUP4
00001d27: DUP4
00001d28: PUSH2 0x2122
00001d2b: JUMP
00001d2c: JUMPDEST
00001d2d: SWAP4
00001d2e: POP
00001d2f: SWAP4
00001d30: POP
00001d31: POP
00001d32: POP
00001d33: PUSH2 0x1d40
00001d36: JUMP
00001d37: JUMPDEST
00001d38: PUSH1 0x00
00001d3a: PUSH1 0x02
00001d3c: SWAP2
00001d3d: POP
00001d3e: SWAP2
00001d3f: POP
00001d40: JUMPDEST
00001d41: SWAP3
00001d42: POP
00001d43: SWAP3
00001d44: SWAP1
00001d45: POP
00001d46: JUMP
00001d47: JUMPDEST
00001d48: PUSH1 0x00
00001d4a: PUSH1 0x04
00001d4c: DUP2
00001d4d: GT
00001d4e: ISZERO
00001d4f: PUSH2 0x1d5b
00001d52: JUMPI
00001d53: PUSH2 0x1d5a
00001d56: PUSH2 0x3b8d
00001d59: JUMP
00001d5a: JUMPDEST
00001d5b: JUMPDEST
00001d5c: DUP2
00001d5d: PUSH1 0x04
00001d5f: DUP2
00001d60: GT
00001d61: ISZERO
00001d62: PUSH2 0x1d6e
00001d65: JUMPI
00001d66: PUSH2 0x1d6d
00001d69: PUSH2 0x3b8d
00001d6c: JUMP
00001d6d: JUMPDEST
00001d6e: JUMPDEST
00001d6f: EQ
00001d70: ISZERO
00001d71: PUSH2 0x1d79
00001d74: JUMPI
00001d75: PUSH2 0x1f19
00001d78: JUMP
00001d79: JUMPDEST
00001d7a: PUSH1 0x01
00001d7c: PUSH1 0x04
00001d7e: DUP2
00001d7f: GT
00001d80: ISZERO
00001d81: PUSH2 0x1d8d
00001d84: JUMPI
00001d85: PUSH2 0x1d8c
00001d88: PUSH2 0x3b8d
00001d8b: JUMP
00001d8c: JUMPDEST
00001d8d: JUMPDEST
00001d8e: DUP2
00001d8f: PUSH1 0x04
00001d91: DUP2
00001d92: GT
00001d93: ISZERO
00001d94: PUSH2 0x1da0
00001d97: JUMPI
00001d98: PUSH2 0x1d9f
00001d9b: PUSH2 0x3b8d
00001d9e: JUMP
00001d9f: JUMPDEST
00001da0: JUMPDEST
00001da1: EQ
00001da2: ISZERO
00001da3: PUSH2 0x1de1
00001da6: JUMPI
00001da7: PUSH1 0x40
00001da9: MLOAD
00001daa: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001dcb: DUP2
00001dcc: MSTORE
00001dcd: PUSH1 0x04
00001dcf: ADD
00001dd0: PUSH2 0x1dd8
00001dd3: SWAP1
00001dd4: PUSH2 0x31f8
00001dd7: JUMP
00001dd8: JUMPDEST
00001dd9: PUSH1 0x40
00001ddb: MLOAD
00001ddc: DUP1
00001ddd: SWAP2
00001dde: SUB
00001ddf: SWAP1
00001de0: REVERT
00001de1: JUMPDEST
00001de2: PUSH1 0x02
00001de4: PUSH1 0x04
00001de6: DUP2
00001de7: GT
00001de8: ISZERO
00001de9: PUSH2 0x1df5
00001dec: JUMPI
00001ded: PUSH2 0x1df4
00001df0: PUSH2 0x3b8d
00001df3: JUMP
00001df4: JUMPDEST
00001df5: JUMPDEST
00001df6: DUP2
00001df7: PUSH1 0x04
00001df9: DUP2
00001dfa: GT
00001dfb: ISZERO
00001dfc: PUSH2 0x1e08
00001dff: JUMPI
00001e00: PUSH2 0x1e07
00001e03: PUSH2 0x3b8d
00001e06: JUMP
00001e07: JUMPDEST
00001e08: JUMPDEST
00001e09: EQ
00001e0a: ISZERO
00001e0b: PUSH2 0x1e49
00001e0e: JUMPI
00001e0f: PUSH1 0x40
00001e11: MLOAD
00001e12: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001e33: DUP2
00001e34: MSTORE
00001e35: PUSH1 0x04
00001e37: ADD
00001e38: PUSH2 0x1e40
00001e3b: SWAP1
00001e3c: PUSH2 0x3238
00001e3f: JUMP
00001e40: JUMPDEST
00001e41: PUSH1 0x40
00001e43: MLOAD
00001e44: DUP1
00001e45: SWAP2
00001e46: SUB
00001e47: SWAP1
00001e48: REVERT
00001e49: JUMPDEST
00001e4a: PUSH1 0x03
00001e4c: PUSH1 0x04
00001e4e: DUP2
00001e4f: GT
00001e50: ISZERO
00001e51: PUSH2 0x1e5d
00001e54: JUMPI
00001e55: PUSH2 0x1e5c
00001e58: PUSH2 0x3b8d
00001e5b: JUMP
00001e5c: JUMPDEST
00001e5d: JUMPDEST
00001e5e: DUP2
00001e5f: PUSH1 0x04
00001e61: DUP2
00001e62: GT
00001e63: ISZERO
00001e64: PUSH2 0x1e70
00001e67: JUMPI
00001e68: PUSH2 0x1e6f
00001e6b: PUSH2 0x3b8d
00001e6e: JUMP
00001e6f: JUMPDEST
00001e70: JUMPDEST
00001e71: EQ
00001e72: ISZERO
00001e73: PUSH2 0x1eb1
00001e76: JUMPI
00001e77: PUSH1 0x40
00001e79: MLOAD
00001e7a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001e9b: DUP2
00001e9c: MSTORE
00001e9d: PUSH1 0x04
00001e9f: ADD
00001ea0: PUSH2 0x1ea8
00001ea3: SWAP1
00001ea4: PUSH2 0x3338
00001ea7: JUMP
00001ea8: JUMPDEST
00001ea9: PUSH1 0x40
00001eab: MLOAD
00001eac: DUP1
00001ead: SWAP2
00001eae: SUB
00001eaf: SWAP1
00001eb0: REVERT
00001eb1: JUMPDEST
00001eb2: PUSH1 0x04
00001eb4: DUP1
00001eb5: DUP2
00001eb6: GT
00001eb7: ISZERO
00001eb8: PUSH2 0x1ec4
00001ebb: JUMPI
00001ebc: PUSH2 0x1ec3
00001ebf: PUSH2 0x3b8d
00001ec2: JUMP
00001ec3: JUMPDEST
00001ec4: JUMPDEST
00001ec5: DUP2
00001ec6: PUSH1 0x04
00001ec8: DUP2
00001ec9: GT
00001eca: ISZERO
00001ecb: PUSH2 0x1ed7
00001ece: JUMPI
00001ecf: PUSH2 0x1ed6
00001ed2: PUSH2 0x3b8d
00001ed5: JUMP
00001ed6: JUMPDEST
00001ed7: JUMPDEST
00001ed8: EQ
00001ed9: ISZERO
00001eda: PUSH2 0x1f18
00001edd: JUMPI
00001ede: PUSH1 0x40
00001ee0: MLOAD
00001ee1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001f02: DUP2
00001f03: MSTORE
00001f04: PUSH1 0x04
00001f06: ADD
00001f07: PUSH2 0x1f0f
00001f0a: SWAP1
00001f0b: PUSH2 0x33d8
00001f0e: JUMP
00001f0f: JUMPDEST
00001f10: PUSH1 0x40
00001f12: MLOAD
00001f13: DUP1
00001f14: SWAP2
00001f15: SUB
00001f16: SWAP1
00001f17: REVERT
00001f18: JUMPDEST
00001f19: JUMPDEST
00001f1a: POP
00001f1b: JUMP
00001f1c: JUMPDEST
00001f1d: PUSH1 0x00
00001f1f: DUP2
00001f20: SWAP1
00001f21: POP
00001f22: SWAP2
00001f23: SWAP1
00001f24: POP
00001f25: JUMP
00001f26: JUMPDEST
00001f27: PUSH1 0x00
00001f29: DUP2
00001f2a: SWAP1
00001f2b: POP
00001f2c: SWAP2
00001f2d: SWAP1
00001f2e: POP
00001f2f: JUMP
00001f30: JUMPDEST
00001f31: PUSH2 0x1f39
00001f34: DUP2
00001f35: PUSH2 0x1752
00001f38: JUMP
00001f39: JUMPDEST
00001f3a: PUSH2 0x1f78
00001f3d: JUMPI
00001f3e: PUSH1 0x40
00001f40: MLOAD
00001f41: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001f62: DUP2
00001f63: MSTORE
00001f64: PUSH1 0x04
00001f66: ADD
00001f67: PUSH2 0x1f6f
00001f6a: SWAP1
00001f6b: PUSH2 0x3458
00001f6e: JUMP
00001f6f: JUMPDEST
00001f70: PUSH1 0x40
00001f72: MLOAD
00001f73: DUP1
00001f74: SWAP2
00001f75: SUB
00001f76: SWAP1
00001f77: REVERT
00001f78: JUMPDEST
00001f79: DUP1
00001f7a: PUSH2 0x1fa5
00001f7d: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
00001f9e: PUSH1 0x00
00001fa0: SHL
00001fa1: PUSH2 0x1f1c
00001fa4: JUMP
00001fa5: JUMPDEST
00001fa6: PUSH1 0x00
00001fa8: ADD
00001fa9: PUSH1 0x00
00001fab: PUSH2 0x0100
00001fae: EXP
00001faf: DUP2
00001fb0: SLOAD
00001fb1: DUP2
00001fb2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001fc7: MUL
00001fc8: NOT
00001fc9: AND
00001fca: SWAP1
00001fcb: DUP4
00001fcc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001fe1: AND
00001fe2: MUL
00001fe3: OR
00001fe4: SWAP1
00001fe5: SSTORE
00001fe6: POP
00001fe7: POP
00001fe8: JUMP
00001fe9: JUMPDEST
00001fea: PUSH2 0x1ff2
00001fed: DUP4
00001fee: PUSH2 0x2181
00001ff1: JUMP
00001ff2: JUMPDEST
00001ff3: PUSH1 0x00
00001ff5: DUP3
00001ff6: MLOAD
00001ff7: GT
00001ff8: DUP1
00001ff9: PUSH2 0x1fff
00001ffc: JUMPI
00001ffd: POP
00001ffe: DUP1
00001fff: JUMPDEST
00002000: ISZERO
00002001: PUSH2 0x2010
00002004: JUMPI
00002005: PUSH2 0x200e
00002008: DUP4
00002009: DUP4
0000200a: PUSH2 0x21d0
0000200d: JUMP
0000200e: JUMPDEST
0000200f: POP
00002010: JUMPDEST
00002011: POP
00002012: POP
00002013: POP
00002014: JUMP
00002015: JUMPDEST
00002016: PUSH1 0x00
00002018: DUP1
00002019: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
0000203a: DUP4
0000203b: PUSH1 0x00
0000203d: SHR
0000203e: GT
0000203f: ISZERO
00002040: PUSH2 0x2050
00002043: JUMPI
00002044: PUSH1 0x00
00002046: PUSH1 0x03
00002048: SWAP2
00002049: POP
0000204a: SWAP2
0000204b: POP
0000204c: PUSH2 0x2119
0000204f: JUMP
00002050: JUMPDEST
00002051: PUSH1 0x1b
00002053: DUP6
00002054: PUSH1 0xff
00002056: AND
00002057: EQ
00002058: ISZERO
00002059: DUP1
0000205a: ISZERO
0000205b: PUSH2 0x2068
0000205e: JUMPI
0000205f: POP
00002060: PUSH1 0x1c
00002062: DUP6
00002063: PUSH1 0xff
00002065: AND
00002066: EQ
00002067: ISZERO
00002068: JUMPDEST
00002069: ISZERO
0000206a: PUSH2 0x207a
0000206d: JUMPI
0000206e: PUSH1 0x00
00002070: PUSH1 0x04
00002072: SWAP2
00002073: POP
00002074: SWAP2
00002075: POP
00002076: PUSH2 0x2119
00002079: JUMP
0000207a: JUMPDEST
0000207b: PUSH1 0x00
0000207d: PUSH1 0x01
0000207f: DUP8
00002080: DUP8
00002081: DUP8
00002082: DUP8
00002083: PUSH1 0x40
00002085: MLOAD
00002086: PUSH1 0x00
00002088: DUP2
00002089: MSTORE
0000208a: PUSH1 0x20
0000208c: ADD
0000208d: PUSH1 0x40
0000208f: MSTORE
00002090: PUSH1 0x40
00002092: MLOAD
00002093: PUSH2 0x209f
00002096: SWAP5
00002097: SWAP4
00002098: SWAP3
00002099: SWAP2
0000209a: SWAP1
0000209b: PUSH2 0x315b
0000209e: JUMP
0000209f: JUMPDEST
000020a0: PUSH1 0x20
000020a2: PUSH1 0x40
000020a4: MLOAD
000020a5: PUSH1 0x20
000020a7: DUP2
000020a8: SUB
000020a9: SWAP1
000020aa: DUP1
000020ab: DUP5
000020ac: SUB
000020ad: SWAP1
000020ae: DUP6
000020af: GAS
000020b0: STATICCALL
000020b1: ISZERO
000020b2: DUP1
000020b3: ISZERO
000020b4: PUSH2 0x20c1
000020b7: JUMPI
000020b8: RETURNDATASIZE
000020b9: PUSH1 0x00
000020bb: DUP1
000020bc: RETURNDATACOPY
000020bd: RETURNDATASIZE
000020be: PUSH1 0x00
000020c0: REVERT
000020c1: JUMPDEST
000020c2: POP
000020c3: POP
000020c4: POP
000020c5: PUSH1 0x20
000020c7: PUSH1 0x40
000020c9: MLOAD
000020ca: SUB
000020cb: MLOAD
000020cc: SWAP1
000020cd: POP
000020ce: PUSH1 0x00
000020d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000020e5: AND
000020e6: DUP2
000020e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000020fc: AND
000020fd: EQ
000020fe: ISZERO
000020ff: PUSH2 0x2110
00002102: JUMPI
00002103: PUSH1 0x00
00002105: PUSH1 0x01
00002107: SWAP3
00002108: POP
00002109: SWAP3
0000210a: POP
0000210b: POP
0000210c: PUSH2 0x2119
0000210f: JUMP
00002110: JUMPDEST
00002111: DUP1
00002112: PUSH1 0x00
00002114: SWAP3
00002115: POP
00002116: SWAP3
00002117: POP
00002118: POP
00002119: JUMPDEST
0000211a: SWAP5
0000211b: POP
0000211c: SWAP5
0000211d: SWAP3
0000211e: POP
0000211f: POP
00002120: POP
00002121: JUMP
00002122: JUMPDEST
00002123: PUSH1 0x00
00002125: DUP1
00002126: PUSH1 0x00
00002128: PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00002149: PUSH1 0x00
0000214b: SHL
0000214c: DUP5
0000214d: AND
0000214e: SWAP1
0000214f: POP
00002150: PUSH1 0x00
00002152: PUSH1 0x1b
00002154: PUSH1 0xff
00002156: DUP7
00002157: PUSH1 0x00
00002159: SHR
0000215a: SWAP1
0000215b: SHR
0000215c: PUSH2 0x2165
0000215f: SWAP2
00002160: SWAP1
00002161: PUSH2 0x3746
00002164: JUMP
00002165: JUMPDEST
00002166: SWAP1
00002167: POP
00002168: PUSH2 0x2173
0000216b: DUP8
0000216c: DUP3
0000216d: DUP9
0000216e: DUP6
0000216f: PUSH2 0x2015
00002172: JUMP
00002173: JUMPDEST
00002174: SWAP4
00002175: POP
00002176: SWAP4
00002177: POP
00002178: POP
00002179: POP
0000217a: SWAP4
0000217b: POP
0000217c: SWAP4
0000217d: SWAP2
0000217e: POP
0000217f: POP
00002180: JUMP
00002181: JUMPDEST
00002182: PUSH2 0x218a
00002185: DUP2
00002186: PUSH2 0x1f30
00002189: JUMP
0000218a: JUMPDEST
0000218b: DUP1
0000218c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000021a1: AND
000021a2: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
000021c3: PUSH1 0x40
000021c5: MLOAD
000021c6: PUSH1 0x40
000021c8: MLOAD
000021c9: DUP1
000021ca: SWAP2
000021cb: SUB
000021cc: SWAP1
000021cd: LOG2
000021ce: POP
000021cf: JUMP
000021d0: JUMPDEST
000021d1: PUSH1 0x60
000021d3: PUSH2 0x21f5
000021d6: DUP4
000021d7: DUP4
000021d8: PUSH1 0x40
000021da: MLOAD
000021db: DUP1
000021dc: PUSH1 0x60
000021de: ADD
000021df: PUSH1 0x40
000021e1: MSTORE
000021e2: DUP1
000021e3: PUSH1 0x27
000021e5: DUP2
000021e6: MSTORE
000021e7: PUSH1 0x20
000021e9: ADD
000021ea: PUSH2 0x4243
000021ed: PUSH1 0x27
000021ef: SWAP2
000021f0: CODECOPY
000021f1: PUSH2 0x21fd
000021f4: JUMP
000021f5: JUMPDEST
000021f6: SWAP1
000021f7: POP
000021f8: SWAP3
000021f9: SWAP2
000021fa: POP
000021fb: POP
000021fc: JUMP
000021fd: JUMPDEST
000021fe: PUSH1 0x60
00002200: PUSH2 0x2208
00002203: DUP5
00002204: PUSH2 0x1752
00002207: JUMP
00002208: JUMPDEST
00002209: PUSH2 0x2247
0000220c: JUMPI
0000220d: PUSH1 0x40
0000220f: MLOAD
00002210: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002231: DUP2
00002232: MSTORE
00002233: PUSH1 0x04
00002235: ADD
00002236: PUSH2 0x223e
00002239: SWAP1
0000223a: PUSH2 0x3498
0000223d: JUMP
0000223e: JUMPDEST
0000223f: PUSH1 0x40
00002241: MLOAD
00002242: DUP1
00002243: SWAP2
00002244: SUB
00002245: SWAP1
00002246: REVERT
00002247: JUMPDEST
00002248: PUSH1 0x00
0000224a: DUP1
0000224b: DUP6
0000224c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002261: AND
00002262: DUP6
00002263: PUSH1 0x40
00002265: MLOAD
00002266: PUSH2 0x226f
00002269: SWAP2
0000226a: SWAP1
0000226b: PUSH2 0x3013
0000226e: JUMP
0000226f: JUMPDEST
00002270: PUSH1 0x00
00002272: PUSH1 0x40
00002274: MLOAD
00002275: DUP1
00002276: DUP4
00002277: SUB
00002278: DUP2
00002279: DUP6
0000227a: GAS
0000227b: DELEGATECALL
0000227c: SWAP2
0000227d: POP
0000227e: POP
0000227f: RETURNDATASIZE
00002280: DUP1
00002281: PUSH1 0x00
00002283: DUP2
00002284: EQ
00002285: PUSH2 0x22aa
00002288: JUMPI
00002289: PUSH1 0x40
0000228b: MLOAD
0000228c: SWAP2
0000228d: POP
0000228e: PUSH1 0x1f
00002290: NOT
00002291: PUSH1 0x3f
00002293: RETURNDATASIZE
00002294: ADD
00002295: AND
00002296: DUP3
00002297: ADD
00002298: PUSH1 0x40
0000229a: MSTORE
0000229b: RETURNDATASIZE
0000229c: DUP3
0000229d: MSTORE
0000229e: RETURNDATASIZE
0000229f: PUSH1 0x00
000022a1: PUSH1 0x20
000022a3: DUP5
000022a4: ADD
000022a5: RETURNDATACOPY
000022a6: PUSH2 0x22af
000022a9: JUMP
000022aa: JUMPDEST
000022ab: PUSH1 0x60
000022ad: SWAP2
000022ae: POP
000022af: JUMPDEST
000022b0: POP
000022b1: SWAP2
000022b2: POP
000022b3: SWAP2
000022b4: POP
000022b5: PUSH2 0x22bf
000022b8: DUP3
000022b9: DUP3
000022ba: DUP7
000022bb: PUSH2 0x22ca
000022be: JUMP
000022bf: JUMPDEST
000022c0: SWAP3
000022c1: POP
000022c2: POP
000022c3: POP
000022c4: SWAP4
000022c5: SWAP3
000022c6: POP
000022c7: POP
000022c8: POP
000022c9: JUMP
000022ca: JUMPDEST
000022cb: PUSH1 0x60
000022cd: DUP4
000022ce: ISZERO
000022cf: PUSH2 0x22da
000022d2: JUMPI
000022d3: DUP3
000022d4: SWAP1
000022d5: POP
000022d6: PUSH2 0x232a
000022d9: JUMP
000022da: JUMPDEST
000022db: PUSH1 0x00
000022dd: DUP4
000022de: MLOAD
000022df: GT
000022e0: ISZERO
000022e1: PUSH2 0x22ed
000022e4: JUMPI
000022e5: DUP3
000022e6: MLOAD
000022e7: DUP1
000022e8: DUP5
000022e9: PUSH1 0x20
000022eb: ADD
000022ec: REVERT
000022ed: JUMPDEST
000022ee: DUP2
000022ef: PUSH1 0x40
000022f1: MLOAD
000022f2: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002313: DUP2
00002314: MSTORE
00002315: PUSH1 0x04
00002317: ADD
00002318: PUSH2 0x2321
0000231b: SWAP2
0000231c: SWAP1
0000231d: PUSH2 0x31d6
00002320: JUMP
00002321: JUMPDEST
00002322: PUSH1 0x40
00002324: MLOAD
00002325: DUP1
00002326: SWAP2
00002327: SUB
00002328: SWAP1
00002329: REVERT
0000232a: JUMPDEST
0000232b: SWAP4
0000232c: SWAP3
0000232d: POP
0000232e: POP
0000232f: POP
00002330: JUMP
00002331: JUMPDEST
00002332: DUP3
00002333: DUP1
00002334: SLOAD
00002335: DUP3
00002336: DUP3
00002337: SSTORE
00002338: SWAP1
00002339: PUSH1 0x00
0000233b: MSTORE
0000233c: PUSH1 0x20
0000233e: PUSH1 0x00
00002340: KECCAK256
00002341: SWAP1
00002342: DUP2
00002343: ADD
00002344: SWAP3
00002345: DUP3
00002346: ISZERO
00002347: PUSH2 0x23aa
0000234a: JUMPI
0000234b: SWAP2
0000234c: PUSH1 0x20
0000234e: MUL
0000234f: DUP3
00002350: ADD
00002351: JUMPDEST
00002352: DUP3
00002353: DUP2
00002354: GT
00002355: ISZERO
00002356: PUSH2 0x23a9
00002359: JUMPI
0000235a: DUP3
0000235b: MLOAD
0000235c: DUP3
0000235d: PUSH1 0x00
0000235f: PUSH2 0x0100
00002362: EXP
00002363: DUP2
00002364: SLOAD
00002365: DUP2
00002366: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000237b: MUL
0000237c: NOT
0000237d: AND
0000237e: SWAP1
0000237f: DUP4
00002380: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002395: AND
00002396: MUL
00002397: OR
00002398: SWAP1
00002399: SSTORE
0000239a: POP
0000239b: SWAP2
0000239c: PUSH1 0x20
0000239e: ADD
0000239f: SWAP2
000023a0: SWAP1
000023a1: PUSH1 0x01
000023a3: ADD
000023a4: SWAP1
000023a5: PUSH2 0x2351
000023a8: JUMP
000023a9: JUMPDEST
000023aa: JUMPDEST
000023ab: POP
000023ac: SWAP1
000023ad: POP
000023ae: PUSH2 0x23b7
000023b1: SWAP2
000023b2: SWAP1
000023b3: PUSH2 0x23bb
000023b6: JUMP
000023b7: JUMPDEST
000023b8: POP
000023b9: SWAP1
000023ba: JUMP
000023bb: JUMPDEST
000023bc: JUMPDEST
000023bd: DUP1
000023be: DUP3
000023bf: GT
000023c0: ISZERO
000023c1: PUSH2 0x23d4
000023c4: JUMPI
000023c5: PUSH1 0x00
000023c7: DUP2
000023c8: PUSH1 0x00
000023ca: SWAP1
000023cb: SSTORE
000023cc: POP
000023cd: PUSH1 0x01
000023cf: ADD
000023d0: PUSH2 0x23bc
000023d3: JUMP
000023d4: JUMPDEST
000023d5: POP
000023d6: SWAP1
000023d7: JUMP
000023d8: JUMPDEST
000023d9: PUSH1 0x00
000023db: PUSH2 0x23eb
000023de: PUSH2 0x23e6
000023e1: DUP5
000023e2: PUSH2 0x3670
000023e5: JUMP
000023e6: JUMPDEST
000023e7: PUSH2 0x364b
000023ea: JUMP
000023eb: JUMPDEST
000023ec: SWAP1
000023ed: POP
000023ee: DUP1
000023ef: DUP4
000023f0: DUP3
000023f1: MSTORE
000023f2: PUSH1 0x20
000023f4: DUP3
000023f5: ADD
000023f6: SWAP1
000023f7: POP
000023f8: DUP3
000023f9: DUP6
000023fa: PUSH1 0x20
000023fc: DUP7
000023fd: MUL
000023fe: DUP3
000023ff: ADD
00002400: GT
00002401: ISZERO
00002402: PUSH2 0x240e
00002405: JUMPI
00002406: PUSH2 0x240d
00002409: PUSH2 0x3c2e
0000240c: JUMP
0000240d: JUMPDEST
0000240e: JUMPDEST
0000240f: PUSH1 0x00
00002411: JUMPDEST
00002412: DUP6
00002413: DUP2
00002414: LT
00002415: ISZERO
00002416: PUSH2 0x243e
00002419: JUMPI
0000241a: DUP2
0000241b: PUSH2 0x2424
0000241e: DUP9
0000241f: DUP3
00002420: PUSH2 0x24b8
00002423: JUMP
00002424: JUMPDEST
00002425: DUP5
00002426: MSTORE
00002427: PUSH1 0x20
00002429: DUP5
0000242a: ADD
0000242b: SWAP4
0000242c: POP
0000242d: PUSH1 0x20
0000242f: DUP4
00002430: ADD
00002431: SWAP3
00002432: POP
00002433: POP
00002434: PUSH1 0x01
00002436: DUP2
00002437: ADD
00002438: SWAP1
00002439: POP
0000243a: PUSH2 0x2411
0000243d: JUMP
0000243e: JUMPDEST
0000243f: POP
00002440: POP
00002441: POP
00002442: SWAP4
00002443: SWAP3
00002444: POP
00002445: POP
00002446: POP
00002447: JUMP
00002448: JUMPDEST
00002449: PUSH1 0x00
0000244b: PUSH2 0x245b
0000244e: PUSH2 0x2456
00002451: DUP5
00002452: PUSH2 0x369c
00002455: JUMP
00002456: JUMPDEST
00002457: PUSH2 0x364b
0000245a: JUMP
0000245b: JUMPDEST
0000245c: SWAP1
0000245d: POP
0000245e: DUP1
0000245f: DUP4
00002460: DUP3
00002461: MSTORE
00002462: PUSH1 0x20
00002464: DUP3
00002465: ADD
00002466: SWAP1
00002467: POP
00002468: DUP3
00002469: DUP6
0000246a: PUSH1 0x20
0000246c: DUP7
0000246d: MUL
0000246e: DUP3
0000246f: ADD
00002470: GT
00002471: ISZERO
00002472: PUSH2 0x247e
00002475: JUMPI
00002476: PUSH2 0x247d
00002479: PUSH2 0x3c2e
0000247c: JUMP
0000247d: JUMPDEST
0000247e: JUMPDEST
0000247f: PUSH1 0x00
00002481: JUMPDEST
00002482: DUP6
00002483: DUP2
00002484: LT
00002485: ISZERO
00002486: PUSH2 0x24ae
00002489: JUMPI
0000248a: DUP2
0000248b: PUSH2 0x2494
0000248e: DUP9
0000248f: DUP3
00002490: PUSH2 0x2568
00002493: JUMP
00002494: JUMPDEST
00002495: DUP5
00002496: MSTORE
00002497: PUSH1 0x20
00002499: DUP5
0000249a: ADD
0000249b: SWAP4
0000249c: POP
0000249d: PUSH1 0x20
0000249f: DUP4
000024a0: ADD
000024a1: SWAP3
000024a2: POP
000024a3: POP
000024a4: PUSH1 0x01
000024a6: DUP2
000024a7: ADD
000024a8: SWAP1
000024a9: POP
000024aa: PUSH2 0x2481
000024ad: JUMP
000024ae: JUMPDEST
000024af: POP
000024b0: POP
000024b1: POP
000024b2: SWAP4
000024b3: SWAP3
000024b4: POP
000024b5: POP
000024b6: POP
000024b7: JUMP
000024b8: JUMPDEST
000024b9: PUSH1 0x00
000024bb: DUP2
000024bc: CALLDATALOAD
000024bd: SWAP1
000024be: POP
000024bf: PUSH2 0x24c7
000024c2: DUP2
000024c3: PUSH2 0x4173
000024c6: JUMP
000024c7: JUMPDEST
000024c8: SWAP3
000024c9: SWAP2
000024ca: POP
000024cb: POP
000024cc: JUMP
000024cd: JUMPDEST
000024ce: PUSH1 0x00
000024d0: DUP2
000024d1: CALLDATALOAD
000024d2: SWAP1
000024d3: POP
000024d4: PUSH2 0x24dc
000024d7: DUP2
000024d8: PUSH2 0x418a
000024db: JUMP
000024dc: JUMPDEST
000024dd: SWAP3
000024de: SWAP2
000024df: POP
000024e0: POP
000024e1: JUMP
000024e2: JUMPDEST
000024e3: PUSH1 0x00
000024e5: DUP3
000024e6: PUSH1 0x1f
000024e8: DUP4
000024e9: ADD
000024ea: SLT
000024eb: PUSH2 0x24f7
000024ee: JUMPI
000024ef: PUSH2 0x24f6
000024f2: PUSH2 0x3c1f
000024f5: JUMP
000024f6: JUMPDEST
000024f7: JUMPDEST
000024f8: DUP2
000024f9: CALLDATALOAD
000024fa: PUSH2 0x2507
000024fd: DUP5
000024fe: DUP3
000024ff: PUSH1 0x20
00002501: DUP7
00002502: ADD
00002503: PUSH2 0x23d8
00002506: JUMP
00002507: JUMPDEST
00002508: SWAP2
00002509: POP
0000250a: POP
0000250b: SWAP3
0000250c: SWAP2
0000250d: POP
0000250e: POP
0000250f: JUMP
00002510: JUMPDEST
00002511: PUSH1 0x00
00002513: DUP3
00002514: PUSH1 0x1f
00002516: DUP4
00002517: ADD
00002518: SLT
00002519: PUSH2 0x2525
0000251c: JUMPI
0000251d: PUSH2 0x2524
00002520: PUSH2 0x3c1f
00002523: JUMP
00002524: JUMPDEST
00002525: JUMPDEST
00002526: DUP2
00002527: CALLDATALOAD
00002528: PUSH2 0x2535
0000252b: DUP5
0000252c: DUP3
0000252d: PUSH1 0x20
0000252f: DUP7
00002530: ADD
00002531: PUSH2 0x2448
00002534: JUMP
00002535: JUMPDEST
00002536: SWAP2
00002537: POP
00002538: POP
00002539: SWAP3
0000253a: SWAP2
0000253b: POP
0000253c: POP
0000253d: JUMP
0000253e: JUMPDEST
0000253f: PUSH1 0x00
00002541: DUP2
00002542: MLOAD
00002543: SWAP1
00002544: POP
00002545: PUSH2 0x254d
00002548: DUP2
00002549: PUSH2 0x41a1
0000254c: JUMP
0000254d: JUMPDEST
0000254e: SWAP3
0000254f: SWAP2
00002550: POP
00002551: POP
00002552: JUMP
00002553: JUMPDEST
00002554: PUSH1 0x00
00002556: DUP2
00002557: CALLDATALOAD
00002558: SWAP1
00002559: POP
0000255a: PUSH2 0x2562
0000255d: DUP2
0000255e: PUSH2 0x41b8
00002561: JUMP
00002562: JUMPDEST
00002563: SWAP3
00002564: SWAP2
00002565: POP
00002566: POP
00002567: JUMP
00002568: JUMPDEST
00002569: PUSH1 0x00
0000256b: DUP2
0000256c: CALLDATALOAD
0000256d: SWAP1
0000256e: POP
0000256f: PUSH2 0x2577
00002572: DUP2
00002573: PUSH2 0x41cf
00002576: JUMP
00002577: JUMPDEST
00002578: SWAP3
00002579: SWAP2
0000257a: POP
0000257b: POP
0000257c: JUMP
0000257d: JUMPDEST
0000257e: PUSH1 0x00
00002580: DUP2
00002581: MLOAD
00002582: SWAP1
00002583: POP
00002584: PUSH2 0x258c
00002587: DUP2
00002588: PUSH2 0x41cf
0000258b: JUMP
0000258c: JUMPDEST
0000258d: SWAP3
0000258e: SWAP2
0000258f: POP
00002590: POP
00002591: JUMP
00002592: JUMPDEST
00002593: PUSH1 0x00
00002595: DUP1
00002596: DUP4
00002597: PUSH1 0x1f
00002599: DUP5
0000259a: ADD
0000259b: SLT
0000259c: PUSH2 0x25a8
0000259f: JUMPI
000025a0: PUSH2 0x25a7
000025a3: PUSH2 0x3c1f
000025a6: JUMP
000025a7: JUMPDEST
000025a8: JUMPDEST
000025a9: DUP3
000025aa: CALLDATALOAD
000025ab: SWAP1
000025ac: POP
000025ad: PUSH8 0xffffffffffffffff
000025b6: DUP2
000025b7: GT
000025b8: ISZERO
000025b9: PUSH2 0x25c5
000025bc: JUMPI
000025bd: PUSH2 0x25c4
000025c0: PUSH2 0x3c1a
000025c3: JUMP
000025c4: JUMPDEST
000025c5: JUMPDEST
000025c6: PUSH1 0x20
000025c8: DUP4
000025c9: ADD
000025ca: SWAP2
000025cb: POP
000025cc: DUP4
000025cd: PUSH1 0x01
000025cf: DUP3
000025d0: MUL
000025d1: DUP4
000025d2: ADD
000025d3: GT
000025d4: ISZERO
000025d5: PUSH2 0x25e1
000025d8: JUMPI
000025d9: PUSH2 0x25e0
000025dc: PUSH2 0x3c2e
000025df: JUMP
000025e0: JUMPDEST
000025e1: JUMPDEST
000025e2: SWAP3
000025e3: POP
000025e4: SWAP3
000025e5: SWAP1
000025e6: POP
000025e7: JUMP
000025e8: JUMPDEST
000025e9: PUSH1 0x00
000025eb: DUP2
000025ec: CALLDATALOAD
000025ed: SWAP1
000025ee: POP
000025ef: PUSH2 0x25f7
000025f2: DUP2
000025f3: PUSH2 0x41e6
000025f6: JUMP
000025f7: JUMPDEST
000025f8: SWAP3
000025f9: SWAP2
000025fa: POP
000025fb: POP
000025fc: JUMP
000025fd: JUMPDEST
000025fe: PUSH1 0x00
00002600: DUP2
00002601: CALLDATALOAD
00002602: SWAP1
00002603: POP
00002604: PUSH2 0x260c
00002607: DUP2
00002608: PUSH2 0x41fd
0000260b: JUMP
0000260c: JUMPDEST
0000260d: SWAP3
0000260e: SWAP2
0000260f: POP
00002610: POP
00002611: JUMP
00002612: JUMPDEST
00002613: PUSH1 0x00
00002615: DUP2
00002616: CALLDATALOAD
00002617: SWAP1
00002618: POP
00002619: PUSH2 0x2621
0000261c: DUP2
0000261d: PUSH2 0x4214
00002620: JUMP
00002621: JUMPDEST
00002622: SWAP3
00002623: SWAP2
00002624: POP
00002625: POP
00002626: JUMP
00002627: JUMPDEST
00002628: PUSH1 0x00
0000262a: DUP2
0000262b: CALLDATALOAD
0000262c: SWAP1
0000262d: POP
0000262e: PUSH2 0x2636
00002631: DUP2
00002632: PUSH2 0x422b
00002635: JUMP
00002636: JUMPDEST
00002637: SWAP3
00002638: SWAP2
00002639: POP
0000263a: POP
0000263b: JUMP
0000263c: JUMPDEST
0000263d: PUSH1 0x00
0000263f: PUSH1 0x20
00002641: DUP3
00002642: DUP5
00002643: SUB
00002644: SLT
00002645: ISZERO
00002646: PUSH2 0x2652
00002649: JUMPI
0000264a: PUSH2 0x2651
0000264d: PUSH2 0x3c38
00002650: JUMP
00002651: JUMPDEST
00002652: JUMPDEST
00002653: PUSH1 0x00
00002655: PUSH2 0x2660
00002658: DUP5
00002659: DUP3
0000265a: DUP6
0000265b: ADD
0000265c: PUSH2 0x253e
0000265f: JUMP
00002660: JUMPDEST
00002661: SWAP2
00002662: POP
00002663: POP
00002664: SWAP3
00002665: SWAP2
00002666: POP
00002667: POP
00002668: JUMP
00002669: JUMPDEST
0000266a: PUSH1 0x00
0000266c: PUSH1 0x20
0000266e: DUP3
0000266f: DUP5
00002670: SUB
00002671: SLT
00002672: ISZERO
00002673: PUSH2 0x267f
00002676: JUMPI
00002677: PUSH2 0x267e
0000267a: PUSH2 0x3c38
0000267d: JUMP
0000267e: JUMPDEST
0000267f: JUMPDEST
00002680: PUSH1 0x00
00002682: PUSH2 0x268d
00002685: DUP5
00002686: DUP3
00002687: DUP6
00002688: ADD
00002689: PUSH2 0x2553
0000268c: JUMP
0000268d: JUMPDEST
0000268e: SWAP2
0000268f: POP
00002690: POP
00002691: SWAP3
00002692: SWAP2
00002693: POP
00002694: POP
00002695: JUMP
00002696: JUMPDEST
00002697: PUSH1 0x00
00002699: PUSH1 0x20
0000269b: DUP3
0000269c: DUP5
0000269d: SUB
0000269e: SLT
0000269f: ISZERO
000026a0: PUSH2 0x26ac
000026a3: JUMPI
000026a4: PUSH2 0x26ab
000026a7: PUSH2 0x3c38
000026aa: JUMP
000026ab: JUMPDEST
000026ac: JUMPDEST
000026ad: PUSH1 0x00
000026af: PUSH2 0x26ba
000026b2: DUP5
000026b3: DUP3
000026b4: DUP6
000026b5: ADD
000026b6: PUSH2 0x257d
000026b9: JUMP
000026ba: JUMPDEST
000026bb: SWAP2
000026bc: POP
000026bd: POP
000026be: SWAP3
000026bf: SWAP2
000026c0: POP
000026c1: POP
000026c2: JUMP
000026c3: JUMPDEST
000026c4: PUSH1 0x00
000026c6: DUP1
000026c7: PUSH1 0x00
000026c9: PUSH1 0x40
000026cb: DUP5
000026cc: DUP7
000026cd: SUB
000026ce: SLT
000026cf: ISZERO
000026d0: PUSH2 0x26dc
000026d3: JUMPI
000026d4: PUSH2 0x26db
000026d7: PUSH2 0x3c38
000026da: JUMP
000026db: JUMPDEST
000026dc: JUMPDEST
000026dd: PUSH1 0x00
000026df: DUP5
000026e0: ADD
000026e1: CALLDATALOAD
000026e2: PUSH8 0xffffffffffffffff
000026eb: DUP2
000026ec: GT
000026ed: ISZERO
000026ee: PUSH2 0x26fa
000026f1: JUMPI
000026f2: PUSH2 0x26f9
000026f5: PUSH2 0x3c33
000026f8: JUMP
000026f9: JUMPDEST
000026fa: JUMPDEST
000026fb: PUSH2 0x2706
000026fe: DUP7
000026ff: DUP3
00002700: DUP8
00002701: ADD
00002702: PUSH2 0x2592
00002705: JUMP
00002706: JUMPDEST
00002707: SWAP4
00002708: POP
00002709: SWAP4
0000270a: POP
0000270b: POP
0000270c: PUSH1 0x20
0000270e: PUSH2 0x2719
00002711: DUP7
00002712: DUP3
00002713: DUP8
00002714: ADD
00002715: PUSH2 0x24b8
00002718: JUMP
00002719: JUMPDEST
0000271a: SWAP2
0000271b: POP
0000271c: POP
0000271d: SWAP3
0000271e: POP
0000271f: SWAP3
00002720: POP
00002721: SWAP3
00002722: JUMP
00002723: JUMPDEST
00002724: PUSH1 0x00
00002726: PUSH1 0x20
00002728: DUP3
00002729: DUP5
0000272a: SUB
0000272b: SLT
0000272c: ISZERO
0000272d: PUSH2 0x2739
00002730: JUMPI
00002731: PUSH2 0x2738
00002734: PUSH2 0x3c38
00002737: JUMP
00002738: JUMPDEST
00002739: JUMPDEST
0000273a: PUSH1 0x00
0000273c: PUSH2 0x2747
0000273f: DUP5
00002740: DUP3
00002741: DUP6
00002742: ADD
00002743: PUSH2 0x25fd
00002746: JUMP
00002747: JUMPDEST
00002748: SWAP2
00002749: POP
0000274a: POP
0000274b: SWAP3
0000274c: SWAP2
0000274d: POP
0000274e: POP
0000274f: JUMP
00002750: JUMPDEST
00002751: PUSH1 0x00
00002753: DUP1
00002754: PUSH1 0x00
00002756: DUP1
00002757: PUSH1 0x00
00002759: PUSH1 0xa0
0000275b: DUP7
0000275c: DUP9
0000275d: SUB
0000275e: SLT
0000275f: ISZERO
00002760: PUSH2 0x276c
00002763: JUMPI
00002764: PUSH2 0x276b
00002767: PUSH2 0x3c38
0000276a: JUMP
0000276b: JUMPDEST
0000276c: JUMPDEST
0000276d: PUSH1 0x00
0000276f: PUSH2 0x277a
00002772: DUP9
00002773: DUP3
00002774: DUP10
00002775: ADD
00002776: PUSH2 0x25fd
00002779: JUMP
0000277a: JUMPDEST
0000277b: SWAP6
0000277c: POP
0000277d: POP
0000277e: PUSH1 0x20
00002780: PUSH2 0x278b
00002783: DUP9
00002784: DUP3
00002785: DUP10
00002786: ADD
00002787: PUSH2 0x25fd
0000278a: JUMP
0000278b: JUMPDEST
0000278c: SWAP5
0000278d: POP
0000278e: POP
0000278f: PUSH1 0x40
00002791: PUSH2 0x279c
00002794: DUP9
00002795: DUP3
00002796: DUP10
00002797: ADD
00002798: PUSH2 0x25fd
0000279b: JUMP
0000279c: JUMPDEST
0000279d: SWAP4
0000279e: POP
0000279f: POP
000027a0: PUSH1 0x60
000027a2: DUP7
000027a3: ADD
000027a4: CALLDATALOAD
000027a5: PUSH8 0xffffffffffffffff
000027ae: DUP2
000027af: GT
000027b0: ISZERO
000027b1: PUSH2 0x27bd
000027b4: JUMPI
000027b5: PUSH2 0x27bc
000027b8: PUSH2 0x3c33
000027bb: JUMP
000027bc: JUMPDEST
000027bd: JUMPDEST
000027be: PUSH2 0x27c9
000027c1: DUP9
000027c2: DUP3
000027c3: DUP10
000027c4: ADD
000027c5: PUSH2 0x24e2
000027c8: JUMP
000027c9: JUMPDEST
000027ca: SWAP3
000027cb: POP
000027cc: POP
000027cd: PUSH1 0x80
000027cf: PUSH2 0x27da
000027d2: DUP9
000027d3: DUP3
000027d4: DUP10
000027d5: ADD
000027d6: PUSH2 0x25e8
000027d9: JUMP
000027da: JUMPDEST
000027db: SWAP2
000027dc: POP
000027dd: POP
000027de: SWAP3
000027df: SWAP6
000027e0: POP
000027e1: SWAP3
000027e2: SWAP6
000027e3: SWAP1
000027e4: SWAP4
000027e5: POP
000027e6: JUMP
000027e7: JUMPDEST
000027e8: PUSH1 0x00
000027ea: PUSH1 0x20
000027ec: DUP3
000027ed: DUP5
000027ee: SUB
000027ef: SLT
000027f0: ISZERO
000027f1: PUSH2 0x27fd
000027f4: JUMPI
000027f5: PUSH2 0x27fc
000027f8: PUSH2 0x3c38
000027fb: JUMP
000027fc: JUMPDEST
000027fd: JUMPDEST
000027fe: PUSH1 0x00
00002800: PUSH2 0x280b
00002803: DUP5
00002804: DUP3
00002805: DUP6
00002806: ADD
00002807: PUSH2 0x2627
0000280a: JUMP
0000280b: JUMPDEST
0000280c: SWAP2
0000280d: POP
0000280e: POP
0000280f: SWAP3
00002810: SWAP2
00002811: POP
00002812: POP
00002813: JUMP
00002814: JUMPDEST
00002815: PUSH1 0x00
00002817: DUP1
00002818: PUSH1 0x00
0000281a: DUP1
0000281b: PUSH1 0x00
0000281d: DUP1
0000281e: PUSH1 0xa0
00002820: DUP8
00002821: DUP10
00002822: SUB
00002823: SLT
00002824: ISZERO
00002825: PUSH2 0x2831
00002828: JUMPI
00002829: PUSH2 0x2830
0000282c: PUSH2 0x3c38
0000282f: JUMP
00002830: JUMPDEST
00002831: JUMPDEST
00002832: PUSH1 0x00
00002834: PUSH2 0x283f
00002837: DUP10
00002838: DUP3
00002839: DUP11
0000283a: ADD
0000283b: PUSH2 0x2627
0000283e: JUMP
0000283f: JUMPDEST
00002840: SWAP7
00002841: POP
00002842: POP
00002843: PUSH1 0x20
00002845: PUSH2 0x2850
00002848: DUP10
00002849: DUP3
0000284a: DUP11
0000284b: ADD
0000284c: PUSH2 0x24cd
0000284f: JUMP
00002850: JUMPDEST
00002851: SWAP6
00002852: POP
00002853: POP
00002854: PUSH1 0x40
00002856: PUSH2 0x2861
00002859: DUP10
0000285a: DUP3
0000285b: DUP11
0000285c: ADD
0000285d: PUSH2 0x25fd
00002860: JUMP
00002861: JUMPDEST
00002862: SWAP5
00002863: POP
00002864: POP
00002865: PUSH1 0x60
00002867: PUSH2 0x2872
0000286a: DUP10
0000286b: DUP3
0000286c: DUP11
0000286d: ADD
0000286e: PUSH2 0x2612
00002871: JUMP
00002872: JUMPDEST
00002873: SWAP4
00002874: POP
00002875: POP
00002876: PUSH1 0x80
00002878: DUP8
00002879: ADD
0000287a: CALLDATALOAD
0000287b: PUSH8 0xffffffffffffffff
00002884: DUP2
00002885: GT
00002886: ISZERO
00002887: PUSH2 0x2893
0000288a: JUMPI
0000288b: PUSH2 0x2892
0000288e: PUSH2 0x3c33
00002891: JUMP
00002892: JUMPDEST
00002893: JUMPDEST
00002894: PUSH2 0x289f
00002897: DUP10
00002898: DUP3
00002899: DUP11
0000289a: ADD
0000289b: PUSH2 0x2592
0000289e: JUMP
0000289f: JUMPDEST
000028a0: SWAP3
000028a1: POP
000028a2: SWAP3
000028a3: POP
000028a4: POP
000028a5: SWAP3
000028a6: SWAP6
000028a7: POP
000028a8: SWAP3
000028a9: SWAP6
000028aa: POP
000028ab: SWAP3
000028ac: SWAP6
000028ad: JUMP
000028ae: JUMPDEST
000028af: PUSH1 0x00
000028b1: DUP1
000028b2: PUSH1 0x00
000028b4: DUP1
000028b5: PUSH1 0x00
000028b7: PUSH1 0xa0
000028b9: DUP7
000028ba: DUP9
000028bb: SUB
000028bc: SLT
000028bd: ISZERO
000028be: PUSH2 0x28ca
000028c1: JUMPI
000028c2: PUSH2 0x28c9
000028c5: PUSH2 0x3c38
000028c8: JUMP
000028c9: JUMPDEST
000028ca: JUMPDEST
000028cb: PUSH1 0x00
000028cd: PUSH2 0x28d8
000028d0: DUP9
000028d1: DUP3
000028d2: DUP10
000028d3: ADD
000028d4: PUSH2 0x2627
000028d7: JUMP
000028d8: JUMPDEST
000028d9: SWAP6
000028da: POP
000028db: POP
000028dc: PUSH1 0x20
000028de: PUSH2 0x28e9
000028e1: DUP9
000028e2: DUP3
000028e3: DUP10
000028e4: ADD
000028e5: PUSH2 0x24cd
000028e8: JUMP
000028e9: JUMPDEST
000028ea: SWAP5
000028eb: POP
000028ec: POP
000028ed: PUSH1 0x40
000028ef: PUSH2 0x28fa
000028f2: DUP9
000028f3: DUP3
000028f4: DUP10
000028f5: ADD
000028f6: PUSH2 0x25fd
000028f9: JUMP
000028fa: JUMPDEST
000028fb: SWAP4
000028fc: POP
000028fd: POP
000028fe: PUSH1 0x60
00002900: PUSH2 0x290b
00002903: DUP9
00002904: DUP3
00002905: DUP10
00002906: ADD
00002907: PUSH2 0x2627
0000290a: JUMP
0000290b: JUMPDEST
0000290c: SWAP3
0000290d: POP
0000290e: POP
0000290f: PUSH1 0x80
00002911: DUP7
00002912: ADD
00002913: CALLDATALOAD
00002914: PUSH8 0xffffffffffffffff
0000291d: DUP2
0000291e: GT
0000291f: ISZERO
00002920: PUSH2 0x292c
00002923: JUMPI
00002924: PUSH2 0x292b
00002927: PUSH2 0x3c33
0000292a: JUMP
0000292b: JUMPDEST
0000292c: JUMPDEST
0000292d: PUSH2 0x2938
00002930: DUP9
00002931: DUP3
00002932: DUP10
00002933: ADD
00002934: PUSH2 0x2510
00002937: JUMP
00002938: JUMPDEST
00002939: SWAP2
0000293a: POP
0000293b: POP
0000293c: SWAP3
0000293d: SWAP6
0000293e: POP
0000293f: SWAP3
00002940: SWAP6
00002941: SWAP1
00002942: SWAP4
00002943: POP
00002944: JUMP
00002945: JUMPDEST
00002946: PUSH1 0x00
00002948: DUP1
00002949: PUSH1 0x00
0000294b: DUP1
0000294c: PUSH1 0x00
0000294e: DUP1
0000294f: PUSH1 0x80
00002951: DUP8
00002952: DUP10
00002953: SUB
00002954: SLT
00002955: ISZERO
00002956: PUSH2 0x2962
00002959: JUMPI
0000295a: PUSH2 0x2961
0000295d: PUSH2 0x3c38
00002960: JUMP
00002961: JUMPDEST
00002962: JUMPDEST
00002963: PUSH1 0x00
00002965: PUSH2 0x2970
00002968: DUP10
00002969: DUP3
0000296a: DUP11
0000296b: ADD
0000296c: PUSH2 0x2627
0000296f: JUMP
00002970: JUMPDEST
00002971: SWAP7
00002972: POP
00002973: POP
00002974: PUSH1 0x20
00002976: DUP8
00002977: ADD
00002978: CALLDATALOAD
00002979: PUSH8 0xffffffffffffffff
00002982: DUP2
00002983: GT
00002984: ISZERO
00002985: PUSH2 0x2991
00002988: JUMPI
00002989: PUSH2 0x2990
0000298c: PUSH2 0x3c33
0000298f: JUMP
00002990: JUMPDEST
00002991: JUMPDEST
00002992: PUSH2 0x299d
00002995: DUP10
00002996: DUP3
00002997: DUP11
00002998: ADD
00002999: PUSH2 0x2592
0000299c: JUMP
0000299d: JUMPDEST
0000299e: SWAP6
0000299f: POP
000029a0: SWAP6
000029a1: POP
000029a2: POP
000029a3: PUSH1 0x40
000029a5: PUSH2 0x29b0
000029a8: DUP10
000029a9: DUP3
000029aa: DUP11
000029ab: ADD
000029ac: PUSH2 0x2568
000029af: JUMP
000029b0: JUMPDEST
000029b1: SWAP4
000029b2: POP
000029b3: POP
000029b4: PUSH1 0x60
000029b6: DUP8
000029b7: ADD
000029b8: CALLDATALOAD
000029b9: PUSH8 0xffffffffffffffff
000029c2: DUP2
000029c3: GT
000029c4: ISZERO
000029c5: PUSH2 0x29d1
000029c8: JUMPI
000029c9: PUSH2 0x29d0
000029cc: PUSH2 0x3c33
000029cf: JUMP
000029d0: JUMPDEST
000029d1: JUMPDEST
000029d2: PUSH2 0x29dd
000029d5: DUP10
000029d6: DUP3
000029d7: DUP11
000029d8: ADD
000029d9: PUSH2 0x2592
000029dc: JUMP
000029dd: JUMPDEST
000029de: SWAP3
000029df: POP
000029e0: SWAP3
000029e1: POP
000029e2: POP
000029e3: SWAP3
000029e4: SWAP6
000029e5: POP
000029e6: SWAP3
000029e7: SWAP6
000029e8: POP
000029e9: SWAP3
000029ea: SWAP6
000029eb: JUMP
000029ec: JUMPDEST
000029ed: PUSH2 0x29f5
000029f0: DUP2
000029f1: PUSH2 0x396c
000029f4: JUMP
000029f5: JUMPDEST
000029f6: DUP3
000029f7: MSTORE
000029f8: POP
000029f9: POP
000029fa: JUMP
000029fb: JUMPDEST
000029fc: PUSH2 0x2a0c
000029ff: PUSH2 0x2a07
00002a02: DUP3
00002a03: PUSH2 0x38ab
00002a06: JUMP
00002a07: JUMPDEST
00002a08: PUSH2 0x3ae5
00002a0b: JUMP
00002a0c: JUMPDEST
00002a0d: DUP3
00002a0e: MSTORE
00002a0f: POP
00002a10: POP
00002a11: JUMP
00002a12: JUMPDEST
00002a13: PUSH2 0x2a1b
00002a16: DUP2
00002a17: PUSH2 0x3899
00002a1a: JUMP
00002a1b: JUMPDEST
00002a1c: DUP3
00002a1d: MSTORE
00002a1e: POP
00002a1f: POP
00002a20: JUMP
00002a21: JUMPDEST
00002a22: PUSH2 0x2a32
00002a25: PUSH2 0x2a2d
00002a28: DUP3
00002a29: PUSH2 0x3899
00002a2c: JUMP
00002a2d: JUMPDEST
00002a2e: PUSH2 0x3ad3
00002a31: JUMP
00002a32: JUMPDEST
00002a33: DUP3
00002a34: MSTORE
00002a35: POP
00002a36: POP
00002a37: JUMP
00002a38: JUMPDEST
00002a39: PUSH2 0x2a41
00002a3c: DUP2
00002a3d: PUSH2 0x38c9
00002a40: JUMP
00002a41: JUMPDEST
00002a42: DUP3
00002a43: MSTORE
00002a44: POP
00002a45: POP
00002a46: JUMP
00002a47: JUMPDEST
00002a48: PUSH2 0x2a50
00002a4b: DUP2
00002a4c: PUSH2 0x38f5
00002a4f: JUMP
00002a50: JUMPDEST
00002a51: DUP3
00002a52: MSTORE
00002a53: POP
00002a54: POP
00002a55: JUMP
00002a56: JUMPDEST
00002a57: PUSH2 0x2a67
00002a5a: PUSH2 0x2a62
00002a5d: DUP3
00002a5e: PUSH2 0x38f5
00002a61: JUMP
00002a62: JUMPDEST
00002a63: PUSH2 0x3af7
00002a66: JUMP
00002a67: JUMPDEST
00002a68: DUP3
00002a69: MSTORE
00002a6a: POP
00002a6b: POP
00002a6c: JUMP
00002a6d: JUMPDEST
00002a6e: PUSH1 0x00
00002a70: PUSH2 0x2a79
00002a73: DUP4
00002a74: DUP6
00002a75: PUSH2 0x36de
00002a78: JUMP
00002a79: JUMPDEST
00002a7a: SWAP4
00002a7b: POP
00002a7c: PUSH2 0x2a86
00002a7f: DUP4
00002a80: DUP6
00002a81: DUP5
00002a82: PUSH2 0x39ea
00002a85: JUMP
00002a86: JUMPDEST
00002a87: PUSH2 0x2a8f
00002a8a: DUP4
00002a8b: PUSH2 0x3c3d
00002a8e: JUMP
00002a8f: JUMPDEST
00002a90: DUP5
00002a91: ADD
00002a92: SWAP1
00002a93: POP
00002a94: SWAP4
00002a95: SWAP3
00002a96: POP
00002a97: POP
00002a98: POP
00002a99: JUMP
00002a9a: JUMPDEST
00002a9b: PUSH1 0x00
00002a9d: PUSH2 0x2aa6
00002aa0: DUP4
00002aa1: DUP6
00002aa2: PUSH2 0x36ef
00002aa5: JUMP
00002aa6: JUMPDEST
00002aa7: SWAP4
00002aa8: POP
00002aa9: PUSH2 0x2ab3
00002aac: DUP4
00002aad: DUP6
00002aae: DUP5
00002aaf: PUSH2 0x39ea
00002ab2: JUMP
00002ab3: JUMPDEST
00002ab4: DUP3
00002ab5: DUP5
00002ab6: ADD
00002ab7: SWAP1
00002ab8: POP
00002ab9: SWAP4
00002aba: SWAP3
00002abb: POP
00002abc: POP
00002abd: POP
00002abe: JUMP
00002abf: JUMPDEST
00002ac0: PUSH1 0x00
00002ac2: PUSH2 0x2aca
00002ac5: DUP3
00002ac6: PUSH2 0x36c8
00002ac9: JUMP
00002aca: JUMPDEST
00002acb: PUSH2 0x2ad4
00002ace: DUP2
00002acf: DUP6
00002ad0: PUSH2 0x36ef
00002ad3: JUMP
00002ad4: JUMPDEST
00002ad5: SWAP4
00002ad6: POP
00002ad7: PUSH2 0x2ae4
00002ada: DUP2
00002adb: DUP6
00002adc: PUSH1 0x20
00002ade: DUP7
00002adf: ADD
00002ae0: PUSH2 0x39f9
00002ae3: JUMP
00002ae4: JUMPDEST
00002ae5: DUP1
00002ae6: DUP5
00002ae7: ADD
00002ae8: SWAP2
00002ae9: POP
00002aea: POP
00002aeb: SWAP3
00002aec: SWAP2
00002aed: POP
00002aee: POP
00002aef: JUMP
00002af0: JUMPDEST
00002af1: PUSH2 0x2af9
00002af4: DUP2
00002af5: PUSH2 0x397e
00002af8: JUMP
00002af9: JUMPDEST
00002afa: DUP3
00002afb: MSTORE
00002afc: POP
00002afd: POP
00002afe: JUMP
00002aff: JUMPDEST
00002b00: PUSH2 0x2b08
00002b03: DUP2
00002b04: PUSH2 0x39a2
00002b07: JUMP
00002b08: JUMPDEST
00002b09: DUP3
00002b0a: MSTORE
00002b0b: POP
00002b0c: POP
00002b0d: JUMP
00002b0e: JUMPDEST
00002b0f: PUSH2 0x2b17
00002b12: DUP2
00002b13: PUSH2 0x39b4
00002b16: JUMP
00002b17: JUMPDEST
00002b18: DUP3
00002b19: MSTORE
00002b1a: POP
00002b1b: POP
00002b1c: JUMP
00002b1d: JUMPDEST
00002b1e: PUSH1 0x00
00002b20: PUSH2 0x2b28
00002b23: DUP3
00002b24: PUSH2 0x36d3
00002b27: JUMP
00002b28: JUMPDEST
00002b29: PUSH2 0x2b32
00002b2c: DUP2
00002b2d: DUP6
00002b2e: PUSH2 0x36fa
00002b31: JUMP
00002b32: JUMPDEST
00002b33: SWAP4
00002b34: POP
00002b35: PUSH2 0x2b42
00002b38: DUP2
00002b39: DUP6
00002b3a: PUSH1 0x20
00002b3c: DUP7
00002b3d: ADD
00002b3e: PUSH2 0x39f9
00002b41: JUMP
00002b42: JUMPDEST
00002b43: PUSH2 0x2b4b
00002b46: DUP2
00002b47: PUSH2 0x3c3d
00002b4a: JUMP
00002b4b: JUMPDEST
00002b4c: DUP5
00002b4d: ADD
00002b4e: SWAP2
00002b4f: POP
00002b50: POP
00002b51: SWAP3
00002b52: SWAP2
00002b53: POP
00002b54: POP
00002b55: JUMP
00002b56: JUMPDEST
00002b57: PUSH1 0x00
00002b59: PUSH2 0x2b63
00002b5c: PUSH1 0x18
00002b5e: DUP4
00002b5f: PUSH2 0x36fa
00002b62: JUMP
00002b63: JUMPDEST
00002b64: SWAP2
00002b65: POP
00002b66: PUSH2 0x2b6e
00002b69: DUP3
00002b6a: PUSH2 0x3c68
00002b6d: JUMP
00002b6e: JUMPDEST
00002b6f: PUSH1 0x20
00002b71: DUP3
00002b72: ADD
00002b73: SWAP1
00002b74: POP
00002b75: SWAP2
00002b76: SWAP1
00002b77: POP
00002b78: JUMP
00002b79: JUMPDEST
00002b7a: PUSH1 0x00
00002b7c: PUSH2 0x2b86
00002b7f: PUSH1 0x1c
00002b81: DUP4
00002b82: PUSH2 0x36fa
00002b85: JUMP
00002b86: JUMPDEST
00002b87: SWAP2
00002b88: POP
00002b89: PUSH2 0x2b91
00002b8c: DUP3
00002b8d: PUSH2 0x3c91
00002b90: JUMP
00002b91: JUMPDEST
00002b92: PUSH1 0x20
00002b94: DUP3
00002b95: ADD
00002b96: SWAP1
00002b97: POP
00002b98: SWAP2
00002b99: SWAP1
00002b9a: POP
00002b9b: JUMP
00002b9c: JUMPDEST
00002b9d: PUSH1 0x00
00002b9f: PUSH2 0x2ba9
00002ba2: PUSH1 0x1f
00002ba4: DUP4
00002ba5: PUSH2 0x36fa
00002ba8: JUMP
00002ba9: JUMPDEST
00002baa: SWAP2
00002bab: POP
00002bac: PUSH2 0x2bb4
00002baf: DUP3
00002bb0: PUSH2 0x3cba
00002bb3: JUMP
00002bb4: JUMPDEST
00002bb5: PUSH1 0x20
00002bb7: DUP3
00002bb8: ADD
00002bb9: SWAP1
00002bba: POP
00002bbb: SWAP2
00002bbc: SWAP1
00002bbd: POP
00002bbe: JUMP
00002bbf: JUMPDEST
00002bc0: PUSH1 0x00
00002bc2: PUSH2 0x2bcc
00002bc5: PUSH1 0x15
00002bc7: DUP4
00002bc8: PUSH2 0x36fa
00002bcb: JUMP
00002bcc: JUMPDEST
00002bcd: SWAP2
00002bce: POP
00002bcf: PUSH2 0x2bd7
00002bd2: DUP3
00002bd3: PUSH2 0x3ce3
00002bd6: JUMP
00002bd7: JUMPDEST
00002bd8: PUSH1 0x20
00002bda: DUP3
00002bdb: ADD
00002bdc: SWAP1
00002bdd: POP
00002bde: SWAP2
00002bdf: SWAP1
00002be0: POP
00002be1: JUMP
00002be2: JUMPDEST
00002be3: PUSH1 0x00
00002be5: PUSH2 0x2bef
00002be8: PUSH1 0x16
00002bea: DUP4
00002beb: PUSH2 0x36fa
00002bee: JUMP
00002bef: JUMPDEST
00002bf0: SWAP2
00002bf1: POP
00002bf2: PUSH2 0x2bfa
00002bf5: DUP3
00002bf6: PUSH2 0x3d0c
00002bf9: JUMP
00002bfa: JUMPDEST
00002bfb: PUSH1 0x20
00002bfd: DUP3
00002bfe: ADD
00002bff: SWAP1
00002c00: POP
00002c01: SWAP2
00002c02: SWAP1
00002c03: POP
00002c04: JUMP
00002c05: JUMPDEST
00002c06: PUSH1 0x00
00002c08: PUSH2 0x2c12
00002c0b: PUSH1 0x13
00002c0d: DUP4
00002c0e: PUSH2 0x36fa
00002c11: JUMP
00002c12: JUMPDEST
00002c13: SWAP2
00002c14: POP
00002c15: PUSH2 0x2c1d
00002c18: DUP3
00002c19: PUSH2 0x3d35
00002c1c: JUMP
00002c1d: JUMPDEST
00002c1e: PUSH1 0x20
00002c20: DUP3
00002c21: ADD
00002c22: SWAP1
00002c23: POP
00002c24: SWAP2
00002c25: SWAP1
00002c26: POP
00002c27: JUMP
00002c28: JUMPDEST
00002c29: PUSH1 0x00
00002c2b: PUSH2 0x2c35
00002c2e: PUSH1 0x19
00002c30: DUP4
00002c31: PUSH2 0x36fa
00002c34: JUMP
00002c35: JUMPDEST
00002c36: SWAP2
00002c37: POP
00002c38: PUSH2 0x2c40
00002c3b: DUP3
00002c3c: PUSH2 0x3d5e
00002c3f: JUMP
00002c40: JUMPDEST
00002c41: PUSH1 0x20
00002c43: DUP3
00002c44: ADD
00002c45: SWAP1
00002c46: POP
00002c47: SWAP2
00002c48: SWAP1
00002c49: POP
00002c4a: JUMP
00002c4b: JUMPDEST
00002c4c: PUSH1 0x00
00002c4e: PUSH2 0x2c58
00002c51: PUSH1 0x11
00002c53: DUP4
00002c54: PUSH2 0x36fa
00002c57: JUMP
00002c58: JUMPDEST
00002c59: SWAP2
00002c5a: POP
00002c5b: PUSH2 0x2c63
00002c5e: DUP3
00002c5f: PUSH2 0x3d87
00002c62: JUMP
00002c63: JUMPDEST
00002c64: PUSH1 0x20
00002c66: DUP3
00002c67: ADD
00002c68: SWAP1
00002c69: POP
00002c6a: SWAP2
00002c6b: SWAP1
00002c6c: POP
00002c6d: JUMP
00002c6e: JUMPDEST
00002c6f: PUSH1 0x00
00002c71: PUSH2 0x2c7b
00002c74: PUSH1 0x1c
00002c76: DUP4
00002c77: PUSH2 0x36fa
00002c7a: JUMP
00002c7b: JUMPDEST
00002c7c: SWAP2
00002c7d: POP
00002c7e: PUSH2 0x2c86
00002c81: DUP3
00002c82: PUSH2 0x3db0
00002c85: JUMP
00002c86: JUMPDEST
00002c87: PUSH1 0x20
00002c89: DUP3
00002c8a: ADD
00002c8b: SWAP1
00002c8c: POP
00002c8d: SWAP2
00002c8e: SWAP1
00002c8f: POP
00002c90: JUMP
00002c91: JUMPDEST
00002c92: PUSH1 0x00
00002c94: PUSH2 0x2c9e
00002c97: PUSH1 0x3a
00002c99: DUP4
00002c9a: PUSH2 0x36fa
00002c9d: JUMP
00002c9e: JUMPDEST
00002c9f: SWAP2
00002ca0: POP
00002ca1: PUSH2 0x2ca9
00002ca4: DUP3
00002ca5: PUSH2 0x3dd9
00002ca8: JUMP
00002ca9: JUMPDEST
00002caa: PUSH1 0x40
00002cac: DUP3
00002cad: ADD
00002cae: SWAP1
00002caf: POP
00002cb0: SWAP2
00002cb1: SWAP1
00002cb2: POP
00002cb3: JUMP
00002cb4: JUMPDEST
00002cb5: PUSH1 0x00
00002cb7: PUSH2 0x2cc1
00002cba: PUSH1 0x22
00002cbc: DUP4
00002cbd: PUSH2 0x36fa
00002cc0: JUMP
00002cc1: JUMPDEST
00002cc2: SWAP2
00002cc3: POP
00002cc4: PUSH2 0x2ccc
00002cc7: DUP3
00002cc8: PUSH2 0x3e28
00002ccb: JUMP
00002ccc: JUMPDEST
00002ccd: PUSH1 0x40
00002ccf: DUP3
00002cd0: ADD
00002cd1: SWAP1
00002cd2: POP
00002cd3: SWAP2
00002cd4: SWAP1
00002cd5: POP
00002cd6: JUMP
00002cd7: JUMPDEST
00002cd8: PUSH1 0x00
00002cda: PUSH2 0x2ce4
00002cdd: PUSH1 0x1d
00002cdf: DUP4
00002ce0: PUSH2 0x36fa
00002ce3: JUMP
00002ce4: JUMPDEST
00002ce5: SWAP2
00002ce6: POP
00002ce7: PUSH2 0x2cef
00002cea: DUP3
00002ceb: PUSH2 0x3e77
00002cee: JUMP
00002cef: JUMPDEST
00002cf0: PUSH1 0x20
00002cf2: DUP3
00002cf3: ADD
00002cf4: SWAP1
00002cf5: POP
00002cf6: SWAP2
00002cf7: SWAP1
00002cf8: POP
00002cf9: JUMP
00002cfa: JUMPDEST
00002cfb: PUSH1 0x00
00002cfd: PUSH2 0x2d07
00002d00: PUSH1 0x1a
00002d02: DUP4
00002d03: PUSH2 0x36fa
00002d06: JUMP
00002d07: JUMPDEST
00002d08: SWAP2
00002d09: POP
00002d0a: PUSH2 0x2d12
00002d0d: DUP3
00002d0e: PUSH2 0x3ea0
00002d11: JUMP
00002d12: JUMPDEST
00002d13: PUSH1 0x20
00002d15: DUP3
00002d16: ADD
00002d17: SWAP1
00002d18: POP
00002d19: SWAP2
00002d1a: SWAP1
00002d1b: POP
00002d1c: JUMP
00002d1d: JUMPDEST
00002d1e: PUSH1 0x00
00002d20: PUSH2 0x2d2a
00002d23: PUSH1 0x29
00002d25: DUP4
00002d26: PUSH2 0x36fa
00002d29: JUMP
00002d2a: JUMPDEST
00002d2b: SWAP2
00002d2c: POP
00002d2d: PUSH2 0x2d35
00002d30: DUP3
00002d31: PUSH2 0x3ec9
00002d34: JUMP
00002d35: JUMPDEST
00002d36: PUSH1 0x40
00002d38: DUP3
00002d39: ADD
00002d3a: SWAP1
00002d3b: POP
00002d3c: SWAP2
00002d3d: SWAP1
00002d3e: POP
00002d3f: JUMP
00002d40: JUMPDEST
00002d41: PUSH1 0x00
00002d43: PUSH2 0x2d4d
00002d46: PUSH1 0x2e
00002d48: DUP4
00002d49: PUSH2 0x36fa
00002d4c: JUMP
00002d4d: JUMPDEST
00002d4e: SWAP2
00002d4f: POP
00002d50: PUSH2 0x2d58
00002d53: DUP3
00002d54: PUSH2 0x3f18
00002d57: JUMP
00002d58: JUMPDEST
00002d59: PUSH1 0x40
00002d5b: DUP3
00002d5c: ADD
00002d5d: SWAP1
00002d5e: POP
00002d5f: SWAP2
00002d60: SWAP1
00002d61: POP
00002d62: JUMP
00002d63: JUMPDEST
00002d64: PUSH1 0x00
00002d66: PUSH2 0x2d70
00002d69: PUSH1 0x22
00002d6b: DUP4
00002d6c: PUSH2 0x36fa
00002d6f: JUMP
00002d70: JUMPDEST
00002d71: SWAP2
00002d72: POP
00002d73: PUSH2 0x2d7b
00002d76: DUP3
00002d77: PUSH2 0x3f67
00002d7a: JUMP
00002d7b: JUMPDEST
00002d7c: PUSH1 0x40
00002d7e: DUP3
00002d7f: ADD
00002d80: SWAP1
00002d81: POP
00002d82: SWAP2
00002d83: SWAP1
00002d84: POP
00002d85: JUMP
00002d86: JUMPDEST
00002d87: PUSH1 0x00
00002d89: PUSH2 0x2d93
00002d8c: PUSH1 0x2e
00002d8e: DUP4
00002d8f: PUSH2 0x36fa
00002d92: JUMP
00002d93: JUMPDEST
00002d94: SWAP2
00002d95: POP
00002d96: PUSH2 0x2d9e
00002d99: DUP3
00002d9a: PUSH2 0x3fb6
00002d9d: JUMP
00002d9e: JUMPDEST
00002d9f: PUSH1 0x40
00002da1: DUP3
00002da2: ADD
00002da3: SWAP1
00002da4: POP
00002da5: SWAP2
00002da6: SWAP1
00002da7: POP
00002da8: JUMP
00002da9: JUMPDEST
00002daa: PUSH1 0x00
00002dac: PUSH2 0x2db6
00002daf: PUSH1 0x16
00002db1: DUP4
00002db2: PUSH2 0x36fa
00002db5: JUMP
00002db6: JUMPDEST
00002db7: SWAP2
00002db8: POP
00002db9: PUSH2 0x2dc1
00002dbc: DUP3
00002dbd: PUSH2 0x4005
00002dc0: JUMP
00002dc1: JUMPDEST
00002dc2: PUSH1 0x20
00002dc4: DUP3
00002dc5: ADD
00002dc6: SWAP1
00002dc7: POP
00002dc8: SWAP2
00002dc9: SWAP1
00002dca: POP
00002dcb: JUMP
00002dcc: JUMPDEST
00002dcd: PUSH1 0x00
00002dcf: PUSH2 0x2dd9
00002dd2: PUSH1 0x1f
00002dd4: DUP4
00002dd5: PUSH2 0x36fa
00002dd8: JUMP
00002dd9: JUMPDEST
00002dda: SWAP2
00002ddb: POP
00002ddc: PUSH2 0x2de4
00002ddf: DUP3
00002de0: PUSH2 0x402e
00002de3: JUMP
00002de4: JUMPDEST
00002de5: PUSH1 0x20
00002de7: DUP3
00002de8: ADD
00002de9: SWAP1
00002dea: POP
00002deb: SWAP2
00002dec: SWAP1
00002ded: POP
00002dee: JUMP
00002def: JUMPDEST
00002df0: PUSH1 0x00
00002df2: PUSH2 0x2dfc
00002df5: PUSH1 0x2d
00002df7: DUP4
00002df8: PUSH2 0x36fa
00002dfb: JUMP
00002dfc: JUMPDEST
00002dfd: SWAP2
00002dfe: POP
00002dff: PUSH2 0x2e07
00002e02: DUP3
00002e03: PUSH2 0x4057
00002e06: JUMP
00002e07: JUMPDEST
00002e08: PUSH1 0x40
00002e0a: DUP3
00002e0b: ADD
00002e0c: SWAP1
00002e0d: POP
00002e0e: SWAP2
00002e0f: SWAP1
00002e10: POP
00002e11: JUMP
00002e12: JUMPDEST
00002e13: PUSH1 0x00
00002e15: PUSH2 0x2e1f
00002e18: PUSH1 0x1c
00002e1a: DUP4
00002e1b: PUSH2 0x36fa
00002e1e: JUMP
00002e1f: JUMPDEST
00002e20: SWAP2
00002e21: POP
00002e22: PUSH2 0x2e2a
00002e25: DUP3
00002e26: PUSH2 0x40a6
00002e29: JUMP
00002e2a: JUMPDEST
00002e2b: PUSH1 0x20
00002e2d: DUP3
00002e2e: ADD
00002e2f: SWAP1
00002e30: POP
00002e31: SWAP2
00002e32: SWAP1
00002e33: POP
00002e34: JUMP
00002e35: JUMPDEST
00002e36: PUSH1 0x00
00002e38: PUSH2 0x2e42
00002e3b: PUSH1 0x26
00002e3d: DUP4
00002e3e: PUSH2 0x36fa
00002e41: JUMP
00002e42: JUMPDEST
00002e43: SWAP2
00002e44: POP
00002e45: PUSH2 0x2e4d
00002e48: DUP3
00002e49: PUSH2 0x40cf
00002e4c: JUMP
00002e4d: JUMPDEST
00002e4e: PUSH1 0x40
00002e50: DUP3
00002e51: ADD
00002e52: SWAP1
00002e53: POP
00002e54: SWAP2
00002e55: SWAP1
00002e56: POP
00002e57: JUMP
00002e58: JUMPDEST
00002e59: PUSH1 0x00
00002e5b: PUSH2 0x2e65
00002e5e: PUSH1 0x00
00002e60: DUP4
00002e61: PUSH2 0x36ef
00002e64: JUMP
00002e65: JUMPDEST
00002e66: SWAP2
00002e67: POP
00002e68: PUSH2 0x2e70
00002e6b: DUP3
00002e6c: PUSH2 0x411e
00002e6f: JUMP
00002e70: JUMPDEST
00002e71: PUSH1 0x00
00002e73: DUP3
00002e74: ADD
00002e75: SWAP1
00002e76: POP
00002e77: SWAP2
00002e78: SWAP1
00002e79: POP
00002e7a: JUMP
00002e7b: JUMPDEST
00002e7c: PUSH1 0x00
00002e7e: PUSH2 0x2e88
00002e81: PUSH1 0x20
00002e83: DUP4
00002e84: PUSH2 0x36fa
00002e87: JUMP
00002e88: JUMPDEST
00002e89: SWAP2
00002e8a: POP
00002e8b: PUSH2 0x2e93
00002e8e: DUP3
00002e8f: PUSH2 0x4121
00002e92: JUMP
00002e93: JUMPDEST
00002e94: PUSH1 0x20
00002e96: DUP3
00002e97: ADD
00002e98: SWAP1
00002e99: POP
00002e9a: SWAP2
00002e9b: SWAP1
00002e9c: POP
00002e9d: JUMP
00002e9e: JUMPDEST
00002e9f: PUSH1 0x00
00002ea1: PUSH2 0x2eab
00002ea4: PUSH1 0x0a
00002ea6: DUP4
00002ea7: PUSH2 0x36fa
00002eaa: JUMP
00002eab: JUMPDEST
00002eac: SWAP2
00002ead: POP
00002eae: PUSH2 0x2eb6
00002eb1: DUP3
00002eb2: PUSH2 0x414a
00002eb5: JUMP
00002eb6: JUMPDEST
00002eb7: PUSH1 0x20
00002eb9: DUP3
00002eba: ADD
00002ebb: SWAP1
00002ebc: POP
00002ebd: SWAP2
00002ebe: SWAP1
00002ebf: POP
00002ec0: JUMP
00002ec1: JUMPDEST
00002ec2: PUSH2 0x2eca
00002ec5: DUP2
00002ec6: PUSH2 0x3931
00002ec9: JUMP
00002eca: JUMPDEST
00002ecb: DUP3
00002ecc: MSTORE
00002ecd: POP
00002ece: POP
00002ecf: JUMP
00002ed0: JUMPDEST
00002ed1: PUSH2 0x2ee1
00002ed4: PUSH2 0x2edc
00002ed7: DUP3
00002ed8: PUSH2 0x3931
00002edb: JUMP
00002edc: JUMPDEST
00002edd: PUSH2 0x3b13
00002ee0: JUMP
00002ee1: JUMPDEST
00002ee2: DUP3
00002ee3: MSTORE
00002ee4: POP
00002ee5: POP
00002ee6: JUMP
00002ee7: JUMPDEST
00002ee8: PUSH2 0x2ef0
00002eeb: DUP2
00002eec: PUSH2 0x393b
00002eef: JUMP
00002ef0: JUMPDEST
00002ef1: DUP3
00002ef2: MSTORE
00002ef3: POP
00002ef4: POP
00002ef5: JUMP
00002ef6: JUMPDEST
00002ef7: PUSH2 0x2eff
00002efa: DUP2
00002efb: PUSH2 0x394b
00002efe: JUMP
00002eff: JUMPDEST
00002f00: DUP3
00002f01: MSTORE
00002f02: POP
00002f03: POP
00002f04: JUMP
00002f05: JUMPDEST
00002f06: PUSH2 0x2f16
00002f09: PUSH2 0x2f11
00002f0c: DUP3
00002f0d: PUSH2 0x394b
00002f10: JUMP
00002f11: JUMPDEST
00002f12: PUSH2 0x3b1d
00002f15: JUMP
00002f16: JUMPDEST
00002f17: DUP3
00002f18: MSTORE
00002f19: POP
00002f1a: POP
00002f1b: JUMP
00002f1c: JUMPDEST
00002f1d: PUSH2 0x2f25
00002f20: DUP2
00002f21: PUSH2 0x395f
00002f24: JUMP
00002f25: JUMPDEST
00002f26: DUP3
00002f27: MSTORE
00002f28: POP
00002f29: POP
00002f2a: JUMP
00002f2b: JUMPDEST
00002f2c: PUSH1 0x00
00002f2e: PUSH2 0x2f37
00002f31: DUP3
00002f32: DUP7
00002f33: PUSH2 0x2a21
00002f36: JUMP
00002f37: JUMPDEST
00002f38: PUSH1 0x14
00002f3a: DUP3
00002f3b: ADD
00002f3c: SWAP2
00002f3d: POP
00002f3e: PUSH2 0x2f47
00002f41: DUP3
00002f42: DUP6
00002f43: PUSH2 0x2a21
00002f46: JUMP
00002f47: JUMPDEST
00002f48: PUSH1 0x14
00002f4a: DUP3
00002f4b: ADD
00002f4c: SWAP2
00002f4d: POP
00002f4e: PUSH2 0x2f57
00002f51: DUP3
00002f52: DUP5
00002f53: PUSH2 0x2a21
00002f56: JUMP
00002f57: JUMPDEST
00002f58: PUSH1 0x14
00002f5a: DUP3
00002f5b: ADD
00002f5c: SWAP2
00002f5d: POP
00002f5e: DUP2
00002f5f: SWAP1
00002f60: POP
00002f61: SWAP5
00002f62: SWAP4
00002f63: POP
00002f64: POP
00002f65: POP
00002f66: POP
00002f67: JUMP
00002f68: JUMPDEST
00002f69: PUSH1 0x00
00002f6b: PUSH2 0x2f74
00002f6e: DUP3
00002f6f: DUP9
00002f70: PUSH2 0x2a21
00002f73: JUMP
00002f74: JUMPDEST
00002f75: PUSH1 0x14
00002f77: DUP3
00002f78: ADD
00002f79: SWAP2
00002f7a: POP
00002f7b: PUSH2 0x2f84
00002f7e: DUP3
00002f7f: DUP8
00002f80: PUSH2 0x2f05
00002f83: JUMP
00002f84: JUMPDEST
00002f85: PUSH1 0x08
00002f87: DUP3
00002f88: ADD
00002f89: SWAP2
00002f8a: POP
00002f8b: PUSH2 0x2f94
00002f8e: DUP3
00002f8f: DUP7
00002f90: PUSH2 0x2a56
00002f93: JUMP
00002f94: JUMPDEST
00002f95: PUSH1 0x20
00002f97: DUP3
00002f98: ADD
00002f99: SWAP2
00002f9a: POP
00002f9b: PUSH2 0x2fa5
00002f9e: DUP3
00002f9f: DUP5
00002fa0: DUP7
00002fa1: PUSH2 0x2a9a
00002fa4: JUMP
00002fa5: JUMPDEST
00002fa6: SWAP2
00002fa7: POP
00002fa8: DUP2
00002fa9: SWAP1
00002faa: POP
00002fab: SWAP7
00002fac: SWAP6
00002fad: POP
00002fae: POP
00002faf: POP
00002fb0: POP
00002fb1: POP
00002fb2: POP
00002fb3: JUMP
00002fb4: JUMPDEST
00002fb5: PUSH1 0x00
00002fb7: PUSH2 0x2fc0
00002fba: DUP3
00002fbb: DUP9
00002fbc: PUSH2 0x2a21
00002fbf: JUMP
00002fc0: JUMPDEST
00002fc1: PUSH1 0x14
00002fc3: DUP3
00002fc4: ADD
00002fc5: SWAP2
00002fc6: POP
00002fc7: PUSH2 0x2fd0
00002fca: DUP3
00002fcb: DUP8
00002fcc: PUSH2 0x2f05
00002fcf: JUMP
00002fd0: JUMPDEST
00002fd1: PUSH1 0x08
00002fd3: DUP3
00002fd4: ADD
00002fd5: SWAP2
00002fd6: POP
00002fd7: PUSH2 0x2fe0
00002fda: DUP3
00002fdb: DUP7
00002fdc: PUSH2 0x2f05
00002fdf: JUMP
00002fe0: JUMPDEST
00002fe1: PUSH1 0x08
00002fe3: DUP3
00002fe4: ADD
00002fe5: SWAP2
00002fe6: POP
00002fe7: PUSH2 0x2ff0
00002fea: DUP3
00002feb: DUP6
00002fec: PUSH2 0x29fb
00002fef: JUMP
00002ff0: JUMPDEST
00002ff1: PUSH1 0x14
00002ff3: DUP3
00002ff4: ADD
00002ff5: SWAP2
00002ff6: POP
00002ff7: PUSH2 0x3000
00002ffa: DUP3
00002ffb: DUP5
00002ffc: PUSH2 0x2ed0
00002fff: JUMP
00003000: JUMPDEST
00003001: PUSH1 0x20
00003003: DUP3
00003004: ADD
00003005: SWAP2
00003006: POP
00003007: DUP2
00003008: SWAP1
00003009: POP
0000300a: SWAP7
0000300b: SWAP6
0000300c: POP
0000300d: POP
0000300e: POP
0000300f: POP
00003010: POP
00003011: POP
00003012: JUMP
00003013: JUMPDEST
00003014: PUSH1 0x00
00003016: PUSH2 0x301f
00003019: DUP3
0000301a: DUP5
0000301b: PUSH2 0x2abf
0000301e: JUMP
0000301f: JUMPDEST
00003020: SWAP2
00003021: POP
00003022: DUP2
00003023: SWAP1
00003024: POP
00003025: SWAP3
00003026: SWAP2
00003027: POP
00003028: POP
00003029: JUMP
0000302a: JUMPDEST
0000302b: PUSH1 0x00
0000302d: PUSH2 0x3035
00003030: DUP3
00003031: PUSH2 0x2e58
00003034: JUMP
00003035: JUMPDEST
00003036: SWAP2
00003037: POP
00003038: DUP2
00003039: SWAP1
0000303a: POP
0000303b: SWAP2
0000303c: SWAP1
0000303d: POP
0000303e: JUMP
0000303f: JUMPDEST
00003040: PUSH1 0x00
00003042: PUSH2 0x304b
00003045: DUP3
00003046: DUP7
00003047: PUSH2 0x2f05
0000304a: JUMP
0000304b: JUMPDEST
0000304c: PUSH1 0x08
0000304e: DUP3
0000304f: ADD
00003050: SWAP2
00003051: POP
00003052: PUSH2 0x305b
00003055: DUP3
00003056: DUP6
00003057: PUSH2 0x29fb
0000305a: JUMP
0000305b: JUMPDEST
0000305c: PUSH1 0x14
0000305e: DUP3
0000305f: ADD
00003060: SWAP2
00003061: POP
00003062: PUSH2 0x306b
00003065: DUP3
00003066: DUP5
00003067: PUSH2 0x2ed0
0000306a: JUMP
0000306b: JUMPDEST
0000306c: PUSH1 0x20
0000306e: DUP3
0000306f: ADD
00003070: SWAP2
00003071: POP
00003072: DUP2
00003073: SWAP1
00003074: POP
00003075: SWAP5
00003076: SWAP4
00003077: POP
00003078: POP
00003079: POP
0000307a: POP
0000307b: JUMP
0000307c: JUMPDEST
0000307d: PUSH1 0x00
0000307f: PUSH2 0x3088
00003082: DUP3
00003083: DUP8
00003084: PUSH2 0x2f05
00003087: JUMP
00003088: JUMPDEST
00003089: PUSH1 0x08
0000308b: DUP3
0000308c: ADD
0000308d: SWAP2
0000308e: POP
0000308f: PUSH2 0x3098
00003092: DUP3
00003093: DUP7
00003094: PUSH2 0x2f05
00003097: JUMP
00003098: JUMPDEST
00003099: PUSH1 0x08
0000309b: DUP3
0000309c: ADD
0000309d: SWAP2
0000309e: POP
0000309f: PUSH2 0x30a8
000030a2: DUP3
000030a3: DUP6
000030a4: PUSH2 0x29fb
000030a7: JUMP
000030a8: JUMPDEST
000030a9: PUSH1 0x14
000030ab: DUP3
000030ac: ADD
000030ad: SWAP2
000030ae: POP
000030af: PUSH2 0x30b8
000030b2: DUP3
000030b3: DUP5
000030b4: PUSH2 0x2ed0
000030b7: JUMP
000030b8: JUMPDEST
000030b9: PUSH1 0x20
000030bb: DUP3
000030bc: ADD
000030bd: SWAP2
000030be: POP
000030bf: DUP2
000030c0: SWAP1
000030c1: POP
000030c2: SWAP6
000030c3: SWAP5
000030c4: POP
000030c5: POP
000030c6: POP
000030c7: POP
000030c8: POP
000030c9: JUMP
000030ca: JUMPDEST
000030cb: PUSH1 0x00
000030cd: PUSH1 0x20
000030cf: DUP3
000030d0: ADD
000030d1: SWAP1
000030d2: POP
000030d3: PUSH2 0x30df
000030d6: PUSH1 0x00
000030d8: DUP4
000030d9: ADD
000030da: DUP5
000030db: PUSH2 0x2a12
000030de: JUMP
000030df: JUMPDEST
000030e0: SWAP3
000030e1: SWAP2
000030e2: POP
000030e3: POP
000030e4: JUMP
000030e5: JUMPDEST
000030e6: PUSH1 0x00
000030e8: PUSH1 0x20
000030ea: DUP3
000030eb: ADD
000030ec: SWAP1
000030ed: POP
000030ee: PUSH2 0x30fa
000030f1: PUSH1 0x00
000030f3: DUP4
000030f4: ADD
000030f5: DUP5
000030f6: PUSH2 0x2a47
000030f9: JUMP
000030fa: JUMPDEST
000030fb: SWAP3
000030fc: SWAP2
000030fd: POP
000030fe: POP
000030ff: JUMP
00003100: JUMPDEST
00003101: PUSH1 0x00
00003103: PUSH1 0x40
00003105: DUP3
00003106: ADD
00003107: SWAP1
00003108: POP
00003109: PUSH2 0x3115
0000310c: PUSH1 0x00
0000310e: DUP4
0000310f: ADD
00003110: DUP6
00003111: PUSH2 0x2a47
00003114: JUMP
00003115: JUMPDEST
00003116: PUSH2 0x3122
00003119: PUSH1 0x20
0000311b: DUP4
0000311c: ADD
0000311d: DUP5
0000311e: PUSH2 0x2a47
00003121: JUMP
00003122: JUMPDEST
00003123: SWAP4
00003124: SWAP3
00003125: POP
00003126: POP
00003127: POP
00003128: JUMP
00003129: JUMPDEST
0000312a: PUSH1 0x00
0000312c: PUSH1 0x40
0000312e: DUP3
0000312f: ADD
00003130: SWAP1
00003131: POP
00003132: PUSH2 0x313e
00003135: PUSH1 0x00
00003137: DUP4
00003138: ADD
00003139: DUP7
0000313a: PUSH2 0x2a47
0000313d: JUMP
0000313e: JUMPDEST
0000313f: DUP2
00003140: DUP2
00003141: SUB
00003142: PUSH1 0x20
00003144: DUP4
00003145: ADD
00003146: MSTORE
00003147: PUSH2 0x3151
0000314a: DUP2
0000314b: DUP5
0000314c: DUP7
0000314d: PUSH2 0x2a6d
00003150: JUMP
00003151: JUMPDEST
00003152: SWAP1
00003153: POP
00003154: SWAP5
00003155: SWAP4
00003156: POP
00003157: POP
00003158: POP
00003159: POP
0000315a: JUMP
0000315b: JUMPDEST
0000315c: PUSH1 0x00
0000315e: PUSH1 0x80
00003160: DUP3
00003161: ADD
00003162: SWAP1
00003163: POP
00003164: PUSH2 0x3170
00003167: PUSH1 0x00
00003169: DUP4
0000316a: ADD
0000316b: DUP8
0000316c: PUSH2 0x2a47
0000316f: JUMP
00003170: JUMPDEST
00003171: PUSH2 0x317d
00003174: PUSH1 0x20
00003176: DUP4
00003177: ADD
00003178: DUP7
00003179: PUSH2 0x2f1c
0000317c: JUMP
0000317d: JUMPDEST
0000317e: PUSH2 0x318a
00003181: PUSH1 0x40
00003183: DUP4
00003184: ADD
00003185: DUP6
00003186: PUSH2 0x2a47
00003189: JUMP
0000318a: JUMPDEST
0000318b: PUSH2 0x3197
0000318e: PUSH1 0x60
00003190: DUP4
00003191: ADD
00003192: DUP5
00003193: PUSH2 0x2a47
00003196: JUMP
00003197: JUMPDEST
00003198: SWAP6
00003199: SWAP5
0000319a: POP
0000319b: POP
0000319c: POP
0000319d: POP
0000319e: POP
0000319f: JUMP
000031a0: JUMPDEST
000031a1: PUSH1 0x00
000031a3: PUSH1 0x20
000031a5: DUP3
000031a6: ADD
000031a7: SWAP1
000031a8: POP
000031a9: PUSH2 0x31b5
000031ac: PUSH1 0x00
000031ae: DUP4
000031af: ADD
000031b0: DUP5
000031b1: PUSH2 0x2af0
000031b4: JUMP
000031b5: JUMPDEST
000031b6: SWAP3
000031b7: SWAP2
000031b8: POP
000031b9: POP
000031ba: JUMP
000031bb: JUMPDEST
000031bc: PUSH1 0x00
000031be: PUSH1 0x20
000031c0: DUP3
000031c1: ADD
000031c2: SWAP1
000031c3: POP
000031c4: PUSH2 0x31d0
000031c7: PUSH1 0x00
000031c9: DUP4
000031ca: ADD
000031cb: DUP5
000031cc: PUSH2 0x2b0e
000031cf: JUMP
000031d0: JUMPDEST
000031d1: SWAP3
000031d2: SWAP2
000031d3: POP
000031d4: POP
000031d5: JUMP
000031d6: JUMPDEST
000031d7: PUSH1 0x00
000031d9: PUSH1 0x20
000031db: DUP3
000031dc: ADD
000031dd: SWAP1
000031de: POP
000031df: DUP2
000031e0: DUP2
000031e1: SUB
000031e2: PUSH1 0x00
000031e4: DUP4
000031e5: ADD
000031e6: MSTORE
000031e7: PUSH2 0x31f0
000031ea: DUP2
000031eb: DUP5
000031ec: PUSH2 0x2b1d
000031ef: JUMP
000031f0: JUMPDEST
000031f1: SWAP1
000031f2: POP
000031f3: SWAP3
000031f4: SWAP2
000031f5: POP
000031f6: POP
000031f7: JUMP
000031f8: JUMPDEST
000031f9: PUSH1 0x00
000031fb: PUSH1 0x20
000031fd: DUP3
000031fe: ADD
000031ff: SWAP1
00003200: POP
00003201: DUP2
00003202: DUP2
00003203: SUB
00003204: PUSH1 0x00
00003206: DUP4
00003207: ADD
00003208: MSTORE
00003209: PUSH2 0x3211
0000320c: DUP2
0000320d: PUSH2 0x2b56
00003210: JUMP
00003211: JUMPDEST
00003212: SWAP1
00003213: POP
00003214: SWAP2
00003215: SWAP1
00003216: POP
00003217: JUMP
00003218: JUMPDEST
00003219: PUSH1 0x00
0000321b: PUSH1 0x20
0000321d: DUP3
0000321e: ADD
0000321f: SWAP1
00003220: POP
00003221: DUP2
00003222: DUP2
00003223: SUB
00003224: PUSH1 0x00
00003226: DUP4
00003227: ADD
00003228: MSTORE
00003229: PUSH2 0x3231
0000322c: DUP2
0000322d: PUSH2 0x2b79
00003230: JUMP
00003231: JUMPDEST
00003232: SWAP1
00003233: POP
00003234: SWAP2
00003235: SWAP1
00003236: POP
00003237: JUMP
00003238: JUMPDEST
00003239: PUSH1 0x00
0000323b: PUSH1 0x20
0000323d: DUP3
0000323e: ADD
0000323f: SWAP1
00003240: POP
00003241: DUP2
00003242: DUP2
00003243: SUB
00003244: PUSH1 0x00
00003246: DUP4
00003247: ADD
00003248: MSTORE
00003249: PUSH2 0x3251
0000324c: DUP2
0000324d: PUSH2 0x2b9c
00003250: JUMP
00003251: JUMPDEST
00003252: SWAP1
00003253: POP
00003254: SWAP2
00003255: SWAP1
00003256: POP
00003257: JUMP
00003258: JUMPDEST
00003259: PUSH1 0x00
0000325b: PUSH1 0x20
0000325d: DUP3
0000325e: ADD
0000325f: SWAP1
00003260: POP
00003261: DUP2
00003262: DUP2
00003263: SUB
00003264: PUSH1 0x00
00003266: DUP4
00003267: ADD
00003268: MSTORE
00003269: PUSH2 0x3271
0000326c: DUP2
0000326d: PUSH2 0x2bbf
00003270: JUMP
00003271: JUMPDEST
00003272: SWAP1
00003273: POP
00003274: SWAP2
00003275: SWAP1
00003276: POP
00003277: JUMP
00003278: JUMPDEST
00003279: PUSH1 0x00
0000327b: PUSH1 0x20
0000327d: DUP3
0000327e: ADD
0000327f: SWAP1
00003280: POP
00003281: DUP2
00003282: DUP2
00003283: SUB
00003284: PUSH1 0x00
00003286: DUP4
00003287: ADD
00003288: MSTORE
00003289: PUSH2 0x3291
0000328c: DUP2
0000328d: PUSH2 0x2be2
00003290: JUMP
00003291: JUMPDEST
00003292: SWAP1
00003293: POP
00003294: SWAP2
00003295: SWAP1
00003296: POP
00003297: JUMP
00003298: JUMPDEST
00003299: PUSH1 0x00
0000329b: PUSH1 0x20
0000329d: DUP3
0000329e: ADD
0000329f: SWAP1
000032a0: POP
000032a1: DUP2
000032a2: DUP2
000032a3: SUB
000032a4: PUSH1 0x00
000032a6: DUP4
000032a7: ADD
000032a8: MSTORE
000032a9: PUSH2 0x32b1
000032ac: DUP2
000032ad: PUSH2 0x2c05
000032b0: JUMP
000032b1: JUMPDEST
000032b2: SWAP1
000032b3: POP
000032b4: SWAP2
000032b5: SWAP1
000032b6: POP
000032b7: JUMP
000032b8: JUMPDEST
000032b9: PUSH1 0x00
000032bb: PUSH1 0x20
000032bd: DUP3
000032be: ADD
000032bf: SWAP1
000032c0: POP
000032c1: DUP2
000032c2: DUP2
000032c3: SUB
000032c4: PUSH1 0x00
000032c6: DUP4
000032c7: ADD
000032c8: MSTORE
000032c9: PUSH2 0x32d1
000032cc: DUP2
000032cd: PUSH2 0x2c28
000032d0: JUMP
000032d1: JUMPDEST
000032d2: SWAP1
000032d3: POP
000032d4: SWAP2
000032d5: SWAP1
000032d6: POP
000032d7: JUMP
000032d8: JUMPDEST
000032d9: PUSH1 0x00
000032db: PUSH1 0x20
000032dd: DUP3
000032de: ADD
000032df: SWAP1
000032e0: POP
000032e1: DUP2
000032e2: DUP2
000032e3: SUB
000032e4: PUSH1 0x00
000032e6: DUP4
000032e7: ADD
000032e8: MSTORE
000032e9: PUSH2 0x32f1
000032ec: DUP2
000032ed: PUSH2 0x2c4b
000032f0: JUMP
000032f1: JUMPDEST
000032f2: SWAP1
000032f3: POP
000032f4: SWAP2
000032f5: SWAP1
000032f6: POP
000032f7: JUMP
000032f8: JUMPDEST
000032f9: PUSH1 0x00
000032fb: PUSH1 0x20
000032fd: DUP3
000032fe: ADD
000032ff: SWAP1
00003300: POP
00003301: DUP2
00003302: DUP2
00003303: SUB
00003304: PUSH1 0x00
00003306: DUP4
00003307: ADD
00003308: MSTORE
00003309: PUSH2 0x3311
0000330c: DUP2
0000330d: PUSH2 0x2c6e
00003310: JUMP
00003311: JUMPDEST
00003312: SWAP1
00003313: POP
00003314: SWAP2
00003315: SWAP1
00003316: POP
00003317: JUMP
00003318: JUMPDEST
00003319: PUSH1 0x00
0000331b: PUSH1 0x20
0000331d: DUP3
0000331e: ADD
0000331f: SWAP1
00003320: POP
00003321: DUP2
00003322: DUP2
00003323: SUB
00003324: PUSH1 0x00
00003326: DUP4
00003327: ADD
00003328: MSTORE
00003329: PUSH2 0x3331
0000332c: DUP2
0000332d: PUSH2 0x2c91
00003330: JUMP
00003331: JUMPDEST
00003332: SWAP1
00003333: POP
00003334: SWAP2
00003335: SWAP1
00003336: POP
00003337: JUMP
00003338: JUMPDEST
00003339: PUSH1 0x00
0000333b: PUSH1 0x20
0000333d: DUP3
0000333e: ADD
0000333f: SWAP1
00003340: POP
00003341: DUP2
00003342: DUP2
00003343: SUB
00003344: PUSH1 0x00
00003346: DUP4
00003347: ADD
00003348: MSTORE
00003349: PUSH2 0x3351
0000334c: DUP2
0000334d: PUSH2 0x2cb4
00003350: JUMP
00003351: JUMPDEST
00003352: SWAP1
00003353: POP
00003354: SWAP2
00003355: SWAP1
00003356: POP
00003357: JUMP
00003358: JUMPDEST
00003359: PUSH1 0x00
0000335b: PUSH1 0x20
0000335d: DUP3
0000335e: ADD
0000335f: SWAP1
00003360: POP
00003361: DUP2
00003362: DUP2
00003363: SUB
00003364: PUSH1 0x00
00003366: DUP4
00003367: ADD
00003368: MSTORE
00003369: PUSH2 0x3371
0000336c: DUP2
0000336d: PUSH2 0x2cd7
00003370: JUMP
00003371: JUMPDEST
00003372: SWAP1
00003373: POP
00003374: SWAP2
00003375: SWAP1
00003376: POP
00003377: JUMP
00003378: JUMPDEST
00003379: PUSH1 0x00
0000337b: PUSH1 0x20
0000337d: DUP3
0000337e: ADD
0000337f: SWAP1
00003380: POP
00003381: DUP2
00003382: DUP2
00003383: SUB
00003384: PUSH1 0x00
00003386: DUP4
00003387: ADD
00003388: MSTORE
00003389: PUSH2 0x3391
0000338c: DUP2
0000338d: PUSH2 0x2cfa
00003390: JUMP
00003391: JUMPDEST
00003392: SWAP1
00003393: POP
00003394: SWAP2
00003395: SWAP1
00003396: POP
00003397: JUMP
00003398: JUMPDEST
00003399: PUSH1 0x00
0000339b: PUSH1 0x20
0000339d: DUP3
0000339e: ADD
0000339f: SWAP1
000033a0: POP
000033a1: DUP2
000033a2: DUP2
000033a3: SUB
000033a4: PUSH1 0x00
000033a6: DUP4
000033a7: ADD
000033a8: MSTORE
000033a9: PUSH2 0x33b1
000033ac: DUP2
000033ad: PUSH2 0x2d1d
000033b0: JUMP
000033b1: JUMPDEST
000033b2: SWAP1
000033b3: POP
000033b4: SWAP2
000033b5: SWAP1
000033b6: POP
000033b7: JUMP
000033b8: JUMPDEST
000033b9: PUSH1 0x00
000033bb: PUSH1 0x20
000033bd: DUP3
000033be: ADD
000033bf: SWAP1
000033c0: POP
000033c1: DUP2
000033c2: DUP2
000033c3: SUB
000033c4: PUSH1 0x00
000033c6: DUP4
000033c7: ADD
000033c8: MSTORE
000033c9: PUSH2 0x33d1
000033cc: DUP2
000033cd: PUSH2 0x2d40
000033d0: JUMP
000033d1: JUMPDEST
000033d2: SWAP1
000033d3: POP
000033d4: SWAP2
000033d5: SWAP1
000033d6: POP
000033d7: JUMP
000033d8: JUMPDEST
000033d9: PUSH1 0x00
000033db: PUSH1 0x20
000033dd: DUP3
000033de: ADD
000033df: SWAP1
000033e0: POP
000033e1: DUP2
000033e2: DUP2
000033e3: SUB
000033e4: PUSH1 0x00
000033e6: DUP4
000033e7: ADD
000033e8: MSTORE
000033e9: PUSH2 0x33f1
000033ec: DUP2
000033ed: PUSH2 0x2d63
000033f0: JUMP
000033f1: JUMPDEST
000033f2: SWAP1
000033f3: POP
000033f4: SWAP2
000033f5: SWAP1
000033f6: POP
000033f7: JUMP
000033f8: JUMPDEST
000033f9: PUSH1 0x00
000033fb: PUSH1 0x20
000033fd: DUP3
000033fe: ADD
000033ff: SWAP1
00003400: POP
00003401: DUP2
00003402: DUP2
00003403: SUB
00003404: PUSH1 0x00
00003406: DUP4
00003407: ADD
00003408: MSTORE
00003409: PUSH2 0x3411
0000340c: DUP2
0000340d: PUSH2 0x2d86
00003410: JUMP
00003411: JUMPDEST
00003412: SWAP1
00003413: POP
00003414: SWAP2
00003415: SWAP1
00003416: POP
00003417: JUMP
00003418: JUMPDEST
00003419: PUSH1 0x00
0000341b: PUSH1 0x20
0000341d: DUP3
0000341e: ADD
0000341f: SWAP1
00003420: POP
00003421: DUP2
00003422: DUP2
00003423: SUB
00003424: PUSH1 0x00
00003426: DUP4
00003427: ADD
00003428: MSTORE
00003429: PUSH2 0x3431
0000342c: DUP2
0000342d: PUSH2 0x2da9
00003430: JUMP
00003431: JUMPDEST
00003432: SWAP1
00003433: POP
00003434: SWAP2
00003435: SWAP1
00003436: POP
00003437: JUMP
00003438: JUMPDEST
00003439: PUSH1 0x00
0000343b: PUSH1 0x20
0000343d: DUP3
0000343e: ADD
0000343f: SWAP1
00003440: POP
00003441: DUP2
00003442: DUP2
00003443: SUB
00003444: PUSH1 0x00
00003446: DUP4
00003447: ADD
00003448: MSTORE
00003449: PUSH2 0x3451
0000344c: DUP2
0000344d: PUSH2 0x2dcc
00003450: JUMP
00003451: JUMPDEST
00003452: SWAP1
00003453: POP
00003454: SWAP2
00003455: SWAP1
00003456: POP
00003457: JUMP
00003458: JUMPDEST
00003459: PUSH1 0x00
0000345b: PUSH1 0x20
0000345d: DUP3
0000345e: ADD
0000345f: SWAP1
00003460: POP
00003461: DUP2
00003462: DUP2
00003463: SUB
00003464: PUSH1 0x00
00003466: DUP4
00003467: ADD
00003468: MSTORE
00003469: PUSH2 0x3471
0000346c: DUP2
0000346d: PUSH2 0x2def
00003470: JUMP
00003471: JUMPDEST
00003472: SWAP1
00003473: POP
00003474: SWAP2
00003475: SWAP1
00003476: POP
00003477: JUMP
00003478: JUMPDEST
00003479: PUSH1 0x00
0000347b: PUSH1 0x20
0000347d: DUP3
0000347e: ADD
0000347f: SWAP1
00003480: POP
00003481: DUP2
00003482: DUP2
00003483: SUB
00003484: PUSH1 0x00
00003486: DUP4
00003487: ADD
00003488: MSTORE
00003489: PUSH2 0x3491
0000348c: DUP2
0000348d: PUSH2 0x2e12
00003490: JUMP
00003491: JUMPDEST
00003492: SWAP1
00003493: POP
00003494: SWAP2
00003495: SWAP1
00003496: POP
00003497: JUMP
00003498: JUMPDEST
00003499: PUSH1 0x00
0000349b: PUSH1 0x20
0000349d: DUP3
0000349e: ADD
0000349f: SWAP1
000034a0: POP
000034a1: DUP2
000034a2: DUP2
000034a3: SUB
000034a4: PUSH1 0x00
000034a6: DUP4
000034a7: ADD
000034a8: MSTORE
000034a9: PUSH2 0x34b1
000034ac: DUP2
000034ad: PUSH2 0x2e35
000034b0: JUMP
000034b1: JUMPDEST
000034b2: SWAP1
000034b3: POP
000034b4: SWAP2
000034b5: SWAP1
000034b6: POP
000034b7: JUMP
000034b8: JUMPDEST
000034b9: PUSH1 0x00
000034bb: PUSH1 0x20
000034bd: DUP3
000034be: ADD
000034bf: SWAP1
000034c0: POP
000034c1: DUP2
000034c2: DUP2
000034c3: SUB
000034c4: PUSH1 0x00
000034c6: DUP4
000034c7: ADD
000034c8: MSTORE
000034c9: PUSH2 0x34d1
000034cc: DUP2
000034cd: PUSH2 0x2e7b
000034d0: JUMP
000034d1: JUMPDEST
000034d2: SWAP1
000034d3: POP
000034d4: SWAP2
000034d5: SWAP1
000034d6: POP
000034d7: JUMP
000034d8: JUMPDEST
000034d9: PUSH1 0x00
000034db: PUSH1 0x20
000034dd: DUP3
000034de: ADD
000034df: SWAP1
000034e0: POP
000034e1: DUP2
000034e2: DUP2
000034e3: SUB
000034e4: PUSH1 0x00
000034e6: DUP4
000034e7: ADD
000034e8: MSTORE
000034e9: PUSH2 0x34f1
000034ec: DUP2
000034ed: PUSH2 0x2e9e
000034f0: JUMP
000034f1: JUMPDEST
000034f2: SWAP1
000034f3: POP
000034f4: SWAP2
000034f5: SWAP1
000034f6: POP
000034f7: JUMP
000034f8: JUMPDEST
000034f9: PUSH1 0x00
000034fb: PUSH1 0x20
000034fd: DUP3
000034fe: ADD
000034ff: SWAP1
00003500: POP
00003501: PUSH2 0x350d
00003504: PUSH1 0x00
00003506: DUP4
00003507: ADD
00003508: DUP5
00003509: PUSH2 0x2ec1
0000350c: JUMP
0000350d: JUMPDEST
0000350e: SWAP3
0000350f: SWAP2
00003510: POP
00003511: POP
00003512: JUMP
00003513: JUMPDEST
00003514: PUSH1 0x00
00003516: PUSH1 0x20
00003518: DUP3
00003519: ADD
0000351a: SWAP1
0000351b: POP
0000351c: PUSH2 0x3528
0000351f: PUSH1 0x00
00003521: DUP4
00003522: ADD
00003523: DUP5
00003524: PUSH2 0x2ef6
00003527: JUMP
00003528: JUMPDEST
00003529: SWAP3
0000352a: SWAP2
0000352b: POP
0000352c: POP
0000352d: JUMP
0000352e: JUMPDEST
0000352f: PUSH1 0x00
00003531: PUSH1 0xa0
00003533: DUP3
00003534: ADD
00003535: SWAP1
00003536: POP
00003537: PUSH2 0x3543
0000353a: PUSH1 0x00
0000353c: DUP4
0000353d: ADD
0000353e: DUP9
0000353f: PUSH2 0x2ef6
00003542: JUMP
00003543: JUMPDEST
00003544: PUSH2 0x3550
00003547: PUSH1 0x20
00003549: DUP4
0000354a: ADD
0000354b: DUP8
0000354c: PUSH2 0x29ec
0000354f: JUMP
00003550: JUMPDEST
00003551: PUSH2 0x355d
00003554: PUSH1 0x40
00003556: DUP4
00003557: ADD
00003558: DUP7
00003559: PUSH2 0x2ec1
0000355c: JUMP
0000355d: JUMPDEST
0000355e: PUSH2 0x356a
00003561: PUSH1 0x60
00003563: DUP4
00003564: ADD
00003565: DUP6
00003566: PUSH2 0x2ef6
00003569: JUMP
0000356a: JUMPDEST
0000356b: PUSH2 0x3577
0000356e: PUSH1 0x80
00003570: DUP4
00003571: ADD
00003572: DUP5
00003573: PUSH2 0x2aff
00003576: JUMP
00003577: JUMPDEST
00003578: SWAP7
00003579: SWAP6
0000357a: POP
0000357b: POP
0000357c: POP
0000357d: POP
0000357e: POP
0000357f: POP
00003580: JUMP
00003581: JUMPDEST
00003582: PUSH1 0x00
00003584: PUSH1 0xa0
00003586: DUP3
00003587: ADD
00003588: SWAP1
00003589: POP
0000358a: PUSH2 0x3596
0000358d: PUSH1 0x00
0000358f: DUP4
00003590: ADD
00003591: DUP9
00003592: PUSH2 0x2ef6
00003595: JUMP
00003596: JUMPDEST
00003597: PUSH2 0x35a3
0000359a: PUSH1 0x20
0000359c: DUP4
0000359d: ADD
0000359e: DUP8
0000359f: PUSH2 0x29ec
000035a2: JUMP
000035a3: JUMPDEST
000035a4: PUSH2 0x35b0
000035a7: PUSH1 0x40
000035a9: DUP4
000035aa: ADD
000035ab: DUP7
000035ac: PUSH2 0x2ec1
000035af: JUMP
000035b0: JUMPDEST
000035b1: PUSH2 0x35bd
000035b4: PUSH1 0x60
000035b6: DUP4
000035b7: ADD
000035b8: DUP6
000035b9: PUSH2 0x2ef6
000035bc: JUMP
000035bd: JUMPDEST
000035be: PUSH2 0x35ca
000035c1: PUSH1 0x80
000035c3: DUP4
000035c4: ADD
000035c5: DUP5
000035c6: PUSH2 0x2ee7
000035c9: JUMP
000035ca: JUMPDEST
000035cb: SWAP7
000035cc: SWAP6
000035cd: POP
000035ce: POP
000035cf: POP
000035d0: POP
000035d1: POP
000035d2: POP
000035d3: JUMP
000035d4: JUMPDEST
000035d5: PUSH1 0x00
000035d7: PUSH1 0x60
000035d9: DUP3
000035da: ADD
000035db: SWAP1
000035dc: POP
000035dd: PUSH2 0x35e9
000035e0: PUSH1 0x00
000035e2: DUP4
000035e3: ADD
000035e4: DUP7
000035e5: PUSH2 0x2ef6
000035e8: JUMP
000035e9: JUMPDEST
000035ea: PUSH2 0x35f6
000035ed: PUSH1 0x20
000035ef: DUP4
000035f0: ADD
000035f1: DUP6
000035f2: PUSH2 0x2a38
000035f5: JUMP
000035f6: JUMPDEST
000035f7: PUSH2 0x3603
000035fa: PUSH1 0x40
000035fc: DUP4
000035fd: ADD
000035fe: DUP5
000035ff: PUSH2 0x2ec1
00003602: JUMP
00003603: JUMPDEST
00003604: SWAP5
00003605: SWAP4
00003606: POP
00003607: POP
00003608: POP
00003609: POP
0000360a: JUMP
0000360b: JUMPDEST
0000360c: PUSH1 0x00
0000360e: PUSH1 0x60
00003610: DUP3
00003611: ADD
00003612: SWAP1
00003613: POP
00003614: PUSH2 0x3620
00003617: PUSH1 0x00
00003619: DUP4
0000361a: ADD
0000361b: DUP8
0000361c: PUSH2 0x2ef6
0000361f: JUMP
00003620: JUMPDEST
00003621: PUSH2 0x362d
00003624: PUSH1 0x20
00003626: DUP4
00003627: ADD
00003628: DUP7
00003629: PUSH2 0x2a47
0000362c: JUMP
0000362d: JUMPDEST
0000362e: DUP2
0000362f: DUP2
00003630: SUB
00003631: PUSH1 0x40
00003633: DUP4
00003634: ADD
00003635: MSTORE
00003636: PUSH2 0x3640
00003639: DUP2
0000363a: DUP5
0000363b: DUP7
0000363c: PUSH2 0x2a6d
0000363f: JUMP
00003640: JUMPDEST
00003641: SWAP1
00003642: POP
00003643: SWAP6
00003644: SWAP5
00003645: POP
00003646: POP
00003647: POP
00003648: POP
00003649: POP
0000364a: JUMP
0000364b: JUMPDEST
0000364c: PUSH1 0x00
0000364e: PUSH2 0x3655
00003651: PUSH2 0x3666
00003654: JUMP
00003655: JUMPDEST
00003656: SWAP1
00003657: POP
00003658: PUSH2 0x3661
0000365b: DUP3
0000365c: DUP3
0000365d: PUSH2 0x3a2c
00003660: JUMP
00003661: JUMPDEST
00003662: SWAP2
00003663: SWAP1
00003664: POP
00003665: JUMP
00003666: JUMPDEST
00003667: PUSH1 0x00
00003669: PUSH1 0x40
0000366b: MLOAD
0000366c: SWAP1
0000366d: POP
0000366e: SWAP1
0000366f: JUMP
00003670: JUMPDEST
00003671: PUSH1 0x00
00003673: PUSH8 0xffffffffffffffff
0000367c: DUP3
0000367d: GT
0000367e: ISZERO
0000367f: PUSH2 0x368b
00003682: JUMPI
00003683: PUSH2 0x368a
00003686: PUSH2 0x3beb
00003689: JUMP
0000368a: JUMPDEST
0000368b: JUMPDEST
0000368c: PUSH1 0x20
0000368e: DUP3
0000368f: MUL
00003690: SWAP1
00003691: POP
00003692: PUSH1 0x20
00003694: DUP2
00003695: ADD
00003696: SWAP1
00003697: POP
00003698: SWAP2
00003699: SWAP1
0000369a: POP
0000369b: JUMP
0000369c: JUMPDEST
0000369d: PUSH1 0x00
0000369f: PUSH8 0xffffffffffffffff
000036a8: DUP3
000036a9: GT
000036aa: ISZERO
000036ab: PUSH2 0x36b7
000036ae: JUMPI
000036af: PUSH2 0x36b6
000036b2: PUSH2 0x3beb
000036b5: JUMP
000036b6: JUMPDEST
000036b7: JUMPDEST
000036b8: PUSH1 0x20
000036ba: DUP3
000036bb: MUL
000036bc: SWAP1
000036bd: POP
000036be: PUSH1 0x20
000036c0: DUP2
000036c1: ADD
000036c2: SWAP1
000036c3: POP
000036c4: SWAP2
000036c5: SWAP1
000036c6: POP
000036c7: JUMP
000036c8: JUMPDEST
000036c9: PUSH1 0x00
000036cb: DUP2
000036cc: MLOAD
000036cd: SWAP1
000036ce: POP
000036cf: SWAP2
000036d0: SWAP1
000036d1: POP
000036d2: JUMP
000036d3: JUMPDEST
000036d4: PUSH1 0x00
000036d6: DUP2
000036d7: MLOAD
000036d8: SWAP1
000036d9: POP
000036da: SWAP2
000036db: SWAP1
000036dc: POP
000036dd: JUMP
000036de: JUMPDEST
000036df: PUSH1 0x00
000036e1: DUP3
000036e2: DUP3
000036e3: MSTORE
000036e4: PUSH1 0x20
000036e6: DUP3
000036e7: ADD
000036e8: SWAP1
000036e9: POP
000036ea: SWAP3
000036eb: SWAP2
000036ec: POP
000036ed: POP
000036ee: JUMP
000036ef: JUMPDEST
000036f0: PUSH1 0x00
000036f2: DUP2
000036f3: SWAP1
000036f4: POP
000036f5: SWAP3
000036f6: SWAP2
000036f7: POP
000036f8: POP
000036f9: JUMP
000036fa: JUMPDEST
000036fb: PUSH1 0x00
000036fd: DUP3
000036fe: DUP3
000036ff: MSTORE
00003700: PUSH1 0x20
00003702: DUP3
00003703: ADD
00003704: SWAP1
00003705: POP
00003706: SWAP3
00003707: SWAP2
00003708: POP
00003709: POP
0000370a: JUMP
0000370b: JUMPDEST
0000370c: PUSH1 0x00
0000370e: DUP1
0000370f: DUP6
00003710: DUP6
00003711: GT
00003712: ISZERO
00003713: PUSH2 0x371f
00003716: JUMPI
00003717: PUSH2 0x371e
0000371a: PUSH2 0x3c29
0000371d: JUMP
0000371e: JUMPDEST
0000371f: JUMPDEST
00003720: DUP4
00003721: DUP7
00003722: GT
00003723: ISZERO
00003724: PUSH2 0x3730
00003727: JUMPI
00003728: PUSH2 0x372f
0000372b: PUSH2 0x3c24
0000372e: JUMP
0000372f: JUMPDEST
00003730: JUMPDEST
00003731: PUSH1 0x01
00003733: DUP6
00003734: MUL
00003735: DUP4
00003736: ADD
00003737: SWAP2
00003738: POP
00003739: DUP5
0000373a: DUP7
0000373b: SUB
0000373c: SWAP1
0000373d: POP
0000373e: SWAP5
0000373f: POP
00003740: SWAP5
00003741: SWAP3
00003742: POP
00003743: POP
00003744: POP
00003745: JUMP
00003746: JUMPDEST
00003747: PUSH1 0x00
00003749: PUSH2 0x3751
0000374c: DUP3
0000374d: PUSH2 0x3931
00003750: JUMP
00003751: JUMPDEST
00003752: SWAP2
00003753: POP
00003754: PUSH2 0x375c
00003757: DUP4
00003758: PUSH2 0x3931
0000375b: JUMP
0000375c: JUMPDEST
0000375d: SWAP3
0000375e: POP
0000375f: DUP3
00003760: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00003781: SUB
00003782: DUP3
00003783: GT
00003784: ISZERO
00003785: PUSH2 0x3791
00003788: JUMPI
00003789: PUSH2 0x3790
0000378c: PUSH2 0x3b2f
0000378f: JUMP
00003790: JUMPDEST
00003791: JUMPDEST
00003792: DUP3
00003793: DUP3
00003794: ADD
00003795: SWAP1
00003796: POP
00003797: SWAP3
00003798: SWAP2
00003799: POP
0000379a: POP
0000379b: JUMP
0000379c: JUMPDEST
0000379d: PUSH1 0x00
0000379f: PUSH2 0x37a7
000037a2: DUP3
000037a3: PUSH2 0x394b
000037a6: JUMP
000037a7: JUMPDEST
000037a8: SWAP2
000037a9: POP
000037aa: PUSH2 0x37b2
000037ad: DUP4
000037ae: PUSH2 0x394b
000037b1: JUMP
000037b2: JUMPDEST
000037b3: SWAP3
000037b4: POP
000037b5: DUP3
000037b6: PUSH8 0xffffffffffffffff
000037bf: SUB
000037c0: DUP3
000037c1: GT
000037c2: ISZERO
000037c3: PUSH2 0x37cf
000037c6: JUMPI
000037c7: PUSH2 0x37ce
000037ca: PUSH2 0x3b2f
000037cd: JUMP
000037ce: JUMPDEST
000037cf: JUMPDEST
000037d0: DUP3
000037d1: DUP3
000037d2: ADD
000037d3: SWAP1
000037d4: POP
000037d5: SWAP3
000037d6: SWAP2
000037d7: POP
000037d8: POP
000037d9: JUMP
000037da: JUMPDEST
000037db: PUSH1 0x00
000037dd: PUSH2 0x37e5
000037e0: DUP3
000037e1: PUSH2 0x3931
000037e4: JUMP
000037e5: JUMPDEST
000037e6: SWAP2
000037e7: POP
000037e8: PUSH2 0x37f0
000037eb: DUP4
000037ec: PUSH2 0x3931
000037ef: JUMP
000037f0: JUMPDEST
000037f1: SWAP3
000037f2: POP
000037f3: DUP3
000037f4: PUSH2 0x3800
000037f7: JUMPI
000037f8: PUSH2 0x37ff
000037fb: PUSH2 0x3b5e
000037fe: JUMP
000037ff: JUMPDEST
00003800: JUMPDEST
00003801: DUP3
00003802: DUP3
00003803: DIV
00003804: SWAP1
00003805: POP
00003806: SWAP3
00003807: SWAP2
00003808: POP
00003809: POP
0000380a: JUMP
0000380b: JUMPDEST
0000380c: PUSH1 0x00
0000380e: PUSH2 0x3816
00003811: DUP3
00003812: PUSH2 0x3931
00003815: JUMP
00003816: JUMPDEST
00003817: SWAP2
00003818: POP
00003819: PUSH2 0x3821
0000381c: DUP4
0000381d: PUSH2 0x3931
00003820: JUMP
00003821: JUMPDEST
00003822: SWAP3
00003823: POP
00003824: DUP2
00003825: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00003846: DIV
00003847: DUP4
00003848: GT
00003849: DUP3
0000384a: ISZERO
0000384b: ISZERO
0000384c: AND
0000384d: ISZERO
0000384e: PUSH2 0x385a
00003851: JUMPI
00003852: PUSH2 0x3859
00003855: PUSH2 0x3b2f
00003858: JUMP
00003859: JUMPDEST
0000385a: JUMPDEST
0000385b: DUP3
0000385c: DUP3
0000385d: MUL
0000385e: SWAP1
0000385f: POP
00003860: SWAP3
00003861: SWAP2
00003862: POP
00003863: POP
00003864: JUMP
00003865: JUMPDEST
00003866: PUSH1 0x00
00003868: PUSH2 0x3870
0000386b: DUP3
0000386c: PUSH2 0x3931
0000386f: JUMP
00003870: JUMPDEST
00003871: SWAP2
00003872: POP
00003873: PUSH2 0x387b
00003876: DUP4
00003877: PUSH2 0x3931
0000387a: JUMP
0000387b: JUMPDEST
0000387c: SWAP3
0000387d: POP
0000387e: DUP3
0000387f: DUP3
00003880: LT
00003881: ISZERO
00003882: PUSH2 0x388e
00003885: JUMPI
00003886: PUSH2 0x388d
00003889: PUSH2 0x3b2f
0000388c: JUMP
0000388d: JUMPDEST
0000388e: JUMPDEST
0000388f: DUP3
00003890: DUP3
00003891: SUB
00003892: SWAP1
00003893: POP
00003894: SWAP3
00003895: SWAP2
00003896: POP
00003897: POP
00003898: JUMP
00003899: JUMPDEST
0000389a: PUSH1 0x00
0000389c: PUSH2 0x38a4
0000389f: DUP3
000038a0: PUSH2 0x3911
000038a3: JUMP
000038a4: JUMPDEST
000038a5: SWAP1
000038a6: POP
000038a7: SWAP2
000038a8: SWAP1
000038a9: POP
000038aa: JUMP
000038ab: JUMPDEST
000038ac: PUSH1 0x00
000038ae: PUSH2 0x38b6
000038b1: DUP3
000038b2: PUSH2 0x3911
000038b5: JUMP
000038b6: JUMPDEST
000038b7: SWAP1
000038b8: POP
000038b9: SWAP2
000038ba: SWAP1
000038bb: POP
000038bc: JUMP
000038bd: JUMPDEST
000038be: PUSH1 0x00
000038c0: DUP2
000038c1: ISZERO
000038c2: ISZERO
000038c3: SWAP1
000038c4: POP
000038c5: SWAP2
000038c6: SWAP1
000038c7: POP
000038c8: JUMP
000038c9: JUMPDEST
000038ca: PUSH1 0x00
000038cc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffff0000000000000000000000
000038ed: DUP3
000038ee: AND
000038ef: SWAP1
000038f0: POP
000038f1: SWAP2
000038f2: SWAP1
000038f3: POP
000038f4: JUMP
000038f5: JUMPDEST
000038f6: PUSH1 0x00
000038f8: DUP2
000038f9: SWAP1
000038fa: POP
000038fb: SWAP2
000038fc: SWAP1
000038fd: POP
000038fe: JUMP
000038ff: JUMPDEST
00003900: PUSH1 0x00
00003902: PUSH2 0x390a
00003905: DUP3
00003906: PUSH2 0x3899
00003909: JUMP
0000390a: JUMPDEST
0000390b: SWAP1
0000390c: POP
0000390d: SWAP2
0000390e: SWAP1
0000390f: POP
00003910: JUMP
00003911: JUMPDEST
00003912: PUSH1 0x00
00003914: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003929: DUP3
0000392a: AND
0000392b: SWAP1
0000392c: POP
0000392d: SWAP2
0000392e: SWAP1
0000392f: POP
00003930: JUMP
00003931: JUMPDEST
00003932: PUSH1 0x00
00003934: DUP2
00003935: SWAP1
00003936: POP
00003937: SWAP2
00003938: SWAP1
00003939: POP
0000393a: JUMP
0000393b: JUMPDEST
0000393c: PUSH1 0x00
0000393e: PUSH4 0xffffffff
00003943: DUP3
00003944: AND
00003945: SWAP1
00003946: POP
00003947: SWAP2
00003948: SWAP1
00003949: POP
0000394a: JUMP
0000394b: JUMPDEST
0000394c: PUSH1 0x00
0000394e: PUSH8 0xffffffffffffffff
00003957: DUP3
00003958: AND
00003959: SWAP1
0000395a: POP
0000395b: SWAP2
0000395c: SWAP1
0000395d: POP
0000395e: JUMP
0000395f: JUMPDEST
00003960: PUSH1 0x00
00003962: PUSH1 0xff
00003964: DUP3
00003965: AND
00003966: SWAP1
00003967: POP
00003968: SWAP2
00003969: SWAP1
0000396a: POP
0000396b: JUMP
0000396c: JUMPDEST
0000396d: PUSH1 0x00
0000396f: PUSH2 0x3977
00003972: DUP3
00003973: PUSH2 0x39c6
00003976: JUMP
00003977: JUMPDEST
00003978: SWAP1
00003979: POP
0000397a: SWAP2
0000397b: SWAP1
0000397c: POP
0000397d: JUMP
0000397e: JUMPDEST
0000397f: PUSH1 0x00
00003981: PUSH2 0x3989
00003984: DUP3
00003985: PUSH2 0x3990
00003988: JUMP
00003989: JUMPDEST
0000398a: SWAP1
0000398b: POP
0000398c: SWAP2
0000398d: SWAP1
0000398e: POP
0000398f: JUMP
00003990: JUMPDEST
00003991: PUSH1 0x00
00003993: PUSH2 0x399b
00003996: DUP3
00003997: PUSH2 0x3911
0000399a: JUMP
0000399b: JUMPDEST
0000399c: SWAP1
0000399d: POP
0000399e: SWAP2
0000399f: SWAP1
000039a0: POP
000039a1: JUMP
000039a2: JUMPDEST
000039a3: PUSH1 0x00
000039a5: PUSH2 0x39ad
000039a8: DUP3
000039a9: PUSH2 0x393b
000039ac: JUMP
000039ad: JUMPDEST
000039ae: SWAP1
000039af: POP
000039b0: SWAP2
000039b1: SWAP1
000039b2: POP
000039b3: JUMP
000039b4: JUMPDEST
000039b5: PUSH1 0x00
000039b7: PUSH2 0x39bf
000039ba: DUP3
000039bb: PUSH2 0x395f
000039be: JUMP
000039bf: JUMPDEST
000039c0: SWAP1
000039c1: POP
000039c2: SWAP2
000039c3: SWAP1
000039c4: POP
000039c5: JUMP
000039c6: JUMPDEST
000039c7: PUSH1 0x00
000039c9: PUSH2 0x39d1
000039cc: DUP3
000039cd: PUSH2 0x39d8
000039d0: JUMP
000039d1: JUMPDEST
000039d2: SWAP1
000039d3: POP
000039d4: SWAP2
000039d5: SWAP1
000039d6: POP
000039d7: JUMP
000039d8: JUMPDEST
000039d9: PUSH1 0x00
000039db: PUSH2 0x39e3
000039de: DUP3
000039df: PUSH2 0x3911
000039e2: JUMP
000039e3: JUMPDEST
000039e4: SWAP1
000039e5: POP
000039e6: SWAP2
000039e7: SWAP1
000039e8: POP
000039e9: JUMP
000039ea: JUMPDEST
000039eb: DUP3
000039ec: DUP2
000039ed: DUP4
000039ee: CALLDATACOPY
000039ef: PUSH1 0x00
000039f1: DUP4
000039f2: DUP4
000039f3: ADD
000039f4: MSTORE
000039f5: POP
000039f6: POP
000039f7: POP
000039f8: JUMP
000039f9: JUMPDEST
000039fa: PUSH1 0x00
000039fc: JUMPDEST
000039fd: DUP4
000039fe: DUP2
000039ff: LT
00003a00: ISZERO
00003a01: PUSH2 0x3a17
00003a04: JUMPI
00003a05: DUP1
00003a06: DUP3
00003a07: ADD
00003a08: MLOAD
00003a09: DUP2
00003a0a: DUP5
00003a0b: ADD
00003a0c: MSTORE
00003a0d: PUSH1 0x20
00003a0f: DUP2
00003a10: ADD
00003a11: SWAP1
00003a12: POP
00003a13: PUSH2 0x39fc
00003a16: JUMP
00003a17: JUMPDEST
00003a18: DUP4
00003a19: DUP2
00003a1a: GT
00003a1b: ISZERO
00003a1c: PUSH2 0x3a26
00003a1f: JUMPI
00003a20: PUSH1 0x00
00003a22: DUP5
00003a23: DUP5
00003a24: ADD
00003a25: MSTORE
00003a26: JUMPDEST
00003a27: POP
00003a28: POP
00003a29: POP
00003a2a: POP
00003a2b: JUMP
00003a2c: JUMPDEST
00003a2d: PUSH2 0x3a35
00003a30: DUP3
00003a31: PUSH2 0x3c3d
00003a34: JUMP
00003a35: JUMPDEST
00003a36: DUP2
00003a37: ADD
00003a38: DUP2
00003a39: DUP2
00003a3a: LT
00003a3b: PUSH8 0xffffffffffffffff
00003a44: DUP3
00003a45: GT
00003a46: OR
00003a47: ISZERO
00003a48: PUSH2 0x3a54
00003a4b: JUMPI
00003a4c: PUSH2 0x3a53
00003a4f: PUSH2 0x3beb
00003a52: JUMP
00003a53: JUMPDEST
00003a54: JUMPDEST
00003a55: DUP1
00003a56: PUSH1 0x40
00003a58: MSTORE
00003a59: POP
00003a5a: POP
00003a5b: POP
00003a5c: JUMP
00003a5d: JUMPDEST
00003a5e: PUSH1 0x00
00003a60: PUSH2 0x3a68
00003a63: DUP3
00003a64: PUSH2 0x3931
00003a67: JUMP
00003a68: JUMPDEST
00003a69: SWAP2
00003a6a: POP
00003a6b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00003a8c: DUP3
00003a8d: EQ
00003a8e: ISZERO
00003a8f: PUSH2 0x3a9b
00003a92: JUMPI
00003a93: PUSH2 0x3a9a
00003a96: PUSH2 0x3b2f
00003a99: JUMP
00003a9a: JUMPDEST
00003a9b: JUMPDEST
00003a9c: PUSH1 0x01
00003a9e: DUP3
00003a9f: ADD
00003aa0: SWAP1
00003aa1: POP
00003aa2: SWAP2
00003aa3: SWAP1
00003aa4: POP
00003aa5: JUMP
00003aa6: JUMPDEST
00003aa7: PUSH1 0x00
00003aa9: PUSH2 0x3ab1
00003aac: DUP3
00003aad: PUSH2 0x393b
00003ab0: JUMP
00003ab1: JUMPDEST
00003ab2: SWAP2
00003ab3: POP
00003ab4: PUSH4 0xffffffff
00003ab9: DUP3
00003aba: EQ
00003abb: ISZERO
00003abc: PUSH2 0x3ac8
00003abf: JUMPI
00003ac0: PUSH2 0x3ac7
00003ac3: PUSH2 0x3b2f
00003ac6: JUMP
00003ac7: JUMPDEST
00003ac8: JUMPDEST
00003ac9: PUSH1 0x01
00003acb: DUP3
00003acc: ADD
00003acd: SWAP1
00003ace: POP
00003acf: SWAP2
00003ad0: SWAP1
00003ad1: POP
00003ad2: JUMP
00003ad3: JUMPDEST
00003ad4: PUSH1 0x00
00003ad6: PUSH2 0x3ade
00003ad9: DUP3
00003ada: PUSH2 0x3b01
00003add: JUMP
00003ade: JUMPDEST
00003adf: SWAP1
00003ae0: POP
00003ae1: SWAP2
00003ae2: SWAP1
00003ae3: POP
00003ae4: JUMP
00003ae5: JUMPDEST
00003ae6: PUSH1 0x00
00003ae8: PUSH2 0x3af0
00003aeb: DUP3
00003aec: PUSH2 0x3b01
00003aef: JUMP
00003af0: JUMPDEST
00003af1: SWAP1
00003af2: POP
00003af3: SWAP2
00003af4: SWAP1
00003af5: POP
00003af6: JUMP
00003af7: JUMPDEST
00003af8: PUSH1 0x00
00003afa: DUP2
00003afb: SWAP1
00003afc: POP
00003afd: SWAP2
00003afe: SWAP1
00003aff: POP
00003b00: JUMP
00003b01: JUMPDEST
00003b02: PUSH1 0x00
00003b04: PUSH2 0x3b0c
00003b07: DUP3
00003b08: PUSH2 0x3c5b
00003b0b: JUMP
00003b0c: JUMPDEST
00003b0d: SWAP1
00003b0e: POP
00003b0f: SWAP2
00003b10: SWAP1
00003b11: POP
00003b12: JUMP
00003b13: JUMPDEST
00003b14: PUSH1 0x00
00003b16: DUP2
00003b17: SWAP1
00003b18: POP
00003b19: SWAP2
00003b1a: SWAP1
00003b1b: POP
00003b1c: JUMP
00003b1d: JUMPDEST
00003b1e: PUSH1 0x00
00003b20: PUSH2 0x3b28
00003b23: DUP3
00003b24: PUSH2 0x3c4e
00003b27: JUMP
00003b28: JUMPDEST
00003b29: SWAP1
00003b2a: POP
00003b2b: SWAP2
00003b2c: SWAP1
00003b2d: POP
00003b2e: JUMP
00003b2f: JUMPDEST
00003b30: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00003b51: PUSH1 0x00
00003b53: MSTORE
00003b54: PUSH1 0x11
00003b56: PUSH1 0x04
00003b58: MSTORE
00003b59: PUSH1 0x24
00003b5b: PUSH1 0x00
00003b5d: REVERT
00003b5e: JUMPDEST
00003b5f: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00003b80: PUSH1 0x00
00003b82: MSTORE
00003b83: PUSH1 0x12
00003b85: PUSH1 0x04
00003b87: MSTORE
00003b88: PUSH1 0x24
00003b8a: PUSH1 0x00
00003b8c: REVERT
00003b8d: JUMPDEST
00003b8e: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00003baf: PUSH1 0x00
00003bb1: MSTORE
00003bb2: PUSH1 0x21
00003bb4: PUSH1 0x04
00003bb6: MSTORE
00003bb7: PUSH1 0x24
00003bb9: PUSH1 0x00
00003bbb: REVERT
00003bbc: JUMPDEST
00003bbd: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00003bde: PUSH1 0x00
00003be0: MSTORE
00003be1: PUSH1 0x32
00003be3: PUSH1 0x04
00003be5: MSTORE
00003be6: PUSH1 0x24
00003be8: PUSH1 0x00
00003bea: REVERT
00003beb: JUMPDEST
00003bec: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00003c0d: PUSH1 0x00
00003c0f: MSTORE
00003c10: PUSH1 0x41
00003c12: PUSH1 0x04
00003c14: MSTORE
00003c15: PUSH1 0x24
00003c17: PUSH1 0x00
00003c19: REVERT
00003c1a: JUMPDEST
00003c1b: PUSH1 0x00
00003c1d: DUP1
00003c1e: REVERT
00003c1f: JUMPDEST
00003c20: PUSH1 0x00
00003c22: DUP1
00003c23: REVERT
00003c24: JUMPDEST
00003c25: PUSH1 0x00
00003c27: DUP1
00003c28: REVERT
00003c29: JUMPDEST
00003c2a: PUSH1 0x00
00003c2c: DUP1
00003c2d: REVERT
00003c2e: JUMPDEST
00003c2f: PUSH1 0x00
00003c31: DUP1
00003c32: REVERT
00003c33: JUMPDEST
00003c34: PUSH1 0x00
00003c36: DUP1
00003c37: REVERT
00003c38: JUMPDEST
00003c39: PUSH1 0x00
00003c3b: DUP1
00003c3c: REVERT
00003c3d: JUMPDEST
00003c3e: PUSH1 0x00
00003c40: PUSH1 0x1f
00003c42: NOT
00003c43: PUSH1 0x1f
00003c45: DUP4
00003c46: ADD
00003c47: AND
00003c48: SWAP1
00003c49: POP
00003c4a: SWAP2
00003c4b: SWAP1
00003c4c: POP
00003c4d: JUMP
00003c4e: JUMPDEST
00003c4f: PUSH1 0x00
00003c51: DUP2
00003c52: PUSH1 0xc0
00003c54: SHL
00003c55: SWAP1
00003c56: POP
00003c57: SWAP2
00003c58: SWAP1
00003c59: POP
00003c5a: JUMP
00003c5b: JUMPDEST
00003c5c: PUSH1 0x00
00003c5e: DUP2
00003c5f: PUSH1 0x60
00003c61: SHL
00003c62: SWAP1
00003c63: POP
00003c64: SWAP2
00003c65: SWAP1
00003c66: POP
00003c67: JUMP
00003c68: JUMPDEST
00003c69: PUSH32 0x45434453413a20696e76616c6964207369676e61747572650000000000000000
00003c8a: PUSH1 0x00
00003c8c: DUP3
00003c8d: ADD
00003c8e: MSTORE
00003c8f: POP
00003c90: JUMP
00003c91: JUMPDEST
00003c92: PUSH32 0x6d757374206265207468726f756768206163746976652070726f787900000000
00003cb3: PUSH1 0x00
00003cb5: DUP3
00003cb6: ADD
00003cb7: MSTORE
00003cb8: POP
00003cb9: JUMP
00003cba: JUMPDEST
00003cbb: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265206c656e67746800
00003cdc: PUSH1 0x00
00003cde: DUP3
00003cdf: ADD
00003ce0: MSTORE
00003ce1: POP
00003ce2: JUMP
00003ce3: JUMPDEST
00003ce4: PUSH32 0x4e6f7420656e6f756768207369676e6174757265730000000000000000000000
00003d05: PUSH1 0x00
00003d07: DUP3
00003d08: ADD
00003d09: MSTORE
00003d0a: POP
00003d0b: JUMP
00003d0c: JUMPDEST
00003d0d: PUSH32 0x556e61626c6520746f207665726966792070726f6f6600000000000000000000
00003d2e: PUSH1 0x00
00003d30: DUP3
00003d31: ADD
00003d32: MSTORE
00003d33: POP
00003d34: JUMP
00003d35: JUMPDEST
00003d36: PUSH32 0x496e76616c69642064657374696e6174696f6e00000000000000000000000000
00003d57: PUSH1 0x00
00003d59: DUP3
00003d5a: ADD
00003d5b: MSTORE
00003d5c: POP
00003d5d: JUMP
00003d5e: JUMPDEST
00003d5f: PUSH32 0x556e61626c6520746f20776974686472617720616d6f756e7400000000000000
00003d80: PUSH1 0x00
00003d82: DUP3
00003d83: ADD
00003d84: MSTORE
00003d85: POP
00003d86: JUMP
00003d87: JUMPDEST
00003d88: PUSH32 0x496e76616c6964207369676e6174757265000000000000000000000000000000
00003da9: PUSH1 0x00
00003dab: DUP3
00003dac: ADD
00003dad: MSTORE
00003dae: POP
00003daf: JUMP
00003db0: JUMPDEST
00003db1: PUSH32 0x5769746864726177616c20616c72656164792070726f63657373656400000000
00003dd2: PUSH1 0x00
00003dd4: DUP3
00003dd5: ADD
00003dd6: MSTORE
00003dd7: POP
00003dd8: JUMP
00003dd9: JUMPDEST
00003dda: PUSH32 0x416464726573733a20756e61626c6520746f2073656e642076616c75652c2072
00003dfb: PUSH1 0x00
00003dfd: DUP3
00003dfe: ADD
00003dff: MSTORE
00003e00: PUSH32 0x6563697069656e74206d61792068617665207265766572746564000000000000
00003e21: PUSH1 0x20
00003e23: DUP3
00003e24: ADD
00003e25: MSTORE
00003e26: POP
00003e27: JUMP
00003e28: JUMPDEST
00003e29: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202773272076616c
00003e4a: PUSH1 0x00
00003e4c: DUP3
00003e4d: ADD
00003e4e: MSTORE
00003e4f: PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000
00003e70: PUSH1 0x20
00003e72: DUP3
00003e73: ADD
00003e74: MSTORE
00003e75: POP
00003e76: JUMP
00003e77: JUMPDEST
00003e78: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000
00003e99: PUSH1 0x00
00003e9b: DUP3
00003e9c: ADD
00003e9d: MSTORE
00003e9e: POP
00003e9f: JUMP
00003ea0: JUMPDEST
00003ea1: PUSH32 0x436f756c64206e6f7420766572696679207369676e6174757265000000000000
00003ec2: PUSH1 0x00
00003ec4: DUP3
00003ec5: ADD
00003ec6: MSTORE
00003ec7: POP
00003ec8: JUMP
00003ec9: JUMPDEST
00003eca: PUSH32 0x45524331393637557067726164653a20756e737570706f727465642070726f78
00003eeb: PUSH1 0x00
00003eed: DUP3
00003eee: ADD
00003eef: MSTORE
00003ef0: PUSH32 0x6961626c65555549440000000000000000000000000000000000000000000000
00003f11: PUSH1 0x20
00003f13: DUP3
00003f14: ADD
00003f15: MSTORE
00003f16: POP
00003f17: JUMP
00003f18: JUMPDEST
00003f19: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561
00003f3a: PUSH1 0x00
00003f3c: DUP3
00003f3d: ADD
00003f3e: MSTORE
00003f3f: PUSH32 0x647920696e697469616c697a6564000000000000000000000000000000000000
00003f60: PUSH1 0x20
00003f62: DUP3
00003f63: ADD
00003f64: MSTORE
00003f65: POP
00003f66: JUMP
00003f67: JUMPDEST
00003f68: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202776272076616c
00003f89: PUSH1 0x00
00003f8b: DUP3
00003f8c: ADD
00003f8d: MSTORE
00003f8e: PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000
00003faf: PUSH1 0x20
00003fb1: DUP3
00003fb2: ADD
00003fb3: MSTORE
00003fb4: POP
00003fb5: JUMP
00003fb6: JUMPDEST
00003fb7: PUSH32 0x45524331393637557067726164653a206e657720696d706c656d656e74617469
00003fd8: PUSH1 0x00
00003fda: DUP3
00003fdb: ADD
00003fdc: MSTORE
00003fdd: PUSH32 0x6f6e206973206e6f742055555053000000000000000000000000000000000000
00003ffe: PUSH1 0x20
00004000: DUP3
00004001: ADD
00004002: MSTORE
00004003: POP
00004004: JUMP
00004005: JUMPDEST
00004006: PUSH32 0x496e76616c6964206465706f73697420616d6f756e7400000000000000000000
00004027: PUSH1 0x00
00004029: DUP3
0000402a: ADD
0000402b: MSTORE
0000402c: POP
0000402d: JUMP
0000402e: JUMPDEST
0000402f: PUSH32 0x496e76616c6964206e6f6e636520666f72206f7261636c652075706461746500
00004050: PUSH1 0x00
00004052: DUP3
00004053: ADD
00004054: MSTORE
00004055: POP
00004056: JUMP
00004057: JUMPDEST
00004058: PUSH32 0x455243313936373a206e657720696d706c656d656e746174696f6e206973206e
00004079: PUSH1 0x00
0000407b: DUP3
0000407c: ADD
0000407d: MSTORE
0000407e: PUSH32 0x6f74206120636f6e747261637400000000000000000000000000000000000000
0000409f: PUSH1 0x20
000040a1: DUP3
000040a2: ADD
000040a3: MSTORE
000040a4: POP
000040a5: JUMP
000040a6: JUMPDEST
000040a7: PUSH32 0x6d757374206265207468726f7567682064656c656761746563616c6c00000000
000040c8: PUSH1 0x00
000040ca: DUP3
000040cb: ADD
000040cc: MSTORE
000040cd: POP
000040ce: JUMP
000040cf: JUMPDEST
000040d0: PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f
000040f1: PUSH1 0x00
000040f3: DUP3
000040f4: ADD
000040f5: MSTORE
000040f6: PUSH32 0x6e74726163740000000000000000000000000000000000000000000000000000
00004117: PUSH1 0x20
00004119: DUP3
0000411a: ADD
0000411b: MSTORE
0000411c: POP
0000411d: JUMP
0000411e: JUMPDEST
0000411f: POP
00004120: JUMP
00004121: JUMPDEST
00004122: PUSH32 0x6d757374206e6f74206265207468726f7567682064656c656761746563616c6c
00004143: PUSH1 0x00
00004145: DUP3
00004146: ADD
00004147: MSTORE
00004148: POP
00004149: JUMP
0000414a: JUMPDEST
0000414b: PUSH32 0x4e6f206f7261636c657300000000000000000000000000000000000000000000
0000416c: PUSH1 0x00
0000416e: DUP3
0000416f: ADD
00004170: MSTORE
00004171: POP
00004172: JUMP
00004173: JUMPDEST
00004174: PUSH2 0x417c
00004177: DUP2
00004178: PUSH2 0x3899
0000417b: JUMP
0000417c: JUMPDEST
0000417d: DUP2
0000417e: EQ
0000417f: PUSH2 0x4187
00004182: JUMPI
00004183: PUSH1 0x00
00004185: DUP1
00004186: REVERT
00004187: JUMPDEST
00004188: POP
00004189: JUMP
0000418a: JUMPDEST
0000418b: PUSH2 0x4193
0000418e: DUP2
0000418f: PUSH2 0x38ab
00004192: JUMP
00004193: JUMPDEST
00004194: DUP2
00004195: EQ
00004196: PUSH2 0x419e
00004199: JUMPI
0000419a: PUSH1 0x00
0000419c: DUP1
0000419d: REVERT
0000419e: JUMPDEST
0000419f: POP
000041a0: JUMP
000041a1: JUMPDEST
000041a2: PUSH2 0x41aa
000041a5: DUP2
000041a6: PUSH2 0x38bd
000041a9: JUMP
000041aa: JUMPDEST
000041ab: DUP2
000041ac: EQ
000041ad: PUSH2 0x41b5
000041b0: JUMPI
000041b1: PUSH1 0x00
000041b3: DUP1
000041b4: REVERT
000041b5: JUMPDEST
000041b6: POP
000041b7: JUMP
000041b8: JUMPDEST
000041b9: PUSH2 0x41c1
000041bc: DUP2
000041bd: PUSH2 0x38c9
000041c0: JUMP
000041c1: JUMPDEST
000041c2: DUP2
000041c3: EQ
000041c4: PUSH2 0x41cc
000041c7: JUMPI
000041c8: PUSH1 0x00
000041ca: DUP1
000041cb: REVERT
000041cc: JUMPDEST
000041cd: POP
000041ce: JUMP
000041cf: JUMPDEST
000041d0: PUSH2 0x41d8
000041d3: DUP2
000041d4: PUSH2 0x38f5
000041d7: JUMP
000041d8: JUMPDEST
000041d9: DUP2
000041da: EQ
000041db: PUSH2 0x41e3
000041de: JUMPI
000041df: PUSH1 0x00
000041e1: DUP1
000041e2: REVERT
000041e3: JUMPDEST
000041e4: POP
000041e5: JUMP
000041e6: JUMPDEST
000041e7: PUSH2 0x41ef
000041ea: DUP2
000041eb: PUSH2 0x38ff
000041ee: JUMP
000041ef: JUMPDEST
000041f0: DUP2
000041f1: EQ
000041f2: PUSH2 0x41fa
000041f5: JUMPI
000041f6: PUSH1 0x00
000041f8: DUP1
000041f9: REVERT
000041fa: JUMPDEST
000041fb: POP
000041fc: JUMP
000041fd: JUMPDEST
000041fe: PUSH2 0x4206
00004201: DUP2
00004202: PUSH2 0x3931
00004205: JUMP
00004206: JUMPDEST
00004207: DUP2
00004208: EQ
00004209: PUSH2 0x4211
0000420c: JUMPI
0000420d: PUSH1 0x00
0000420f: DUP1
00004210: REVERT
00004211: JUMPDEST
00004212: POP
00004213: JUMP
00004214: JUMPDEST
00004215: PUSH2 0x421d
00004218: DUP2
00004219: PUSH2 0x393b
0000421c: JUMP
0000421d: JUMPDEST
0000421e: DUP2
0000421f: EQ
00004220: PUSH2 0x4228
00004223: JUMPI
00004224: PUSH1 0x00
00004226: DUP1
00004227: REVERT
00004228: JUMPDEST
00004229: POP
0000422a: JUMP
0000422b: JUMPDEST
0000422c: PUSH2 0x4234
0000422f: DUP2
00004230: PUSH2 0x394b
00004233: JUMP
00004234: JUMPDEST
00004235: DUP2
00004236: EQ
00004237: PUSH2 0x423f
0000423a: JUMPI
0000423b: PUSH1 0x00
0000423d: DUP1
0000423e: REVERT
0000423f: JUMPDEST
00004240: POP
00004241: JUMP
00004242: INVALID
00004243: COINBASE
00004244: PUSH5 0x6472657373
0000424a: GASPRICE
0000424b: KECCAK256
0000424c: PUSH13 0x6f772d6c6576656c2064656c65
0000425a: PUSH8 0x6174652063616c6c
00004263: KECCAK256
00004264: PUSH7 0x61696c6564a264
0000426c: PUSH10 0x70667358221220569a15
00004277: ORIGIN
00004278: PUSH27 0x2ccc3fc8b285be7a0c08fd860cd6f57e1a4d060ae04c2037f8fb63
00004294: PUSH5 0x736f6c6343
0000429a: STOP
0000429b: ADDMOD
0000429c: MOD
0000429d: STOP
0000429e: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high upgradeability detector Untrusted DELEGATECALL target reachable 55 no no
view
trace_id: 0x25072f8515fcd5e77a76fc24a79f05dc28c353307892a2aa606c168214e1eec6
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0x25072f8515fcd5e77a76fc24a79f05dc28c353307892a2aa606c168214e1eec6",
    "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": "0xde35f5cb",
            "selector": "0xde35f5cb",
            "calldata_variants": [
                "0xde35f5cb",
                "0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdfbc6269",
            "selector": "0xdfbc6269",
            "calldata_variants": [
                "0xdfbc6269",
                "0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe0acac7f",
            "selector": "0xe0acac7f",
            "calldata_variants": [
                "0xe0acac7f",
                "0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed72eb24",
            "selector": "0xed72eb24",
            "calldata_variants": [
                "0xed72eb24",
                "0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf358ec61",
            "selector": "0xf358ec61",
            "calldata_variants": [
                "0xf358ec61",
                "0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x744d49cc",
            "selector": "0x744d49cc",
            "calldata_variants": [
                "0x744d49cc",
                "0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb2b22a85",
            "selector": "0xb2b22a85",
            "calldata_variants": [
                "0xb2b22a85",
                "0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb81f853c",
            "selector": "0xb81f853c",
            "calldata_variants": [
                "0xb81f853c",
                "0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 8827,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [
        {
            "pc": 17015,
            "type": "tx_origin_used"
        }
    ],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
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": "0xde35f5cb",
            "selector": "0xde35f5cb",
            "calldata_variants": [
                "0xde35f5cb",
                "0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdfbc6269",
            "selector": "0xdfbc6269",
            "calldata_variants": [
                "0xdfbc6269",
                "0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe0acac7f",
            "selector": "0xe0acac7f",
            "calldata_variants": [
                "0xe0acac7f",
                "0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed72eb24",
            "selector": "0xed72eb24",
            "calldata_variants": [
                "0xed72eb24",
                "0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf358ec61",
            "selector": "0xf358ec61",
            "calldata_variants": [
                "0xf358ec61",
                "0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x744d49cc",
            "selector": "0x744d49cc",
            "calldata_variants": [
                "0x744d49cc",
                "0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb2b22a85",
            "selector": "0xb2b22a85",
            "calldata_variants": [
                "0xb2b22a85",
                "0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb81f853c",
            "selector": "0xb81f853c",
            "calldata_variants": [
                "0xb81f853c",
                "0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 17015,
            "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
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975
call_targets: 0x6191d13860d792487bbd89e63e4c877dbb56d397
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6191d13860d792487bbd89e63e4c877dbb56d397"
    ],
    "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": "0xde35f5cb",
            "selector": "0xde35f5cb",
            "calldata_variants": [
                "0xde35f5cb",
                "0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdfbc6269",
            "selector": "0xdfbc6269",
            "calldata_variants": [
                "0xdfbc6269",
                "0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe0acac7f",
            "selector": "0xe0acac7f",
            "calldata_variants": [
                "0xe0acac7f",
                "0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed72eb24",
            "selector": "0xed72eb24",
            "calldata_variants": [
                "0xed72eb24",
                "0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf358ec61",
            "selector": "0xf358ec61",
            "calldata_variants": [
                "0xf358ec61",
                "0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x744d49cc",
            "selector": "0x744d49cc",
            "calldata_variants": [
                "0x744d49cc",
                "0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb2b22a85",
            "selector": "0xb2b22a85",
            "calldata_variants": [
                "0xb2b22a85",
                "0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb81f853c",
            "selector": "0xb81f853c",
            "calldata_variants": [
                "0xb81f853c",
                "0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 6162,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [
        {
            "pc": 17015,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 1
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975
call_targets: 0x6191d13860d792487bbd89e63e4c877dbb56d397
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6191d13860d792487bbd89e63e4c877dbb56d397"
    ],
    "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": "0xde35f5cb",
            "selector": "0xde35f5cb",
            "calldata_variants": [
                "0xde35f5cb",
                "0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdfbc6269",
            "selector": "0xdfbc6269",
            "calldata_variants": [
                "0xdfbc6269",
                "0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe0acac7f",
            "selector": "0xe0acac7f",
            "calldata_variants": [
                "0xe0acac7f",
                "0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed72eb24",
            "selector": "0xed72eb24",
            "calldata_variants": [
                "0xed72eb24",
                "0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf358ec61",
            "selector": "0xf358ec61",
            "calldata_variants": [
                "0xf358ec61",
                "0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x744d49cc",
            "selector": "0x744d49cc",
            "calldata_variants": [
                "0x744d49cc",
                "0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb2b22a85",
            "selector": "0xb2b22a85",
            "calldata_variants": [
                "0xb2b22a85",
                "0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb81f853c",
            "selector": "0xb81f853c",
            "calldata_variants": [
                "0xb81f853c",
                "0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 6162,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": [
        {
            "pc": 17015,
            "type": "tx_origin_used"
        }
    ]
}