019ba9a5-c80f-73bd-a762-fe496feaf9d2
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 |
|---|---|---|---|---|
| 37549 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 37550 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 37551 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 37552 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 37553 | capability.graph | complete | 1 / 3 | 3 months ago |
| 37554 | detector.run | complete | 1 / 3 | 3 months ago |
| 37555 | validation.fork | complete | 1 / 3 | 3 months ago |
| 37704 | report.consolidate | complete | 1 / 6 | 3 months ago |
{
"status": "not_proxy"
}
No slither job recorded yet.
{"no_findings":false,"summary":"Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.","findings":[{"severity":"medium","category":"auth","title":"earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit","exploit_scenario":"An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce.","recommendation":"Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.","evidence":"msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.","locations":["contracts/Contract.sol:208","contracts/Contract.sol:232","contracts/Contract.sol:251","contracts/Contract.sol:263"]},{"severity":"low","category":"auth","title":"Signatures are not domain separated (contract/chain replay possible)","exploit_scenario":"A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent.","recommendation":"Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.","evidence":"toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.","locations":["contracts/Contract.sol:53","contracts/Contract.sol:60","contracts/Contract.sol:263"]},{"severity":"low","category":"other","title":"regularTransfer does not enforce expirationTime","exploit_scenario":"Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC.","recommendation":"Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).","evidence":"regularTransfer only checks the secret and does not verify the current time against expirationTime.","locations":["contracts/Contract.sol:364","contracts/Contract.sol:368"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-9p_sjgwr
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: xhigh
reasoning summaries: auto
session id: 019ba9af-a6cf-7e00-8355-8bf3c1150443
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Checking for skill instructions**
exec
/bin/bash -lc ls in /tmp/codex-9p_sjgwr succeeded in 8ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
contracts
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-9p_sjgwr succeeded in 9ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Contract.sol
================================================================================
pragma solidity ^0.4.13;
library ECRecovery {
/**
* @dev Recover signer address from a message by using their signature
* @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
* @param sig bytes signature, the signature is generated using web3.eth.sign()
*/
function recover(bytes32 hash, bytes sig)
internal
pure
returns (address)
{
thinking
**Performing detailed security audit**
I’m carefully examining the entire contract’s functions for vulnerabilities like reentrancy, access control flaws, and signature validation issues. There’s a lot to unpack especially around multisig initialization, signature replay risks, and subtle authorization concerns that might allow unintended fund withdrawals or denial-of-service scenarios. Let’s explore the balances between design intention and possible exploit paths.
thinking
**Evaluating advanced edge cases**
There is a lot here involving subtle underflow/overflow checks, transfer gas limits, and signature domain separation concerns. I’m parsing complex interactions like owner-set authority at zero address enabling single-sig, unprotected timeoutResolve callable by anyone, unchecked addition before DSMath safety, and how missing domain separation could let signatures replay across contracts. These nuances will shape the audit report with categorized findings and severity assessments.
exec
/bin/bash -lc 'rg -n "earlyResolve|regularTransfer|toEthSignedMessageHash" contracts/Contract.sol' in /tmp/codex-9p_sjgwr succeeded in 16ms:
49: * toEthSignedMessageHash
53: function toEthSignedMessageHash(bytes32 hash)
141: struct Multisig { // Locked by authority approval (earlyResolve), time (timoutResolve) or conversion into an atomic swap
143: address authority; // Can approve earlyResolve of funds out of multisig
148: struct AtomicSwap { // Locked by secret (regularTransfer) or time (reclaimExpiredSwaps)
251: function earlyResolve(bytes32 msigId, uint amount, bytes sig)
263: require(otherAuthority == msigId.toEthSignedMessageHash().recover(sig));
364: function regularTransfer(bytes32 swapId, bytes32 secret)
378: @notice Batch exection of regularTransfer() function
385: regularTransfer(swapIds[i], secrets[i]); // Gas estimate `infinite`
thinking
**Checking code lines around earlyResolve**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '240,290p'" in /tmp/codex-9p_sjgwr succeeded in 7ms:
240 multisig.unlockTime = unlockTime;
241 emit MultisigReparametrized(msigId);
242 }
243
244 /**
245 @notice Withdraw ether from the multisig. Equivalent to EARLY_RESOLVE in Nimiq
246 @dev the signature is generated using web3.eth.sign() over the unique msigId
247 @param msigId Unique (owner, authority, balance != 0) multisig identifier
248 @param amount Return this amount from this contract to owner
249 @param sig bytes signature of the not transaction sending Authority
250 */
251 function earlyResolve(bytes32 msigId, uint amount, bytes sig)
252 public
253 {
254 // Require: msg.sender == (owner or authority)
255 require(
256 multisigs[msigId].owner == msg.sender ||
257 multisigs[msigId].authority == msg.sender
258 );
259 // Require: valid signature from not msg.sending authority
thinking
**Searching for regularTransfer usage**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '350,410p'" in /tmp/codex-9p_sjgwr succeeded in 13ms:
350 beneficiaries[i],
351 amounts[i],
352 fees[i],
353 expirationTimes[i],
354 hashedSecrets[i]
355 ); // Gas estimate `infinite`
356 }
357
358 /**
359 @notice Withdraw ether and delete the htlc swap. Equivalent to REGULAR_TRANSFER in Nimiq
360 @dev Transfer swap amount to beneficiary of swap and fee to authority
361 @param swapId Unique (initiator, beneficiary, amount, fee, expirationTime, hashedSecret) swap identifier
362 @param secret Hashed secret of htlc swap
363 */
364 function regularTransfer(bytes32 swapId, bytes32 secret)
365 public
366 {
367 // Require valid secret provided
368 require(sha256(secret) == atomicswaps[swapId].hashedSecret);
369 uint amount = atomicswaps[swapId].amount;
thinking
**Preparing lines for signature hash**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '40,80p'" in /tmp/codex-9p_sjgwr succeeded in 6ms:
40 if (v != 27 && v != 28) {
41 return (address(0));
42 } else {
43 // solium-disable-next-line arg-overflow
44 return ecrecover(hash, v, r, s);
45 }
46 }
47
48 /**
49 * toEthSignedMessageHash
50 * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
51 * @dev and hash the result
52 */
53 function toEthSignedMessageHash(bytes32 hash)
54 internal
55 pure
56 returns (bytes32)
57 {
58 // 32 is the length in bytes of hash,
59 // enforced by the type signature above
thinking
**Searching for msigId creation**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '180,230p'" in /tmp/codex-9p_sjgwr succeeded in 14ms:
180 */
181 function spendFromMultisig(bytes32 msigId, uint amount, address recipient)
182 internal
183 {
184 multisigs[msigId].deposit = sub(multisigs[msigId].deposit, amount);
185 if (multisigs[msigId].deposit == 0)
186 delete multisigs[msigId];
187 recipient.transfer(amount);
188 }
189
190 // PUBLIC METHODS
191
192 /**
193 @notice Initialise and reparametrize Multisig
194 @dev Uses msg.value to fund Multisig
195 @param authority Second multisig Authority. Usually this is the Exchange.
196 @param unlockTime Lock Ether until unlockTime in seconds.
197 @return msigId Unique (owner, authority, balance != 0) multisig identifier
198 */
199 function initialiseMultisig(address authority, uint unlockTime)
thinking
**Summarizing multisig authorization findings**
I’m gathering detailed notes on multisig issues like signature scope, missing domain separation causing replay risks, and expiration enforcement weaknesses, planning to back each point with code line references around earlyResolve, msigId creation, and reparametrize deposit updates.
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '226,245p'" in /tmp/codex-9p_sjgwr succeeded in 29ms:
226 /**
227 @notice Inititate/extend multisig unlockTime and/or initiate/refund multisig deposit
228 @dev Can increase deposit and/or unlockTime but not owner or authority
229 @param msigId Unique (owner, authority, balance != 0) multisig identifier
230 @param unlockTime Lock Ether until unlockTime in seconds.
231 */
232 function reparametrizeMultisig(bytes32 msigId, uint unlockTime)
233 public
234 payable
235 {
236 require(multisigs[msigId].owner == msg.sender);
237 Multisig storage multisig = multisigs[msigId];
238 multisig.deposit = add(multisig.deposit, msg.value);
239 assert(multisig.unlockTime <= unlockTime); // Can only increase unlockTime
240 multisig.unlockTime = unlockTime;
241 emit MultisigReparametrized(msigId);
242 }
243
244 /**
245 @notice Withdraw ether from the multisig. Equivalent to EARLY_RESOLVE in Nimiq
thinking
**Preparing detailed audit findings JSON**
I'll create a structured JSON report summarizing three security findings with clear severity, category, scenarios, recommendations, evidence, and code locations, ensuring JSON validity and adherence to the specified schema for the audit bundle.
codex
{"no_findings":false,"summary":"Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.","findings":[{"severity":"medium","category":"auth","title":"earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit","exploit_scenario":"An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce.","recommendation":"Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.","evidence":"msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.","locations":["contracts/Contract.sol:208","contracts/Contract.sol:232","contracts/Contract.sol:251","contracts/Contract.sol:263"]},{"severity":"low","category":"auth","title":"Signatures are not domain separated (contract/chain replay possible)","exploit_scenario":"A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent.","recommendation":"Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.","evidence":"toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.","locations":["contracts/Contract.sol:53","contracts/Contract.sol:60","contracts/Contract.sol:263"]},{"severity":"low","category":"other","title":"regularTransfer does not enforce expirationTime","exploit_scenario":"Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC.","recommendation":"Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).","evidence":"regularTransfer only checks the secret and does not verify the current time against expirationTime.","locations":["contracts/Contract.sol:364","contracts/Contract.sol:368"]}]}
tokens used
25,289
{
"codex": {
"ran_at": "2026-01-10T20:57:02.392612+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.",
"raw_final": {
"summary": "Found 3 issues: earlyResolve signatures are reusable/not amount-bound, signatures lack domain separation, and regularTransfer ignores expirationTime.",
"findings": [
{
"title": "earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit",
"category": "auth",
"evidence": "msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:208",
"contracts/Contract.sol:232",
"contracts/Contract.sol:251",
"contracts/Contract.sol:263"
],
"recommendation": "Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.",
"exploit_scenario": "An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce."
},
{
"title": "Signatures are not domain separated (contract/chain replay possible)",
"category": "auth",
"evidence": "toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.",
"severity": "low",
"locations": [
"contracts/Contract.sol:53",
"contracts/Contract.sol:60",
"contracts/Contract.sol:263"
],
"recommendation": "Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.",
"exploit_scenario": "A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent."
},
{
"title": "regularTransfer does not enforce expirationTime",
"category": "other",
"evidence": "regularTransfer only checks the secret and does not verify the current time against expirationTime.",
"severity": "low",
"locations": [
"contracts/Contract.sol:364",
"contracts/Contract.sol:368"
],
"recommendation": "Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).",
"exploit_scenario": "Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00c4 0000000c: JUMPI 0000000d: PUSH4 0xffffffff 00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00000030: PUSH1 0x00 00000032: CALLDATALOAD 00000033: DIV 00000034: AND 00000035: PUSH4 0x0c4f8f6f 0000003a: DUP2 0000003b: EQ 0000003c: PUSH2 0x00c9 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x48e7a100 00000046: EQ 00000047: PUSH2 0x00e6 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x4f55f292 00000051: EQ 00000052: PUSH2 0x00f4 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x59391a67 0000005c: EQ 0000005d: PUSH2 0x0136 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x77699a06 00000067: EQ 00000068: PUSH2 0x0196 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x89b898b8 00000072: EQ 00000073: PUSH2 0x01b1 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0x8b555789 0000007d: EQ 0000007e: PUSH2 0x0373 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xb6f9fda5 00000088: EQ 00000089: PUSH2 0x03bd 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xd79c1f7f 00000093: EQ 00000094: PUSH2 0x03d8 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xe56c8155 0000009e: EQ 0000009f: PUSH2 0x0432 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xee5e4159 000000a9: EQ 000000aa: PUSH2 0x0449 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xf02fc78f 000000b4: EQ 000000b5: PUSH2 0x04a5 000000b8: JUMPI 000000b9: DUP1 000000ba: PUSH4 0xf71d0669 000000bf: EQ 000000c0: PUSH2 0x0533 000000c3: JUMPI 000000c4: JUMPDEST 000000c5: PUSH1 0x00 000000c7: DUP1 000000c8: REVERT 000000c9: JUMPDEST 000000ca: CALLVALUE 000000cb: DUP1 000000cc: ISZERO 000000cd: PUSH2 0x00d5 000000d0: JUMPI 000000d1: PUSH1 0x00 000000d3: DUP1 000000d4: REVERT 000000d5: JUMPDEST 000000d6: POP 000000d7: PUSH2 0x00e4 000000da: PUSH1 0x04 000000dc: CALLDATALOAD 000000dd: PUSH1 0x24 000000df: CALLDATALOAD 000000e0: PUSH2 0x055f 000000e3: JUMP 000000e4: JUMPDEST 000000e5: STOP 000000e6: JUMPDEST 000000e7: PUSH2 0x00e4 000000ea: PUSH1 0x04 000000ec: CALLDATALOAD 000000ed: PUSH1 0x24 000000ef: CALLDATALOAD 000000f0: PUSH2 0x0665 000000f3: JUMP 000000f4: JUMPDEST 000000f5: CALLVALUE 000000f6: DUP1 000000f7: ISZERO 000000f8: PUSH2 0x0100 000000fb: JUMPI 000000fc: PUSH1 0x00 000000fe: DUP1 000000ff: REVERT 00000100: JUMPDEST 00000101: POP 00000102: PUSH2 0x0124 00000105: PUSH1 0x04 00000107: CALLDATALOAD 00000108: PUSH1 0x01 0000010a: PUSH1 0xa0 0000010c: PUSH1 0x02 0000010e: EXP 0000010f: SUB 00000110: PUSH1 0x24 00000112: CALLDATALOAD 00000113: AND 00000114: PUSH1 0x44 00000116: CALLDATALOAD 00000117: PUSH1 0x64 00000119: CALLDATALOAD 0000011a: PUSH1 0x84 0000011c: CALLDATALOAD 0000011d: PUSH1 0xa4 0000011f: CALLDATALOAD 00000120: PUSH2 0x06f8 00000123: JUMP 00000124: JUMPDEST 00000125: PUSH1 0x40 00000127: DUP1 00000128: MLOAD 00000129: SWAP2 0000012a: DUP3 0000012b: MSTORE 0000012c: MLOAD 0000012d: SWAP1 0000012e: DUP2 0000012f: SWAP1 00000130: SUB 00000131: PUSH1 0x20 00000133: ADD 00000134: SWAP1 00000135: RETURN 00000136: JUMPDEST 00000137: CALLVALUE 00000138: DUP1 00000139: ISZERO 0000013a: PUSH2 0x0142 0000013d: JUMPI 0000013e: PUSH1 0x00 00000140: DUP1 00000141: REVERT 00000142: JUMPDEST 00000143: POP 00000144: PUSH1 0x40 00000146: DUP1 00000147: MLOAD 00000148: PUSH1 0x20 0000014a: PUSH1 0x04 0000014c: PUSH1 0x44 0000014e: CALLDATALOAD 0000014f: DUP2 00000150: DUP2 00000151: ADD 00000152: CALLDATALOAD 00000153: PUSH1 0x1f 00000155: DUP2 00000156: ADD 00000157: DUP5 00000158: SWAP1 00000159: DIV 0000015a: DUP5 0000015b: MUL 0000015c: DUP6 0000015d: ADD 0000015e: DUP5 0000015f: ADD 00000160: SWAP1 00000161: SWAP6 00000162: MSTORE 00000163: DUP5 00000164: DUP5 00000165: MSTORE 00000166: PUSH2 0x00e4 00000169: SWAP5 0000016a: DUP3 0000016b: CALLDATALOAD 0000016c: SWAP5 0000016d: PUSH1 0x24 0000016f: DUP1 00000170: CALLDATALOAD 00000171: SWAP6 00000172: CALLDATASIZE 00000173: SWAP6 00000174: SWAP5 00000175: PUSH1 0x64 00000177: SWAP5 00000178: SWAP3 00000179: ADD 0000017a: SWAP2 0000017b: SWAP1 0000017c: DUP2 0000017d: SWAP1 0000017e: DUP5 0000017f: ADD 00000180: DUP4 00000181: DUP3 00000182: DUP1 00000183: DUP3 00000184: DUP5 00000185: CALLDATACOPY 00000186: POP 00000187: SWAP5 00000188: SWAP8 00000189: POP 0000018a: PUSH2 0x092c 0000018d: SWAP7 0000018e: POP 0000018f: POP 00000190: POP 00000191: POP 00000192: POP 00000193: POP 00000194: POP 00000195: JUMP 00000196: JUMPDEST 00000197: CALLVALUE 00000198: DUP1 00000199: ISZERO 0000019a: PUSH2 0x01a2 0000019d: JUMPI 0000019e: PUSH1 0x00 000001a0: DUP1 000001a1: REVERT 000001a2: JUMPDEST 000001a3: POP 000001a4: PUSH2 0x00e4 000001a7: PUSH1 0x04 000001a9: CALLDATALOAD 000001aa: PUSH1 0x24 000001ac: CALLDATALOAD 000001ad: PUSH2 0x0a29 000001b0: JUMP 000001b1: JUMPDEST 000001b2: CALLVALUE 000001b3: DUP1 000001b4: ISZERO 000001b5: PUSH2 0x01bd 000001b8: JUMPI 000001b9: PUSH1 0x00 000001bb: DUP1 000001bc: REVERT 000001bd: JUMPDEST 000001be: POP 000001bf: PUSH1 0x40 000001c1: DUP1 000001c2: MLOAD 000001c3: PUSH1 0x20 000001c5: PUSH1 0x04 000001c7: DUP1 000001c8: CALLDATALOAD 000001c9: DUP1 000001ca: DUP3 000001cb: ADD 000001cc: CALLDATALOAD 000001cd: DUP4 000001ce: DUP2 000001cf: MUL 000001d0: DUP1 000001d1: DUP7 000001d2: ADD 000001d3: DUP6 000001d4: ADD 000001d5: SWAP1 000001d6: SWAP7 000001d7: MSTORE 000001d8: DUP1 000001d9: DUP6 000001da: MSTORE 000001db: PUSH2 0x0323 000001de: SWAP6 000001df: CALLDATASIZE 000001e0: SWAP6 000001e1: SWAP4 000001e2: SWAP5 000001e3: PUSH1 0x24 000001e5: SWAP5 000001e6: SWAP4 000001e7: DUP6 000001e8: ADD 000001e9: SWAP3 000001ea: SWAP2 000001eb: DUP3 000001ec: SWAP2 000001ed: DUP6 000001ee: ADD 000001ef: SWAP1 000001f0: DUP5 000001f1: SWAP1 000001f2: DUP1 000001f3: DUP3 000001f4: DUP5 000001f5: CALLDATACOPY 000001f6: POP 000001f7: POP 000001f8: PUSH1 0x40 000001fa: DUP1 000001fb: MLOAD 000001fc: DUP8 000001fd: CALLDATALOAD 000001fe: DUP10 000001ff: ADD 00000200: DUP1 00000201: CALLDATALOAD 00000202: PUSH1 0x20 00000204: DUP2 00000205: DUP2 00000206: MUL 00000207: DUP5 00000208: DUP2 00000209: ADD 0000020a: DUP3 0000020b: ADD 0000020c: SWAP1 0000020d: SWAP6 0000020e: MSTORE 0000020f: DUP2 00000210: DUP5 00000211: MSTORE 00000212: SWAP9 00000213: SWAP12 00000214: SWAP11 00000215: SWAP10 00000216: DUP10 00000217: ADD 00000218: SWAP9 00000219: SWAP3 0000021a: SWAP8 0000021b: POP 0000021c: SWAP1 0000021d: DUP3 0000021e: ADD 0000021f: SWAP6 00000220: POP 00000221: SWAP4 00000222: POP 00000223: DUP4 00000224: SWAP3 00000225: POP 00000226: DUP6 00000227: ADD 00000228: SWAP1 00000229: DUP5 0000022a: SWAP1 0000022b: DUP1 0000022c: DUP3 0000022d: DUP5 0000022e: CALLDATACOPY 0000022f: POP 00000230: POP 00000231: PUSH1 0x40 00000233: DUP1 00000234: MLOAD 00000235: DUP8 00000236: CALLDATALOAD 00000237: DUP10 00000238: ADD 00000239: DUP1 0000023a: CALLDATALOAD 0000023b: PUSH1 0x20 0000023d: DUP2 0000023e: DUP2 0000023f: MUL 00000240: DUP5 00000241: DUP2 00000242: ADD 00000243: DUP3 00000244: ADD 00000245: SWAP1 00000246: SWAP6 00000247: MSTORE 00000248: DUP2 00000249: DUP5 0000024a: MSTORE 0000024b: SWAP9 0000024c: SWAP12 0000024d: SWAP11 0000024e: SWAP10 0000024f: DUP10 00000250: ADD 00000251: SWAP9 00000252: SWAP3 00000253: SWAP8 00000254: POP 00000255: SWAP1 00000256: DUP3 00000257: ADD 00000258: SWAP6 00000259: POP 0000025a: SWAP4 0000025b: POP 0000025c: DUP4 0000025d: SWAP3 0000025e: POP 0000025f: DUP6 00000260: ADD 00000261: SWAP1 00000262: DUP5 00000263: SWAP1 00000264: DUP1 00000265: DUP3 00000266: DUP5 00000267: CALLDATACOPY 00000268: POP 00000269: POP 0000026a: PUSH1 0x40 0000026c: DUP1 0000026d: MLOAD 0000026e: DUP8 0000026f: CALLDATALOAD 00000270: DUP10 00000271: ADD 00000272: DUP1 00000273: CALLDATALOAD 00000274: PUSH1 0x20 00000276: DUP2 00000277: DUP2 00000278: MUL 00000279: DUP5 0000027a: DUP2 0000027b: ADD 0000027c: DUP3 0000027d: ADD 0000027e: SWAP1 0000027f: SWAP6 00000280: MSTORE 00000281: DUP2 00000282: DUP5 00000283: MSTORE 00000284: SWAP9 00000285: SWAP12 00000286: SWAP11 00000287: SWAP10 00000288: DUP10 00000289: ADD 0000028a: SWAP9 0000028b: SWAP3 0000028c: SWAP8 0000028d: POP 0000028e: SWAP1 0000028f: DUP3 00000290: ADD 00000291: SWAP6 00000292: POP 00000293: SWAP4 00000294: POP 00000295: DUP4 00000296: SWAP3 00000297: POP 00000298: DUP6 00000299: ADD 0000029a: SWAP1 0000029b: DUP5 0000029c: SWAP1 0000029d: DUP1 0000029e: DUP3 0000029f: DUP5 000002a0: CALLDATACOPY 000002a1: POP 000002a2: POP 000002a3: PUSH1 0x40 000002a5: DUP1 000002a6: MLOAD 000002a7: DUP8 000002a8: CALLDATALOAD 000002a9: DUP10 000002aa: ADD 000002ab: DUP1 000002ac: CALLDATALOAD 000002ad: PUSH1 0x20 000002af: DUP2 000002b0: DUP2 000002b1: MUL 000002b2: DUP5 000002b3: DUP2 000002b4: ADD 000002b5: DUP3 000002b6: ADD 000002b7: SWAP1 000002b8: SWAP6 000002b9: MSTORE 000002ba: DUP2 000002bb: DUP5 000002bc: MSTORE 000002bd: SWAP9 000002be: SWAP12 000002bf: SWAP11 000002c0: SWAP10 000002c1: DUP10 000002c2: ADD 000002c3: SWAP9 000002c4: SWAP3 000002c5: SWAP8 000002c6: POP 000002c7: SWAP1 000002c8: DUP3 000002c9: ADD 000002ca: SWAP6 000002cb: POP 000002cc: SWAP4 000002cd: POP 000002ce: DUP4 000002cf: SWAP3 000002d0: POP 000002d1: DUP6 000002d2: ADD 000002d3: SWAP1 000002d4: DUP5 000002d5: SWAP1 000002d6: DUP1 000002d7: DUP3 000002d8: DUP5 000002d9: CALLDATACOPY 000002da: POP 000002db: POP 000002dc: PUSH1 0x40 000002de: DUP1 000002df: MLOAD 000002e0: DUP8 000002e1: CALLDATALOAD 000002e2: DUP10 000002e3: ADD 000002e4: DUP1 000002e5: CALLDATALOAD 000002e6: PUSH1 0x20 000002e8: DUP2 000002e9: DUP2 000002ea: MUL 000002eb: DUP5 000002ec: DUP2 000002ed: ADD 000002ee: DUP3 000002ef: ADD 000002f0: SWAP1 000002f1: SWAP6 000002f2: MSTORE 000002f3: DUP2 000002f4: DUP5 000002f5: MSTORE 000002f6: SWAP9 000002f7: SWAP12 000002f8: SWAP11 000002f9: SWAP10 000002fa: DUP10 000002fb: ADD 000002fc: SWAP9 000002fd: SWAP3 000002fe: SWAP8 000002ff: POP 00000300: SWAP1 00000301: DUP3 00000302: ADD 00000303: SWAP6 00000304: POP 00000305: SWAP4 00000306: POP 00000307: DUP4 00000308: SWAP3 00000309: POP 0000030a: DUP6 0000030b: ADD 0000030c: SWAP1 0000030d: DUP5 0000030e: SWAP1 0000030f: DUP1 00000310: DUP3 00000311: DUP5 00000312: CALLDATACOPY 00000313: POP 00000314: SWAP5 00000315: SWAP8 00000316: POP 00000317: PUSH2 0x0b3f 0000031a: SWAP7 0000031b: POP 0000031c: POP 0000031d: POP 0000031e: POP 0000031f: POP 00000320: POP 00000321: POP 00000322: JUMP 00000323: JUMPDEST 00000324: PUSH1 0x40 00000326: DUP1 00000327: MLOAD 00000328: PUSH1 0x20 0000032a: DUP1 0000032b: DUP3 0000032c: MSTORE 0000032d: DUP4 0000032e: MLOAD 0000032f: DUP2 00000330: DUP4 00000331: ADD 00000332: MSTORE 00000333: DUP4 00000334: MLOAD 00000335: SWAP2 00000336: SWAP3 00000337: DUP4 00000338: SWAP3 00000339: SWAP1 0000033a: DUP4 0000033b: ADD 0000033c: SWAP2 0000033d: DUP6 0000033e: DUP2 0000033f: ADD 00000340: SWAP2 00000341: MUL 00000342: DUP1 00000343: DUP4 00000344: DUP4 00000345: PUSH1 0x00 00000347: JUMPDEST 00000348: DUP4 00000349: DUP2 0000034a: LT 0000034b: ISZERO 0000034c: PUSH2 0x035f 0000034f: JUMPI 00000350: DUP2 00000351: DUP2 00000352: ADD 00000353: MLOAD 00000354: DUP4 00000355: DUP3 00000356: ADD 00000357: MSTORE 00000358: PUSH1 0x20 0000035a: ADD 0000035b: PUSH2 0x0347 0000035e: JUMP 0000035f: JUMPDEST 00000360: POP 00000361: POP 00000362: POP 00000363: POP 00000364: SWAP1 00000365: POP 00000366: ADD 00000367: SWAP3 00000368: POP 00000369: POP 0000036a: POP 0000036b: PUSH1 0x40 0000036d: MLOAD 0000036e: DUP1 0000036f: SWAP2 00000370: SUB 00000371: SWAP1 00000372: RETURN 00000373: JUMPDEST 00000374: CALLVALUE 00000375: DUP1 00000376: ISZERO 00000377: PUSH2 0x037f 0000037a: JUMPI 0000037b: PUSH1 0x00 0000037d: DUP1 0000037e: REVERT 0000037f: JUMPDEST 00000380: POP 00000381: PUSH2 0x038b 00000384: PUSH1 0x04 00000386: CALLDATALOAD 00000387: PUSH2 0x0c0d 0000038a: JUMP 0000038b: JUMPDEST 0000038c: PUSH1 0x40 0000038e: DUP1 0000038f: MLOAD 00000390: PUSH1 0x01 00000392: PUSH1 0xa0 00000394: PUSH1 0x02 00000396: EXP 00000397: SUB 00000398: SWAP6 00000399: DUP7 0000039a: AND 0000039b: DUP2 0000039c: MSTORE 0000039d: SWAP4 0000039e: SWAP1 0000039f: SWAP5 000003a0: AND 000003a1: PUSH1 0x20 000003a3: DUP5 000003a4: ADD 000003a5: MSTORE 000003a6: DUP3 000003a7: DUP5 000003a8: ADD 000003a9: SWAP2 000003aa: SWAP1 000003ab: SWAP2 000003ac: MSTORE 000003ad: PUSH1 0x60 000003af: DUP3 000003b0: ADD 000003b1: MSTORE 000003b2: SWAP1 000003b3: MLOAD 000003b4: SWAP1 000003b5: DUP2 000003b6: SWAP1 000003b7: SUB 000003b8: PUSH1 0x80 000003ba: ADD 000003bb: SWAP1 000003bc: RETURN 000003bd: JUMPDEST 000003be: CALLVALUE 000003bf: DUP1 000003c0: ISZERO 000003c1: PUSH2 0x03c9 000003c4: JUMPI 000003c5: PUSH1 0x00 000003c7: DUP1 000003c8: REVERT 000003c9: JUMPDEST 000003ca: POP 000003cb: PUSH2 0x00e4 000003ce: PUSH1 0x04 000003d0: CALLDATALOAD 000003d1: PUSH1 0x24 000003d3: CALLDATALOAD 000003d4: PUSH2 0x0c41 000003d7: JUMP 000003d8: JUMPDEST 000003d9: CALLVALUE 000003da: DUP1 000003db: ISZERO 000003dc: PUSH2 0x03e4 000003df: JUMPI 000003e0: PUSH1 0x00 000003e2: DUP1 000003e3: REVERT 000003e4: JUMPDEST 000003e5: POP 000003e6: PUSH1 0x40 000003e8: DUP1 000003e9: MLOAD 000003ea: PUSH1 0x20 000003ec: PUSH1 0x04 000003ee: PUSH1 0x24 000003f0: DUP1 000003f1: CALLDATALOAD 000003f2: DUP3 000003f3: DUP2 000003f4: ADD 000003f5: CALLDATALOAD 000003f6: DUP5 000003f7: DUP2 000003f8: MUL 000003f9: DUP1 000003fa: DUP8 000003fb: ADD 000003fc: DUP7 000003fd: ADD 000003fe: SWAP1 000003ff: SWAP8 00000400: MSTORE 00000401: DUP1 00000402: DUP7 00000403: MSTORE 00000404: PUSH2 0x00e4 00000407: SWAP7 00000408: DUP5 00000409: CALLDATALOAD 0000040a: SWAP7 0000040b: CALLDATASIZE 0000040c: SWAP7 0000040d: PUSH1 0x44 0000040f: SWAP6 00000410: SWAP2 00000411: SWAP5 00000412: SWAP1 00000413: SWAP2 00000414: ADD 00000415: SWAP3 00000416: SWAP2 00000417: DUP3 00000418: SWAP2 00000419: DUP6 0000041a: ADD 0000041b: SWAP1 0000041c: DUP5 0000041d: SWAP1 0000041e: DUP1 0000041f: DUP3 00000420: DUP5 00000421: CALLDATACOPY 00000422: POP 00000423: SWAP5 00000424: SWAP8 00000425: POP 00000426: PUSH2 0x0c88 00000429: SWAP7 0000042a: POP 0000042b: POP 0000042c: POP 0000042d: POP 0000042e: POP 0000042f: POP 00000430: POP 00000431: JUMP 00000432: JUMPDEST 00000433: PUSH2 0x0124 00000436: PUSH1 0x01 00000438: PUSH1 0xa0 0000043a: PUSH1 0x02 0000043c: EXP 0000043d: SUB 0000043e: PUSH1 0x04 00000440: CALLDATALOAD 00000441: AND 00000442: PUSH1 0x24 00000444: CALLDATALOAD 00000445: PUSH2 0x0cd6 00000448: JUMP 00000449: JUMPDEST 0000044a: CALLVALUE 0000044b: DUP1 0000044c: ISZERO 0000044d: PUSH2 0x0455 00000450: JUMPI 00000451: PUSH1 0x00 00000453: DUP1 00000454: REVERT 00000455: JUMPDEST 00000456: POP 00000457: PUSH2 0x0461 0000045a: PUSH1 0x04 0000045c: CALLDATALOAD 0000045d: PUSH2 0x0dcf 00000460: JUMP 00000461: JUMPDEST 00000462: PUSH1 0x40 00000464: DUP1 00000465: MLOAD 00000466: SWAP8 00000467: DUP9 00000468: MSTORE 00000469: PUSH1 0x01 0000046b: PUSH1 0xa0 0000046d: PUSH1 0x02 0000046f: EXP 00000470: SUB 00000471: SWAP7 00000472: DUP8 00000473: AND 00000474: PUSH1 0x20 00000476: DUP10 00000477: ADD 00000478: MSTORE 00000479: SWAP5 0000047a: SWAP1 0000047b: SWAP6 0000047c: AND 0000047d: DUP7 0000047e: DUP6 0000047f: ADD 00000480: MSTORE 00000481: PUSH1 0x60 00000483: DUP7 00000484: ADD 00000485: SWAP3 00000486: SWAP1 00000487: SWAP3 00000488: MSTORE 00000489: PUSH1 0x80 0000048b: DUP6 0000048c: ADD 0000048d: MSTORE 0000048e: PUSH1 0xa0 00000490: DUP5 00000491: ADD 00000492: MSTORE 00000493: PUSH1 0xc0 00000495: DUP4 00000496: ADD 00000497: SWAP2 00000498: SWAP1 00000499: SWAP2 0000049a: MSTORE 0000049b: MLOAD 0000049c: SWAP1 0000049d: DUP2 0000049e: SWAP1 0000049f: SUB 000004a0: PUSH1 0xe0 000004a2: ADD 000004a3: SWAP1 000004a4: RETURN 000004a5: JUMPDEST 000004a6: CALLVALUE 000004a7: DUP1 000004a8: ISZERO 000004a9: PUSH2 0x04b1 000004ac: JUMPI 000004ad: PUSH1 0x00 000004af: DUP1 000004b0: REVERT 000004b1: JUMPDEST 000004b2: POP 000004b3: PUSH1 0x40 000004b5: DUP1 000004b6: MLOAD 000004b7: PUSH1 0x20 000004b9: PUSH1 0x04 000004bb: DUP1 000004bc: CALLDATALOAD 000004bd: DUP1 000004be: DUP3 000004bf: ADD 000004c0: CALLDATALOAD 000004c1: DUP4 000004c2: DUP2 000004c3: MUL 000004c4: DUP1 000004c5: DUP7 000004c6: ADD 000004c7: DUP6 000004c8: ADD 000004c9: SWAP1 000004ca: SWAP7 000004cb: MSTORE 000004cc: DUP1 000004cd: DUP6 000004ce: MSTORE 000004cf: PUSH2 0x00e4 000004d2: SWAP6 000004d3: CALLDATASIZE 000004d4: SWAP6 000004d5: SWAP4 000004d6: SWAP5 000004d7: PUSH1 0x24 000004d9: SWAP5 000004da: SWAP4 000004db: DUP6 000004dc: ADD 000004dd: SWAP3 000004de: SWAP2 000004df: DUP3 000004e0: SWAP2 000004e1: DUP6 000004e2: ADD 000004e3: SWAP1 000004e4: DUP5 000004e5: SWAP1 000004e6: DUP1 000004e7: DUP3 000004e8: DUP5 000004e9: CALLDATACOPY 000004ea: POP 000004eb: POP 000004ec: PUSH1 0x40 000004ee: DUP1 000004ef: MLOAD 000004f0: DUP8 000004f1: CALLDATALOAD 000004f2: DUP10 000004f3: ADD 000004f4: DUP1 000004f5: CALLDATALOAD 000004f6: PUSH1 0x20 000004f8: DUP2 000004f9: DUP2 000004fa: MUL 000004fb: DUP5 000004fc: DUP2 000004fd: ADD 000004fe: DUP3 000004ff: ADD 00000500: SWAP1 00000501: SWAP6 00000502: MSTORE 00000503: DUP2 00000504: DUP5 00000505: MSTORE 00000506: SWAP9 00000507: SWAP12 00000508: SWAP11 00000509: SWAP10 0000050a: DUP10 0000050b: ADD 0000050c: SWAP9 0000050d: SWAP3 0000050e: SWAP8 0000050f: POP 00000510: SWAP1 00000511: DUP3 00000512: ADD 00000513: SWAP6 00000514: POP 00000515: SWAP4 00000516: POP 00000517: DUP4 00000518: SWAP3 00000519: POP 0000051a: DUP6 0000051b: ADD 0000051c: SWAP1 0000051d: DUP5 0000051e: SWAP1 0000051f: DUP1 00000520: DUP3 00000521: DUP5 00000522: CALLDATACOPY 00000523: POP 00000524: SWAP5 00000525: SWAP8 00000526: POP 00000527: PUSH2 0x0e18 0000052a: SWAP7 0000052b: POP 0000052c: POP 0000052d: POP 0000052e: POP 0000052f: POP 00000530: POP 00000531: POP 00000532: JUMP 00000533: JUMPDEST 00000534: CALLVALUE 00000535: DUP1 00000536: ISZERO 00000537: PUSH2 0x053f 0000053a: JUMPI 0000053b: PUSH1 0x00 0000053d: DUP1 0000053e: REVERT 0000053f: JUMPDEST 00000540: POP 00000541: PUSH2 0x054b 00000544: PUSH1 0x04 00000546: CALLDATALOAD 00000547: PUSH2 0x0e78 0000054a: JUMP 0000054b: JUMPDEST 0000054c: PUSH1 0x40 0000054e: DUP1 0000054f: MLOAD 00000550: SWAP2 00000551: ISZERO 00000552: ISZERO 00000553: DUP3 00000554: MSTORE 00000555: MLOAD 00000556: SWAP1 00000557: DUP2 00000558: SWAP1 00000559: SUB 0000055a: PUSH1 0x20 0000055c: ADD 0000055d: SWAP1 0000055e: RETURN 0000055f: JUMPDEST 00000560: PUSH1 0x00 00000562: DUP3 00000563: DUP2 00000564: MSTORE 00000565: PUSH1 0x01 00000567: PUSH1 0x20 00000569: SWAP1 0000056a: DUP2 0000056b: MSTORE 0000056c: PUSH1 0x40 0000056e: DUP1 0000056f: DUP4 00000570: KECCAK256 00000571: PUSH1 0x06 00000573: ADD 00000574: SLOAD 00000575: DUP2 00000576: MLOAD 00000577: DUP6 00000578: DUP2 00000579: MSTORE 0000057a: SWAP2 0000057b: MLOAD 0000057c: DUP5 0000057d: SWAP4 0000057e: SWAP2 0000057f: SWAP3 00000580: PUSH1 0x02 00000582: SWAP3 00000583: DUP2 00000584: DUP2 00000585: ADD 00000586: SWAP3 00000587: SWAP1 00000588: SWAP2 00000589: DUP2 0000058a: SWAP1 0000058b: SUB 0000058c: DUP3 0000058d: ADD 0000058e: DUP2 0000058f: DUP8 00000590: DUP7 00000591: GAS 00000592: CALL 00000593: ISZERO 00000594: DUP1 00000595: ISZERO 00000596: PUSH2 0x05a3 00000599: JUMPI 0000059a: RETURNDATASIZE 0000059b: PUSH1 0x00 0000059d: DUP1 0000059e: RETURNDATACOPY 0000059f: RETURNDATASIZE 000005a0: PUSH1 0x00 000005a2: REVERT 000005a3: JUMPDEST 000005a4: POP 000005a5: POP 000005a6: POP 000005a7: PUSH1 0x40 000005a9: MLOAD 000005aa: RETURNDATASIZE 000005ab: PUSH1 0x20 000005ad: DUP2 000005ae: LT 000005af: ISZERO 000005b0: PUSH2 0x05b8 000005b3: JUMPI 000005b4: PUSH1 0x00 000005b6: DUP1 000005b7: REVERT 000005b8: JUMPDEST 000005b9: POP 000005ba: MLOAD 000005bb: EQ 000005bc: PUSH2 0x05c4 000005bf: JUMPI 000005c0: PUSH1 0x00 000005c2: DUP1 000005c3: REVERT 000005c4: JUMPDEST 000005c5: POP 000005c6: POP 000005c7: PUSH1 0x00 000005c9: DUP3 000005ca: DUP2 000005cb: MSTORE 000005cc: PUSH1 0x01 000005ce: PUSH1 0x20 000005d0: DUP2 000005d1: SWAP1 000005d2: MSTORE 000005d3: PUSH1 0x40 000005d5: DUP1 000005d6: DUP4 000005d7: KECCAK256 000005d8: PUSH1 0x03 000005da: DUP2 000005db: ADD 000005dc: DUP1 000005dd: SLOAD 000005de: PUSH1 0x02 000005e0: DUP4 000005e1: ADD 000005e2: DUP1 000005e3: SLOAD 000005e4: DUP8 000005e5: DUP6 000005e6: SSTORE 000005e7: SWAP6 000005e8: DUP5 000005e9: ADD 000005ea: DUP1 000005eb: SLOAD 000005ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000601: NOT 00000602: SWAP1 00000603: DUP2 00000604: AND 00000605: SWAP1 00000606: SWAP2 00000607: SSTORE 00000608: DUP7 00000609: AND 0000060a: SWAP1 0000060b: SSTORE 0000060c: SWAP1 0000060d: DUP6 0000060e: SWAP1 0000060f: SSTORE 00000610: PUSH1 0x04 00000612: DUP3 00000613: ADD 00000614: DUP6 00000615: SWAP1 00000616: SSTORE 00000617: PUSH1 0x05 00000619: DUP3 0000061a: ADD 0000061b: DUP6 0000061c: SWAP1 0000061d: SSTORE 0000061e: PUSH1 0x06 00000620: SWAP1 00000621: SWAP2 00000622: ADD 00000623: DUP5 00000624: SWAP1 00000625: SSTORE 00000626: SWAP1 00000627: MLOAD 00000628: SWAP1 00000629: SWAP3 0000062a: PUSH1 0x01 0000062c: PUSH1 0xa0 0000062e: PUSH1 0x02 00000630: EXP 00000631: SUB 00000632: SWAP1 00000633: SWAP3 00000634: AND 00000635: SWAP2 00000636: DUP3 00000637: SWAP2 00000638: DUP5 00000639: ISZERO 0000063a: PUSH2 0x08fc 0000063d: MUL 0000063e: SWAP2 0000063f: DUP6 00000640: SWAP2 00000641: SWAP1 00000642: DUP2 00000643: DUP2 00000644: DUP2 00000645: DUP6 00000646: DUP9 00000647: DUP9 00000648: CALL 00000649: SWAP4 0000064a: POP 0000064b: POP 0000064c: POP 0000064d: POP 0000064e: ISZERO 0000064f: DUP1 00000650: ISZERO 00000651: PUSH2 0x065e 00000654: JUMPI 00000655: RETURNDATASIZE 00000656: PUSH1 0x00 00000658: DUP1 00000659: RETURNDATACOPY 0000065a: RETURNDATASIZE 0000065b: PUSH1 0x00 0000065d: REVERT 0000065e: JUMPDEST 0000065f: POP 00000660: POP 00000661: POP 00000662: POP 00000663: POP 00000664: JUMP 00000665: JUMPDEST 00000666: PUSH1 0x00 00000668: DUP3 00000669: DUP2 0000066a: MSTORE 0000066b: PUSH1 0x20 0000066d: DUP2 0000066e: SWAP1 0000066f: MSTORE 00000670: PUSH1 0x40 00000672: DUP2 00000673: KECCAK256 00000674: SLOAD 00000675: PUSH1 0x01 00000677: PUSH1 0xa0 00000679: PUSH1 0x02 0000067b: EXP 0000067c: SUB 0000067d: AND 0000067e: CALLER 0000067f: EQ 00000680: PUSH2 0x0688 00000683: JUMPI 00000684: PUSH1 0x00 00000686: DUP1 00000687: REVERT 00000688: JUMPDEST 00000689: POP 0000068a: PUSH1 0x00 0000068c: DUP3 0000068d: DUP2 0000068e: MSTORE 0000068f: PUSH1 0x20 00000691: DUP2 00000692: SWAP1 00000693: MSTORE 00000694: PUSH1 0x40 00000696: SWAP1 00000697: KECCAK256 00000698: PUSH1 0x02 0000069a: DUP2 0000069b: ADD 0000069c: SLOAD 0000069d: PUSH2 0x06a6 000006a0: SWAP1 000006a1: CALLVALUE 000006a2: PUSH2 0x0e8d 000006a5: JUMP 000006a6: JUMPDEST 000006a7: PUSH1 0x02 000006a9: DUP3 000006aa: ADD 000006ab: SSTORE 000006ac: PUSH1 0x03 000006ae: DUP2 000006af: ADD 000006b0: SLOAD 000006b1: DUP3 000006b2: LT 000006b3: ISZERO 000006b4: PUSH2 0x06b9 000006b7: JUMPI 000006b8: INVALID 000006b9: JUMPDEST 000006ba: PUSH1 0x03 000006bc: DUP2 000006bd: ADD 000006be: DUP3 000006bf: SWAP1 000006c0: SSTORE 000006c1: PUSH1 0x40 000006c3: DUP1 000006c4: MLOAD 000006c5: DUP5 000006c6: DUP2 000006c7: MSTORE 000006c8: SWAP1 000006c9: MLOAD 000006ca: PUSH32 0xd38d2e55758d88ddc85725e6f35ada53c5c50d90a4f92140ac2b440b5516162e 000006eb: SWAP2 000006ec: DUP2 000006ed: SWAP1 000006ee: SUB 000006ef: PUSH1 0x20 000006f1: ADD 000006f2: SWAP1 000006f3: LOG1 000006f4: POP 000006f5: POP 000006f6: POP 000006f7: JUMP 000006f8: JUMPDEST 000006f9: PUSH1 0x00 000006fb: DUP7 000006fc: DUP2 000006fd: MSTORE 000006fe: PUSH1 0x20 00000700: DUP2 00000701: SWAP1 00000702: MSTORE 00000703: PUSH1 0x40 00000705: DUP2 00000706: KECCAK256 00000707: SLOAD 00000708: DUP2 00000709: SWAP1 0000070a: PUSH1 0x01 0000070c: PUSH1 0xa0 0000070e: PUSH1 0x02 00000710: EXP 00000711: SUB 00000712: AND 00000713: CALLER 00000714: EQ 00000715: PUSH2 0x071d 00000718: JUMPI 00000719: PUSH1 0x00 0000071b: DUP1 0000071c: REVERT 0000071d: JUMPDEST 0000071e: PUSH1 0x00 00000720: DUP9 00000721: DUP2 00000722: MSTORE 00000723: PUSH1 0x20 00000725: DUP2 00000726: SWAP1 00000727: MSTORE 00000728: PUSH1 0x40 0000072a: SWAP1 0000072b: KECCAK256 0000072c: PUSH1 0x02 0000072e: ADD 0000072f: SLOAD 00000730: DUP7 00000731: DUP7 00000732: ADD 00000733: GT 00000734: ISZERO 00000735: PUSH2 0x073d 00000738: JUMPI 00000739: PUSH1 0x00 0000073b: DUP1 0000073c: REVERT 0000073d: JUMPDEST 0000073e: DUP4 0000073f: TIMESTAMP 00000740: GT 00000741: ISZERO 00000742: DUP1 00000743: ISZERO 00000744: PUSH2 0x076e 00000747: JUMPI 00000748: POP 00000749: PUSH1 0x00 0000074b: DUP9 0000074c: DUP2 0000074d: MSTORE 0000074e: PUSH1 0x20 00000750: DUP2 00000751: SWAP1 00000752: MSTORE 00000753: PUSH1 0x40 00000755: SWAP1 00000756: KECCAK256 00000757: PUSH1 0x03 00000759: ADD 0000075a: SLOAD 0000075b: PUSH2 0x076a 0000075e: SWAP1 0000075f: PUSH3 0x015180 00000763: TIMESTAMP 00000764: ADD 00000765: SWAP1 00000766: PUSH2 0x0ea3 00000769: JUMP 0000076a: JUMPDEST 0000076b: DUP5 0000076c: GT 0000076d: ISZERO 0000076e: JUMPDEST 0000076f: ISZERO 00000770: ISZERO 00000771: PUSH2 0x0779 00000774: JUMPI 00000775: PUSH1 0x00 00000777: DUP1 00000778: REVERT 00000779: JUMPDEST 0000077a: PUSH1 0x00 0000077c: DUP7 0000077d: GT 0000077e: PUSH2 0x0786 00000781: JUMPI 00000782: PUSH1 0x00 00000784: DUP1 00000785: REVERT 00000786: JUMPDEST 00000787: PUSH1 0x00 00000789: DUP4 0000078a: DUP2 0000078b: MSTORE 0000078c: PUSH1 0x02 0000078e: PUSH1 0x20 00000790: MSTORE 00000791: PUSH1 0x40 00000793: SWAP1 00000794: KECCAK256 00000795: SLOAD 00000796: PUSH1 0xff 00000798: AND 00000799: ISZERO 0000079a: PUSH2 0x07a2 0000079d: JUMPI 0000079e: PUSH1 0x00 000007a0: DUP1 000007a1: REVERT 000007a2: JUMPDEST 000007a3: PUSH1 0x00 000007a5: DUP4 000007a6: DUP2 000007a7: MSTORE 000007a8: PUSH1 0x02 000007aa: PUSH1 0x20 000007ac: DUP2 000007ad: DUP2 000007ae: MSTORE 000007af: PUSH1 0x40 000007b1: DUP1 000007b2: DUP5 000007b3: KECCAK256 000007b4: DUP1 000007b5: SLOAD 000007b6: PUSH1 0xff 000007b8: NOT 000007b9: AND 000007ba: PUSH1 0x01 000007bc: OR 000007bd: SWAP1 000007be: SSTORE 000007bf: DUP12 000007c0: DUP5 000007c1: MSTORE 000007c2: SWAP1 000007c3: DUP4 000007c4: SWAP1 000007c5: MSTORE 000007c6: SWAP1 000007c7: SWAP2 000007c8: KECCAK256 000007c9: ADD 000007ca: SLOAD 000007cb: PUSH2 0x07dd 000007ce: SWAP1 000007cf: PUSH2 0x07d8 000007d2: DUP9 000007d3: DUP9 000007d4: PUSH2 0x0e8d 000007d7: JUMP 000007d8: JUMPDEST 000007d9: PUSH2 0x0ebc 000007dc: JUMP 000007dd: JUMPDEST 000007de: PUSH1 0x00 000007e0: DUP10 000007e1: DUP2 000007e2: MSTORE 000007e3: PUSH1 0x20 000007e5: DUP2 000007e6: DUP2 000007e7: MSTORE 000007e8: PUSH1 0x40 000007ea: SWAP2 000007eb: DUP3 000007ec: SWAP1 000007ed: KECCAK256 000007ee: PUSH1 0x02 000007f0: ADD 000007f1: SWAP3 000007f2: SWAP1 000007f3: SWAP3 000007f4: SSTORE 000007f5: DUP1 000007f6: MLOAD 000007f7: DUP11 000007f8: DUP2 000007f9: MSTORE 000007fa: PUSH13 0x01000000000000000000000000 00000808: CALLER 00000809: DUP2 0000080a: MUL 0000080b: DUP3 0000080c: DUP6 0000080d: ADD 0000080e: MSTORE 0000080f: PUSH1 0x01 00000811: PUSH1 0xa0 00000813: PUSH1 0x02 00000815: EXP 00000816: SUB 00000817: DUP12 00000818: AND 00000819: MUL 0000081a: PUSH1 0x34 0000081c: DUP3 0000081d: ADD 0000081e: MSTORE 0000081f: PUSH1 0x48 00000821: DUP2 00000822: ADD 00000823: DUP10 00000824: SWAP1 00000825: MSTORE 00000826: PUSH1 0x68 00000828: DUP2 00000829: ADD 0000082a: DUP9 0000082b: SWAP1 0000082c: MSTORE 0000082d: PUSH1 0x88 0000082f: DUP2 00000830: ADD 00000831: DUP8 00000832: SWAP1 00000833: MSTORE 00000834: PUSH1 0xa8 00000836: DUP2 00000837: ADD 00000838: DUP7 00000839: SWAP1 0000083a: MSTORE 0000083b: DUP2 0000083c: MLOAD 0000083d: SWAP1 0000083e: DUP2 0000083f: SWAP1 00000840: SUB 00000841: PUSH1 0xc8 00000843: ADD 00000844: DUP2 00000845: KECCAK256 00000846: DUP1 00000847: DUP3 00000848: MSTORE 00000849: SWAP2 0000084a: MLOAD 0000084b: SWAP2 0000084c: SWAP5 0000084d: POP 0000084e: PUSH32 0x234740a705c7294747290e3973b4c8d5810692061dfca7b2ec05344e3244fe30 0000086f: SWAP3 00000870: SWAP1 00000871: DUP3 00000872: SWAP1 00000873: SUB 00000874: ADD 00000875: SWAP1 00000876: LOG1 00000877: POP 00000878: PUSH1 0x00 0000087a: DUP2 0000087b: DUP2 0000087c: MSTORE 0000087d: PUSH1 0x01 0000087f: PUSH1 0x20 00000881: DUP2 00000882: SWAP1 00000883: MSTORE 00000884: PUSH1 0x40 00000886: DUP1 00000887: DUP4 00000888: KECCAK256 00000889: DUP11 0000088a: DUP2 0000088b: SSTORE 0000088c: SWAP2 0000088d: DUP3 0000088e: ADD 0000088f: DUP1 00000890: SLOAD 00000891: CALLER 00000892: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a7: NOT 000008a8: SWAP2 000008a9: DUP3 000008aa: AND 000008ab: OR 000008ac: SWAP1 000008ad: SWAP2 000008ae: SSTORE 000008af: PUSH1 0x02 000008b1: DUP4 000008b2: ADD 000008b3: DUP1 000008b4: SLOAD 000008b5: SWAP1 000008b6: SWAP2 000008b7: AND 000008b8: PUSH1 0x01 000008ba: PUSH1 0xa0 000008bc: PUSH1 0x02 000008be: EXP 000008bf: SUB 000008c0: DUP12 000008c1: AND 000008c2: OR 000008c3: SWAP1 000008c4: SSTORE 000008c5: PUSH1 0x03 000008c7: DUP3 000008c8: ADD 000008c9: DUP9 000008ca: SWAP1 000008cb: SSTORE 000008cc: PUSH1 0x04 000008ce: DUP3 000008cf: ADD 000008d0: DUP8 000008d1: SWAP1 000008d2: SSTORE 000008d3: PUSH1 0x05 000008d5: DUP3 000008d6: ADD 000008d7: DUP7 000008d8: SWAP1 000008d9: SSTORE 000008da: PUSH1 0x06 000008dc: DUP3 000008dd: ADD 000008de: DUP6 000008df: SWAP1 000008e0: SSTORE 000008e1: MLOAD 000008e2: SWAP1 000008e3: SWAP2 000008e4: PUSH20 0x478189a0af876598c8a70ce8896960500455a949 000008f9: SWAP2 000008fa: PUSH2 0x08fc 000008fd: DUP9 000008fe: ISZERO 000008ff: MUL 00000900: SWAP2 00000901: DUP9 00000902: SWAP2 00000903: SWAP1 00000904: DUP2 00000905: DUP2 00000906: DUP2 00000907: DUP6 00000908: DUP9 00000909: DUP9 0000090a: CALL 0000090b: SWAP4 0000090c: POP 0000090d: POP 0000090e: POP 0000090f: POP 00000910: ISZERO 00000911: DUP1 00000912: ISZERO 00000913: PUSH2 0x0920 00000916: JUMPI 00000917: RETURNDATASIZE 00000918: PUSH1 0x00 0000091a: DUP1 0000091b: RETURNDATACOPY 0000091c: RETURNDATASIZE 0000091d: PUSH1 0x00 0000091f: REVERT 00000920: JUMPDEST 00000921: POP 00000922: POP 00000923: SWAP7 00000924: SWAP6 00000925: POP 00000926: POP 00000927: POP 00000928: POP 00000929: POP 0000092a: POP 0000092b: JUMP 0000092c: JUMPDEST 0000092d: PUSH1 0x00 0000092f: DUP4 00000930: DUP2 00000931: MSTORE 00000932: PUSH1 0x20 00000934: DUP2 00000935: SWAP1 00000936: MSTORE 00000937: PUSH1 0x40 00000939: DUP2 0000093a: KECCAK256 0000093b: SLOAD 0000093c: PUSH1 0x01 0000093e: PUSH1 0xa0 00000940: PUSH1 0x02 00000942: EXP 00000943: SUB 00000944: AND 00000945: CALLER 00000946: EQ 00000947: DUP1 00000948: PUSH2 0x096a 0000094b: JUMPI 0000094c: POP 0000094d: PUSH1 0x00 0000094f: DUP5 00000950: DUP2 00000951: MSTORE 00000952: PUSH1 0x20 00000954: DUP2 00000955: SWAP1 00000956: MSTORE 00000957: PUSH1 0x40 00000959: SWAP1 0000095a: KECCAK256 0000095b: PUSH1 0x01 0000095d: ADD 0000095e: SLOAD 0000095f: PUSH1 0x01 00000961: PUSH1 0xa0 00000963: PUSH1 0x02 00000965: EXP 00000966: SUB 00000967: AND 00000968: CALLER 00000969: EQ 0000096a: JUMPDEST 0000096b: ISZERO 0000096c: ISZERO 0000096d: PUSH2 0x0975 00000970: JUMPI 00000971: PUSH1 0x00 00000973: DUP1 00000974: REVERT 00000975: JUMPDEST 00000976: PUSH1 0x00 00000978: DUP5 00000979: DUP2 0000097a: MSTORE 0000097b: PUSH1 0x20 0000097d: DUP2 0000097e: SWAP1 0000097f: MSTORE 00000980: PUSH1 0x40 00000982: SWAP1 00000983: KECCAK256 00000984: SLOAD 00000985: PUSH1 0x01 00000987: PUSH1 0xa0 00000989: PUSH1 0x02 0000098b: EXP 0000098c: SUB 0000098d: AND 0000098e: CALLER 0000098f: EQ 00000990: PUSH2 0x09b0 00000993: JUMPI 00000994: PUSH1 0x00 00000996: DUP5 00000997: DUP2 00000998: MSTORE 00000999: PUSH1 0x20 0000099b: DUP2 0000099c: SWAP1 0000099d: MSTORE 0000099e: PUSH1 0x40 000009a0: SWAP1 000009a1: KECCAK256 000009a2: SLOAD 000009a3: PUSH1 0x01 000009a5: PUSH1 0xa0 000009a7: PUSH1 0x02 000009a9: EXP 000009aa: SUB 000009ab: AND 000009ac: PUSH2 0x09cc 000009af: JUMP 000009b0: JUMPDEST 000009b1: PUSH1 0x00 000009b3: DUP5 000009b4: DUP2 000009b5: MSTORE 000009b6: PUSH1 0x20 000009b8: DUP2 000009b9: SWAP1 000009ba: MSTORE 000009bb: PUSH1 0x40 000009bd: SWAP1 000009be: KECCAK256 000009bf: PUSH1 0x01 000009c1: ADD 000009c2: SLOAD 000009c3: PUSH1 0x01 000009c5: PUSH1 0xa0 000009c7: PUSH1 0x02 000009c9: EXP 000009ca: SUB 000009cb: AND 000009cc: JUMPDEST 000009cd: SWAP1 000009ce: POP 000009cf: PUSH2 0x09e7 000009d2: DUP3 000009d3: PUSH2 0x09db 000009d6: DUP7 000009d7: PUSH2 0x0ecc 000009da: JUMP 000009db: JUMPDEST 000009dc: SWAP1 000009dd: PUSH4 0xffffffff 000009e2: PUSH2 0x0f0a 000009e5: AND 000009e6: JUMP 000009e7: JUMPDEST 000009e8: PUSH1 0x01 000009ea: PUSH1 0xa0 000009ec: PUSH1 0x02 000009ee: EXP 000009ef: SUB 000009f0: DUP3 000009f1: DUP2 000009f2: AND 000009f3: SWAP2 000009f4: AND 000009f5: EQ 000009f6: PUSH2 0x09fe 000009f9: JUMPI 000009fa: PUSH1 0x00 000009fc: DUP1 000009fd: REVERT 000009fe: JUMPDEST 000009ff: PUSH1 0x00 00000a01: DUP5 00000a02: DUP2 00000a03: MSTORE 00000a04: PUSH1 0x20 00000a06: DUP2 00000a07: SWAP1 00000a08: MSTORE 00000a09: PUSH1 0x40 00000a0b: SWAP1 00000a0c: KECCAK256 00000a0d: SLOAD 00000a0e: PUSH2 0x0a23 00000a11: SWAP1 00000a12: DUP6 00000a13: SWAP1 00000a14: DUP6 00000a15: SWAP1 00000a16: PUSH1 0x01 00000a18: PUSH1 0xa0 00000a1a: PUSH1 0x02 00000a1c: EXP 00000a1d: SUB 00000a1e: AND 00000a1f: PUSH2 0x0fdf 00000a22: JUMP 00000a23: JUMPDEST 00000a24: POP 00000a25: POP 00000a26: POP 00000a27: POP 00000a28: JUMP 00000a29: JUMPDEST 00000a2a: PUSH1 0x00 00000a2c: DUP3 00000a2d: DUP2 00000a2e: MSTORE 00000a2f: PUSH1 0x20 00000a31: DUP2 00000a32: SWAP1 00000a33: MSTORE 00000a34: PUSH1 0x40 00000a36: DUP2 00000a37: KECCAK256 00000a38: SLOAD 00000a39: PUSH1 0x01 00000a3b: PUSH1 0xa0 00000a3d: PUSH1 0x02 00000a3f: EXP 00000a40: SUB 00000a41: AND 00000a42: CALLER 00000a43: EQ 00000a44: DUP1 00000a45: PUSH2 0x0a67 00000a48: JUMPI 00000a49: POP 00000a4a: PUSH1 0x00 00000a4c: DUP4 00000a4d: DUP2 00000a4e: MSTORE 00000a4f: PUSH1 0x20 00000a51: DUP2 00000a52: SWAP1 00000a53: MSTORE 00000a54: PUSH1 0x40 00000a56: SWAP1 00000a57: KECCAK256 00000a58: PUSH1 0x01 00000a5a: ADD 00000a5b: SLOAD 00000a5c: PUSH1 0x01 00000a5e: PUSH1 0xa0 00000a60: PUSH1 0x02 00000a62: EXP 00000a63: SUB 00000a64: AND 00000a65: CALLER 00000a66: EQ 00000a67: JUMPDEST 00000a68: ISZERO 00000a69: ISZERO 00000a6a: PUSH2 0x0a72 00000a6d: JUMPI 00000a6e: PUSH1 0x00 00000a70: DUP1 00000a71: REVERT 00000a72: JUMPDEST 00000a73: PUSH1 0x00 00000a75: DUP3 00000a76: DUP2 00000a77: MSTORE 00000a78: PUSH1 0x01 00000a7a: PUSH1 0x20 00000a7c: MSTORE 00000a7d: PUSH1 0x40 00000a7f: SWAP1 00000a80: KECCAK256 00000a81: SLOAD 00000a82: DUP4 00000a83: EQ 00000a84: PUSH2 0x0a8c 00000a87: JUMPI 00000a88: PUSH1 0x00 00000a8a: DUP1 00000a8b: REVERT 00000a8c: JUMPDEST 00000a8d: PUSH1 0x00 00000a8f: DUP3 00000a90: DUP2 00000a91: MSTORE 00000a92: PUSH1 0x01 00000a94: PUSH1 0x20 00000a96: MSTORE 00000a97: PUSH1 0x40 00000a99: SWAP1 00000a9a: KECCAK256 00000a9b: PUSH1 0x05 00000a9d: ADD 00000a9e: SLOAD 00000a9f: TIMESTAMP 00000aa0: LT 00000aa1: ISZERO 00000aa2: PUSH2 0x0aaa 00000aa5: JUMPI 00000aa6: PUSH1 0x00 00000aa8: DUP1 00000aa9: REVERT 00000aaa: JUMPDEST 00000aab: POP 00000aac: PUSH1 0x00 00000aae: DUP2 00000aaf: DUP2 00000ab0: MSTORE 00000ab1: PUSH1 0x01 00000ab3: PUSH1 0x20 00000ab5: DUP2 00000ab6: DUP2 00000ab7: MSTORE 00000ab8: PUSH1 0x40 00000aba: DUP1 00000abb: DUP5 00000abc: KECCAK256 00000abd: PUSH1 0x03 00000abf: DUP2 00000ac0: ADD 00000ac1: DUP1 00000ac2: SLOAD 00000ac3: DUP7 00000ac4: DUP4 00000ac5: SSTORE 00000ac6: SWAP5 00000ac7: DUP3 00000ac8: ADD 00000ac9: DUP1 00000aca: SLOAD 00000acb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ae0: NOT 00000ae1: SWAP1 00000ae2: DUP2 00000ae3: AND 00000ae4: SWAP1 00000ae5: SWAP2 00000ae6: SSTORE 00000ae7: PUSH1 0x02 00000ae9: DUP1 00000aea: DUP5 00000aeb: ADD 00000aec: DUP1 00000aed: SLOAD 00000aee: SWAP1 00000aef: SWAP3 00000af0: AND 00000af1: SWAP1 00000af2: SWAP2 00000af3: SSTORE 00000af4: SWAP1 00000af5: DUP7 00000af6: SWAP1 00000af7: SSTORE 00000af8: PUSH1 0x04 00000afa: DUP3 00000afb: ADD 00000afc: DUP7 00000afd: SWAP1 00000afe: SSTORE 00000aff: PUSH1 0x05 00000b01: DUP3 00000b02: ADD 00000b03: DUP7 00000b04: SWAP1 00000b05: SSTORE 00000b06: PUSH1 0x06 00000b08: SWAP1 00000b09: SWAP2 00000b0a: ADD 00000b0b: DUP6 00000b0c: SWAP1 00000b0d: SSTORE 00000b0e: DUP7 00000b0f: DUP6 00000b10: MSTORE 00000b11: SWAP2 00000b12: DUP5 00000b13: SWAP1 00000b14: MSTORE 00000b15: SWAP1 00000b16: SWAP3 00000b17: KECCAK256 00000b18: SWAP1 00000b19: SWAP2 00000b1a: ADD 00000b1b: SLOAD 00000b1c: PUSH2 0x0b25 00000b1f: SWAP1 00000b20: DUP3 00000b21: PUSH2 0x0e8d 00000b24: JUMP 00000b25: JUMPDEST 00000b26: PUSH1 0x00 00000b28: SWAP4 00000b29: DUP5 00000b2a: MSTORE 00000b2b: PUSH1 0x20 00000b2d: DUP5 00000b2e: SWAP1 00000b2f: MSTORE 00000b30: PUSH1 0x40 00000b32: SWAP1 00000b33: SWAP4 00000b34: KECCAK256 00000b35: PUSH1 0x02 00000b37: ADD 00000b38: SWAP3 00000b39: SWAP1 00000b3a: SWAP3 00000b3b: SSTORE 00000b3c: POP 00000b3d: POP 00000b3e: JUMP 00000b3f: JUMPDEST 00000b40: PUSH1 0x60 00000b42: PUSH1 0x00 00000b44: PUSH1 0x19 00000b46: DUP9 00000b47: MLOAD 00000b48: GT 00000b49: ISZERO 00000b4a: ISZERO 00000b4b: ISZERO 00000b4c: PUSH2 0x0b54 00000b4f: JUMPI 00000b50: PUSH1 0x00 00000b52: DUP1 00000b53: REVERT 00000b54: JUMPDEST 00000b55: POP 00000b56: PUSH1 0x00 00000b58: JUMPDEST 00000b59: DUP8 00000b5a: MLOAD 00000b5b: DUP2 00000b5c: LT 00000b5d: ISZERO 00000b5e: PUSH2 0x0c02 00000b61: JUMPI 00000b62: PUSH2 0x0bf9 00000b65: DUP9 00000b66: DUP3 00000b67: DUP2 00000b68: MLOAD 00000b69: DUP2 00000b6a: LT 00000b6b: ISZERO 00000b6c: ISZERO 00000b6d: PUSH2 0x0b72 00000b70: JUMPI 00000b71: INVALID 00000b72: JUMPDEST 00000b73: SWAP1 00000b74: PUSH1 0x20 00000b76: ADD 00000b77: SWAP1 00000b78: PUSH1 0x20 00000b7a: MUL 00000b7b: ADD 00000b7c: MLOAD 00000b7d: DUP9 00000b7e: DUP4 00000b7f: DUP2 00000b80: MLOAD 00000b81: DUP2 00000b82: LT 00000b83: ISZERO 00000b84: ISZERO 00000b85: PUSH2 0x0b8a 00000b88: JUMPI 00000b89: INVALID 00000b8a: JUMPDEST 00000b8b: SWAP1 00000b8c: PUSH1 0x20 00000b8e: ADD 00000b8f: SWAP1 00000b90: PUSH1 0x20 00000b92: MUL 00000b93: ADD 00000b94: MLOAD 00000b95: DUP9 00000b96: DUP5 00000b97: DUP2 00000b98: MLOAD 00000b99: DUP2 00000b9a: LT 00000b9b: ISZERO 00000b9c: ISZERO 00000b9d: PUSH2 0x0ba2 00000ba0: JUMPI 00000ba1: INVALID 00000ba2: JUMPDEST 00000ba3: SWAP1 00000ba4: PUSH1 0x20 00000ba6: ADD 00000ba7: SWAP1 00000ba8: PUSH1 0x20 00000baa: MUL 00000bab: ADD 00000bac: MLOAD 00000bad: DUP9 00000bae: DUP6 00000baf: DUP2 00000bb0: MLOAD 00000bb1: DUP2 00000bb2: LT 00000bb3: ISZERO 00000bb4: ISZERO 00000bb5: PUSH2 0x0bba 00000bb8: JUMPI 00000bb9: INVALID 00000bba: JUMPDEST 00000bbb: SWAP1 00000bbc: PUSH1 0x20 00000bbe: ADD 00000bbf: SWAP1 00000bc0: PUSH1 0x20 00000bc2: MUL 00000bc3: ADD 00000bc4: MLOAD 00000bc5: DUP9 00000bc6: DUP7 00000bc7: DUP2 00000bc8: MLOAD 00000bc9: DUP2 00000bca: LT 00000bcb: ISZERO 00000bcc: ISZERO 00000bcd: PUSH2 0x0bd2 00000bd0: JUMPI 00000bd1: INVALID 00000bd2: JUMPDEST 00000bd3: SWAP1 00000bd4: PUSH1 0x20 00000bd6: ADD 00000bd7: SWAP1 00000bd8: PUSH1 0x20 00000bda: MUL 00000bdb: ADD 00000bdc: MLOAD 00000bdd: DUP9 00000bde: DUP8 00000bdf: DUP2 00000be0: MLOAD 00000be1: DUP2 00000be2: LT 00000be3: ISZERO 00000be4: ISZERO 00000be5: PUSH2 0x0bea 00000be8: JUMPI 00000be9: INVALID 00000bea: JUMPDEST 00000beb: SWAP1 00000bec: PUSH1 0x20 00000bee: ADD 00000bef: SWAP1 00000bf0: PUSH1 0x20 00000bf2: MUL 00000bf3: ADD 00000bf4: MLOAD 00000bf5: PUSH2 0x06f8 00000bf8: JUMP 00000bf9: JUMPDEST 00000bfa: POP 00000bfb: PUSH1 0x01 00000bfd: ADD 00000bfe: PUSH2 0x0b58 00000c01: JUMP 00000c02: JUMPDEST 00000c03: POP 00000c04: SWAP7 00000c05: SWAP6 00000c06: POP 00000c07: POP 00000c08: POP 00000c09: POP 00000c0a: POP 00000c0b: POP 00000c0c: JUMP 00000c0d: JUMPDEST 00000c0e: PUSH1 0x00 00000c10: PUSH1 0x20 00000c12: DUP2 00000c13: SWAP1 00000c14: MSTORE 00000c15: SWAP1 00000c16: DUP2 00000c17: MSTORE 00000c18: PUSH1 0x40 00000c1a: SWAP1 00000c1b: KECCAK256 00000c1c: DUP1 00000c1d: SLOAD 00000c1e: PUSH1 0x01 00000c20: DUP3 00000c21: ADD 00000c22: SLOAD 00000c23: PUSH1 0x02 00000c25: DUP4 00000c26: ADD 00000c27: SLOAD 00000c28: PUSH1 0x03 00000c2a: SWAP1 00000c2b: SWAP4 00000c2c: ADD 00000c2d: SLOAD 00000c2e: PUSH1 0x01 00000c30: PUSH1 0xa0 00000c32: PUSH1 0x02 00000c34: EXP 00000c35: SUB 00000c36: SWAP3 00000c37: DUP4 00000c38: AND 00000c39: SWAP4 00000c3a: SWAP2 00000c3b: SWAP1 00000c3c: SWAP3 00000c3d: AND 00000c3e: SWAP2 00000c3f: DUP5 00000c40: JUMP 00000c41: JUMPDEST 00000c42: PUSH1 0x00 00000c44: DUP3 00000c45: DUP2 00000c46: MSTORE 00000c47: PUSH1 0x20 00000c49: DUP2 00000c4a: SWAP1 00000c4b: MSTORE 00000c4c: PUSH1 0x40 00000c4e: SWAP1 00000c4f: KECCAK256 00000c50: PUSH1 0x03 00000c52: ADD 00000c53: SLOAD 00000c54: TIMESTAMP 00000c55: LT 00000c56: ISZERO 00000c57: PUSH2 0x0c5f 00000c5a: JUMPI 00000c5b: PUSH1 0x00 00000c5d: DUP1 00000c5e: REVERT 00000c5f: JUMPDEST 00000c60: PUSH1 0x00 00000c62: DUP3 00000c63: DUP2 00000c64: MSTORE 00000c65: PUSH1 0x20 00000c67: DUP2 00000c68: SWAP1 00000c69: MSTORE 00000c6a: PUSH1 0x40 00000c6c: SWAP1 00000c6d: KECCAK256 00000c6e: SLOAD 00000c6f: PUSH2 0x0c84 00000c72: SWAP1 00000c73: DUP4 00000c74: SWAP1 00000c75: DUP4 00000c76: SWAP1 00000c77: PUSH1 0x01 00000c79: PUSH1 0xa0 00000c7b: PUSH1 0x02 00000c7d: EXP 00000c7e: SUB 00000c7f: AND 00000c80: PUSH2 0x0fdf 00000c83: JUMP 00000c84: JUMPDEST 00000c85: POP 00000c86: POP 00000c87: JUMP 00000c88: JUMPDEST 00000c89: PUSH1 0x00 00000c8b: PUSH1 0x19 00000c8d: DUP3 00000c8e: MLOAD 00000c8f: GT 00000c90: ISZERO 00000c91: ISZERO 00000c92: ISZERO 00000c93: PUSH2 0x0c9b 00000c96: JUMPI 00000c97: PUSH1 0x00 00000c99: DUP1 00000c9a: REVERT 00000c9b: JUMPDEST 00000c9c: POP 00000c9d: PUSH1 0x00 00000c9f: JUMPDEST 00000ca0: DUP2 00000ca1: MLOAD 00000ca2: DUP2 00000ca3: LT 00000ca4: ISZERO 00000ca5: PUSH2 0x0cd1 00000ca8: JUMPI 00000ca9: PUSH2 0x0cc9 00000cac: DUP4 00000cad: DUP4 00000cae: DUP4 00000caf: DUP2 00000cb0: MLOAD 00000cb1: DUP2 00000cb2: LT 00000cb3: ISZERO 00000cb4: ISZERO 00000cb5: PUSH2 0x0cba 00000cb8: JUMPI 00000cb9: INVALID 00000cba: JUMPDEST 00000cbb: SWAP1 00000cbc: PUSH1 0x20 00000cbe: ADD 00000cbf: SWAP1 00000cc0: PUSH1 0x20 00000cc2: MUL 00000cc3: ADD 00000cc4: MLOAD 00000cc5: PUSH2 0x0a29 00000cc8: JUMP 00000cc9: JUMPDEST 00000cca: PUSH1 0x01 00000ccc: ADD 00000ccd: PUSH2 0x0c9f 00000cd0: JUMP 00000cd1: JUMPDEST 00000cd2: POP 00000cd3: POP 00000cd4: POP 00000cd5: JUMP 00000cd6: JUMPDEST 00000cd7: PUSH1 0x00 00000cd9: DUP1 00000cda: CALLER 00000cdb: PUSH1 0x01 00000cdd: PUSH1 0xa0 00000cdf: PUSH1 0x02 00000ce1: EXP 00000ce2: SUB 00000ce3: DUP6 00000ce4: AND 00000ce5: EQ 00000ce6: ISZERO 00000ce7: PUSH2 0x0cef 00000cea: JUMPI 00000ceb: PUSH1 0x00 00000ced: DUP1 00000cee: REVERT 00000cef: JUMPDEST 00000cf0: PUSH1 0x00 00000cf2: CALLVALUE 00000cf3: GT 00000cf4: PUSH2 0x0cfc 00000cf7: JUMPI 00000cf8: PUSH1 0x00 00000cfa: DUP1 00000cfb: REVERT 00000cfc: JUMPDEST 00000cfd: PUSH1 0x40 00000cff: DUP1 00000d00: MLOAD 00000d01: PUSH13 0x01000000000000000000000000 00000d0f: CALLER 00000d10: DUP2 00000d11: MUL 00000d12: DUP3 00000d13: MSTORE 00000d14: PUSH1 0x01 00000d16: PUSH1 0xa0 00000d18: PUSH1 0x02 00000d1a: EXP 00000d1b: SUB 00000d1c: DUP8 00000d1d: AND 00000d1e: MUL 00000d1f: PUSH1 0x14 00000d21: DUP3 00000d22: ADD 00000d23: MSTORE 00000d24: CALLVALUE 00000d25: PUSH1 0x28 00000d27: DUP3 00000d28: ADD 00000d29: MSTORE 00000d2a: PUSH1 0x48 00000d2c: DUP2 00000d2d: ADD 00000d2e: DUP6 00000d2f: SWAP1 00000d30: MSTORE 00000d31: DUP2 00000d32: MLOAD 00000d33: SWAP1 00000d34: DUP2 00000d35: SWAP1 00000d36: SUB 00000d37: PUSH1 0x68 00000d39: ADD 00000d3a: DUP2 00000d3b: KECCAK256 00000d3c: DUP1 00000d3d: DUP3 00000d3e: MSTORE 00000d3f: SWAP2 00000d40: MLOAD 00000d41: SWAP2 00000d42: SWAP4 00000d43: POP 00000d44: PUSH32 0x542f0adac9864069fdc036596079fadf5b1e3ab50311a5bf9ad6458de05ff80c 00000d65: SWAP2 00000d66: SWAP1 00000d67: DUP2 00000d68: SWAP1 00000d69: SUB 00000d6a: PUSH1 0x20 00000d6c: ADD 00000d6d: SWAP1 00000d6e: LOG1 00000d6f: POP 00000d70: PUSH1 0x00 00000d72: DUP2 00000d73: DUP2 00000d74: MSTORE 00000d75: PUSH1 0x20 00000d77: DUP2 00000d78: SWAP1 00000d79: MSTORE 00000d7a: PUSH1 0x40 00000d7c: SWAP1 00000d7d: KECCAK256 00000d7e: PUSH1 0x02 00000d80: DUP2 00000d81: ADD 00000d82: SLOAD 00000d83: ISZERO 00000d84: ISZERO 00000d85: PUSH2 0x0dbe 00000d88: JUMPI 00000d89: DUP1 00000d8a: SLOAD 00000d8b: CALLER 00000d8c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000da1: NOT 00000da2: SWAP2 00000da3: DUP3 00000da4: AND 00000da5: OR 00000da6: DUP3 00000da7: SSTORE 00000da8: PUSH1 0x01 00000daa: DUP3 00000dab: ADD 00000dac: DUP1 00000dad: SLOAD 00000dae: SWAP1 00000daf: SWAP2 00000db0: AND 00000db1: PUSH1 0x01 00000db3: PUSH1 0xa0 00000db5: PUSH1 0x02 00000db7: EXP 00000db8: SUB 00000db9: DUP7 00000dba: AND 00000dbb: OR 00000dbc: SWAP1 00000dbd: SSTORE 00000dbe: JUMPDEST 00000dbf: PUSH2 0x0dc8 00000dc2: DUP3 00000dc3: DUP5 00000dc4: PUSH2 0x0665 00000dc7: JUMP 00000dc8: JUMPDEST 00000dc9: POP 00000dca: SWAP3 00000dcb: SWAP2 00000dcc: POP 00000dcd: POP 00000dce: JUMP 00000dcf: JUMPDEST 00000dd0: PUSH1 0x01 00000dd2: PUSH1 0x20 00000dd4: DUP2 00000dd5: SWAP1 00000dd6: MSTORE 00000dd7: PUSH1 0x00 00000dd9: SWAP2 00000dda: DUP3 00000ddb: MSTORE 00000ddc: PUSH1 0x40 00000dde: SWAP1 00000ddf: SWAP2 00000de0: KECCAK256 00000de1: DUP1 00000de2: SLOAD 00000de3: SWAP2 00000de4: DUP2 00000de5: ADD 00000de6: SLOAD 00000de7: PUSH1 0x02 00000de9: DUP3 00000dea: ADD 00000deb: SLOAD 00000dec: PUSH1 0x03 00000dee: DUP4 00000def: ADD 00000df0: SLOAD 00000df1: PUSH1 0x04 00000df3: DUP5 00000df4: ADD 00000df5: SLOAD 00000df6: PUSH1 0x05 00000df8: DUP6 00000df9: ADD 00000dfa: SLOAD 00000dfb: PUSH1 0x06 00000dfd: SWAP1 00000dfe: SWAP6 00000dff: ADD 00000e00: SLOAD 00000e01: PUSH1 0x01 00000e03: PUSH1 0xa0 00000e05: PUSH1 0x02 00000e07: EXP 00000e08: SUB 00000e09: SWAP5 00000e0a: DUP6 00000e0b: AND 00000e0c: SWAP6 00000e0d: SWAP4 00000e0e: SWAP1 00000e0f: SWAP5 00000e10: AND 00000e11: SWAP4 00000e12: SWAP2 00000e13: SWAP3 00000e14: SWAP1 00000e15: SWAP2 00000e16: DUP8 00000e17: JUMP 00000e18: JUMPDEST 00000e19: PUSH1 0x00 00000e1b: PUSH1 0x19 00000e1d: DUP4 00000e1e: MLOAD 00000e1f: GT 00000e20: ISZERO 00000e21: ISZERO 00000e22: ISZERO 00000e23: PUSH2 0x0e2b 00000e26: JUMPI 00000e27: PUSH1 0x00 00000e29: DUP1 00000e2a: REVERT 00000e2b: JUMPDEST 00000e2c: POP 00000e2d: PUSH1 0x00 00000e2f: JUMPDEST 00000e30: DUP3 00000e31: MLOAD 00000e32: DUP2 00000e33: LT 00000e34: ISZERO 00000e35: PUSH2 0x0cd1 00000e38: JUMPI 00000e39: PUSH2 0x0e70 00000e3c: DUP4 00000e3d: DUP3 00000e3e: DUP2 00000e3f: MLOAD 00000e40: DUP2 00000e41: LT 00000e42: ISZERO 00000e43: ISZERO 00000e44: PUSH2 0x0e49 00000e47: JUMPI 00000e48: INVALID 00000e49: JUMPDEST 00000e4a: SWAP1 00000e4b: PUSH1 0x20 00000e4d: ADD 00000e4e: SWAP1 00000e4f: PUSH1 0x20 00000e51: MUL 00000e52: ADD 00000e53: MLOAD 00000e54: DUP4 00000e55: DUP4 00000e56: DUP2 00000e57: MLOAD 00000e58: DUP2 00000e59: LT 00000e5a: ISZERO 00000e5b: ISZERO 00000e5c: PUSH2 0x0e61 00000e5f: JUMPI 00000e60: INVALID 00000e61: JUMPDEST 00000e62: SWAP1 00000e63: PUSH1 0x20 00000e65: ADD 00000e66: SWAP1 00000e67: PUSH1 0x20 00000e69: MUL 00000e6a: ADD 00000e6b: MLOAD 00000e6c: PUSH2 0x055f 00000e6f: JUMP 00000e70: JUMPDEST 00000e71: PUSH1 0x01 00000e73: ADD 00000e74: PUSH2 0x0e2f 00000e77: JUMP 00000e78: JUMPDEST 00000e79: PUSH1 0x02 00000e7b: PUSH1 0x20 00000e7d: MSTORE 00000e7e: PUSH1 0x00 00000e80: SWAP1 00000e81: DUP2 00000e82: MSTORE 00000e83: PUSH1 0x40 00000e85: SWAP1 00000e86: KECCAK256 00000e87: SLOAD 00000e88: PUSH1 0xff 00000e8a: AND 00000e8b: DUP2 00000e8c: JUMP 00000e8d: JUMPDEST 00000e8e: DUP1 00000e8f: DUP3 00000e90: ADD 00000e91: DUP3 00000e92: DUP2 00000e93: LT 00000e94: ISZERO 00000e95: PUSH2 0x0e9d 00000e98: JUMPI 00000e99: PUSH1 0x00 00000e9b: DUP1 00000e9c: REVERT 00000e9d: JUMPDEST 00000e9e: SWAP3 00000e9f: SWAP2 00000ea0: POP 00000ea1: POP 00000ea2: JUMP 00000ea3: JUMPDEST 00000ea4: PUSH1 0x00 00000ea6: DUP2 00000ea7: DUP4 00000ea8: GT 00000ea9: ISZERO 00000eaa: PUSH2 0x0eb3 00000ead: JUMPI 00000eae: DUP2 00000eaf: PUSH2 0x0eb5 00000eb2: JUMP 00000eb3: JUMPDEST 00000eb4: DUP3 00000eb5: JUMPDEST 00000eb6: SWAP4 00000eb7: SWAP3 00000eb8: POP 00000eb9: POP 00000eba: POP 00000ebb: JUMP 00000ebc: JUMPDEST 00000ebd: DUP1 00000ebe: DUP3 00000ebf: SUB 00000ec0: DUP3 00000ec1: DUP2 00000ec2: GT 00000ec3: ISZERO 00000ec4: PUSH2 0x0e9d 00000ec7: JUMPI 00000ec8: PUSH1 0x00 00000eca: DUP1 00000ecb: REVERT 00000ecc: JUMPDEST 00000ecd: PUSH1 0x40 00000ecf: DUP1 00000ed0: MLOAD 00000ed1: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00000ef2: DUP2 00000ef3: MSTORE 00000ef4: PUSH1 0x1c 00000ef6: DUP2 00000ef7: ADD 00000ef8: DUP4 00000ef9: SWAP1 00000efa: MSTORE 00000efb: SWAP1 00000efc: MLOAD 00000efd: SWAP1 00000efe: DUP2 00000eff: SWAP1 00000f00: SUB 00000f01: PUSH1 0x3c 00000f03: ADD 00000f04: SWAP1 00000f05: KECCAK256 00000f06: SWAP2 00000f07: SWAP1 00000f08: POP 00000f09: JUMP 00000f0a: JUMPDEST 00000f0b: PUSH1 0x00 00000f0d: DUP1 00000f0e: PUSH1 0x00 00000f10: DUP1 00000f11: DUP5 00000f12: MLOAD 00000f13: PUSH1 0x41 00000f15: EQ 00000f16: ISZERO 00000f17: ISZERO 00000f18: PUSH2 0x0f24 00000f1b: JUMPI 00000f1c: PUSH1 0x00 00000f1e: SWAP4 00000f1f: POP 00000f20: PUSH2 0x0fd6 00000f23: JUMP 00000f24: JUMPDEST 00000f25: POP 00000f26: POP 00000f27: POP 00000f28: PUSH1 0x20 00000f2a: DUP3 00000f2b: ADD 00000f2c: MLOAD 00000f2d: PUSH1 0x40 00000f2f: DUP4 00000f30: ADD 00000f31: MLOAD 00000f32: PUSH1 0x60 00000f34: DUP5 00000f35: ADD 00000f36: MLOAD 00000f37: PUSH1 0x00 00000f39: BYTE 00000f3a: PUSH1 0x1b 00000f3c: PUSH1 0xff 00000f3e: DUP3 00000f3f: AND 00000f40: LT 00000f41: ISZERO 00000f42: PUSH2 0x0f49 00000f45: JUMPI 00000f46: PUSH1 0x1b 00000f48: ADD 00000f49: JUMPDEST 00000f4a: DUP1 00000f4b: PUSH1 0xff 00000f4d: AND 00000f4e: PUSH1 0x1b 00000f50: EQ 00000f51: ISZERO 00000f52: DUP1 00000f53: ISZERO 00000f54: PUSH2 0x0f61 00000f57: JUMPI 00000f58: POP 00000f59: DUP1 00000f5a: PUSH1 0xff 00000f5c: AND 00000f5d: PUSH1 0x1c 00000f5f: EQ 00000f60: ISZERO 00000f61: JUMPDEST 00000f62: ISZERO 00000f63: PUSH2 0x0f6f 00000f66: JUMPI 00000f67: PUSH1 0x00 00000f69: SWAP4 00000f6a: POP 00000f6b: PUSH2 0x0fd6 00000f6e: JUMP 00000f6f: JUMPDEST 00000f70: PUSH1 0x40 00000f72: DUP1 00000f73: MLOAD 00000f74: PUSH1 0x00 00000f76: DUP1 00000f77: DUP3 00000f78: MSTORE 00000f79: PUSH1 0x20 00000f7b: DUP1 00000f7c: DUP4 00000f7d: ADD 00000f7e: DUP1 00000f7f: DUP6 00000f80: MSTORE 00000f81: DUP11 00000f82: SWAP1 00000f83: MSTORE 00000f84: PUSH1 0xff 00000f86: DUP6 00000f87: AND 00000f88: DUP4 00000f89: DUP6 00000f8a: ADD 00000f8b: MSTORE 00000f8c: PUSH1 0x60 00000f8e: DUP4 00000f8f: ADD 00000f90: DUP8 00000f91: SWAP1 00000f92: MSTORE 00000f93: PUSH1 0x80 00000f95: DUP4 00000f96: ADD 00000f97: DUP7 00000f98: SWAP1 00000f99: MSTORE 00000f9a: SWAP3 00000f9b: MLOAD 00000f9c: PUSH1 0x01 00000f9e: SWAP4 00000f9f: PUSH1 0xa0 00000fa1: DUP1 00000fa2: DUP6 00000fa3: ADD 00000fa4: SWAP5 00000fa5: SWAP2 00000fa6: SWAP4 00000fa7: PUSH1 0x1f 00000fa9: NOT 00000faa: DUP5 00000fab: ADD 00000fac: SWAP4 00000fad: SWAP3 00000fae: DUP4 00000faf: SWAP1 00000fb0: SUB 00000fb1: SWAP1 00000fb2: SWAP2 00000fb3: ADD 00000fb4: SWAP2 00000fb5: SWAP1 00000fb6: DUP7 00000fb7: GAS 00000fb8: CALL 00000fb9: ISZERO 00000fba: DUP1 00000fbb: ISZERO 00000fbc: PUSH2 0x0fc9 00000fbf: JUMPI 00000fc0: RETURNDATASIZE 00000fc1: PUSH1 0x00 00000fc3: DUP1 00000fc4: RETURNDATACOPY 00000fc5: RETURNDATASIZE 00000fc6: PUSH1 0x00 00000fc8: REVERT 00000fc9: JUMPDEST 00000fca: POP 00000fcb: POP 00000fcc: POP 00000fcd: PUSH1 0x20 00000fcf: PUSH1 0x40 00000fd1: MLOAD 00000fd2: SUB 00000fd3: MLOAD 00000fd4: SWAP4 00000fd5: POP 00000fd6: JUMPDEST 00000fd7: POP 00000fd8: POP 00000fd9: POP 00000fda: SWAP3 00000fdb: SWAP2 00000fdc: POP 00000fdd: POP 00000fde: JUMP 00000fdf: JUMPDEST 00000fe0: PUSH1 0x00 00000fe2: DUP4 00000fe3: DUP2 00000fe4: MSTORE 00000fe5: PUSH1 0x20 00000fe7: DUP2 00000fe8: SWAP1 00000fe9: MSTORE 00000fea: PUSH1 0x40 00000fec: SWAP1 00000fed: KECCAK256 00000fee: PUSH1 0x02 00000ff0: ADD 00000ff1: SLOAD 00000ff2: PUSH2 0x0ffb 00000ff5: SWAP1 00000ff6: DUP4 00000ff7: PUSH2 0x0ebc 00000ffa: JUMP 00000ffb: JUMPDEST 00000ffc: PUSH1 0x00 00000ffe: DUP5 00000fff: DUP2 00001000: MSTORE 00001001: PUSH1 0x20 00001003: DUP2 00001004: SWAP1 00001005: MSTORE 00001006: PUSH1 0x40 00001008: SWAP1 00001009: KECCAK256 0000100a: PUSH1 0x02 0000100c: ADD 0000100d: DUP2 0000100e: SWAP1 0000100f: SSTORE 00001010: ISZERO 00001011: ISZERO 00001012: PUSH2 0x1057 00001015: JUMPI 00001016: PUSH1 0x00 00001018: DUP4 00001019: DUP2 0000101a: MSTORE 0000101b: PUSH1 0x20 0000101d: DUP2 0000101e: SWAP1 0000101f: MSTORE 00001020: PUSH1 0x40 00001022: DUP2 00001023: KECCAK256 00001024: DUP1 00001025: SLOAD 00001026: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000103b: NOT 0000103c: SWAP1 0000103d: DUP2 0000103e: AND 0000103f: DUP3 00001040: SSTORE 00001041: PUSH1 0x01 00001043: DUP3 00001044: ADD 00001045: DUP1 00001046: SLOAD 00001047: SWAP1 00001048: SWAP2 00001049: AND 0000104a: SWAP1 0000104b: SSTORE 0000104c: PUSH1 0x02 0000104e: DUP2 0000104f: ADD 00001050: DUP3 00001051: SWAP1 00001052: SSTORE 00001053: PUSH1 0x03 00001055: ADD 00001056: SSTORE 00001057: JUMPDEST 00001058: PUSH1 0x40 0000105a: MLOAD 0000105b: PUSH1 0x01 0000105d: PUSH1 0xa0 0000105f: PUSH1 0x02 00001061: EXP 00001062: SUB 00001063: DUP3 00001064: AND 00001065: SWAP1 00001066: DUP4 00001067: ISZERO 00001068: PUSH2 0x08fc 0000106b: MUL 0000106c: SWAP1 0000106d: DUP5 0000106e: SWAP1 0000106f: PUSH1 0x00 00001071: DUP2 00001072: DUP2 00001073: DUP2 00001074: DUP6 00001075: DUP9 00001076: DUP9 00001077: CALL 00001078: SWAP4 00001079: POP 0000107a: POP 0000107b: POP 0000107c: POP 0000107d: ISZERO 0000107e: DUP1 0000107f: ISZERO 00001080: PUSH2 0x0a23 00001083: JUMPI 00001084: RETURNDATASIZE 00001085: PUSH1 0x00 00001087: DUP1 00001088: RETURNDATACOPY 00001089: RETURNDATASIZE 0000108a: PUSH1 0x00 0000108c: REVERT 0000108d: STOP 0000108e: LOG1 0000108f: PUSH6 0x627a7a723058 00001096: KECCAK256 00001097: UNKNOWN(0x2C) 00001098: CALLDATALOAD 00001099: AND 0000109a: STOP 0000109b: DUP7 0000109c: PUSH3 0x23ea46 000010a0: UNKNOWN(0x28) 000010a1: MUL 000010a2: UNKNOWN(0x0C) 000010a3: MULMOD 000010a4: UNKNOWN(0x4E) 000010a5: PUSH17 0xa60906db9a5bbbd1419710e1ac049cd452 000010b7: STOP 000010b8: UNKNOWN(0x29)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5
call_targets:
0x0000000000000000000000000000000000000002, 0xe92fa4e3447a58753154364b329d2361b3b4cae4
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000002",
"0xe92fa4e3447a58753154364b329d2361b3b4cae4"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x0c4f8f6f",
"selector": "0x0c4f8f6f",
"calldata_variants": [
"0x0c4f8f6f",
"0x0c4f8f6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x48e7a100",
"selector": "0x48e7a100",
"calldata_variants": [
"0x48e7a100",
"0x48e7a1000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4f55f292",
"selector": "0x4f55f292",
"calldata_variants": [
"0x4f55f292",
"0x4f55f2920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x59391a67",
"selector": "0x59391a67",
"calldata_variants": [
"0x59391a67",
"0x59391a670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x77699a06",
"selector": "0x77699a06",
"calldata_variants": [
"0x77699a06",
"0x77699a060000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x89b898b8",
"selector": "0x89b898b8",
"calldata_variants": [
"0x89b898b8",
"0x89b898b80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8b555789",
"selector": "0x8b555789",
"calldata_variants": [
"0x8b555789",
"0x8b5557890000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb6f9fda5",
"selector": "0xb6f9fda5",
"calldata_variants": [
"0xb6f9fda5",
"0xb6f9fda50000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1426,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1608,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2314,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 5,
"guards_detected": [],
"untrusted_call_count": 5
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5
call_targets:
0x0000000000000000000000000000000000000002, 0xe92fa4e3447a58753154364b329d2361b3b4cae4
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0xfb8d3c2b9982d113960525ee1ab539c55eb10f61e808843879a3f01182ff11c5",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000002",
"0xe92fa4e3447a58753154364b329d2361b3b4cae4"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x0c4f8f6f",
"selector": "0x0c4f8f6f",
"calldata_variants": [
"0x0c4f8f6f",
"0x0c4f8f6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x48e7a100",
"selector": "0x48e7a100",
"calldata_variants": [
"0x48e7a100",
"0x48e7a1000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4f55f292",
"selector": "0x4f55f292",
"calldata_variants": [
"0x4f55f292",
"0x4f55f2920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x59391a67",
"selector": "0x59391a67",
"calldata_variants": [
"0x59391a67",
"0x59391a670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x77699a06",
"selector": "0x77699a06",
"calldata_variants": [
"0x77699a06",
"0x77699a060000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x89b898b8",
"selector": "0x89b898b8",
"calldata_variants": [
"0x89b898b8",
"0x89b898b80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8b555789",
"selector": "0x8b555789",
"calldata_variants": [
"0x8b555789",
"0x8b5557890000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb6f9fda5",
"selector": "0xb6f9fda5",
"calldata_variants": [
"0xb6f9fda5",
"0xb6f9fda50000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1426,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1608,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2314,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 5,
"guards_detected": []
}
|
| medium | auth | codex | earlyResolve signatures are reusable and not bound to withdrawal amount or updated deposit | 75 | no | — |
viewevidence_json{
"evidence": "msigId is computed once from initial parameters and never updated when deposits increase, while earlyResolve only verifies a signature over msigId and allows a free `amount` parameter.",
"locations": [
"contracts/Contract.sol:208",
"contracts/Contract.sol:232",
"contracts/Contract.sol:251",
"contracts/Contract.sol:263"
],
"recommendation": "Include `amount`, a monotonic nonce, and `address(this)` in the signed payload. Store and consume the nonce to prevent replay. If partial withdrawals are intended, require a fresh signature per withdrawal amount.",
"exploit_scenario": "An authority signs the msigId once to approve a small early withdrawal. The owner can then call earlyResolve repeatedly with any amount (including newly added deposits) because the signature only covers msigId and never includes the amount or a nonce."
}
|
| low | auth | codex | Signatures are not domain separated (contract/chain replay possible) | 65 | no | — |
viewevidence_json{
"evidence": "toEthSignedMessageHash hashes only the provided hash, and earlyResolve recovers the signer from msigId alone without including contract or chain context.",
"locations": [
"contracts/Contract.sol:53",
"contracts/Contract.sol:60",
"contracts/Contract.sol:263"
],
"recommendation": "Add `address(this)` and chain ID to the signed data (e.g., EIP-712 domain separator) so signatures are only valid for a specific contract and chain.",
"exploit_scenario": "A signature over msigId is valid on any contract or chain where the same msigId exists. An attacker can reuse a signature collected for one deployment on another deployment or chain fork to trigger earlyResolve without new consent."
}
|
| low | other | codex | regularTransfer does not enforce expirationTime | 65 | no | — |
viewevidence_json{
"evidence": "regularTransfer only checks the secret and does not verify the current time against expirationTime.",
"locations": [
"contracts/Contract.sol:364",
"contracts/Contract.sol:368"
],
"recommendation": "Add `require(now <= atomicswaps[swapId].expirationTime);` in regularTransfer (or clearly document the intended race semantics).",
"exploit_scenario": "Even after the swap has expired, the beneficiary can still call regularTransfer and claim funds as long as the owner/authority has not yet reclaimed the swap. This weakens the expected time-lock guarantees of the HTLC."
}
|