4ea3389e-4ea3-4963-b780-690e0ce1b56a
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 |
|---|---|---|---|---|
| 30386 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74500 | artifact.fetch | failed | 1 / 3 | 1 week ago |
| 74501 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74502 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74503 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74504 | detector.run | complete | 1 / 3 | 1 week ago |
| 74505 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:804845] OpenAI Codex v0.77.0 (research preview)
[codex:804845] --------
[codex:804845] workdir: /tmp/codex-multi-02qgutoy
[codex:804845] model: gpt-5.2-codex
[codex:804845] provider: openai
[codex:804845] approval: never
[codex:804845] sandbox: read-only
[codex:804845] reasoning effort: xhigh
[codex:804845] reasoning summaries: auto
[codex:804845] session id: 019b680a-22f0-7fd2-a548-fcbbc02f0160
[codex:804845] --------
[codex:804845] user
[codex:804845] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:804845] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:804845] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:804845]
[codex:804845] Scope rules:
[codex:804845] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:804845] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:804845]
[codex:804845] Output MUST be valid JSON matching the provided schema.
[codex:804845] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:804845] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:804845]
[codex:804845] Output constraints (IMPORTANT):
[codex:804845] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:804845] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:804845] mcp startup: no servers
[codex:804845]
[codex:804845] thinking
[codex:804845] **Preparing to read audit file**
[codex:804845] exec
[codex:804845] /bin/bash -lc ls in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] AUDIT_BUNDLE.txt
[codex:804845] codex-output-schema.json
[codex:804845] contracts
[codex:804845]
[codex:804845] thinking
[codex:804845] **Reading AUDIT_BUNDLE.txt**
[codex:804845] exec
[codex:804845] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:804845]
[codex:804845] ================================================================================
[codex:804845] FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:804845] ================================================================================
[codex:804845] // SPDX-License-Identifier: MIT
[codex:804845] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
[codex:804845]
[codex:804845] pragma solidity ^0.8.0;
[codex:804845]
[codex:804845] /**
[codex:804845] * @dev Interface of the ERC20 standard as defined in the EIP.
[codex:804845] */
[codex:804845] interface IERC20 {
[codex:804845] /**
[codex:804845] * @dev Emitted when `value` tokens are moved from one account (`from`) to
[codex:804845] * another (`to`).
[codex:804845] *
[codex:804845] * Note that `value` may be zero.
[codex:804845] */
[codex:804845]
[codex:804845] thinking
[codex:804845] **Planning full audit bundle reading**
[codex:804845]
[codex:804845] I need to read the entire AUDIT_BUNDLE.txt since initial cat output is truncated by tool limits. To ensure complete coverage, I'll split the file into manageable segments and parse each part sequentially, focusing first on first-party contracts under contracts/contracts and governance like Staking. I'll use line counts and file boundary markers to guide this process carefully.
[codex:804845] exec
[codex:804845] /bin/bash -lc 'rg -n "''^FILE:" -n AUDIT_BUNDLE.txt' in /tmp/codex-multi-02qgutoy succeeded in 8ms:
[codex:804845] 4:FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:804845] 90:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
[codex:804845] 154:FILE: contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
[codex:804845] 274:FILE: contracts/@openzeppelin/contracts/utils/Address.sol
[codex:804845] 522:FILE: contracts/@openzeppelin/contracts/utils/StorageSlot.sol
[codex:804845] 614:FILE: contracts/@openzeppelin/contracts/utils/math/Math.sol
[codex:804845] 963:FILE: contracts/@openzeppelin/contracts/utils/structs/BitMaps.sol
[codex:804845] 1022:FILE: contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol
[codex:804845] 1286:FILE: contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol
[codex:804845] 1378:FILE: contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol
[codex:804845] 1477:FILE: contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol
[codex:804845] 1646:FILE: contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol
[codex:804845] 1869:FILE: contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol
[codex:804845] 1910:FILE: contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol
[codex:804845] 1984:FILE: contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol
[codex:804845] 2030:FILE: contracts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol
[codex:804845] 2059:FILE: contracts/@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol
[codex:804845] 2408:FILE: contracts/contracts/governance/Staking.sol
[codex:804845] 2924:FILE: contracts/contracts/treasury/GovernorRewards.sol
[codex:804845] 3421:FILE: contracts/contracts/treasury/Treasury.sol
[codex:804845]
[codex:804845] thinking
[codex:804845] **Planning full file reading strategy**
[codex:804845] exec
[codex:804845] /bin/bash -lc 'wc -l AUDIT_BUNDLE.txt' in /tmp/codex-multi-02qgutoy succeeded in 5ms:
[codex:804845] 3491 AUDIT_BUNDLE.txt
[codex:804845]
[codex:804845] thinking
[codex:804845] **Reading file in segments**
[codex:804845] exec
[codex:804845] /bin/bash -lc "sed -n '1,800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:804845]
[codex:804845] ================================================================================
[codex:804845] FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:804845] ================================================================================
[codex:804845] // SPDX-License-Identifier: MIT
[codex:804845] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
[codex:804845]
[codex:804845] pragma solidity ^0.8.0;
[codex:804845]
[codex:804845] /**
[codex:804845] * @dev Interface of the ERC20 standard as defined in the EIP.
[codex:804845] */
[codex:804845] interface IERC20 {
[codex:804845] /**
[codex:804845] * @dev Emitted when `value` tokens are moved from one account (`from`) to
[codex:804845] * another (`to`).
[codex:804845] *
[codex:804845] * Note that `value` may be zero.
[codex:804845] */
[codex:804845]
[codex:804845] thinking
[codex:804845] **Continuing file review**
[codex:804845] exec
[codex:804845] /bin/bash -lc "sed -n '801,1600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-02qgutoy succeeded in 5ms:
[codex:804845] result = (result + a / result) >> 1;
[codex:804845] return min(result, a / result);
[codex:804845] }
[codex:804845] }
[codex:804845]
[codex:804845] /**
[codex:804845] * @notice Calculates sqrt(a), following the selected rounding direction.
[codex:804845] */
[codex:804845] function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
[codex:804845] unchecked {
[codex:804845] uint256 result = sqrt(a);
[codex:804845] return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
[codex:804845] }
[codex:804845] }
[codex:804845]
[codex:804845] /**
[codex:804845] * @dev Return the log in base 2, rounded down, of a positive value.
[codex:804845] * Returns 0 if given 0.
[codex:804845] */
[codex:804845] function log2(uint256 value) internal pure returns (uint256) {
[codex:804845]
[codex:804845] thinking
[codex:804845] **Continuing to review lines 1601-2407**
[codex:804845] exec
[codex:804845] /bin/bash -lc "sed -n '1601,2407p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-02qgutoy succeeded in 5ms:
[codex:804845] _initializing = false;
[codex:804845] emit Initialized(version);
[codex:804845] }
[codex:804845]
[codex:804845] /**
[codex:804845] * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
[codex:804845] * {initializer} and {reinitializer} modifiers, directly or indirectly.
[codex:804845] */
[codex:804845] modifier onlyInitializing() {
[codex:804845] require(_initializing, "Initializable: contract is not initializing");
[codex:804845] _;
[codex:804845] }
[codex:804845]
[codex:804845] /**
[codex:804845] * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
[codex:804845] * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
[codex:804845] * to any version. It is recommended to use this to lock implementation contracts that are designed to be called
[codex:804845] * through proxies.
[codex:804845] *
[codex:804845] * Emits an {Initialized} event the first time it is successfully executed.
[codex:804845]
[codex:804845] thinking
[codex:804845] **Requesting additional content segments**
[codex:804845] exec
[codex:804845] /bin/bash -lc "sed -n '2408,2923p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-02qgutoy succeeded in 7ms:
[codex:804845] FILE: contracts/contracts/governance/Staking.sol
[codex:804845] ================================================================================
[codex:804845] // SPDX-License-Identifier: UNLICENSED
[codex:804845] pragma solidity ^0.8.7;
[codex:804845] pragma abicoder v2;
[codex:804845]
[codex:804845] // OpenZeppelin v4
[codex:804845] import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
[codex:804845] import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:804845] import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:804845]
[codex:804845] /**
[codex:804845] * @title Snapshot
[codex:804845] * @author Railgun Contributors
[codex:804845] * @notice Governance contract for railgun, handles staking, voting power, and snapshotting
[codex:804845] * @dev Snapshots cannot be taken during interval 0
[codex:804845] * wait till interval 1 before utilizing snapshots
[codex:804845] */
[codex:804845] contract Staking {
[codex:804845] using SafeERC20 for IERC20;
[codex:804845]
[codex:804845] thinking
[codex:804845] **Continuing to review GovernorRewards and Treasury sections**
[codex:804845] exec
[codex:804845] /bin/bash -lc "sed -n '2924,3420p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-02qgutoy succeeded in 5ms:
[codex:804845] FILE: contracts/contracts/treasury/GovernorRewards.sol
[codex:804845] ================================================================================
[codex:804845] // SPDX-License-Identifier: UNLICENSED
[codex:804845] pragma solidity ^0.8.7;
[codex:804845] pragma abicoder v2;
[codex:804845]
[codex:804845] // OpenZeppelin v4
[codex:804845] import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
[codex:804845] import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
[codex:804845] import { Treasury } from "../treasury/Treasury.sol";
[codex:804845] import { Staking } from "../governance/Staking.sol";
[codex:804845] import { StorageSlot } from "@openzeppelin/contracts/utils/StorageSlot.sol";
[codex:804845] import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:804845] import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:804845] import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
[codex:804845] import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol";
[codex:804845]
[codex:804845] /**
[codex:804845] * @title GovernorRewards
[codex:804845] * @author Railgun Contributors
[codex:804845]
[codex:804845] thinking
[codex:804845] **Switching focus to Treasury**
[codex:804845] exec
[codex:804845] /bin/bash -lc "sed -n '3421,3491p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] FILE: contracts/contracts/treasury/Treasury.sol
[codex:804845] ================================================================================
[codex:804845] // SPDX-License-Identifier: UNLICENSED
[codex:804845] pragma solidity ^0.8.7;
[codex:804845] pragma abicoder v2;
[codex:804845]
[codex:804845] // OpenZeppelin v4
[codex:804845] import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:804845] import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:804845] import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
[codex:804845] import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
[codex:804845]
[codex:804845] /**
[codex:804845] * @title Treasury
[codex:804845] * @author Railgun Contributors
[codex:804845] * @notice Stores treasury funds for Railgun
[codex:804845] */
[codex:804845] contract Treasury is Initializable, AccessControlUpgradeable {
[codex:804845] using SafeERC20 for IERC20;
[codex:804845]
[codex:804845]
[codex:804845]
[codex:804845]
[codex:804845]
[codex:804845]
[codex:804845]
[codex:804845] thinking
[codex:804845] **Analyzing potential contract vulnerabilities**
[codex:804845]
[codex:804845] I’m carefully auditing staking, GovernorRewards, and treasury contracts for reentrancy, access control, upgrade risks, and accounting issues. I’m tracing token callbacks, initializer risks, and interval recalculations that might allow double token transfers or reward inflation. There’s a lot to unpack here about state updates before external calls, unchecked interval adjustments, and how public functions can be exploited. Let’s explore these nuanced patterns to understand any subtle attack vectors.
[codex:804845] thinking
[codex:804845] **Examining implications of public interval manipulation**
[codex:804845]
[codex:804845] I’m digging into how anyone can call prefetchGlobalSnapshots and earmark to roll back and advance intervals, causing repeated token transfers from treasury to GovernorRewards without owner control. This could accelerate distributions or enable claim front-running by third parties, though direct theft seems unlikely. The interplay of interval reset, claimed bitmaps, and public access is definitely worth unpacking for potential system impacts.
[codex:804845] thinking
[codex:804845] **Analyzing snapshot timing and voting power consistency**
[codex:804845]
[codex:804845] I'm parsing how snapshots capture voting power for delegates, especially around stake unlocking where delegate snapshots might not update immediately. This can cause historical snapshots to reflect slightly stale or current voting power, which affects reward calculations. The snapshot search logic returns the first snapshot at or after the queried interval, indicating snapshots represent voting power at interval starts, taken before any interval actions. This might be intentional but raises questions about precise reward accounting for evolving voting power within intervals.
[codex:804845] thinking
[codex:804845] **Examining reward distribution edge cases and potential griefing**
[codex:804845]
[codex:804845] I'm reflecting on how re-earmarking enabled by rewinding snapshot intervals can cause tokens to move repeatedly from treasury to GovernorRewards for intervals already claimed, locking funds and potentially causing unfair reward accounting. The lack of delegate snapshot on unlock leads to undercounted delegates’ rewards for intervals with mid-interval power changes, a correctness issue but not directly exploitable. The permissionless functions combined with interval rollback enable scenarios where attackers can disrupt expected reward flows, creating denial-of-service by locking tokens in GovernorRewards that can’t be claimed.
[codex:804845] thinking
[codex:804845] **Identifying upgradeability and token accounting concerns**
[codex:804845]
[codex:804845] I’m analyzing upgradeable contracts lacking initializer locks, which could let someone initialize implementations directly and gain roles there, a known but important issue. Also, token staking may misaccount when fee-on-transfer tokens are used, risking insolvency if fewer tokens arrive than credited. Beyond that, repeated earmark calls combined with interval rewinding can cause treasury tokens to be moved into GovernorRewards in unexpected ways, risking stuck funds though not directly exploitable for theft. Overall, these findings highlight important upgrade and token flow considerations in the system.
[codex:804845] thinking
[codex:804845] **Analyzing snapshot logic and upgradeability risks**
[codex:804845]
[codex:804845] I’m confirming that snapshot handling generally assumes state changes happen only at snapshot points, which holds except for delegate voting power updates on unlock where snapshots are missed, causing undercounted rewards and a griefing possibility. Also, upgradeability risks persist due to missing initializer locks on implementation contracts, and repeated snapshot rewinding can disrupt treasury-to-rewards flow. I’m preparing to locate relevant code lines for a clear report.
[codex:804845] exec
[codex:804845] /bin/bash -lc 'ls contracts/contracts' in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] governance
[codex:804845] treasury
[codex:804845]
[codex:804845] thinking
[codex:804845] **Inspecting staking contract lines**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/governance/Staking.sol | sed -n '140,260p'" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] 140 if (globalsSnapshots.length > 0) {
[codex:804845] 141 // If a snapshot exists return the interval it was taken
[codex:804845] 142 return globalsSnapshots[globalsSnapshots.length - 1].interval;
[codex:804845] 143 } else {
[codex:804845] 144 // Else default to 0
[codex:804845] 145 return 0;
[codex:804845] 146 }
[codex:804845] 147 }
[codex:804845] 148
[codex:804845] 149 /**
[codex:804845] 150 * @notice Returns interval of latest account snapshot
[codex:804845] 151 * @param _account - account to get latest snapshot of
[codex:804845] 152 * @return Latest account snapshot interval
[codex:804845] 153 */
[codex:804845] 154
[codex:804845] 155 function latestAccountSnapshotInterval(address _account) public view returns (uint256) {
[codex:804845] 156 if (accountSnapshots[_account].length > 0) {
[codex:804845] 157 // If a snapshot exists return the interval it was taken
[codex:804845] 158 return accountSnapshots[_account][accountSnapshots[_account].length - 1].interval;
[codex:804845] 159 } else {
[codex:804845]
[codex:804845] thinking
[codex:804845] **Examining code around lines 310-380**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/governance/Staking.sol | sed -n '300,420p'" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] 300 low = mid + 1;
[codex:804845] 301 }
[codex:804845] 302 }
[codex:804845] 303
[codex:804845] 304 // At this point `low` is the exclusive upper bound. Find the inclusive upper bounds and set to index
[codex:804845] 305 if (low > 0 && globalsSnapshots[low - 1].interval == _interval) {
[codex:804845] 306 return globalsSnapshots[low - 1];
[codex:804845] 307 } else {
[codex:804845] 308 index = low;
[codex:804845] 309 }
[codex:804845] 310
[codex:804845] 311 // If index is equal to snapshot array length, then no update was made after the requested
[codex:804845] 312 // snapshot interval. This means the latest value is the right one.
[codex:804845] 313 if (index == globalsSnapshots.length) {
[codex:804845] 314 return GlobalsSnapshot(_interval, totalVotingPower(), totalStaked);
[codex:804845] 315 } else {
[codex:804845] 316 return globalsSnapshots[index];
[codex:804845] 317 }
[codex:804845] 318 }
[codex:804845] 319
[codex:804845]
[codex:804845] thinking
[codex:804845] **Gathering lines for unlock and claim**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/governance/Staking.sol | sed -n '420,520p'" in /tmp/codex-multi-02qgutoy succeeded in 5ms:
[codex:804845] 420 } else return accountSnapshotAtSearch(_account, _interval);
[codex:804845] 421 }
[codex:804845] 422
[codex:804845] 423 /**
[codex:804845] 424 * @notice Stake tokens
[codex:804845] 425 * @dev This contract should be approve()'d for _amount
[codex:804845] 426 * @param _amount - Amount to stake
[codex:804845] 427 * @return stake ID
[codex:804845] 428 */
[codex:804845] 429
[codex:804845] 430 function stake(uint256 _amount) public returns (uint256) {
[codex:804845] 431 // Check if amount is not 0
[codex:804845] 432 require(_amount > 0, "Staking: Amount not set");
[codex:804845] 433
[codex:804845] 434 // Check if snapshot needs to be taken
[codex:804845] 435 snapshot(msg.sender);
[codex:804845] 436
[codex:804845] 437 // Get stakeID
[codex:804845] 438 uint256 stakeID = stakes[msg.sender].length;
[codex:804845] 439
[codex:804845]
[codex:804845] thinking
[codex:804845] **Unlocking code section for GovernorRewards prefetch**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/treasury/GovernorRewards.sol | sed -n '140,280p'" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] 140 }
[codex:804845] 141
[codex:804845] 142 /**
[codex:804845] 143 * @notice Gets interval at time
[codex:804845] 144 * @param _time - time to get interval of
[codex:804845] 145 * @return interval
[codex:804845] 146 */
[codex:804845] 147 function intervalAtTime(uint256 _time) public view returns (uint256) {
[codex:804845] 148 require(
[codex:804845] 149 _time >= STAKING_DEPLOY_TIME,
[codex:804845] 150 "GovernorRewards: Requested time is before contract was deployed"
[codex:804845] 151 );
[codex:804845] 152 return (_time - STAKING_DEPLOY_TIME) / DISTRIBUTION_INTERVAL;
[codex:804845] 153 }
[codex:804845] 154
[codex:804845] 155 /**
[codex:804845] 156 * @notice Converts distribution interval to staking interval
[codex:804845] 157 * @param _distributionInterval - distribution interval to get staking interval of
[codex:804845] 158 * @return staking interval
[codex:804845] 159 */
[codex:804845]
[codex:804845] thinking
[codex:804845] **Preparing to add lines around earmark and prefetch**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/treasury/GovernorRewards.sol | sed -n '280,440p'" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] 280
[codex:804845] 281 require(_hints.length == length, "GovernorRewards: Incorrect number of hints given");
[codex:804845] 282
[codex:804845] 283 // Create snapshots array
[codex:804845] 284 uint256[] memory snapshots = new uint256[](length);
[codex:804845] 285
[codex:804845] 286 // Loop through each requested snapshot and retrieve voting power
[codex:804845] 287 for (uint256 i = 0; i < length; i += 1) {
[codex:804845] 288 snapshots[i] = staking
[codex:804845] 289 .accountSnapshotAt(
[codex:804845] 290 _account,
[codex:804845] 291 distributionIntervalToStakingInterval(_startingInterval + i),
[codex:804845] 292 _hints[i]
[codex:804845] 293 )
[codex:804845] 294 .votingPower;
[codex:804845] 295 }
[codex:804845] 296
[codex:804845] 297 // Return voting power
[codex:804845] 298 return snapshots;
[codex:804845] 299 }
[codex:804845]
[codex:804845] thinking
[codex:804845] **Searching initialization lines in key modules**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/treasury/GovernorRewards.sol | sed -n '40,120p'" in /tmp/codex-multi-02qgutoy succeeded in 5ms:
[codex:804845] 40 uint256 public STAKING_DEPLOY_TIME;
[codex:804845] 41
[codex:804845] 42 // Distribution interval, calculated at initialization time
[codex:804845] 43 // solhint-disable-next-line var-name-mixedcase
[codex:804845] 44 uint256 public DISTRIBUTION_INTERVAL;
[codex:804845] 45
[codex:804845] 46 // Number of basis points that equal 100%
[codex:804845] 47 uint256 public constant BASIS_POINTS = 10000;
[codex:804845] 48
[codex:804845] 49 // Basis points to distribute each interval
[codex:804845] 50 uint256 public intervalBP;
[codex:804845] 51
[codex:804845] 52 // Fee distribution claimed
[codex:804845] 53 event Claim(
[codex:804845] 54 IERC20 token,
[codex:804845] 55 address account,
[codex:804845] 56 uint256 amount,
[codex:804845] 57 uint256 startInterval,
[codex:804845] 58 uint256 endInterval
[codex:804845] 59 );
[codex:804845]
[codex:804845] thinking
[codex:804845] **Checking constructor and initializers**
[codex:804845] exec
[codex:804845] /bin/bash -lc "nl -ba contracts/contracts/treasury/Treasury.sol | sed -n '1,140p'" in /tmp/codex-multi-02qgutoy succeeded in 6ms:
[codex:804845] 1 // SPDX-License-Identifier: UNLICENSED
[codex:804845] 2 pragma solidity ^0.8.7;
[codex:804845] 3 pragma abicoder v2;
[codex:804845] 4
[codex:804845] 5 // OpenZeppelin v4
[codex:804845] 6 import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:804845] 7 import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:804845] 8 import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
[codex:804845] 9 import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
[codex:804845] 10
[codex:804845] 11 /**
[codex:804845] 12 * @title Treasury
[codex:804845] 13 * @author Railgun Contributors
[codex:804845] 14 * @notice Stores treasury funds for Railgun
[codex:804845] 15 */
[codex:804845] 16 contract Treasury is Initializable, AccessControlUpgradeable {
[codex:804845] 17 using SafeERC20 for IERC20;
[codex:804845] 18
[codex:804845] 19 bytes32 public constant TRANSFER_ROLE = keccak256("TRANSFER_ROLE");
[codex:804845] 20
[codex:804845]
[codex:804845] thinking
[codex:804845] **Summarizing vulnerability analysis and report drafting**
[codex:804845]
[codex:804845] I’m compiling and clarifying several potential issues: a medium-severity state regression that enables repeated earmarking exploiting permissionless functions, a low-severity delegate snapshot omission causing stale voting power snapshots, and a low-severity upgradeability risk from uninitialized implementation contracts. I’m organizing detailed exploit scenarios, recommended mitigations, evidence locations, and categories to produce a precise JSON vulnerability report matching the required schema.
[codex:804845] codex
[codex:804845] {"no_findings":false,"summary":"Found 3 issues: a state-regression path in rewards prefetch/earmark that can trigger repeated treasury transfers, a staking snapshot inconsistency that undercounts delegate rewards, and missing initializer locks on upgradeable implementations.","findings":[{"severity":"medium","category":"access_control","title":"Prefetch can rewind interval pointers, enabling repeated earmarks and extra treasury transfers","exploit_scenario":"Any caller can call `prefetchGlobalSnapshots` with a small `_endingInterval` to set `nextSnapshotPreCalcInterval` backwards, then call `earmark` to rewind `nextEarmarkInterval`, and finally prefetch forward and earmark again. This re-earmarks previously processed intervals and transfers additional tokens from the Treasury into GovernorRewards, potentially locking funds for already-claimed intervals or forcing premature redistribution.","recommendation":"Enforce monotonic progression for `nextSnapshotPreCalcInterval` and `nextEarmarkInterval` (e.g., require `_startingInterval == nextSnapshotPreCalcInterval` and `_endingInterval >= nextSnapshotPreCalcInterval`, and revert if `_calcFromInterval > _calcToInterval`). Consider restricting prefetch/earmark to an authorized keeper or owner if public access is not intended, and avoid overwriting earmarks for already-processed intervals.","evidence":"`prefetchGlobalSnapshots` allows `_startingInterval <= nextSnapshotPreCalcInterval` and unconditionally sets `nextSnapshotPreCalcInterval = _endingInterval + 1`; `earmark` then uses these pointers and always updates `nextEarmarkInterval` even when the range is inverted.","locations":["contracts/contracts/treasury/GovernorRewards.sol:305","contracts/contracts/treasury/GovernorRewards.sol:339","contracts/contracts/treasury/GovernorRewards.sol:351","contracts/contracts/treasury/GovernorRewards.sol:377"]},{"severity":"low","category":"other","title":"Unlocking a delegated stake does not snapshot the delegate, skewing reward snapshots","exploit_scenario":"If a user unlocks a stake delegated to another address, the delegate’s voting power is reduced without taking a snapshot for the delegate. For the interval where the unlock happens, `accountSnapshotAt` can return the reduced voting power for the entire interval, underpaying the delegate’s rewards. A delegator can time unlocks late in an interval to grief a delegate’s rewards for that interval.","recommendation":"Snapshot the delegate before reducing voting power in `unlock` (similar to `delegate`), or otherwise ensure any voting power change records a snapshot for both source and destination accounts.","evidence":"`unlock` calls `snapshot(msg.sender)` only, then calls `moveVotingPower(stakes[msg.sender][_stakeID].delegate, address(0), ...)` without snapshotting the delegate.","locations":["contracts/contracts/governance/Staking.sol:463","contracts/contracts/governance/Staking.sol:467","contracts/contracts/governance/Staking.sol:472"]},{"severity":"low","category":"upgradeability","title":"Upgradeable implementations lack initializer lock","exploit_scenario":"Because the upgradeable contracts do not disable initializers in a constructor, anyone can call the initializer on the implementation contract and gain ownership/roles there. If assets are mistakenly sent to the implementation (or a proxy is left uninitialized), those privileges can be abused to move funds or reconfigure the implementation instance.","recommendation":"Add a constructor that calls `_disableInitializers()` to each upgradeable implementation, and ensure proxies are initialized immediately on deployment.","evidence":"Upgradeable contracts expose external `initializer` functions but do not lock initializers in a constructor.","locations":["contracts/contracts/treasury/GovernorRewards.sol:92","contracts/contracts/treasury/Treasury.sol:25"]}]}
[codex:804845] tokens used
[codex:804845] 84,484
[codex:804845] {"no_findings":false,"summary":"Found 3 issues: a state-regression path in rewards prefetch/earmark that can trigger repeated treasury transfers, a staking snapshot inconsistency that undercounts delegate rewards, and missing initializer locks on upgradeable implementations.","findings":[{"severity":"medium","category":"access_control","title":"Prefetch can rewind interval pointers, enabling repeated earmarks and extra treasury transfers","exploit_scenario":"Any caller can call `prefetchGlobalSnapshots` with a small `_endingInterval` to set `nextSnapshotPreCalcInterval` backwards, then call `earmark` to rewind `nextEarmarkInterval`, and finally prefetch forward and earmark again. This re-earmarks previously processed intervals and transfers additional tokens from the Treasury into GovernorRewards, potentially locking funds for already-claimed intervals or forcing premature redistribution.","recommendation":"Enforce monotonic progression for `nextSnapshotPreCalcInterval` and `nextEarmarkInterval` (e.g., require `_startingInterval == nextSnapshotPreCalcInterval` and `_endingInterval >= nextSnapshotPreCalcInterval`, and revert if `_calcFromInterval > _calcToInterval`). Consider restricting prefetch/earmark to an authorized keeper or owner if public access is not intended, and avoid overwriting earmarks for already-processed intervals.","evidence":"`prefetchGlobalSnapshots` allows `_startingInterval <= nextSnapshotPreCalcInterval` and unconditionally sets `nextSnapshotPreCalcInterval = _endingInterval + 1`; `earmark` then uses these pointers and always updates `nextEarmarkInterval` even when the range is inverted.","locations":["contracts/contracts/treasury/GovernorRewards.sol:305","contracts/contracts/treasury/GovernorRewards.sol:339","contracts/contracts/treasury/GovernorRewards.sol:351","contracts/contracts/treasury/GovernorRewards.sol:377"]},{"severity":"low","category":"other","title":"Unlocking a delegated stake does not snapshot the delegate, skewing reward snapshots","exploit_scenario":"If a user unlocks a stake delegated to another address, the delegate’s voting power is reduced without taking a snapshot for the delegate. For the interval where the unlock happens, `accountSnapshotAt` can return the reduced voting power for the entire interval, underpaying the delegate’s rewards. A delegator can time unlocks late in an interval to grief a delegate’s rewards for that interval.","recommendation":"Snapshot the delegate before reducing voting power in `unlock` (similar to `delegate`), or otherwise ensure any voting power change records a snapshot for both source and destination accounts.","evidence":"`unlock` calls `snapshot(msg.sender)` only, then calls `moveVotingPower(stakes[msg.sender][_stakeID].delegate, address(0), ...)` without snapshotting the delegate.","locations":["contracts/contracts/governance/Staking.sol:463","contracts/contracts/governance/Staking.sol:467","contracts/contracts/governance/Staking.sol:472"]},{"severity":"low","category":"upgradeability","title":"Upgradeable implementations lack initializer lock","exploit_scenario":"Because the upgradeable contracts do not disable initializers in a constructor, anyone can call the initializer on the implementation contract and gain ownership/roles there. If assets are mistakenly sent to the implementation (or a proxy is left uninitialized), those privileges can be abused to move funds or reconfigure the implementation instance.","recommendation":"Add a constructor that calls `_disableInitializers()` to each upgradeable implementation, and ensure proxies are initialized immediately on deployment.","evidence":"Upgradeable contracts expose external `initializer` functions but do not lock initializers in a constructor.","locations":["contracts/contracts/treasury/GovernorRewards.sol:92","contracts/contracts/treasury/Treasury.sol:25"]}]}
{
"codex": {
"ran_at": "2025-12-29T03:06:22.007871+00:00",
"returncode": 0
},
"summary": "Found 3 issues: a state-regression path in rewards prefetch/earmark that can trigger repeated treasury transfers, a staking snapshot inconsistency that undercounts delegate rewards, and missing initializer locks on upgradeable implementations.",
"raw_final": {
"summary": "Found 3 issues: a state-regression path in rewards prefetch/earmark that can trigger repeated treasury transfers, a staking snapshot inconsistency that undercounts delegate rewards, and missing initializer locks on upgradeable implementations.",
"findings": [
{
"title": "Prefetch can rewind interval pointers, enabling repeated earmarks and extra treasury transfers",
"category": "access_control",
"evidence": "`prefetchGlobalSnapshots` allows `_startingInterval <= nextSnapshotPreCalcInterval` and unconditionally sets `nextSnapshotPreCalcInterval = _endingInterval + 1`; `earmark` then uses these pointers and always updates `nextEarmarkInterval` even when the range is inverted.",
"severity": "medium",
"locations": [
"contracts/contracts/treasury/GovernorRewards.sol:305",
"contracts/contracts/treasury/GovernorRewards.sol:339",
"contracts/contracts/treasury/GovernorRewards.sol:351",
"contracts/contracts/treasury/GovernorRewards.sol:377"
],
"recommendation": "Enforce monotonic progression for `nextSnapshotPreCalcInterval` and `nextEarmarkInterval` (e.g., require `_startingInterval == nextSnapshotPreCalcInterval` and `_endingInterval >= nextSnapshotPreCalcInterval`, and revert if `_calcFromInterval > _calcToInterval`). Consider restricting prefetch/earmark to an authorized keeper or owner if public access is not intended, and avoid overwriting earmarks for already-processed intervals.",
"exploit_scenario": "Any caller can call `prefetchGlobalSnapshots` with a small `_endingInterval` to set `nextSnapshotPreCalcInterval` backwards, then call `earmark` to rewind `nextEarmarkInterval`, and finally prefetch forward and earmark again. This re-earmarks previously processed intervals and transfers additional tokens from the Treasury into GovernorRewards, potentially locking funds for already-claimed intervals or forcing premature redistribution."
},
{
"title": "Unlocking a delegated stake does not snapshot the delegate, skewing reward snapshots",
"category": "other",
"evidence": "`unlock` calls `snapshot(msg.sender)` only, then calls `moveVotingPower(stakes[msg.sender][_stakeID].delegate, address(0), ...)` without snapshotting the delegate.",
"severity": "low",
"locations": [
"contracts/contracts/governance/Staking.sol:463",
"contracts/contracts/governance/Staking.sol:467",
"contracts/contracts/governance/Staking.sol:472"
],
"recommendation": "Snapshot the delegate before reducing voting power in `unlock` (similar to `delegate`), or otherwise ensure any voting power change records a snapshot for both source and destination accounts.",
"exploit_scenario": "If a user unlocks a stake delegated to another address, the delegate\u2019s voting power is reduced without taking a snapshot for the delegate. For the interval where the unlock happens, `accountSnapshotAt` can return the reduced voting power for the entire interval, underpaying the delegate\u2019s rewards. A delegator can time unlocks late in an interval to grief a delegate\u2019s rewards for that interval."
},
{
"title": "Upgradeable implementations lack initializer lock",
"category": "upgradeability",
"evidence": "Upgradeable contracts expose external `initializer` functions but do not lock initializers in a constructor.",
"severity": "low",
"locations": [
"contracts/contracts/treasury/GovernorRewards.sol:92",
"contracts/contracts/treasury/Treasury.sol:25"
],
"recommendation": "Add a constructor that calls `_disableInitializers()` to each upgradeable implementation, and ensure proxies are initialized immediately on deployment.",
"exploit_scenario": "Because the upgradeable contracts do not disable initializers in a constructor, anyone can call the initializer on the implementation contract and gain ownership/roles there. If assets are mistakenly sent to the implementation (or a proxy is left uninitialized), those privileges can be abused to move funds or reconfigure the implementation instance."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x0010 0000000b: JUMPI 0000000c: PUSH1 0x00 0000000e: DUP1 0000000f: REVERT 00000010: JUMPDEST 00000011: POP 00000012: PUSH1 0x04 00000014: CALLDATASIZE 00000015: LT 00000016: PUSH2 0x020b 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH4 0x6cefafaa 00000026: GT 00000027: PUSH2 0x012a 0000002a: JUMPI 0000002b: DUP1 0000002c: PUSH4 0xbc3fea74 00000031: GT 00000032: PUSH2 0x00bd 00000035: JUMPI 00000036: DUP1 00000037: PUSH4 0xe4860339 0000003c: GT 0000003d: PUSH2 0x008c 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0xf2fde38b 00000047: GT 00000048: PUSH2 0x0071 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0xf2fde38b 00000052: EQ 00000053: PUSH2 0x046e 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0xf6cb3cd8 0000005d: EQ 0000005e: PUSH2 0x0481 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0xfc6436f5 00000068: EQ 00000069: PUSH2 0x0494 0000006c: JUMPI 0000006d: PUSH1 0x00 0000006f: DUP1 00000070: REVERT 00000071: JUMPDEST 00000072: DUP1 00000073: PUSH4 0xe4860339 00000078: EQ 00000079: PUSH2 0x0438 0000007c: JUMPI 0000007d: DUP1 0000007e: PUSH4 0xe8d8c9ac 00000083: EQ 00000084: PUSH2 0x045b 00000087: JUMPI 00000088: PUSH1 0x00 0000008a: DUP1 0000008b: REVERT 0000008c: JUMPDEST 0000008d: DUP1 0000008e: PUSH4 0xbc3fea74 00000093: EQ 00000094: PUSH2 0x0400 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xc4271eb6 0000009e: EQ 0000009f: PUSH2 0x0413 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xdc7c9a1f 000000a9: EQ 000000aa: PUSH2 0x041c 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xe1f1c4a7 000000b4: EQ 000000b5: PUSH2 0x042f 000000b8: JUMPI 000000b9: PUSH1 0x00 000000bb: DUP1 000000bc: REVERT 000000bd: JUMPDEST 000000be: DUP1 000000bf: PUSH4 0x95e50e4c 000000c4: GT 000000c5: PUSH2 0x00f9 000000c8: JUMPI 000000c9: DUP1 000000ca: PUSH4 0x95e50e4c 000000cf: EQ 000000d0: PUSH2 0x03b1 000000d3: JUMPI 000000d4: DUP1 000000d5: PUSH4 0x9beb549c 000000da: EQ 000000db: PUSH2 0x03ba 000000de: JUMPI 000000df: DUP1 000000e0: PUSH4 0x9eb0725e 000000e5: EQ 000000e6: PUSH2 0x03da 000000e9: JUMPI 000000ea: DUP1 000000eb: PUSH4 0xa6667ffc 000000f0: EQ 000000f1: PUSH2 0x03ed 000000f4: JUMPI 000000f5: PUSH1 0x00 000000f7: DUP1 000000f8: REVERT 000000f9: JUMPDEST 000000fa: DUP1 000000fb: PUSH4 0x6cefafaa 00000100: EQ 00000101: PUSH2 0x0372 00000104: JUMPI 00000105: DUP1 00000106: PUSH4 0x715018a6 0000010b: EQ 0000010c: PUSH2 0x0385 0000010f: JUMPI 00000110: DUP1 00000111: PUSH4 0x7a7736d3 00000116: EQ 00000117: PUSH2 0x038d 0000011a: JUMPI 0000011b: DUP1 0000011c: PUSH4 0x8da5cb5b 00000121: EQ 00000122: PUSH2 0x03a0 00000125: JUMPI 00000126: PUSH1 0x00 00000128: DUP1 00000129: REVERT 0000012a: JUMPDEST 0000012b: DUP1 0000012c: PUSH4 0x36465e82 00000131: GT 00000132: PUSH2 0x01a2 00000135: JUMPI 00000136: DUP1 00000137: PUSH4 0x61d027b3 0000013c: GT 0000013d: PUSH2 0x0171 00000140: JUMPI 00000141: DUP1 00000142: PUSH4 0x61d027b3 00000147: EQ 00000148: PUSH2 0x0306 0000014b: JUMPI 0000014c: DUP1 0000014d: PUSH4 0x66dd5ce8 00000152: EQ 00000153: PUSH2 0x0319 00000156: JUMPI 00000157: DUP1 00000158: PUSH4 0x6c3824ef 0000015d: EQ 0000015e: PUSH2 0x032c 00000161: JUMPI 00000162: DUP1 00000163: PUSH4 0x6ccee549 00000168: EQ 00000169: PUSH2 0x033f 0000016c: JUMPI 0000016d: PUSH1 0x00 0000016f: DUP1 00000170: REVERT 00000171: JUMPDEST 00000172: DUP1 00000173: PUSH4 0x36465e82 00000178: EQ 00000179: PUSH2 0x02ac 0000017c: JUMPI 0000017d: DUP1 0000017e: PUSH4 0x413c65e5 00000183: EQ 00000184: PUSH2 0x02b5 00000187: JUMPI 00000188: DUP1 00000189: PUSH4 0x4ae05c7d 0000018e: EQ 0000018f: PUSH2 0x02c8 00000192: JUMPI 00000193: DUP1 00000194: PUSH4 0x4cf088d9 00000199: EQ 0000019a: PUSH2 0x02db 0000019d: JUMPI 0000019e: PUSH1 0x00 000001a0: DUP1 000001a1: REVERT 000001a2: JUMPDEST 000001a3: DUP1 000001a4: PUSH4 0x09a4a7d1 000001a9: GT 000001aa: PUSH2 0x01de 000001ad: JUMPI 000001ae: DUP1 000001af: PUSH4 0x09a4a7d1 000001b4: EQ 000001b5: PUSH2 0x0251 000001b8: JUMPI 000001b9: DUP1 000001ba: PUSH4 0x26aad31a 000001bf: EQ 000001c0: PUSH2 0x0271 000001c3: JUMPI 000001c4: DUP1 000001c5: PUSH4 0x286b3f46 000001ca: EQ 000001cb: PUSH2 0x0291 000001ce: JUMPI 000001cf: DUP1 000001d0: PUSH4 0x363487bc 000001d5: EQ 000001d6: PUSH2 0x02a4 000001d9: JUMPI 000001da: PUSH1 0x00 000001dc: DUP1 000001dd: REVERT 000001de: JUMPDEST 000001df: DUP1 000001e0: PUSH4 0x011de7aa 000001e5: EQ 000001e6: PUSH2 0x0210 000001e9: JUMPI 000001ea: DUP1 000001eb: PUSH4 0x0804a4ee 000001f0: EQ 000001f1: PUSH2 0x0236 000001f4: JUMPI 000001f5: DUP1 000001f6: PUSH4 0x087dceb0 000001fb: EQ 000001fc: PUSH2 0x0240 000001ff: JUMPI 00000200: DUP1 00000201: PUSH4 0x08b26b75 00000206: EQ 00000207: PUSH2 0x0248 0000020a: JUMPI 0000020b: JUMPDEST 0000020c: PUSH1 0x00 0000020e: DUP1 0000020f: REVERT 00000210: JUMPDEST 00000211: PUSH2 0x0223 00000214: PUSH2 0x021e 00000217: CALLDATASIZE 00000218: PUSH1 0x04 0000021a: PUSH2 0x1cf8 0000021d: JUMP 0000021e: JUMPDEST 0000021f: PUSH2 0x04bf 00000222: JUMP 00000223: JUMPDEST 00000224: PUSH1 0x40 00000226: MLOAD 00000227: SWAP1 00000228: DUP2 00000229: MSTORE 0000022a: PUSH1 0x20 0000022c: ADD 0000022d: JUMPDEST 0000022e: PUSH1 0x40 00000230: MLOAD 00000231: DUP1 00000232: SWAP2 00000233: SUB 00000234: SWAP1 00000235: RETURN 00000236: JUMPDEST 00000237: PUSH2 0x023e 0000023a: PUSH2 0x055e 0000023d: JUMP 0000023e: JUMPDEST 0000023f: STOP 00000240: JUMPDEST 00000241: PUSH2 0x0223 00000244: PUSH1 0x0e 00000246: DUP2 00000247: JUMP 00000248: JUMPDEST 00000249: PUSH2 0x0223 0000024c: PUSH1 0x68 0000024e: SLOAD 0000024f: DUP2 00000250: JUMP 00000251: JUMPDEST 00000252: PUSH2 0x0223 00000255: PUSH2 0x025f 00000258: CALLDATASIZE 00000259: PUSH1 0x04 0000025b: PUSH2 0x1cf8 0000025e: JUMP 0000025f: JUMPDEST 00000260: PUSH1 0x6f 00000262: PUSH1 0x20 00000264: MSTORE 00000265: PUSH1 0x00 00000267: SWAP1 00000268: DUP2 00000269: MSTORE 0000026a: PUSH1 0x40 0000026c: SWAP1 0000026d: KECCAK256 0000026e: SLOAD 0000026f: DUP2 00000270: JUMP 00000271: JUMPDEST 00000272: PUSH2 0x0284 00000275: PUSH2 0x027f 00000278: CALLDATASIZE 00000279: PUSH1 0x04 0000027b: PUSH2 0x1d80 0000027e: JUMP 0000027f: JUMPDEST 00000280: PUSH2 0x05ea 00000283: JUMP 00000284: JUMPDEST 00000285: PUSH1 0x40 00000287: MLOAD 00000288: PUSH2 0x022d 0000028b: SWAP2 0000028c: SWAP1 0000028d: PUSH2 0x1e2b 00000290: JUMP 00000291: JUMPDEST 00000292: PUSH2 0x0284 00000295: PUSH2 0x029f 00000298: CALLDATASIZE 00000299: PUSH1 0x04 0000029b: PUSH2 0x1e6f 0000029e: JUMP 0000029f: JUMPDEST 000002a0: PUSH2 0x08c1 000002a3: JUMP 000002a4: JUMPDEST 000002a5: PUSH2 0x0223 000002a8: PUSH2 0x0aa7 000002ab: JUMP 000002ac: JUMPDEST 000002ad: PUSH2 0x0223 000002b0: PUSH1 0x6e 000002b2: SLOAD 000002b3: DUP2 000002b4: JUMP 000002b5: JUMPDEST 000002b6: PUSH2 0x0223 000002b9: PUSH2 0x02c3 000002bc: CALLDATASIZE 000002bd: PUSH1 0x04 000002bf: PUSH2 0x1cf8 000002c2: JUMP 000002c3: JUMPDEST 000002c4: PUSH2 0x0ab7 000002c7: JUMP 000002c8: JUMPDEST 000002c9: PUSH2 0x023e 000002cc: PUSH2 0x02d6 000002cf: CALLDATASIZE 000002d0: PUSH1 0x04 000002d2: PUSH2 0x1ed9 000002d5: JUMP 000002d6: JUMPDEST 000002d7: PUSH2 0x0ac4 000002da: JUMP 000002db: JUMPDEST 000002dc: PUSH1 0x65 000002de: SLOAD 000002df: PUSH2 0x02ee 000002e2: SWAP1 000002e3: PUSH1 0x01 000002e5: PUSH1 0x01 000002e7: PUSH1 0xa0 000002e9: SHL 000002ea: SUB 000002eb: AND 000002ec: DUP2 000002ed: JUMP 000002ee: JUMPDEST 000002ef: PUSH1 0x40 000002f1: MLOAD 000002f2: PUSH1 0x01 000002f4: PUSH1 0x01 000002f6: PUSH1 0xa0 000002f8: SHL 000002f9: SUB 000002fa: SWAP1 000002fb: SWAP2 000002fc: AND 000002fd: DUP2 000002fe: MSTORE 000002ff: PUSH1 0x20 00000301: ADD 00000302: PUSH2 0x022d 00000305: JUMP 00000306: JUMPDEST 00000307: PUSH1 0x66 00000309: SLOAD 0000030a: PUSH2 0x02ee 0000030d: SWAP1 0000030e: PUSH1 0x01 00000310: PUSH1 0x01 00000312: PUSH1 0xa0 00000314: SHL 00000315: SUB 00000316: AND 00000317: DUP2 00000318: JUMP 00000319: JUMPDEST 0000031a: PUSH2 0x023e 0000031d: PUSH2 0x0327 00000320: CALLDATASIZE 00000321: PUSH1 0x04 00000323: PUSH2 0x1cf8 00000326: JUMP 00000327: JUMPDEST 00000328: PUSH2 0x0b90 0000032b: JUMP 0000032c: JUMPDEST 0000032d: PUSH2 0x023e 00000330: PUSH2 0x033a 00000333: CALLDATASIZE 00000334: PUSH1 0x04 00000336: PUSH2 0x1ed9 00000339: JUMP 0000033a: JUMPDEST 0000033b: PUSH2 0x0b9d 0000033e: JUMP 0000033f: JUMPDEST 00000340: PUSH2 0x0362 00000343: PUSH2 0x034d 00000346: CALLDATASIZE 00000347: PUSH1 0x04 00000349: PUSH2 0x1cf8 0000034c: JUMP 0000034d: JUMPDEST 0000034e: PUSH1 0x70 00000350: PUSH1 0x20 00000352: MSTORE 00000353: PUSH1 0x00 00000355: SWAP1 00000356: DUP2 00000357: MSTORE 00000358: PUSH1 0x40 0000035a: SWAP1 0000035b: KECCAK256 0000035c: SLOAD 0000035d: PUSH1 0xff 0000035f: AND 00000360: DUP2 00000361: JUMP 00000362: JUMPDEST 00000363: PUSH1 0x40 00000365: MLOAD 00000366: SWAP1 00000367: ISZERO 00000368: ISZERO 00000369: DUP2 0000036a: MSTORE 0000036b: PUSH1 0x20 0000036d: ADD 0000036e: PUSH2 0x022d 00000371: JUMP 00000372: JUMPDEST 00000373: PUSH2 0x023e 00000376: PUSH2 0x0380 00000379: CALLDATASIZE 0000037a: PUSH1 0x04 0000037c: PUSH2 0x1cf8 0000037f: JUMP 00000380: JUMPDEST 00000381: PUSH2 0x0c17 00000384: JUMP 00000385: JUMPDEST 00000386: PUSH2 0x023e 00000389: PUSH2 0x0c3a 0000038c: JUMP 0000038d: JUMPDEST 0000038e: PUSH2 0x023e 00000391: PUSH2 0x039b 00000394: CALLDATASIZE 00000395: PUSH1 0x04 00000397: PUSH2 0x1f1b 0000039a: JUMP 0000039b: JUMPDEST 0000039c: PUSH2 0x0c4e 0000039f: JUMP 000003a0: JUMPDEST 000003a1: PUSH1 0x33 000003a3: SLOAD 000003a4: PUSH1 0x01 000003a6: PUSH1 0x01 000003a8: PUSH1 0xa0 000003aa: SHL 000003ab: SUB 000003ac: AND 000003ad: PUSH2 0x02ee 000003b0: JUMP 000003b1: JUMPDEST 000003b2: PUSH2 0x0223 000003b5: PUSH1 0x69 000003b7: SLOAD 000003b8: DUP2 000003b9: JUMP 000003ba: JUMPDEST 000003bb: PUSH2 0x0223 000003be: PUSH2 0x03c8 000003c1: CALLDATASIZE 000003c2: PUSH1 0x04 000003c4: PUSH2 0x1fb3 000003c7: JUMP 000003c8: JUMPDEST 000003c9: PUSH1 0x6d 000003cb: PUSH1 0x20 000003cd: MSTORE 000003ce: PUSH1 0x00 000003d0: SWAP1 000003d1: DUP2 000003d2: MSTORE 000003d3: PUSH1 0x40 000003d5: SWAP1 000003d6: KECCAK256 000003d7: SLOAD 000003d8: DUP2 000003d9: JUMP 000003da: JUMPDEST 000003db: PUSH2 0x023e 000003de: PUSH2 0x03e8 000003e1: CALLDATASIZE 000003e2: PUSH1 0x04 000003e4: PUSH2 0x1fd7 000003e7: JUMP 000003e8: JUMPDEST 000003e9: PUSH2 0x0f0e 000003ec: JUMP 000003ed: JUMPDEST 000003ee: PUSH2 0x0284 000003f1: PUSH2 0x03fb 000003f4: CALLDATASIZE 000003f5: PUSH1 0x04 000003f7: PUSH2 0x202d 000003fa: JUMP 000003fb: JUMPDEST 000003fc: PUSH2 0x11a0 000003ff: JUMP 00000400: JUMPDEST 00000401: PUSH2 0x023e 00000404: PUSH2 0x040e 00000407: CALLDATASIZE 00000408: PUSH1 0x04 0000040a: PUSH2 0x2080 0000040d: JUMP 0000040e: JUMPDEST 0000040f: PUSH2 0x1360 00000412: JUMP 00000413: JUMPDEST 00000414: PUSH2 0x0223 00000417: PUSH1 0x67 00000419: SLOAD 0000041a: DUP2 0000041b: JUMP 0000041c: JUMPDEST 0000041d: PUSH2 0x023e 00000420: PUSH2 0x042a 00000423: CALLDATASIZE 00000424: PUSH1 0x04 00000426: PUSH2 0x1cf8 00000429: JUMP 0000042a: JUMPDEST 0000042b: PUSH2 0x1537 0000042e: JUMP 0000042f: JUMPDEST 00000430: PUSH2 0x0223 00000433: PUSH2 0x2710 00000436: DUP2 00000437: JUMP 00000438: JUMPDEST 00000439: PUSH2 0x0362 0000043c: PUSH2 0x0446 0000043f: CALLDATASIZE 00000440: PUSH1 0x04 00000442: PUSH2 0x1fb3 00000445: JUMP 00000446: JUMPDEST 00000447: PUSH1 0x6c 00000449: PUSH1 0x20 0000044b: MSTORE 0000044c: PUSH1 0x00 0000044e: SWAP1 0000044f: DUP2 00000450: MSTORE 00000451: PUSH1 0x40 00000453: SWAP1 00000454: KECCAK256 00000455: SLOAD 00000456: PUSH1 0xff 00000458: AND 00000459: DUP2 0000045a: JUMP 0000045b: JUMPDEST 0000045c: PUSH2 0x023e 0000045f: PUSH2 0x0469 00000462: CALLDATASIZE 00000463: PUSH1 0x04 00000465: PUSH2 0x1fb3 00000468: JUMP 00000469: JUMPDEST 0000046a: PUSH2 0x1557 0000046d: JUMP 0000046e: JUMPDEST 0000046f: PUSH2 0x023e 00000472: PUSH2 0x047c 00000475: CALLDATASIZE 00000476: PUSH1 0x04 00000478: PUSH2 0x1fb3 0000047b: JUMP 0000047c: JUMPDEST 0000047d: PUSH2 0x17d1 00000480: JUMP 00000481: JUMPDEST 00000482: PUSH2 0x0362 00000485: PUSH2 0x048f 00000488: CALLDATASIZE 00000489: PUSH1 0x04 0000048b: PUSH2 0x2103 0000048e: JUMP 0000048f: JUMPDEST 00000490: PUSH2 0x185e 00000493: JUMP 00000494: JUMPDEST 00000495: PUSH2 0x0223 00000498: PUSH2 0x04a2 0000049b: CALLDATASIZE 0000049c: PUSH1 0x04 0000049e: PUSH2 0x2144 000004a1: JUMP 000004a2: JUMPDEST 000004a3: PUSH1 0x6b 000004a5: PUSH1 0x20 000004a7: SWAP1 000004a8: DUP2 000004a9: MSTORE 000004aa: PUSH1 0x00 000004ac: SWAP3 000004ad: DUP4 000004ae: MSTORE 000004af: PUSH1 0x40 000004b1: DUP1 000004b2: DUP5 000004b3: KECCAK256 000004b4: SWAP1 000004b5: SWAP2 000004b6: MSTORE 000004b7: SWAP1 000004b8: DUP3 000004b9: MSTORE 000004ba: SWAP1 000004bb: KECCAK256 000004bc: SLOAD 000004bd: DUP2 000004be: JUMP 000004bf: JUMPDEST 000004c0: PUSH1 0x00 000004c2: PUSH1 0x67 000004c4: SLOAD 000004c5: DUP3 000004c6: LT 000004c7: ISZERO 000004c8: PUSH2 0x053e 000004cb: JUMPI 000004cc: PUSH1 0x40 000004ce: MLOAD 000004cf: PUSH3 0x461bcd 000004d3: PUSH1 0xe5 000004d5: SHL 000004d6: DUP2 000004d7: MSTORE 000004d8: PUSH1 0x20 000004da: PUSH1 0x04 000004dc: DUP3 000004dd: ADD 000004de: MSTORE 000004df: PUSH1 0x3f 000004e1: PUSH1 0x24 000004e3: DUP3 000004e4: ADD 000004e5: MSTORE 000004e6: PUSH32 0x476f7665726e6f72526577617264733a205265717565737465642074696d6520 00000507: PUSH1 0x44 00000509: DUP3 0000050a: ADD 0000050b: MSTORE 0000050c: PUSH32 0x6973206265666f726520636f6e747261637420776173206465706c6f79656400 0000052d: PUSH1 0x64 0000052f: DUP3 00000530: ADD 00000531: MSTORE 00000532: PUSH1 0x84 00000534: ADD 00000535: JUMPDEST 00000536: PUSH1 0x40 00000538: MLOAD 00000539: DUP1 0000053a: SWAP2 0000053b: SUB 0000053c: SWAP1 0000053d: REVERT 0000053e: JUMPDEST 0000053f: PUSH1 0x68 00000541: SLOAD 00000542: PUSH1 0x67 00000544: SLOAD 00000545: PUSH2 0x054e 00000548: SWAP1 00000549: DUP5 0000054a: PUSH2 0x2186 0000054d: JUMP 0000054e: JUMPDEST 0000054f: PUSH2 0x0558 00000552: SWAP2 00000553: SWAP1 00000554: PUSH2 0x2199 00000557: JUMP 00000558: JUMPDEST 00000559: SWAP3 0000055a: SWAP2 0000055b: POP 0000055c: POP 0000055d: JUMP 0000055e: JUMPDEST 0000055f: PUSH32 0x8dea8703c3cf94703383ce38a9c894669dccd4ca8e65ddb43267aa0248711450 00000580: DUP1 00000581: SLOAD 00000582: PUSH1 0xff 00000584: NOT 00000585: AND 00000586: PUSH1 0x01 00000588: OR 00000589: SWAP1 0000058a: SSTORE 0000058b: CALLER 0000058c: PUSH1 0x00 0000058e: SWAP1 0000058f: DUP2 00000590: MSTORE 00000591: PUSH1 0x70 00000593: PUSH1 0x20 00000595: MSTORE 00000596: PUSH1 0x40 00000598: SWAP1 00000599: KECCAK256 0000059a: SLOAD 0000059b: DUP1 0000059c: PUSH2 0x05e7 0000059f: JUMPI 000005a0: PUSH1 0x40 000005a2: MLOAD 000005a3: PUSH3 0x461bcd 000005a7: PUSH1 0xe5 000005a9: SHL 000005aa: DUP2 000005ab: MSTORE 000005ac: PUSH1 0x20 000005ae: PUSH1 0x04 000005b0: DUP3 000005b1: ADD 000005b2: MSTORE 000005b3: PUSH1 0x1c 000005b5: PUSH1 0x24 000005b7: DUP3 000005b8: ADD 000005b9: MSTORE 000005ba: PUSH32 0x5261696c67756e4c6f6769633a20556e7361666520766563746f727300000000 000005db: PUSH1 0x44 000005dd: DUP3 000005de: ADD 000005df: MSTORE 000005e0: PUSH1 0x64 000005e2: ADD 000005e3: PUSH2 0x0535 000005e6: JUMP 000005e7: JUMPDEST 000005e8: POP 000005e9: JUMP 000005ea: JUMPDEST 000005eb: PUSH1 0x60 000005ed: PUSH1 0x00 000005ef: PUSH2 0x05fb 000005f2: DUP8 000005f3: DUP8 000005f4: DUP11 000005f5: DUP9 000005f6: DUP9 000005f7: PUSH2 0x08c1 000005fa: JUMP 000005fb: JUMPDEST 000005fc: SWAP1 000005fd: POP 000005fe: PUSH1 0x00 00000600: DUP10 00000601: PUSH8 0xffffffffffffffff 0000060a: DUP2 0000060b: GT 0000060c: ISZERO 0000060d: PUSH2 0x0618 00000610: JUMPI 00000611: PUSH2 0x0618 00000614: PUSH2 0x21bb 00000617: JUMP 00000618: JUMPDEST 00000619: PUSH1 0x40 0000061b: MLOAD 0000061c: SWAP1 0000061d: DUP1 0000061e: DUP3 0000061f: MSTORE 00000620: DUP1 00000621: PUSH1 0x20 00000623: MUL 00000624: PUSH1 0x20 00000626: ADD 00000627: DUP3 00000628: ADD 00000629: PUSH1 0x40 0000062b: MSTORE 0000062c: DUP1 0000062d: ISZERO 0000062e: PUSH2 0x0641 00000631: JUMPI 00000632: DUP2 00000633: PUSH1 0x20 00000635: ADD 00000636: PUSH1 0x20 00000638: DUP3 00000639: MUL 0000063a: DUP1 0000063b: CALLDATASIZE 0000063c: DUP4 0000063d: CALLDATACOPY 0000063e: ADD 0000063f: SWAP1 00000640: POP 00000641: JUMPDEST 00000642: POP 00000643: SWAP1 00000644: POP 00000645: PUSH1 0x00 00000647: JUMPDEST 00000648: DUP11 00000649: DUP2 0000064a: LT 0000064b: ISZERO 0000064c: PUSH2 0x08b2 0000064f: JUMPI 00000650: PUSH1 0x6d 00000652: PUSH1 0x00 00000654: DUP14 00000655: DUP14 00000656: DUP5 00000657: DUP2 00000658: DUP2 00000659: LT 0000065a: PUSH2 0x0665 0000065d: JUMPI 0000065e: PUSH2 0x0665 00000661: PUSH2 0x21d1 00000664: JUMP 00000665: JUMPDEST 00000666: SWAP1 00000667: POP 00000668: PUSH1 0x20 0000066a: MUL 0000066b: ADD 0000066c: PUSH1 0x20 0000066e: DUP2 0000066f: ADD 00000670: SWAP1 00000671: PUSH2 0x067a 00000674: SWAP2 00000675: SWAP1 00000676: PUSH2 0x1fb3 00000679: JUMP 0000067a: JUMPDEST 0000067b: PUSH1 0x01 0000067d: PUSH1 0x01 0000067f: PUSH1 0xa0 00000681: SHL 00000682: SUB 00000683: AND 00000684: PUSH1 0x01 00000686: PUSH1 0x01 00000688: PUSH1 0xa0 0000068a: SHL 0000068b: SUB 0000068c: AND 0000068d: DUP2 0000068e: MSTORE 0000068f: PUSH1 0x20 00000691: ADD 00000692: SWAP1 00000693: DUP2 00000694: MSTORE 00000695: PUSH1 0x20 00000697: ADD 00000698: PUSH1 0x00 0000069a: KECCAK256 0000069b: SLOAD 0000069c: DUP9 0000069d: LT 0000069e: PUSH2 0x070f 000006a1: JUMPI 000006a2: PUSH1 0x40 000006a4: MLOAD 000006a5: PUSH3 0x461bcd 000006a9: PUSH1 0xe5 000006ab: SHL 000006ac: DUP2 000006ad: MSTORE 000006ae: PUSH1 0x20 000006b0: PUSH1 0x04 000006b2: DUP3 000006b3: ADD 000006b4: MSTORE 000006b5: PUSH1 0x3e 000006b7: PUSH1 0x24 000006b9: DUP3 000006ba: ADD 000006bb: MSTORE 000006bc: PUSH32 0x476f7665726e6f72526577617264733a20547269656420746f20636c61696d20 000006dd: PUSH1 0x44 000006df: DUP3 000006e0: ADD 000006e1: MSTORE 000006e2: PUSH32 0x6265796f6e64206c617374206561726d61726b656420696e74657276616c0000 00000703: PUSH1 0x64 00000705: DUP3 00000706: ADD 00000707: MSTORE 00000708: PUSH1 0x84 0000070a: ADD 0000070b: PUSH2 0x0535 0000070e: JUMP 0000070f: JUMPDEST 00000710: PUSH1 0x01 00000712: PUSH1 0x01 00000714: PUSH1 0xa0 00000716: SHL 00000717: SUB 00000718: DUP11 00000719: AND 0000071a: PUSH1 0x00 0000071c: SWAP1 0000071d: DUP2 0000071e: MSTORE 0000071f: PUSH1 0x6a 00000721: PUSH1 0x20 00000723: MSTORE 00000724: PUSH1 0x40 00000726: DUP2 00000727: KECCAK256 00000728: DUP2 00000729: DUP15 0000072a: DUP15 0000072b: DUP6 0000072c: DUP2 0000072d: DUP2 0000072e: LT 0000072f: PUSH2 0x073a 00000732: JUMPI 00000733: PUSH2 0x073a 00000736: PUSH2 0x21d1 00000739: JUMP 0000073a: JUMPDEST 0000073b: SWAP1 0000073c: POP 0000073d: PUSH1 0x20 0000073f: MUL 00000740: ADD 00000741: PUSH1 0x20 00000743: DUP2 00000744: ADD 00000745: SWAP1 00000746: PUSH2 0x074f 00000749: SWAP2 0000074a: SWAP1 0000074b: PUSH2 0x1fb3 0000074e: JUMP 0000074f: JUMPDEST 00000750: PUSH1 0x01 00000752: PUSH1 0x01 00000754: PUSH1 0xa0 00000756: SHL 00000757: SUB 00000758: AND 00000759: PUSH1 0x01 0000075b: PUSH1 0x01 0000075d: PUSH1 0xa0 0000075f: SHL 00000760: SUB 00000761: AND 00000762: DUP2 00000763: MSTORE 00000764: PUSH1 0x20 00000766: ADD 00000767: SWAP1 00000768: DUP2 00000769: MSTORE 0000076a: PUSH1 0x20 0000076c: ADD 0000076d: PUSH1 0x00 0000076f: KECCAK256 00000770: SWAP1 00000771: POP 00000772: PUSH1 0x00 00000774: PUSH1 0x6b 00000776: PUSH1 0x00 00000778: DUP16 00000779: DUP16 0000077a: DUP7 0000077b: DUP2 0000077c: DUP2 0000077d: LT 0000077e: PUSH2 0x0789 00000781: JUMPI 00000782: PUSH2 0x0789 00000785: PUSH2 0x21d1 00000788: JUMP 00000789: JUMPDEST 0000078a: SWAP1 0000078b: POP 0000078c: PUSH1 0x20 0000078e: MUL 0000078f: ADD 00000790: PUSH1 0x20 00000792: DUP2 00000793: ADD 00000794: SWAP1 00000795: PUSH2 0x079e 00000798: SWAP2 00000799: SWAP1 0000079a: PUSH2 0x1fb3 0000079d: JUMP 0000079e: JUMPDEST 0000079f: PUSH1 0x01 000007a1: PUSH1 0x01 000007a3: PUSH1 0xa0 000007a5: SHL 000007a6: SUB 000007a7: AND 000007a8: DUP2 000007a9: MSTORE 000007aa: PUSH1 0x20 000007ac: DUP2 000007ad: ADD 000007ae: SWAP2 000007af: SWAP1 000007b0: SWAP2 000007b1: MSTORE 000007b2: PUSH1 0x40 000007b4: ADD 000007b5: PUSH1 0x00 000007b7: SWAP1 000007b8: DUP2 000007b9: KECCAK256 000007ba: SWAP2 000007bb: POP 000007bc: DUP12 000007bd: JUMPDEST 000007be: DUP12 000007bf: DUP2 000007c0: GT 000007c1: PUSH2 0x087b 000007c4: JUMPI 000007c5: PUSH1 0x00 000007c7: DUP2 000007c8: DUP2 000007c9: MSTORE 000007ca: PUSH1 0x6f 000007cc: PUSH1 0x20 000007ce: MSTORE 000007cf: PUSH1 0x40 000007d1: SWAP1 000007d2: KECCAK256 000007d3: SLOAD 000007d4: ISZERO 000007d5: PUSH2 0x0869 000007d8: JUMPI 000007d9: DUP9 000007da: ISZERO 000007db: DUP1 000007dc: PUSH2 0x07fe 000007df: JUMPI 000007e0: POP 000007e1: PUSH1 0x08 000007e3: DUP2 000007e4: SWAP1 000007e5: SHR 000007e6: PUSH1 0x00 000007e8: SWAP1 000007e9: DUP2 000007ea: MSTORE 000007eb: PUSH1 0x20 000007ed: DUP6 000007ee: SWAP1 000007ef: MSTORE 000007f0: PUSH1 0x40 000007f2: SWAP1 000007f3: KECCAK256 000007f4: SLOAD 000007f5: PUSH1 0x01 000007f7: PUSH1 0xff 000007f9: DUP4 000007fa: AND 000007fb: SHL 000007fc: AND 000007fd: ISZERO 000007fe: JUMPDEST 000007ff: ISZERO 00000800: PUSH2 0x0869 00000803: JUMPI 00000804: PUSH1 0x00 00000806: DUP2 00000807: DUP2 00000808: MSTORE 00000809: PUSH1 0x6f 0000080b: PUSH1 0x20 0000080d: MSTORE 0000080e: PUSH1 0x40 00000810: SWAP1 00000811: KECCAK256 00000812: SLOAD 00000813: DUP8 00000814: PUSH2 0x081d 00000817: DUP16 00000818: DUP5 00000819: PUSH2 0x2186 0000081c: JUMP 0000081d: JUMPDEST 0000081e: DUP2 0000081f: MLOAD 00000820: DUP2 00000821: LT 00000822: PUSH2 0x082d 00000825: JUMPI 00000826: PUSH2 0x082d 00000829: PUSH2 0x21d1 0000082c: JUMP 0000082d: JUMPDEST 0000082e: PUSH1 0x20 00000830: MUL 00000831: PUSH1 0x20 00000833: ADD 00000834: ADD 00000835: MLOAD 00000836: DUP5 00000837: PUSH1 0x00 00000839: DUP5 0000083a: DUP2 0000083b: MSTORE 0000083c: PUSH1 0x20 0000083e: ADD 0000083f: SWAP1 00000840: DUP2 00000841: MSTORE 00000842: PUSH1 0x20 00000844: ADD 00000845: PUSH1 0x00 00000847: KECCAK256 00000848: SLOAD 00000849: PUSH2 0x0852 0000084c: SWAP2 0000084d: SWAP1 0000084e: PUSH2 0x21e7 00000851: JUMP 00000852: JUMPDEST 00000853: PUSH2 0x085c 00000856: SWAP2 00000857: SWAP1 00000858: PUSH2 0x2199 0000085b: JUMP 0000085c: JUMPDEST 0000085d: PUSH2 0x0866 00000860: SWAP1 00000861: DUP4 00000862: PUSH2 0x21fe 00000865: JUMP 00000866: JUMPDEST 00000867: SWAP2 00000868: POP 00000869: JUMPDEST 0000086a: PUSH2 0x0874 0000086d: PUSH1 0x01 0000086f: DUP3 00000870: PUSH2 0x21fe 00000873: JUMP 00000874: JUMPDEST 00000875: SWAP1 00000876: POP 00000877: PUSH2 0x07bd 0000087a: JUMP 0000087b: JUMPDEST 0000087c: POP 0000087d: DUP1 0000087e: DUP6 0000087f: DUP6 00000880: DUP2 00000881: MLOAD 00000882: DUP2 00000883: LT 00000884: PUSH2 0x088f 00000887: JUMPI 00000888: PUSH2 0x088f 0000088b: PUSH2 0x21d1 0000088e: JUMP 0000088f: JUMPDEST 00000890: PUSH1 0x20 00000892: MUL 00000893: PUSH1 0x20 00000895: ADD 00000896: ADD 00000897: DUP2 00000898: DUP2 00000899: MSTORE 0000089a: POP 0000089b: POP 0000089c: POP 0000089d: POP 0000089e: POP 0000089f: PUSH1 0x01 000008a1: DUP2 000008a2: PUSH2 0x08ab 000008a5: SWAP2 000008a6: SWAP1 000008a7: PUSH2 0x21fe 000008aa: JUMP 000008ab: JUMPDEST 000008ac: SWAP1 000008ad: POP 000008ae: PUSH2 0x0647 000008b1: JUMP 000008b2: JUMPDEST 000008b3: POP 000008b4: SWAP11 000008b5: SWAP10 000008b6: POP 000008b7: POP 000008b8: POP 000008b9: POP 000008ba: POP 000008bb: POP 000008bc: POP 000008bd: POP 000008be: POP 000008bf: POP 000008c0: JUMP 000008c1: JUMPDEST 000008c2: PUSH1 0x60 000008c4: PUSH1 0x00 000008c6: PUSH2 0x08cf 000008c9: DUP8 000008ca: DUP8 000008cb: PUSH2 0x2186 000008ce: JUMP 000008cf: JUMPDEST 000008d0: PUSH2 0x08da 000008d3: SWAP1 000008d4: PUSH1 0x01 000008d6: PUSH2 0x21fe 000008d9: JUMP 000008da: JUMPDEST 000008db: SWAP1 000008dc: POP 000008dd: DUP3 000008de: DUP2 000008df: EQ 000008e0: PUSH2 0x0951 000008e3: JUMPI 000008e4: PUSH1 0x40 000008e6: MLOAD 000008e7: PUSH3 0x461bcd 000008eb: PUSH1 0xe5 000008ed: SHL 000008ee: DUP2 000008ef: MSTORE 000008f0: PUSH1 0x20 000008f2: PUSH1 0x04 000008f4: DUP3 000008f5: ADD 000008f6: MSTORE 000008f7: PUSH1 0x30 000008f9: PUSH1 0x24 000008fb: DUP3 000008fc: ADD 000008fd: MSTORE 000008fe: PUSH32 0x476f7665726e6f72526577617264733a20496e636f7272656374206e756d6265 0000091f: PUSH1 0x44 00000921: DUP3 00000922: ADD 00000923: MSTORE 00000924: PUSH32 0x72206f662068696e747320676976656e00000000000000000000000000000000 00000945: PUSH1 0x64 00000947: DUP3 00000948: ADD 00000949: MSTORE 0000094a: PUSH1 0x84 0000094c: ADD 0000094d: PUSH2 0x0535 00000950: JUMP 00000951: JUMPDEST 00000952: PUSH1 0x00 00000954: DUP2 00000955: PUSH8 0xffffffffffffffff 0000095e: DUP2 0000095f: GT 00000960: ISZERO 00000961: PUSH2 0x096c 00000964: JUMPI 00000965: PUSH2 0x096c 00000968: PUSH2 0x21bb 0000096b: JUMP 0000096c: JUMPDEST 0000096d: PUSH1 0x40 0000096f: MLOAD 00000970: SWAP1 00000971: DUP1 00000972: DUP3 00000973: MSTORE 00000974: DUP1 00000975: PUSH1 0x20 00000977: MUL 00000978: PUSH1 0x20 0000097a: ADD 0000097b: DUP3 0000097c: ADD 0000097d: PUSH1 0x40 0000097f: MSTORE 00000980: DUP1 00000981: ISZERO 00000982: PUSH2 0x0995 00000985: JUMPI 00000986: DUP2 00000987: PUSH1 0x20 00000989: ADD 0000098a: PUSH1 0x20 0000098c: DUP3 0000098d: MUL 0000098e: DUP1 0000098f: CALLDATASIZE 00000990: DUP4 00000991: CALLDATACOPY 00000992: ADD 00000993: SWAP1 00000994: POP 00000995: JUMPDEST 00000996: POP 00000997: SWAP1 00000998: POP 00000999: PUSH1 0x00 0000099b: JUMPDEST 0000099c: DUP3 0000099d: DUP2 0000099e: LT 0000099f: ISZERO 000009a0: PUSH2 0x0a9b 000009a3: JUMPI 000009a4: PUSH1 0x65 000009a6: SLOAD 000009a7: PUSH1 0x01 000009a9: PUSH1 0x01 000009ab: PUSH1 0xa0 000009ad: SHL 000009ae: SUB 000009af: AND 000009b0: PUSH4 0x08d465e6 000009b5: DUP9 000009b6: PUSH2 0x09c2 000009b9: PUSH2 0x02c3 000009bc: DUP6 000009bd: DUP15 000009be: PUSH2 0x21fe 000009c1: JUMP 000009c2: JUMPDEST 000009c3: DUP10 000009c4: DUP10 000009c5: DUP7 000009c6: DUP2 000009c7: DUP2 000009c8: LT 000009c9: PUSH2 0x09d4 000009cc: JUMPI 000009cd: PUSH2 0x09d4 000009d0: PUSH2 0x21d1 000009d3: JUMP 000009d4: JUMPDEST 000009d5: PUSH1 0x40 000009d7: MLOAD 000009d8: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 000009f9: PUSH1 0xe0 000009fb: DUP9 000009fc: SWAP1 000009fd: SHL 000009fe: AND 000009ff: DUP2 00000a00: MSTORE 00000a01: PUSH1 0x01 00000a03: PUSH1 0x01 00000a05: PUSH1 0xa0 00000a07: SHL 00000a08: SUB 00000a09: SWAP1 00000a0a: SWAP6 00000a0b: AND 00000a0c: PUSH1 0x04 00000a0e: DUP7 00000a0f: ADD 00000a10: MSTORE 00000a11: PUSH1 0x24 00000a13: DUP6 00000a14: ADD 00000a15: SWAP4 00000a16: SWAP1 00000a17: SWAP4 00000a18: MSTORE 00000a19: POP 00000a1a: PUSH1 0x20 00000a1c: SWAP1 00000a1d: SWAP2 00000a1e: MUL 00000a1f: ADD 00000a20: CALLDATALOAD 00000a21: PUSH1 0x44 00000a23: DUP3 00000a24: ADD 00000a25: MSTORE 00000a26: PUSH1 0x64 00000a28: ADD 00000a29: PUSH1 0x40 00000a2b: DUP1 00000a2c: MLOAD 00000a2d: DUP1 00000a2e: DUP4 00000a2f: SUB 00000a30: DUP2 00000a31: DUP7 00000a32: GAS 00000a33: STATICCALL 00000a34: ISZERO 00000a35: DUP1 00000a36: ISZERO 00000a37: PUSH2 0x0a44 00000a3a: JUMPI 00000a3b: RETURNDATASIZE 00000a3c: PUSH1 0x00 00000a3e: DUP1 00000a3f: RETURNDATACOPY 00000a40: RETURNDATASIZE 00000a41: PUSH1 0x00 00000a43: REVERT 00000a44: JUMPDEST 00000a45: POP 00000a46: POP 00000a47: POP 00000a48: POP 00000a49: PUSH1 0x40 00000a4b: MLOAD 00000a4c: RETURNDATASIZE 00000a4d: PUSH1 0x1f 00000a4f: NOT 00000a50: PUSH1 0x1f 00000a52: DUP3 00000a53: ADD 00000a54: AND 00000a55: DUP3 00000a56: ADD 00000a57: DUP1 00000a58: PUSH1 0x40 00000a5a: MSTORE 00000a5b: POP 00000a5c: DUP2 00000a5d: ADD 00000a5e: SWAP1 00000a5f: PUSH2 0x0a68 00000a62: SWAP2 00000a63: SWAP1 00000a64: PUSH2 0x2211 00000a67: JUMP 00000a68: JUMPDEST 00000a69: PUSH1 0x20 00000a6b: ADD 00000a6c: MLOAD 00000a6d: DUP3 00000a6e: DUP3 00000a6f: DUP2 00000a70: MLOAD 00000a71: DUP2 00000a72: LT 00000a73: PUSH2 0x0a7e 00000a76: JUMPI 00000a77: PUSH2 0x0a7e 00000a7a: PUSH2 0x21d1 00000a7d: JUMP 00000a7e: JUMPDEST 00000a7f: PUSH1 0x20 00000a81: SWAP1 00000a82: DUP2 00000a83: MUL 00000a84: SWAP2 00000a85: SWAP1 00000a86: SWAP2 00000a87: ADD 00000a88: ADD 00000a89: MSTORE 00000a8a: PUSH2 0x0a94 00000a8d: PUSH1 0x01 00000a8f: DUP3 00000a90: PUSH2 0x21fe 00000a93: JUMP 00000a94: JUMPDEST 00000a95: SWAP1 00000a96: POP 00000a97: PUSH2 0x099b 00000a9a: JUMP 00000a9b: JUMPDEST 00000a9c: POP 00000a9d: SWAP8 00000a9e: SWAP7 00000a9f: POP 00000aa0: POP 00000aa1: POP 00000aa2: POP 00000aa3: POP 00000aa4: POP 00000aa5: POP 00000aa6: JUMP 00000aa7: JUMPDEST 00000aa8: PUSH1 0x00 00000aaa: PUSH2 0x0ab2 00000aad: TIMESTAMP 00000aae: PUSH2 0x04bf 00000ab1: JUMP 00000ab2: JUMPDEST 00000ab3: SWAP1 00000ab4: POP 00000ab5: SWAP1 00000ab6: JUMP 00000ab7: JUMPDEST 00000ab8: PUSH1 0x00 00000aba: PUSH2 0x0558 00000abd: PUSH1 0x0e 00000abf: DUP4 00000ac0: PUSH2 0x21e7 00000ac3: JUMP 00000ac4: JUMPDEST 00000ac5: PUSH2 0x0acc 00000ac8: PUSH2 0x18a1 00000acb: JUMP 00000acc: JUMPDEST 00000acd: PUSH1 0x00 00000acf: JUMPDEST 00000ad0: DUP2 00000ad1: DUP2 00000ad2: LT 00000ad3: ISZERO 00000ad4: PUSH2 0x0b8b 00000ad7: JUMPI 00000ad8: PUSH1 0x01 00000ada: PUSH1 0x6c 00000adc: PUSH1 0x00 00000ade: DUP6 00000adf: DUP6 00000ae0: DUP6 00000ae1: DUP2 00000ae2: DUP2 00000ae3: LT 00000ae4: PUSH2 0x0aef 00000ae7: JUMPI 00000ae8: PUSH2 0x0aef 00000aeb: PUSH2 0x21d1 00000aee: JUMP 00000aef: JUMPDEST 00000af0: SWAP1 00000af1: POP 00000af2: PUSH1 0x20 00000af4: MUL 00000af5: ADD 00000af6: PUSH1 0x20 00000af8: DUP2 00000af9: ADD 00000afa: SWAP1 00000afb: PUSH2 0x0b04 00000afe: SWAP2 00000aff: SWAP1 00000b00: PUSH2 0x1fb3 00000b03: JUMP 00000b04: JUMPDEST 00000b05: PUSH1 0x01 00000b07: PUSH1 0x01 00000b09: PUSH1 0xa0 00000b0b: SHL 00000b0c: SUB 00000b0d: AND 00000b0e: DUP2 00000b0f: MSTORE 00000b10: PUSH1 0x20 00000b12: DUP2 00000b13: ADD 00000b14: SWAP2 00000b15: SWAP1 00000b16: SWAP2 00000b17: MSTORE 00000b18: PUSH1 0x40 00000b1a: ADD 00000b1b: PUSH1 0x00 00000b1d: KECCAK256 00000b1e: DUP1 00000b1f: SLOAD 00000b20: PUSH1 0xff 00000b22: NOT 00000b23: AND 00000b24: SWAP2 00000b25: ISZERO 00000b26: ISZERO 00000b27: SWAP2 00000b28: SWAP1 00000b29: SWAP2 00000b2a: OR 00000b2b: SWAP1 00000b2c: SSTORE 00000b2d: PUSH2 0x0b34 00000b30: PUSH2 0x0aa7 00000b33: JUMP 00000b34: JUMPDEST 00000b35: PUSH1 0x6d 00000b37: PUSH1 0x00 00000b39: DUP6 00000b3a: DUP6 00000b3b: DUP6 00000b3c: DUP2 00000b3d: DUP2 00000b3e: LT 00000b3f: PUSH2 0x0b4a 00000b42: JUMPI 00000b43: PUSH2 0x0b4a 00000b46: PUSH2 0x21d1 00000b49: JUMP 00000b4a: JUMPDEST 00000b4b: SWAP1 00000b4c: POP 00000b4d: PUSH1 0x20 00000b4f: MUL 00000b50: ADD 00000b51: PUSH1 0x20 00000b53: DUP2 00000b54: ADD 00000b55: SWAP1 00000b56: PUSH2 0x0b5f 00000b59: SWAP2 00000b5a: SWAP1 00000b5b: PUSH2 0x1fb3 00000b5e: JUMP 00000b5f: JUMPDEST 00000b60: PUSH1 0x01 00000b62: PUSH1 0x01 00000b64: PUSH1 0xa0 00000b66: SHL 00000b67: SUB 00000b68: AND 00000b69: DUP2 00000b6a: MSTORE 00000b6b: PUSH1 0x20 00000b6d: DUP2 00000b6e: ADD 00000b6f: SWAP2 00000b70: SWAP1 00000b71: SWAP2 00000b72: MSTORE 00000b73: PUSH1 0x40 00000b75: ADD 00000b76: PUSH1 0x00 00000b78: KECCAK256 00000b79: SSTORE 00000b7a: PUSH2 0x0b84 00000b7d: PUSH1 0x01 00000b7f: DUP3 00000b80: PUSH2 0x21fe 00000b83: JUMP 00000b84: JUMPDEST 00000b85: SWAP1 00000b86: POP 00000b87: PUSH2 0x0acf 00000b8a: JUMP 00000b8b: JUMPDEST 00000b8c: POP 00000b8d: POP 00000b8e: POP 00000b8f: JUMP 00000b90: JUMPDEST 00000b91: PUSH2 0x0b98 00000b94: PUSH2 0x18a1 00000b97: JUMP 00000b98: JUMPDEST 00000b99: PUSH1 0x69 00000b9b: SSTORE 00000b9c: JUMP 00000b9d: JUMPDEST 00000b9e: PUSH2 0x0ba5 00000ba1: PUSH2 0x18a1 00000ba4: JUMP 00000ba5: JUMPDEST 00000ba6: PUSH1 0x00 00000ba8: JUMPDEST 00000ba9: DUP2 00000baa: DUP2 00000bab: LT 00000bac: ISZERO 00000bad: PUSH2 0x0b8b 00000bb0: JUMPI 00000bb1: PUSH1 0x00 00000bb3: PUSH1 0x6c 00000bb5: PUSH1 0x00 00000bb7: DUP6 00000bb8: DUP6 00000bb9: DUP6 00000bba: DUP2 00000bbb: DUP2 00000bbc: LT 00000bbd: PUSH2 0x0bc8 00000bc0: JUMPI 00000bc1: PUSH2 0x0bc8 00000bc4: PUSH2 0x21d1 00000bc7: JUMP 00000bc8: JUMPDEST 00000bc9: SWAP1 00000bca: POP 00000bcb: PUSH1 0x20 00000bcd: MUL 00000bce: ADD 00000bcf: PUSH1 0x20 00000bd1: DUP2 00000bd2: ADD 00000bd3: SWAP1 00000bd4: PUSH2 0x0bdd 00000bd7: SWAP2 00000bd8: SWAP1 00000bd9: PUSH2 0x1fb3 00000bdc: JUMP 00000bdd: JUMPDEST 00000bde: PUSH1 0x01 00000be0: PUSH1 0x01 00000be2: PUSH1 0xa0 00000be4: SHL 00000be5: SUB 00000be6: AND 00000be7: DUP2 00000be8: MSTORE 00000be9: PUSH1 0x20 00000beb: DUP2 00000bec: ADD 00000bed: SWAP2 00000bee: SWAP1 00000bef: SWAP2 00000bf0: MSTORE 00000bf1: PUSH1 0x40 00000bf3: ADD 00000bf4: PUSH1 0x00 00000bf6: KECCAK256 00000bf7: DUP1 00000bf8: SLOAD 00000bf9: PUSH1 0xff 00000bfb: NOT 00000bfc: AND 00000bfd: SWAP2 00000bfe: ISZERO 00000bff: ISZERO 00000c00: SWAP2 00000c01: SWAP1 00000c02: SWAP2 00000c03: OR 00000c04: SWAP1 00000c05: SSTORE 00000c06: PUSH2 0x0c10 00000c09: PUSH1 0x01 00000c0b: DUP3 00000c0c: PUSH2 0x21fe 00000c0f: JUMP 00000c10: JUMPDEST 00000c11: SWAP1 00000c12: POP 00000c13: PUSH2 0x0ba8 00000c16: JUMP 00000c17: JUMPDEST 00000c18: PUSH2 0x0c1f 00000c1b: PUSH2 0x18a1 00000c1e: JUMP 00000c1f: JUMPDEST 00000c20: PUSH1 0x00 00000c22: SWAP1 00000c23: DUP2 00000c24: MSTORE 00000c25: PUSH1 0x70 00000c27: PUSH1 0x20 00000c29: MSTORE 00000c2a: PUSH1 0x40 00000c2c: SWAP1 00000c2d: KECCAK256 00000c2e: DUP1 00000c2f: SLOAD 00000c30: PUSH1 0xff 00000c32: NOT 00000c33: AND 00000c34: PUSH1 0x01 00000c36: OR 00000c37: SWAP1 00000c38: SSTORE 00000c39: JUMP 00000c3a: JUMPDEST 00000c3b: PUSH2 0x0c42 00000c3e: PUSH2 0x18a1 00000c41: JUMP 00000c42: JUMPDEST 00000c43: PUSH2 0x0c4c 00000c46: PUSH1 0x00 00000c48: PUSH2 0x18fb 00000c4b: JUMP 00000c4c: JUMPDEST 00000c4d: JUMP 00000c4e: JUMPDEST 00000c4f: PUSH1 0x00 00000c51: PUSH2 0x0c61 00000c54: DUP9 00000c55: DUP9 00000c56: DUP9 00000c57: DUP9 00000c58: DUP9 00000c59: DUP9 00000c5a: DUP9 00000c5b: PUSH1 0x01 00000c5d: PUSH2 0x05ea 00000c60: JUMP 00000c61: JUMPDEST 00000c62: SWAP1 00000c63: POP 00000c64: PUSH1 0x00 00000c66: DUP1 00000c67: JUMPDEST 00000c68: DUP9 00000c69: DUP2 00000c6a: LT 00000c6b: ISZERO 00000c6c: PUSH2 0x0def 00000c6f: JUMPI 00000c70: DUP2 00000c71: PUSH1 0x01 00000c73: PUSH1 0x01 00000c75: PUSH1 0xa0 00000c77: SHL 00000c78: SUB 00000c79: AND 00000c7a: DUP11 00000c7b: DUP11 00000c7c: DUP4 00000c7d: DUP2 00000c7e: DUP2 00000c7f: LT 00000c80: PUSH2 0x0c8b 00000c83: JUMPI 00000c84: PUSH2 0x0c8b 00000c87: PUSH2 0x21d1 00000c8a: JUMP 00000c8b: JUMPDEST 00000c8c: SWAP1 00000c8d: POP 00000c8e: PUSH1 0x20 00000c90: MUL 00000c91: ADD 00000c92: PUSH1 0x20 00000c94: DUP2 00000c95: ADD 00000c96: SWAP1 00000c97: PUSH2 0x0ca0 00000c9a: SWAP2 00000c9b: SWAP1 00000c9c: PUSH2 0x1fb3 00000c9f: JUMP 00000ca0: JUMPDEST 00000ca1: PUSH1 0x01 00000ca3: PUSH1 0x01 00000ca5: PUSH1 0xa0 00000ca7: SHL 00000ca8: SUB 00000ca9: AND 00000caa: GT 00000cab: PUSH2 0x0d1c 00000cae: JUMPI 00000caf: PUSH1 0x40 00000cb1: MLOAD 00000cb2: PUSH3 0x461bcd 00000cb6: PUSH1 0xe5 00000cb8: SHL 00000cb9: DUP2 00000cba: MSTORE 00000cbb: PUSH1 0x20 00000cbd: PUSH1 0x04 00000cbf: DUP3 00000cc0: ADD 00000cc1: MSTORE 00000cc2: PUSH1 0x39 00000cc4: PUSH1 0x24 00000cc6: DUP3 00000cc7: ADD 00000cc8: MSTORE 00000cc9: PUSH32 0x476f7665726e6f72526577617264733a204475706c696361746520746f6b656e 00000cea: PUSH1 0x44 00000cec: DUP3 00000ced: ADD 00000cee: MSTORE 00000cef: PUSH32 0x206f7220746f6b656e73206172656e2774206f72646572656400000000000000 00000d10: PUSH1 0x64 00000d12: DUP3 00000d13: ADD 00000d14: MSTORE 00000d15: PUSH1 0x84 00000d17: ADD 00000d18: PUSH2 0x0535 00000d1b: JUMP 00000d1c: JUMPDEST 00000d1d: PUSH1 0x01 00000d1f: PUSH1 0x01 00000d21: PUSH1 0xa0 00000d23: SHL 00000d24: SUB 00000d25: DUP9 00000d26: AND 00000d27: PUSH1 0x00 00000d29: SWAP1 00000d2a: DUP2 00000d2b: MSTORE 00000d2c: PUSH1 0x6a 00000d2e: PUSH1 0x20 00000d30: MSTORE 00000d31: PUSH1 0x40 00000d33: DUP2 00000d34: KECCAK256 00000d35: DUP2 00000d36: DUP13 00000d37: DUP13 00000d38: DUP6 00000d39: DUP2 00000d3a: DUP2 00000d3b: LT 00000d3c: PUSH2 0x0d47 00000d3f: JUMPI 00000d40: PUSH2 0x0d47 00000d43: PUSH2 0x21d1 00000d46: JUMP 00000d47: JUMPDEST 00000d48: SWAP1 00000d49: POP 00000d4a: PUSH1 0x20 00000d4c: MUL 00000d4d: ADD 00000d4e: PUSH1 0x20 00000d50: DUP2 00000d51: ADD 00000d52: SWAP1 00000d53: PUSH2 0x0d5c 00000d56: SWAP2 00000d57: SWAP1 00000d58: PUSH2 0x1fb3 00000d5b: JUMP 00000d5c: JUMPDEST 00000d5d: PUSH1 0x01 00000d5f: PUSH1 0x01 00000d61: PUSH1 0xa0 00000d63: SHL 00000d64: SUB 00000d65: AND 00000d66: DUP2 00000d67: MSTORE 00000d68: PUSH1 0x20 00000d6a: DUP2 00000d6b: ADD 00000d6c: SWAP2 00000d6d: SWAP1 00000d6e: SWAP2 00000d6f: MSTORE 00000d70: PUSH1 0x40 00000d72: ADD 00000d73: PUSH1 0x00 00000d75: KECCAK256 00000d76: SWAP1 00000d77: POP 00000d78: DUP8 00000d79: JUMPDEST 00000d7a: DUP8 00000d7b: DUP2 00000d7c: GT 00000d7d: PUSH2 0x0db1 00000d80: JUMPI 00000d81: PUSH1 0x08 00000d83: DUP2 00000d84: SWAP1 00000d85: SHR 00000d86: PUSH1 0x00 00000d88: SWAP1 00000d89: DUP2 00000d8a: MSTORE 00000d8b: PUSH1 0x20 00000d8d: DUP4 00000d8e: SWAP1 00000d8f: MSTORE 00000d90: PUSH1 0x40 00000d92: SWAP1 00000d93: KECCAK256 00000d94: DUP1 00000d95: SLOAD 00000d96: PUSH1 0x01 00000d98: PUSH1 0xff 00000d9a: DUP5 00000d9b: AND 00000d9c: SHL 00000d9d: OR 00000d9e: SWAP1 00000d9f: SSTORE 00000da0: PUSH2 0x0daa 00000da3: PUSH1 0x01 00000da5: DUP3 00000da6: PUSH2 0x21fe 00000da9: JUMP 00000daa: JUMPDEST 00000dab: SWAP1 00000dac: POP 00000dad: PUSH2 0x0d79 00000db0: JUMP 00000db1: JUMPDEST 00000db2: POP 00000db3: DUP11 00000db4: DUP11 00000db5: DUP4 00000db6: DUP2 00000db7: DUP2 00000db8: LT 00000db9: PUSH2 0x0dc4 00000dbc: JUMPI 00000dbd: PUSH2 0x0dc4 00000dc0: PUSH2 0x21d1 00000dc3: JUMP 00000dc4: JUMPDEST 00000dc5: SWAP1 00000dc6: POP 00000dc7: PUSH1 0x20 00000dc9: MUL 00000dca: ADD 00000dcb: PUSH1 0x20 00000dcd: DUP2 00000dce: ADD 00000dcf: SWAP1 00000dd0: PUSH2 0x0dd9 00000dd3: SWAP2 00000dd4: SWAP1 00000dd5: PUSH2 0x1fb3 00000dd8: JUMP 00000dd9: JUMPDEST 00000dda: SWAP3 00000ddb: POP 00000ddc: PUSH2 0x0de8 00000ddf: SWAP1 00000de0: POP 00000de1: PUSH1 0x01 00000de3: DUP3 00000de4: PUSH2 0x21fe 00000de7: JUMP 00000de8: JUMPDEST 00000de9: SWAP1 00000dea: POP 00000deb: PUSH2 0x0c67 00000dee: JUMP 00000def: JUMPDEST 00000df0: POP 00000df1: PUSH1 0x00 00000df3: JUMPDEST 00000df4: DUP9 00000df5: DUP2 00000df6: LT 00000df7: ISZERO 00000df8: PUSH2 0x0f02 00000dfb: JUMPI 00000dfc: PUSH2 0x0e50 00000dff: DUP9 00000e00: DUP5 00000e01: DUP4 00000e02: DUP2 00000e03: MLOAD 00000e04: DUP2 00000e05: LT 00000e06: PUSH2 0x0e11 00000e09: JUMPI 00000e0a: PUSH2 0x0e11 00000e0d: PUSH2 0x21d1 00000e10: JUMP 00000e11: JUMPDEST 00000e12: PUSH1 0x20 00000e14: MUL 00000e15: PUSH1 0x20 00000e17: ADD 00000e18: ADD 00000e19: MLOAD 00000e1a: DUP13 00000e1b: DUP13 00000e1c: DUP6 00000e1d: DUP2 00000e1e: DUP2 00000e1f: LT 00000e20: PUSH2 0x0e2b 00000e23: JUMPI 00000e24: PUSH2 0x0e2b 00000e27: PUSH2 0x21d1 00000e2a: JUMP 00000e2b: JUMPDEST 00000e2c: SWAP1 00000e2d: POP 00000e2e: PUSH1 0x20 00000e30: MUL 00000e31: ADD 00000e32: PUSH1 0x20 00000e34: DUP2 00000e35: ADD 00000e36: SWAP1 00000e37: PUSH2 0x0e40 00000e3a: SWAP2 00000e3b: SWAP1 00000e3c: PUSH2 0x1fb3 00000e3f: JUMP 00000e40: JUMPDEST 00000e41: PUSH1 0x01 00000e43: PUSH1 0x01 00000e45: PUSH1 0xa0 00000e47: SHL 00000e48: SUB 00000e49: AND 00000e4a: SWAP2 00000e4b: SWAP1 00000e4c: PUSH2 0x1965 00000e4f: JUMP 00000e50: JUMPDEST 00000e51: PUSH32 0x9137e112a187039f8a3291c0a66fce97153d25ec42036e82360d5d0106d19a6e 00000e72: DUP11 00000e73: DUP11 00000e74: DUP4 00000e75: DUP2 00000e76: DUP2 00000e77: LT 00000e78: PUSH2 0x0e83 00000e7b: JUMPI 00000e7c: PUSH2 0x0e83 00000e7f: PUSH2 0x21d1 00000e82: JUMP 00000e83: JUMPDEST 00000e84: SWAP1 00000e85: POP 00000e86: PUSH1 0x20 00000e88: MUL 00000e89: ADD 00000e8a: PUSH1 0x20 00000e8c: DUP2 00000e8d: ADD 00000e8e: SWAP1 00000e8f: PUSH2 0x0e98 00000e92: SWAP2 00000e93: SWAP1 00000e94: PUSH2 0x1fb3 00000e97: JUMP 00000e98: JUMPDEST 00000e99: DUP10 00000e9a: DUP6 00000e9b: DUP5 00000e9c: DUP2 00000e9d: MLOAD 00000e9e: DUP2 00000e9f: LT 00000ea0: PUSH2 0x0eab 00000ea3: JUMPI 00000ea4: PUSH2 0x0eab 00000ea7: PUSH2 0x21d1 00000eaa: JUMP 00000eab: JUMPDEST 00000eac: PUSH1 0x20 00000eae: SWAP1 00000eaf: DUP2 00000eb0: MUL 00000eb1: SWAP2 00000eb2: SWAP1 00000eb3: SWAP2 00000eb4: ADD 00000eb5: DUP2 00000eb6: ADD 00000eb7: MLOAD 00000eb8: PUSH1 0x40 00000eba: DUP1 00000ebb: MLOAD 00000ebc: PUSH1 0x01 00000ebe: PUSH1 0x01 00000ec0: PUSH1 0xa0 00000ec2: SHL 00000ec3: SUB 00000ec4: SWAP6 00000ec5: DUP7 00000ec6: AND 00000ec7: DUP2 00000ec8: MSTORE 00000ec9: SWAP5 00000eca: SWAP1 00000ecb: SWAP4 00000ecc: AND 00000ecd: SWAP2 00000ece: DUP5 00000ecf: ADD 00000ed0: SWAP2 00000ed1: SWAP1 00000ed2: SWAP2 00000ed3: MSTORE 00000ed4: SWAP1 00000ed5: DUP3 00000ed6: ADD 00000ed7: MSTORE 00000ed8: PUSH1 0x60 00000eda: DUP2 00000edb: ADD 00000edc: DUP10 00000edd: SWAP1 00000ede: MSTORE 00000edf: PUSH1 0x80 00000ee1: DUP2 00000ee2: ADD 00000ee3: DUP9 00000ee4: SWAP1 00000ee5: MSTORE 00000ee6: PUSH1 0xa0 00000ee8: ADD 00000ee9: PUSH1 0x40 00000eeb: MLOAD 00000eec: DUP1 00000eed: SWAP2 00000eee: SUB 00000eef: SWAP1 00000ef0: LOG1 00000ef1: PUSH2 0x0efb 00000ef4: PUSH1 0x01 00000ef6: DUP3 00000ef7: PUSH2 0x21fe 00000efa: JUMP 00000efb: JUMPDEST 00000efc: SWAP1 00000efd: POP 00000efe: PUSH2 0x0df3 00000f01: JUMP 00000f02: JUMPDEST 00000f03: POP 00000f04: POP 00000f05: POP 00000f06: POP 00000f07: POP 00000f08: POP 00000f09: POP 00000f0a: POP 00000f0b: POP 00000f0c: POP 00000f0d: JUMP 00000f0e: JUMPDEST 00000f0f: PUSH1 0x00 00000f11: SLOAD 00000f12: PUSH2 0x0100 00000f15: SWAP1 00000f16: DIV 00000f17: PUSH1 0xff 00000f19: AND 00000f1a: ISZERO 00000f1b: DUP1 00000f1c: DUP1 00000f1d: ISZERO 00000f1e: PUSH2 0x0f2e 00000f21: JUMPI 00000f22: POP 00000f23: PUSH1 0x00 00000f25: SLOAD 00000f26: PUSH1 0x01 00000f28: PUSH1 0xff 00000f2a: SWAP1 00000f2b: SWAP2 00000f2c: AND 00000f2d: LT 00000f2e: JUMPDEST 00000f2f: DUP1 00000f30: PUSH2 0x0f48 00000f33: JUMPI 00000f34: POP 00000f35: ADDRESS 00000f36: EXTCODESIZE 00000f37: ISZERO 00000f38: DUP1 00000f39: ISZERO 00000f3a: PUSH2 0x0f48 00000f3d: JUMPI 00000f3e: POP 00000f3f: PUSH1 0x00 00000f41: SLOAD 00000f42: PUSH1 0xff 00000f44: AND 00000f45: PUSH1 0x01 00000f47: EQ 00000f48: JUMPDEST 00000f49: PUSH2 0x0fba 00000f4c: JUMPI 00000f4d: PUSH1 0x40 00000f4f: MLOAD 00000f50: PUSH3 0x461bcd 00000f54: PUSH1 0xe5 00000f56: SHL 00000f57: DUP2 00000f58: MSTORE 00000f59: PUSH1 0x20 00000f5b: PUSH1 0x04 00000f5d: DUP3 00000f5e: ADD 00000f5f: MSTORE 00000f60: PUSH1 0x2e 00000f62: PUSH1 0x24 00000f64: DUP3 00000f65: ADD 00000f66: MSTORE 00000f67: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561 00000f88: PUSH1 0x44 00000f8a: DUP3 00000f8b: ADD 00000f8c: MSTORE 00000f8d: PUSH32 0x647920696e697469616c697a6564000000000000000000000000000000000000 00000fae: PUSH1 0x64 00000fb0: DUP3 00000fb1: ADD 00000fb2: MSTORE 00000fb3: PUSH1 0x84 00000fb5: ADD 00000fb6: PUSH2 0x0535 00000fb9: JUMP 00000fba: JUMPDEST 00000fbb: PUSH1 0x00 00000fbd: DUP1 00000fbe: SLOAD 00000fbf: PUSH1 0xff 00000fc1: NOT 00000fc2: AND 00000fc3: PUSH1 0x01 00000fc5: OR 00000fc6: SWAP1 00000fc7: SSTORE 00000fc8: DUP1 00000fc9: ISZERO 00000fca: PUSH2 0x0fdd 00000fcd: JUMPI 00000fce: PUSH1 0x00 00000fd0: DUP1 00000fd1: SLOAD 00000fd2: PUSH2 0xff00 00000fd5: NOT 00000fd6: AND 00000fd7: PUSH2 0x0100 00000fda: OR 00000fdb: SWAP1 00000fdc: SSTORE 00000fdd: JUMPDEST 00000fde: PUSH2 0x0fe5 00000fe1: PUSH2 0x19e5 00000fe4: JUMP 00000fe5: JUMPDEST 00000fe6: PUSH2 0x0fee 00000fe9: CALLER 00000fea: PUSH2 0x17d1 00000fed: JUMP 00000fee: JUMPDEST 00000fef: PUSH1 0x66 00000ff1: DUP1 00000ff2: SLOAD 00000ff3: PUSH1 0x01 00000ff5: PUSH1 0x01 00000ff7: PUSH1 0xa0 00000ff9: SHL 00000ffa: SUB 00000ffb: DUP1 00000ffc: DUP9 00000ffd: AND 00000ffe: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000101f: SWAP3 00001020: DUP4 00001021: AND 00001022: OR 00001023: SWAP1 00001024: SWAP3 00001025: SSTORE 00001026: PUSH1 0x65 00001028: DUP1 00001029: SLOAD 0000102a: SWAP3 0000102b: DUP10 0000102c: AND 0000102d: SWAP3 0000102e: SWAP1 0000102f: SWAP2 00001030: AND 00001031: DUP3 00001032: OR 00001033: SWAP1 00001034: SSTORE 00001035: PUSH1 0x40 00001037: DUP1 00001038: MLOAD 00001039: PUSH32 0x90d92e7600000000000000000000000000000000000000000000000000000000 0000105a: DUP2 0000105b: MSTORE 0000105c: SWAP1 0000105d: MLOAD 0000105e: PUSH4 0x90d92e76 00001063: SWAP2 00001064: PUSH1 0x04 00001066: DUP1 00001067: DUP3 00001068: ADD 00001069: SWAP3 0000106a: PUSH1 0x20 0000106c: SWAP3 0000106d: SWAP1 0000106e: SWAP2 0000106f: SWAP1 00001070: DUP3 00001071: SWAP1 00001072: SUB 00001073: ADD 00001074: DUP2 00001075: DUP7 00001076: GAS 00001077: STATICCALL 00001078: ISZERO 00001079: DUP1 0000107a: ISZERO 0000107b: PUSH2 0x1088 0000107e: JUMPI 0000107f: RETURNDATASIZE 00001080: PUSH1 0x00 00001082: DUP1 00001083: RETURNDATACOPY 00001084: RETURNDATASIZE 00001085: PUSH1 0x00 00001087: REVERT 00001088: JUMPDEST 00001089: POP 0000108a: POP 0000108b: POP 0000108c: POP 0000108d: PUSH1 0x40 0000108f: MLOAD 00001090: RETURNDATASIZE 00001091: PUSH1 0x1f 00001093: NOT 00001094: PUSH1 0x1f 00001096: DUP3 00001097: ADD 00001098: AND 00001099: DUP3 0000109a: ADD 0000109b: DUP1 0000109c: PUSH1 0x40 0000109e: MSTORE 0000109f: POP 000010a0: DUP2 000010a1: ADD 000010a2: SWAP1 000010a3: PUSH2 0x10ac 000010a6: SWAP2 000010a7: SWAP1 000010a8: PUSH2 0x226e 000010ab: JUMP 000010ac: JUMPDEST 000010ad: PUSH1 0x67 000010af: SSTORE 000010b0: PUSH1 0x65 000010b2: SLOAD 000010b3: PUSH1 0x40 000010b5: DUP1 000010b6: MLOAD 000010b7: PUSH32 0x6d2beef100000000000000000000000000000000000000000000000000000000 000010d8: DUP2 000010d9: MSTORE 000010da: SWAP1 000010db: MLOAD 000010dc: PUSH1 0x0e 000010de: SWAP3 000010df: PUSH1 0x01 000010e1: PUSH1 0x01 000010e3: PUSH1 0xa0 000010e5: SHL 000010e6: SUB 000010e7: AND 000010e8: SWAP2 000010e9: PUSH4 0x6d2beef1 000010ee: SWAP2 000010ef: PUSH1 0x04 000010f1: DUP1 000010f2: DUP4 000010f3: ADD 000010f4: SWAP3 000010f5: PUSH1 0x20 000010f7: SWAP3 000010f8: SWAP2 000010f9: SWAP1 000010fa: DUP3 000010fb: SWAP1 000010fc: SUB 000010fd: ADD 000010fe: DUP2 000010ff: DUP7 00001100: GAS 00001101: STATICCALL 00001102: ISZERO 00001103: DUP1 00001104: ISZERO 00001105: PUSH2 0x1112 00001108: JUMPI 00001109: RETURNDATASIZE 0000110a: PUSH1 0x00 0000110c: DUP1 0000110d: RETURNDATACOPY 0000110e: RETURNDATASIZE 0000110f: PUSH1 0x00 00001111: REVERT 00001112: JUMPDEST 00001113: POP 00001114: POP 00001115: POP 00001116: POP 00001117: PUSH1 0x40 00001119: MLOAD 0000111a: RETURNDATASIZE 0000111b: PUSH1 0x1f 0000111d: NOT 0000111e: PUSH1 0x1f 00001120: DUP3 00001121: ADD 00001122: AND 00001123: DUP3 00001124: ADD 00001125: DUP1 00001126: PUSH1 0x40 00001128: MSTORE 00001129: POP 0000112a: DUP2 0000112b: ADD 0000112c: SWAP1 0000112d: PUSH2 0x1136 00001130: SWAP2 00001131: SWAP1 00001132: PUSH2 0x226e 00001135: JUMP 00001136: JUMPDEST 00001137: PUSH2 0x1140 0000113a: SWAP2 0000113b: SWAP1 0000113c: PUSH2 0x21e7 0000113f: JUMP 00001140: JUMPDEST 00001141: PUSH1 0x68 00001143: SSTORE 00001144: PUSH1 0x6e 00001146: DUP5 00001147: SWAP1 00001148: SSTORE 00001149: PUSH2 0x1152 0000114c: DUP4 0000114d: DUP4 0000114e: PUSH2 0x0ac4 00001151: JUMP 00001152: JUMPDEST 00001153: DUP1 00001154: ISZERO 00001155: PUSH2 0x1198 00001158: JUMPI 00001159: PUSH1 0x00 0000115b: DUP1 0000115c: SLOAD 0000115d: PUSH2 0xff00 00001160: NOT 00001161: AND 00001162: SWAP1 00001163: SSTORE 00001164: PUSH1 0x40 00001166: MLOAD 00001167: PUSH1 0x01 00001169: DUP2 0000116a: MSTORE 0000116b: PUSH32 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498 0000118c: SWAP1 0000118d: PUSH1 0x20 0000118f: ADD 00001190: PUSH1 0x40 00001192: MLOAD 00001193: DUP1 00001194: SWAP2 00001195: SUB 00001196: SWAP1 00001197: LOG1 00001198: JUMPDEST 00001199: POP 0000119a: POP 0000119b: POP 0000119c: POP 0000119d: POP 0000119e: POP 0000119f: JUMP 000011a0: JUMPDEST 000011a1: PUSH1 0x60 000011a3: PUSH1 0x00 000011a5: PUSH2 0x11ae 000011a8: DUP7 000011a9: DUP7 000011aa: PUSH2 0x2186 000011ad: JUMP 000011ae: JUMPDEST 000011af: PUSH2 0x11b9 000011b2: SWAP1 000011b3: PUSH1 0x01 000011b5: PUSH2 0x21fe 000011b8: JUMP 000011b9: JUMPDEST 000011ba: SWAP1 000011bb: POP 000011bc: DUP3 000011bd: DUP2 000011be: EQ 000011bf: PUSH2 0x1230 000011c2: JUMPI 000011c3: PUSH1 0x40 000011c5: MLOAD 000011c6: PUSH3 0x461bcd 000011ca: PUSH1 0xe5 000011cc: SHL 000011cd: DUP2 000011ce: MSTORE 000011cf: PUSH1 0x20 000011d1: PUSH1 0x04 000011d3: DUP3 000011d4: ADD 000011d5: MSTORE 000011d6: PUSH1 0x30 000011d8: PUSH1 0x24 000011da: DUP3 000011db: ADD 000011dc: MSTORE 000011dd: PUSH32 0x476f7665726e6f72526577617264733a20496e636f7272656374206e756d6265 000011fe: PUSH1 0x44 00001200: DUP3 00001201: ADD 00001202: MSTORE 00001203: PUSH32 0x72206f662068696e747320676976656e00000000000000000000000000000000 00001224: PUSH1 0x64 00001226: DUP3 00001227: ADD 00001228: MSTORE 00001229: PUSH1 0x84 0000122b: ADD 0000122c: PUSH2 0x0535 0000122f: JUMP 00001230: JUMPDEST 00001231: PUSH1 0x00 00001233: DUP2 00001234: PUSH8 0xffffffffffffffff 0000123d: DUP2 0000123e: GT 0000123f: ISZERO 00001240: PUSH2 0x124b 00001243: JUMPI 00001244: PUSH2 0x124b 00001247: PUSH2 0x21bb 0000124a: JUMP 0000124b: JUMPDEST 0000124c: PUSH1 0x40 0000124e: MLOAD 0000124f: SWAP1 00001250: DUP1 00001251: DUP3 00001252: MSTORE 00001253: DUP1 00001254: PUSH1 0x20 00001256: MUL 00001257: PUSH1 0x20 00001259: ADD 0000125a: DUP3 0000125b: ADD 0000125c: PUSH1 0x40 0000125e: MSTORE 0000125f: DUP1 00001260: ISZERO 00001261: PUSH2 0x1274 00001264: JUMPI 00001265: DUP2 00001266: PUSH1 0x20 00001268: ADD 00001269: PUSH1 0x20 0000126b: DUP3 0000126c: MUL 0000126d: DUP1 0000126e: CALLDATASIZE 0000126f: DUP4 00001270: CALLDATACOPY 00001271: ADD 00001272: SWAP1 00001273: POP 00001274: JUMPDEST 00001275: POP 00001276: SWAP1 00001277: POP 00001278: PUSH1 0x00 0000127a: JUMPDEST 0000127b: DUP3 0000127c: DUP2 0000127d: LT 0000127e: ISZERO 0000127f: PUSH2 0x1353 00001282: JUMPI 00001283: PUSH1 0x65 00001285: SLOAD 00001286: PUSH1 0x01 00001288: PUSH1 0x01 0000128a: PUSH1 0xa0 0000128c: SHL 0000128d: SUB 0000128e: AND 0000128f: PUSH4 0x681c637a 00001294: PUSH2 0x12a0 00001297: PUSH2 0x02c3 0000129a: DUP5 0000129b: DUP13 0000129c: PUSH2 0x21fe 0000129f: JUMP 000012a0: JUMPDEST 000012a1: DUP9 000012a2: DUP9 000012a3: DUP6 000012a4: DUP2 000012a5: DUP2 000012a6: LT 000012a7: PUSH2 0x12b2 000012aa: JUMPI 000012ab: PUSH2 0x12b2 000012ae: PUSH2 0x21d1 000012b1: JUMP 000012b2: JUMPDEST 000012b3: SWAP1 000012b4: POP 000012b5: PUSH1 0x20 000012b7: MUL 000012b8: ADD 000012b9: CALLDATALOAD 000012ba: PUSH1 0x40 000012bc: MLOAD 000012bd: DUP4 000012be: PUSH4 0xffffffff 000012c3: AND 000012c4: PUSH1 0xe0 000012c6: SHL 000012c7: DUP2 000012c8: MSTORE 000012c9: PUSH1 0x04 000012cb: ADD 000012cc: PUSH2 0x12df 000012cf: SWAP3 000012d0: SWAP2 000012d1: SWAP1 000012d2: SWAP2 000012d3: DUP3 000012d4: MSTORE 000012d5: PUSH1 0x20 000012d7: DUP3 000012d8: ADD 000012d9: MSTORE 000012da: PUSH1 0x40 000012dc: ADD 000012dd: SWAP1 000012de: JUMP 000012df: JUMPDEST 000012e0: PUSH1 0x60 000012e2: PUSH1 0x40 000012e4: MLOAD 000012e5: DUP1 000012e6: DUP4 000012e7: SUB 000012e8: DUP2 000012e9: DUP7 000012ea: GAS 000012eb: STATICCALL 000012ec: ISZERO 000012ed: DUP1 000012ee: ISZERO 000012ef: PUSH2 0x12fc 000012f2: JUMPI 000012f3: RETURNDATASIZE 000012f4: PUSH1 0x00 000012f6: DUP1 000012f7: RETURNDATACOPY 000012f8: RETURNDATASIZE 000012f9: PUSH1 0x00 000012fb: REVERT 000012fc: JUMPDEST 000012fd: POP 000012fe: POP 000012ff: POP 00001300: POP 00001301: PUSH1 0x40 00001303: MLOAD 00001304: RETURNDATASIZE 00001305: PUSH1 0x1f 00001307: NOT 00001308: PUSH1 0x1f 0000130a: DUP3 0000130b: ADD 0000130c: AND 0000130d: DUP3 0000130e: ADD 0000130f: DUP1 00001310: PUSH1 0x40 00001312: MSTORE 00001313: POP 00001314: DUP2 00001315: ADD 00001316: SWAP1 00001317: PUSH2 0x1320 0000131a: SWAP2 0000131b: SWAP1 0000131c: PUSH2 0x2287 0000131f: JUMP 00001320: JUMPDEST 00001321: PUSH1 0x20 00001323: ADD 00001324: MLOAD 00001325: DUP3 00001326: DUP3 00001327: DUP2 00001328: MLOAD 00001329: DUP2 0000132a: LT 0000132b: PUSH2 0x1336 0000132e: JUMPI 0000132f: PUSH2 0x1336 00001332: PUSH2 0x21d1 00001335: JUMP 00001336: JUMPDEST 00001337: PUSH1 0x20 00001339: SWAP1 0000133a: DUP2 0000133b: MUL 0000133c: SWAP2 0000133d: SWAP1 0000133e: SWAP2 0000133f: ADD 00001340: ADD 00001341: MSTORE 00001342: PUSH2 0x134c 00001345: PUSH1 0x01 00001347: DUP3 00001348: PUSH2 0x21fe 0000134b: JUMP 0000134c: JUMPDEST 0000134d: SWAP1 0000134e: POP 0000134f: PUSH2 0x127a 00001352: JUMP 00001353: JUMPDEST 00001354: POP 00001355: SWAP2 00001356: POP 00001357: POP 00001358: JUMPDEST 00001359: SWAP5 0000135a: SWAP4 0000135b: POP 0000135c: POP 0000135d: POP 0000135e: POP 0000135f: JUMP 00001360: JUMPDEST 00001361: PUSH1 0x00 00001363: PUSH2 0x136c 00001366: DUP8 00001367: DUP8 00001368: PUSH2 0x2186 0000136b: JUMP 0000136c: JUMPDEST 0000136d: PUSH2 0x1377 00001370: SWAP1 00001371: PUSH1 0x01 00001373: PUSH2 0x21fe 00001376: JUMP 00001377: JUMPDEST 00001378: SWAP1 00001379: POP 0000137a: PUSH1 0x6e 0000137c: SLOAD 0000137d: DUP8 0000137e: GT 0000137f: ISZERO 00001380: PUSH2 0x13f1 00001383: JUMPI 00001384: PUSH1 0x40 00001386: MLOAD 00001387: PUSH3 0x461bcd 0000138b: PUSH1 0xe5 0000138d: SHL 0000138e: DUP2 0000138f: MSTORE 00001390: PUSH1 0x20 00001392: PUSH1 0x04 00001394: DUP3 00001395: ADD 00001396: MSTORE 00001397: PUSH1 0x2b 00001399: PUSH1 0x24 0000139b: DUP3 0000139c: ADD 0000139d: MSTORE 0000139e: PUSH32 0x476f7665726e6f72526577617264733a205374617274696e6720696e74657276 000013bf: PUSH1 0x44 000013c1: DUP3 000013c2: ADD 000013c3: MSTORE 000013c4: PUSH32 0x616c20746f6f206c617465000000000000000000000000000000000000000000 000013e5: PUSH1 0x64 000013e7: DUP3 000013e8: ADD 000013e9: MSTORE 000013ea: PUSH1 0x84 000013ec: ADD 000013ed: PUSH2 0x0535 000013f0: JUMP 000013f1: JUMPDEST 000013f2: PUSH2 0x13f9 000013f5: PUSH2 0x0aa7 000013f8: JUMP 000013f9: JUMPDEST 000013fa: DUP7 000013fb: GT 000013fc: ISZERO 000013fd: PUSH2 0x146e 00001400: JUMPI 00001401: PUSH1 0x40 00001403: MLOAD 00001404: PUSH3 0x461bcd 00001408: PUSH1 0xe5 0000140a: SHL 0000140b: DUP2 0000140c: MSTORE 0000140d: PUSH1 0x20 0000140f: PUSH1 0x04 00001411: DUP3 00001412: ADD 00001413: MSTORE 00001414: PUSH1 0x30 00001416: PUSH1 0x24 00001418: DUP3 00001419: ADD 0000141a: MSTORE 0000141b: PUSH32 0x476f7665726e6f72526577617264733a2043616e277420707265666574636820 0000143c: PUSH1 0x44 0000143e: DUP3 0000143f: ADD 00001440: MSTORE 00001441: PUSH32 0x66757475726520696e74657276616c7300000000000000000000000000000000 00001462: PUSH1 0x64 00001464: DUP3 00001465: ADD 00001466: MSTORE 00001467: PUSH1 0x84 00001469: ADD 0000146a: PUSH2 0x0535 0000146d: JUMP 0000146e: JUMPDEST 0000146f: PUSH1 0x00 00001471: PUSH2 0x147c 00001474: DUP9 00001475: DUP9 00001476: DUP9 00001477: DUP9 00001478: PUSH2 0x11a0 0000147b: JUMP 0000147c: JUMPDEST 0000147d: SWAP1 0000147e: POP 0000147f: PUSH1 0x00 00001481: JUMPDEST 00001482: DUP3 00001483: DUP2 00001484: LT 00001485: ISZERO 00001486: PUSH2 0x14d6 00001489: JUMPI 0000148a: DUP2 0000148b: DUP2 0000148c: DUP2 0000148d: MLOAD 0000148e: DUP2 0000148f: LT 00001490: PUSH2 0x149b 00001493: JUMPI 00001494: PUSH2 0x149b 00001497: PUSH2 0x21d1 0000149a: JUMP 0000149b: JUMPDEST 0000149c: PUSH1 0x20 0000149e: MUL 0000149f: PUSH1 0x20 000014a1: ADD 000014a2: ADD 000014a3: MLOAD 000014a4: PUSH1 0x6f 000014a6: PUSH1 0x00 000014a8: DUP4 000014a9: DUP13 000014aa: PUSH2 0x14b3 000014ad: SWAP2 000014ae: SWAP1 000014af: PUSH2 0x21fe 000014b2: JUMP 000014b3: JUMPDEST 000014b4: DUP2 000014b5: MSTORE 000014b6: PUSH1 0x20 000014b8: DUP2 000014b9: ADD 000014ba: SWAP2 000014bb: SWAP1 000014bc: SWAP2 000014bd: MSTORE 000014be: PUSH1 0x40 000014c0: ADD 000014c1: PUSH1 0x00 000014c3: KECCAK256 000014c4: SSTORE 000014c5: PUSH2 0x14cf 000014c8: PUSH1 0x01 000014ca: DUP3 000014cb: PUSH2 0x21fe 000014ce: JUMP 000014cf: JUMPDEST 000014d0: SWAP1 000014d1: POP 000014d2: PUSH2 0x1481 000014d5: JUMP 000014d6: JUMPDEST 000014d7: POP 000014d8: PUSH2 0x14e2 000014db: DUP8 000014dc: PUSH1 0x01 000014de: PUSH2 0x21fe 000014e1: JUMP 000014e2: JUMPDEST 000014e3: PUSH1 0x6e 000014e5: SSTORE 000014e6: PUSH1 0x00 000014e8: JUMPDEST 000014e9: DUP4 000014ea: DUP2 000014eb: LT 000014ec: ISZERO 000014ed: PUSH2 0x152c 000014f0: JUMPI 000014f1: PUSH2 0x151a 000014f4: DUP6 000014f5: DUP6 000014f6: DUP4 000014f7: DUP2 000014f8: DUP2 000014f9: LT 000014fa: PUSH2 0x1505 000014fd: JUMPI 000014fe: PUSH2 0x1505 00001501: PUSH2 0x21d1 00001504: JUMP 00001505: JUMPDEST 00001506: SWAP1 00001507: POP 00001508: PUSH1 0x20 0000150a: MUL 0000150b: ADD 0000150c: PUSH1 0x20 0000150e: DUP2 0000150f: ADD 00001510: SWAP1 00001511: PUSH2 0x0469 00001514: SWAP2 00001515: SWAP1 00001516: PUSH2 0x1fb3 00001519: JUMP 0000151a: JUMPDEST 0000151b: PUSH2 0x1525 0000151e: PUSH1 0x01 00001520: DUP3 00001521: PUSH2 0x21fe 00001524: JUMP 00001525: JUMPDEST 00001526: SWAP1 00001527: POP 00001528: PUSH2 0x14e8 0000152b: JUMP 0000152c: JUMPDEST 0000152d: POP 0000152e: POP 0000152f: POP 00001530: POP 00001531: POP 00001532: POP 00001533: POP 00001534: POP 00001535: POP 00001536: JUMP 00001537: JUMPDEST 00001538: PUSH2 0x153f 0000153b: PUSH2 0x18a1 0000153e: JUMP 0000153f: JUMPDEST 00001540: PUSH1 0x00 00001542: SWAP1 00001543: DUP2 00001544: MSTORE 00001545: PUSH1 0x70 00001547: PUSH1 0x20 00001549: MSTORE 0000154a: PUSH1 0x40 0000154c: SWAP1 0000154d: KECCAK256 0000154e: DUP1 0000154f: SLOAD 00001550: PUSH1 0xff 00001552: NOT 00001553: AND 00001554: SWAP1 00001555: SSTORE 00001556: JUMP 00001557: JUMPDEST 00001558: PUSH1 0x01 0000155a: PUSH1 0x01 0000155c: PUSH1 0xa0 0000155e: SHL 0000155f: SUB 00001560: DUP2 00001561: AND 00001562: PUSH1 0x00 00001564: SWAP1 00001565: DUP2 00001566: MSTORE 00001567: PUSH1 0x6c 00001569: PUSH1 0x20 0000156b: MSTORE 0000156c: PUSH1 0x40 0000156e: SWAP1 0000156f: KECCAK256 00001570: SLOAD 00001571: PUSH1 0xff 00001573: AND 00001574: PUSH2 0x15e5 00001577: JUMPI 00001578: PUSH1 0x40 0000157a: MLOAD 0000157b: PUSH3 0x461bcd 0000157f: PUSH1 0xe5 00001581: SHL 00001582: DUP2 00001583: MSTORE 00001584: PUSH1 0x20 00001586: PUSH1 0x04 00001588: DUP3 00001589: ADD 0000158a: MSTORE 0000158b: PUSH1 0x32 0000158d: PUSH1 0x24 0000158f: DUP3 00001590: ADD 00001591: MSTORE 00001592: PUSH32 0x476f7665726e6f72526577617264733a20546f6b656e206973206e6f74206f6e 000015b3: PUSH1 0x44 000015b5: DUP3 000015b6: ADD 000015b7: MSTORE 000015b8: PUSH32 0x20646973747269627574696f6e206c6973740000000000000000000000000000 000015d9: PUSH1 0x64 000015db: DUP3 000015dc: ADD 000015dd: MSTORE 000015de: PUSH1 0x84 000015e0: ADD 000015e1: PUSH2 0x0535 000015e4: JUMP 000015e5: JUMPDEST 000015e6: PUSH1 0x01 000015e8: PUSH1 0x01 000015ea: PUSH1 0xa0 000015ec: SHL 000015ed: SUB 000015ee: DUP2 000015ef: AND 000015f0: PUSH1 0x00 000015f2: SWAP1 000015f3: DUP2 000015f4: MSTORE 000015f5: PUSH1 0x6d 000015f7: PUSH1 0x20 000015f9: MSTORE 000015fa: PUSH1 0x40 000015fc: DUP2 000015fd: KECCAK256 000015fe: SLOAD 000015ff: PUSH1 0x6e 00001601: SLOAD 00001602: SWAP1 00001603: SWAP2 00001604: SWAP1 00001605: PUSH2 0x1610 00001608: SWAP1 00001609: PUSH1 0x01 0000160b: SWAP1 0000160c: PUSH2 0x2186 0000160f: JUMP 00001610: JUMPDEST 00001611: PUSH1 0x66 00001613: SLOAD 00001614: PUSH1 0x40 00001616: MLOAD 00001617: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00001638: DUP2 00001639: MSTORE 0000163a: PUSH1 0x01 0000163c: PUSH1 0x01 0000163e: PUSH1 0xa0 00001640: SHL 00001641: SUB 00001642: SWAP2 00001643: DUP3 00001644: AND 00001645: PUSH1 0x04 00001647: DUP3 00001648: ADD 00001649: MSTORE 0000164a: SWAP2 0000164b: SWAP3 0000164c: POP 0000164d: PUSH1 0x00 0000164f: SWAP2 00001650: SWAP1 00001651: DUP6 00001652: AND 00001653: SWAP1 00001654: PUSH4 0x70a08231 00001659: SWAP1 0000165a: PUSH1 0x24 0000165c: ADD 0000165d: PUSH1 0x20 0000165f: PUSH1 0x40 00001661: MLOAD 00001662: DUP1 00001663: DUP4 00001664: SUB 00001665: DUP2 00001666: DUP7 00001667: GAS 00001668: STATICCALL 00001669: ISZERO 0000166a: DUP1 0000166b: ISZERO 0000166c: PUSH2 0x1679 0000166f: JUMPI 00001670: RETURNDATASIZE 00001671: PUSH1 0x00 00001673: DUP1 00001674: RETURNDATACOPY 00001675: RETURNDATASIZE 00001676: PUSH1 0x00 00001678: REVERT 00001679: JUMPDEST 0000167a: POP 0000167b: POP 0000167c: POP 0000167d: POP 0000167e: PUSH1 0x40 00001680: MLOAD 00001681: RETURNDATASIZE 00001682: PUSH1 0x1f 00001684: NOT 00001685: PUSH1 0x1f 00001687: DUP3 00001688: ADD 00001689: AND 0000168a: DUP3 0000168b: ADD 0000168c: DUP1 0000168d: PUSH1 0x40 0000168f: MSTORE 00001690: POP 00001691: DUP2 00001692: ADD 00001693: SWAP1 00001694: PUSH2 0x169d 00001697: SWAP2 00001698: SWAP1 00001699: PUSH2 0x226e 0000169c: JUMP 0000169d: JUMPDEST 0000169e: SWAP1 0000169f: POP 000016a0: PUSH1 0x00 000016a2: DUP4 000016a3: JUMPDEST 000016a4: DUP4 000016a5: DUP2 000016a6: GT 000016a7: PUSH2 0x172f 000016aa: JUMPI 000016ab: PUSH1 0x00 000016ad: DUP2 000016ae: DUP2 000016af: MSTORE 000016b0: PUSH1 0x6f 000016b2: PUSH1 0x20 000016b4: MSTORE 000016b5: PUSH1 0x40 000016b7: SWAP1 000016b8: KECCAK256 000016b9: SLOAD 000016ba: ISZERO 000016bb: PUSH2 0x171d 000016be: JUMPI 000016bf: PUSH1 0x00 000016c1: PUSH2 0x2710 000016c4: PUSH1 0x69 000016c6: SLOAD 000016c7: DUP6 000016c8: PUSH2 0x16d1 000016cb: SWAP2 000016cc: SWAP1 000016cd: PUSH2 0x21e7 000016d0: JUMP 000016d1: JUMPDEST 000016d2: PUSH2 0x16db 000016d5: SWAP2 000016d6: SWAP1 000016d7: PUSH2 0x2199 000016da: JUMP 000016db: JUMPDEST 000016dc: PUSH1 0x01 000016de: PUSH1 0x01 000016e0: PUSH1 0xa0 000016e2: SHL 000016e3: SUB 000016e4: DUP9 000016e5: AND 000016e6: PUSH1 0x00 000016e8: SWAP1 000016e9: DUP2 000016ea: MSTORE 000016eb: PUSH1 0x6b 000016ed: PUSH1 0x20 000016ef: SWAP1 000016f0: DUP2 000016f1: MSTORE 000016f2: PUSH1 0x40 000016f4: DUP1 000016f5: DUP4 000016f6: KECCAK256 000016f7: DUP7 000016f8: DUP5 000016f9: MSTORE 000016fa: SWAP1 000016fb: SWAP2 000016fc: MSTORE 000016fd: SWAP1 000016fe: KECCAK256 000016ff: DUP2 00001700: SWAP1 00001701: SSTORE 00001702: SWAP1 00001703: POP 00001704: PUSH2 0x170d 00001707: DUP2 00001708: DUP5 00001709: PUSH2 0x21fe 0000170c: JUMP 0000170d: JUMPDEST 0000170e: SWAP3 0000170f: POP 00001710: PUSH2 0x1719 00001713: DUP2 00001714: DUP6 00001715: PUSH2 0x2186 00001718: JUMP 00001719: JUMPDEST 0000171a: SWAP4 0000171b: POP 0000171c: POP 0000171d: JUMPDEST 0000171e: DUP1 0000171f: PUSH2 0x1727 00001722: DUP2 00001723: PUSH2 0x22f1 00001726: JUMP 00001727: JUMPDEST 00001728: SWAP2 00001729: POP 0000172a: POP 0000172b: PUSH2 0x16a3 0000172e: JUMP 0000172f: JUMPDEST 00001730: POP 00001731: PUSH2 0x173b 00001734: DUP4 00001735: PUSH1 0x01 00001737: PUSH2 0x21fe 0000173a: JUMP 0000173b: JUMPDEST 0000173c: PUSH1 0x01 0000173e: PUSH1 0x01 00001740: PUSH1 0xa0 00001742: SHL 00001743: SUB 00001744: DUP7 00001745: DUP2 00001746: AND 00001747: PUSH1 0x00 00001749: DUP2 0000174a: DUP2 0000174b: MSTORE 0000174c: PUSH1 0x6d 0000174e: PUSH1 0x20 00001750: MSTORE 00001751: PUSH1 0x40 00001753: SWAP1 00001754: DUP2 00001755: SWAP1 00001756: KECCAK256 00001757: SWAP4 00001758: SWAP1 00001759: SWAP4 0000175a: SSTORE 0000175b: PUSH1 0x66 0000175d: SLOAD 0000175e: SWAP3 0000175f: MLOAD 00001760: PUSH32 0x9db5dbe400000000000000000000000000000000000000000000000000000000 00001781: DUP2 00001782: MSTORE 00001783: PUSH1 0x04 00001785: DUP2 00001786: ADD 00001787: SWAP2 00001788: SWAP1 00001789: SWAP2 0000178a: MSTORE 0000178b: ADDRESS 0000178c: PUSH1 0x24 0000178e: DUP3 0000178f: ADD 00001790: MSTORE 00001791: PUSH1 0x44 00001793: DUP2 00001794: ADD 00001795: DUP5 00001796: SWAP1 00001797: MSTORE 00001798: SWAP2 00001799: AND 0000179a: SWAP1 0000179b: PUSH4 0x9db5dbe4 000017a0: SWAP1 000017a1: PUSH1 0x64 000017a3: ADD 000017a4: PUSH1 0x00 000017a6: PUSH1 0x40 000017a8: MLOAD 000017a9: DUP1 000017aa: DUP4 000017ab: SUB 000017ac: DUP2 000017ad: PUSH1 0x00 000017af: DUP8 000017b0: DUP1 000017b1: EXTCODESIZE 000017b2: ISZERO 000017b3: DUP1 000017b4: ISZERO 000017b5: PUSH2 0x17bd 000017b8: JUMPI 000017b9: PUSH1 0x00 000017bb: DUP1 000017bc: REVERT 000017bd: JUMPDEST 000017be: POP 000017bf: GAS 000017c0: CALL 000017c1: ISZERO 000017c2: DUP1 000017c3: ISZERO 000017c4: PUSH2 0x152c 000017c7: JUMPI 000017c8: RETURNDATASIZE 000017c9: PUSH1 0x00 000017cb: DUP1 000017cc: RETURNDATACOPY 000017cd: RETURNDATASIZE 000017ce: PUSH1 0x00 000017d0: REVERT 000017d1: JUMPDEST 000017d2: PUSH2 0x17d9 000017d5: PUSH2 0x18a1 000017d8: JUMP 000017d9: JUMPDEST 000017da: PUSH1 0x01 000017dc: PUSH1 0x01 000017de: PUSH1 0xa0 000017e0: SHL 000017e1: SUB 000017e2: DUP2 000017e3: AND 000017e4: PUSH2 0x1855 000017e7: JUMPI 000017e8: PUSH1 0x40 000017ea: MLOAD 000017eb: PUSH3 0x461bcd 000017ef: PUSH1 0xe5 000017f1: SHL 000017f2: DUP2 000017f3: MSTORE 000017f4: PUSH1 0x20 000017f6: PUSH1 0x04 000017f8: DUP3 000017f9: ADD 000017fa: MSTORE 000017fb: PUSH1 0x26 000017fd: PUSH1 0x24 000017ff: DUP3 00001800: ADD 00001801: MSTORE 00001802: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 00001823: PUSH1 0x44 00001825: DUP3 00001826: ADD 00001827: MSTORE 00001828: PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 00001849: PUSH1 0x64 0000184b: DUP3 0000184c: ADD 0000184d: MSTORE 0000184e: PUSH1 0x84 00001850: ADD 00001851: PUSH2 0x0535 00001854: JUMP 00001855: JUMPDEST 00001856: PUSH2 0x05e7 00001859: DUP2 0000185a: PUSH2 0x18fb 0000185d: JUMP 0000185e: JUMPDEST 0000185f: PUSH1 0x01 00001861: PUSH1 0x01 00001863: PUSH1 0xa0 00001865: SHL 00001866: SUB 00001867: DUP4 00001868: DUP2 00001869: AND 0000186a: PUSH1 0x00 0000186c: SWAP1 0000186d: DUP2 0000186e: MSTORE 0000186f: PUSH1 0x6a 00001871: PUSH1 0x20 00001873: SWAP1 00001874: DUP2 00001875: MSTORE 00001876: PUSH1 0x40 00001878: DUP1 00001879: DUP4 0000187a: KECCAK256 0000187b: SWAP4 0000187c: DUP7 0000187d: AND 0000187e: DUP4 0000187f: MSTORE 00001880: SWAP3 00001881: DUP2 00001882: MSTORE 00001883: DUP3 00001884: DUP3 00001885: KECCAK256 00001886: PUSH1 0x08 00001888: DUP6 00001889: SWAP1 0000188a: SHR 0000188b: DUP4 0000188c: MSTORE 0000188d: SWAP1 0000188e: MSTORE 0000188f: SWAP1 00001890: DUP2 00001891: KECCAK256 00001892: SLOAD 00001893: PUSH1 0x01 00001895: PUSH1 0xff 00001897: DUP5 00001898: AND 00001899: SHL 0000189a: AND 0000189b: ISZERO 0000189c: ISZERO 0000189d: PUSH2 0x1358 000018a0: JUMP 000018a1: JUMPDEST 000018a2: PUSH1 0x33 000018a4: SLOAD 000018a5: PUSH1 0x01 000018a7: PUSH1 0x01 000018a9: PUSH1 0xa0 000018ab: SHL 000018ac: SUB 000018ad: AND 000018ae: CALLER 000018af: EQ 000018b0: PUSH2 0x0c4c 000018b3: JUMPI 000018b4: PUSH1 0x40 000018b6: MLOAD 000018b7: PUSH3 0x461bcd 000018bb: PUSH1 0xe5 000018bd: SHL 000018be: DUP2 000018bf: MSTORE 000018c0: PUSH1 0x20 000018c2: PUSH1 0x04 000018c4: DUP3 000018c5: ADD 000018c6: DUP2 000018c7: SWAP1 000018c8: MSTORE 000018c9: PUSH1 0x24 000018cb: DUP3 000018cc: ADD 000018cd: MSTORE 000018ce: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000018ef: PUSH1 0x44 000018f1: DUP3 000018f2: ADD 000018f3: MSTORE 000018f4: PUSH1 0x64 000018f6: ADD 000018f7: PUSH2 0x0535 000018fa: JUMP 000018fb: JUMPDEST 000018fc: PUSH1 0x33 000018fe: DUP1 000018ff: SLOAD 00001900: PUSH1 0x01 00001902: PUSH1 0x01 00001904: PUSH1 0xa0 00001906: SHL 00001907: SUB 00001908: DUP4 00001909: DUP2 0000190a: AND 0000190b: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000192c: DUP4 0000192d: AND 0000192e: DUP2 0000192f: OR 00001930: SWAP1 00001931: SWAP4 00001932: SSTORE 00001933: PUSH1 0x40 00001935: MLOAD 00001936: SWAP2 00001937: AND 00001938: SWAP2 00001939: SWAP1 0000193a: DUP3 0000193b: SWAP1 0000193c: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 0000195d: SWAP1 0000195e: PUSH1 0x00 00001960: SWAP1 00001961: LOG3 00001962: POP 00001963: POP 00001964: JUMP 00001965: JUMPDEST 00001966: PUSH1 0x40 00001968: DUP1 00001969: MLOAD 0000196a: PUSH1 0x01 0000196c: PUSH1 0x01 0000196e: PUSH1 0xa0 00001970: SHL 00001971: SUB 00001972: DUP5 00001973: AND 00001974: PUSH1 0x24 00001976: DUP3 00001977: ADD 00001978: MSTORE 00001979: PUSH1 0x44 0000197b: DUP1 0000197c: DUP3 0000197d: ADD 0000197e: DUP5 0000197f: SWAP1 00001980: MSTORE 00001981: DUP3 00001982: MLOAD 00001983: DUP1 00001984: DUP4 00001985: SUB 00001986: SWAP1 00001987: SWAP2 00001988: ADD 00001989: DUP2 0000198a: MSTORE 0000198b: PUSH1 0x64 0000198d: SWAP1 0000198e: SWAP2 0000198f: ADD 00001990: SWAP1 00001991: SWAP2 00001992: MSTORE 00001993: PUSH1 0x20 00001995: DUP2 00001996: ADD 00001997: DUP1 00001998: MLOAD 00001999: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000019b6: AND 000019b7: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000019d8: OR 000019d9: SWAP1 000019da: MSTORE 000019db: PUSH2 0x0b8b 000019de: SWAP1 000019df: DUP5 000019e0: SWAP1 000019e1: PUSH2 0x1a6a 000019e4: JUMP 000019e5: JUMPDEST 000019e6: PUSH1 0x00 000019e8: SLOAD 000019e9: PUSH2 0x0100 000019ec: SWAP1 000019ed: DIV 000019ee: PUSH1 0xff 000019f0: AND 000019f1: PUSH2 0x1a62 000019f4: JUMPI 000019f5: PUSH1 0x40 000019f7: MLOAD 000019f8: PUSH3 0x461bcd 000019fc: PUSH1 0xe5 000019fe: SHL 000019ff: DUP2 00001a00: MSTORE 00001a01: PUSH1 0x20 00001a03: PUSH1 0x04 00001a05: DUP3 00001a06: ADD 00001a07: MSTORE 00001a08: PUSH1 0x2b 00001a0a: PUSH1 0x24 00001a0c: DUP3 00001a0d: ADD 00001a0e: MSTORE 00001a0f: PUSH32 0x496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069 00001a30: PUSH1 0x44 00001a32: DUP3 00001a33: ADD 00001a34: MSTORE 00001a35: PUSH32 0x6e697469616c697a696e67000000000000000000000000000000000000000000 00001a56: PUSH1 0x64 00001a58: DUP3 00001a59: ADD 00001a5a: MSTORE 00001a5b: PUSH1 0x84 00001a5d: ADD 00001a5e: PUSH2 0x0535 00001a61: JUMP 00001a62: JUMPDEST 00001a63: PUSH2 0x0c4c 00001a66: PUSH2 0x1b4f 00001a69: JUMP 00001a6a: JUMPDEST 00001a6b: PUSH1 0x00 00001a6d: PUSH2 0x1abf 00001a70: DUP3 00001a71: PUSH1 0x40 00001a73: MLOAD 00001a74: DUP1 00001a75: PUSH1 0x40 00001a77: ADD 00001a78: PUSH1 0x40 00001a7a: MSTORE 00001a7b: DUP1 00001a7c: PUSH1 0x20 00001a7e: DUP2 00001a7f: MSTORE 00001a80: PUSH1 0x20 00001a82: ADD 00001a83: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 00001aa4: DUP2 00001aa5: MSTORE 00001aa6: POP 00001aa7: DUP6 00001aa8: PUSH1 0x01 00001aaa: PUSH1 0x01 00001aac: PUSH1 0xa0 00001aae: SHL 00001aaf: SUB 00001ab0: AND 00001ab1: PUSH2 0x1bd5 00001ab4: SWAP1 00001ab5: SWAP3 00001ab6: SWAP2 00001ab7: SWAP1 00001ab8: PUSH4 0xffffffff 00001abd: AND 00001abe: JUMP 00001abf: JUMPDEST 00001ac0: DUP1 00001ac1: MLOAD 00001ac2: SWAP1 00001ac3: SWAP2 00001ac4: POP 00001ac5: ISZERO 00001ac6: PUSH2 0x0b8b 00001ac9: JUMPI 00001aca: DUP1 00001acb: DUP1 00001acc: PUSH1 0x20 00001ace: ADD 00001acf: SWAP1 00001ad0: MLOAD 00001ad1: DUP2 00001ad2: ADD 00001ad3: SWAP1 00001ad4: PUSH2 0x1add 00001ad7: SWAP2 00001ad8: SWAP1 00001ad9: PUSH2 0x230a 00001adc: JUMP 00001add: JUMPDEST 00001ade: PUSH2 0x0b8b 00001ae1: JUMPI 00001ae2: PUSH1 0x40 00001ae4: MLOAD 00001ae5: PUSH3 0x461bcd 00001ae9: PUSH1 0xe5 00001aeb: SHL 00001aec: DUP2 00001aed: MSTORE 00001aee: PUSH1 0x20 00001af0: PUSH1 0x04 00001af2: DUP3 00001af3: ADD 00001af4: MSTORE 00001af5: PUSH1 0x2a 00001af7: PUSH1 0x24 00001af9: DUP3 00001afa: ADD 00001afb: MSTORE 00001afc: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e 00001b1d: PUSH1 0x44 00001b1f: DUP3 00001b20: ADD 00001b21: MSTORE 00001b22: PUSH32 0x6f74207375636365656400000000000000000000000000000000000000000000 00001b43: PUSH1 0x64 00001b45: DUP3 00001b46: ADD 00001b47: MSTORE 00001b48: PUSH1 0x84 00001b4a: ADD 00001b4b: PUSH2 0x0535 00001b4e: JUMP 00001b4f: JUMPDEST 00001b50: PUSH1 0x00 00001b52: SLOAD 00001b53: PUSH2 0x0100 00001b56: SWAP1 00001b57: DIV 00001b58: PUSH1 0xff 00001b5a: AND 00001b5b: PUSH2 0x1bcc 00001b5e: JUMPI 00001b5f: PUSH1 0x40 00001b61: MLOAD 00001b62: PUSH3 0x461bcd 00001b66: PUSH1 0xe5 00001b68: SHL 00001b69: DUP2 00001b6a: MSTORE 00001b6b: PUSH1 0x20 00001b6d: PUSH1 0x04 00001b6f: DUP3 00001b70: ADD 00001b71: MSTORE 00001b72: PUSH1 0x2b 00001b74: PUSH1 0x24 00001b76: DUP3 00001b77: ADD 00001b78: MSTORE 00001b79: PUSH32 0x496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069 00001b9a: PUSH1 0x44 00001b9c: DUP3 00001b9d: ADD 00001b9e: MSTORE 00001b9f: PUSH32 0x6e697469616c697a696e67000000000000000000000000000000000000000000 00001bc0: PUSH1 0x64 00001bc2: DUP3 00001bc3: ADD 00001bc4: MSTORE 00001bc5: PUSH1 0x84 00001bc7: ADD 00001bc8: PUSH2 0x0535 00001bcb: JUMP 00001bcc: JUMPDEST 00001bcd: PUSH2 0x0c4c 00001bd0: CALLER 00001bd1: PUSH2 0x18fb 00001bd4: JUMP 00001bd5: JUMPDEST 00001bd6: PUSH1 0x60 00001bd8: PUSH2 0x1358 00001bdb: DUP5 00001bdc: DUP5 00001bdd: PUSH1 0x00 00001bdf: DUP6 00001be0: DUP6 00001be1: PUSH1 0x00 00001be3: DUP1 00001be4: DUP7 00001be5: PUSH1 0x01 00001be7: PUSH1 0x01 00001be9: PUSH1 0xa0 00001beb: SHL 00001bec: SUB 00001bed: AND 00001bee: DUP6 00001bef: DUP8 00001bf0: PUSH1 0x40 00001bf2: MLOAD 00001bf3: PUSH2 0x1bfc 00001bf6: SWAP2 00001bf7: SWAP1 00001bf8: PUSH2 0x234b 00001bfb: JUMP 00001bfc: JUMPDEST 00001bfd: PUSH1 0x00 00001bff: PUSH1 0x40 00001c01: MLOAD 00001c02: DUP1 00001c03: DUP4 00001c04: SUB 00001c05: DUP2 00001c06: DUP6 00001c07: DUP8 00001c08: GAS 00001c09: CALL 00001c0a: SWAP3 00001c0b: POP 00001c0c: POP 00001c0d: POP 00001c0e: RETURNDATASIZE 00001c0f: DUP1 00001c10: PUSH1 0x00 00001c12: DUP2 00001c13: EQ 00001c14: PUSH2 0x1c39 00001c17: JUMPI 00001c18: PUSH1 0x40 00001c1a: MLOAD 00001c1b: SWAP2 00001c1c: POP 00001c1d: PUSH1 0x1f 00001c1f: NOT 00001c20: PUSH1 0x3f 00001c22: RETURNDATASIZE 00001c23: ADD 00001c24: AND 00001c25: DUP3 00001c26: ADD 00001c27: PUSH1 0x40 00001c29: MSTORE 00001c2a: RETURNDATASIZE 00001c2b: DUP3 00001c2c: MSTORE 00001c2d: RETURNDATASIZE 00001c2e: PUSH1 0x00 00001c30: PUSH1 0x20 00001c32: DUP5 00001c33: ADD 00001c34: RETURNDATACOPY 00001c35: PUSH2 0x1c3e 00001c38: JUMP 00001c39: JUMPDEST 00001c3a: PUSH1 0x60 00001c3c: SWAP2 00001c3d: POP 00001c3e: JUMPDEST 00001c3f: POP 00001c40: SWAP2 00001c41: POP 00001c42: SWAP2 00001c43: POP 00001c44: PUSH2 0x1c4f 00001c47: DUP8 00001c48: DUP4 00001c49: DUP4 00001c4a: DUP8 00001c4b: PUSH2 0x1c5a 00001c4e: JUMP 00001c4f: JUMPDEST 00001c50: SWAP8 00001c51: SWAP7 00001c52: POP 00001c53: POP 00001c54: POP 00001c55: POP 00001c56: POP 00001c57: POP 00001c58: POP 00001c59: JUMP 00001c5a: JUMPDEST 00001c5b: PUSH1 0x60 00001c5d: DUP4 00001c5e: ISZERO 00001c5f: PUSH2 0x1cc9 00001c62: JUMPI 00001c63: DUP3 00001c64: MLOAD 00001c65: PUSH1 0x00 00001c67: SUB 00001c68: PUSH2 0x1cc2 00001c6b: JUMPI 00001c6c: PUSH1 0x01 00001c6e: PUSH1 0x01 00001c70: PUSH1 0xa0 00001c72: SHL 00001c73: SUB 00001c74: DUP6 00001c75: AND 00001c76: EXTCODESIZE 00001c77: PUSH2 0x1cc2 00001c7a: JUMPI 00001c7b: PUSH1 0x40 00001c7d: MLOAD 00001c7e: PUSH3 0x461bcd 00001c82: PUSH1 0xe5 00001c84: SHL 00001c85: DUP2 00001c86: MSTORE 00001c87: PUSH1 0x20 00001c89: PUSH1 0x04 00001c8b: DUP3 00001c8c: ADD 00001c8d: MSTORE 00001c8e: PUSH1 0x1d 00001c90: PUSH1 0x24 00001c92: DUP3 00001c93: ADD 00001c94: MSTORE 00001c95: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00001cb6: PUSH1 0x44 00001cb8: DUP3 00001cb9: ADD 00001cba: MSTORE 00001cbb: PUSH1 0x64 00001cbd: ADD 00001cbe: PUSH2 0x0535 00001cc1: JUMP 00001cc2: JUMPDEST 00001cc3: POP 00001cc4: DUP2 00001cc5: PUSH2 0x1358 00001cc8: JUMP 00001cc9: JUMPDEST 00001cca: PUSH2 0x1358 00001ccd: DUP4 00001cce: DUP4 00001ccf: DUP2 00001cd0: MLOAD 00001cd1: ISZERO 00001cd2: PUSH2 0x1cde 00001cd5: JUMPI 00001cd6: DUP2 00001cd7: MLOAD 00001cd8: DUP1 00001cd9: DUP4 00001cda: PUSH1 0x20 00001cdc: ADD 00001cdd: REVERT 00001cde: JUMPDEST 00001cdf: DUP1 00001ce0: PUSH1 0x40 00001ce2: MLOAD 00001ce3: PUSH3 0x461bcd 00001ce7: PUSH1 0xe5 00001ce9: SHL 00001cea: DUP2 00001ceb: MSTORE 00001cec: PUSH1 0x04 00001cee: ADD 00001cef: PUSH2 0x0535 00001cf2: SWAP2 00001cf3: SWAP1 00001cf4: PUSH2 0x2367 00001cf7: JUMP 00001cf8: JUMPDEST 00001cf9: PUSH1 0x00 00001cfb: PUSH1 0x20 00001cfd: DUP3 00001cfe: DUP5 00001cff: SUB 00001d00: SLT 00001d01: ISZERO 00001d02: PUSH2 0x1d0a 00001d05: JUMPI 00001d06: PUSH1 0x00 00001d08: DUP1 00001d09: REVERT 00001d0a: JUMPDEST 00001d0b: POP 00001d0c: CALLDATALOAD 00001d0d: SWAP2 00001d0e: SWAP1 00001d0f: POP 00001d10: JUMP 00001d11: JUMPDEST 00001d12: PUSH1 0x00 00001d14: DUP1 00001d15: DUP4 00001d16: PUSH1 0x1f 00001d18: DUP5 00001d19: ADD 00001d1a: SLT 00001d1b: PUSH2 0x1d23 00001d1e: JUMPI 00001d1f: PUSH1 0x00 00001d21: DUP1 00001d22: REVERT 00001d23: JUMPDEST 00001d24: POP 00001d25: DUP2 00001d26: CALLDATALOAD 00001d27: PUSH8 0xffffffffffffffff 00001d30: DUP2 00001d31: GT 00001d32: ISZERO 00001d33: PUSH2 0x1d3b 00001d36: JUMPI 00001d37: PUSH1 0x00 00001d39: DUP1 00001d3a: REVERT 00001d3b: JUMPDEST 00001d3c: PUSH1 0x20 00001d3e: DUP4 00001d3f: ADD 00001d40: SWAP2 00001d41: POP 00001d42: DUP4 00001d43: PUSH1 0x20 00001d45: DUP3 00001d46: PUSH1 0x05 00001d48: SHL 00001d49: DUP6 00001d4a: ADD 00001d4b: ADD 00001d4c: GT 00001d4d: ISZERO 00001d4e: PUSH2 0x1d56 00001d51: JUMPI 00001d52: PUSH1 0x00 00001d54: DUP1 00001d55: REVERT 00001d56: JUMPDEST 00001d57: SWAP3 00001d58: POP 00001d59: SWAP3 00001d5a: SWAP1 00001d5b: POP 00001d5c: JUMP 00001d5d: JUMPDEST 00001d5e: PUSH1 0x01 00001d60: PUSH1 0x01 00001d62: PUSH1 0xa0 00001d64: SHL 00001d65: SUB 00001d66: DUP2 00001d67: AND 00001d68: DUP2 00001d69: EQ 00001d6a: PUSH2 0x05e7 00001d6d: JUMPI 00001d6e: PUSH1 0x00 00001d70: DUP1 00001d71: REVERT 00001d72: JUMPDEST 00001d73: DUP1 00001d74: ISZERO 00001d75: ISZERO 00001d76: DUP2 00001d77: EQ 00001d78: PUSH2 0x05e7 00001d7b: JUMPI 00001d7c: PUSH1 0x00 00001d7e: DUP1 00001d7f: REVERT 00001d80: JUMPDEST 00001d81: PUSH1 0x00 00001d83: DUP1 00001d84: PUSH1 0x00 00001d86: DUP1 00001d87: PUSH1 0x00 00001d89: DUP1 00001d8a: PUSH1 0x00 00001d8c: DUP1 00001d8d: PUSH1 0xc0 00001d8f: DUP10 00001d90: DUP12 00001d91: SUB 00001d92: SLT 00001d93: ISZERO 00001d94: PUSH2 0x1d9c 00001d97: JUMPI 00001d98: PUSH1 0x00 00001d9a: DUP1 00001d9b: REVERT 00001d9c: JUMPDEST 00001d9d: DUP9 00001d9e: CALLDATALOAD 00001d9f: PUSH8 0xffffffffffffffff 00001da8: DUP1 00001da9: DUP3 00001daa: GT 00001dab: ISZERO 00001dac: PUSH2 0x1db4 00001daf: JUMPI 00001db0: PUSH1 0x00 00001db2: DUP1 00001db3: REVERT 00001db4: JUMPDEST 00001db5: PUSH2 0x1dc0 00001db8: DUP13 00001db9: DUP4 00001dba: DUP14 00001dbb: ADD 00001dbc: PUSH2 0x1d11 00001dbf: JUMP 00001dc0: JUMPDEST 00001dc1: SWAP1 00001dc2: SWAP11 00001dc3: POP 00001dc4: SWAP9 00001dc5: POP 00001dc6: PUSH1 0x20 00001dc8: DUP12 00001dc9: ADD 00001dca: CALLDATALOAD 00001dcb: SWAP2 00001dcc: POP 00001dcd: PUSH2 0x1dd5 00001dd0: DUP3 00001dd1: PUSH2 0x1d5d 00001dd4: JUMP 00001dd5: JUMPDEST 00001dd6: SWAP1 00001dd7: SWAP7 00001dd8: POP 00001dd9: PUSH1 0x40 00001ddb: DUP11 00001ddc: ADD 00001ddd: CALLDATALOAD 00001dde: SWAP6 00001ddf: POP 00001de0: PUSH1 0x60 00001de2: DUP11 00001de3: ADD 00001de4: CALLDATALOAD 00001de5: SWAP5 00001de6: POP 00001de7: PUSH1 0x80 00001de9: DUP11 00001dea: ADD 00001deb: CALLDATALOAD 00001dec: SWAP1 00001ded: DUP1 00001dee: DUP3 00001def: GT 00001df0: ISZERO 00001df1: PUSH2 0x1df9 00001df4: JUMPI 00001df5: PUSH1 0x00 00001df7: DUP1 00001df8: REVERT 00001df9: JUMPDEST 00001dfa: POP 00001dfb: PUSH2 0x1e06 00001dfe: DUP12 00001dff: DUP3 00001e00: DUP13 00001e01: ADD 00001e02: PUSH2 0x1d11 00001e05: JUMP 00001e06: JUMPDEST 00001e07: SWAP1 00001e08: SWAP5 00001e09: POP 00001e0a: SWAP3 00001e0b: POP 00001e0c: POP 00001e0d: PUSH1 0xa0 00001e0f: DUP10 00001e10: ADD 00001e11: CALLDATALOAD 00001e12: PUSH2 0x1e1a 00001e15: DUP2 00001e16: PUSH2 0x1d72 00001e19: JUMP 00001e1a: JUMPDEST 00001e1b: DUP1 00001e1c: SWAP2 00001e1d: POP 00001e1e: POP 00001e1f: SWAP3 00001e20: SWAP6 00001e21: SWAP9 00001e22: POP 00001e23: SWAP3 00001e24: SWAP6 00001e25: SWAP9 00001e26: SWAP1 00001e27: SWAP4 00001e28: SWAP7 00001e29: POP 00001e2a: JUMP 00001e2b: JUMPDEST 00001e2c: PUSH1 0x20 00001e2e: DUP1 00001e2f: DUP3 00001e30: MSTORE 00001e31: DUP3 00001e32: MLOAD 00001e33: DUP3 00001e34: DUP3 00001e35: ADD 00001e36: DUP2 00001e37: SWAP1 00001e38: MSTORE 00001e39: PUSH1 0x00 00001e3b: SWAP2 00001e3c: SWAP1 00001e3d: DUP5 00001e3e: DUP3 00001e3f: ADD 00001e40: SWAP1 00001e41: PUSH1 0x40 00001e43: DUP6 00001e44: ADD 00001e45: SWAP1 00001e46: DUP5 00001e47: JUMPDEST 00001e48: DUP2 00001e49: DUP2 00001e4a: LT 00001e4b: ISZERO 00001e4c: PUSH2 0x1e63 00001e4f: JUMPI 00001e50: DUP4 00001e51: MLOAD 00001e52: DUP4 00001e53: MSTORE 00001e54: SWAP3 00001e55: DUP5 00001e56: ADD 00001e57: SWAP3 00001e58: SWAP2 00001e59: DUP5 00001e5a: ADD 00001e5b: SWAP2 00001e5c: PUSH1 0x01 00001e5e: ADD 00001e5f: PUSH2 0x1e47 00001e62: JUMP 00001e63: JUMPDEST 00001e64: POP 00001e65: SWAP1 00001e66: SWAP7 00001e67: SWAP6 00001e68: POP 00001e69: POP 00001e6a: POP 00001e6b: POP 00001e6c: POP 00001e6d: POP 00001e6e: JUMP 00001e6f: JUMPDEST 00001e70: PUSH1 0x00 00001e72: DUP1 00001e73: PUSH1 0x00 00001e75: DUP1 00001e76: PUSH1 0x00 00001e78: PUSH1 0x80 00001e7a: DUP7 00001e7b: DUP9 00001e7c: SUB 00001e7d: SLT 00001e7e: ISZERO 00001e7f: PUSH2 0x1e87 00001e82: JUMPI 00001e83: PUSH1 0x00 00001e85: DUP1 00001e86: REVERT 00001e87: JUMPDEST 00001e88: DUP6 00001e89: CALLDATALOAD 00001e8a: SWAP5 00001e8b: POP 00001e8c: PUSH1 0x20 00001e8e: DUP7 00001e8f: ADD 00001e90: CALLDATALOAD 00001e91: SWAP4 00001e92: POP 00001e93: PUSH1 0x40 00001e95: DUP7 00001e96: ADD 00001e97: CALLDATALOAD 00001e98: PUSH2 0x1ea0 00001e9b: DUP2 00001e9c: PUSH2 0x1d5d 00001e9f: JUMP 00001ea0: JUMPDEST 00001ea1: SWAP3 00001ea2: POP 00001ea3: PUSH1 0x60 00001ea5: DUP7 00001ea6: ADD 00001ea7: CALLDATALOAD 00001ea8: PUSH8 0xffffffffffffffff 00001eb1: DUP2 00001eb2: GT 00001eb3: ISZERO 00001eb4: PUSH2 0x1ebc 00001eb7: JUMPI 00001eb8: PUSH1 0x00 00001eba: DUP1 00001ebb: REVERT 00001ebc: JUMPDEST 00001ebd: PUSH2 0x1ec8 00001ec0: DUP9 00001ec1: DUP3 00001ec2: DUP10 00001ec3: ADD 00001ec4: PUSH2 0x1d11 00001ec7: JUMP 00001ec8: JUMPDEST 00001ec9: SWAP7 00001eca: SWAP10 00001ecb: SWAP6 00001ecc: SWAP9 00001ecd: POP 00001ece: SWAP4 00001ecf: SWAP7 00001ed0: POP 00001ed1: SWAP3 00001ed2: SWAP5 00001ed3: SWAP4 00001ed4: SWAP3 00001ed5: POP 00001ed6: POP 00001ed7: POP 00001ed8: JUMP 00001ed9: JUMPDEST 00001eda: PUSH1 0x00 00001edc: DUP1 00001edd: PUSH1 0x20 00001edf: DUP4 00001ee0: DUP6 00001ee1: SUB 00001ee2: SLT 00001ee3: ISZERO 00001ee4: PUSH2 0x1eec 00001ee7: JUMPI 00001ee8: PUSH1 0x00 00001eea: DUP1 00001eeb: REVERT 00001eec: JUMPDEST 00001eed: DUP3 00001eee: CALLDATALOAD 00001eef: PUSH8 0xffffffffffffffff 00001ef8: DUP2 00001ef9: GT 00001efa: ISZERO 00001efb: PUSH2 0x1f03 00001efe: JUMPI 00001eff: PUSH1 0x00 00001f01: DUP1 00001f02: REVERT 00001f03: JUMPDEST 00001f04: PUSH2 0x1f0f 00001f07: DUP6 00001f08: DUP3 00001f09: DUP7 00001f0a: ADD 00001f0b: PUSH2 0x1d11 00001f0e: JUMP 00001f0f: JUMPDEST 00001f10: SWAP1 00001f11: SWAP7 00001f12: SWAP1 00001f13: SWAP6 00001f14: POP 00001f15: SWAP4 00001f16: POP 00001f17: POP 00001f18: POP 00001f19: POP 00001f1a: JUMP 00001f1b: JUMPDEST 00001f1c: PUSH1 0x00 00001f1e: DUP1 00001f1f: PUSH1 0x00 00001f21: DUP1 00001f22: PUSH1 0x00 00001f24: DUP1 00001f25: PUSH1 0x00 00001f27: PUSH1 0xa0 00001f29: DUP9 00001f2a: DUP11 00001f2b: SUB 00001f2c: SLT 00001f2d: ISZERO 00001f2e: PUSH2 0x1f36 00001f31: JUMPI 00001f32: PUSH1 0x00 00001f34: DUP1 00001f35: REVERT 00001f36: JUMPDEST 00001f37: DUP8 00001f38: CALLDATALOAD 00001f39: PUSH8 0xffffffffffffffff 00001f42: DUP1 00001f43: DUP3 00001f44: GT 00001f45: ISZERO 00001f46: PUSH2 0x1f4e 00001f49: JUMPI 00001f4a: PUSH1 0x00 00001f4c: DUP1 00001f4d: REVERT 00001f4e: JUMPDEST 00001f4f: PUSH2 0x1f5a 00001f52: DUP12 00001f53: DUP4 00001f54: DUP13 00001f55: ADD 00001f56: PUSH2 0x1d11 00001f59: JUMP 00001f5a: JUMPDEST 00001f5b: SWAP1 00001f5c: SWAP10 00001f5d: POP 00001f5e: SWAP8 00001f5f: POP 00001f60: PUSH1 0x20 00001f62: DUP11 00001f63: ADD 00001f64: CALLDATALOAD 00001f65: SWAP2 00001f66: POP 00001f67: PUSH2 0x1f6f 00001f6a: DUP3 00001f6b: PUSH2 0x1d5d 00001f6e: JUMP 00001f6f: JUMPDEST 00001f70: SWAP1 00001f71: SWAP6 00001f72: POP 00001f73: PUSH1 0x40 00001f75: DUP10 00001f76: ADD 00001f77: CALLDATALOAD 00001f78: SWAP5 00001f79: POP 00001f7a: PUSH1 0x60 00001f7c: DUP10 00001f7d: ADD 00001f7e: CALLDATALOAD 00001f7f: SWAP4 00001f80: POP 00001f81: PUSH1 0x80 00001f83: DUP10 00001f84: ADD 00001f85: CALLDATALOAD 00001f86: SWAP1 00001f87: DUP1 00001f88: DUP3 00001f89: GT 00001f8a: ISZERO 00001f8b: PUSH2 0x1f93 00001f8e: JUMPI 00001f8f: PUSH1 0x00 00001f91: DUP1 00001f92: REVERT 00001f93: JUMPDEST 00001f94: POP 00001f95: PUSH2 0x1fa0 00001f98: DUP11 00001f99: DUP3 00001f9a: DUP12 00001f9b: ADD 00001f9c: PUSH2 0x1d11 00001f9f: JUMP 00001fa0: JUMPDEST 00001fa1: SWAP9 00001fa2: SWAP12 00001fa3: SWAP8 00001fa4: SWAP11 00001fa5: POP 00001fa6: SWAP6 00001fa7: SWAP9 00001fa8: POP 00001fa9: SWAP4 00001faa: SWAP7 00001fab: SWAP3 00001fac: SWAP6 00001fad: SWAP3 00001fae: SWAP4 00001faf: POP 00001fb0: POP 00001fb1: POP 00001fb2: JUMP 00001fb3: JUMPDEST 00001fb4: PUSH1 0x00 00001fb6: PUSH1 0x20 00001fb8: DUP3 00001fb9: DUP5 00001fba: SUB 00001fbb: SLT 00001fbc: ISZERO 00001fbd: PUSH2 0x1fc5 00001fc0: JUMPI 00001fc1: PUSH1 0x00 00001fc3: DUP1 00001fc4: REVERT 00001fc5: JUMPDEST 00001fc6: DUP2 00001fc7: CALLDATALOAD 00001fc8: PUSH2 0x1fd0 00001fcb: DUP2 00001fcc: PUSH2 0x1d5d 00001fcf: JUMP 00001fd0: JUMPDEST 00001fd1: SWAP4 00001fd2: SWAP3 00001fd3: POP 00001fd4: POP 00001fd5: POP 00001fd6: JUMP 00001fd7: JUMPDEST 00001fd8: PUSH1 0x00 00001fda: DUP1 00001fdb: PUSH1 0x00 00001fdd: DUP1 00001fde: PUSH1 0x00 00001fe0: PUSH1 0x80 00001fe2: DUP7 00001fe3: DUP9 00001fe4: SUB 00001fe5: SLT 00001fe6: ISZERO 00001fe7: PUSH2 0x1fef 00001fea: JUMPI 00001feb: PUSH1 0x00 00001fed: DUP1 00001fee: REVERT 00001fef: JUMPDEST 00001ff0: DUP6 00001ff1: CALLDATALOAD 00001ff2: PUSH2 0x1ffa 00001ff5: DUP2 00001ff6: PUSH2 0x1d5d 00001ff9: JUMP 00001ffa: JUMPDEST 00001ffb: SWAP5 00001ffc: POP 00001ffd: PUSH1 0x20 00001fff: DUP7 00002000: ADD 00002001: CALLDATALOAD 00002002: PUSH2 0x200a 00002005: DUP2 00002006: PUSH2 0x1d5d 00002009: JUMP 0000200a: JUMPDEST 0000200b: SWAP4 0000200c: POP 0000200d: PUSH1 0x40 0000200f: DUP7 00002010: ADD 00002011: CALLDATALOAD 00002012: SWAP3 00002013: POP 00002014: PUSH1 0x60 00002016: DUP7 00002017: ADD 00002018: CALLDATALOAD 00002019: PUSH8 0xffffffffffffffff 00002022: DUP2 00002023: GT 00002024: ISZERO 00002025: PUSH2 0x1ebc 00002028: JUMPI 00002029: PUSH1 0x00 0000202b: DUP1 0000202c: REVERT 0000202d: JUMPDEST 0000202e: PUSH1 0x00 00002030: DUP1 00002031: PUSH1 0x00 00002033: DUP1 00002034: PUSH1 0x60 00002036: DUP6 00002037: DUP8 00002038: SUB 00002039: SLT 0000203a: ISZERO 0000203b: PUSH2 0x2043 0000203e: JUMPI 0000203f: PUSH1 0x00 00002041: DUP1 00002042: REVERT 00002043: JUMPDEST 00002044: DUP5 00002045: CALLDATALOAD 00002046: SWAP4 00002047: POP 00002048: PUSH1 0x20 0000204a: DUP6 0000204b: ADD 0000204c: CALLDATALOAD 0000204d: SWAP3 0000204e: POP 0000204f: PUSH1 0x40 00002051: DUP6 00002052: ADD 00002053: CALLDATALOAD 00002054: PUSH8 0xffffffffffffffff 0000205d: DUP2 0000205e: GT 0000205f: ISZERO 00002060: PUSH2 0x2068 00002063: JUMPI 00002064: PUSH1 0x00 00002066: DUP1 00002067: REVERT 00002068: JUMPDEST 00002069: PUSH2 0x2074 0000206c: DUP8 0000206d: DUP3 0000206e: DUP9 0000206f: ADD 00002070: PUSH2 0x1d11 00002073: JUMP 00002074: JUMPDEST 00002075: SWAP6 00002076: SWAP9 00002077: SWAP5 00002078: SWAP8 00002079: POP 0000207a: SWAP6 0000207b: POP 0000207c: POP 0000207d: POP 0000207e: POP 0000207f: JUMP 00002080: JUMPDEST 00002081: PUSH1 0x00 00002083: DUP1 00002084: PUSH1 0x00 00002086: DUP1 00002087: PUSH1 0x00 00002089: DUP1 0000208a: PUSH1 0x80 0000208c: DUP8 0000208d: DUP10 0000208e: SUB 0000208f: SLT 00002090: ISZERO 00002091: PUSH2 0x2099 00002094: JUMPI 00002095: PUSH1 0x00 00002097: DUP1 00002098: REVERT 00002099: JUMPDEST 0000209a: DUP7 0000209b: CALLDATALOAD 0000209c: SWAP6 0000209d: POP 0000209e: PUSH1 0x20 000020a0: DUP8 000020a1: ADD 000020a2: CALLDATALOAD 000020a3: SWAP5 000020a4: POP 000020a5: PUSH1 0x40 000020a7: DUP8 000020a8: ADD 000020a9: CALLDATALOAD 000020aa: PUSH8 0xffffffffffffffff 000020b3: DUP1 000020b4: DUP3 000020b5: GT 000020b6: ISZERO 000020b7: PUSH2 0x20bf 000020ba: JUMPI 000020bb: PUSH1 0x00 000020bd: DUP1 000020be: REVERT 000020bf: JUMPDEST 000020c0: PUSH2 0x20cb 000020c3: DUP11 000020c4: DUP4 000020c5: DUP12 000020c6: ADD 000020c7: PUSH2 0x1d11 000020ca: JUMP 000020cb: JUMPDEST 000020cc: SWAP1 000020cd: SWAP7 000020ce: POP 000020cf: SWAP5 000020d0: POP 000020d1: PUSH1 0x60 000020d3: DUP10 000020d4: ADD 000020d5: CALLDATALOAD 000020d6: SWAP2 000020d7: POP 000020d8: DUP1 000020d9: DUP3 000020da: GT 000020db: ISZERO 000020dc: PUSH2 0x20e4 000020df: JUMPI 000020e0: PUSH1 0x00 000020e2: DUP1 000020e3: REVERT 000020e4: JUMPDEST 000020e5: POP 000020e6: PUSH2 0x20f1 000020e9: DUP10 000020ea: DUP3 000020eb: DUP11 000020ec: ADD 000020ed: PUSH2 0x1d11 000020f0: JUMP 000020f1: JUMPDEST 000020f2: SWAP8 000020f3: SWAP11 000020f4: SWAP7 000020f5: SWAP10 000020f6: POP 000020f7: SWAP5 000020f8: SWAP8 000020f9: POP 000020fa: SWAP3 000020fb: SWAP6 000020fc: SWAP4 000020fd: SWAP5 000020fe: SWAP3 000020ff: POP 00002100: POP 00002101: POP 00002102: JUMP 00002103: JUMPDEST 00002104: PUSH1 0x00 00002106: DUP1 00002107: PUSH1 0x00 00002109: PUSH1 0x60 0000210b: DUP5 0000210c: DUP7 0000210d: SUB 0000210e: SLT 0000210f: ISZERO 00002110: PUSH2 0x2118 00002113: JUMPI 00002114: PUSH1 0x00 00002116: DUP1 00002117: REVERT 00002118: JUMPDEST 00002119: DUP4 0000211a: CALLDATALOAD 0000211b: PUSH2 0x2123 0000211e: DUP2 0000211f: PUSH2 0x1d5d 00002122: JUMP 00002123: JUMPDEST 00002124: SWAP3 00002125: POP 00002126: PUSH1 0x20 00002128: DUP5 00002129: ADD 0000212a: CALLDATALOAD 0000212b: PUSH2 0x2133 0000212e: DUP2 0000212f: PUSH2 0x1d5d 00002132: JUMP 00002133: JUMPDEST 00002134: SWAP3 00002135: SWAP6 00002136: SWAP3 00002137: SWAP5 00002138: POP 00002139: POP 0000213a: POP 0000213b: PUSH1 0x40 0000213d: SWAP2 0000213e: SWAP1 0000213f: SWAP2 00002140: ADD 00002141: CALLDATALOAD 00002142: SWAP1 00002143: JUMP 00002144: JUMPDEST 00002145: PUSH1 0x00 00002147: DUP1 00002148: PUSH1 0x40 0000214a: DUP4 0000214b: DUP6 0000214c: SUB 0000214d: SLT 0000214e: ISZERO 0000214f: PUSH2 0x2157 00002152: JUMPI 00002153: PUSH1 0x00 00002155: DUP1 00002156: REVERT 00002157: JUMPDEST 00002158: DUP3 00002159: CALLDATALOAD 0000215a: PUSH2 0x2162 0000215d: DUP2 0000215e: PUSH2 0x1d5d 00002161: JUMP 00002162: JUMPDEST 00002163: SWAP5 00002164: PUSH1 0x20 00002166: SWAP4 00002167: SWAP1 00002168: SWAP4 00002169: ADD 0000216a: CALLDATALOAD 0000216b: SWAP4 0000216c: POP 0000216d: POP 0000216e: POP 0000216f: JUMP 00002170: JUMPDEST 00002171: PUSH4 0x4e487b71 00002176: PUSH1 0xe0 00002178: SHL 00002179: PUSH1 0x00 0000217b: MSTORE 0000217c: PUSH1 0x11 0000217e: PUSH1 0x04 00002180: MSTORE 00002181: PUSH1 0x24 00002183: PUSH1 0x00 00002185: REVERT 00002186: JUMPDEST 00002187: DUP2 00002188: DUP2 00002189: SUB 0000218a: DUP2 0000218b: DUP2 0000218c: GT 0000218d: ISZERO 0000218e: PUSH2 0x0558 00002191: JUMPI 00002192: PUSH2 0x0558 00002195: PUSH2 0x2170 00002198: JUMP 00002199: JUMPDEST 0000219a: PUSH1 0x00 0000219c: DUP3 0000219d: PUSH2 0x21b6 000021a0: JUMPI 000021a1: PUSH4 0x4e487b71 000021a6: PUSH1 0xe0 000021a8: SHL 000021a9: PUSH1 0x00 000021ab: MSTORE 000021ac: PUSH1 0x12 000021ae: PUSH1 0x04 000021b0: MSTORE 000021b1: PUSH1 0x24 000021b3: PUSH1 0x00 000021b5: REVERT 000021b6: JUMPDEST 000021b7: POP 000021b8: DIV 000021b9: SWAP1 000021ba: JUMP 000021bb: JUMPDEST 000021bc: PUSH4 0x4e487b71 000021c1: PUSH1 0xe0 000021c3: SHL 000021c4: PUSH1 0x00 000021c6: MSTORE 000021c7: PUSH1 0x41 000021c9: PUSH1 0x04 000021cb: MSTORE 000021cc: PUSH1 0x24 000021ce: PUSH1 0x00 000021d0: REVERT 000021d1: JUMPDEST 000021d2: PUSH4 0x4e487b71 000021d7: PUSH1 0xe0 000021d9: SHL 000021da: PUSH1 0x00 000021dc: MSTORE 000021dd: PUSH1 0x32 000021df: PUSH1 0x04 000021e1: MSTORE 000021e2: PUSH1 0x24 000021e4: PUSH1 0x00 000021e6: REVERT 000021e7: JUMPDEST 000021e8: DUP1 000021e9: DUP3 000021ea: MUL 000021eb: DUP2 000021ec: ISZERO 000021ed: DUP3 000021ee: DUP3 000021ef: DIV 000021f0: DUP5 000021f1: EQ 000021f2: OR 000021f3: PUSH2 0x0558 000021f6: JUMPI 000021f7: PUSH2 0x0558 000021fa: PUSH2 0x2170 000021fd: JUMP 000021fe: JUMPDEST 000021ff: DUP1 00002200: DUP3 00002201: ADD 00002202: DUP1 00002203: DUP3 00002204: GT 00002205: ISZERO 00002206: PUSH2 0x0558 00002209: JUMPI 0000220a: PUSH2 0x0558 0000220d: PUSH2 0x2170 00002210: JUMP 00002211: JUMPDEST 00002212: PUSH1 0x00 00002214: PUSH1 0x40 00002216: DUP3 00002217: DUP5 00002218: SUB 00002219: SLT 0000221a: ISZERO 0000221b: PUSH2 0x2223 0000221e: JUMPI 0000221f: PUSH1 0x00 00002221: DUP1 00002222: REVERT 00002223: JUMPDEST 00002224: PUSH1 0x40 00002226: MLOAD 00002227: PUSH1 0x40 00002229: DUP2 0000222a: ADD 0000222b: DUP2 0000222c: DUP2 0000222d: LT 0000222e: PUSH8 0xffffffffffffffff 00002237: DUP3 00002238: GT 00002239: OR 0000223a: ISZERO 0000223b: PUSH2 0x2254 0000223e: JUMPI 0000223f: PUSH4 0x4e487b71 00002244: PUSH1 0xe0 00002246: SHL 00002247: PUSH1 0x00 00002249: MSTORE 0000224a: PUSH1 0x41 0000224c: PUSH1 0x04 0000224e: MSTORE 0000224f: PUSH1 0x24 00002251: PUSH1 0x00 00002253: REVERT 00002254: JUMPDEST 00002255: PUSH1 0x40 00002257: MSTORE 00002258: DUP3 00002259: MLOAD 0000225a: DUP2 0000225b: MSTORE 0000225c: PUSH1 0x20 0000225e: SWAP3 0000225f: DUP4 00002260: ADD 00002261: MLOAD 00002262: SWAP3 00002263: DUP2 00002264: ADD 00002265: SWAP3 00002266: SWAP1 00002267: SWAP3 00002268: MSTORE 00002269: POP 0000226a: SWAP2 0000226b: SWAP1 0000226c: POP 0000226d: JUMP 0000226e: JUMPDEST 0000226f: PUSH1 0x00 00002271: PUSH1 0x20 00002273: DUP3 00002274: DUP5 00002275: SUB 00002276: SLT 00002277: ISZERO 00002278: PUSH2 0x2280 0000227b: JUMPI 0000227c: PUSH1 0x00 0000227e: DUP1 0000227f: REVERT 00002280: JUMPDEST 00002281: POP 00002282: MLOAD 00002283: SWAP2 00002284: SWAP1 00002285: POP 00002286: JUMP 00002287: JUMPDEST 00002288: PUSH1 0x00 0000228a: PUSH1 0x60 0000228c: DUP3 0000228d: DUP5 0000228e: SUB 0000228f: SLT 00002290: ISZERO 00002291: PUSH2 0x2299 00002294: JUMPI 00002295: PUSH1 0x00 00002297: DUP1 00002298: REVERT 00002299: JUMPDEST 0000229a: PUSH1 0x40 0000229c: MLOAD 0000229d: PUSH1 0x60 0000229f: DUP2 000022a0: ADD 000022a1: DUP2 000022a2: DUP2 000022a3: LT 000022a4: PUSH8 0xffffffffffffffff 000022ad: DUP3 000022ae: GT 000022af: OR 000022b0: ISZERO 000022b1: PUSH2 0x22ca 000022b4: JUMPI 000022b5: PUSH4 0x4e487b71 000022ba: PUSH1 0xe0 000022bc: SHL 000022bd: PUSH1 0x00 000022bf: MSTORE 000022c0: PUSH1 0x41 000022c2: PUSH1 0x04 000022c4: MSTORE 000022c5: PUSH1 0x24 000022c7: PUSH1 0x00 000022c9: REVERT 000022ca: JUMPDEST 000022cb: DUP1 000022cc: PUSH1 0x40 000022ce: MSTORE 000022cf: POP 000022d0: DUP3 000022d1: MLOAD 000022d2: DUP2 000022d3: MSTORE 000022d4: PUSH1 0x20 000022d6: DUP4 000022d7: ADD 000022d8: MLOAD 000022d9: PUSH1 0x20 000022db: DUP3 000022dc: ADD 000022dd: MSTORE 000022de: PUSH1 0x40 000022e0: DUP4 000022e1: ADD 000022e2: MLOAD 000022e3: PUSH1 0x40 000022e5: DUP3 000022e6: ADD 000022e7: MSTORE 000022e8: DUP1 000022e9: SWAP2 000022ea: POP 000022eb: POP 000022ec: SWAP3 000022ed: SWAP2 000022ee: POP 000022ef: POP 000022f0: JUMP 000022f1: JUMPDEST 000022f2: PUSH1 0x00 000022f4: PUSH1 0x01 000022f6: DUP3 000022f7: ADD 000022f8: PUSH2 0x2303 000022fb: JUMPI 000022fc: PUSH2 0x2303 000022ff: PUSH2 0x2170 00002302: JUMP 00002303: JUMPDEST 00002304: POP 00002305: PUSH1 0x01 00002307: ADD 00002308: SWAP1 00002309: JUMP 0000230a: JUMPDEST 0000230b: PUSH1 0x00 0000230d: PUSH1 0x20 0000230f: DUP3 00002310: DUP5 00002311: SUB 00002312: SLT 00002313: ISZERO 00002314: PUSH2 0x231c 00002317: JUMPI 00002318: PUSH1 0x00 0000231a: DUP1 0000231b: REVERT 0000231c: JUMPDEST 0000231d: DUP2 0000231e: MLOAD 0000231f: PUSH2 0x1fd0 00002322: DUP2 00002323: PUSH2 0x1d72 00002326: JUMP 00002327: JUMPDEST 00002328: PUSH1 0x00 0000232a: JUMPDEST 0000232b: DUP4 0000232c: DUP2 0000232d: LT 0000232e: ISZERO 0000232f: PUSH2 0x2342 00002332: JUMPI 00002333: DUP2 00002334: DUP2 00002335: ADD 00002336: MLOAD 00002337: DUP4 00002338: DUP3 00002339: ADD 0000233a: MSTORE 0000233b: PUSH1 0x20 0000233d: ADD 0000233e: PUSH2 0x232a 00002341: JUMP 00002342: JUMPDEST 00002343: POP 00002344: POP 00002345: PUSH1 0x00 00002347: SWAP2 00002348: ADD 00002349: MSTORE 0000234a: JUMP 0000234b: JUMPDEST 0000234c: PUSH1 0x00 0000234e: DUP3 0000234f: MLOAD 00002350: PUSH2 0x235d 00002353: DUP2 00002354: DUP5 00002355: PUSH1 0x20 00002357: DUP8 00002358: ADD 00002359: PUSH2 0x2327 0000235c: JUMP 0000235d: JUMPDEST 0000235e: SWAP2 0000235f: SWAP1 00002360: SWAP2 00002361: ADD 00002362: SWAP3 00002363: SWAP2 00002364: POP 00002365: POP 00002366: JUMP 00002367: JUMPDEST 00002368: PUSH1 0x20 0000236a: DUP2 0000236b: MSTORE 0000236c: PUSH1 0x00 0000236e: DUP3 0000236f: MLOAD 00002370: DUP1 00002371: PUSH1 0x20 00002373: DUP5 00002374: ADD 00002375: MSTORE 00002376: PUSH2 0x2386 00002379: DUP2 0000237a: PUSH1 0x40 0000237c: DUP6 0000237d: ADD 0000237e: PUSH1 0x20 00002380: DUP8 00002381: ADD 00002382: PUSH2 0x2327 00002385: JUMP 00002386: JUMPDEST 00002387: PUSH1 0x1f 00002389: ADD 0000238a: PUSH1 0x1f 0000238c: NOT 0000238d: AND 0000238e: SWAP2 0000238f: SWAP1 00002390: SWAP2 00002391: ADD 00002392: PUSH1 0x40 00002394: ADD 00002395: SWAP3 00002396: SWAP2 00002397: POP 00002398: POP 00002399: JUMP 0000239a: INVALID 0000239b: LOG2 0000239c: PUSH5 0x6970667358 000023a2: UNKNOWN(0x22) 000023a3: SLT 000023a4: KECCAK256 000023a5: UNKNOWN(0xE0) 000023a6: UNKNOWN(0xF9) 000023a7: BYTE 000023a8: UNKNOWN(0xCA) 000023a9: DUP3 000023aa: UNKNOWN(0xAD) 000023ab: UNKNOWN(0xA9) 000023ac: UNKNOWN(0xC7) 000023ad: LOG3 000023ae: REVERT 000023af: UNKNOWN(0xC3) 000023b0: UNKNOWN(0xB7) 000023b1: CALLDATALOAD 000023b2: MUL 000023b3: EQ 000023b4: UNKNOWN(0xE0) 000023b5: DUP5 000023b6: MUL 000023b7: LOG2 000023b8: BYTE 000023b9: PUSH16 0xd024b93b35b88afd3a1e1d64736f6c63 000023ca: NUMBER 000023cb: STOP 000023cc: ADDMOD 000023cd: GT 000023ce: STOP 000023cf: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xfd3b34146b608c6a8dbb28b69a127fab903917e1a74e603addf94506fe0338af
call_targets:
0xaf51cd5f71ed88d6d1f65b575f1a8ce3a78ec42b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xfd3b34146b608c6a8dbb28b69a127fab903917e1a74e603addf94506fe0338af",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xaf51cd5f71ed88d6d1f65b575f1a8ce3a78ec42b"
],
"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": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf6cb3cd8",
"selector": "0xf6cb3cd8",
"calldata_variants": [
"0xf6cb3cd8",
"0xf6cb3cd80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc6436f5",
"selector": "0xfc6436f5",
"calldata_variants": [
"0xfc6436f5",
"0xfc6436f50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8d8c9ac",
"selector": "0xe8d8c9ac",
"calldata_variants": [
"0xe8d8c9ac",
"0xe8d8c9ac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbc3fea74",
"selector": "0xbc3fea74",
"calldata_variants": [
"0xbc3fea74",
"0xbc3fea740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc4271eb6",
"selector": "0xc4271eb6",
"calldata_variants": [
"0xc4271eb6",
"0xc4271eb60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdc7c9a1f",
"selector": "0xdc7c9a1f",
"calldata_variants": [
"0xdc7c9a1f",
"0xdc7c9a1f0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6080,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 7177,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xfd3b34146b608c6a8dbb28b69a127fab903917e1a74e603addf94506fe0338af
call_targets:
0xaf51cd5f71ed88d6d1f65b575f1a8ce3a78ec42b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xfd3b34146b608c6a8dbb28b69a127fab903917e1a74e603addf94506fe0338af",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xaf51cd5f71ed88d6d1f65b575f1a8ce3a78ec42b"
],
"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": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf6cb3cd8",
"selector": "0xf6cb3cd8",
"calldata_variants": [
"0xf6cb3cd8",
"0xf6cb3cd80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc6436f5",
"selector": "0xfc6436f5",
"calldata_variants": [
"0xfc6436f5",
"0xfc6436f50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8d8c9ac",
"selector": "0xe8d8c9ac",
"calldata_variants": [
"0xe8d8c9ac",
"0xe8d8c9ac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbc3fea74",
"selector": "0xbc3fea74",
"calldata_variants": [
"0xbc3fea74",
"0xbc3fea740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc4271eb6",
"selector": "0xc4271eb6",
"calldata_variants": [
"0xc4271eb6",
"0xc4271eb60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdc7c9a1f",
"selector": "0xdc7c9a1f",
"calldata_variants": [
"0xdc7c9a1f",
"0xdc7c9a1f0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6080,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 7177,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| medium | access_control | codex | Prefetch can rewind interval pointers, enabling repeated earmarks and extra treasury transfers | 75 | no | — |
viewevidence_json{
"evidence": "`prefetchGlobalSnapshots` allows `_startingInterval <= nextSnapshotPreCalcInterval` and unconditionally sets `nextSnapshotPreCalcInterval = _endingInterval + 1`; `earmark` then uses these pointers and always updates `nextEarmarkInterval` even when the range is inverted.",
"locations": [
"contracts/contracts/treasury/GovernorRewards.sol:305",
"contracts/contracts/treasury/GovernorRewards.sol:339",
"contracts/contracts/treasury/GovernorRewards.sol:351",
"contracts/contracts/treasury/GovernorRewards.sol:377"
],
"recommendation": "Enforce monotonic progression for `nextSnapshotPreCalcInterval` and `nextEarmarkInterval` (e.g., require `_startingInterval == nextSnapshotPreCalcInterval` and `_endingInterval >= nextSnapshotPreCalcInterval`, and revert if `_calcFromInterval > _calcToInterval`). Consider restricting prefetch/earmark to an authorized keeper or owner if public access is not intended, and avoid overwriting earmarks for already-processed intervals.",
"exploit_scenario": "Any caller can call `prefetchGlobalSnapshots` with a small `_endingInterval` to set `nextSnapshotPreCalcInterval` backwards, then call `earmark` to rewind `nextEarmarkInterval`, and finally prefetch forward and earmark again. This re-earmarks previously processed intervals and transfers additional tokens from the Treasury into GovernorRewards, potentially locking funds for already-claimed intervals or forcing premature redistribution."
}
|
| low | other | codex | Unlocking a delegated stake does not snapshot the delegate, skewing reward snapshots | 65 | no | — |
viewevidence_json{
"evidence": "`unlock` calls `snapshot(msg.sender)` only, then calls `moveVotingPower(stakes[msg.sender][_stakeID].delegate, address(0), ...)` without snapshotting the delegate.",
"locations": [
"contracts/contracts/governance/Staking.sol:463",
"contracts/contracts/governance/Staking.sol:467",
"contracts/contracts/governance/Staking.sol:472"
],
"recommendation": "Snapshot the delegate before reducing voting power in `unlock` (similar to `delegate`), or otherwise ensure any voting power change records a snapshot for both source and destination accounts.",
"exploit_scenario": "If a user unlocks a stake delegated to another address, the delegate\u2019s voting power is reduced without taking a snapshot for the delegate. For the interval where the unlock happens, `accountSnapshotAt` can return the reduced voting power for the entire interval, underpaying the delegate\u2019s rewards. A delegator can time unlocks late in an interval to grief a delegate\u2019s rewards for that interval."
}
|
| low | upgradeability | codex | Upgradeable implementations lack initializer lock | 65 | no | — |
viewevidence_json{
"evidence": "Upgradeable contracts expose external `initializer` functions but do not lock initializers in a constructor.",
"locations": [
"contracts/contracts/treasury/GovernorRewards.sol:92",
"contracts/contracts/treasury/Treasury.sol:25"
],
"recommendation": "Add a constructor that calls `_disableInitializers()` to each upgradeable implementation, and ensure proxies are initialized immediately on deployment.",
"exploit_scenario": "Because the upgradeable contracts do not disable initializers in a constructor, anyone can call the initializer on the implementation contract and gain ownership/roles there. If assets are mistakenly sent to the implementation (or a proxy is left uninitialized), those privileges can be abused to move funds or reconfigure the implementation instance."
}
|