ca4ebaa4-3f93-4558-89c8-3273e5339f48
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31157 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 76756 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 76757 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 76758 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 76759 | capability.graph | complete | 1 / 3 | 1 week ago |
| 76760 | detector.run | complete | 1 / 3 | 1 week ago |
| 76761 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:133900] OpenAI Codex v0.77.0 (research preview)
[codex:133900] --------
[codex:133900] workdir: /tmp/codex-multi-z6_afl3k
[codex:133900] model: gpt-5.2-codex
[codex:133900] provider: openai
[codex:133900] approval: never
[codex:133900] sandbox: read-only
[codex:133900] reasoning effort: xhigh
[codex:133900] reasoning summaries: auto
[codex:133900] session id: 019b7ba6-f1d7-7c91-bf2c-40d05c563c95
[codex:133900] --------
[codex:133900] user
[codex:133900] 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:133900]
[codex:133900] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:133900]
[codex:133900] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:133900] - Gas inefficiency, code quality, or best practices
[codex:133900] - Theoretical vulnerabilities without a clear extraction path
[codex:133900] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:133900] - Issues requiring social engineering or off-chain coordination
[codex:133900]
[codex:133900] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:133900] - CALL/DELEGATECALL with controllable destination or calldata
[codex:133900] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:133900] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:133900] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:133900] - External calls before state updates (reentrancy)
[codex:133900] - SELFDESTRUCT with controllable beneficiary
[codex:133900] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:133900]
[codex:133900] For each finding, you MUST explain:
[codex:133900] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:133900] 2. The concrete sequence of transactions to extract value
[codex:133900] 3. Why you believe this is exploitable (not just suspicious)
[codex:133900]
[codex:133900] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:133900] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:133900]
[codex:133900] Output MUST be valid JSON matching the provided schema.
[codex:133900] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:133900] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:133900] mcp startup: no servers
[codex:133900]
[codex:133900] thinking
[codex:133900] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:133900] exec
[codex:133900] /bin/bash -lc ls in /tmp/codex-multi-z6_afl3k succeeded in 6ms:
[codex:133900] BYTECODE_BUNDLE.txt
[codex:133900] codex-output-schema.json
[codex:133900]
[codex:133900] thinking
[codex:133900] **Reading a file**
[codex:133900] exec
[codex:133900] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-z6_afl3k succeeded in 5ms:
[codex:133900] Runtime bytecode bundle for best-effort auditing.
[codex:133900] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:133900]
[codex:133900] FILE: runtime_bytecode.hex
[codex:133900] 0x60606040523615610168576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a19b14a1461017d5780630b9276661461024457806319774d43146102bd578063278b8c0e146103145780632e1a7d4d146103b3578063338b5dea146103d35780633fb9950a1461041257806346be96c314610467578063508493bc1461053957806354d03b5c146105a257806357786394146105c25780635e1d7ae4146105e857806365e17c9d146106085780636c86888b1461065a57806371ffcb1614610758578063731c2f811461078e5780638823a9c0146107b45780638f283970146107d45780639e281a981461080a578063bb5f462914610849578063c281309e146108a4578063d0e30db0146108ca578063e8f6bc2e146108d4578063f34129421461090a578063f7888aec1461095c578063f851a440146109c5578063fa2d9ff014610a17578063fb6e155f14610a8d575b341561017057fe5b61017b5b610000565b565b005b341561018557fe5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091908035906020019091905050610b5f565b005b341561024c57fe5b6102bb600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190505061105f565b005b34156102c557fe5b6102fe600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919050506112e6565b6040518082815260200191505060405180910390f35b341561031c57fe5b6103b1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190505061130b565b005b34156103bb57fe5b6103d1600480803590602001909190505061171e565b005b34156103db57fe5b610410600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611a31565b005b341561041a57fe5b610465600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d81565b005b341561046f57fe5b610523600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050611e60565b6040518082815260200191505060405180910390f35b341561054157fe5b61058c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611fee565b6040518082815260200191505060405180910390f35b34156105aa57fe5b6105c06004808035906020019091905050612013565b005b34156105ca57fe5b6105d2612089565b6040518082815260200191505060405180910390f35b34156105f057fe5b610606600480803590602001909190505061208f565b005b341561061057fe5b610618612111565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561066257fe5b61073e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612137565b604051808215151515815260200191505060405180910390f35b341561076057fe5b61078c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121fa565b005b341561079657fe5b61079e61229b565b6040518082815260200191505060405180910390f35b34156107bc57fe5b6107d260048080359060200190919050506122a1565b005b34156107dc57fe5b610808600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612323565b005b341561081257fe5b610847600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506123c4565b005b341561085157fe5b61088a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560001916906020019091905050612769565b604051808215151515815260200191505060405180910390f35b34156108ac57fe5b6108b4612798565b6040518082815260200191505060405180910390f35b6108d261279e565b005b34156108dc57fe5b610908600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612976565b005b341561091257fe5b61091a612a17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561096457fe5b6109af600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612a3d565b6040518082815260200191505060405180910390f35b34156109cd57fe5b6109d5612ac5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a1f57fe5b610a4b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612aeb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a9557fe5b610b49600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050612b1e565b6040518082815260200191505060405180910390f35b60006002308d8d8d8d8d8d600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515610c7557fe5b5050604051805190509050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1680610de457508573ffffffffffffffffffffffffffffffffffffffff1660018260405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020878787604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f11515610dc357fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b8015610df05750874311155b8015610e5d57508a610e5a600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084600019166000191681526020019081526020016000205484612ee0565b11155b1515610e6857610000565b610e768c8c8c8c8a87612f0c565b610ed8600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083600019166000191681526020019081526020016000205483612ee0565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360001916600019168152602001908152602001600020819055507f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8c838c8e868e02811515610f6557fe5b048a33604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a15b505050505050505050505050565b6000600230888888888888600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f1151561117557fe5b50506040518051905090506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e8587878787878733604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15b50505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b60006002308b8b8b8b8b8b600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f1151561142157fe5b5050604051805190509050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff168061159057503373ffffffffffffffffffffffffffffffffffffffff1660018260405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020868686604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f1151561156f57fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b151561159b57610000565b88600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360001916600019168152602001908152602001600020819055507f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b08a8a8a8a8a8a338b8b8b604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019a505050505050505050505060405180910390a15b50505050505050505050565b60008160066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561179457610000565b61180560066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613674565b60066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1614156118f5573390505b8073ffffffffffffffffffffffffffffffffffffffff168260405180905060006040518083038185876185025a03f192505050151561193357610000565b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5676000338460066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b60008273ffffffffffffffffffffffffffffffffffffffff161415611a5557610000565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611b3157fe5b60325a03f11515611b3e57fe5b505050604051805190501515611b5357610000565b611bd9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612ee0565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7823383600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ddd57610000565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b600060006002308d8d8d8d8d8d600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515611f7857fe5b5050604051805190509050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082600019166000191681526020019081526020016000205491505b509a9950505050505050505050565b6006602052816000526040600020602052806000526040600020600091509150505481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561206f57610000565b60035481111561207e57610000565b806003819055505b50565b60035481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120eb57610000565b6005548110806120fc575060045481115b1561210657610000565b806005819055505b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156121d65750826121d38e8e8e8e8e8e8e8e8e8e612b1e565b10155b15156121e557600090506121ea565b600190505b9c9b505050505050505050505050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561225657610000565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60055481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122fd57610000565b60045481118061230e575060055481105b1561231857610000565b806004819055505b50565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561237f57610000565b80600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008273ffffffffffffffffffffffffffffffffffffffff1614156123e857610000565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561247157610000565b6124f7600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613674565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561261f57fe5b60325a03f1151561262c57fe5b50505060405180519050151561264157610000565b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567823383600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60045481565b61280f60066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205434612ee0565b60066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76000333460066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129d257610000565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b92915050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006000600060006002308f8f8f8f8f8f600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515612c3a57fe5b5050604051805190509250600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060009054906101000a900460ff1680612da957508773ffffffffffffffffffffffffffffffffffffffff1660018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020898989604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f11515612d8857fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b8015612db55750894311155b1515612dc45760009350612ecf565b612e268d600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000866000191660001916815260200190815260200160002054613674565b91508a612eaf600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548f61368e565b811515612eb857fe5b04905080821015612ecb57819350612ecf565b8093505b5050509a9950505050505050505050565b600060008284019050612f01848210158015612efc5750838210155b6136c3565b8091505b5092915050565b6000600060006000670de0b6b3a7640000612f298660035461368e565b811515612f3257fe5b049350670de0b6b3a7640000612f4a8660045461368e565b811515612f5357fe5b049250600091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156130b057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cbd0519876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561305e57fe5b60325a03f1151561306b57fe5b50505060405180519050905060018114156130a257670de0b6b3a76400006130958660055461368e565b81151561309e57fe5b0491505b60028114156130af578291505b5b61313f600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461313a8786612ee0565b613674565b600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613257600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325261324c8886612ee0565b87613674565b612ee0565b600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613391600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338c6133868787612ee0565b85613674565b612ee0565b600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134cd600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a6134be8a8961368e565b8115156134c757fe5b04613674565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135e7600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a6135d88a8961368e565b8115156135e157fe5b04612ee0565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505050505050505050565b6000613682838311156136c3565b81830390505b92915050565b6000600082840290506136b860008514806136b357508385838115156136b057fe5b04145b6136c3565b8091505b5092915050565b8015156136cf57610000565b5b505600a165627a7a723058206e7a5e93b60f6ddaa2caa7cb5cb601022fa06959a3b5bc2f667b20353f8e97a30029
[codex:133900]
[codex:133900] thinking
[codex:133900] **Searching for dangerous opcodes**
[codex:133900]
[codex:133900] I'm trying to find potential exploit paths by identifying critical opcodes like SELFDESTRUCT, DELEGATECALL, and CALL in the bytecode. Since the bytecode is large and hex-encoded with data mixed in, I'll look for opcode patterns like "ff" and "f4" carefully, possibly using shell commands to check for tools like `evm` or disassemblers available offline.
[codex:133900] exec
[codex:133900] /bin/bash -lc 'which evm' in /tmp/codex-multi-z6_afl3k exited 1 in 6ms:
[codex:133900]
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing contract bytecode for vulnerabilities**
[codex:133900]
[codex:133900] I'm exploring the contract's bytecode to identify function selectors, patterns like ownership checks, token transfers, and crucial opcodes such as selfdestruct or delegatecall. I’m considering writing a simple Python disassembler to parse opcodes and map functions to check for missing access controls or unprotected withdrawal functionality. This deep dive should help clarify if there’s a concrete exploit lurking in the contract.
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import binascii
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] # extract runtime_bytecode.hex line after prefix
[codex:133900] import re
[codex:133900] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata)
[codex:133900] if not m:
[codex:133900] print('not found')
[codex:133900] raise SystemExit
[codex:133900] hexstr=m.group(1)[2:]
[codex:133900] code=bytes.fromhex(hexstr)
[codex:133900] # opcode table
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',
[codex:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] # find offsets of certain opcodes
[codex:133900] interesting={0xf1:'CALL',0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT'}
[codex:133900] idx=0
[codex:133900] hits=[]
[codex:133900] while idx<len(code):
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if op in interesting:
[codex:133900] hits.append((idx, name))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] idx+=1
[codex:133900] print('hits', hits[:20], '... total', len(hits))
[codex:133900] print('delegatecall hits', [h for h in hits if h[1]=='DELEGATECALL'][:10])
[codex:133900] print('selfdestruct hits', [h for h in hits if h[1]=='SELFDESTRUCT'])
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] hits [(3181, 'CALL'), (3515, 'CALL'), (4461, 'CALL'), (5145, 'CALL'), (5479, 'CALL'), (6436, 'CALL'), (6966, 'CALL'), (8048, 'CALL'), (9764, 'CALL'), (11314, 'CALL'), (11648, 'CALL'), (12387, 'CALL')] ... total 12
[codex:133900] delegatecall hits []
[codex:133900] selfdestruct hits []
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing CALL instructions for vulnerabilities**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import binascii, re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata)
[codex:133900] hexstr=m.group(1)[2:]
[codex:133900] code=bytes.fromhex(hexstr)
[codex:133900] # op names
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',
[codex:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] # produce disassembly list with offsets
[codex:133900] ops=[]
[codex:133900] idx=0
[codex:133900] while idx < len(code):
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] start=idx
[codex:133900] if 0x60 <= op <= 0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] ops.append((start, name, data.hex()))
[codex:133900] idx += 1+n
[codex:133900] else:
[codex:133900] ops.append((start, name, None))
[codex:133900] idx += 1
[codex:133900] # find CALLs
[codex:133900] call_offsets=[o[0] for o in ops if o[1]=='CALL']
[codex:133900] print('CALL offsets', call_offsets)
[codex:133900] # build index from offset to op index
[codex:133900] idx_map={o[0]:i for i,o in enumerate(ops)}
[codex:133900] for off in call_offsets:
[codex:133900] i=idx_map[off]
[codex:133900] # show 15 ops before and 5 after
[codex:133900] start=max(0, i-18)
[codex:133900] end=min(len(ops), i+6)
[codex:133900] print('\\n-- CALL at', off, '--')
[codex:133900] for o in ops[start:end]:
[codex:133900] if o[0]==off:
[codex:133900] marker='>>'
[codex:133900] else:
[codex:133900] marker=' '
[codex:133900] if o[2] is None:
[codex:133900] print(f\"{marker}{o[0]:04x}: {o[1]}\")
[codex:133900] else:
[codex:133900] print(f\"{marker}{o[0]:04x}: {o[1]} {o[2]}\")
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 34ms:
[codex:133900] CALL offsets [3181, 3515, 4461, 5145, 5479, 6436, 6966, 8048, 9764, 11314, 11648, 12387]
[codex:133900]
[codex:133900] -- CALL at 3181 --
[codex:133900] 0c56: POP
[codex:133900] 0c57: POP
[codex:133900] 0c58: POP
[codex:133900] 0c59: POP
[codex:133900] 0c5a: POP
[codex:133900] 0c5b: POP
[codex:133900] 0c5c: PUSH1 20
[codex:133900] 0c5e: PUSH1 40
[codex:133900] 0c60: MLOAD
[codex:133900] 0c61: DUP1
[codex:133900] 0c62: DUP4
[codex:133900] 0c63: SUB
[codex:133900] 0c64: DUP2
[codex:133900] 0c65: PUSH1 00
[codex:133900] 0c67: DUP7
[codex:133900] 0c68: PUSH2 61da
[codex:133900] 0c6b: GAS
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing external contract calls and potential vulnerabilities**
[codex:133900]
[codex:133900] I’m examining multiple CALL instructions that interact with token contracts and the ecrecover precompile, trying to identify if there’s any risky Ether transfer via CALL with value that could allow reentrancy. I want to decode the call parameters around suspected transfer points, map function offsets, and understand signature verification and nonce handling to spot any bugs or exploits. It’s a detailed low-level inspection, so I’m considering scripting to assist in parsing jump destinations and opcode sequences.
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata)
[codex:133900] code=bytes.fromhex(m.group(1)[2:])
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',
[codex:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] # disassemble region around offset
[codex:133900] start=0x1860
[codex:133900] end=0x1950
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 29ms:
[codex:133900] 1860: MSTORE
[codex:133900] 1861: PUSH1 20
[codex:133900] 1863: ADD
[codex:133900] 1864: SWAP1
[codex:133900] 1865: DUP2
[codex:133900] 1866: MSTORE
[codex:133900] 1867: PUSH1 20
[codex:133900] 1869: ADD
[codex:133900] 186a: PUSH1 00
[codex:133900] 186c: SHA3
[codex:133900] 186d: DUP2
[codex:133900] 186e: SWAP1
[codex:133900] 186f: SSTORE
[codex:133900] 1870: POP
[codex:133900] 1871: PUSH1 09
[codex:133900] 1873: PUSH1 00
[codex:133900] 1875: CALLER
[codex:133900] 1876: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 188b: AND
[codex:133900] 188c: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing complex EVM function and contract behavior**
[codex:133900]
[codex:133900] This is a deep dive into EVM bytecode exploring a function likely handling ETH withdrawal, mapping storage access, and a call to an external address. I'm tracing function selectors and inspecting stack operations to identify calls and parameters, suspecting the contract resembles EtherDelta with deposit, withdraw, and token trade functions. I'm cross-referencing known selectors and contract patterns to understand potential vulnerabilities and contract identity. It’s a lot to unpack, so I’m considering programmatic simulation to better analyze call arguments and state changes.
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] try:
[codex:133900] import sha3
[codex:133900] k=sha3.keccak_256(b'depositToken(address,uint256)').hexdigest()
[codex:133900] print(k[:8])
[codex:133900] except Exception as e:
[codex:133900] print('err', e)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 19ms:
[codex:133900] err No module named 'sha3'
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing EtherDelta contract function signatures and vulnerabilities**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x1a31
[codex:133900] start=0x1a00
[codex:133900] end=0x1b80
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] 1a00: SELFDESTRUCT
[codex:133900] 1a01: SELFDESTRUCT
[codex:133900] 1a02: SELFDESTRUCT
[codex:133900] 1a03: SELFDESTRUCT
[codex:133900] 1a04: SELFDESTRUCT
[codex:133900] 1a05: SELFDESTRUCT
[codex:133900] 1a06: SELFDESTRUCT
[codex:133900] 1a07: SELFDESTRUCT
[codex:133900] 1a08: SELFDESTRUCT
[codex:133900] 1a09: SELFDESTRUCT
[codex:133900] 1a0a: SELFDESTRUCT
[codex:133900] 1a0b: SELFDESTRUCT
[codex:133900] 1a0c: SELFDESTRUCT
[codex:133900] 1a0d: AND
[codex:133900] 1a0e: DUP2
[codex:133900] 1a0f: MSTORE
[codex:133900] 1a10: PUSH1 20
[codex:133900] 1a12: ADD
[codex:133900] 1a13: DUP4
[codex:133900] 1a14: DUP2
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing depositToken function bytecode**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x23c4
[codex:133900] start=0x23a0
[codex:133900] end=0x26a0
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 27ms:
[codex:133900] 23a0: SELFDESTRUCT
[codex:133900] 23a1: MUL
[codex:133900] 23a2: NOT
[codex:133900] 23a3: AND
[codex:133900] 23a4: SWAP1
[codex:133900] 23a5: DUP4
[codex:133900] 23a6: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 23bb: AND
[codex:133900] 23bc: MUL
[codex:133900] 23bd: OR
[codex:133900] 23be: SWAP1
[codex:133900] 23bf: SSTORE
[codex:133900] 23c0: POP
[codex:133900] 23c1: JUMPDEST
[codex:133900] 23c2: POP
[codex:133900] 23c3: JUMP
[codex:133900] 23c4: JUMPDEST
[codex:133900] 23c5: PUSH1 00
[codex:133900] 23c7: DUP3
[codex:133900] 23c8: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing token withdrawal and signature validation**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] try:
[codex:133900] from Crypto.Hash import keccak
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(b'depositToken(address,uint256)')
[codex:133900] print(k.hexdigest()[:8])
[codex:133900] except Exception as e:
[codex:133900] print('err', e)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 39ms:
[codex:133900] 338b5dea
[codex:133900]
[codex:133900] thinking
[codex:133900] **Computing function selectors for matching**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def selector(sig:str):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] selectors=[
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f']
[codex:133900]
[codex:133900] # known EtherDelta names
[codex:133900] sigs=[
[codex:133900] 'deposit()',
[codex:133900] 'withdraw(uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'balanceOf(address,address)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'getFeeAccount()',
[codex:133900] 'feeAccount()',
[codex:133900] 'admin()',
[codex:133900] 'setAdmin(address)',
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'token(address,address)',
[codex:133900] 'getToken(address)',
[codex:133900] 'withdrawAdmin(uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'withdrawTokenFor(address,address,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900]
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in sigs:
[codex:133900] sel=selector(sig)
[codex:133900] if sel in selectors:
[codex:133900] print(sig, sel)
[codex:133900]
[codex:133900] # print selectors for few to identify
[codex:133900] print('depositToken selector', selector('depositToken(address,uint256)'))
[codex:133900] print('withdrawToken selector', selector('withdrawToken(address,uint256)'))
[codex:133900] print('trade selector', selector('trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)'))
[codex:133900] print('cancelOrder selector', selector('cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)'))
[codex:133900] print('order selector', selector('order(address,uint256,address,uint256,uint256,uint256)'))
[codex:133900] print('balanceOf selector', selector('balanceOf(address,address)'))
[codex:133900] print('availableVolume selector', selector('availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] print('amountFilled selector', selector('amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] deposit() d0e30db0
[codex:133900] withdraw(uint256) 2e1a7d4d
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] balanceOf(address,address) f7888aec
[codex:133900] order(address,uint256,address,uint256,uint256,uint256) 0b927666
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) 0a19b14a
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32) 278b8c0e
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] feeAccount() 65e17c9d
[codex:133900] admin() f851a440
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] depositToken selector 338b5dea
[codex:133900] withdrawToken selector 9e281a98
[codex:133900] trade selector 0a19b14a
[codex:133900] cancelOrder selector 278b8c0e
[codex:133900] order selector 0b927666
[codex:133900] balanceOf selector f7888aec
[codex:133900]
[codex:133900] thinking
[codex:133900] **Mapping additional function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] cands=[
[codex:133900] 'setAdmin(address)',
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'accountLevelsAddr()',
[codex:133900] 'feeMake()',
[codex:133900] 'feeTake()',
[codex:133900] 'feeRebate()',
[codex:133900] 'token(address,address)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'tokenFallback(address,uint256,bytes)',
[codex:133900] 'tokenTransfer(address,address,uint256)',
[codex:133900] 'owner()',
[codex:133900] 'getOrders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'balanceOf(address,address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'nonce(address)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'withdrawAdmin(address,uint256)',
[codex:133900] 'withdrawAdmin(uint256)',
[codex:133900] 'withdrawAdmin(address)',
[codex:133900] 'withdrawEther(uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'withdrawTokenFor(address,address,uint256)',
[codex:133900] 'changeOwner(address)',
[codex:133900] 'changeTokenAddress(address)',
[codex:133900] 'pause()',
[codex:133900] 'unpause()',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'getFeeAccount()',
[codex:133900] 'getAdmin()',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] ]
[codex:133900]
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900]
[codex:133900] for sig in cands:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 47ms:
[codex:133900] accountLevelsAddr() f3412942
[codex:133900] feeMake() 57786394
[codex:133900] feeTake() c281309e
[codex:133900] feeRebate() 731c2f81
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32) 278b8c0e
[codex:133900] order(address,uint256,address,uint256,uint256,uint256) 0b927666
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] balanceOf(address,address) f7888aec
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900]
[codex:133900] thinking
[codex:133900] **Identifying more selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900]
[codex:133900] cands=[
[codex:133900] 'setAdmin(address)',
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'getAdmin()',
[codex:133900] 'getFeeAccount()',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'withdrawAdmin(address,uint256)',
[codex:133900] 'withdrawAdmin(uint256)',
[codex:133900] 'withdrawAdmin(address)',
[codex:133900] 'withdrawEther(uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'owner()',
[codex:133900] 'deleteOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'changeAdmin(address)',
[codex:133900] 'changeOwner(address)',
[codex:133900] 'nonce(address)',
[codex:133900] 'orderInfo(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'withdrawAdminTokens(address,uint256)',
[codex:133900] 'withdrawAdmin(address,address,uint256)',
[codex:133900] 'moveOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'balanceOf(address)',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'setMinDeposit(uint256)',
[codex:133900] 'withdraw(uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'deposit()'
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in cands:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 39ms:
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] changeAdmin(address) 8f283970
[codex:133900] withdraw(uint256) 2e1a7d4d
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] deposit() d0e30db0
[codex:133900]
[codex:133900] thinking
[codex:133900] **Identifying function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] sigs=[
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'changeFeeAccount(address)',
[codex:133900] 'changeAccountLevelsAddr(address)',
[codex:133900] 'changeFeeMake(uint256)',
[codex:133900] 'changeFeeTake(uint256)',
[codex:133900] 'changeFeeRebate(uint256)',
[codex:133900] 'changeAccountLevels(address)',
[codex:133900] 'setAccountLevels(address)',
[codex:133900] 'setAccountLevels(address,uint256)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'accountLevels(uint256)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'adminWithdraw(address,uint256,address)',
[codex:133900] 'adminWithdraw(uint256)',
[codex:133900] 'adminWithdraw(address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'nonce(address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'getAccountLevels(address)',
[codex:133900] 'moveToTokens(address,uint256)',
[codex:133900] 'moveTokens(address,address,uint256)',
[codex:133900] 'withdrawBalance(address,uint256)',
[codex:133900] 'adminWithdraw(address,address,uint256)',
[codex:133900] 'adminWithdrawToken(address,address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'withdraw(address,uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'withdrawToken(address,address,uint256)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'depositTo(address)',
[codex:133900] 'depositTo(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'depositTokenFor(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'withdrawTokenTo(address,uint256)',
[codex:133900] 'withdrawTo(address,uint256)',
[codex:133900] '
[codex:133900] ]
[codex:133900]
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900]
[codex:133900] for sig in sigs:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k exited 1 in 27ms:
[codex:133900] File "<stdin>", line 67
[codex:133900] '
[codex:133900] ^
[codex:133900] SyntaxError: unterminated string literal (detected at line 67)
[codex:133900]
[codex:133900] thinking
[codex:133900] **Fixing syntax error and rerunning**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900]
[codex:133900] sigs=[
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'changeFeeAccount(address)',
[codex:133900] 'changeAccountLevelsAddr(address)',
[codex:133900] 'changeFeeMake(uint256)',
[codex:133900] 'changeFeeTake(uint256)',
[codex:133900] 'changeFeeRebate(uint256)',
[codex:133900] 'changeAccountLevels(address)',
[codex:133900] 'setAccountLevels(address)',
[codex:133900] 'setAccountLevels(address,uint256)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'adminWithdraw(address,uint256,address)',
[codex:133900] 'adminWithdraw(uint256)',
[codex:133900] 'adminWithdraw(address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'nonce(address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'getAccountLevels(address)',
[codex:133900] 'moveToTokens(address,uint256)',
[codex:133900] 'moveTokens(address,address,uint256)',
[codex:133900] 'withdrawBalance(address,uint256)',
[codex:133900] 'adminWithdraw(address,address,uint256)',
[codex:133900] 'adminWithdrawToken(address,address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'withdraw(address,uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'withdrawToken(address,address,uint256)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'depositTo(address)',
[codex:133900] 'depositTo(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'depositTokenFor(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'withdrawTokenTo(address,uint256)',
[codex:133900] 'withdrawTo(address,uint256)',
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in sigs:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 42ms:
[codex:133900] changeFeeAccount(address) 71ffcb16
[codex:133900] changeAccountLevelsAddr(address) e8f6bc2e
[codex:133900] changeFeeMake(uint256) 54d03b5c
[codex:133900] changeFeeTake(uint256) 8823a9c0
[codex:133900] changeFeeRebate(uint256) 5e1d7ae4
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900]
[codex:133900] thinking
[codex:133900] **Mapping remaining selectors to functions**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900]
[codex:133900] cands=[
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'orders(bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'tokenGet()',
[codex:133900] 'nonce(address)',
[codex:133900] 'nonce()',
[codex:133900] 'getNonce(address)',
[codex:133900] 'getCancelOrdersUpTo(address)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900]
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in cands:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32) 278b8c0e
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing Ethereum contract selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] print('orderFills(bytes32):', sel('orderFills(bytes32)'))
[codex:133900] print('tokens(address,address):', sel('tokens(address,address)'))
[codex:133900] print('tokens(address):', sel('tokens(address)'))
[codex:133900] print('orderFills(address,uint256,address,uint256,uint256,uint256):', sel('orderFills(address,uint256,address,uint256,uint256,uint256)'))
[codex:133900] print('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32):', sel('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] print('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256):', sel('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)'))
[codex:133900] print('orders(bytes32):', sel('orders(bytes32)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 38ms:
[codex:133900] orderFills(bytes32): f7213db6
[codex:133900] tokens(address,address): 508493bc
[codex:133900] tokens(address): e4860339
[codex:133900] orderFills(address,uint256,address,uint256,uint256,uint256): 97508c65
[codex:133900] orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32): f924eb1e
[codex:133900] orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256): 0908b580
[codex:133900] orders(bytes32): 9c3f1e90
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and mappings**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] cands=[
[codex:133900] 'nonce(address)',
[codex:133900] 'nonce()',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'accountLevels(address,uint256)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'accountLevelsAddr()',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'withdrawAdmin(address,uint256)',
[codex:133900] 'withdrawAdmin(address,address,uint256)',
[codex:133900] 'adminWithdraw(address,address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'withdraw(address)',
[codex:133900] 'withdraw(uint256)',
[codex:133900] 'adminWithdraw(address)',
[codex:133900] 'adminWithdraw(uint256)',
[codex:133900] 'balanceOf(address,address)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrdersUpTo(uint256,address)',
[codex:133900] 'cancelOrdersUpTo(address,uint256,uint256)',
[codex:133900]
[codex:133900] ]
[codex:133900]
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900]
[codex:133900] for sig in cands:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 42ms:
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] accountLevelsAddr() f3412942
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] withdraw(uint256) 2e1a7d4d
[codex:133900] balanceOf(address,address) f7888aec
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing accountLevels function possibilities**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] print('accountLevels(address):', sel('accountLevels(address)'))
[codex:133900] print('getAccountLevel(address):', sel('getAccountLevel(address)'))
[codex:133900] print('accountLevel(address):', sel('accountLevel(address)'))
[codex:133900] print('getLevel(address):', sel('getLevel(address)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 36ms:
[codex:133900] accountLevels(address): 14577c55
[codex:133900] getAccountLevel(address): 189048fc
[codex:133900] accountLevel(address): 1cbd0519
[codex:133900] getLevel(address): 817c8966
[codex:133900]
[codex:133900] thinking
[codex:133900] **Identifying unknown reference**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] sigs=[
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderState(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderState(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderState(bytes32)',
[codex:133900] 'getOrderStatus(bytes32)',
[codex:133900] 'orderStatus(bytes32)',
[codex:133900] 'volume(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'volume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'makeOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getAvailableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getAmountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'getOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900]
[codex:133900] ]
[codex:133900]
[codex:133900] selectors={'19774d43','3fb9950a','6c86888b','bb5f4629','fa2d9ff0'}
[codex:133900] for sig in sigs:
[codex:133900] s=sel(sig)
[codex:133900] if s in selectors:
[codex:133900] print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 44ms:
[codex:133900]
[codex:133900]
[codex:133900] thinking
[codex:133900] **Mapping function selectors to offsets**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x12e6
[codex:133900] start=0x12c0
[codex:133900] end=0x1360
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] 12c0: SELFDESTRUCT
[codex:133900] 12c1: SELFDESTRUCT
[codex:133900] 12c2: SELFDESTRUCT
[codex:133900] 12c3: SELFDESTRUCT
[codex:133900] 12c4: SELFDESTRUCT
[codex:133900] 12c5: SELFDESTRUCT
[codex:133900] 12c6: AND
[codex:133900] 12c7: DUP2
[codex:133900] 12c8: MSTORE
[codex:133900] 12c9: PUSH1 20
[codex:133900] 12cb: ADD
[codex:133900] 12cc: SWAP8
[codex:133900] 12cd: POP
[codex:133900] 12ce: POP
[codex:133900] 12cf: POP
[codex:133900] 12d0: POP
[codex:133900] 12d1: POP
[codex:133900] 12d2: POP
[codex:133900] 12d3: POP
[codex:133900] 12d4: POP
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function parameters and storage access**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x02f0-0x0320
[codex:133900] start=0x02e0
[codex:133900] end=0x0330
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 31ms:
[codex:133900] 02e0: SELFDESTRUCT
[codex:133900] 02e1: SELFDESTRUCT
[codex:133900] 02e2: SELFDESTRUCT
[codex:133900] 02e3: AND
[codex:133900] 02e4: SWAP1
[codex:133900] 02e5: PUSH1 20
[codex:133900] 02e7: ADD
[codex:133900] 02e8: SWAP1
[codex:133900] 02e9: SWAP2
[codex:133900] 02ea: SWAP1
[codex:133900] 02eb: DUP1
[codex:133900] 02ec: CALLDATALOAD
[codex:133900] 02ed: PUSH1 00
[codex:133900] 02ef: NOT
[codex:133900] 02f0: AND
[codex:133900] 02f1: SWAP1
[codex:133900] 02f2: PUSH1 20
[codex:133900] 02f4: ADD
[codex:133900] 02f5: SWAP1
[codex:133900] 02f6: SWAP2
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function parameter decoding and storage access**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] print('orders(address,address):', sel('orders(address,address)'))
[codex:133900] print('tokens(address,address):', sel('tokens(address,address)'))
[codex:133900] print('balances(address,address):', sel('balances(address,address)'))
[codex:133900] print('balanceOf(address,address):', sel('balanceOf(address,address)'))
[codex:133900] print('userTokens(address,address):', sel('userTokens(address,address)'))
[codex:133900] print('trades(address,uint256,address,uint256,uint256,uint256):', sel('trades(address,uint256,address,uint256,uint256,uint256)'))
[codex:133900] print('tradeBalances(address,address):', sel('tradeBalances(address,address)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] orders(address,address): 0ba85081
[codex:133900] tokens(address,address): 508493bc
[codex:133900] balances(address,address): c23f001f
[codex:133900] balanceOf(address,address): f7888aec
[codex:133900] userTokens(address,address): dab116fe
[codex:133900] trades(address,uint256,address,uint256,uint256,uint256): a92c06cb
[codex:133900] tradeBalances(address,address): aa41dae0
[codex:133900]
[codex:133900] thinking
[codex:133900] **Matching function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] print('testTrade', sel('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)'))
[codex:133900] print('testTradeNoAmount', sel('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] print('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)', sel('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 39ms:
[codex:133900] testTrade 5c73dcea
[codex:133900] testTradeNoAmount be03eec1
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256) 775c2277
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function signatures and matching**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x2137
[codex:133900] start=0x2100
[codex:133900] end=0x2240
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 31ms:
[codex:133900] 2100: MOD
[codex:133900] 2101: JUMPI
[codex:133900] 2102: PUSH2 0000
[codex:133900] 2105: JUMP
[codex:133900] 2106: JUMPDEST
[codex:133900] 2107: DUP1
[codex:133900] 2108: PUSH1 05
[codex:133900] 210a: DUP2
[codex:133900] 210b: SWAP1
[codex:133900] 210c: SSTORE
[codex:133900] 210d: POP
[codex:133900] 210e: JUMPDEST
[codex:133900] 210f: POP
[codex:133900] 2110: JUMP
[codex:133900] 2111: JUMPDEST
[codex:133900] 2112: PUSH1 01
[codex:133900] 2114: PUSH1 00
[codex:133900] 2116: SWAP1
[codex:133900] 2117: SLOAD
[codex:133900] 2118: SWAP1
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and mappings**
[codex:133900]
[codex:133900] I'm sorting through confusing disassembly and correlating function selectors with known EtherDelta contract functions. I'm trying to identify which hashes correspond to functions like `testTrade`, `availableVolume`, and possibly `cancelOrdersUpTo` or `trade`, while checking if mappings like `orderFills` have custom getter signatures. There is a lot to untangle!
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] for sig in [
[codex:133900] 'orderFills(address,uint256)',
[codex:133900] 'orderFills(address,uint)',
[codex:133900] 'orderFills(address,bytes32)',
[codex:133900] 'orders(address,uint256)',
[codex:133900] 'orders(address,uint)',
[codex:133900] 'orders(address,bytes32)',
[codex:133900] 'orderFills(address,address)',
[codex:133900] 'orders(address,address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'ordersUpTo(address)',
[codex:133900] 'ordersUpTo(address,uint256)',
[codex:133900] 'orderNonce(address)',
[codex:133900] 'nonce(address)',
[codex:133900] 'getOrderFills(address,uint256)',
[codex:133900] 'getOrderFills(bytes32)',
[codex:133900] 'ordersUpTo(address,uint256)',
[codex:133900] 'ordersUpTo(address,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,uint256,uint256)',
[codex:133900] ]:
[codex:133900] print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 38ms:
[codex:133900] orderFills(address,uint256) ca0188e7
[codex:133900] orderFills(address,uint) c08fad39
[codex:133900] orderFills(address,bytes32) 19774d43
[codex:133900] orders(address,uint256) 793b8c6d
[codex:133900] orders(address,uint) 1f05be22
[codex:133900] orders(address,bytes32) bb5f4629
[codex:133900] orderFills(address,address) 89ddd13e
[codex:133900] orders(address,address) 0ba85081
[codex:133900] cancelOrdersUpTo(uint256) 4f9559b1
[codex:133900] ordersUpTo(address) faf54925
[codex:133900] ordersUpTo(address,uint256) 5a47fb53
[codex:133900] orderNonce(address) e47937f0
[codex:133900] nonce(address) 70ae92d2
[codex:133900] getOrderFills(address,uint256) 297597e0
[codex:133900] getOrderFills(bytes32) c0112c51
[codex:133900] ordersUpTo(address,uint256) 5a47fb53
[codex:133900] ordersUpTo(address,uint256,uint256) 60b99abd
[codex:133900] orders(address,uint256,address,uint256) beb5b342
[codex:133900] orders(address,uint256,address,uint256,uint256) 52ca4724
[codex:133900] orders(address,uint256,address,uint256,uint256,uint256) 2c92eeff
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and mappings**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] cands=[
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256)',
[codex:133900] test:= 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in cands:
[codex:133900] print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 38ms:
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6c86888b
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 24eab561
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256) 0b8fc7f7
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256,uint256) 9d886c2a
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256) 2468cd9b
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6c86888b
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function signatures and selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] cands=[
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in cands:
[codex:133900] print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 36ms:
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 0e9bb90b
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 3a18a53c
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256) 394a114e
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256) cdd4a774
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address) c2fc5ac6
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 50e7ad1d
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) a7d66375
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 0bd28cd3
[codex:133900] order(address,uint256,address,uint256,uint256,uint256,address) 8582c5aa
[codex:133900] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 3822a7c1
[codex:133900] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) 50197b10
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 107a9ed6
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) ad203688
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 1ecfd267
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6f12488a
[codex:133900]
[codex:133900] thinking
[codex:133900] **Matching function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900]
[codex:133900] def sel(sig):
[codex:133900] k=keccak.new(digest_bits=256)
[codex:133900] k.update(sig.encode())
[codex:133900] return k.hexdigest()[:8]
[codex:133900]
[codex:133900] sigs=[
[codex:133900] 'withdrawToken(address,address)',
[codex:133900] 'withdrawToken(address,address,uint256)',
[codex:133900] 'withdraw(address,address)',
[codex:133900] 'withdraw(address,uint256,address)',
[codex:133900] 'withdraw(address,uint256)',
[codex:133900] 'withdraw(address)',
[codex:133900] 'depositToken(address,address,uint256)',
[codex:133900] 'depositToken(address,address)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'deposit(address)',
[codex:133900] 'deposit(address,uint256)',
[codex:133900] 'balanceOf(address)',
[codex:133900] 'balanceOf(address,uint256)',
[codex:133900] 'balances(address,address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'cancelOrdersUpTo(address)',
[codex:133900] 'cancelOrdersUpTo(address,uint256,uint256)',
[codex:133900] 'orders(address,bytes32)',
[codex:133900] 'orderFills(address,bytes32)',
[codex:133900] 'orders(address,bytes32,address)',
[codex:133900] 'orderFills(address,bytes32,address)',
[codex:133900] 'orders(bytes32)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'getOrder(bytes32)',
[codex:133900] 'getOrderFills(address,bytes32)',
[codex:133900] 'getOrders(address,bytes32)',
[codex:133900] 'orders(address,uint256)',
[codex:133900] 'orders(address,uint256,address)',
[codex:133900] 'orderFills(address,uint256)',
[codex:133900] 'orderFills(address,uint256,address)',
[codex:133900] ]
[codex:133900]
[codex:133900] for sig in sigs:
[codex:133900] print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 41ms:
[codex:133900] withdrawToken(address,address) 3aeac4e1
[codex:133900] withdrawToken(address,address,uint256) 01e33667
[codex:133900] withdraw(address,address) f940e385
[codex:133900] withdraw(address,uint256,address) 69328dec
[codex:133900] withdraw(address,uint256) f3fef3a3
[codex:133900] withdraw(address) 51cff8d9
[codex:133900] depositToken(address,address,uint256) fb0f97a8
[codex:133900] depositToken(address,address) f4521c7f
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] deposit(address) f340fa01
[codex:133900] deposit(address,uint256) 47e7ef24
[codex:133900] balanceOf(address) 70a08231
[codex:133900] balanceOf(address,uint256) 00fdd58e
[codex:133900] balances(address,address) c23f001f
[codex:133900] cancelOrdersUpTo(uint256) 4f9559b1
[codex:133900] cancelOrdersUpTo(address,uint256) b32137a8
[codex:133900] cancelOrdersUpTo(address) 6cfd1efe
[codex:133900] cancelOrdersUpTo(address,uint256,uint256) 7e3def6d
[codex:133900] orders(address,bytes32) bb5f4629
[codex:133900] orderFills(address,bytes32) 19774d43
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and parameters**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x2aeb
[codex:133900] start=0x2ad0
[codex:133900] end=0x2b60
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 26ms:
[codex:133900] 2ad0: EXP
[codex:133900] 2ad1: SWAP1
[codex:133900] 2ad2: DIV
[codex:133900] 2ad3: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 2ae8: AND
[codex:133900] 2ae9: DUP2
[codex:133900] 2aea: JUMP
[codex:133900] 2aeb: JUMPDEST
[codex:133900] 2aec: PUSH1 09
[codex:133900] 2aee: PUSH1 20
[codex:133900] 2af0: MSTORE
[codex:133900] 2af1: DUP1
[codex:133900] 2af2: PUSH1 00
[codex:133900] 2af4: MSTORE
[codex:133900] 2af5: PUSH1 40
[codex:133900] 2af7: PUSH1 00
[codex:133900] 2af9: SHA3
[codex:133900] 2afa: PUSH1 00
[codex:133900] 2afc: SWAP2
[codex:133900] 2afd: POP
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing storage slot usage in contract**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x1d81
[codex:133900] start=0x1d40
[codex:133900] end=0x1e20
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 30ms:
[codex:133900] 1d40: SELFDESTRUCT
[codex:133900] 1d41: SELFDESTRUCT
[codex:133900] 1d42: SELFDESTRUCT
[codex:133900] 1d43: SELFDESTRUCT
[codex:133900] 1d44: SELFDESTRUCT
[codex:133900] 1d45: SELFDESTRUCT
[codex:133900] 1d46: SELFDESTRUCT
[codex:133900] 1d47: AND
[codex:133900] 1d48: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 1d5d: AND
[codex:133900] 1d5e: DUP2
[codex:133900] 1d5f: MSTORE
[codex:133900] 1d60: PUSH1 20
[codex:133900] 1d62: ADD
[codex:133900] 1d63: DUP4
[codex:133900] 1d64: DUP2
[codex:133900] 1d65: MSTORE
[codex:133900] 1d66: PUSH1 20
[codex:133900] 1d68: ADD
[codex:133900] 1d69: DUP3
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x1e1e-0x1e80
[codex:133900] start=0x1e1e
[codex:133900] end=0x1e90
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 40ms:
[codex:133900] 1e1e: PUSH1 00
[codex:133900] 1e20: PUSH2 0100
[codex:133900] 1e23: EXP
[codex:133900] 1e24: DUP2
[codex:133900] 1e25: SLOAD
[codex:133900] 1e26: DUP2
[codex:133900] 1e27: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 1e3c: MUL
[codex:133900] 1e3d: NOT
[codex:133900] 1e3e: AND
[codex:133900] 1e3f: SWAP1
[codex:133900] 1e40: DUP4
[codex:133900] 1e41: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 1e56: AND
[codex:133900] 1e57: MUL
[codex:133900] 1e58: OR
[codex:133900] 1e59: SWAP1
[codex:133900] 1e5a: SSTORE
[codex:133900] 1e5b: POP
[codex:133900] 1e5c: JUMPDEST
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing admin-only withdrawal address setting**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x105f
[codex:133900] start=0x1030
[codex:133900] end=0x1120
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] 1030: SELFDESTRUCT
[codex:133900] 1031: SELFDESTRUCT
[codex:133900] 1032: SELFDESTRUCT
[codex:133900] 1033: SELFDESTRUCT
[codex:133900] 1034: SELFDESTRUCT
[codex:133900] 1035: SELFDESTRUCT
[codex:133900] 1036: SELFDESTRUCT
[codex:133900] 1037: SELFDESTRUCT
[codex:133900] 1038: SELFDESTRUCT
[codex:133900] 1039: SELFDESTRUCT
[codex:133900] 103a: SELFDESTRUCT
[codex:133900] 103b: AND
[codex:133900] 103c: DUP2
[codex:133900] 103d: MSTORE
[codex:133900] 103e: PUSH1 20
[codex:133900] 1040: ADD
[codex:133900] 1041: SWAP7
[codex:133900] 1042: POP
[codex:133900] 1043: POP
[codex:133900] 1044: POP
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing contract order and trade functions**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900]
[codex:133900] # find ORIGIN opcode occurrences
[codex:133900] origins=[]
[codex:133900] idx=0
[codex:133900] while idx < len(code):
[codex:133900] op=code[idx]
[codex:133900] if op==0x32:
[codex:133900] origins.append(idx)
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] idx += 1 + (op-0x5f)
[codex:133900] else:
[codex:133900] idx += 1
[codex:133900] print('ORIGIN offsets', origins)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 30ms:
[codex:133900] ORIGIN offsets []
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing withdrawal address control and safe math usage**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900]
[codex:133900] def disasm(start,end):
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:133900] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:133900] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:133900] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900] op=code[idx]
[codex:133900] name=opnames.get(op,hex(op))
[codex:133900] if 0x60<=op<=0x7f:
[codex:133900] n=op-0x5f
[codex:133900] data=code[idx+1:idx+1+n]
[codex:133900] print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900] idx+=1+n
[codex:133900] else:
[codex:133900] print(f\"{idx:04x}: {name}\")
[codex:133900] idx+=1
[codex:133900]
[codex:133900] print('--- 2ee0 ---')
[codex:133900] disasm(0x2ee0,0x2f40)
[codex:133900] print('--- 2f40 ---')
[codex:133900] disasm(0x2f40,0x2fa0)
[codex:133900] print('--- 3674 ---')
[codex:133900] disasm(0x3670,0x36d0)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] --- 2ee0 ---
[codex:133900] 2ee0: JUMPDEST
[codex:133900] 2ee1: PUSH1 00
[codex:133900] 2ee3: PUSH1 00
[codex:133900] 2ee5: DUP3
[codex:133900] 2ee6: DUP5
[codex:133900] 2ee7: ADD
[codex:133900] 2ee8: SWAP1
[codex:133900] 2ee9: POP
[codex:133900] 2eea: PUSH2 2f01
[codex:133900] 2eed: DUP5
[codex:133900] 2eee: DUP3
[codex:133900] 2eef: LT
[codex:133900] 2ef0: ISZERO
[codex:133900] 2ef1: DUP1
[codex:133900] 2ef2: ISZERO
[codex:133900] 2ef3: PUSH2 2efc
[codex:133900] 2ef6: JUMPI
[codex:133900] 2ef7: POP
[codex:133900] 2ef8: DUP4
[codex:133900]
[codex:133900] thinking
[codex:133900] **Analyzing potential exploits and confirming no findings**
[codex:133900]
[codex:133900] I carefully examined the contract’s math safety, signature checks on order cancellations, token transfers, and reentrancy risks, especially regarding deposit and withdraw flows. After thorough reasoning, I didn’t find any concrete, exploitable path to profit extraction, so I will prepare a JSON response indicating no findings and provide a concise summary reflecting that.
[codex:133900] codex
[codex:133900] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode bundle.","findings":[]}
[codex:133900] tokens used
[codex:133900] 117,541
[codex:133900] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode bundle.","findings":[]}
{
"codex": {
"ran_at": "2026-01-01T22:36:21.748596+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path identified from the provided bytecode bundle.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path identified from the provided bytecode bundle.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0168 0000000a: JUMPI 0000000b: PUSH1 0x00 0000000d: CALLDATALOAD 0000000e: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002c: SWAP1 0000002d: DIV 0000002e: PUSH4 0xffffffff 00000033: AND 00000034: DUP1 00000035: PUSH4 0x0a19b14a 0000003a: EQ 0000003b: PUSH2 0x017d 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0x0b927666 00000045: EQ 00000046: PUSH2 0x0244 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0x19774d43 00000050: EQ 00000051: PUSH2 0x02bd 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0x278b8c0e 0000005b: EQ 0000005c: PUSH2 0x0314 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0x2e1a7d4d 00000066: EQ 00000067: PUSH2 0x03b3 0000006a: JUMPI 0000006b: DUP1 0000006c: PUSH4 0x338b5dea 00000071: EQ 00000072: PUSH2 0x03d3 00000075: JUMPI 00000076: DUP1 00000077: PUSH4 0x3fb9950a 0000007c: EQ 0000007d: PUSH2 0x0412 00000080: JUMPI 00000081: DUP1 00000082: PUSH4 0x46be96c3 00000087: EQ 00000088: PUSH2 0x0467 0000008b: JUMPI 0000008c: DUP1 0000008d: PUSH4 0x508493bc 00000092: EQ 00000093: PUSH2 0x0539 00000096: JUMPI 00000097: DUP1 00000098: PUSH4 0x54d03b5c 0000009d: EQ 0000009e: PUSH2 0x05a2 000000a1: JUMPI 000000a2: DUP1 000000a3: PUSH4 0x57786394 000000a8: EQ 000000a9: PUSH2 0x05c2 000000ac: JUMPI 000000ad: DUP1 000000ae: PUSH4 0x5e1d7ae4 000000b3: EQ 000000b4: PUSH2 0x05e8 000000b7: JUMPI 000000b8: DUP1 000000b9: PUSH4 0x65e17c9d 000000be: EQ 000000bf: PUSH2 0x0608 000000c2: JUMPI 000000c3: DUP1 000000c4: PUSH4 0x6c86888b 000000c9: EQ 000000ca: PUSH2 0x065a 000000cd: JUMPI 000000ce: DUP1 000000cf: PUSH4 0x71ffcb16 000000d4: EQ 000000d5: PUSH2 0x0758 000000d8: JUMPI 000000d9: DUP1 000000da: PUSH4 0x731c2f81 000000df: EQ 000000e0: PUSH2 0x078e 000000e3: JUMPI 000000e4: DUP1 000000e5: PUSH4 0x8823a9c0 000000ea: EQ 000000eb: PUSH2 0x07b4 000000ee: JUMPI 000000ef: DUP1 000000f0: PUSH4 0x8f283970 000000f5: EQ 000000f6: PUSH2 0x07d4 000000f9: JUMPI 000000fa: DUP1 000000fb: PUSH4 0x9e281a98 00000100: EQ 00000101: PUSH2 0x080a 00000104: JUMPI 00000105: DUP1 00000106: PUSH4 0xbb5f4629 0000010b: EQ 0000010c: PUSH2 0x0849 0000010f: JUMPI 00000110: DUP1 00000111: PUSH4 0xc281309e 00000116: EQ 00000117: PUSH2 0x08a4 0000011a: JUMPI 0000011b: DUP1 0000011c: PUSH4 0xd0e30db0 00000121: EQ 00000122: PUSH2 0x08ca 00000125: JUMPI 00000126: DUP1 00000127: PUSH4 0xe8f6bc2e 0000012c: EQ 0000012d: PUSH2 0x08d4 00000130: JUMPI 00000131: DUP1 00000132: PUSH4 0xf3412942 00000137: EQ 00000138: PUSH2 0x090a 0000013b: JUMPI 0000013c: DUP1 0000013d: PUSH4 0xf7888aec 00000142: EQ 00000143: PUSH2 0x095c 00000146: JUMPI 00000147: DUP1 00000148: PUSH4 0xf851a440 0000014d: EQ 0000014e: PUSH2 0x09c5 00000151: JUMPI 00000152: DUP1 00000153: PUSH4 0xfa2d9ff0 00000158: EQ 00000159: PUSH2 0x0a17 0000015c: JUMPI 0000015d: DUP1 0000015e: PUSH4 0xfb6e155f 00000163: EQ 00000164: PUSH2 0x0a8d 00000167: JUMPI 00000168: JUMPDEST 00000169: CALLVALUE 0000016a: ISZERO 0000016b: PUSH2 0x0170 0000016e: JUMPI 0000016f: INVALID 00000170: JUMPDEST 00000171: PUSH2 0x017b 00000174: JUMPDEST 00000175: PUSH2 0x0000 00000178: JUMP 00000179: JUMPDEST 0000017a: JUMP 0000017b: JUMPDEST 0000017c: STOP 0000017d: JUMPDEST 0000017e: CALLVALUE 0000017f: ISZERO 00000180: PUSH2 0x0185 00000183: JUMPI 00000184: INVALID 00000185: JUMPDEST 00000186: PUSH2 0x0242 00000189: PUSH1 0x04 0000018b: DUP1 0000018c: DUP1 0000018d: CALLDATALOAD 0000018e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001a3: AND 000001a4: SWAP1 000001a5: PUSH1 0x20 000001a7: ADD 000001a8: SWAP1 000001a9: SWAP2 000001aa: SWAP1 000001ab: DUP1 000001ac: CALLDATALOAD 000001ad: SWAP1 000001ae: PUSH1 0x20 000001b0: ADD 000001b1: SWAP1 000001b2: SWAP2 000001b3: SWAP1 000001b4: DUP1 000001b5: CALLDATALOAD 000001b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001cb: AND 000001cc: SWAP1 000001cd: PUSH1 0x20 000001cf: ADD 000001d0: SWAP1 000001d1: SWAP2 000001d2: SWAP1 000001d3: DUP1 000001d4: CALLDATALOAD 000001d5: SWAP1 000001d6: PUSH1 0x20 000001d8: ADD 000001d9: SWAP1 000001da: SWAP2 000001db: SWAP1 000001dc: DUP1 000001dd: CALLDATALOAD 000001de: SWAP1 000001df: PUSH1 0x20 000001e1: ADD 000001e2: SWAP1 000001e3: SWAP2 000001e4: SWAP1 000001e5: DUP1 000001e6: CALLDATALOAD 000001e7: SWAP1 000001e8: PUSH1 0x20 000001ea: ADD 000001eb: SWAP1 000001ec: SWAP2 000001ed: SWAP1 000001ee: DUP1 000001ef: CALLDATALOAD 000001f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000205: AND 00000206: SWAP1 00000207: PUSH1 0x20 00000209: ADD 0000020a: SWAP1 0000020b: SWAP2 0000020c: SWAP1 0000020d: DUP1 0000020e: CALLDATALOAD 0000020f: PUSH1 0xff 00000211: AND 00000212: SWAP1 00000213: PUSH1 0x20 00000215: ADD 00000216: SWAP1 00000217: SWAP2 00000218: SWAP1 00000219: DUP1 0000021a: CALLDATALOAD 0000021b: PUSH1 0x00 0000021d: NOT 0000021e: AND 0000021f: SWAP1 00000220: PUSH1 0x20 00000222: ADD 00000223: SWAP1 00000224: SWAP2 00000225: SWAP1 00000226: DUP1 00000227: CALLDATALOAD 00000228: PUSH1 0x00 0000022a: NOT 0000022b: AND 0000022c: SWAP1 0000022d: PUSH1 0x20 0000022f: ADD 00000230: SWAP1 00000231: SWAP2 00000232: SWAP1 00000233: DUP1 00000234: CALLDATALOAD 00000235: SWAP1 00000236: PUSH1 0x20 00000238: ADD 00000239: SWAP1 0000023a: SWAP2 0000023b: SWAP1 0000023c: POP 0000023d: POP 0000023e: PUSH2 0x0b5f 00000241: JUMP 00000242: JUMPDEST 00000243: STOP 00000244: JUMPDEST 00000245: CALLVALUE 00000246: ISZERO 00000247: PUSH2 0x024c 0000024a: JUMPI 0000024b: INVALID 0000024c: JUMPDEST 0000024d: PUSH2 0x02bb 00000250: PUSH1 0x04 00000252: DUP1 00000253: DUP1 00000254: CALLDATALOAD 00000255: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000026a: AND 0000026b: SWAP1 0000026c: PUSH1 0x20 0000026e: ADD 0000026f: SWAP1 00000270: SWAP2 00000271: SWAP1 00000272: DUP1 00000273: CALLDATALOAD 00000274: SWAP1 00000275: PUSH1 0x20 00000277: ADD 00000278: SWAP1 00000279: SWAP2 0000027a: SWAP1 0000027b: DUP1 0000027c: CALLDATALOAD 0000027d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000292: AND 00000293: SWAP1 00000294: PUSH1 0x20 00000296: ADD 00000297: SWAP1 00000298: SWAP2 00000299: SWAP1 0000029a: DUP1 0000029b: CALLDATALOAD 0000029c: SWAP1 0000029d: PUSH1 0x20 0000029f: ADD 000002a0: SWAP1 000002a1: SWAP2 000002a2: SWAP1 000002a3: DUP1 000002a4: CALLDATALOAD 000002a5: SWAP1 000002a6: PUSH1 0x20 000002a8: ADD 000002a9: SWAP1 000002aa: SWAP2 000002ab: SWAP1 000002ac: DUP1 000002ad: CALLDATALOAD 000002ae: SWAP1 000002af: PUSH1 0x20 000002b1: ADD 000002b2: SWAP1 000002b3: SWAP2 000002b4: SWAP1 000002b5: POP 000002b6: POP 000002b7: PUSH2 0x105f 000002ba: JUMP 000002bb: JUMPDEST 000002bc: STOP 000002bd: JUMPDEST 000002be: CALLVALUE 000002bf: ISZERO 000002c0: PUSH2 0x02c5 000002c3: JUMPI 000002c4: INVALID 000002c5: JUMPDEST 000002c6: PUSH2 0x02fe 000002c9: PUSH1 0x04 000002cb: DUP1 000002cc: DUP1 000002cd: CALLDATALOAD 000002ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002e3: AND 000002e4: SWAP1 000002e5: PUSH1 0x20 000002e7: ADD 000002e8: SWAP1 000002e9: SWAP2 000002ea: SWAP1 000002eb: DUP1 000002ec: CALLDATALOAD 000002ed: PUSH1 0x00 000002ef: NOT 000002f0: AND 000002f1: SWAP1 000002f2: PUSH1 0x20 000002f4: ADD 000002f5: SWAP1 000002f6: SWAP2 000002f7: SWAP1 000002f8: POP 000002f9: POP 000002fa: PUSH2 0x12e6 000002fd: JUMP 000002fe: JUMPDEST 000002ff: PUSH1 0x40 00000301: MLOAD 00000302: DUP1 00000303: DUP3 00000304: DUP2 00000305: MSTORE 00000306: PUSH1 0x20 00000308: ADD 00000309: SWAP2 0000030a: POP 0000030b: POP 0000030c: PUSH1 0x40 0000030e: MLOAD 0000030f: DUP1 00000310: SWAP2 00000311: SUB 00000312: SWAP1 00000313: RETURN 00000314: JUMPDEST 00000315: CALLVALUE 00000316: ISZERO 00000317: PUSH2 0x031c 0000031a: JUMPI 0000031b: INVALID 0000031c: JUMPDEST 0000031d: PUSH2 0x03b1 00000320: PUSH1 0x04 00000322: DUP1 00000323: DUP1 00000324: CALLDATALOAD 00000325: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000033a: AND 0000033b: SWAP1 0000033c: PUSH1 0x20 0000033e: ADD 0000033f: SWAP1 00000340: SWAP2 00000341: SWAP1 00000342: DUP1 00000343: CALLDATALOAD 00000344: SWAP1 00000345: PUSH1 0x20 00000347: ADD 00000348: SWAP1 00000349: SWAP2 0000034a: SWAP1 0000034b: DUP1 0000034c: CALLDATALOAD 0000034d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000362: AND 00000363: SWAP1 00000364: PUSH1 0x20 00000366: ADD 00000367: SWAP1 00000368: SWAP2 00000369: SWAP1 0000036a: DUP1 0000036b: CALLDATALOAD 0000036c: SWAP1 0000036d: PUSH1 0x20 0000036f: ADD 00000370: SWAP1 00000371: SWAP2 00000372: SWAP1 00000373: DUP1 00000374: CALLDATALOAD 00000375: SWAP1 00000376: PUSH1 0x20 00000378: ADD 00000379: SWAP1 0000037a: SWAP2 0000037b: SWAP1 0000037c: DUP1 0000037d: CALLDATALOAD 0000037e: SWAP1 0000037f: PUSH1 0x20 00000381: ADD 00000382: SWAP1 00000383: SWAP2 00000384: SWAP1 00000385: DUP1 00000386: CALLDATALOAD 00000387: PUSH1 0xff 00000389: AND 0000038a: SWAP1 0000038b: PUSH1 0x20 0000038d: ADD 0000038e: SWAP1 0000038f: SWAP2 00000390: SWAP1 00000391: DUP1 00000392: CALLDATALOAD 00000393: PUSH1 0x00 00000395: NOT 00000396: AND 00000397: SWAP1 00000398: PUSH1 0x20 0000039a: ADD 0000039b: SWAP1 0000039c: SWAP2 0000039d: SWAP1 0000039e: DUP1 0000039f: CALLDATALOAD 000003a0: PUSH1 0x00 000003a2: NOT 000003a3: AND 000003a4: SWAP1 000003a5: PUSH1 0x20 000003a7: ADD 000003a8: SWAP1 000003a9: SWAP2 000003aa: SWAP1 000003ab: POP 000003ac: POP 000003ad: PUSH2 0x130b 000003b0: JUMP 000003b1: JUMPDEST 000003b2: STOP 000003b3: JUMPDEST 000003b4: CALLVALUE 000003b5: ISZERO 000003b6: PUSH2 0x03bb 000003b9: JUMPI 000003ba: INVALID 000003bb: JUMPDEST 000003bc: PUSH2 0x03d1 000003bf: PUSH1 0x04 000003c1: DUP1 000003c2: DUP1 000003c3: CALLDATALOAD 000003c4: SWAP1 000003c5: PUSH1 0x20 000003c7: ADD 000003c8: SWAP1 000003c9: SWAP2 000003ca: SWAP1 000003cb: POP 000003cc: POP 000003cd: PUSH2 0x171e 000003d0: JUMP 000003d1: JUMPDEST 000003d2: STOP 000003d3: JUMPDEST 000003d4: CALLVALUE 000003d5: ISZERO 000003d6: PUSH2 0x03db 000003d9: JUMPI 000003da: INVALID 000003db: JUMPDEST 000003dc: PUSH2 0x0410 000003df: PUSH1 0x04 000003e1: DUP1 000003e2: DUP1 000003e3: CALLDATALOAD 000003e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003f9: AND 000003fa: SWAP1 000003fb: PUSH1 0x20 000003fd: ADD 000003fe: SWAP1 000003ff: SWAP2 00000400: SWAP1 00000401: DUP1 00000402: CALLDATALOAD 00000403: SWAP1 00000404: PUSH1 0x20 00000406: ADD 00000407: SWAP1 00000408: SWAP2 00000409: SWAP1 0000040a: POP 0000040b: POP 0000040c: PUSH2 0x1a31 0000040f: JUMP 00000410: JUMPDEST 00000411: STOP 00000412: JUMPDEST 00000413: CALLVALUE 00000414: ISZERO 00000415: PUSH2 0x041a 00000418: JUMPI 00000419: INVALID 0000041a: JUMPDEST 0000041b: PUSH2 0x0465 0000041e: PUSH1 0x04 00000420: DUP1 00000421: DUP1 00000422: CALLDATALOAD 00000423: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000438: AND 00000439: SWAP1 0000043a: PUSH1 0x20 0000043c: ADD 0000043d: SWAP1 0000043e: SWAP2 0000043f: SWAP1 00000440: DUP1 00000441: CALLDATALOAD 00000442: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000457: AND 00000458: SWAP1 00000459: PUSH1 0x20 0000045b: ADD 0000045c: SWAP1 0000045d: SWAP2 0000045e: SWAP1 0000045f: POP 00000460: POP 00000461: PUSH2 0x1d81 00000464: JUMP 00000465: JUMPDEST 00000466: STOP 00000467: JUMPDEST 00000468: CALLVALUE 00000469: ISZERO 0000046a: PUSH2 0x046f 0000046d: JUMPI 0000046e: INVALID 0000046f: JUMPDEST 00000470: PUSH2 0x0523 00000473: PUSH1 0x04 00000475: DUP1 00000476: DUP1 00000477: CALLDATALOAD 00000478: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000048d: AND 0000048e: SWAP1 0000048f: PUSH1 0x20 00000491: ADD 00000492: SWAP1 00000493: SWAP2 00000494: SWAP1 00000495: DUP1 00000496: CALLDATALOAD 00000497: SWAP1 00000498: PUSH1 0x20 0000049a: ADD 0000049b: SWAP1 0000049c: SWAP2 0000049d: SWAP1 0000049e: DUP1 0000049f: CALLDATALOAD 000004a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004b5: AND 000004b6: SWAP1 000004b7: PUSH1 0x20 000004b9: ADD 000004ba: SWAP1 000004bb: SWAP2 000004bc: SWAP1 000004bd: DUP1 000004be: CALLDATALOAD 000004bf: SWAP1 000004c0: PUSH1 0x20 000004c2: ADD 000004c3: SWAP1 000004c4: SWAP2 000004c5: SWAP1 000004c6: DUP1 000004c7: CALLDATALOAD 000004c8: SWAP1 000004c9: PUSH1 0x20 000004cb: ADD 000004cc: SWAP1 000004cd: SWAP2 000004ce: SWAP1 000004cf: DUP1 000004d0: CALLDATALOAD 000004d1: SWAP1 000004d2: PUSH1 0x20 000004d4: ADD 000004d5: SWAP1 000004d6: SWAP2 000004d7: SWAP1 000004d8: DUP1 000004d9: CALLDATALOAD 000004da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004ef: AND 000004f0: SWAP1 000004f1: PUSH1 0x20 000004f3: ADD 000004f4: SWAP1 000004f5: SWAP2 000004f6: SWAP1 000004f7: DUP1 000004f8: CALLDATALOAD 000004f9: PUSH1 0xff 000004fb: AND 000004fc: SWAP1 000004fd: PUSH1 0x20 000004ff: ADD 00000500: SWAP1 00000501: SWAP2 00000502: SWAP1 00000503: DUP1 00000504: CALLDATALOAD 00000505: PUSH1 0x00 00000507: NOT 00000508: AND 00000509: SWAP1 0000050a: PUSH1 0x20 0000050c: ADD 0000050d: SWAP1 0000050e: SWAP2 0000050f: SWAP1 00000510: DUP1 00000511: CALLDATALOAD 00000512: PUSH1 0x00 00000514: NOT 00000515: AND 00000516: SWAP1 00000517: PUSH1 0x20 00000519: ADD 0000051a: SWAP1 0000051b: SWAP2 0000051c: SWAP1 0000051d: POP 0000051e: POP 0000051f: PUSH2 0x1e60 00000522: JUMP 00000523: JUMPDEST 00000524: PUSH1 0x40 00000526: MLOAD 00000527: DUP1 00000528: DUP3 00000529: DUP2 0000052a: MSTORE 0000052b: PUSH1 0x20 0000052d: ADD 0000052e: SWAP2 0000052f: POP 00000530: POP 00000531: PUSH1 0x40 00000533: MLOAD 00000534: DUP1 00000535: SWAP2 00000536: SUB 00000537: SWAP1 00000538: RETURN 00000539: JUMPDEST 0000053a: CALLVALUE 0000053b: ISZERO 0000053c: PUSH2 0x0541 0000053f: JUMPI 00000540: INVALID 00000541: JUMPDEST 00000542: PUSH2 0x058c 00000545: PUSH1 0x04 00000547: DUP1 00000548: DUP1 00000549: CALLDATALOAD 0000054a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000055f: AND 00000560: SWAP1 00000561: PUSH1 0x20 00000563: ADD 00000564: SWAP1 00000565: SWAP2 00000566: SWAP1 00000567: DUP1 00000568: CALLDATALOAD 00000569: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000057e: AND 0000057f: SWAP1 00000580: PUSH1 0x20 00000582: ADD 00000583: SWAP1 00000584: SWAP2 00000585: SWAP1 00000586: POP 00000587: POP 00000588: PUSH2 0x1fee 0000058b: JUMP 0000058c: JUMPDEST 0000058d: PUSH1 0x40 0000058f: MLOAD 00000590: DUP1 00000591: DUP3 00000592: DUP2 00000593: MSTORE 00000594: PUSH1 0x20 00000596: ADD 00000597: SWAP2 00000598: POP 00000599: POP 0000059a: PUSH1 0x40 0000059c: MLOAD 0000059d: DUP1 0000059e: SWAP2 0000059f: SUB 000005a0: SWAP1 000005a1: RETURN 000005a2: JUMPDEST 000005a3: CALLVALUE 000005a4: ISZERO 000005a5: PUSH2 0x05aa 000005a8: JUMPI 000005a9: INVALID 000005aa: JUMPDEST 000005ab: PUSH2 0x05c0 000005ae: PUSH1 0x04 000005b0: DUP1 000005b1: DUP1 000005b2: CALLDATALOAD 000005b3: SWAP1 000005b4: PUSH1 0x20 000005b6: ADD 000005b7: SWAP1 000005b8: SWAP2 000005b9: SWAP1 000005ba: POP 000005bb: POP 000005bc: PUSH2 0x2013 000005bf: JUMP 000005c0: JUMPDEST 000005c1: STOP 000005c2: JUMPDEST 000005c3: CALLVALUE 000005c4: ISZERO 000005c5: PUSH2 0x05ca 000005c8: JUMPI 000005c9: INVALID 000005ca: JUMPDEST 000005cb: PUSH2 0x05d2 000005ce: PUSH2 0x2089 000005d1: JUMP 000005d2: JUMPDEST 000005d3: PUSH1 0x40 000005d5: MLOAD 000005d6: DUP1 000005d7: DUP3 000005d8: DUP2 000005d9: MSTORE 000005da: PUSH1 0x20 000005dc: ADD 000005dd: SWAP2 000005de: POP 000005df: POP 000005e0: PUSH1 0x40 000005e2: MLOAD 000005e3: DUP1 000005e4: SWAP2 000005e5: SUB 000005e6: SWAP1 000005e7: RETURN 000005e8: JUMPDEST 000005e9: CALLVALUE 000005ea: ISZERO 000005eb: PUSH2 0x05f0 000005ee: JUMPI 000005ef: INVALID 000005f0: JUMPDEST 000005f1: PUSH2 0x0606 000005f4: PUSH1 0x04 000005f6: DUP1 000005f7: DUP1 000005f8: CALLDATALOAD 000005f9: SWAP1 000005fa: PUSH1 0x20 000005fc: ADD 000005fd: SWAP1 000005fe: SWAP2 000005ff: SWAP1 00000600: POP 00000601: POP 00000602: PUSH2 0x208f 00000605: JUMP 00000606: JUMPDEST 00000607: STOP 00000608: JUMPDEST 00000609: CALLVALUE 0000060a: ISZERO 0000060b: PUSH2 0x0610 0000060e: JUMPI 0000060f: INVALID 00000610: JUMPDEST 00000611: PUSH2 0x0618 00000614: PUSH2 0x2111 00000617: JUMP 00000618: JUMPDEST 00000619: PUSH1 0x40 0000061b: MLOAD 0000061c: DUP1 0000061d: DUP3 0000061e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000633: AND 00000634: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000649: AND 0000064a: DUP2 0000064b: MSTORE 0000064c: PUSH1 0x20 0000064e: ADD 0000064f: SWAP2 00000650: POP 00000651: POP 00000652: PUSH1 0x40 00000654: MLOAD 00000655: DUP1 00000656: SWAP2 00000657: SUB 00000658: SWAP1 00000659: RETURN 0000065a: JUMPDEST 0000065b: CALLVALUE 0000065c: ISZERO 0000065d: PUSH2 0x0662 00000660: JUMPI 00000661: INVALID 00000662: JUMPDEST 00000663: PUSH2 0x073e 00000666: PUSH1 0x04 00000668: DUP1 00000669: DUP1 0000066a: CALLDATALOAD 0000066b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000680: AND 00000681: SWAP1 00000682: PUSH1 0x20 00000684: ADD 00000685: SWAP1 00000686: SWAP2 00000687: SWAP1 00000688: DUP1 00000689: CALLDATALOAD 0000068a: SWAP1 0000068b: PUSH1 0x20 0000068d: ADD 0000068e: SWAP1 0000068f: SWAP2 00000690: SWAP1 00000691: DUP1 00000692: CALLDATALOAD 00000693: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006a8: AND 000006a9: SWAP1 000006aa: PUSH1 0x20 000006ac: ADD 000006ad: SWAP1 000006ae: SWAP2 000006af: SWAP1 000006b0: DUP1 000006b1: CALLDATALOAD 000006b2: SWAP1 000006b3: PUSH1 0x20 000006b5: ADD 000006b6: SWAP1 000006b7: SWAP2 000006b8: SWAP1 000006b9: DUP1 000006ba: CALLDATALOAD 000006bb: SWAP1 000006bc: PUSH1 0x20 000006be: ADD 000006bf: SWAP1 000006c0: SWAP2 000006c1: SWAP1 000006c2: DUP1 000006c3: CALLDATALOAD 000006c4: SWAP1 000006c5: PUSH1 0x20 000006c7: ADD 000006c8: SWAP1 000006c9: SWAP2 000006ca: SWAP1 000006cb: DUP1 000006cc: CALLDATALOAD 000006cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006e2: AND 000006e3: SWAP1 000006e4: PUSH1 0x20 000006e6: ADD 000006e7: SWAP1 000006e8: SWAP2 000006e9: SWAP1 000006ea: DUP1 000006eb: CALLDATALOAD 000006ec: PUSH1 0xff 000006ee: AND 000006ef: SWAP1 000006f0: PUSH1 0x20 000006f2: ADD 000006f3: SWAP1 000006f4: SWAP2 000006f5: SWAP1 000006f6: DUP1 000006f7: CALLDATALOAD 000006f8: PUSH1 0x00 000006fa: NOT 000006fb: AND 000006fc: SWAP1 000006fd: PUSH1 0x20 000006ff: ADD 00000700: SWAP1 00000701: SWAP2 00000702: SWAP1 00000703: DUP1 00000704: CALLDATALOAD 00000705: PUSH1 0x00 00000707: NOT 00000708: AND 00000709: SWAP1 0000070a: PUSH1 0x20 0000070c: ADD 0000070d: SWAP1 0000070e: SWAP2 0000070f: SWAP1 00000710: DUP1 00000711: CALLDATALOAD 00000712: SWAP1 00000713: PUSH1 0x20 00000715: ADD 00000716: SWAP1 00000717: SWAP2 00000718: SWAP1 00000719: DUP1 0000071a: CALLDATALOAD 0000071b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000730: AND 00000731: SWAP1 00000732: PUSH1 0x20 00000734: ADD 00000735: SWAP1 00000736: SWAP2 00000737: SWAP1 00000738: POP 00000739: POP 0000073a: PUSH2 0x2137 0000073d: JUMP 0000073e: JUMPDEST 0000073f: PUSH1 0x40 00000741: MLOAD 00000742: DUP1 00000743: DUP3 00000744: ISZERO 00000745: ISZERO 00000746: ISZERO 00000747: ISZERO 00000748: DUP2 00000749: MSTORE 0000074a: PUSH1 0x20 0000074c: ADD 0000074d: SWAP2 0000074e: POP 0000074f: POP 00000750: PUSH1 0x40 00000752: MLOAD 00000753: DUP1 00000754: SWAP2 00000755: SUB 00000756: SWAP1 00000757: RETURN 00000758: JUMPDEST 00000759: CALLVALUE 0000075a: ISZERO 0000075b: PUSH2 0x0760 0000075e: JUMPI 0000075f: INVALID 00000760: JUMPDEST 00000761: PUSH2 0x078c 00000764: PUSH1 0x04 00000766: DUP1 00000767: DUP1 00000768: CALLDATALOAD 00000769: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000077e: AND 0000077f: SWAP1 00000780: PUSH1 0x20 00000782: ADD 00000783: SWAP1 00000784: SWAP2 00000785: SWAP1 00000786: POP 00000787: POP 00000788: PUSH2 0x21fa 0000078b: JUMP 0000078c: JUMPDEST 0000078d: STOP 0000078e: JUMPDEST 0000078f: CALLVALUE 00000790: ISZERO 00000791: PUSH2 0x0796 00000794: JUMPI 00000795: INVALID 00000796: JUMPDEST 00000797: PUSH2 0x079e 0000079a: PUSH2 0x229b 0000079d: JUMP 0000079e: JUMPDEST 0000079f: PUSH1 0x40 000007a1: MLOAD 000007a2: DUP1 000007a3: DUP3 000007a4: DUP2 000007a5: MSTORE 000007a6: PUSH1 0x20 000007a8: ADD 000007a9: SWAP2 000007aa: POP 000007ab: POP 000007ac: PUSH1 0x40 000007ae: MLOAD 000007af: DUP1 000007b0: SWAP2 000007b1: SUB 000007b2: SWAP1 000007b3: RETURN 000007b4: JUMPDEST 000007b5: CALLVALUE 000007b6: ISZERO 000007b7: PUSH2 0x07bc 000007ba: JUMPI 000007bb: INVALID 000007bc: JUMPDEST 000007bd: PUSH2 0x07d2 000007c0: PUSH1 0x04 000007c2: DUP1 000007c3: DUP1 000007c4: CALLDATALOAD 000007c5: SWAP1 000007c6: PUSH1 0x20 000007c8: ADD 000007c9: SWAP1 000007ca: SWAP2 000007cb: SWAP1 000007cc: POP 000007cd: POP 000007ce: PUSH2 0x22a1 000007d1: JUMP 000007d2: JUMPDEST 000007d3: STOP 000007d4: JUMPDEST 000007d5: CALLVALUE 000007d6: ISZERO 000007d7: PUSH2 0x07dc 000007da: JUMPI 000007db: INVALID 000007dc: JUMPDEST 000007dd: PUSH2 0x0808 000007e0: PUSH1 0x04 000007e2: DUP1 000007e3: DUP1 000007e4: CALLDATALOAD 000007e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007fa: AND 000007fb: SWAP1 000007fc: PUSH1 0x20 000007fe: ADD 000007ff: SWAP1 00000800: SWAP2 00000801: SWAP1 00000802: POP 00000803: POP 00000804: PUSH2 0x2323 00000807: JUMP 00000808: JUMPDEST 00000809: STOP 0000080a: JUMPDEST 0000080b: CALLVALUE 0000080c: ISZERO 0000080d: PUSH2 0x0812 00000810: JUMPI 00000811: INVALID 00000812: JUMPDEST 00000813: PUSH2 0x0847 00000816: PUSH1 0x04 00000818: DUP1 00000819: DUP1 0000081a: CALLDATALOAD 0000081b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000830: AND 00000831: SWAP1 00000832: PUSH1 0x20 00000834: ADD 00000835: SWAP1 00000836: SWAP2 00000837: SWAP1 00000838: DUP1 00000839: CALLDATALOAD 0000083a: SWAP1 0000083b: PUSH1 0x20 0000083d: ADD 0000083e: SWAP1 0000083f: SWAP2 00000840: SWAP1 00000841: POP 00000842: POP 00000843: PUSH2 0x23c4 00000846: JUMP 00000847: JUMPDEST 00000848: STOP 00000849: JUMPDEST 0000084a: CALLVALUE 0000084b: ISZERO 0000084c: PUSH2 0x0851 0000084f: JUMPI 00000850: INVALID 00000851: JUMPDEST 00000852: PUSH2 0x088a 00000855: PUSH1 0x04 00000857: DUP1 00000858: DUP1 00000859: CALLDATALOAD 0000085a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000086f: AND 00000870: SWAP1 00000871: PUSH1 0x20 00000873: ADD 00000874: SWAP1 00000875: SWAP2 00000876: SWAP1 00000877: DUP1 00000878: CALLDATALOAD 00000879: PUSH1 0x00 0000087b: NOT 0000087c: AND 0000087d: SWAP1 0000087e: PUSH1 0x20 00000880: ADD 00000881: SWAP1 00000882: SWAP2 00000883: SWAP1 00000884: POP 00000885: POP 00000886: PUSH2 0x2769 00000889: JUMP 0000088a: JUMPDEST 0000088b: PUSH1 0x40 0000088d: MLOAD 0000088e: DUP1 0000088f: DUP3 00000890: ISZERO 00000891: ISZERO 00000892: ISZERO 00000893: ISZERO 00000894: DUP2 00000895: MSTORE 00000896: PUSH1 0x20 00000898: ADD 00000899: SWAP2 0000089a: POP 0000089b: POP 0000089c: PUSH1 0x40 0000089e: MLOAD 0000089f: DUP1 000008a0: SWAP2 000008a1: SUB 000008a2: SWAP1 000008a3: RETURN 000008a4: JUMPDEST 000008a5: CALLVALUE 000008a6: ISZERO 000008a7: PUSH2 0x08ac 000008aa: JUMPI 000008ab: INVALID 000008ac: JUMPDEST 000008ad: PUSH2 0x08b4 000008b0: PUSH2 0x2798 000008b3: JUMP 000008b4: JUMPDEST 000008b5: PUSH1 0x40 000008b7: MLOAD 000008b8: DUP1 000008b9: DUP3 000008ba: DUP2 000008bb: MSTORE 000008bc: PUSH1 0x20 000008be: ADD 000008bf: SWAP2 000008c0: POP 000008c1: POP 000008c2: PUSH1 0x40 000008c4: MLOAD 000008c5: DUP1 000008c6: SWAP2 000008c7: SUB 000008c8: SWAP1 000008c9: RETURN 000008ca: JUMPDEST 000008cb: PUSH2 0x08d2 000008ce: PUSH2 0x279e 000008d1: JUMP 000008d2: JUMPDEST 000008d3: STOP 000008d4: JUMPDEST 000008d5: CALLVALUE 000008d6: ISZERO 000008d7: PUSH2 0x08dc 000008da: JUMPI 000008db: INVALID 000008dc: JUMPDEST 000008dd: PUSH2 0x0908 000008e0: PUSH1 0x04 000008e2: DUP1 000008e3: DUP1 000008e4: CALLDATALOAD 000008e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008fa: AND 000008fb: SWAP1 000008fc: PUSH1 0x20 000008fe: ADD 000008ff: SWAP1 00000900: SWAP2 00000901: SWAP1 00000902: POP 00000903: POP 00000904: PUSH2 0x2976 00000907: JUMP 00000908: JUMPDEST 00000909: STOP 0000090a: JUMPDEST 0000090b: CALLVALUE 0000090c: ISZERO 0000090d: PUSH2 0x0912 00000910: JUMPI 00000911: INVALID 00000912: JUMPDEST 00000913: PUSH2 0x091a 00000916: PUSH2 0x2a17 00000919: JUMP 0000091a: JUMPDEST 0000091b: PUSH1 0x40 0000091d: MLOAD 0000091e: DUP1 0000091f: DUP3 00000920: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000935: AND 00000936: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000094b: AND 0000094c: DUP2 0000094d: MSTORE 0000094e: PUSH1 0x20 00000950: ADD 00000951: SWAP2 00000952: POP 00000953: POP 00000954: PUSH1 0x40 00000956: MLOAD 00000957: DUP1 00000958: SWAP2 00000959: SUB 0000095a: SWAP1 0000095b: RETURN 0000095c: JUMPDEST 0000095d: CALLVALUE 0000095e: ISZERO 0000095f: PUSH2 0x0964 00000962: JUMPI 00000963: INVALID 00000964: JUMPDEST 00000965: PUSH2 0x09af 00000968: PUSH1 0x04 0000096a: DUP1 0000096b: DUP1 0000096c: CALLDATALOAD 0000096d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000982: AND 00000983: SWAP1 00000984: PUSH1 0x20 00000986: ADD 00000987: SWAP1 00000988: SWAP2 00000989: SWAP1 0000098a: DUP1 0000098b: CALLDATALOAD 0000098c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009a1: AND 000009a2: SWAP1 000009a3: PUSH1 0x20 000009a5: ADD 000009a6: SWAP1 000009a7: SWAP2 000009a8: SWAP1 000009a9: POP 000009aa: POP 000009ab: PUSH2 0x2a3d 000009ae: JUMP 000009af: JUMPDEST 000009b0: PUSH1 0x40 000009b2: MLOAD 000009b3: DUP1 000009b4: DUP3 000009b5: DUP2 000009b6: MSTORE 000009b7: PUSH1 0x20 000009b9: ADD 000009ba: SWAP2 000009bb: POP 000009bc: POP 000009bd: PUSH1 0x40 000009bf: MLOAD 000009c0: DUP1 000009c1: SWAP2 000009c2: SUB 000009c3: SWAP1 000009c4: RETURN 000009c5: JUMPDEST 000009c6: CALLVALUE 000009c7: ISZERO 000009c8: PUSH2 0x09cd 000009cb: JUMPI 000009cc: INVALID 000009cd: JUMPDEST 000009ce: PUSH2 0x09d5 000009d1: PUSH2 0x2ac5 000009d4: JUMP 000009d5: JUMPDEST 000009d6: PUSH1 0x40 000009d8: MLOAD 000009d9: DUP1 000009da: DUP3 000009db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009f0: AND 000009f1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a06: AND 00000a07: DUP2 00000a08: MSTORE 00000a09: PUSH1 0x20 00000a0b: ADD 00000a0c: SWAP2 00000a0d: POP 00000a0e: POP 00000a0f: PUSH1 0x40 00000a11: MLOAD 00000a12: DUP1 00000a13: SWAP2 00000a14: SUB 00000a15: SWAP1 00000a16: RETURN 00000a17: JUMPDEST 00000a18: CALLVALUE 00000a19: ISZERO 00000a1a: PUSH2 0x0a1f 00000a1d: JUMPI 00000a1e: INVALID 00000a1f: JUMPDEST 00000a20: PUSH2 0x0a4b 00000a23: PUSH1 0x04 00000a25: DUP1 00000a26: DUP1 00000a27: CALLDATALOAD 00000a28: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a3d: AND 00000a3e: SWAP1 00000a3f: PUSH1 0x20 00000a41: ADD 00000a42: SWAP1 00000a43: SWAP2 00000a44: SWAP1 00000a45: POP 00000a46: POP 00000a47: PUSH2 0x2aeb 00000a4a: JUMP 00000a4b: JUMPDEST 00000a4c: PUSH1 0x40 00000a4e: MLOAD 00000a4f: DUP1 00000a50: DUP3 00000a51: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a66: AND 00000a67: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a7c: AND 00000a7d: DUP2 00000a7e: MSTORE 00000a7f: PUSH1 0x20 00000a81: ADD 00000a82: SWAP2 00000a83: POP 00000a84: POP 00000a85: PUSH1 0x40 00000a87: MLOAD 00000a88: DUP1 00000a89: SWAP2 00000a8a: SUB 00000a8b: SWAP1 00000a8c: RETURN 00000a8d: JUMPDEST 00000a8e: CALLVALUE 00000a8f: ISZERO 00000a90: PUSH2 0x0a95 00000a93: JUMPI 00000a94: INVALID 00000a95: JUMPDEST 00000a96: PUSH2 0x0b49 00000a99: PUSH1 0x04 00000a9b: DUP1 00000a9c: DUP1 00000a9d: CALLDATALOAD 00000a9e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ab3: AND 00000ab4: SWAP1 00000ab5: PUSH1 0x20 00000ab7: ADD 00000ab8: SWAP1 00000ab9: SWAP2 00000aba: SWAP1 00000abb: DUP1 00000abc: CALLDATALOAD 00000abd: SWAP1 00000abe: PUSH1 0x20 00000ac0: ADD 00000ac1: SWAP1 00000ac2: SWAP2 00000ac3: SWAP1 00000ac4: DUP1 00000ac5: CALLDATALOAD 00000ac6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000adb: AND 00000adc: SWAP1 00000add: PUSH1 0x20 00000adf: ADD 00000ae0: SWAP1 00000ae1: SWAP2 00000ae2: SWAP1 00000ae3: DUP1 00000ae4: CALLDATALOAD 00000ae5: SWAP1 00000ae6: PUSH1 0x20 00000ae8: ADD 00000ae9: SWAP1 00000aea: SWAP2 00000aeb: SWAP1 00000aec: DUP1 00000aed: CALLDATALOAD 00000aee: SWAP1 00000aef: PUSH1 0x20 00000af1: ADD 00000af2: SWAP1 00000af3: SWAP2 00000af4: SWAP1 00000af5: DUP1 00000af6: CALLDATALOAD 00000af7: SWAP1 00000af8: PUSH1 0x20 00000afa: ADD 00000afb: SWAP1 00000afc: SWAP2 00000afd: SWAP1 00000afe: DUP1 00000aff: CALLDATALOAD 00000b00: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b15: AND 00000b16: SWAP1 00000b17: PUSH1 0x20 00000b19: ADD 00000b1a: SWAP1 00000b1b: SWAP2 00000b1c: SWAP1 00000b1d: DUP1 00000b1e: CALLDATALOAD 00000b1f: PUSH1 0xff 00000b21: AND 00000b22: SWAP1 00000b23: PUSH1 0x20 00000b25: ADD 00000b26: SWAP1 00000b27: SWAP2 00000b28: SWAP1 00000b29: DUP1 00000b2a: CALLDATALOAD 00000b2b: PUSH1 0x00 00000b2d: NOT 00000b2e: AND 00000b2f: SWAP1 00000b30: PUSH1 0x20 00000b32: ADD 00000b33: SWAP1 00000b34: SWAP2 00000b35: SWAP1 00000b36: DUP1 00000b37: CALLDATALOAD 00000b38: PUSH1 0x00 00000b3a: NOT 00000b3b: AND 00000b3c: SWAP1 00000b3d: PUSH1 0x20 00000b3f: ADD 00000b40: SWAP1 00000b41: SWAP2 00000b42: SWAP1 00000b43: POP 00000b44: POP 00000b45: PUSH2 0x2b1e 00000b48: JUMP 00000b49: JUMPDEST 00000b4a: PUSH1 0x40 00000b4c: MLOAD 00000b4d: DUP1 00000b4e: DUP3 00000b4f: DUP2 00000b50: MSTORE 00000b51: PUSH1 0x20 00000b53: ADD 00000b54: SWAP2 00000b55: POP 00000b56: POP 00000b57: PUSH1 0x40 00000b59: MLOAD 00000b5a: DUP1 00000b5b: SWAP2 00000b5c: SUB 00000b5d: SWAP1 00000b5e: RETURN 00000b5f: JUMPDEST 00000b60: PUSH1 0x00 00000b62: PUSH1 0x02 00000b64: ADDRESS 00000b65: DUP14 00000b66: DUP14 00000b67: DUP14 00000b68: DUP14 00000b69: DUP14 00000b6a: DUP14 00000b6b: PUSH1 0x00 00000b6d: PUSH1 0x40 00000b6f: MLOAD 00000b70: PUSH1 0x20 00000b72: ADD 00000b73: MSTORE 00000b74: PUSH1 0x40 00000b76: MLOAD 00000b77: DUP1 00000b78: DUP9 00000b79: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b8e: AND 00000b8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ba4: AND 00000ba5: PUSH13 0x01000000000000000000000000 00000bb3: MUL 00000bb4: DUP2 00000bb5: MSTORE 00000bb6: PUSH1 0x14 00000bb8: ADD 00000bb9: DUP8 00000bba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bcf: AND 00000bd0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000be5: AND 00000be6: PUSH13 0x01000000000000000000000000 00000bf4: MUL 00000bf5: DUP2 00000bf6: MSTORE 00000bf7: PUSH1 0x14 00000bf9: ADD 00000bfa: DUP7 00000bfb: DUP2 00000bfc: MSTORE 00000bfd: PUSH1 0x20 00000bff: ADD 00000c00: DUP6 00000c01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c16: AND 00000c17: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c2c: AND 00000c2d: PUSH13 0x01000000000000000000000000 00000c3b: MUL 00000c3c: DUP2 00000c3d: MSTORE 00000c3e: PUSH1 0x14 00000c40: ADD 00000c41: DUP5 00000c42: DUP2 00000c43: MSTORE 00000c44: PUSH1 0x20 00000c46: ADD 00000c47: DUP4 00000c48: DUP2 00000c49: MSTORE 00000c4a: PUSH1 0x20 00000c4c: ADD 00000c4d: DUP3 00000c4e: DUP2 00000c4f: MSTORE 00000c50: PUSH1 0x20 00000c52: ADD 00000c53: SWAP8 00000c54: POP 00000c55: POP 00000c56: POP 00000c57: POP 00000c58: POP 00000c59: POP 00000c5a: POP 00000c5b: POP 00000c5c: PUSH1 0x20 00000c5e: PUSH1 0x40 00000c60: MLOAD 00000c61: DUP1 00000c62: DUP4 00000c63: SUB 00000c64: DUP2 00000c65: PUSH1 0x00 00000c67: DUP7 00000c68: PUSH2 0x61da 00000c6b: GAS 00000c6c: SUB 00000c6d: CALL 00000c6e: ISZERO 00000c6f: ISZERO 00000c70: PUSH2 0x0c75 00000c73: JUMPI 00000c74: INVALID 00000c75: JUMPDEST 00000c76: POP 00000c77: POP 00000c78: PUSH1 0x40 00000c7a: MLOAD 00000c7b: DUP1 00000c7c: MLOAD 00000c7d: SWAP1 00000c7e: POP 00000c7f: SWAP1 00000c80: POP 00000c81: PUSH1 0x07 00000c83: PUSH1 0x00 00000c85: DUP8 00000c86: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c9b: AND 00000c9c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cb1: AND 00000cb2: DUP2 00000cb3: MSTORE 00000cb4: PUSH1 0x20 00000cb6: ADD 00000cb7: SWAP1 00000cb8: DUP2 00000cb9: MSTORE 00000cba: PUSH1 0x20 00000cbc: ADD 00000cbd: PUSH1 0x00 00000cbf: KECCAK256 00000cc0: PUSH1 0x00 00000cc2: DUP3 00000cc3: PUSH1 0x00 00000cc5: NOT 00000cc6: AND 00000cc7: PUSH1 0x00 00000cc9: NOT 00000cca: AND 00000ccb: DUP2 00000ccc: MSTORE 00000ccd: PUSH1 0x20 00000ccf: ADD 00000cd0: SWAP1 00000cd1: DUP2 00000cd2: MSTORE 00000cd3: PUSH1 0x20 00000cd5: ADD 00000cd6: PUSH1 0x00 00000cd8: KECCAK256 00000cd9: PUSH1 0x00 00000cdb: SWAP1 00000cdc: SLOAD 00000cdd: SWAP1 00000cde: PUSH2 0x0100 00000ce1: EXP 00000ce2: SWAP1 00000ce3: DIV 00000ce4: PUSH1 0xff 00000ce6: AND 00000ce7: DUP1 00000ce8: PUSH2 0x0de4 00000ceb: JUMPI 00000cec: POP 00000ced: DUP6 00000cee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d03: AND 00000d04: PUSH1 0x01 00000d06: DUP3 00000d07: PUSH1 0x40 00000d09: MLOAD 00000d0a: DUP1 00000d0b: DUP1 00000d0c: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00000d2d: DUP2 00000d2e: MSTORE 00000d2f: POP 00000d30: PUSH1 0x1c 00000d32: ADD 00000d33: DUP3 00000d34: PUSH1 0x00 00000d36: NOT 00000d37: AND 00000d38: PUSH1 0x00 00000d3a: NOT 00000d3b: AND 00000d3c: DUP2 00000d3d: MSTORE 00000d3e: PUSH1 0x20 00000d40: ADD 00000d41: SWAP2 00000d42: POP 00000d43: POP 00000d44: PUSH1 0x40 00000d46: MLOAD 00000d47: DUP1 00000d48: SWAP2 00000d49: SUB 00000d4a: SWAP1 00000d4b: KECCAK256 00000d4c: DUP8 00000d4d: DUP8 00000d4e: DUP8 00000d4f: PUSH1 0x40 00000d51: MLOAD 00000d52: DUP1 00000d53: PUSH1 0x00 00000d55: MSTORE 00000d56: PUSH1 0x20 00000d58: ADD 00000d59: PUSH1 0x40 00000d5b: MSTORE 00000d5c: PUSH1 0x00 00000d5e: PUSH1 0x40 00000d60: MLOAD 00000d61: PUSH1 0x20 00000d63: ADD 00000d64: MSTORE 00000d65: PUSH1 0x40 00000d67: MLOAD 00000d68: DUP1 00000d69: DUP6 00000d6a: PUSH1 0x00 00000d6c: NOT 00000d6d: AND 00000d6e: PUSH1 0x00 00000d70: NOT 00000d71: AND 00000d72: DUP2 00000d73: MSTORE 00000d74: PUSH1 0x20 00000d76: ADD 00000d77: DUP5 00000d78: PUSH1 0xff 00000d7a: AND 00000d7b: PUSH1 0xff 00000d7d: AND 00000d7e: DUP2 00000d7f: MSTORE 00000d80: PUSH1 0x20 00000d82: ADD 00000d83: DUP4 00000d84: PUSH1 0x00 00000d86: NOT 00000d87: AND 00000d88: PUSH1 0x00 00000d8a: NOT 00000d8b: AND 00000d8c: DUP2 00000d8d: MSTORE 00000d8e: PUSH1 0x20 00000d90: ADD 00000d91: DUP3 00000d92: PUSH1 0x00 00000d94: NOT 00000d95: AND 00000d96: PUSH1 0x00 00000d98: NOT 00000d99: AND 00000d9a: DUP2 00000d9b: MSTORE 00000d9c: PUSH1 0x20 00000d9e: ADD 00000d9f: SWAP5 00000da0: POP 00000da1: POP 00000da2: POP 00000da3: POP 00000da4: POP 00000da5: PUSH1 0x20 00000da7: PUSH1 0x40 00000da9: MLOAD 00000daa: PUSH1 0x20 00000dac: DUP2 00000dad: SUB 00000dae: SWAP1 00000daf: DUP1 00000db0: DUP5 00000db1: SUB 00000db2: SWAP1 00000db3: PUSH1 0x00 00000db5: DUP7 00000db6: PUSH2 0x61da 00000db9: GAS 00000dba: SUB 00000dbb: CALL 00000dbc: ISZERO 00000dbd: ISZERO 00000dbe: PUSH2 0x0dc3 00000dc1: JUMPI 00000dc2: INVALID 00000dc3: JUMPDEST 00000dc4: POP 00000dc5: POP 00000dc6: PUSH1 0x20 00000dc8: PUSH1 0x40 00000dca: MLOAD 00000dcb: SUB 00000dcc: MLOAD 00000dcd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000de2: AND 00000de3: EQ 00000de4: JUMPDEST 00000de5: DUP1 00000de6: ISZERO 00000de7: PUSH2 0x0df0 00000dea: JUMPI 00000deb: POP 00000dec: DUP8 00000ded: NUMBER 00000dee: GT 00000def: ISZERO 00000df0: JUMPDEST 00000df1: DUP1 00000df2: ISZERO 00000df3: PUSH2 0x0e5d 00000df6: JUMPI 00000df7: POP 00000df8: DUP11 00000df9: PUSH2 0x0e5a 00000dfc: PUSH1 0x08 00000dfe: PUSH1 0x00 00000e00: DUP10 00000e01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e16: AND 00000e17: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e2c: AND 00000e2d: DUP2 00000e2e: MSTORE 00000e2f: PUSH1 0x20 00000e31: ADD 00000e32: SWAP1 00000e33: DUP2 00000e34: MSTORE 00000e35: PUSH1 0x20 00000e37: ADD 00000e38: PUSH1 0x00 00000e3a: KECCAK256 00000e3b: PUSH1 0x00 00000e3d: DUP5 00000e3e: PUSH1 0x00 00000e40: NOT 00000e41: AND 00000e42: PUSH1 0x00 00000e44: NOT 00000e45: AND 00000e46: DUP2 00000e47: MSTORE 00000e48: PUSH1 0x20 00000e4a: ADD 00000e4b: SWAP1 00000e4c: DUP2 00000e4d: MSTORE 00000e4e: PUSH1 0x20 00000e50: ADD 00000e51: PUSH1 0x00 00000e53: KECCAK256 00000e54: SLOAD 00000e55: DUP5 00000e56: PUSH2 0x2ee0 00000e59: JUMP 00000e5a: JUMPDEST 00000e5b: GT 00000e5c: ISZERO 00000e5d: JUMPDEST 00000e5e: ISZERO 00000e5f: ISZERO 00000e60: PUSH2 0x0e68 00000e63: JUMPI 00000e64: PUSH2 0x0000 00000e67: JUMP 00000e68: JUMPDEST 00000e69: PUSH2 0x0e76 00000e6c: DUP13 00000e6d: DUP13 00000e6e: DUP13 00000e6f: DUP13 00000e70: DUP11 00000e71: DUP8 00000e72: PUSH2 0x2f0c 00000e75: JUMP 00000e76: JUMPDEST 00000e77: PUSH2 0x0ed8 00000e7a: PUSH1 0x08 00000e7c: PUSH1 0x00 00000e7e: DUP9 00000e7f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e94: AND 00000e95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eaa: AND 00000eab: DUP2 00000eac: MSTORE 00000ead: PUSH1 0x20 00000eaf: ADD 00000eb0: SWAP1 00000eb1: DUP2 00000eb2: MSTORE 00000eb3: PUSH1 0x20 00000eb5: ADD 00000eb6: PUSH1 0x00 00000eb8: KECCAK256 00000eb9: PUSH1 0x00 00000ebb: DUP4 00000ebc: PUSH1 0x00 00000ebe: NOT 00000ebf: AND 00000ec0: PUSH1 0x00 00000ec2: NOT 00000ec3: AND 00000ec4: DUP2 00000ec5: MSTORE 00000ec6: PUSH1 0x20 00000ec8: ADD 00000ec9: SWAP1 00000eca: DUP2 00000ecb: MSTORE 00000ecc: PUSH1 0x20 00000ece: ADD 00000ecf: PUSH1 0x00 00000ed1: KECCAK256 00000ed2: SLOAD 00000ed3: DUP4 00000ed4: PUSH2 0x2ee0 00000ed7: JUMP 00000ed8: JUMPDEST 00000ed9: PUSH1 0x08 00000edb: PUSH1 0x00 00000edd: DUP9 00000ede: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ef3: AND 00000ef4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f09: AND 00000f0a: DUP2 00000f0b: MSTORE 00000f0c: PUSH1 0x20 00000f0e: ADD 00000f0f: SWAP1 00000f10: DUP2 00000f11: MSTORE 00000f12: PUSH1 0x20 00000f14: ADD 00000f15: PUSH1 0x00 00000f17: KECCAK256 00000f18: PUSH1 0x00 00000f1a: DUP4 00000f1b: PUSH1 0x00 00000f1d: NOT 00000f1e: AND 00000f1f: PUSH1 0x00 00000f21: NOT 00000f22: AND 00000f23: DUP2 00000f24: MSTORE 00000f25: PUSH1 0x20 00000f27: ADD 00000f28: SWAP1 00000f29: DUP2 00000f2a: MSTORE 00000f2b: PUSH1 0x20 00000f2d: ADD 00000f2e: PUSH1 0x00 00000f30: KECCAK256 00000f31: DUP2 00000f32: SWAP1 00000f33: SSTORE 00000f34: POP 00000f35: PUSH32 0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d 00000f56: DUP13 00000f57: DUP4 00000f58: DUP13 00000f59: DUP15 00000f5a: DUP7 00000f5b: DUP15 00000f5c: MUL 00000f5d: DUP2 00000f5e: ISZERO 00000f5f: ISZERO 00000f60: PUSH2 0x0f65 00000f63: JUMPI 00000f64: INVALID 00000f65: JUMPDEST 00000f66: DIV 00000f67: DUP11 00000f68: CALLER 00000f69: PUSH1 0x40 00000f6b: MLOAD 00000f6c: DUP1 00000f6d: DUP8 00000f6e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f83: AND 00000f84: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f99: AND 00000f9a: DUP2 00000f9b: MSTORE 00000f9c: PUSH1 0x20 00000f9e: ADD 00000f9f: DUP7 00000fa0: DUP2 00000fa1: MSTORE 00000fa2: PUSH1 0x20 00000fa4: ADD 00000fa5: DUP6 00000fa6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fbb: AND 00000fbc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fd1: AND 00000fd2: DUP2 00000fd3: MSTORE 00000fd4: PUSH1 0x20 00000fd6: ADD 00000fd7: DUP5 00000fd8: DUP2 00000fd9: MSTORE 00000fda: PUSH1 0x20 00000fdc: ADD 00000fdd: DUP4 00000fde: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ff3: AND 00000ff4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001009: AND 0000100a: DUP2 0000100b: MSTORE 0000100c: PUSH1 0x20 0000100e: ADD 0000100f: DUP3 00001010: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001025: AND 00001026: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000103b: AND 0000103c: DUP2 0000103d: MSTORE 0000103e: PUSH1 0x20 00001040: ADD 00001041: SWAP7 00001042: POP 00001043: POP 00001044: POP 00001045: POP 00001046: POP 00001047: POP 00001048: POP 00001049: PUSH1 0x40 0000104b: MLOAD 0000104c: DUP1 0000104d: SWAP2 0000104e: SUB 0000104f: SWAP1 00001050: LOG1 00001051: JUMPDEST 00001052: POP 00001053: POP 00001054: POP 00001055: POP 00001056: POP 00001057: POP 00001058: POP 00001059: POP 0000105a: POP 0000105b: POP 0000105c: POP 0000105d: POP 0000105e: JUMP 0000105f: JUMPDEST 00001060: PUSH1 0x00 00001062: PUSH1 0x02 00001064: ADDRESS 00001065: DUP9 00001066: DUP9 00001067: DUP9 00001068: DUP9 00001069: DUP9 0000106a: DUP9 0000106b: PUSH1 0x00 0000106d: PUSH1 0x40 0000106f: MLOAD 00001070: PUSH1 0x20 00001072: ADD 00001073: MSTORE 00001074: PUSH1 0x40 00001076: MLOAD 00001077: DUP1 00001078: DUP9 00001079: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000108e: AND 0000108f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010a4: AND 000010a5: PUSH13 0x01000000000000000000000000 000010b3: MUL 000010b4: DUP2 000010b5: MSTORE 000010b6: PUSH1 0x14 000010b8: ADD 000010b9: DUP8 000010ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010cf: AND 000010d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010e5: AND 000010e6: PUSH13 0x01000000000000000000000000 000010f4: MUL 000010f5: DUP2 000010f6: MSTORE 000010f7: PUSH1 0x14 000010f9: ADD 000010fa: DUP7 000010fb: DUP2 000010fc: MSTORE 000010fd: PUSH1 0x20 000010ff: ADD 00001100: DUP6 00001101: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001116: AND 00001117: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000112c: AND 0000112d: PUSH13 0x01000000000000000000000000 0000113b: MUL 0000113c: DUP2 0000113d: MSTORE 0000113e: PUSH1 0x14 00001140: ADD 00001141: DUP5 00001142: DUP2 00001143: MSTORE 00001144: PUSH1 0x20 00001146: ADD 00001147: DUP4 00001148: DUP2 00001149: MSTORE 0000114a: PUSH1 0x20 0000114c: ADD 0000114d: DUP3 0000114e: DUP2 0000114f: MSTORE 00001150: PUSH1 0x20 00001152: ADD 00001153: SWAP8 00001154: POP 00001155: POP 00001156: POP 00001157: POP 00001158: POP 00001159: POP 0000115a: POP 0000115b: POP 0000115c: PUSH1 0x20 0000115e: PUSH1 0x40 00001160: MLOAD 00001161: DUP1 00001162: DUP4 00001163: SUB 00001164: DUP2 00001165: PUSH1 0x00 00001167: DUP7 00001168: PUSH2 0x61da 0000116b: GAS 0000116c: SUB 0000116d: CALL 0000116e: ISZERO 0000116f: ISZERO 00001170: PUSH2 0x1175 00001173: JUMPI 00001174: INVALID 00001175: JUMPDEST 00001176: POP 00001177: POP 00001178: PUSH1 0x40 0000117a: MLOAD 0000117b: DUP1 0000117c: MLOAD 0000117d: SWAP1 0000117e: POP 0000117f: SWAP1 00001180: POP 00001181: PUSH1 0x01 00001183: PUSH1 0x07 00001185: PUSH1 0x00 00001187: CALLER 00001188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119d: AND 0000119e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011b3: AND 000011b4: DUP2 000011b5: MSTORE 000011b6: PUSH1 0x20 000011b8: ADD 000011b9: SWAP1 000011ba: DUP2 000011bb: MSTORE 000011bc: PUSH1 0x20 000011be: ADD 000011bf: PUSH1 0x00 000011c1: KECCAK256 000011c2: PUSH1 0x00 000011c4: DUP4 000011c5: PUSH1 0x00 000011c7: NOT 000011c8: AND 000011c9: PUSH1 0x00 000011cb: NOT 000011cc: AND 000011cd: DUP2 000011ce: MSTORE 000011cf: PUSH1 0x20 000011d1: ADD 000011d2: SWAP1 000011d3: DUP2 000011d4: MSTORE 000011d5: PUSH1 0x20 000011d7: ADD 000011d8: PUSH1 0x00 000011da: KECCAK256 000011db: PUSH1 0x00 000011dd: PUSH2 0x0100 000011e0: EXP 000011e1: DUP2 000011e2: SLOAD 000011e3: DUP2 000011e4: PUSH1 0xff 000011e6: MUL 000011e7: NOT 000011e8: AND 000011e9: SWAP1 000011ea: DUP4 000011eb: ISZERO 000011ec: ISZERO 000011ed: MUL 000011ee: OR 000011ef: SWAP1 000011f0: SSTORE 000011f1: POP 000011f2: PUSH32 0x3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e85 00001213: DUP8 00001214: DUP8 00001215: DUP8 00001216: DUP8 00001217: DUP8 00001218: DUP8 00001219: CALLER 0000121a: PUSH1 0x40 0000121c: MLOAD 0000121d: DUP1 0000121e: DUP9 0000121f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001234: AND 00001235: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000124a: AND 0000124b: DUP2 0000124c: MSTORE 0000124d: PUSH1 0x20 0000124f: ADD 00001250: DUP8 00001251: DUP2 00001252: MSTORE 00001253: PUSH1 0x20 00001255: ADD 00001256: DUP7 00001257: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000126c: AND 0000126d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001282: AND 00001283: DUP2 00001284: MSTORE 00001285: PUSH1 0x20 00001287: ADD 00001288: DUP6 00001289: DUP2 0000128a: MSTORE 0000128b: PUSH1 0x20 0000128d: ADD 0000128e: DUP5 0000128f: DUP2 00001290: MSTORE 00001291: PUSH1 0x20 00001293: ADD 00001294: DUP4 00001295: DUP2 00001296: MSTORE 00001297: PUSH1 0x20 00001299: ADD 0000129a: DUP3 0000129b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012b0: AND 000012b1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012c6: AND 000012c7: DUP2 000012c8: MSTORE 000012c9: PUSH1 0x20 000012cb: ADD 000012cc: SWAP8 000012cd: POP 000012ce: POP 000012cf: POP 000012d0: POP 000012d1: POP 000012d2: POP 000012d3: POP 000012d4: POP 000012d5: PUSH1 0x40 000012d7: MLOAD 000012d8: DUP1 000012d9: SWAP2 000012da: SUB 000012db: SWAP1 000012dc: LOG1 000012dd: JUMPDEST 000012de: POP 000012df: POP 000012e0: POP 000012e1: POP 000012e2: POP 000012e3: POP 000012e4: POP 000012e5: JUMP 000012e6: JUMPDEST 000012e7: PUSH1 0x08 000012e9: PUSH1 0x20 000012eb: MSTORE 000012ec: DUP2 000012ed: PUSH1 0x00 000012ef: MSTORE 000012f0: PUSH1 0x40 000012f2: PUSH1 0x00 000012f4: KECCAK256 000012f5: PUSH1 0x20 000012f7: MSTORE 000012f8: DUP1 000012f9: PUSH1 0x00 000012fb: MSTORE 000012fc: PUSH1 0x40 000012fe: PUSH1 0x00 00001300: KECCAK256 00001301: PUSH1 0x00 00001303: SWAP2 00001304: POP 00001305: SWAP2 00001306: POP 00001307: POP 00001308: SLOAD 00001309: DUP2 0000130a: JUMP 0000130b: JUMPDEST 0000130c: PUSH1 0x00 0000130e: PUSH1 0x02 00001310: ADDRESS 00001311: DUP12 00001312: DUP12 00001313: DUP12 00001314: DUP12 00001315: DUP12 00001316: DUP12 00001317: PUSH1 0x00 00001319: PUSH1 0x40 0000131b: MLOAD 0000131c: PUSH1 0x20 0000131e: ADD 0000131f: MSTORE 00001320: PUSH1 0x40 00001322: MLOAD 00001323: DUP1 00001324: DUP9 00001325: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000133a: AND 0000133b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001350: AND 00001351: PUSH13 0x01000000000000000000000000 0000135f: MUL 00001360: DUP2 00001361: MSTORE 00001362: PUSH1 0x14 00001364: ADD 00001365: DUP8 00001366: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000137b: AND 0000137c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001391: AND 00001392: PUSH13 0x01000000000000000000000000 000013a0: MUL 000013a1: DUP2 000013a2: MSTORE 000013a3: PUSH1 0x14 000013a5: ADD 000013a6: DUP7 000013a7: DUP2 000013a8: MSTORE 000013a9: PUSH1 0x20 000013ab: ADD 000013ac: DUP6 000013ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013c2: AND 000013c3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013d8: AND 000013d9: PUSH13 0x01000000000000000000000000 000013e7: MUL 000013e8: DUP2 000013e9: MSTORE 000013ea: PUSH1 0x14 000013ec: ADD 000013ed: DUP5 000013ee: DUP2 000013ef: MSTORE 000013f0: PUSH1 0x20 000013f2: ADD 000013f3: DUP4 000013f4: DUP2 000013f5: MSTORE 000013f6: PUSH1 0x20 000013f8: ADD 000013f9: DUP3 000013fa: DUP2 000013fb: MSTORE 000013fc: PUSH1 0x20 000013fe: ADD 000013ff: SWAP8 00001400: POP 00001401: POP 00001402: POP 00001403: POP 00001404: POP 00001405: POP 00001406: POP 00001407: POP 00001408: PUSH1 0x20 0000140a: PUSH1 0x40 0000140c: MLOAD 0000140d: DUP1 0000140e: DUP4 0000140f: SUB 00001410: DUP2 00001411: PUSH1 0x00 00001413: DUP7 00001414: PUSH2 0x61da 00001417: GAS 00001418: SUB 00001419: CALL 0000141a: ISZERO 0000141b: ISZERO 0000141c: PUSH2 0x1421 0000141f: JUMPI 00001420: INVALID 00001421: JUMPDEST 00001422: POP 00001423: POP 00001424: PUSH1 0x40 00001426: MLOAD 00001427: DUP1 00001428: MLOAD 00001429: SWAP1 0000142a: POP 0000142b: SWAP1 0000142c: POP 0000142d: PUSH1 0x07 0000142f: PUSH1 0x00 00001431: CALLER 00001432: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001447: AND 00001448: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000145d: AND 0000145e: DUP2 0000145f: MSTORE 00001460: PUSH1 0x20 00001462: ADD 00001463: SWAP1 00001464: DUP2 00001465: MSTORE 00001466: PUSH1 0x20 00001468: ADD 00001469: PUSH1 0x00 0000146b: KECCAK256 0000146c: PUSH1 0x00 0000146e: DUP3 0000146f: PUSH1 0x00 00001471: NOT 00001472: AND 00001473: PUSH1 0x00 00001475: NOT 00001476: AND 00001477: DUP2 00001478: MSTORE 00001479: PUSH1 0x20 0000147b: ADD 0000147c: SWAP1 0000147d: DUP2 0000147e: MSTORE 0000147f: PUSH1 0x20 00001481: ADD 00001482: PUSH1 0x00 00001484: KECCAK256 00001485: PUSH1 0x00 00001487: SWAP1 00001488: SLOAD 00001489: SWAP1 0000148a: PUSH2 0x0100 0000148d: EXP 0000148e: SWAP1 0000148f: DIV 00001490: PUSH1 0xff 00001492: AND 00001493: DUP1 00001494: PUSH2 0x1590 00001497: JUMPI 00001498: POP 00001499: CALLER 0000149a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014af: AND 000014b0: PUSH1 0x01 000014b2: DUP3 000014b3: PUSH1 0x40 000014b5: MLOAD 000014b6: DUP1 000014b7: DUP1 000014b8: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 000014d9: DUP2 000014da: MSTORE 000014db: POP 000014dc: PUSH1 0x1c 000014de: ADD 000014df: DUP3 000014e0: PUSH1 0x00 000014e2: NOT 000014e3: AND 000014e4: PUSH1 0x00 000014e6: NOT 000014e7: AND 000014e8: DUP2 000014e9: MSTORE 000014ea: PUSH1 0x20 000014ec: ADD 000014ed: SWAP2 000014ee: POP 000014ef: POP 000014f0: PUSH1 0x40 000014f2: MLOAD 000014f3: DUP1 000014f4: SWAP2 000014f5: SUB 000014f6: SWAP1 000014f7: KECCAK256 000014f8: DUP7 000014f9: DUP7 000014fa: DUP7 000014fb: PUSH1 0x40 000014fd: MLOAD 000014fe: DUP1 000014ff: PUSH1 0x00 00001501: MSTORE 00001502: PUSH1 0x20 00001504: ADD 00001505: PUSH1 0x40 00001507: MSTORE 00001508: PUSH1 0x00 0000150a: PUSH1 0x40 0000150c: MLOAD 0000150d: PUSH1 0x20 0000150f: ADD 00001510: MSTORE 00001511: PUSH1 0x40 00001513: MLOAD 00001514: DUP1 00001515: DUP6 00001516: PUSH1 0x00 00001518: NOT 00001519: AND 0000151a: PUSH1 0x00 0000151c: NOT 0000151d: AND 0000151e: DUP2 0000151f: MSTORE 00001520: PUSH1 0x20 00001522: ADD 00001523: DUP5 00001524: PUSH1 0xff 00001526: AND 00001527: PUSH1 0xff 00001529: AND 0000152a: DUP2 0000152b: MSTORE 0000152c: PUSH1 0x20 0000152e: ADD 0000152f: DUP4 00001530: PUSH1 0x00 00001532: NOT 00001533: AND 00001534: PUSH1 0x00 00001536: NOT 00001537: AND 00001538: DUP2 00001539: MSTORE 0000153a: PUSH1 0x20 0000153c: ADD 0000153d: DUP3 0000153e: PUSH1 0x00 00001540: NOT 00001541: AND 00001542: PUSH1 0x00 00001544: NOT 00001545: AND 00001546: DUP2 00001547: MSTORE 00001548: PUSH1 0x20 0000154a: ADD 0000154b: SWAP5 0000154c: POP 0000154d: POP 0000154e: POP 0000154f: POP 00001550: POP 00001551: PUSH1 0x20 00001553: PUSH1 0x40 00001555: MLOAD 00001556: PUSH1 0x20 00001558: DUP2 00001559: SUB 0000155a: SWAP1 0000155b: DUP1 0000155c: DUP5 0000155d: SUB 0000155e: SWAP1 0000155f: PUSH1 0x00 00001561: DUP7 00001562: PUSH2 0x61da 00001565: GAS 00001566: SUB 00001567: CALL 00001568: ISZERO 00001569: ISZERO 0000156a: PUSH2 0x156f 0000156d: JUMPI 0000156e: INVALID 0000156f: JUMPDEST 00001570: POP 00001571: POP 00001572: PUSH1 0x20 00001574: PUSH1 0x40 00001576: MLOAD 00001577: SUB 00001578: MLOAD 00001579: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000158e: AND 0000158f: EQ 00001590: JUMPDEST 00001591: ISZERO 00001592: ISZERO 00001593: PUSH2 0x159b 00001596: JUMPI 00001597: PUSH2 0x0000 0000159a: JUMP 0000159b: JUMPDEST 0000159c: DUP9 0000159d: PUSH1 0x08 0000159f: PUSH1 0x00 000015a1: CALLER 000015a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015b7: AND 000015b8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015cd: AND 000015ce: DUP2 000015cf: MSTORE 000015d0: PUSH1 0x20 000015d2: ADD 000015d3: SWAP1 000015d4: DUP2 000015d5: MSTORE 000015d6: PUSH1 0x20 000015d8: ADD 000015d9: PUSH1 0x00 000015db: KECCAK256 000015dc: PUSH1 0x00 000015de: DUP4 000015df: PUSH1 0x00 000015e1: NOT 000015e2: AND 000015e3: PUSH1 0x00 000015e5: NOT 000015e6: AND 000015e7: DUP2 000015e8: MSTORE 000015e9: PUSH1 0x20 000015eb: ADD 000015ec: SWAP1 000015ed: DUP2 000015ee: MSTORE 000015ef: PUSH1 0x20 000015f1: ADD 000015f2: PUSH1 0x00 000015f4: KECCAK256 000015f5: DUP2 000015f6: SWAP1 000015f7: SSTORE 000015f8: POP 000015f9: PUSH32 0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0 0000161a: DUP11 0000161b: DUP11 0000161c: DUP11 0000161d: DUP11 0000161e: DUP11 0000161f: DUP11 00001620: CALLER 00001621: DUP12 00001622: DUP12 00001623: DUP12 00001624: PUSH1 0x40 00001626: MLOAD 00001627: DUP1 00001628: DUP12 00001629: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000163e: AND 0000163f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001654: AND 00001655: DUP2 00001656: MSTORE 00001657: PUSH1 0x20 00001659: ADD 0000165a: DUP11 0000165b: DUP2 0000165c: MSTORE 0000165d: PUSH1 0x20 0000165f: ADD 00001660: DUP10 00001661: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001676: AND 00001677: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000168c: AND 0000168d: DUP2 0000168e: MSTORE 0000168f: PUSH1 0x20 00001691: ADD 00001692: DUP9 00001693: DUP2 00001694: MSTORE 00001695: PUSH1 0x20 00001697: ADD 00001698: DUP8 00001699: DUP2 0000169a: MSTORE 0000169b: PUSH1 0x20 0000169d: ADD 0000169e: DUP7 0000169f: DUP2 000016a0: MSTORE 000016a1: PUSH1 0x20 000016a3: ADD 000016a4: DUP6 000016a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016ba: AND 000016bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016d0: AND 000016d1: DUP2 000016d2: MSTORE 000016d3: PUSH1 0x20 000016d5: ADD 000016d6: DUP5 000016d7: PUSH1 0xff 000016d9: AND 000016da: PUSH1 0xff 000016dc: AND 000016dd: DUP2 000016de: MSTORE 000016df: PUSH1 0x20 000016e1: ADD 000016e2: DUP4 000016e3: PUSH1 0x00 000016e5: NOT 000016e6: AND 000016e7: PUSH1 0x00 000016e9: NOT 000016ea: AND 000016eb: DUP2 000016ec: MSTORE 000016ed: PUSH1 0x20 000016ef: ADD 000016f0: DUP3 000016f1: PUSH1 0x00 000016f3: NOT 000016f4: AND 000016f5: PUSH1 0x00 000016f7: NOT 000016f8: AND 000016f9: DUP2 000016fa: MSTORE 000016fb: PUSH1 0x20 000016fd: ADD 000016fe: SWAP11 000016ff: POP 00001700: POP 00001701: POP 00001702: POP 00001703: POP 00001704: POP 00001705: POP 00001706: POP 00001707: POP 00001708: POP 00001709: POP 0000170a: PUSH1 0x40 0000170c: MLOAD 0000170d: DUP1 0000170e: SWAP2 0000170f: SUB 00001710: SWAP1 00001711: LOG1 00001712: JUMPDEST 00001713: POP 00001714: POP 00001715: POP 00001716: POP 00001717: POP 00001718: POP 00001719: POP 0000171a: POP 0000171b: POP 0000171c: POP 0000171d: JUMP 0000171e: JUMPDEST 0000171f: PUSH1 0x00 00001721: DUP2 00001722: PUSH1 0x06 00001724: PUSH1 0x00 00001726: PUSH1 0x00 00001728: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000173d: AND 0000173e: DUP2 0000173f: MSTORE 00001740: PUSH1 0x20 00001742: ADD 00001743: SWAP1 00001744: DUP2 00001745: MSTORE 00001746: PUSH1 0x20 00001748: ADD 00001749: PUSH1 0x00 0000174b: KECCAK256 0000174c: PUSH1 0x00 0000174e: CALLER 0000174f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001764: AND 00001765: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000177a: AND 0000177b: DUP2 0000177c: MSTORE 0000177d: PUSH1 0x20 0000177f: ADD 00001780: SWAP1 00001781: DUP2 00001782: MSTORE 00001783: PUSH1 0x20 00001785: ADD 00001786: PUSH1 0x00 00001788: KECCAK256 00001789: SLOAD 0000178a: LT 0000178b: ISZERO 0000178c: PUSH2 0x1794 0000178f: JUMPI 00001790: PUSH2 0x0000 00001793: JUMP 00001794: JUMPDEST 00001795: PUSH2 0x1805 00001798: PUSH1 0x06 0000179a: PUSH1 0x00 0000179c: PUSH1 0x00 0000179e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017b3: AND 000017b4: DUP2 000017b5: MSTORE 000017b6: PUSH1 0x20 000017b8: ADD 000017b9: SWAP1 000017ba: DUP2 000017bb: MSTORE 000017bc: PUSH1 0x20 000017be: ADD 000017bf: PUSH1 0x00 000017c1: KECCAK256 000017c2: PUSH1 0x00 000017c4: CALLER 000017c5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017da: AND 000017db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017f0: AND 000017f1: DUP2 000017f2: MSTORE 000017f3: PUSH1 0x20 000017f5: ADD 000017f6: SWAP1 000017f7: DUP2 000017f8: MSTORE 000017f9: PUSH1 0x20 000017fb: ADD 000017fc: PUSH1 0x00 000017fe: KECCAK256 000017ff: SLOAD 00001800: DUP4 00001801: PUSH2 0x3674 00001804: JUMP 00001805: JUMPDEST 00001806: PUSH1 0x06 00001808: PUSH1 0x00 0000180a: PUSH1 0x00 0000180c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001821: AND 00001822: DUP2 00001823: MSTORE 00001824: PUSH1 0x20 00001826: ADD 00001827: SWAP1 00001828: DUP2 00001829: MSTORE 0000182a: PUSH1 0x20 0000182c: ADD 0000182d: PUSH1 0x00 0000182f: KECCAK256 00001830: PUSH1 0x00 00001832: CALLER 00001833: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001848: AND 00001849: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000185e: AND 0000185f: DUP2 00001860: MSTORE 00001861: PUSH1 0x20 00001863: ADD 00001864: SWAP1 00001865: DUP2 00001866: MSTORE 00001867: PUSH1 0x20 00001869: ADD 0000186a: PUSH1 0x00 0000186c: KECCAK256 0000186d: DUP2 0000186e: SWAP1 0000186f: SSTORE 00001870: POP 00001871: PUSH1 0x09 00001873: PUSH1 0x00 00001875: CALLER 00001876: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000188b: AND 0000188c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018a1: AND 000018a2: DUP2 000018a3: MSTORE 000018a4: PUSH1 0x20 000018a6: ADD 000018a7: SWAP1 000018a8: DUP2 000018a9: MSTORE 000018aa: PUSH1 0x20 000018ac: ADD 000018ad: PUSH1 0x00 000018af: KECCAK256 000018b0: PUSH1 0x00 000018b2: SWAP1 000018b3: SLOAD 000018b4: SWAP1 000018b5: PUSH2 0x0100 000018b8: EXP 000018b9: SWAP1 000018ba: DIV 000018bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018d0: AND 000018d1: SWAP1 000018d2: POP 000018d3: PUSH1 0x00 000018d5: DUP2 000018d6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018eb: AND 000018ec: EQ 000018ed: ISZERO 000018ee: PUSH2 0x18f5 000018f1: JUMPI 000018f2: CALLER 000018f3: SWAP1 000018f4: POP 000018f5: JUMPDEST 000018f6: DUP1 000018f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000190c: AND 0000190d: DUP3 0000190e: PUSH1 0x40 00001910: MLOAD 00001911: DUP1 00001912: SWAP1 00001913: POP 00001914: PUSH1 0x00 00001916: PUSH1 0x40 00001918: MLOAD 00001919: DUP1 0000191a: DUP4 0000191b: SUB 0000191c: DUP2 0000191d: DUP6 0000191e: DUP8 0000191f: PUSH2 0x8502 00001922: GAS 00001923: SUB 00001924: CALL 00001925: SWAP3 00001926: POP 00001927: POP 00001928: POP 00001929: ISZERO 0000192a: ISZERO 0000192b: PUSH2 0x1933 0000192e: JUMPI 0000192f: PUSH2 0x0000 00001932: JUMP 00001933: JUMPDEST 00001934: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 00001955: PUSH1 0x00 00001957: CALLER 00001958: DUP5 00001959: PUSH1 0x06 0000195b: PUSH1 0x00 0000195d: PUSH1 0x00 0000195f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001974: AND 00001975: DUP2 00001976: MSTORE 00001977: PUSH1 0x20 00001979: ADD 0000197a: SWAP1 0000197b: DUP2 0000197c: MSTORE 0000197d: PUSH1 0x20 0000197f: ADD 00001980: PUSH1 0x00 00001982: KECCAK256 00001983: PUSH1 0x00 00001985: CALLER 00001986: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000199b: AND 0000199c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019b1: AND 000019b2: DUP2 000019b3: MSTORE 000019b4: PUSH1 0x20 000019b6: ADD 000019b7: SWAP1 000019b8: DUP2 000019b9: MSTORE 000019ba: PUSH1 0x20 000019bc: ADD 000019bd: PUSH1 0x00 000019bf: KECCAK256 000019c0: SLOAD 000019c1: PUSH1 0x40 000019c3: MLOAD 000019c4: DUP1 000019c5: DUP6 000019c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019db: AND 000019dc: DUP2 000019dd: MSTORE 000019de: PUSH1 0x20 000019e0: ADD 000019e1: DUP5 000019e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019f7: AND 000019f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a0d: AND 00001a0e: DUP2 00001a0f: MSTORE 00001a10: PUSH1 0x20 00001a12: ADD 00001a13: DUP4 00001a14: DUP2 00001a15: MSTORE 00001a16: PUSH1 0x20 00001a18: ADD 00001a19: DUP3 00001a1a: DUP2 00001a1b: MSTORE 00001a1c: PUSH1 0x20 00001a1e: ADD 00001a1f: SWAP5 00001a20: POP 00001a21: POP 00001a22: POP 00001a23: POP 00001a24: POP 00001a25: PUSH1 0x40 00001a27: MLOAD 00001a28: DUP1 00001a29: SWAP2 00001a2a: SUB 00001a2b: SWAP1 00001a2c: LOG1 00001a2d: JUMPDEST 00001a2e: POP 00001a2f: POP 00001a30: JUMP 00001a31: JUMPDEST 00001a32: PUSH1 0x00 00001a34: DUP3 00001a35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a4a: AND 00001a4b: EQ 00001a4c: ISZERO 00001a4d: PUSH2 0x1a55 00001a50: JUMPI 00001a51: PUSH2 0x0000 00001a54: JUMP 00001a55: JUMPDEST 00001a56: DUP2 00001a57: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a6c: AND 00001a6d: PUSH4 0x23b872dd 00001a72: CALLER 00001a73: ADDRESS 00001a74: DUP5 00001a75: PUSH1 0x00 00001a77: PUSH1 0x40 00001a79: MLOAD 00001a7a: PUSH1 0x20 00001a7c: ADD 00001a7d: MSTORE 00001a7e: PUSH1 0x40 00001a80: MLOAD 00001a81: DUP5 00001a82: PUSH4 0xffffffff 00001a87: AND 00001a88: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00001aa6: MUL 00001aa7: DUP2 00001aa8: MSTORE 00001aa9: PUSH1 0x04 00001aab: ADD 00001aac: DUP1 00001aad: DUP5 00001aae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ac3: AND 00001ac4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ad9: AND 00001ada: DUP2 00001adb: MSTORE 00001adc: PUSH1 0x20 00001ade: ADD 00001adf: DUP4 00001ae0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001af5: AND 00001af6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b0b: AND 00001b0c: DUP2 00001b0d: MSTORE 00001b0e: PUSH1 0x20 00001b10: ADD 00001b11: DUP3 00001b12: DUP2 00001b13: MSTORE 00001b14: PUSH1 0x20 00001b16: ADD 00001b17: SWAP4 00001b18: POP 00001b19: POP 00001b1a: POP 00001b1b: POP 00001b1c: PUSH1 0x20 00001b1e: PUSH1 0x40 00001b20: MLOAD 00001b21: DUP1 00001b22: DUP4 00001b23: SUB 00001b24: DUP2 00001b25: PUSH1 0x00 00001b27: DUP8 00001b28: DUP1 00001b29: EXTCODESIZE 00001b2a: ISZERO 00001b2b: ISZERO 00001b2c: PUSH2 0x1b31 00001b2f: JUMPI 00001b30: INVALID 00001b31: JUMPDEST 00001b32: PUSH1 0x32 00001b34: GAS 00001b35: SUB 00001b36: CALL 00001b37: ISZERO 00001b38: ISZERO 00001b39: PUSH2 0x1b3e 00001b3c: JUMPI 00001b3d: INVALID 00001b3e: JUMPDEST 00001b3f: POP 00001b40: POP 00001b41: POP 00001b42: PUSH1 0x40 00001b44: MLOAD 00001b45: DUP1 00001b46: MLOAD 00001b47: SWAP1 00001b48: POP 00001b49: ISZERO 00001b4a: ISZERO 00001b4b: PUSH2 0x1b53 00001b4e: JUMPI 00001b4f: PUSH2 0x0000 00001b52: JUMP 00001b53: JUMPDEST 00001b54: PUSH2 0x1bd9 00001b57: PUSH1 0x06 00001b59: PUSH1 0x00 00001b5b: DUP5 00001b5c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b71: AND 00001b72: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b87: AND 00001b88: DUP2 00001b89: MSTORE 00001b8a: PUSH1 0x20 00001b8c: ADD 00001b8d: SWAP1 00001b8e: DUP2 00001b8f: MSTORE 00001b90: PUSH1 0x20 00001b92: ADD 00001b93: PUSH1 0x00 00001b95: KECCAK256 00001b96: PUSH1 0x00 00001b98: CALLER 00001b99: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bae: AND 00001baf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bc4: AND 00001bc5: DUP2 00001bc6: MSTORE 00001bc7: PUSH1 0x20 00001bc9: ADD 00001bca: SWAP1 00001bcb: DUP2 00001bcc: MSTORE 00001bcd: PUSH1 0x20 00001bcf: ADD 00001bd0: PUSH1 0x00 00001bd2: KECCAK256 00001bd3: SLOAD 00001bd4: DUP3 00001bd5: PUSH2 0x2ee0 00001bd8: JUMP 00001bd9: JUMPDEST 00001bda: PUSH1 0x06 00001bdc: PUSH1 0x00 00001bde: DUP5 00001bdf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bf4: AND 00001bf5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c0a: AND 00001c0b: DUP2 00001c0c: MSTORE 00001c0d: PUSH1 0x20 00001c0f: ADD 00001c10: SWAP1 00001c11: DUP2 00001c12: MSTORE 00001c13: PUSH1 0x20 00001c15: ADD 00001c16: PUSH1 0x00 00001c18: KECCAK256 00001c19: PUSH1 0x00 00001c1b: CALLER 00001c1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c31: AND 00001c32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c47: AND 00001c48: DUP2 00001c49: MSTORE 00001c4a: PUSH1 0x20 00001c4c: ADD 00001c4d: SWAP1 00001c4e: DUP2 00001c4f: MSTORE 00001c50: PUSH1 0x20 00001c52: ADD 00001c53: PUSH1 0x00 00001c55: KECCAK256 00001c56: DUP2 00001c57: SWAP1 00001c58: SSTORE 00001c59: POP 00001c5a: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 00001c7b: DUP3 00001c7c: CALLER 00001c7d: DUP4 00001c7e: PUSH1 0x06 00001c80: PUSH1 0x00 00001c82: DUP8 00001c83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c98: AND 00001c99: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001cae: AND 00001caf: DUP2 00001cb0: MSTORE 00001cb1: PUSH1 0x20 00001cb3: ADD 00001cb4: SWAP1 00001cb5: DUP2 00001cb6: MSTORE 00001cb7: PUSH1 0x20 00001cb9: ADD 00001cba: PUSH1 0x00 00001cbc: KECCAK256 00001cbd: PUSH1 0x00 00001cbf: CALLER 00001cc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001cd5: AND 00001cd6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ceb: AND 00001cec: DUP2 00001ced: MSTORE 00001cee: PUSH1 0x20 00001cf0: ADD 00001cf1: SWAP1 00001cf2: DUP2 00001cf3: MSTORE 00001cf4: PUSH1 0x20 00001cf6: ADD 00001cf7: PUSH1 0x00 00001cf9: KECCAK256 00001cfa: SLOAD 00001cfb: PUSH1 0x40 00001cfd: MLOAD 00001cfe: DUP1 00001cff: DUP6 00001d00: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d15: AND 00001d16: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d2b: AND 00001d2c: DUP2 00001d2d: MSTORE 00001d2e: PUSH1 0x20 00001d30: ADD 00001d31: DUP5 00001d32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d47: AND 00001d48: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d5d: AND 00001d5e: DUP2 00001d5f: MSTORE 00001d60: PUSH1 0x20 00001d62: ADD 00001d63: DUP4 00001d64: DUP2 00001d65: MSTORE 00001d66: PUSH1 0x20 00001d68: ADD 00001d69: DUP3 00001d6a: DUP2 00001d6b: MSTORE 00001d6c: PUSH1 0x20 00001d6e: ADD 00001d6f: SWAP5 00001d70: POP 00001d71: POP 00001d72: POP 00001d73: POP 00001d74: POP 00001d75: PUSH1 0x40 00001d77: MLOAD 00001d78: DUP1 00001d79: SWAP2 00001d7a: SUB 00001d7b: SWAP1 00001d7c: LOG1 00001d7d: JUMPDEST 00001d7e: POP 00001d7f: POP 00001d80: JUMP 00001d81: JUMPDEST 00001d82: PUSH1 0x00 00001d84: PUSH1 0x00 00001d86: SWAP1 00001d87: SLOAD 00001d88: SWAP1 00001d89: PUSH2 0x0100 00001d8c: EXP 00001d8d: SWAP1 00001d8e: DIV 00001d8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001da4: AND 00001da5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001dba: AND 00001dbb: CALLER 00001dbc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001dd1: AND 00001dd2: EQ 00001dd3: ISZERO 00001dd4: ISZERO 00001dd5: PUSH2 0x1ddd 00001dd8: JUMPI 00001dd9: PUSH2 0x0000 00001ddc: JUMP 00001ddd: JUMPDEST 00001dde: DUP1 00001ddf: PUSH1 0x09 00001de1: PUSH1 0x00 00001de3: DUP5 00001de4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001df9: AND 00001dfa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e0f: AND 00001e10: DUP2 00001e11: MSTORE 00001e12: PUSH1 0x20 00001e14: ADD 00001e15: SWAP1 00001e16: DUP2 00001e17: MSTORE 00001e18: PUSH1 0x20 00001e1a: ADD 00001e1b: PUSH1 0x00 00001e1d: KECCAK256 00001e1e: PUSH1 0x00 00001e20: PUSH2 0x0100 00001e23: EXP 00001e24: DUP2 00001e25: SLOAD 00001e26: DUP2 00001e27: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e3c: MUL 00001e3d: NOT 00001e3e: AND 00001e3f: SWAP1 00001e40: DUP4 00001e41: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e56: AND 00001e57: MUL 00001e58: OR 00001e59: SWAP1 00001e5a: SSTORE 00001e5b: POP 00001e5c: JUMPDEST 00001e5d: POP 00001e5e: POP 00001e5f: JUMP 00001e60: JUMPDEST 00001e61: PUSH1 0x00 00001e63: PUSH1 0x00 00001e65: PUSH1 0x02 00001e67: ADDRESS 00001e68: DUP14 00001e69: DUP14 00001e6a: DUP14 00001e6b: DUP14 00001e6c: DUP14 00001e6d: DUP14 00001e6e: PUSH1 0x00 00001e70: PUSH1 0x40 00001e72: MLOAD 00001e73: PUSH1 0x20 00001e75: ADD 00001e76: MSTORE 00001e77: PUSH1 0x40 00001e79: MLOAD 00001e7a: DUP1 00001e7b: DUP9 00001e7c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e91: AND 00001e92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ea7: AND 00001ea8: PUSH13 0x01000000000000000000000000 00001eb6: MUL 00001eb7: DUP2 00001eb8: MSTORE 00001eb9: PUSH1 0x14 00001ebb: ADD 00001ebc: DUP8 00001ebd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ed2: AND 00001ed3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ee8: AND 00001ee9: PUSH13 0x01000000000000000000000000 00001ef7: MUL 00001ef8: DUP2 00001ef9: MSTORE 00001efa: PUSH1 0x14 00001efc: ADD 00001efd: DUP7 00001efe: DUP2 00001eff: MSTORE 00001f00: PUSH1 0x20 00001f02: ADD 00001f03: DUP6 00001f04: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f19: AND 00001f1a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f2f: AND 00001f30: PUSH13 0x01000000000000000000000000 00001f3e: MUL 00001f3f: DUP2 00001f40: MSTORE 00001f41: PUSH1 0x14 00001f43: ADD 00001f44: DUP5 00001f45: DUP2 00001f46: MSTORE 00001f47: PUSH1 0x20 00001f49: ADD 00001f4a: DUP4 00001f4b: DUP2 00001f4c: MSTORE 00001f4d: PUSH1 0x20 00001f4f: ADD 00001f50: DUP3 00001f51: DUP2 00001f52: MSTORE 00001f53: PUSH1 0x20 00001f55: ADD 00001f56: SWAP8 00001f57: POP 00001f58: POP 00001f59: POP 00001f5a: POP 00001f5b: POP 00001f5c: POP 00001f5d: POP 00001f5e: POP 00001f5f: PUSH1 0x20 00001f61: PUSH1 0x40 00001f63: MLOAD 00001f64: DUP1 00001f65: DUP4 00001f66: SUB 00001f67: DUP2 00001f68: PUSH1 0x00 00001f6a: DUP7 00001f6b: PUSH2 0x61da 00001f6e: GAS 00001f6f: SUB 00001f70: CALL 00001f71: ISZERO 00001f72: ISZERO 00001f73: PUSH2 0x1f78 00001f76: JUMPI 00001f77: INVALID 00001f78: JUMPDEST 00001f79: POP 00001f7a: POP 00001f7b: PUSH1 0x40 00001f7d: MLOAD 00001f7e: DUP1 00001f7f: MLOAD 00001f80: SWAP1 00001f81: POP 00001f82: SWAP1 00001f83: POP 00001f84: PUSH1 0x08 00001f86: PUSH1 0x00 00001f88: DUP8 00001f89: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f9e: AND 00001f9f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001fb4: AND 00001fb5: DUP2 00001fb6: MSTORE 00001fb7: PUSH1 0x20 00001fb9: ADD 00001fba: SWAP1 00001fbb: DUP2 00001fbc: MSTORE 00001fbd: PUSH1 0x20 00001fbf: ADD 00001fc0: PUSH1 0x00 00001fc2: KECCAK256 00001fc3: PUSH1 0x00 00001fc5: DUP3 00001fc6: PUSH1 0x00 00001fc8: NOT 00001fc9: AND 00001fca: PUSH1 0x00 00001fcc: NOT 00001fcd: AND 00001fce: DUP2 00001fcf: MSTORE 00001fd0: PUSH1 0x20 00001fd2: ADD 00001fd3: SWAP1 00001fd4: DUP2 00001fd5: MSTORE 00001fd6: PUSH1 0x20 00001fd8: ADD 00001fd9: PUSH1 0x00 00001fdb: KECCAK256 00001fdc: SLOAD 00001fdd: SWAP2 00001fde: POP 00001fdf: JUMPDEST 00001fe0: POP 00001fe1: SWAP11 00001fe2: SWAP10 00001fe3: POP 00001fe4: POP 00001fe5: POP 00001fe6: POP 00001fe7: POP 00001fe8: POP 00001fe9: POP 00001fea: POP 00001feb: POP 00001fec: POP 00001fed: JUMP 00001fee: JUMPDEST 00001fef: PUSH1 0x06 00001ff1: PUSH1 0x20 00001ff3: MSTORE 00001ff4: DUP2 00001ff5: PUSH1 0x00 00001ff7: MSTORE 00001ff8: PUSH1 0x40 00001ffa: PUSH1 0x00 00001ffc: KECCAK256 00001ffd: PUSH1 0x20 00001fff: MSTORE 00002000: DUP1 00002001: PUSH1 0x00 00002003: MSTORE 00002004: PUSH1 0x40 00002006: PUSH1 0x00 00002008: KECCAK256 00002009: PUSH1 0x00 0000200b: SWAP2 0000200c: POP 0000200d: SWAP2 0000200e: POP 0000200f: POP 00002010: SLOAD 00002011: DUP2 00002012: JUMP 00002013: JUMPDEST 00002014: PUSH1 0x00 00002016: PUSH1 0x00 00002018: SWAP1 00002019: SLOAD 0000201a: SWAP1 0000201b: PUSH2 0x0100 0000201e: EXP 0000201f: SWAP1 00002020: DIV 00002021: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002036: AND 00002037: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000204c: AND 0000204d: CALLER 0000204e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002063: AND 00002064: EQ 00002065: ISZERO 00002066: ISZERO 00002067: PUSH2 0x206f 0000206a: JUMPI 0000206b: PUSH2 0x0000 0000206e: JUMP 0000206f: JUMPDEST 00002070: PUSH1 0x03 00002072: SLOAD 00002073: DUP2 00002074: GT 00002075: ISZERO 00002076: PUSH2 0x207e 00002079: JUMPI 0000207a: PUSH2 0x0000 0000207d: JUMP 0000207e: JUMPDEST 0000207f: DUP1 00002080: PUSH1 0x03 00002082: DUP2 00002083: SWAP1 00002084: SSTORE 00002085: POP 00002086: JUMPDEST 00002087: POP 00002088: JUMP 00002089: JUMPDEST 0000208a: PUSH1 0x03 0000208c: SLOAD 0000208d: DUP2 0000208e: JUMP 0000208f: JUMPDEST 00002090: PUSH1 0x00 00002092: PUSH1 0x00 00002094: SWAP1 00002095: SLOAD 00002096: SWAP1 00002097: PUSH2 0x0100 0000209a: EXP 0000209b: SWAP1 0000209c: DIV 0000209d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020b2: AND 000020b3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020c8: AND 000020c9: CALLER 000020ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020df: AND 000020e0: EQ 000020e1: ISZERO 000020e2: ISZERO 000020e3: PUSH2 0x20eb 000020e6: JUMPI 000020e7: PUSH2 0x0000 000020ea: JUMP 000020eb: JUMPDEST 000020ec: PUSH1 0x05 000020ee: SLOAD 000020ef: DUP2 000020f0: LT 000020f1: DUP1 000020f2: PUSH2 0x20fc 000020f5: JUMPI 000020f6: POP 000020f7: PUSH1 0x04 000020f9: SLOAD 000020fa: DUP2 000020fb: GT 000020fc: JUMPDEST 000020fd: ISZERO 000020fe: PUSH2 0x2106 00002101: JUMPI 00002102: PUSH2 0x0000 00002105: JUMP 00002106: JUMPDEST 00002107: DUP1 00002108: PUSH1 0x05 0000210a: DUP2 0000210b: SWAP1 0000210c: SSTORE 0000210d: POP 0000210e: JUMPDEST 0000210f: POP 00002110: JUMP 00002111: JUMPDEST 00002112: PUSH1 0x01 00002114: PUSH1 0x00 00002116: SWAP1 00002117: SLOAD 00002118: SWAP1 00002119: PUSH2 0x0100 0000211c: EXP 0000211d: SWAP1 0000211e: DIV 0000211f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002134: AND 00002135: DUP2 00002136: JUMP 00002137: JUMPDEST 00002138: PUSH1 0x00 0000213a: DUP3 0000213b: PUSH1 0x06 0000213d: PUSH1 0x00 0000213f: DUP16 00002140: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002155: AND 00002156: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000216b: AND 0000216c: DUP2 0000216d: MSTORE 0000216e: PUSH1 0x20 00002170: ADD 00002171: SWAP1 00002172: DUP2 00002173: MSTORE 00002174: PUSH1 0x20 00002176: ADD 00002177: PUSH1 0x00 00002179: KECCAK256 0000217a: PUSH1 0x00 0000217c: DUP5 0000217d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002192: AND 00002193: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021a8: AND 000021a9: DUP2 000021aa: MSTORE 000021ab: PUSH1 0x20 000021ad: ADD 000021ae: SWAP1 000021af: DUP2 000021b0: MSTORE 000021b1: PUSH1 0x20 000021b3: ADD 000021b4: PUSH1 0x00 000021b6: KECCAK256 000021b7: SLOAD 000021b8: LT 000021b9: ISZERO 000021ba: DUP1 000021bb: ISZERO 000021bc: PUSH2 0x21d6 000021bf: JUMPI 000021c0: POP 000021c1: DUP3 000021c2: PUSH2 0x21d3 000021c5: DUP15 000021c6: DUP15 000021c7: DUP15 000021c8: DUP15 000021c9: DUP15 000021ca: DUP15 000021cb: DUP15 000021cc: DUP15 000021cd: DUP15 000021ce: DUP15 000021cf: PUSH2 0x2b1e 000021d2: JUMP 000021d3: JUMPDEST 000021d4: LT 000021d5: ISZERO 000021d6: JUMPDEST 000021d7: ISZERO 000021d8: ISZERO 000021d9: PUSH2 0x21e5 000021dc: JUMPI 000021dd: PUSH1 0x00 000021df: SWAP1 000021e0: POP 000021e1: PUSH2 0x21ea 000021e4: JUMP 000021e5: JUMPDEST 000021e6: PUSH1 0x01 000021e8: SWAP1 000021e9: POP 000021ea: JUMPDEST 000021eb: SWAP13 000021ec: SWAP12 000021ed: POP 000021ee: POP 000021ef: POP 000021f0: POP 000021f1: POP 000021f2: POP 000021f3: POP 000021f4: POP 000021f5: POP 000021f6: POP 000021f7: POP 000021f8: POP 000021f9: JUMP 000021fa: JUMPDEST 000021fb: PUSH1 0x00 000021fd: PUSH1 0x00 000021ff: SWAP1 00002200: SLOAD 00002201: SWAP1 00002202: PUSH2 0x0100 00002205: EXP 00002206: SWAP1 00002207: DIV 00002208: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000221d: AND 0000221e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002233: AND 00002234: CALLER 00002235: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000224a: AND 0000224b: EQ 0000224c: ISZERO 0000224d: ISZERO 0000224e: PUSH2 0x2256 00002251: JUMPI 00002252: PUSH2 0x0000 00002255: JUMP 00002256: JUMPDEST 00002257: DUP1 00002258: PUSH1 0x01 0000225a: PUSH1 0x00 0000225c: PUSH2 0x0100 0000225f: EXP 00002260: DUP2 00002261: SLOAD 00002262: DUP2 00002263: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002278: MUL 00002279: NOT 0000227a: AND 0000227b: SWAP1 0000227c: DUP4 0000227d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002292: AND 00002293: MUL 00002294: OR 00002295: SWAP1 00002296: SSTORE 00002297: POP 00002298: JUMPDEST 00002299: POP 0000229a: JUMP 0000229b: JUMPDEST 0000229c: PUSH1 0x05 0000229e: SLOAD 0000229f: DUP2 000022a0: JUMP 000022a1: JUMPDEST 000022a2: PUSH1 0x00 000022a4: PUSH1 0x00 000022a6: SWAP1 000022a7: SLOAD 000022a8: SWAP1 000022a9: PUSH2 0x0100 000022ac: EXP 000022ad: SWAP1 000022ae: DIV 000022af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022c4: AND 000022c5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022da: AND 000022db: CALLER 000022dc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022f1: AND 000022f2: EQ 000022f3: ISZERO 000022f4: ISZERO 000022f5: PUSH2 0x22fd 000022f8: JUMPI 000022f9: PUSH2 0x0000 000022fc: JUMP 000022fd: JUMPDEST 000022fe: PUSH1 0x04 00002300: SLOAD 00002301: DUP2 00002302: GT 00002303: DUP1 00002304: PUSH2 0x230e 00002307: JUMPI 00002308: POP 00002309: PUSH1 0x05 0000230b: SLOAD 0000230c: DUP2 0000230d: LT 0000230e: JUMPDEST 0000230f: ISZERO 00002310: PUSH2 0x2318 00002313: JUMPI 00002314: PUSH2 0x0000 00002317: JUMP 00002318: JUMPDEST 00002319: DUP1 0000231a: PUSH1 0x04 0000231c: DUP2 0000231d: SWAP1 0000231e: SSTORE 0000231f: POP 00002320: JUMPDEST 00002321: POP 00002322: JUMP 00002323: JUMPDEST 00002324: PUSH1 0x00 00002326: PUSH1 0x00 00002328: SWAP1 00002329: SLOAD 0000232a: SWAP1 0000232b: PUSH2 0x0100 0000232e: EXP 0000232f: SWAP1 00002330: DIV 00002331: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002346: AND 00002347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000235c: AND 0000235d: CALLER 0000235e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002373: AND 00002374: EQ 00002375: ISZERO 00002376: ISZERO 00002377: PUSH2 0x237f 0000237a: JUMPI 0000237b: PUSH2 0x0000 0000237e: JUMP 0000237f: JUMPDEST 00002380: DUP1 00002381: PUSH1 0x00 00002383: PUSH1 0x00 00002385: PUSH2 0x0100 00002388: EXP 00002389: DUP2 0000238a: SLOAD 0000238b: DUP2 0000238c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023a1: MUL 000023a2: NOT 000023a3: AND 000023a4: SWAP1 000023a5: DUP4 000023a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023bb: AND 000023bc: MUL 000023bd: OR 000023be: SWAP1 000023bf: SSTORE 000023c0: POP 000023c1: JUMPDEST 000023c2: POP 000023c3: JUMP 000023c4: JUMPDEST 000023c5: PUSH1 0x00 000023c7: DUP3 000023c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023dd: AND 000023de: EQ 000023df: ISZERO 000023e0: PUSH2 0x23e8 000023e3: JUMPI 000023e4: PUSH2 0x0000 000023e7: JUMP 000023e8: JUMPDEST 000023e9: DUP1 000023ea: PUSH1 0x06 000023ec: PUSH1 0x00 000023ee: DUP5 000023ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002404: AND 00002405: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000241a: AND 0000241b: DUP2 0000241c: MSTORE 0000241d: PUSH1 0x20 0000241f: ADD 00002420: SWAP1 00002421: DUP2 00002422: MSTORE 00002423: PUSH1 0x20 00002425: ADD 00002426: PUSH1 0x00 00002428: KECCAK256 00002429: PUSH1 0x00 0000242b: CALLER 0000242c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002441: AND 00002442: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002457: AND 00002458: DUP2 00002459: MSTORE 0000245a: PUSH1 0x20 0000245c: ADD 0000245d: SWAP1 0000245e: DUP2 0000245f: MSTORE 00002460: PUSH1 0x20 00002462: ADD 00002463: PUSH1 0x00 00002465: KECCAK256 00002466: SLOAD 00002467: LT 00002468: ISZERO 00002469: PUSH2 0x2471 0000246c: JUMPI 0000246d: PUSH2 0x0000 00002470: JUMP 00002471: JUMPDEST 00002472: PUSH2 0x24f7 00002475: PUSH1 0x06 00002477: PUSH1 0x00 00002479: DUP5 0000247a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000248f: AND 00002490: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024a5: AND 000024a6: DUP2 000024a7: MSTORE 000024a8: PUSH1 0x20 000024aa: ADD 000024ab: SWAP1 000024ac: DUP2 000024ad: MSTORE 000024ae: PUSH1 0x20 000024b0: ADD 000024b1: PUSH1 0x00 000024b3: KECCAK256 000024b4: PUSH1 0x00 000024b6: CALLER 000024b7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024cc: AND 000024cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024e2: AND 000024e3: DUP2 000024e4: MSTORE 000024e5: PUSH1 0x20 000024e7: ADD 000024e8: SWAP1 000024e9: DUP2 000024ea: MSTORE 000024eb: PUSH1 0x20 000024ed: ADD 000024ee: PUSH1 0x00 000024f0: KECCAK256 000024f1: SLOAD 000024f2: DUP3 000024f3: PUSH2 0x3674 000024f6: JUMP 000024f7: JUMPDEST 000024f8: PUSH1 0x06 000024fa: PUSH1 0x00 000024fc: DUP5 000024fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002512: AND 00002513: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002528: AND 00002529: DUP2 0000252a: MSTORE 0000252b: PUSH1 0x20 0000252d: ADD 0000252e: SWAP1 0000252f: DUP2 00002530: MSTORE 00002531: PUSH1 0x20 00002533: ADD 00002534: PUSH1 0x00 00002536: KECCAK256 00002537: PUSH1 0x00 00002539: CALLER 0000253a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000254f: AND 00002550: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002565: AND 00002566: DUP2 00002567: MSTORE 00002568: PUSH1 0x20 0000256a: ADD 0000256b: SWAP1 0000256c: DUP2 0000256d: MSTORE 0000256e: PUSH1 0x20 00002570: ADD 00002571: PUSH1 0x00 00002573: KECCAK256 00002574: DUP2 00002575: SWAP1 00002576: SSTORE 00002577: POP 00002578: DUP2 00002579: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000258e: AND 0000258f: PUSH4 0xa9059cbb 00002594: CALLER 00002595: DUP4 00002596: PUSH1 0x00 00002598: PUSH1 0x40 0000259a: MLOAD 0000259b: PUSH1 0x20 0000259d: ADD 0000259e: MSTORE 0000259f: PUSH1 0x40 000025a1: MLOAD 000025a2: DUP4 000025a3: PUSH4 0xffffffff 000025a8: AND 000025a9: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000025c7: MUL 000025c8: DUP2 000025c9: MSTORE 000025ca: PUSH1 0x04 000025cc: ADD 000025cd: DUP1 000025ce: DUP4 000025cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025e4: AND 000025e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025fa: AND 000025fb: DUP2 000025fc: MSTORE 000025fd: PUSH1 0x20 000025ff: ADD 00002600: DUP3 00002601: DUP2 00002602: MSTORE 00002603: PUSH1 0x20 00002605: ADD 00002606: SWAP3 00002607: POP 00002608: POP 00002609: POP 0000260a: PUSH1 0x20 0000260c: PUSH1 0x40 0000260e: MLOAD 0000260f: DUP1 00002610: DUP4 00002611: SUB 00002612: DUP2 00002613: PUSH1 0x00 00002615: DUP8 00002616: DUP1 00002617: EXTCODESIZE 00002618: ISZERO 00002619: ISZERO 0000261a: PUSH2 0x261f 0000261d: JUMPI 0000261e: INVALID 0000261f: JUMPDEST 00002620: PUSH1 0x32 00002622: GAS 00002623: SUB 00002624: CALL 00002625: ISZERO 00002626: ISZERO 00002627: PUSH2 0x262c 0000262a: JUMPI 0000262b: INVALID 0000262c: JUMPDEST 0000262d: POP 0000262e: POP 0000262f: POP 00002630: PUSH1 0x40 00002632: MLOAD 00002633: DUP1 00002634: MLOAD 00002635: SWAP1 00002636: POP 00002637: ISZERO 00002638: ISZERO 00002639: PUSH2 0x2641 0000263c: JUMPI 0000263d: PUSH2 0x0000 00002640: JUMP 00002641: JUMPDEST 00002642: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 00002663: DUP3 00002664: CALLER 00002665: DUP4 00002666: PUSH1 0x06 00002668: PUSH1 0x00 0000266a: DUP8 0000266b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002680: AND 00002681: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002696: AND 00002697: DUP2 00002698: MSTORE 00002699: PUSH1 0x20 0000269b: ADD 0000269c: SWAP1 0000269d: DUP2 0000269e: MSTORE 0000269f: PUSH1 0x20 000026a1: ADD 000026a2: PUSH1 0x00 000026a4: KECCAK256 000026a5: PUSH1 0x00 000026a7: CALLER 000026a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026bd: AND 000026be: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026d3: AND 000026d4: DUP2 000026d5: MSTORE 000026d6: PUSH1 0x20 000026d8: ADD 000026d9: SWAP1 000026da: DUP2 000026db: MSTORE 000026dc: PUSH1 0x20 000026de: ADD 000026df: PUSH1 0x00 000026e1: KECCAK256 000026e2: SLOAD 000026e3: PUSH1 0x40 000026e5: MLOAD 000026e6: DUP1 000026e7: DUP6 000026e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026fd: AND 000026fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002713: AND 00002714: DUP2 00002715: MSTORE 00002716: PUSH1 0x20 00002718: ADD 00002719: DUP5 0000271a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000272f: AND 00002730: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002745: AND 00002746: DUP2 00002747: MSTORE 00002748: PUSH1 0x20 0000274a: ADD 0000274b: DUP4 0000274c: DUP2 0000274d: MSTORE 0000274e: PUSH1 0x20 00002750: ADD 00002751: DUP3 00002752: DUP2 00002753: MSTORE 00002754: PUSH1 0x20 00002756: ADD 00002757: SWAP5 00002758: POP 00002759: POP 0000275a: POP 0000275b: POP 0000275c: POP 0000275d: PUSH1 0x40 0000275f: MLOAD 00002760: DUP1 00002761: SWAP2 00002762: SUB 00002763: SWAP1 00002764: LOG1 00002765: JUMPDEST 00002766: POP 00002767: POP 00002768: JUMP 00002769: JUMPDEST 0000276a: PUSH1 0x07 0000276c: PUSH1 0x20 0000276e: MSTORE 0000276f: DUP2 00002770: PUSH1 0x00 00002772: MSTORE 00002773: PUSH1 0x40 00002775: PUSH1 0x00 00002777: KECCAK256 00002778: PUSH1 0x20 0000277a: MSTORE 0000277b: DUP1 0000277c: PUSH1 0x00 0000277e: MSTORE 0000277f: PUSH1 0x40 00002781: PUSH1 0x00 00002783: KECCAK256 00002784: PUSH1 0x00 00002786: SWAP2 00002787: POP 00002788: SWAP2 00002789: POP 0000278a: SWAP1 0000278b: SLOAD 0000278c: SWAP1 0000278d: PUSH2 0x0100 00002790: EXP 00002791: SWAP1 00002792: DIV 00002793: PUSH1 0xff 00002795: AND 00002796: DUP2 00002797: JUMP 00002798: JUMPDEST 00002799: PUSH1 0x04 0000279b: SLOAD 0000279c: DUP2 0000279d: JUMP 0000279e: JUMPDEST 0000279f: PUSH2 0x280f 000027a2: PUSH1 0x06 000027a4: PUSH1 0x00 000027a6: PUSH1 0x00 000027a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027bd: AND 000027be: DUP2 000027bf: MSTORE 000027c0: PUSH1 0x20 000027c2: ADD 000027c3: SWAP1 000027c4: DUP2 000027c5: MSTORE 000027c6: PUSH1 0x20 000027c8: ADD 000027c9: PUSH1 0x00 000027cb: KECCAK256 000027cc: PUSH1 0x00 000027ce: CALLER 000027cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027e4: AND 000027e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027fa: AND 000027fb: DUP2 000027fc: MSTORE 000027fd: PUSH1 0x20 000027ff: ADD 00002800: SWAP1 00002801: DUP2 00002802: MSTORE 00002803: PUSH1 0x20 00002805: ADD 00002806: PUSH1 0x00 00002808: KECCAK256 00002809: SLOAD 0000280a: CALLVALUE 0000280b: PUSH2 0x2ee0 0000280e: JUMP 0000280f: JUMPDEST 00002810: PUSH1 0x06 00002812: PUSH1 0x00 00002814: PUSH1 0x00 00002816: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000282b: AND 0000282c: DUP2 0000282d: MSTORE 0000282e: PUSH1 0x20 00002830: ADD 00002831: SWAP1 00002832: DUP2 00002833: MSTORE 00002834: PUSH1 0x20 00002836: ADD 00002837: PUSH1 0x00 00002839: KECCAK256 0000283a: PUSH1 0x00 0000283c: CALLER 0000283d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002852: AND 00002853: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002868: AND 00002869: DUP2 0000286a: MSTORE 0000286b: PUSH1 0x20 0000286d: ADD 0000286e: SWAP1 0000286f: DUP2 00002870: MSTORE 00002871: PUSH1 0x20 00002873: ADD 00002874: PUSH1 0x00 00002876: KECCAK256 00002877: DUP2 00002878: SWAP1 00002879: SSTORE 0000287a: POP 0000287b: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 0000289c: PUSH1 0x00 0000289e: CALLER 0000289f: CALLVALUE 000028a0: PUSH1 0x06 000028a2: PUSH1 0x00 000028a4: PUSH1 0x00 000028a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028bb: AND 000028bc: DUP2 000028bd: MSTORE 000028be: PUSH1 0x20 000028c0: ADD 000028c1: SWAP1 000028c2: DUP2 000028c3: MSTORE 000028c4: PUSH1 0x20 000028c6: ADD 000028c7: PUSH1 0x00 000028c9: KECCAK256 000028ca: PUSH1 0x00 000028cc: CALLER 000028cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028e2: AND 000028e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028f8: AND 000028f9: DUP2 000028fa: MSTORE 000028fb: PUSH1 0x20 000028fd: ADD 000028fe: SWAP1 000028ff: DUP2 00002900: MSTORE 00002901: PUSH1 0x20 00002903: ADD 00002904: PUSH1 0x00 00002906: KECCAK256 00002907: SLOAD 00002908: PUSH1 0x40 0000290a: MLOAD 0000290b: DUP1 0000290c: DUP6 0000290d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002922: AND 00002923: DUP2 00002924: MSTORE 00002925: PUSH1 0x20 00002927: ADD 00002928: DUP5 00002929: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000293e: AND 0000293f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002954: AND 00002955: DUP2 00002956: MSTORE 00002957: PUSH1 0x20 00002959: ADD 0000295a: DUP4 0000295b: DUP2 0000295c: MSTORE 0000295d: PUSH1 0x20 0000295f: ADD 00002960: DUP3 00002961: DUP2 00002962: MSTORE 00002963: PUSH1 0x20 00002965: ADD 00002966: SWAP5 00002967: POP 00002968: POP 00002969: POP 0000296a: POP 0000296b: POP 0000296c: PUSH1 0x40 0000296e: MLOAD 0000296f: DUP1 00002970: SWAP2 00002971: SUB 00002972: SWAP1 00002973: LOG1 00002974: JUMPDEST 00002975: JUMP 00002976: JUMPDEST 00002977: PUSH1 0x00 00002979: PUSH1 0x00 0000297b: SWAP1 0000297c: SLOAD 0000297d: SWAP1 0000297e: PUSH2 0x0100 00002981: EXP 00002982: SWAP1 00002983: DIV 00002984: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002999: AND 0000299a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029af: AND 000029b0: CALLER 000029b1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029c6: AND 000029c7: EQ 000029c8: ISZERO 000029c9: ISZERO 000029ca: PUSH2 0x29d2 000029cd: JUMPI 000029ce: PUSH2 0x0000 000029d1: JUMP 000029d2: JUMPDEST 000029d3: DUP1 000029d4: PUSH1 0x02 000029d6: PUSH1 0x00 000029d8: PUSH2 0x0100 000029db: EXP 000029dc: DUP2 000029dd: SLOAD 000029de: DUP2 000029df: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029f4: MUL 000029f5: NOT 000029f6: AND 000029f7: SWAP1 000029f8: DUP4 000029f9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a0e: AND 00002a0f: MUL 00002a10: OR 00002a11: SWAP1 00002a12: SSTORE 00002a13: POP 00002a14: JUMPDEST 00002a15: POP 00002a16: JUMP 00002a17: JUMPDEST 00002a18: PUSH1 0x02 00002a1a: PUSH1 0x00 00002a1c: SWAP1 00002a1d: SLOAD 00002a1e: SWAP1 00002a1f: PUSH2 0x0100 00002a22: EXP 00002a23: SWAP1 00002a24: DIV 00002a25: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a3a: AND 00002a3b: DUP2 00002a3c: JUMP 00002a3d: JUMPDEST 00002a3e: PUSH1 0x00 00002a40: PUSH1 0x06 00002a42: PUSH1 0x00 00002a44: DUP5 00002a45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a5a: AND 00002a5b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a70: AND 00002a71: DUP2 00002a72: MSTORE 00002a73: PUSH1 0x20 00002a75: ADD 00002a76: SWAP1 00002a77: DUP2 00002a78: MSTORE 00002a79: PUSH1 0x20 00002a7b: ADD 00002a7c: PUSH1 0x00 00002a7e: KECCAK256 00002a7f: PUSH1 0x00 00002a81: DUP4 00002a82: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a97: AND 00002a98: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002aad: AND 00002aae: DUP2 00002aaf: MSTORE 00002ab0: PUSH1 0x20 00002ab2: ADD 00002ab3: SWAP1 00002ab4: DUP2 00002ab5: MSTORE 00002ab6: PUSH1 0x20 00002ab8: ADD 00002ab9: PUSH1 0x00 00002abb: KECCAK256 00002abc: SLOAD 00002abd: SWAP1 00002abe: POP 00002abf: JUMPDEST 00002ac0: SWAP3 00002ac1: SWAP2 00002ac2: POP 00002ac3: POP 00002ac4: JUMP 00002ac5: JUMPDEST 00002ac6: PUSH1 0x00 00002ac8: PUSH1 0x00 00002aca: SWAP1 00002acb: SLOAD 00002acc: SWAP1 00002acd: PUSH2 0x0100 00002ad0: EXP 00002ad1: SWAP1 00002ad2: DIV 00002ad3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002ae8: AND 00002ae9: DUP2 00002aea: JUMP 00002aeb: JUMPDEST 00002aec: PUSH1 0x09 00002aee: PUSH1 0x20 00002af0: MSTORE 00002af1: DUP1 00002af2: PUSH1 0x00 00002af4: MSTORE 00002af5: PUSH1 0x40 00002af7: PUSH1 0x00 00002af9: KECCAK256 00002afa: PUSH1 0x00 00002afc: SWAP2 00002afd: POP 00002afe: SLOAD 00002aff: SWAP1 00002b00: PUSH2 0x0100 00002b03: EXP 00002b04: SWAP1 00002b05: DIV 00002b06: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b1b: AND 00002b1c: DUP2 00002b1d: JUMP 00002b1e: JUMPDEST 00002b1f: PUSH1 0x00 00002b21: PUSH1 0x00 00002b23: PUSH1 0x00 00002b25: PUSH1 0x00 00002b27: PUSH1 0x02 00002b29: ADDRESS 00002b2a: DUP16 00002b2b: DUP16 00002b2c: DUP16 00002b2d: DUP16 00002b2e: DUP16 00002b2f: DUP16 00002b30: PUSH1 0x00 00002b32: PUSH1 0x40 00002b34: MLOAD 00002b35: PUSH1 0x20 00002b37: ADD 00002b38: MSTORE 00002b39: PUSH1 0x40 00002b3b: MLOAD 00002b3c: DUP1 00002b3d: DUP9 00002b3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b53: AND 00002b54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b69: AND 00002b6a: PUSH13 0x01000000000000000000000000 00002b78: MUL 00002b79: DUP2 00002b7a: MSTORE 00002b7b: PUSH1 0x14 00002b7d: ADD 00002b7e: DUP8 00002b7f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b94: AND 00002b95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002baa: AND 00002bab: PUSH13 0x01000000000000000000000000 00002bb9: MUL 00002bba: DUP2 00002bbb: MSTORE 00002bbc: PUSH1 0x14 00002bbe: ADD 00002bbf: DUP7 00002bc0: DUP2 00002bc1: MSTORE 00002bc2: PUSH1 0x20 00002bc4: ADD 00002bc5: DUP6 00002bc6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002bdb: AND 00002bdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002bf1: AND 00002bf2: PUSH13 0x01000000000000000000000000 00002c00: MUL 00002c01: DUP2 00002c02: MSTORE 00002c03: PUSH1 0x14 00002c05: ADD 00002c06: DUP5 00002c07: DUP2 00002c08: MSTORE 00002c09: PUSH1 0x20 00002c0b: ADD 00002c0c: DUP4 00002c0d: DUP2 00002c0e: MSTORE 00002c0f: PUSH1 0x20 00002c11: ADD 00002c12: DUP3 00002c13: DUP2 00002c14: MSTORE 00002c15: PUSH1 0x20 00002c17: ADD 00002c18: SWAP8 00002c19: POP 00002c1a: POP 00002c1b: POP 00002c1c: POP 00002c1d: POP 00002c1e: POP 00002c1f: POP 00002c20: POP 00002c21: PUSH1 0x20 00002c23: PUSH1 0x40 00002c25: MLOAD 00002c26: DUP1 00002c27: DUP4 00002c28: SUB 00002c29: DUP2 00002c2a: PUSH1 0x00 00002c2c: DUP7 00002c2d: PUSH2 0x61da 00002c30: GAS 00002c31: SUB 00002c32: CALL 00002c33: ISZERO 00002c34: ISZERO 00002c35: PUSH2 0x2c3a 00002c38: JUMPI 00002c39: INVALID 00002c3a: JUMPDEST 00002c3b: POP 00002c3c: POP 00002c3d: PUSH1 0x40 00002c3f: MLOAD 00002c40: DUP1 00002c41: MLOAD 00002c42: SWAP1 00002c43: POP 00002c44: SWAP3 00002c45: POP 00002c46: PUSH1 0x07 00002c48: PUSH1 0x00 00002c4a: DUP10 00002c4b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c60: AND 00002c61: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c76: AND 00002c77: DUP2 00002c78: MSTORE 00002c79: PUSH1 0x20 00002c7b: ADD 00002c7c: SWAP1 00002c7d: DUP2 00002c7e: MSTORE 00002c7f: PUSH1 0x20 00002c81: ADD 00002c82: PUSH1 0x00 00002c84: KECCAK256 00002c85: PUSH1 0x00 00002c87: DUP5 00002c88: PUSH1 0x00 00002c8a: NOT 00002c8b: AND 00002c8c: PUSH1 0x00 00002c8e: NOT 00002c8f: AND 00002c90: DUP2 00002c91: MSTORE 00002c92: PUSH1 0x20 00002c94: ADD 00002c95: SWAP1 00002c96: DUP2 00002c97: MSTORE 00002c98: PUSH1 0x20 00002c9a: ADD 00002c9b: PUSH1 0x00 00002c9d: KECCAK256 00002c9e: PUSH1 0x00 00002ca0: SWAP1 00002ca1: SLOAD 00002ca2: SWAP1 00002ca3: PUSH2 0x0100 00002ca6: EXP 00002ca7: SWAP1 00002ca8: DIV 00002ca9: PUSH1 0xff 00002cab: AND 00002cac: DUP1 00002cad: PUSH2 0x2da9 00002cb0: JUMPI 00002cb1: POP 00002cb2: DUP8 00002cb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002cc8: AND 00002cc9: PUSH1 0x01 00002ccb: DUP5 00002ccc: PUSH1 0x40 00002cce: MLOAD 00002ccf: DUP1 00002cd0: DUP1 00002cd1: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00002cf2: DUP2 00002cf3: MSTORE 00002cf4: POP 00002cf5: PUSH1 0x1c 00002cf7: ADD 00002cf8: DUP3 00002cf9: PUSH1 0x00 00002cfb: NOT 00002cfc: AND 00002cfd: PUSH1 0x00 00002cff: NOT 00002d00: AND 00002d01: DUP2 00002d02: MSTORE 00002d03: PUSH1 0x20 00002d05: ADD 00002d06: SWAP2 00002d07: POP 00002d08: POP 00002d09: PUSH1 0x40 00002d0b: MLOAD 00002d0c: DUP1 00002d0d: SWAP2 00002d0e: SUB 00002d0f: SWAP1 00002d10: KECCAK256 00002d11: DUP10 00002d12: DUP10 00002d13: DUP10 00002d14: PUSH1 0x40 00002d16: MLOAD 00002d17: DUP1 00002d18: PUSH1 0x00 00002d1a: MSTORE 00002d1b: PUSH1 0x20 00002d1d: ADD 00002d1e: PUSH1 0x40 00002d20: MSTORE 00002d21: PUSH1 0x00 00002d23: PUSH1 0x40 00002d25: MLOAD 00002d26: PUSH1 0x20 00002d28: ADD 00002d29: MSTORE 00002d2a: PUSH1 0x40 00002d2c: MLOAD 00002d2d: DUP1 00002d2e: DUP6 00002d2f: PUSH1 0x00 00002d31: NOT 00002d32: AND 00002d33: PUSH1 0x00 00002d35: NOT 00002d36: AND 00002d37: DUP2 00002d38: MSTORE 00002d39: PUSH1 0x20 00002d3b: ADD 00002d3c: DUP5 00002d3d: PUSH1 0xff 00002d3f: AND 00002d40: PUSH1 0xff 00002d42: AND 00002d43: DUP2 00002d44: MSTORE 00002d45: PUSH1 0x20 00002d47: ADD 00002d48: DUP4 00002d49: PUSH1 0x00 00002d4b: NOT 00002d4c: AND 00002d4d: PUSH1 0x00 00002d4f: NOT 00002d50: AND 00002d51: DUP2 00002d52: MSTORE 00002d53: PUSH1 0x20 00002d55: ADD 00002d56: DUP3 00002d57: PUSH1 0x00 00002d59: NOT 00002d5a: AND 00002d5b: PUSH1 0x00 00002d5d: NOT 00002d5e: AND 00002d5f: DUP2 00002d60: MSTORE 00002d61: PUSH1 0x20 00002d63: ADD 00002d64: SWAP5 00002d65: POP 00002d66: POP 00002d67: POP 00002d68: POP 00002d69: POP 00002d6a: PUSH1 0x20 00002d6c: PUSH1 0x40 00002d6e: MLOAD 00002d6f: PUSH1 0x20 00002d71: DUP2 00002d72: SUB 00002d73: SWAP1 00002d74: DUP1 00002d75: DUP5 00002d76: SUB 00002d77: SWAP1 00002d78: PUSH1 0x00 00002d7a: DUP7 00002d7b: PUSH2 0x61da 00002d7e: GAS 00002d7f: SUB 00002d80: CALL 00002d81: ISZERO 00002d82: ISZERO 00002d83: PUSH2 0x2d88 00002d86: JUMPI 00002d87: INVALID 00002d88: JUMPDEST 00002d89: POP 00002d8a: POP 00002d8b: PUSH1 0x20 00002d8d: PUSH1 0x40 00002d8f: MLOAD 00002d90: SUB 00002d91: MLOAD 00002d92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002da7: AND 00002da8: EQ 00002da9: JUMPDEST 00002daa: DUP1 00002dab: ISZERO 00002dac: PUSH2 0x2db5 00002daf: JUMPI 00002db0: POP 00002db1: DUP10 00002db2: NUMBER 00002db3: GT 00002db4: ISZERO 00002db5: JUMPDEST 00002db6: ISZERO 00002db7: ISZERO 00002db8: PUSH2 0x2dc4 00002dbb: JUMPI 00002dbc: PUSH1 0x00 00002dbe: SWAP4 00002dbf: POP 00002dc0: PUSH2 0x2ecf 00002dc3: JUMP 00002dc4: JUMPDEST 00002dc5: PUSH2 0x2e26 00002dc8: DUP14 00002dc9: PUSH1 0x08 00002dcb: PUSH1 0x00 00002dcd: DUP12 00002dce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002de3: AND 00002de4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002df9: AND 00002dfa: DUP2 00002dfb: MSTORE 00002dfc: PUSH1 0x20 00002dfe: ADD 00002dff: SWAP1 00002e00: DUP2 00002e01: MSTORE 00002e02: PUSH1 0x20 00002e04: ADD 00002e05: PUSH1 0x00 00002e07: KECCAK256 00002e08: PUSH1 0x00 00002e0a: DUP7 00002e0b: PUSH1 0x00 00002e0d: NOT 00002e0e: AND 00002e0f: PUSH1 0x00 00002e11: NOT 00002e12: AND 00002e13: DUP2 00002e14: MSTORE 00002e15: PUSH1 0x20 00002e17: ADD 00002e18: SWAP1 00002e19: DUP2 00002e1a: MSTORE 00002e1b: PUSH1 0x20 00002e1d: ADD 00002e1e: PUSH1 0x00 00002e20: KECCAK256 00002e21: SLOAD 00002e22: PUSH2 0x3674 00002e25: JUMP 00002e26: JUMPDEST 00002e27: SWAP2 00002e28: POP 00002e29: DUP11 00002e2a: PUSH2 0x2eaf 00002e2d: PUSH1 0x06 00002e2f: PUSH1 0x00 00002e31: DUP16 00002e32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e47: AND 00002e48: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e5d: AND 00002e5e: DUP2 00002e5f: MSTORE 00002e60: PUSH1 0x20 00002e62: ADD 00002e63: SWAP1 00002e64: DUP2 00002e65: MSTORE 00002e66: PUSH1 0x20 00002e68: ADD 00002e69: PUSH1 0x00 00002e6b: KECCAK256 00002e6c: PUSH1 0x00 00002e6e: DUP12 00002e6f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e84: AND 00002e85: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e9a: AND 00002e9b: DUP2 00002e9c: MSTORE 00002e9d: PUSH1 0x20 00002e9f: ADD 00002ea0: SWAP1 00002ea1: DUP2 00002ea2: MSTORE 00002ea3: PUSH1 0x20 00002ea5: ADD 00002ea6: PUSH1 0x00 00002ea8: KECCAK256 00002ea9: SLOAD 00002eaa: DUP16 00002eab: PUSH2 0x368e 00002eae: JUMP 00002eaf: JUMPDEST 00002eb0: DUP2 00002eb1: ISZERO 00002eb2: ISZERO 00002eb3: PUSH2 0x2eb8 00002eb6: JUMPI 00002eb7: INVALID 00002eb8: JUMPDEST 00002eb9: DIV 00002eba: SWAP1 00002ebb: POP 00002ebc: DUP1 00002ebd: DUP3 00002ebe: LT 00002ebf: ISZERO 00002ec0: PUSH2 0x2ecb 00002ec3: JUMPI 00002ec4: DUP2 00002ec5: SWAP4 00002ec6: POP 00002ec7: PUSH2 0x2ecf 00002eca: JUMP 00002ecb: JUMPDEST 00002ecc: DUP1 00002ecd: SWAP4 00002ece: POP 00002ecf: JUMPDEST 00002ed0: POP 00002ed1: POP 00002ed2: POP 00002ed3: SWAP11 00002ed4: SWAP10 00002ed5: POP 00002ed6: POP 00002ed7: POP 00002ed8: POP 00002ed9: POP 00002eda: POP 00002edb: POP 00002edc: POP 00002edd: POP 00002ede: POP 00002edf: JUMP 00002ee0: JUMPDEST 00002ee1: PUSH1 0x00 00002ee3: PUSH1 0x00 00002ee5: DUP3 00002ee6: DUP5 00002ee7: ADD 00002ee8: SWAP1 00002ee9: POP 00002eea: PUSH2 0x2f01 00002eed: DUP5 00002eee: DUP3 00002eef: LT 00002ef0: ISZERO 00002ef1: DUP1 00002ef2: ISZERO 00002ef3: PUSH2 0x2efc 00002ef6: JUMPI 00002ef7: POP 00002ef8: DUP4 00002ef9: DUP3 00002efa: LT 00002efb: ISZERO 00002efc: JUMPDEST 00002efd: PUSH2 0x36c3 00002f00: JUMP 00002f01: JUMPDEST 00002f02: DUP1 00002f03: SWAP2 00002f04: POP 00002f05: JUMPDEST 00002f06: POP 00002f07: SWAP3 00002f08: SWAP2 00002f09: POP 00002f0a: POP 00002f0b: JUMP 00002f0c: JUMPDEST 00002f0d: PUSH1 0x00 00002f0f: PUSH1 0x00 00002f11: PUSH1 0x00 00002f13: PUSH1 0x00 00002f15: PUSH8 0x0de0b6b3a7640000 00002f1e: PUSH2 0x2f29 00002f21: DUP7 00002f22: PUSH1 0x03 00002f24: SLOAD 00002f25: PUSH2 0x368e 00002f28: JUMP 00002f29: JUMPDEST 00002f2a: DUP2 00002f2b: ISZERO 00002f2c: ISZERO 00002f2d: PUSH2 0x2f32 00002f30: JUMPI 00002f31: INVALID 00002f32: JUMPDEST 00002f33: DIV 00002f34: SWAP4 00002f35: POP 00002f36: PUSH8 0x0de0b6b3a7640000 00002f3f: PUSH2 0x2f4a 00002f42: DUP7 00002f43: PUSH1 0x04 00002f45: SLOAD 00002f46: PUSH2 0x368e 00002f49: JUMP 00002f4a: JUMPDEST 00002f4b: DUP2 00002f4c: ISZERO 00002f4d: ISZERO 00002f4e: PUSH2 0x2f53 00002f51: JUMPI 00002f52: INVALID 00002f53: JUMPDEST 00002f54: DIV 00002f55: SWAP3 00002f56: POP 00002f57: PUSH1 0x00 00002f59: SWAP2 00002f5a: POP 00002f5b: PUSH1 0x00 00002f5d: PUSH1 0x02 00002f5f: PUSH1 0x00 00002f61: SWAP1 00002f62: SLOAD 00002f63: SWAP1 00002f64: PUSH2 0x0100 00002f67: EXP 00002f68: SWAP1 00002f69: DIV 00002f6a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f7f: AND 00002f80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f95: AND 00002f96: EQ 00002f97: ISZERO 00002f98: ISZERO 00002f99: PUSH2 0x30b0 00002f9c: JUMPI 00002f9d: PUSH1 0x02 00002f9f: PUSH1 0x00 00002fa1: SWAP1 00002fa2: SLOAD 00002fa3: SWAP1 00002fa4: PUSH2 0x0100 00002fa7: EXP 00002fa8: SWAP1 00002fa9: DIV 00002faa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fbf: AND 00002fc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fd5: AND 00002fd6: PUSH4 0x1cbd0519 00002fdb: DUP8 00002fdc: PUSH1 0x00 00002fde: PUSH1 0x40 00002fe0: MLOAD 00002fe1: PUSH1 0x20 00002fe3: ADD 00002fe4: MSTORE 00002fe5: PUSH1 0x40 00002fe7: MLOAD 00002fe8: DUP3 00002fe9: PUSH4 0xffffffff 00002fee: AND 00002fef: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000300d: MUL 0000300e: DUP2 0000300f: MSTORE 00003010: PUSH1 0x04 00003012: ADD 00003013: DUP1 00003014: DUP3 00003015: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000302a: AND 0000302b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003040: AND 00003041: DUP2 00003042: MSTORE 00003043: PUSH1 0x20 00003045: ADD 00003046: SWAP2 00003047: POP 00003048: POP 00003049: PUSH1 0x20 0000304b: PUSH1 0x40 0000304d: MLOAD 0000304e: DUP1 0000304f: DUP4 00003050: SUB 00003051: DUP2 00003052: PUSH1 0x00 00003054: DUP8 00003055: DUP1 00003056: EXTCODESIZE 00003057: ISZERO 00003058: ISZERO 00003059: PUSH2 0x305e 0000305c: JUMPI 0000305d: INVALID 0000305e: JUMPDEST 0000305f: PUSH1 0x32 00003061: GAS 00003062: SUB 00003063: CALL 00003064: ISZERO 00003065: ISZERO 00003066: PUSH2 0x306b 00003069: JUMPI 0000306a: INVALID 0000306b: JUMPDEST 0000306c: POP 0000306d: POP 0000306e: POP 0000306f: PUSH1 0x40 00003071: MLOAD 00003072: DUP1 00003073: MLOAD 00003074: SWAP1 00003075: POP 00003076: SWAP1 00003077: POP 00003078: PUSH1 0x01 0000307a: DUP2 0000307b: EQ 0000307c: ISZERO 0000307d: PUSH2 0x30a2 00003080: JUMPI 00003081: PUSH8 0x0de0b6b3a7640000 0000308a: PUSH2 0x3095 0000308d: DUP7 0000308e: PUSH1 0x05 00003090: SLOAD 00003091: PUSH2 0x368e 00003094: JUMP 00003095: JUMPDEST 00003096: DUP2 00003097: ISZERO 00003098: ISZERO 00003099: PUSH2 0x309e 0000309c: JUMPI 0000309d: INVALID 0000309e: JUMPDEST 0000309f: DIV 000030a0: SWAP2 000030a1: POP 000030a2: JUMPDEST 000030a3: PUSH1 0x02 000030a5: DUP2 000030a6: EQ 000030a7: ISZERO 000030a8: PUSH2 0x30af 000030ab: JUMPI 000030ac: DUP3 000030ad: SWAP2 000030ae: POP 000030af: JUMPDEST 000030b0: JUMPDEST 000030b1: PUSH2 0x313f 000030b4: PUSH1 0x06 000030b6: PUSH1 0x00 000030b8: DUP13 000030b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030ce: AND 000030cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030e4: AND 000030e5: DUP2 000030e6: MSTORE 000030e7: PUSH1 0x20 000030e9: ADD 000030ea: SWAP1 000030eb: DUP2 000030ec: MSTORE 000030ed: PUSH1 0x20 000030ef: ADD 000030f0: PUSH1 0x00 000030f2: KECCAK256 000030f3: PUSH1 0x00 000030f5: CALLER 000030f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000310b: AND 0000310c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003121: AND 00003122: DUP2 00003123: MSTORE 00003124: PUSH1 0x20 00003126: ADD 00003127: SWAP1 00003128: DUP2 00003129: MSTORE 0000312a: PUSH1 0x20 0000312c: ADD 0000312d: PUSH1 0x00 0000312f: KECCAK256 00003130: SLOAD 00003131: PUSH2 0x313a 00003134: DUP8 00003135: DUP7 00003136: PUSH2 0x2ee0 00003139: JUMP 0000313a: JUMPDEST 0000313b: PUSH2 0x3674 0000313e: JUMP 0000313f: JUMPDEST 00003140: PUSH1 0x06 00003142: PUSH1 0x00 00003144: DUP13 00003145: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000315a: AND 0000315b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003170: AND 00003171: DUP2 00003172: MSTORE 00003173: PUSH1 0x20 00003175: ADD 00003176: SWAP1 00003177: DUP2 00003178: MSTORE 00003179: PUSH1 0x20 0000317b: ADD 0000317c: PUSH1 0x00 0000317e: KECCAK256 0000317f: PUSH1 0x00 00003181: CALLER 00003182: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003197: AND 00003198: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031ad: AND 000031ae: DUP2 000031af: MSTORE 000031b0: PUSH1 0x20 000031b2: ADD 000031b3: SWAP1 000031b4: DUP2 000031b5: MSTORE 000031b6: PUSH1 0x20 000031b8: ADD 000031b9: PUSH1 0x00 000031bb: KECCAK256 000031bc: DUP2 000031bd: SWAP1 000031be: SSTORE 000031bf: POP 000031c0: PUSH2 0x3257 000031c3: PUSH1 0x06 000031c5: PUSH1 0x00 000031c7: DUP13 000031c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031dd: AND 000031de: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031f3: AND 000031f4: DUP2 000031f5: MSTORE 000031f6: PUSH1 0x20 000031f8: ADD 000031f9: SWAP1 000031fa: DUP2 000031fb: MSTORE 000031fc: PUSH1 0x20 000031fe: ADD 000031ff: PUSH1 0x00 00003201: KECCAK256 00003202: PUSH1 0x00 00003204: DUP9 00003205: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000321a: AND 0000321b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003230: AND 00003231: DUP2 00003232: MSTORE 00003233: PUSH1 0x20 00003235: ADD 00003236: SWAP1 00003237: DUP2 00003238: MSTORE 00003239: PUSH1 0x20 0000323b: ADD 0000323c: PUSH1 0x00 0000323e: KECCAK256 0000323f: SLOAD 00003240: PUSH2 0x3252 00003243: PUSH2 0x324c 00003246: DUP9 00003247: DUP7 00003248: PUSH2 0x2ee0 0000324b: JUMP 0000324c: JUMPDEST 0000324d: DUP8 0000324e: PUSH2 0x3674 00003251: JUMP 00003252: JUMPDEST 00003253: PUSH2 0x2ee0 00003256: JUMP 00003257: JUMPDEST 00003258: PUSH1 0x06 0000325a: PUSH1 0x00 0000325c: DUP13 0000325d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003272: AND 00003273: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003288: AND 00003289: DUP2 0000328a: MSTORE 0000328b: PUSH1 0x20 0000328d: ADD 0000328e: SWAP1 0000328f: DUP2 00003290: MSTORE 00003291: PUSH1 0x20 00003293: ADD 00003294: PUSH1 0x00 00003296: KECCAK256 00003297: PUSH1 0x00 00003299: DUP9 0000329a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032af: AND 000032b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032c5: AND 000032c6: DUP2 000032c7: MSTORE 000032c8: PUSH1 0x20 000032ca: ADD 000032cb: SWAP1 000032cc: DUP2 000032cd: MSTORE 000032ce: PUSH1 0x20 000032d0: ADD 000032d1: PUSH1 0x00 000032d3: KECCAK256 000032d4: DUP2 000032d5: SWAP1 000032d6: SSTORE 000032d7: POP 000032d8: PUSH2 0x3391 000032db: PUSH1 0x06 000032dd: PUSH1 0x00 000032df: DUP13 000032e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032f5: AND 000032f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000330b: AND 0000330c: DUP2 0000330d: MSTORE 0000330e: PUSH1 0x20 00003310: ADD 00003311: SWAP1 00003312: DUP2 00003313: MSTORE 00003314: PUSH1 0x20 00003316: ADD 00003317: PUSH1 0x00 00003319: KECCAK256 0000331a: PUSH1 0x00 0000331c: PUSH1 0x01 0000331e: PUSH1 0x00 00003320: SWAP1 00003321: SLOAD 00003322: SWAP1 00003323: PUSH2 0x0100 00003326: EXP 00003327: SWAP1 00003328: DIV 00003329: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000333e: AND 0000333f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003354: AND 00003355: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000336a: AND 0000336b: DUP2 0000336c: MSTORE 0000336d: PUSH1 0x20 0000336f: ADD 00003370: SWAP1 00003371: DUP2 00003372: MSTORE 00003373: PUSH1 0x20 00003375: ADD 00003376: PUSH1 0x00 00003378: KECCAK256 00003379: SLOAD 0000337a: PUSH2 0x338c 0000337d: PUSH2 0x3386 00003380: DUP8 00003381: DUP8 00003382: PUSH2 0x2ee0 00003385: JUMP 00003386: JUMPDEST 00003387: DUP6 00003388: PUSH2 0x3674 0000338b: JUMP 0000338c: JUMPDEST 0000338d: PUSH2 0x2ee0 00003390: JUMP 00003391: JUMPDEST 00003392: PUSH1 0x06 00003394: PUSH1 0x00 00003396: DUP13 00003397: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000033ac: AND 000033ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000033c2: AND 000033c3: DUP2 000033c4: MSTORE 000033c5: PUSH1 0x20 000033c7: ADD 000033c8: SWAP1 000033c9: DUP2 000033ca: MSTORE 000033cb: PUSH1 0x20 000033cd: ADD 000033ce: PUSH1 0x00 000033d0: KECCAK256 000033d1: PUSH1 0x00 000033d3: PUSH1 0x01 000033d5: PUSH1 0x00 000033d7: SWAP1 000033d8: SLOAD 000033d9: SWAP1 000033da: PUSH2 0x0100 000033dd: EXP 000033de: SWAP1 000033df: DIV 000033e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000033f5: AND 000033f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000340b: AND 0000340c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003421: AND 00003422: DUP2 00003423: MSTORE 00003424: PUSH1 0x20 00003426: ADD 00003427: SWAP1 00003428: DUP2 00003429: MSTORE 0000342a: PUSH1 0x20 0000342c: ADD 0000342d: PUSH1 0x00 0000342f: KECCAK256 00003430: DUP2 00003431: SWAP1 00003432: SSTORE 00003433: POP 00003434: PUSH2 0x34cd 00003437: PUSH1 0x06 00003439: PUSH1 0x00 0000343b: DUP11 0000343c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003451: AND 00003452: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003467: AND 00003468: DUP2 00003469: MSTORE 0000346a: PUSH1 0x20 0000346c: ADD 0000346d: SWAP1 0000346e: DUP2 0000346f: MSTORE 00003470: PUSH1 0x20 00003472: ADD 00003473: PUSH1 0x00 00003475: KECCAK256 00003476: PUSH1 0x00 00003478: DUP9 00003479: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000348e: AND 0000348f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000034a4: AND 000034a5: DUP2 000034a6: MSTORE 000034a7: PUSH1 0x20 000034a9: ADD 000034aa: SWAP1 000034ab: DUP2 000034ac: MSTORE 000034ad: PUSH1 0x20 000034af: ADD 000034b0: PUSH1 0x00 000034b2: KECCAK256 000034b3: SLOAD 000034b4: DUP11 000034b5: PUSH2 0x34be 000034b8: DUP11 000034b9: DUP10 000034ba: PUSH2 0x368e 000034bd: JUMP 000034be: JUMPDEST 000034bf: DUP2 000034c0: ISZERO 000034c1: ISZERO 000034c2: PUSH2 0x34c7 000034c5: JUMPI 000034c6: INVALID 000034c7: JUMPDEST 000034c8: DIV 000034c9: PUSH2 0x3674 000034cc: JUMP 000034cd: JUMPDEST 000034ce: PUSH1 0x06 000034d0: PUSH1 0x00 000034d2: DUP11 000034d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000034e8: AND 000034e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000034fe: AND 000034ff: DUP2 00003500: MSTORE 00003501: PUSH1 0x20 00003503: ADD 00003504: SWAP1 00003505: DUP2 00003506: MSTORE 00003507: PUSH1 0x20 00003509: ADD 0000350a: PUSH1 0x00 0000350c: KECCAK256 0000350d: PUSH1 0x00 0000350f: DUP9 00003510: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003525: AND 00003526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000353b: AND 0000353c: DUP2 0000353d: MSTORE 0000353e: PUSH1 0x20 00003540: ADD 00003541: SWAP1 00003542: DUP2 00003543: MSTORE 00003544: PUSH1 0x20 00003546: ADD 00003547: PUSH1 0x00 00003549: KECCAK256 0000354a: DUP2 0000354b: SWAP1 0000354c: SSTORE 0000354d: POP 0000354e: PUSH2 0x35e7 00003551: PUSH1 0x06 00003553: PUSH1 0x00 00003555: DUP11 00003556: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000356b: AND 0000356c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003581: AND 00003582: DUP2 00003583: MSTORE 00003584: PUSH1 0x20 00003586: ADD 00003587: SWAP1 00003588: DUP2 00003589: MSTORE 0000358a: PUSH1 0x20 0000358c: ADD 0000358d: PUSH1 0x00 0000358f: KECCAK256 00003590: PUSH1 0x00 00003592: CALLER 00003593: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000035a8: AND 000035a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000035be: AND 000035bf: DUP2 000035c0: MSTORE 000035c1: PUSH1 0x20 000035c3: ADD 000035c4: SWAP1 000035c5: DUP2 000035c6: MSTORE 000035c7: PUSH1 0x20 000035c9: ADD 000035ca: PUSH1 0x00 000035cc: KECCAK256 000035cd: SLOAD 000035ce: DUP11 000035cf: PUSH2 0x35d8 000035d2: DUP11 000035d3: DUP10 000035d4: PUSH2 0x368e 000035d7: JUMP 000035d8: JUMPDEST 000035d9: DUP2 000035da: ISZERO 000035db: ISZERO 000035dc: PUSH2 0x35e1 000035df: JUMPI 000035e0: INVALID 000035e1: JUMPDEST 000035e2: DIV 000035e3: PUSH2 0x2ee0 000035e6: JUMP 000035e7: JUMPDEST 000035e8: PUSH1 0x06 000035ea: PUSH1 0x00 000035ec: DUP11 000035ed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003602: AND 00003603: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003618: AND 00003619: DUP2 0000361a: MSTORE 0000361b: PUSH1 0x20 0000361d: ADD 0000361e: SWAP1 0000361f: DUP2 00003620: MSTORE 00003621: PUSH1 0x20 00003623: ADD 00003624: PUSH1 0x00 00003626: KECCAK256 00003627: PUSH1 0x00 00003629: CALLER 0000362a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000363f: AND 00003640: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003655: AND 00003656: DUP2 00003657: MSTORE 00003658: PUSH1 0x20 0000365a: ADD 0000365b: SWAP1 0000365c: DUP2 0000365d: MSTORE 0000365e: PUSH1 0x20 00003660: ADD 00003661: PUSH1 0x00 00003663: KECCAK256 00003664: DUP2 00003665: SWAP1 00003666: SSTORE 00003667: POP 00003668: JUMPDEST 00003669: POP 0000366a: POP 0000366b: POP 0000366c: POP 0000366d: POP 0000366e: POP 0000366f: POP 00003670: POP 00003671: POP 00003672: POP 00003673: JUMP 00003674: JUMPDEST 00003675: PUSH1 0x00 00003677: PUSH2 0x3682 0000367a: DUP4 0000367b: DUP4 0000367c: GT 0000367d: ISZERO 0000367e: PUSH2 0x36c3 00003681: JUMP 00003682: JUMPDEST 00003683: DUP2 00003684: DUP4 00003685: SUB 00003686: SWAP1 00003687: POP 00003688: JUMPDEST 00003689: SWAP3 0000368a: SWAP2 0000368b: POP 0000368c: POP 0000368d: JUMP 0000368e: JUMPDEST 0000368f: PUSH1 0x00 00003691: PUSH1 0x00 00003693: DUP3 00003694: DUP5 00003695: MUL 00003696: SWAP1 00003697: POP 00003698: PUSH2 0x36b8 0000369b: PUSH1 0x00 0000369d: DUP6 0000369e: EQ 0000369f: DUP1 000036a0: PUSH2 0x36b3 000036a3: JUMPI 000036a4: POP 000036a5: DUP4 000036a6: DUP6 000036a7: DUP4 000036a8: DUP2 000036a9: ISZERO 000036aa: ISZERO 000036ab: PUSH2 0x36b0 000036ae: JUMPI 000036af: INVALID 000036b0: JUMPDEST 000036b1: DIV 000036b2: EQ 000036b3: JUMPDEST 000036b4: PUSH2 0x36c3 000036b7: JUMP 000036b8: JUMPDEST 000036b9: DUP1 000036ba: SWAP2 000036bb: POP 000036bc: JUMPDEST 000036bd: POP 000036be: SWAP3 000036bf: SWAP2 000036c0: POP 000036c1: POP 000036c2: JUMP 000036c3: JUMPDEST 000036c4: DUP1 000036c5: ISZERO 000036c6: ISZERO 000036c7: PUSH2 0x36cf 000036ca: JUMPI 000036cb: PUSH2 0x0000 000036ce: JUMP 000036cf: JUMPDEST 000036d0: JUMPDEST 000036d1: POP 000036d2: JUMP 000036d3: STOP 000036d4: LOG1 000036d5: PUSH6 0x627a7a723058 000036dc: KECCAK256 000036dd: PUSH15 0x7a5e93b60f6ddaa2caa7cb5cb60102 000036ed: UNKNOWN(0x2F) 000036ee: LOG0 000036ef: PUSH10 0x59a3b5bc2f667b20353f 000036fa: DUP15 000036fb: SWAP8 000036fc: LOG3 000036fd: STOP 000036fe: UNKNOWN(0x29)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86
call_targets:
0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0a19b14a",
"selector": "0x0a19b14a",
"calldata_variants": [
"0x0a19b14a",
"0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0b927666",
"selector": "0x0b927666",
"calldata_variants": [
"0x0b927666",
"0x0b9276660000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x19774d43",
"selector": "0x19774d43",
"calldata_variants": [
"0x19774d43",
"0x19774d430000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x278b8c0e",
"selector": "0x278b8c0e",
"calldata_variants": [
"0x278b8c0e",
"0x278b8c0e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x338b5dea",
"selector": "0x338b5dea",
"calldata_variants": [
"0x338b5dea",
"0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3fb9950a",
"selector": "0x3fb9950a",
"calldata_variants": [
"0x3fb9950a",
"0x3fb9950a0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3181,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3515,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4461,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 12,
"guards_detected": [
{
"pc": 7611,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8269,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8393,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8756,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8923,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9053,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 10672,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 12
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86
call_targets:
0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0a19b14a",
"selector": "0x0a19b14a",
"calldata_variants": [
"0x0a19b14a",
"0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0b927666",
"selector": "0x0b927666",
"calldata_variants": [
"0x0b927666",
"0x0b9276660000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x19774d43",
"selector": "0x19774d43",
"calldata_variants": [
"0x19774d43",
"0x19774d430000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x278b8c0e",
"selector": "0x278b8c0e",
"calldata_variants": [
"0x278b8c0e",
"0x278b8c0e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x338b5dea",
"selector": "0x338b5dea",
"calldata_variants": [
"0x338b5dea",
"0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3fb9950a",
"selector": "0x3fb9950a",
"calldata_variants": [
"0x3fb9950a",
"0x3fb9950a0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3181,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3515,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4461,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 12,
"guards_detected": [
{
"pc": 7611,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8269,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8393,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8756,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8923,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9053,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 10672,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 12
}
|