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

Analysis Run

b00078b8-5707-459e-bc53-8181625ba80b

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 3, 2026 9:15 PM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
Untrusted DELEGATECALL target reachable
crit 0 high 0 proxy context implementation known
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31456 report.consolidate complete 1 / 1 3 months ago
77362 artifact.fetch complete 1 / 3 1 week ago
77363 tool.cast_disasm complete 1 / 3 1 week ago
77364 analysis.bundle complete 1 / 3 1 week ago
77365 capability.graph complete 1 / 3 1 week ago
77366 detector.run complete 1 / 3 1 week ago
77367 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: yes
Verified Source: yes

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
1
No findings?
no
Summary
Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.
View stderr
[codex:491748] OpenAI Codex v0.77.0 (research preview)
[codex:491748] --------
[codex:491748] workdir: /tmp/codex-multi-abm_av9r
[codex:491748] model: gpt-5.2-codex
[codex:491748] provider: openai
[codex:491748] approval: never
[codex:491748] sandbox: read-only
[codex:491748] reasoning effort: xhigh
[codex:491748] reasoning summaries: auto
[codex:491748] session id: 019b85b2-0440-76d0-b0f1-b84a47a97ecc
[codex:491748] --------
[codex:491748] user
[codex:491748] You are a profit-focused exploit hunter. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:491748] 
[codex:491748] Read `AUDIT_BUNDLE.txt` completely before concluding. Treat `lib/` and `@openzeppelin/` as trusted unless misused.
[codex:491748] 
[codex:491748] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:491748] - Gas inefficiency, code quality, naming, or best practices
[codex:491748] - Theoretical vulnerabilities without a clear extraction path
[codex:491748] - Centralization risks (admin can rug) - assume admin keys are secure
[codex:491748] - Front-running unless it enables theft beyond MEV
[codex:491748] - DoS, griefing, or issues that don't result in attacker profit
[codex:491748] - Missing events, view function issues, or informational findings
[codex:491748] 
[codex:491748] HIGH-VALUE PATTERNS TO HUNT:
[codex:491748] - Reentrancy: external calls before state updates that allow double-withdrawal
[codex:491748] - Access control: missing/bypassable auth on withdraw, transfer, or mint functions
[codex:491748] - Flash loan attacks: borrow -> manipulate -> profit in single tx
[codex:491748] - Price oracle manipulation: TWAP with short window, spot price reads, stale prices
[codex:491748] - Signature replay: missing nonce, chainId, or deadline in permit/meta-tx
[codex:491748] - Proxy hijacking: unprotected initialize(), storage collision, UUPS without auth
[codex:491748] - Accounting errors: rounding that favors attacker, share inflation, first depositor attacks
[codex:491748] - Unchecked external calls: return value ignored on token transfers enabling fake tokens
[codex:491748] - Cross-function reentrancy: state read in function A, modified via reentrant call, used stale in A
[codex:491748] 
[codex:491748] For each finding, you MUST provide:
[codex:491748] 1. Exact file and line numbers of vulnerable code
[codex:491748] 2. Step-by-step exploit transaction sequence
[codex:491748] 3. Estimated profit potential (order of magnitude: contract balance, LP reserves, etc.)
[codex:491748] 
[codex:491748] If no concrete profit path exists: set no_findings=true. Do NOT pad with low-severity noise.
[codex:491748] 
[codex:491748] Output MUST be valid JSON matching the provided schema.
[codex:491748] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:491748] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:491748] mcp startup: no servers
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Preparing to read AUDIT_BUNDLE.txt**
[codex:491748] exec
[codex:491748] /bin/bash -lc ls in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] AUDIT_BUNDLE.txt
[codex:491748] codex-output-schema.json
[codex:491748] contracts
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Reading AUDIT_BUNDLE.txt**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] This file concatenates first-party Solidity sources only (lib/@openzeppelin excluded).
[codex:491748] 
[codex:491748] ================================================================================
[codex:491748] FILE: contracts/aragon/interfaces/IERC900History.sol
[codex:491748] ================================================================================
[codex:491748] // SPDX-License-Identifier: GPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] // Minimum interface to interact with Aragon's Aggregator
[codex:491748] interface IERC900History {
[codex:491748]     function totalStakedForAt(address addr, uint256 blockNumber) external view returns (uint256);
[codex:491748]     function totalStakedAt(uint256 blockNumber) external view returns (uint256);
[codex:491748]     function supportsHistory() external pure returns (bool);
[codex:491748] }
[codex:491748] 
[codex:491748] ================================================================================
[codex:491748] FILE: contracts/contracts/Adjudicator.sol
[codex:491748] ================================================================================
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Searching for vulnerable contract functions**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "withdraw|claim|redeem|slash|mint|transfer" contracts/contracts' in /tmp/codex-multi-abm_av9r succeeded in 13ms:
[codex:491748] contracts/contracts/PolicyManager.sol:343:    function withdraw() external returns (uint256) {
[codex:491748] contracts/contracts/PolicyManager.sol:344:        return withdraw(msg.sender);
[codex:491748] contracts/contracts/PolicyManager.sol:351:    function withdraw(address payable _recipient) public returns (uint256) {
[codex:491748] contracts/contracts/WorkLock.sol:27:    event Claimed(address indexed sender, uint256 claimedTokens);
[codex:491748] contracts/contracts/WorkLock.sol:38:        bool claimed;
[codex:491748] contracts/contracts/WorkLock.sol:53:    * claimedTokens = minAllowableLockedTokens + bonusETHPart * bonusDepositRate
[codex:491748] contracts/contracts/WorkLock.sol:94:    * @param _stakingPeriods Amount of periods during which tokens will be locked after claiming
[codex:491748] contracts/contracts/WorkLock.sol:136:    * @param _value Amount of tokens to transfer
[codex:491748] contracts/contracts/WorkLock.sol:176:    * @param _ethToReclaim Specified sum of ETH staker wishes to reclaim following completion of work
[codex:491748] contracts/contracts/WorkLock.sol:177:    * @param _restOfDepositedETH Remaining ETH in staker's deposit once ethToReclaim sum has been subtracted
[codex:491748] contracts/contracts/WorkLock.sol:178:    * @dev _ethToReclaim + _restOfDepositedETH = depositedETH
[codex:491748] contracts/contracts/WorkLock.sol:180:    function ethToWork(uint256 _ethToReclaim, uint256 _restOfDepositedETH) internal view returns (uint256) {
[codex:491748] contracts/contracts/WorkLock.sol:185:            return ethToWork(_ethToReclaim, tokenSupply, baseETHSupply);
[codex:491748] contracts/contracts/WorkLock.sol:191:        // If the staker's total remaining deposit (including the specified sum of ETH to reclaim)
[codex:491748] contracts/contracts/WorkLock.sol:193:        // then only the base part is used to calculate the work required to reclaim ETH
[codex:491748] contracts/contracts/WorkLock.sol:194:        if (_ethToReclaim + _restOfDepositedETH <= minAllowedBid) {
[codex:491748] contracts/contracts/WorkLock.sol:195:            baseETH = _ethToReclaim;
[codex:491748] contracts/contracts/WorkLock.sol:197:        // If the staker's remaining deposit (not including the specified sum of ETH to reclaim)
[codex:491748] contracts/contracts/WorkLock.sol:199:        // then only the bonus part is used to calculate the work required to reclaim ETH
[codex:491748] contracts/contracts/WorkLock.sol:201:            bonusETH = _ethToReclaim;
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Inspecting key contract vulnerabilities**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "contract Upgradeable|initialize|upgrade" contracts/contracts/proxy -S' in /tmp/codex-multi-abm_av9r succeeded in 8ms:
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:55:     * @notice ERC897, whether it is a forwarding (1) or an upgradeable (2) proxy
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:70:    * @notice Verify new contract storage and upgrade target
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:73:    function upgrade(address _target) public onlyOwner upgrading {
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:90:    * @dev Test storage carefully before upgrade again after rollback
[codex:491748] contracts/contracts/proxy/Upgradeable.sol:10:* @notice Base contract for upgradeable contract
[codex:491748] contracts/contracts/proxy/Upgradeable.sol:15:abstract contract Upgradeable is Ownable {
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/proxy/Upgradeable.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Base contract for upgradeable contract
[codex:491748] * @dev Inherited contract should implement verifyState(address) method by checking storage variables
[codex:491748] * (see verifyState(address) in Dispatcher). Also contract should implement finishUpgrade(address)
[codex:491748] * if it is using constructor parameters by coping this parameters to the dispatcher storage
[codex:491748] */
[codex:491748] abstract contract Upgradeable is Ownable {
[codex:491748] 
[codex:491748]     event StateVerified(address indexed testTarget, address sender);
[codex:491748]     event UpgradeFinished(address indexed target, address sender);
[codex:491748] 
[codex:491748]     /**
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing contract structure and attack surface**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '280,420p' contracts/contracts/PolicyManager.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]             policy.endTimestamp,
[codex:491748]             _nodes.length
[codex:491748]         );
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Get policy owner
[codex:491748]     */
[codex:491748]     function getPolicyOwner(bytes16 _policyId) public view returns (address) {
[codex:491748]         Policy storage policy = policies[_policyId];
[codex:491748]         return policy.owner == address(0) ? policy.sponsor : policy.owner;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Set default `feeDelta` value for specified period
[codex:491748]     * @dev This method increases gas cost for node in trade of decreasing cost for policy sponsor
[codex:491748]     * @param _node Node address
[codex:491748]     * @param _period Period to set
[codex:491748]     */
[codex:491748]     function setDefaultFeeDelta(address _node, uint16 _period) external onlyEscrowContract {
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing potential reentrancy and access control issues**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,220p' contracts/contracts/WorkLock.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../zeppelin/math/SafeMath.sol";
[codex:491748] import "../zeppelin/token/ERC20/SafeERC20.sol";
[codex:491748] import "../zeppelin/utils/Address.sol";
[codex:491748] import "../zeppelin/ownership/Ownable.sol";
[codex:491748] import "./NuCypherToken.sol";
[codex:491748] import "./StakingEscrow.sol";
[codex:491748] import "./lib/AdditionalMath.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice The WorkLock distribution contract
[codex:491748] */
[codex:491748] contract WorkLock is Ownable {
[codex:491748]     using SafeERC20 for NuCypherToken;
[codex:491748]     using SafeMath for uint256;
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Continuing review of claim and refund**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '220,520p' contracts/contracts/WorkLock.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748]         }
[codex:491748] 
[codex:491748]         return work;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Calculate amount of work that need to be done to refund specified amount of ETH
[codex:491748]     * @dev This value will be fixed only after end of bidding
[codex:491748]     */
[codex:491748]     function ethToWork(uint256 _ethAmount) public view returns (uint256) {
[codex:491748]         return ethToWork(_ethAmount, 0);
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Calculate amount of ETH that will be refund for completing specified amount of work
[codex:491748]     */
[codex:491748]     function workToETH(uint256 _completedWork, uint256 _ethSupply, uint256 _tokenSupply)
[codex:491748]         internal view returns (uint256)
[codex:491748]     {
[codex:491748]         return _completedWork.mul(_ethSupply).mul(boostingRefund).div(_tokenSupply.mul(SLOWING_REFUND));
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '520,900p' contracts/contracts/WorkLock.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] 
[codex:491748]         uint256 currentWork = escrow.getCompletedWork(_bidder);
[codex:491748]         uint256 completedWork = currentWork.sub(info.completedWork);
[codex:491748]         // no work that has been completed since last refund
[codex:491748]         if (completedWork == 0) {
[codex:491748]             return 0;
[codex:491748]         }
[codex:491748] 
[codex:491748]         uint256 refundETH = workToETH(completedWork, info.depositedETH);
[codex:491748]         if (refundETH > info.depositedETH) {
[codex:491748]             refundETH = info.depositedETH;
[codex:491748]         }
[codex:491748]         return refundETH;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Refund ETH for the completed work
[codex:491748]     */
[codex:491748]     function refund() external returns (uint256 refundETH) {
[codex:491748]         WorkInfo storage info = workInfo[msg.sender];
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing reentrancy and access control risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '640,760p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]         address[] calldata _stakers,
[codex:491748]         uint256[] calldata _numberOfSubStakes,
[codex:491748]         uint256[] calldata _values,
[codex:491748]         uint16[] calldata _periods
[codex:491748]     )
[codex:491748]         external
[codex:491748]     {
[codex:491748]         uint256 subStakesLength = _values.length;
[codex:491748]         require(_stakers.length != 0 &&
[codex:491748]             _stakers.length == _numberOfSubStakes.length &&
[codex:491748]             subStakesLength >= _stakers.length &&
[codex:491748]             _periods.length == subStakesLength);
[codex:491748]         uint16 previousPeriod = getCurrentPeriod() - 1;
[codex:491748]         uint16 nextPeriod = previousPeriod + 2;
[codex:491748]         uint256 sumValue = 0;
[codex:491748] 
[codex:491748]         uint256 j = 0;
[codex:491748]         for (uint256 i = 0; i < _stakers.length; i++) {
[codex:491748]             address staker = _stakers[i];
[codex:491748]             uint256 numberOfSubStakes = _numberOfSubStakes[i];
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '760,980p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]         require(_value != 0);
[codex:491748]         StakerInfo storage info = stakerInfo[_staker];
[codex:491748]         // A staker can't be a worker for another staker
[codex:491748]         require(stakerFromWorker[_staker] == address(0) || stakerFromWorker[_staker] == info.worker);
[codex:491748]         // initial stake of the staker
[codex:491748]         if (info.subStakes.length == 0) {
[codex:491748]             stakers.push(_staker);
[codex:491748]             policyManager.register(_staker, getCurrentPeriod() - 1);
[codex:491748]         }
[codex:491748]         token.safeTransferFrom(_payer, address(this), _value);
[codex:491748]         info.value += _value;
[codex:491748]         lock(_staker, _index, _value, _periods);
[codex:491748] 
[codex:491748]         addSnapshot(info, int256(_value));
[codex:491748]         if (_index >= MAX_SUB_STAKES) {
[codex:491748]             emit Deposited(_staker, _value, _periods);
[codex:491748]         } else {
[codex:491748]             uint16 lastPeriod = getLastPeriodOfSubStake(_staker, _index);
[codex:491748]             emit Deposited(_staker, _value, lastPeriod - getCurrentPeriod());
[codex:491748]         }
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Searching for withdraw and slash methods**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1000,1105p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748]         subStake.periods = subStake.periods.add16(_periods);
[codex:491748]         // if the sub stake ends in the next committed period then reset the `lastPeriod` field
[codex:491748]         if (lastPeriod == startPeriod) {
[codex:491748]             subStake.lastPeriod = 0;
[codex:491748]         }
[codex:491748]         // The extended sub stake must not be less than the minimum value
[codex:491748]         require(uint32(lastPeriod - currentPeriod) + _periods >= minLockedPeriods);
[codex:491748]         emit Locked(msg.sender, subStake.lockedValue, lastPeriod + 1, _periods);
[codex:491748]         emit Prolonged(msg.sender, subStake.lockedValue, lastPeriod, _periods);
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Merge two sub-stakes into one if their last periods are equal
[codex:491748]     * @dev It's possible that both sub-stakes will be active after this transaction.
[codex:491748]     * But only one of them will be active until next call `commitToNextPeriod` (in the next period)
[codex:491748]     * @param _index1 Index of the first sub-stake
[codex:491748]     * @param _index2 Index of the second sub-stake
[codex:491748]     */
[codex:491748]     function mergeStake(uint256 _index1, uint256 _index2) external onlyStaker {
[codex:491748]         require(_index1 != _index2); // must be different sub-stakes
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Checking for reentrancy risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1215,1305p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748]                     lockedPerPeriod[_mintingPeriod],
[codex:491748]                     lastPeriod.sub16(_mintingPeriod));
[codex:491748]                 reward += subStakeReward;
[codex:491748]                 if (_reStake) {
[codex:491748]                     subStake.lockedValue += uint128(subStakeReward);
[codex:491748]                 }
[codex:491748]             }
[codex:491748]         }
[codex:491748]         policyManager.updateFee(_staker, _mintingPeriod);
[codex:491748]         return reward;
[codex:491748]     }
[codex:491748] 
[codex:491748]     //-------------------------Slashing-------------------------
[codex:491748]     /**
[codex:491748]     * @notice Slash the staker's stake and reward the investigator
[codex:491748]     * @param _staker Staker's address
[codex:491748]     * @param _penalty Penalty
[codex:491748]     * @param _investigator Investigator
[codex:491748]     * @param _reward Reward for the investigator
[codex:491748]     */
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing external transfers and initializer risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "rg -n \"initialize\\(|init\\(\" contracts/contracts -S" in /tmp/codex-multi-abm_av9r succeeded in 10ms:
[codex:491748] contracts/contracts/Issuer.sol:147:    function initialize(uint256 _reservedReward, address _sourceOfFunds) external onlyOwner {
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73:    function initialize(
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:79:        InitializableStakingContract.initialize(_router);
[codex:491748] contracts/contracts/staking_contracts/AbstractStakingContract.sol:133:    function initialize(StakingInterfaceRouter _router) public initializer {
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Inspecting contract initialization patterns**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,220p' contracts/contracts/staking_contracts/AbstractStakingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/utils/Address.sol";
[codex:491748] import "../../zeppelin/token/ERC20/SafeERC20.sol";
[codex:491748] import "./StakingInterface.sol";
[codex:491748] import "../../zeppelin/proxy/Initializable.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Router for accessing interface contract
[codex:491748] */
[codex:491748] contract StakingInterfaceRouter is Ownable {
[codex:491748]     BaseStakingInterface public target;
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @param _target Address of the interface contract
[codex:491748]     */
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Inspecting contract inheritance and initializer access**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/staking_contracts/WorkLockPoolingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748] 
[codex:491748] /**
[codex:491748]  * @notice Contract acts as delegate for sub-stakers and owner
[codex:491748]  * @author @vzotova and @roma_k
[codex:491748]  **/
[codex:491748] contract WorkLockPoolingContract is InitializableStakingContract, Ownable {
[codex:491748]     using SafeMath for uint256;
[codex:491748]     using Address for address payable;
[codex:491748]     using SafeERC20 for NuCypherToken;
[codex:491748] 
[codex:491748]     event TokensDeposited(
[codex:491748]         address indexed sender,
[codex:491748]         uint256 value,
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Continuing to examine withdrawal functions**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '200,520p' contracts/contracts/staking_contracts/WorkLockPoolingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]      * @notice Get available reward for all delegators and owner
[codex:491748]      */
[codex:491748]     function getAvailableReward() public view returns (uint256) {
[codex:491748]         uint256 stakedTokens = escrow.getAllTokens(address(this));
[codex:491748]         uint256 freeTokens = token.balanceOf(address(this));
[codex:491748]         uint256 reward = stakedTokens.add(freeTokens).sub(totalDepositedTokens);
[codex:491748]         if (reward > freeTokens) {
[codex:491748]             return freeTokens;
[codex:491748]         }
[codex:491748]         return reward;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]      * @notice Get cumulative reward
[codex:491748]      */
[codex:491748]     function getCumulativeReward() public view returns (uint256) {
[codex:491748]         return getAvailableReward().add(totalWithdrawnReward);
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing proxy initializer risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,260p' contracts/contracts/staking_contracts/StakingInterface.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748] import "../NuCypherToken.sol";
[codex:491748] import "../StakingEscrow.sol";
[codex:491748] import "../PolicyManager.sol";
[codex:491748] import "../WorkLock.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Base StakingInterface
[codex:491748] */
[codex:491748] contract BaseStakingInterface {
[codex:491748] 
[codex:491748]     address public immutable stakingInterfaceAddress;
[codex:491748]     NuCypherToken public immutable token;
[codex:491748]     StakingEscrow public immutable escrow;
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Continuing implementation of WorkLock methods**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '260,380p' contracts/contracts/staking_contracts/StakingInterface.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]     /**
[codex:491748]     * @notice Bid for tokens by transferring ETH
[codex:491748]     */
[codex:491748]     function bid(uint256 _value) public payable onlyDelegateCall workLockSet {
[codex:491748]         workLock.bid{value: _value}();
[codex:491748]         emit Bid(msg.sender, _value);
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Cancel bid and refund deposited ETH
[codex:491748]     */
[codex:491748]     function cancelBid() public onlyDelegateCall workLockSet {
[codex:491748]         workLock.cancelBid();
[codex:491748]         emit BidCanceled(msg.sender);
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Withdraw compensation after force refund
[codex:491748]     */
[codex:491748]     function withdrawCompensation() public onlyDelegateCall workLockSet {
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing initialization and fallback vulnerabilities**
[codex:491748] 
[codex:491748] I'm unpacking how the staking and pooling contracts use delegatecall and fallback, focusing on how an attacker could exploit uninitialized contracts by taking ownership, setting malicious routers, and draining tokens through fallback calls restricted only to the owner. I'm also planning to check relevant files and lines to confirm concrete exploit paths.
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "InitializableStakingContract" -S contracts/contracts' in /tmp/codex-multi-abm_av9r succeeded in 9ms:
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:13:contract WorkLockPoolingContract is InitializableStakingContract, Ownable {
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:79:        InitializableStakingContract.initialize(_router);
[codex:491748] contracts/contracts/staking_contracts/AbstractStakingContract.sol:39:* @notice Internal base class for AbstractStakingContract and InitializableStakingContract
[codex:491748] contracts/contracts/staking_contracts/AbstractStakingContract.sol:125:abstract contract InitializableStakingContract is Initializable, RawStakingContract {
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Checking access control on upgrade functions**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "depositFromWorkLock|setWorkMeasurement|bondWorker|setReStake|setWindDown" contracts/contracts/StakingEscrow.sol' in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748] 464:    function setWorkMeasurement(address _staker, bool _measureWork) external returns (uint256) {
[codex:491748] 479:    function bondWorker(address _worker) external onlyStaker {
[codex:491748] 511:    function setReStake(bool _reStake) external {
[codex:491748] 538:    function depositFromWorkLock(
[codex:491748] 559:    function setWindDown(bool _windDown) external onlyStaker {
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '430,580p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]     */
[codex:491748]     function getWorkerFromStaker(address _staker) external view returns (address) {
[codex:491748]         return stakerInfo[_staker].worker;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Get work that completed by the staker
[codex:491748]     */
[codex:491748]     function getCompletedWork(address _staker) external view returns (uint256) {
[codex:491748]         return stakerInfo[_staker].completedWork;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Find index of downtime structure that includes specified period
[codex:491748]     * @dev If specified period is outside all downtime periods, the length of the array will be returned
[codex:491748]     * @param _staker Staker
[codex:491748]     * @param _period Specified period number
[codex:491748]     */
[codex:491748]     function findIndexOfPastDowntime(address _staker, uint16 _period) external view returns (uint256 index) {
[codex:491748]         StakerInfo storage info = stakerInfo[_staker];
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Examining staking function vulnerabilities**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,260p' contracts/contracts/staking_contracts/PoolingStakingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Contract acts as delegate for sub-stakers and owner
[codex:491748] **/
[codex:491748] contract PoolingStakingContract is AbstractStakingContract, Ownable {
[codex:491748]     using SafeMath for uint256;
[codex:491748]     using Address for address payable;
[codex:491748]     using SafeERC20 for NuCypherToken;
[codex:491748] 
[codex:491748]     event TokensDeposited(address indexed sender, uint256 value, uint256 depositedTokens);
[codex:491748]     event TokensWithdrawn(address indexed sender, uint256 value, uint256 depositedTokens);
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '260,360p' contracts/contracts/staking_contracts/PoolingStakingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748]     function isFallbackAllowed() public view override returns (bool) {
[codex:491748]         return msg.sender == owner();
[codex:491748]     }
[codex:491748] 
[codex:491748] }
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing contract initialization and reentrancy risks**
[codex:491748] 
[codex:491748] I'm reviewing constructors and init functions to spot unprotected setups, focusing on PoolingStakingContract and WorkLockPoolingContract. Then, I check for possible reentrancy in withdrawing functions—paying close attention to state updates before external calls in WorkLock and WorkLockPoolingContract. I’m also scrutinizing refund mechanics for rounding errors that might let repeated claims exceed allowed ETH, and inspecting SafeERC20 usage for consistent safety. Finally, I’m evaluating PolicyManager’s reward and withdrawal logic for potential loopholes in fee handling and fund withdrawal. There is a lot here, so I’m careful to weigh each contract's protections.
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/PolicyManager.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../zeppelin/token/ERC20/SafeERC20.sol";
[codex:491748] import "../zeppelin/math/SafeMath.sol";
[codex:491748] import "../zeppelin/math/Math.sol";
[codex:491748] import "../zeppelin/utils/Address.sol";
[codex:491748] import "./lib/AdditionalMath.sol";
[codex:491748] import "./lib/SignatureVerifier.sol";
[codex:491748] import "./StakingEscrow.sol";
[codex:491748] import "./NuCypherToken.sol";
[codex:491748] import "./proxy/Upgradeable.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Contract holds policy data and locks accrued policy fees
[codex:491748] * @dev |v6.1.2|
[codex:491748] */
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Searching for createPolicy method**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "createPolicy|create|policy" contracts/contracts/PolicyManager.sol' in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] 18:* @notice Contract holds policy data and locks accrued policy fees
[codex:491748] 30:        bytes16 indexed policyId,
[codex:491748] 39:        bytes16 indexed policyId,
[codex:491748] 45:        bytes16 indexed policyId,
[codex:491748] 50:    event PolicyRevoked(bytes16 indexed policyId, address indexed sender, uint256 value);
[codex:491748] 51:    event RefundForPolicy(bytes16 indexed policyId, address indexed sender, uint256 value);
[codex:491748] 208:    * @notice Create policy
[codex:491748] 209:    * @dev Generate policy id before creation
[codex:491748] 210:    * @param _policyId Policy id
[codex:491748] 211:    * @param _policyOwner Policy owner. Zero address means sender is owner
[codex:491748] 212:    * @param _endTimestamp End timestamp of the policy in seconds
[codex:491748] 213:    * @param _nodes Nodes that will handle policy
[codex:491748] 215:    function createPolicy(
[codex:491748] 216:        bytes16 _policyId,
[codex:491748] 217:        address _policyOwner,
[codex:491748] 223:        Policy storage policy = policies[_policyId];
[codex:491748] 225:            _policyId != RESERVED_POLICY_ID &&
[codex:491748] 226:            policy.feeRate == 0 &&
[codex:491748] 227:            !policy.disabled &&
[codex:491748] 236:        policy.sponsor = msg.sender;
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing potential vulnerabilities and signature replay risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,120p' contracts/contracts/NuCypherToken.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../zeppelin/token/ERC20/ERC20.sol";
[codex:491748] import "../zeppelin/token/ERC20/ERC20Detailed.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @title NuCypher token
[codex:491748] * @notice ERC20 token
[codex:491748] * @dev Optional approveAndCall() functionality to notify a contract if an approve() has occurred.
[codex:491748] */
[codex:491748] contract NuCypherToken is ERC20, ERC20Detailed('NuCypher', 'NU', 18) {
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @notice Set amount of tokens
[codex:491748]     * @param _totalSupplyOfTokens Total number of tokens
[codex:491748]     */
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing potential staking escrow risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "modifier onlyStaker" -n contracts/contracts/StakingEscrow.sol' in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] 214:    modifier onlyStaker()
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '200,240p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748]         )
[codex:491748]     {
[codex:491748]         // constant `1` in the expression `_minLockedPeriods > 1` uses to simplify the `lock` method
[codex:491748]         require(_minLockedPeriods > 1 && _maxAllowableLockedTokens != 0);
[codex:491748]         minLockedPeriods = _minLockedPeriods;
[codex:491748]         minAllowableLockedTokens = _minAllowableLockedTokens;
[codex:491748]         maxAllowableLockedTokens = _maxAllowableLockedTokens;
[codex:491748]         minWorkerPeriods = _minWorkerPeriods;
[codex:491748]         isTestContract = _isTestContract;
[codex:491748]     }
[codex:491748] 
[codex:491748]     /**
[codex:491748]     * @dev Checks the existence of a staker in the contract
[codex:491748]     */
[codex:491748]     modifier onlyStaker()
[codex:491748]     {
[codex:491748]         StakerInfo storage info = stakerInfo[msg.sender];
[codex:491748]         require(info.value > 0 || info.nextCommittedPeriod != 0);
[codex:491748]         _;
[codex:491748]     }
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Reviewing access control and initialization risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/staking_contracts/PreallocationEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Contract holds tokens for vesting.
[codex:491748] * Also tokens can be used as a stake in the staking escrow contract
[codex:491748] */
[codex:491748] contract PreallocationEscrow is AbstractStakingContract, Ownable {
[codex:491748]     using SafeMath for uint256;
[codex:491748]     using SafeERC20 for NuCypherToken;
[codex:491748]     using Address for address payable;
[codex:491748] 
[codex:491748]     event TokensDeposited(address indexed sender, uint256 value, uint256 duration);
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing refund calculation risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "library AdditionalMath" -n contracts/contracts/lib/AdditionalMath.sol' in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748] 12:library AdditionalMath {
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/lib/AdditionalMath.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748] 
[codex:491748] pragma solidity ^0.7.0;
[codex:491748] 
[codex:491748] 
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] 
[codex:491748] 
[codex:491748] /**
[codex:491748] * @notice Additional math operations
[codex:491748] */
[codex:491748] library AdditionalMath {
[codex:491748]     using SafeMath for uint256;
[codex:491748] 
[codex:491748]     function max16(uint16 a, uint16 b) internal pure returns (uint16) {
[codex:491748]         return a >= b ? a : b;
[codex:491748]     }
[codex:491748] 
[codex:491748]     function min16(uint16 a, uint16 b) internal pure returns (uint16) {
[codex:491748]         return a < b ? a : b;
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing potential vulnerabilities and initialization risks**
[codex:491748] 
[codex:491748] I'm going through possible overflow, underflow, division by zero, and rounding issues in multiple staking and pooling contract functions to see if they enable profit extraction. Most lead to reverts or minor rounding rather than direct exploits. However, I notice that the WorkLockPoolingContract has a public initializer without access control, posing a real risk if left uninitialized on deployment. This could let an attacker seize ownership and drain funds, so I'll locate exact files and line numbers to report this concretely.
[codex:491748] exec
[codex:491748] /bin/bash -lc "nl -ba contracts/contracts/staking_contracts/WorkLockPoolingContract.sol | sed -n '60,120p'" in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748]     60	    uint256 workerFraction;
[codex:491748]     61	    uint256 public workerWithdrawnReward;
[codex:491748]     62	
[codex:491748]     63	    mapping(address => Delegator) public delegators;
[codex:491748]     64	    bool depositIsEnabled = true;
[codex:491748]     65	
[codex:491748]     66	    /**
[codex:491748]     67	     * @notice Initialize function for using with OpenZeppelin proxy
[codex:491748]     68	     * @param _workerFraction Share of token reward that worker node owner will get.
[codex:491748]     69	     * Use value up to BASIS_FRACTION, if _workerFraction = BASIS_FRACTION -> means 100% reward as commission
[codex:491748]     70	     * @param _router StakingInterfaceRouter address
[codex:491748]     71	     * @param _workerOwner Owner of worker node, only this address can withdraw worker commission
[codex:491748]     72	     */
[codex:491748]     73	    function initialize(
[codex:491748]     74	        uint256 _workerFraction,
[codex:491748]     75	        StakingInterfaceRouter _router,
[codex:491748]     76	        address _workerOwner
[codex:491748]     77	    ) public initializer {
[codex:491748]     78	        require(_workerOwner != address(0) && _workerFraction <= BASIS_FRACTION);
[codex:491748]     79	        InitializableStakingContract.initialize(_router);
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Verifying line numbers and access control**
[codex:491748] exec
[codex:491748] /bin/bash -lc "nl -ba contracts/contracts/staking_contracts/AbstractStakingContract.sol | sed -n '110,180p'" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]    110	    /**
[codex:491748]    111	    * @dev Returns address of StakingInterfaceRouter
[codex:491748]    112	    */
[codex:491748]    113	    function router() public view override returns (StakingInterfaceRouter) {
[codex:491748]    114	        return router_;
[codex:491748]    115	    }
[codex:491748]    116	
[codex:491748]    117	}
[codex:491748]    118	
[codex:491748]    119	
[codex:491748]    120	/**
[codex:491748]    121	* @notice Base class for any staking contract usable with openzeppelin proxy
[codex:491748]    122	* @dev Implement `isFallbackAllowed()` or override fallback function
[codex:491748]    123	* Implement `withdrawTokens(uint256)` and `withdrawETH()` functions
[codex:491748]    124	*/
[codex:491748]    125	abstract contract InitializableStakingContract is Initializable, RawStakingContract {
[codex:491748]    126	
[codex:491748]    127	    StakingInterfaceRouter router_;
[codex:491748]    128	    NuCypherToken public token;
[codex:491748]    129	
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Verifying fallback ownership in initializer**
[codex:491748] exec
[codex:491748] /bin/bash -lc "nl -ba contracts/contracts/staking_contracts/WorkLockPoolingContract.sol | sed -n '410,470p'" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748]    410	        uint256 balance = totalWorkLockETHRefunded.sub(totalWorkLockETHWithdrawn);
[codex:491748]    411	
[codex:491748]    412	        if (availableETH > balance) {
[codex:491748]    413	            availableETH = balance;
[codex:491748]    414	        }
[codex:491748]    415	        return availableETH;
[codex:491748]    416	    }
[codex:491748]    417	
[codex:491748]    418	    /**
[codex:491748]    419	     * @notice Withdraw available amount of ETH to delegator
[codex:491748]    420	     */
[codex:491748]    421	    function withdrawRefund() external {
[codex:491748]    422	        uint256 availableETH = getAvailableRefund(msg.sender);
[codex:491748]    423	        require(availableETH > 0, "There is no available ETH to withdraw");
[codex:491748]    424	
[codex:491748]    425	        Delegator storage delegator = delegators[msg.sender];
[codex:491748]    426	        delegator.refundedETHWorkLock = delegator.refundedETHWorkLock.add(availableETH);
[codex:491748]    427	
[codex:491748]    428	        totalWorkLockETHWithdrawn = totalWorkLockETHWithdrawn.add(availableETH);
[codex:491748]    429	        msg.sender.sendValue(availableETH);
[codex:491748] 
[codex:491748] 
[codex:491748] thinking
[codex:491748] **Analyzing unprotected initialization exploit**
[codex:491748] thinking
[codex:491748] **Detailing exploit steps and recommendations**
[codex:491748] 
[codex:491748] I'll outline the step-by-step exploit process where an attacker initializes the contract with a malicious router, then uses fallback delegatecall to drain tokens and ETH, and I'll include recommendations and precise file references per instructions.
[codex:491748] codex
[codex:491748] {"no_findings":false,"summary":"Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.","findings":[{"severity":"high","category":"access_control","title":"Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract","exploit_scenario":"1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract’s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds).","recommendation":"Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.","evidence":"`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).","locations":["contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80","contracts/contracts/staking_contracts/AbstractStakingContract.sol:133","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"]}]}
[codex:491748] tokens used
[codex:491748] 76,553
[codex:491748] {"no_findings":false,"summary":"Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.","findings":[{"severity":"high","category":"access_control","title":"Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract","exploit_scenario":"1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract’s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds).","recommendation":"Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.","evidence":"`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).","locations":["contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80","contracts/contracts/staking_contracts/AbstractStakingContract.sol:133","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"]}]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-03T21:15:28.566701+00:00",
        "returncode": 0
    },
    "summary": "Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.",
    "raw_final": {
        "summary": "Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.",
        "findings": [
            {
                "title": "Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract",
                "category": "access_control",
                "evidence": "`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).",
                "severity": "high",
                "locations": [
                    "contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73",
                    "contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80",
                    "contracts/contracts/staking_contracts/AbstractStakingContract.sol:133",
                    "contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"
                ],
                "recommendation": "Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.",
                "exploit_scenario": "1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract\u2019s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds)."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
21
EXT*/BALANCE
25
Total opcodes
7489
Flags
delegatecall_present heavy_ext_balance_usage call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0276
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x8da5cb5b
00000019: GT
0000001a: PUSH2 0x014f
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xdd49756e
00000024: GT
00000025: PUSH2 0x00c1
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xeb85ed73
0000002f: GT
00000030: PUSH2 0x007a
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xeb85ed73
0000003a: EQ
0000003b: PUSH2 0x0b5e
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xf2fde38b
00000045: EQ
00000046: PUSH2 0x0b75
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf435d2e5
00000050: EQ
00000051: PUSH2 0x0bc6
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xf887ea40
0000005b: EQ
0000005c: PUSH2 0x0bdd
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0xfc0c546a
00000066: EQ
00000067: PUSH2 0x0c1e
0000006a: JUMPI
0000006b: DUP1
0000006c: PUSH4 0xfd012664
00000071: EQ
00000072: PUSH2 0x0c5f
00000075: JUMPI
00000076: PUSH2 0x027d
00000079: JUMP
0000007a: JUMPDEST
0000007b: DUP1
0000007c: PUSH4 0xdd49756e
00000081: EQ
00000082: PUSH2 0x0a4a
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xdd934e89
0000008c: EQ
0000008d: PUSH2 0x0a85
00000090: JUMPI
00000091: DUP1
00000092: PUSH4 0xe086e5ec
00000097: EQ
00000098: PUSH2 0x0ab0
0000009b: JUMPI
0000009c: DUP1
0000009d: PUSH4 0xe0974ea5
000000a2: EQ
000000a3: PUSH2 0x0ac7
000000a6: JUMPI
000000a7: DUP1
000000a8: PUSH4 0xe2fdcc17
000000ad: EQ
000000ae: PUSH2 0x0af2
000000b1: JUMPI
000000b2: DUP1
000000b3: PUSH4 0xe78b8842
000000b8: EQ
000000b9: PUSH2 0x0b33
000000bc: JUMPI
000000bd: PUSH2 0x027d
000000c0: JUMP
000000c1: JUMPDEST
000000c2: DUP1
000000c3: PUSH4 0x9b53f48e
000000c8: GT
000000c9: PUSH2 0x0113
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0x9b53f48e
000000d3: EQ
000000d4: PUSH2 0x08aa
000000d7: JUMPI
000000d8: DUP1
000000d9: PUSH4 0xa474cd5c
000000de: EQ
000000df: PUSH2 0x08c1
000000e2: JUMPI
000000e3: DUP1
000000e4: PUSH4 0xb4988fd0
000000e9: EQ
000000ea: PUSH2 0x0926
000000ed: JUMPI
000000ee: DUP1
000000ef: PUSH4 0xbd4bd9ce
000000f4: EQ
000000f5: PUSH2 0x09a1
000000f8: JUMPI
000000f9: DUP1
000000fa: PUSH4 0xc4d66de8
000000ff: EQ
00000100: PUSH2 0x09ce
00000103: JUMPI
00000104: DUP1
00000105: PUSH4 0xd42aa8a7
0000010a: EQ
0000010b: PUSH2 0x0a1f
0000010e: JUMPI
0000010f: PUSH2 0x027d
00000112: JUMP
00000113: JUMPDEST
00000114: DUP1
00000115: PUSH4 0x8da5cb5b
0000011a: EQ
0000011b: PUSH2 0x07f0
0000011e: JUMPI
0000011f: DUP1
00000120: PUSH4 0x8f32d59b
00000125: EQ
00000126: PUSH2 0x0831
00000129: JUMPI
0000012a: DUP1
0000012b: PUSH4 0x9212e643
00000130: EQ
00000131: PUSH2 0x085e
00000134: JUMPI
00000135: DUP1
00000136: PUSH4 0x92795a8f
0000013b: EQ
0000013c: PUSH2 0x0889
0000013f: JUMPI
00000140: DUP1
00000141: PUSH4 0x9435c887
00000146: EQ
00000147: PUSH2 0x0893
0000014a: JUMPI
0000014b: PUSH2 0x027d
0000014e: JUMP
0000014f: JUMPDEST
00000150: DUP1
00000151: PUSH4 0x595b1872
00000156: GT
00000157: PUSH2 0x01e8
0000015a: JUMPI
0000015b: DUP1
0000015c: PUSH4 0x72f96040
00000161: GT
00000162: PUSH2 0x01ac
00000165: JUMPI
00000166: DUP1
00000167: PUSH4 0x72f96040
0000016c: EQ
0000016d: PUSH2 0x067d
00000170: JUMPI
00000171: DUP1
00000172: PUSH4 0x768972cb
00000177: EQ
00000178: PUSH2 0x06e2
0000017b: JUMPI
0000017c: DUP1
0000017d: PUSH4 0x853828b6
00000182: EQ
00000183: PUSH2 0x070d
00000186: JUMPI
00000187: DUP1
00000188: PUSH4 0x87a15dc9
0000018d: EQ
0000018e: PUSH2 0x0724
00000191: JUMPI
00000192: DUP1
00000193: PUSH4 0x8b713b2e
00000198: EQ
00000199: PUSH2 0x073b
0000019c: JUMPI
0000019d: DUP1
0000019e: PUSH4 0x8d23fc61
000001a3: EQ
000001a4: PUSH2 0x0766
000001a7: JUMPI
000001a8: PUSH2 0x027d
000001ab: JUMP
000001ac: JUMPDEST
000001ad: DUP1
000001ae: PUSH4 0x595b1872
000001b3: EQ
000001b4: PUSH2 0x05b8
000001b7: JUMPI
000001b8: DUP1
000001b9: PUSH4 0x5cdeb0d6
000001be: EQ
000001bf: PUSH2 0x05f9
000001c2: JUMPI
000001c3: DUP1
000001c4: PUSH4 0x6164dbf9
000001c9: EQ
000001ca: PUSH2 0x0610
000001cd: JUMPI
000001ce: DUP1
000001cf: PUSH4 0x62b43d88
000001d4: EQ
000001d5: PUSH2 0x063b
000001d8: JUMPI
000001d9: DUP1
000001da: PUSH4 0x715018a6
000001df: EQ
000001e0: PUSH2 0x0666
000001e3: JUMPI
000001e4: PUSH2 0x027d
000001e7: JUMP
000001e8: JUMPDEST
000001e9: DUP1
000001ea: PUSH4 0x31843e25
000001ef: GT
000001f0: PUSH2 0x023a
000001f3: JUMPI
000001f4: DUP1
000001f5: PUSH4 0x31843e25
000001fa: EQ
000001fb: PUSH2 0x04a1
000001fe: JUMPI
000001ff: DUP1
00000200: PUSH4 0x44cbee0d
00000205: EQ
00000206: PUSH2 0x04cc
00000209: JUMPI
0000020a: DUP1
0000020b: PUSH4 0x454a2ab3
00000210: EQ
00000211: PUSH2 0x04f7
00000214: JUMPI
00000215: DUP1
00000216: PUSH4 0x46a1cd08
0000021b: EQ
0000021c: PUSH2 0x0525
0000021f: JUMPI
00000220: DUP1
00000221: PUSH4 0x4e71d92d
00000226: EQ
00000227: PUSH2 0x058a
0000022a: JUMPI
0000022b: DUP1
0000022c: PUSH4 0x590e1ae3
00000231: EQ
00000232: PUSH2 0x05a1
00000235: JUMPI
00000236: PUSH2 0x027d
00000239: JUMP
0000023a: JUMPDEST
0000023b: DUP1
0000023c: PUSH4 0x0cc57511
00000241: EQ
00000242: PUSH2 0x03cc
00000245: JUMPI
00000246: DUP1
00000247: PUSH4 0x110f8874
0000024c: EQ
0000024d: PUSH2 0x03e3
00000250: JUMPI
00000251: DUP1
00000252: PUSH4 0x1c7fd532
00000257: EQ
00000258: PUSH2 0x03fa
0000025b: JUMPI
0000025c: DUP1
0000025d: PUSH4 0x2dced887
00000262: EQ
00000263: PUSH2 0x043b
00000266: JUMPI
00000267: DUP1
00000268: PUSH4 0x315a095d
0000026d: EQ
0000026e: PUSH2 0x0466
00000271: JUMPI
00000272: PUSH2 0x027d
00000275: JUMP
00000276: JUMPDEST
00000277: CALLDATASIZE
00000278: PUSH2 0x027d
0000027b: JUMPI
0000027c: STOP
0000027d: JUMPDEST
0000027e: PUSH2 0x0285
00000281: PUSH2 0x0c8a
00000284: JUMP
00000285: JUMPDEST
00000286: PUSH2 0x028e
00000289: JUMPI
0000028a: PUSH1 0x00
0000028c: DUP1
0000028d: REVERT
0000028e: JUMPDEST
0000028f: PUSH1 0x00
00000291: PUSH2 0x0298
00000294: PUSH2 0x0cc7
00000297: JUMP
00000298: JUMPDEST
00000299: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002ae: AND
000002af: PUSH4 0xd4b83992
000002b4: PUSH1 0x40
000002b6: MLOAD
000002b7: DUP2
000002b8: PUSH4 0xffffffff
000002bd: AND
000002be: PUSH1 0xe0
000002c0: SHL
000002c1: DUP2
000002c2: MSTORE
000002c3: PUSH1 0x04
000002c5: ADD
000002c6: PUSH1 0x20
000002c8: PUSH1 0x40
000002ca: MLOAD
000002cb: DUP1
000002cc: DUP4
000002cd: SUB
000002ce: DUP2
000002cf: DUP7
000002d0: DUP1
000002d1: EXTCODESIZE
000002d2: ISZERO
000002d3: DUP1
000002d4: ISZERO
000002d5: PUSH2 0x02dd
000002d8: JUMPI
000002d9: PUSH1 0x00
000002db: DUP1
000002dc: REVERT
000002dd: JUMPDEST
000002de: POP
000002df: GAS
000002e0: STATICCALL
000002e1: ISZERO
000002e2: DUP1
000002e3: ISZERO
000002e4: PUSH2 0x02f1
000002e7: JUMPI
000002e8: RETURNDATASIZE
000002e9: PUSH1 0x00
000002eb: DUP1
000002ec: RETURNDATACOPY
000002ed: RETURNDATASIZE
000002ee: PUSH1 0x00
000002f0: REVERT
000002f1: JUMPDEST
000002f2: POP
000002f3: POP
000002f4: POP
000002f5: POP
000002f6: PUSH1 0x40
000002f8: MLOAD
000002f9: RETURNDATASIZE
000002fa: PUSH1 0x20
000002fc: DUP2
000002fd: LT
000002fe: ISZERO
000002ff: PUSH2 0x0307
00000302: JUMPI
00000303: PUSH1 0x00
00000305: DUP1
00000306: REVERT
00000307: JUMPDEST
00000308: DUP2
00000309: ADD
0000030a: SWAP1
0000030b: DUP1
0000030c: DUP1
0000030d: MLOAD
0000030e: SWAP1
0000030f: PUSH1 0x20
00000311: ADD
00000312: SWAP1
00000313: SWAP3
00000314: SWAP2
00000315: SWAP1
00000316: POP
00000317: POP
00000318: POP
00000319: SWAP1
0000031a: POP
0000031b: PUSH2 0x0339
0000031e: DUP2
0000031f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000334: AND
00000335: PUSH2 0x0cf1
00000338: JUMP
00000339: JUMPDEST
0000033a: PUSH2 0x0342
0000033d: JUMPI
0000033e: PUSH1 0x00
00000340: DUP1
00000341: REVERT
00000342: JUMPDEST
00000343: PUSH1 0x00
00000345: DUP2
00000346: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000035b: AND
0000035c: PUSH1 0x00
0000035e: CALLDATASIZE
0000035f: PUSH1 0x40
00000361: MLOAD
00000362: DUP1
00000363: DUP4
00000364: DUP4
00000365: DUP1
00000366: DUP3
00000367: DUP5
00000368: CALLDATACOPY
00000369: DUP1
0000036a: DUP4
0000036b: ADD
0000036c: SWAP3
0000036d: POP
0000036e: POP
0000036f: POP
00000370: SWAP3
00000371: POP
00000372: POP
00000373: POP
00000374: PUSH1 0x00
00000376: PUSH1 0x40
00000378: MLOAD
00000379: DUP1
0000037a: DUP4
0000037b: SUB
0000037c: DUP2
0000037d: DUP6
0000037e: GAS
0000037f: DELEGATECALL
00000380: SWAP2
00000381: POP
00000382: POP
00000383: RETURNDATASIZE
00000384: DUP1
00000385: PUSH1 0x00
00000387: DUP2
00000388: EQ
00000389: PUSH2 0x03ae
0000038c: JUMPI
0000038d: PUSH1 0x40
0000038f: MLOAD
00000390: SWAP2
00000391: POP
00000392: PUSH1 0x1f
00000394: NOT
00000395: PUSH1 0x3f
00000397: RETURNDATASIZE
00000398: ADD
00000399: AND
0000039a: DUP3
0000039b: ADD
0000039c: PUSH1 0x40
0000039e: MSTORE
0000039f: RETURNDATASIZE
000003a0: DUP3
000003a1: MSTORE
000003a2: RETURNDATASIZE
000003a3: PUSH1 0x00
000003a5: PUSH1 0x20
000003a7: DUP5
000003a8: ADD
000003a9: RETURNDATACOPY
000003aa: PUSH2 0x03b3
000003ad: JUMP
000003ae: JUMPDEST
000003af: PUSH1 0x60
000003b1: SWAP2
000003b2: POP
000003b3: JUMPDEST
000003b4: POP
000003b5: POP
000003b6: SWAP1
000003b7: POP
000003b8: DUP1
000003b9: ISZERO
000003ba: PUSH2 0x03c7
000003bd: JUMPI
000003be: RETURNDATASIZE
000003bf: PUSH1 0x00
000003c1: DUP1
000003c2: RETURNDATACOPY
000003c3: RETURNDATASIZE
000003c4: PUSH1 0x00
000003c6: RETURN
000003c7: JUMPDEST
000003c8: PUSH1 0x00
000003ca: DUP1
000003cb: REVERT
000003cc: JUMPDEST
000003cd: CALLVALUE
000003ce: DUP1
000003cf: ISZERO
000003d0: PUSH2 0x03d8
000003d3: JUMPI
000003d4: PUSH1 0x00
000003d6: DUP1
000003d7: REVERT
000003d8: JUMPDEST
000003d9: POP
000003da: PUSH2 0x03e1
000003dd: PUSH2 0x0d3c
000003e0: JUMP
000003e1: JUMPDEST
000003e2: STOP
000003e3: JUMPDEST
000003e4: CALLVALUE
000003e5: DUP1
000003e6: ISZERO
000003e7: PUSH2 0x03ef
000003ea: JUMPI
000003eb: PUSH1 0x00
000003ed: DUP1
000003ee: REVERT
000003ef: JUMPDEST
000003f0: POP
000003f1: PUSH2 0x03f8
000003f4: PUSH2 0x0dc9
000003f7: JUMP
000003f8: JUMPDEST
000003f9: STOP
000003fa: JUMPDEST
000003fb: CALLVALUE
000003fc: DUP1
000003fd: ISZERO
000003fe: PUSH2 0x0406
00000401: JUMPI
00000402: PUSH1 0x00
00000404: DUP1
00000405: REVERT
00000406: JUMPDEST
00000407: POP
00000408: PUSH2 0x040f
0000040b: PUSH2 0x0f27
0000040e: JUMP
0000040f: JUMPDEST
00000410: PUSH1 0x40
00000412: MLOAD
00000413: DUP1
00000414: DUP3
00000415: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000042a: AND
0000042b: DUP2
0000042c: MSTORE
0000042d: PUSH1 0x20
0000042f: ADD
00000430: SWAP2
00000431: POP
00000432: POP
00000433: PUSH1 0x40
00000435: MLOAD
00000436: DUP1
00000437: SWAP2
00000438: SUB
00000439: SWAP1
0000043a: RETURN
0000043b: JUMPDEST
0000043c: CALLVALUE
0000043d: DUP1
0000043e: ISZERO
0000043f: PUSH2 0x0447
00000442: JUMPI
00000443: PUSH1 0x00
00000445: DUP1
00000446: REVERT
00000447: JUMPDEST
00000448: POP
00000449: PUSH2 0x0450
0000044c: PUSH2 0x0f4d
0000044f: JUMP
00000450: JUMPDEST
00000451: PUSH1 0x40
00000453: MLOAD
00000454: DUP1
00000455: DUP3
00000456: DUP2
00000457: MSTORE
00000458: PUSH1 0x20
0000045a: ADD
0000045b: SWAP2
0000045c: POP
0000045d: POP
0000045e: PUSH1 0x40
00000460: MLOAD
00000461: DUP1
00000462: SWAP2
00000463: SUB
00000464: SWAP1
00000465: RETURN
00000466: JUMPDEST
00000467: CALLVALUE
00000468: DUP1
00000469: ISZERO
0000046a: PUSH2 0x0472
0000046d: JUMPI
0000046e: PUSH1 0x00
00000470: DUP1
00000471: REVERT
00000472: JUMPDEST
00000473: POP
00000474: PUSH2 0x049f
00000477: PUSH1 0x04
00000479: DUP1
0000047a: CALLDATASIZE
0000047b: SUB
0000047c: PUSH1 0x20
0000047e: DUP2
0000047f: LT
00000480: ISZERO
00000481: PUSH2 0x0489
00000484: JUMPI
00000485: PUSH1 0x00
00000487: DUP1
00000488: REVERT
00000489: JUMPDEST
0000048a: DUP2
0000048b: ADD
0000048c: SWAP1
0000048d: DUP1
0000048e: DUP1
0000048f: CALLDATALOAD
00000490: SWAP1
00000491: PUSH1 0x20
00000493: ADD
00000494: SWAP1
00000495: SWAP3
00000496: SWAP2
00000497: SWAP1
00000498: POP
00000499: POP
0000049a: POP
0000049b: PUSH2 0x0f53
0000049e: JUMP
0000049f: JUMPDEST
000004a0: STOP
000004a1: JUMPDEST
000004a2: CALLVALUE
000004a3: DUP1
000004a4: ISZERO
000004a5: PUSH2 0x04ad
000004a8: JUMPI
000004a9: PUSH1 0x00
000004ab: DUP1
000004ac: REVERT
000004ad: JUMPDEST
000004ae: POP
000004af: PUSH2 0x04b6
000004b2: PUSH2 0x120d
000004b5: JUMP
000004b6: JUMPDEST
000004b7: PUSH1 0x40
000004b9: MLOAD
000004ba: DUP1
000004bb: DUP3
000004bc: DUP2
000004bd: MSTORE
000004be: PUSH1 0x20
000004c0: ADD
000004c1: SWAP2
000004c2: POP
000004c3: POP
000004c4: PUSH1 0x40
000004c6: MLOAD
000004c7: DUP1
000004c8: SWAP2
000004c9: SUB
000004ca: SWAP1
000004cb: RETURN
000004cc: JUMPDEST
000004cd: CALLVALUE
000004ce: DUP1
000004cf: ISZERO
000004d0: PUSH2 0x04d8
000004d3: JUMPI
000004d4: PUSH1 0x00
000004d6: DUP1
000004d7: REVERT
000004d8: JUMPDEST
000004d9: POP
000004da: PUSH2 0x04e1
000004dd: PUSH2 0x1217
000004e0: JUMP
000004e1: JUMPDEST
000004e2: PUSH1 0x40
000004e4: MLOAD
000004e5: DUP1
000004e6: DUP3
000004e7: DUP2
000004e8: MSTORE
000004e9: PUSH1 0x20
000004eb: ADD
000004ec: SWAP2
000004ed: POP
000004ee: POP
000004ef: PUSH1 0x40
000004f1: MLOAD
000004f2: DUP1
000004f3: SWAP2
000004f4: SUB
000004f5: SWAP1
000004f6: RETURN
000004f7: JUMPDEST
000004f8: PUSH2 0x0523
000004fb: PUSH1 0x04
000004fd: DUP1
000004fe: CALLDATASIZE
000004ff: SUB
00000500: PUSH1 0x20
00000502: DUP2
00000503: LT
00000504: ISZERO
00000505: PUSH2 0x050d
00000508: JUMPI
00000509: PUSH1 0x00
0000050b: DUP1
0000050c: REVERT
0000050d: JUMPDEST
0000050e: DUP2
0000050f: ADD
00000510: SWAP1
00000511: DUP1
00000512: DUP1
00000513: CALLDATALOAD
00000514: SWAP1
00000515: PUSH1 0x20
00000517: ADD
00000518: SWAP1
00000519: SWAP3
0000051a: SWAP2
0000051b: SWAP1
0000051c: POP
0000051d: POP
0000051e: POP
0000051f: PUSH2 0x121c
00000522: JUMP
00000523: JUMPDEST
00000524: STOP
00000525: JUMPDEST
00000526: CALLVALUE
00000527: DUP1
00000528: ISZERO
00000529: PUSH2 0x0531
0000052c: JUMPI
0000052d: PUSH1 0x00
0000052f: DUP1
00000530: REVERT
00000531: JUMPDEST
00000532: POP
00000533: PUSH2 0x0574
00000536: PUSH1 0x04
00000538: DUP1
00000539: CALLDATASIZE
0000053a: SUB
0000053b: PUSH1 0x20
0000053d: DUP2
0000053e: LT
0000053f: ISZERO
00000540: PUSH2 0x0548
00000543: JUMPI
00000544: PUSH1 0x00
00000546: DUP1
00000547: REVERT
00000548: JUMPDEST
00000549: DUP2
0000054a: ADD
0000054b: SWAP1
0000054c: DUP1
0000054d: DUP1
0000054e: CALLDATALOAD
0000054f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000564: AND
00000565: SWAP1
00000566: PUSH1 0x20
00000568: ADD
00000569: SWAP1
0000056a: SWAP3
0000056b: SWAP2
0000056c: SWAP1
0000056d: POP
0000056e: POP
0000056f: POP
00000570: PUSH2 0x1221
00000573: JUMP
00000574: JUMPDEST
00000575: PUSH1 0x40
00000577: MLOAD
00000578: DUP1
00000579: DUP3
0000057a: DUP2
0000057b: MSTORE
0000057c: PUSH1 0x20
0000057e: ADD
0000057f: SWAP2
00000580: POP
00000581: POP
00000582: PUSH1 0x40
00000584: MLOAD
00000585: DUP1
00000586: SWAP2
00000587: SUB
00000588: SWAP1
00000589: RETURN
0000058a: JUMPDEST
0000058b: CALLVALUE
0000058c: DUP1
0000058d: ISZERO
0000058e: PUSH2 0x0596
00000591: JUMPI
00000592: PUSH1 0x00
00000594: DUP1
00000595: REVERT
00000596: JUMPDEST
00000597: POP
00000598: PUSH2 0x059f
0000059b: PUSH2 0x130e
0000059e: JUMP
0000059f: JUMPDEST
000005a0: STOP
000005a1: JUMPDEST
000005a2: CALLVALUE
000005a3: DUP1
000005a4: ISZERO
000005a5: PUSH2 0x05ad
000005a8: JUMPI
000005a9: PUSH1 0x00
000005ab: DUP1
000005ac: REVERT
000005ad: JUMPDEST
000005ae: POP
000005af: PUSH2 0x05b6
000005b2: PUSH2 0x1313
000005b5: JUMP
000005b6: JUMPDEST
000005b7: STOP
000005b8: JUMPDEST
000005b9: CALLVALUE
000005ba: DUP1
000005bb: ISZERO
000005bc: PUSH2 0x05c4
000005bf: JUMPI
000005c0: PUSH1 0x00
000005c2: DUP1
000005c3: REVERT
000005c4: JUMPDEST
000005c5: POP
000005c6: PUSH2 0x05cd
000005c9: PUSH2 0x15af
000005cc: JUMP
000005cd: JUMPDEST
000005ce: PUSH1 0x40
000005d0: MLOAD
000005d1: DUP1
000005d2: DUP3
000005d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005e8: AND
000005e9: DUP2
000005ea: MSTORE
000005eb: PUSH1 0x20
000005ed: ADD
000005ee: SWAP2
000005ef: POP
000005f0: POP
000005f1: PUSH1 0x40
000005f3: MLOAD
000005f4: DUP1
000005f5: SWAP2
000005f6: SUB
000005f7: SWAP1
000005f8: RETURN
000005f9: JUMPDEST
000005fa: CALLVALUE
000005fb: DUP1
000005fc: ISZERO
000005fd: PUSH2 0x0605
00000600: JUMPI
00000601: PUSH1 0x00
00000603: DUP1
00000604: REVERT
00000605: JUMPDEST
00000606: POP
00000607: PUSH2 0x060e
0000060a: PUSH2 0x15d5
0000060d: JUMP
0000060e: JUMPDEST
0000060f: STOP
00000610: JUMPDEST
00000611: CALLVALUE
00000612: DUP1
00000613: ISZERO
00000614: PUSH2 0x061c
00000617: JUMPI
00000618: PUSH1 0x00
0000061a: DUP1
0000061b: REVERT
0000061c: JUMPDEST
0000061d: POP
0000061e: PUSH2 0x0625
00000621: PUSH2 0x1662
00000624: JUMP
00000625: JUMPDEST
00000626: PUSH1 0x40
00000628: MLOAD
00000629: DUP1
0000062a: DUP3
0000062b: DUP2
0000062c: MSTORE
0000062d: PUSH1 0x20
0000062f: ADD
00000630: SWAP2
00000631: POP
00000632: POP
00000633: PUSH1 0x40
00000635: MLOAD
00000636: DUP1
00000637: SWAP2
00000638: SUB
00000639: SWAP1
0000063a: RETURN
0000063b: JUMPDEST
0000063c: CALLVALUE
0000063d: DUP1
0000063e: ISZERO
0000063f: PUSH2 0x0647
00000642: JUMPI
00000643: PUSH1 0x00
00000645: DUP1
00000646: REVERT
00000647: JUMPDEST
00000648: POP
00000649: PUSH2 0x0650
0000064c: PUSH2 0x1668
0000064f: JUMP
00000650: JUMPDEST
00000651: PUSH1 0x40
00000653: MLOAD
00000654: DUP1
00000655: DUP3
00000656: DUP2
00000657: MSTORE
00000658: PUSH1 0x20
0000065a: ADD
0000065b: SWAP2
0000065c: POP
0000065d: POP
0000065e: PUSH1 0x40
00000660: MLOAD
00000661: DUP1
00000662: SWAP2
00000663: SUB
00000664: SWAP1
00000665: RETURN
00000666: JUMPDEST
00000667: CALLVALUE
00000668: DUP1
00000669: ISZERO
0000066a: PUSH2 0x0672
0000066d: JUMPI
0000066e: PUSH1 0x00
00000670: DUP1
00000671: REVERT
00000672: JUMPDEST
00000673: POP
00000674: PUSH2 0x067b
00000677: PUSH2 0x166e
0000067a: JUMP
0000067b: JUMPDEST
0000067c: STOP
0000067d: JUMPDEST
0000067e: CALLVALUE
0000067f: DUP1
00000680: ISZERO
00000681: PUSH2 0x0689
00000684: JUMPI
00000685: PUSH1 0x00
00000687: DUP1
00000688: REVERT
00000689: JUMPDEST
0000068a: POP
0000068b: PUSH2 0x06cc
0000068e: PUSH1 0x04
00000690: DUP1
00000691: CALLDATASIZE
00000692: SUB
00000693: PUSH1 0x20
00000695: DUP2
00000696: LT
00000697: ISZERO
00000698: PUSH2 0x06a0
0000069b: JUMPI
0000069c: PUSH1 0x00
0000069e: DUP1
0000069f: REVERT
000006a0: JUMPDEST
000006a1: DUP2
000006a2: ADD
000006a3: SWAP1
000006a4: DUP1
000006a5: DUP1
000006a6: CALLDATALOAD
000006a7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006bc: AND
000006bd: SWAP1
000006be: PUSH1 0x20
000006c0: ADD
000006c1: SWAP1
000006c2: SWAP3
000006c3: SWAP2
000006c4: SWAP1
000006c5: POP
000006c6: POP
000006c7: POP
000006c8: PUSH2 0x1740
000006cb: JUMP
000006cc: JUMPDEST
000006cd: PUSH1 0x40
000006cf: MLOAD
000006d0: DUP1
000006d1: DUP3
000006d2: DUP2
000006d3: MSTORE
000006d4: PUSH1 0x20
000006d6: ADD
000006d7: SWAP2
000006d8: POP
000006d9: POP
000006da: PUSH1 0x40
000006dc: MLOAD
000006dd: DUP1
000006de: SWAP2
000006df: SUB
000006e0: SWAP1
000006e1: RETURN
000006e2: JUMPDEST
000006e3: CALLVALUE
000006e4: DUP1
000006e5: ISZERO
000006e6: PUSH2 0x06ee
000006e9: JUMPI
000006ea: PUSH1 0x00
000006ec: DUP1
000006ed: REVERT
000006ee: JUMPDEST
000006ef: POP
000006f0: PUSH2 0x06f7
000006f3: PUSH2 0x1803
000006f6: JUMP
000006f7: JUMPDEST
000006f8: PUSH1 0x40
000006fa: MLOAD
000006fb: DUP1
000006fc: DUP3
000006fd: DUP2
000006fe: MSTORE
000006ff: PUSH1 0x20
00000701: ADD
00000702: SWAP2
00000703: POP
00000704: POP
00000705: PUSH1 0x40
00000707: MLOAD
00000708: DUP1
00000709: SWAP2
0000070a: SUB
0000070b: SWAP1
0000070c: RETURN
0000070d: JUMPDEST
0000070e: CALLVALUE
0000070f: DUP1
00000710: ISZERO
00000711: PUSH2 0x0719
00000714: JUMPI
00000715: PUSH1 0x00
00000717: DUP1
00000718: REVERT
00000719: JUMPDEST
0000071a: POP
0000071b: PUSH2 0x0722
0000071e: PUSH2 0x1809
00000721: JUMP
00000722: JUMPDEST
00000723: STOP
00000724: JUMPDEST
00000725: CALLVALUE
00000726: DUP1
00000727: ISZERO
00000728: PUSH2 0x0730
0000072b: JUMPI
0000072c: PUSH1 0x00
0000072e: DUP1
0000072f: REVERT
00000730: JUMPDEST
00000731: POP
00000732: PUSH2 0x0739
00000735: PUSH2 0x1d4b
00000738: JUMP
00000739: JUMPDEST
0000073a: STOP
0000073b: JUMPDEST
0000073c: CALLVALUE
0000073d: DUP1
0000073e: ISZERO
0000073f: PUSH2 0x0747
00000742: JUMPI
00000743: PUSH1 0x00
00000745: DUP1
00000746: REVERT
00000747: JUMPDEST
00000748: POP
00000749: PUSH2 0x0750
0000074c: PUSH2 0x1d50
0000074f: JUMP
00000750: JUMPDEST
00000751: PUSH1 0x40
00000753: MLOAD
00000754: DUP1
00000755: DUP3
00000756: DUP2
00000757: MSTORE
00000758: PUSH1 0x20
0000075a: ADD
0000075b: SWAP2
0000075c: POP
0000075d: POP
0000075e: PUSH1 0x40
00000760: MLOAD
00000761: DUP1
00000762: SWAP2
00000763: SUB
00000764: SWAP1
00000765: RETURN
00000766: JUMPDEST
00000767: CALLVALUE
00000768: DUP1
00000769: ISZERO
0000076a: PUSH2 0x0772
0000076d: JUMPI
0000076e: PUSH1 0x00
00000770: DUP1
00000771: REVERT
00000772: JUMPDEST
00000773: POP
00000774: PUSH2 0x07b5
00000777: PUSH1 0x04
00000779: DUP1
0000077a: CALLDATASIZE
0000077b: SUB
0000077c: PUSH1 0x20
0000077e: DUP2
0000077f: LT
00000780: ISZERO
00000781: PUSH2 0x0789
00000784: JUMPI
00000785: PUSH1 0x00
00000787: DUP1
00000788: REVERT
00000789: JUMPDEST
0000078a: DUP2
0000078b: ADD
0000078c: SWAP1
0000078d: DUP1
0000078e: DUP1
0000078f: CALLDATALOAD
00000790: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007a5: AND
000007a6: SWAP1
000007a7: PUSH1 0x20
000007a9: ADD
000007aa: SWAP1
000007ab: SWAP3
000007ac: SWAP2
000007ad: SWAP1
000007ae: POP
000007af: POP
000007b0: POP
000007b1: PUSH2 0x1d56
000007b4: JUMP
000007b5: JUMPDEST
000007b6: PUSH1 0x40
000007b8: MLOAD
000007b9: DUP1
000007ba: DUP8
000007bb: DUP2
000007bc: MSTORE
000007bd: PUSH1 0x20
000007bf: ADD
000007c0: DUP7
000007c1: DUP2
000007c2: MSTORE
000007c3: PUSH1 0x20
000007c5: ADD
000007c6: DUP6
000007c7: DUP2
000007c8: MSTORE
000007c9: PUSH1 0x20
000007cb: ADD
000007cc: DUP5
000007cd: DUP2
000007ce: MSTORE
000007cf: PUSH1 0x20
000007d1: ADD
000007d2: DUP4
000007d3: DUP2
000007d4: MSTORE
000007d5: PUSH1 0x20
000007d7: ADD
000007d8: DUP3
000007d9: ISZERO
000007da: ISZERO
000007db: DUP2
000007dc: MSTORE
000007dd: PUSH1 0x20
000007df: ADD
000007e0: SWAP7
000007e1: POP
000007e2: POP
000007e3: POP
000007e4: POP
000007e5: POP
000007e6: POP
000007e7: POP
000007e8: PUSH1 0x40
000007ea: MLOAD
000007eb: DUP1
000007ec: SWAP2
000007ed: SUB
000007ee: SWAP1
000007ef: RETURN
000007f0: JUMPDEST
000007f1: CALLVALUE
000007f2: DUP1
000007f3: ISZERO
000007f4: PUSH2 0x07fc
000007f7: JUMPI
000007f8: PUSH1 0x00
000007fa: DUP1
000007fb: REVERT
000007fc: JUMPDEST
000007fd: POP
000007fe: PUSH2 0x0805
00000801: PUSH2 0x1d9f
00000804: JUMP
00000805: JUMPDEST
00000806: PUSH1 0x40
00000808: MLOAD
00000809: DUP1
0000080a: DUP3
0000080b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000820: AND
00000821: DUP2
00000822: MSTORE
00000823: PUSH1 0x20
00000825: ADD
00000826: SWAP2
00000827: POP
00000828: POP
00000829: PUSH1 0x40
0000082b: MLOAD
0000082c: DUP1
0000082d: SWAP2
0000082e: SUB
0000082f: SWAP1
00000830: RETURN
00000831: JUMPDEST
00000832: CALLVALUE
00000833: DUP1
00000834: ISZERO
00000835: PUSH2 0x083d
00000838: JUMPI
00000839: PUSH1 0x00
0000083b: DUP1
0000083c: REVERT
0000083d: JUMPDEST
0000083e: POP
0000083f: PUSH2 0x0846
00000842: PUSH2 0x1dc9
00000845: JUMP
00000846: JUMPDEST
00000847: PUSH1 0x40
00000849: MLOAD
0000084a: DUP1
0000084b: DUP3
0000084c: ISZERO
0000084d: ISZERO
0000084e: DUP2
0000084f: MSTORE
00000850: PUSH1 0x20
00000852: ADD
00000853: SWAP2
00000854: POP
00000855: POP
00000856: PUSH1 0x40
00000858: MLOAD
00000859: DUP1
0000085a: SWAP2
0000085b: SUB
0000085c: SWAP1
0000085d: RETURN
0000085e: JUMPDEST
0000085f: CALLVALUE
00000860: DUP1
00000861: ISZERO
00000862: PUSH2 0x086a
00000865: JUMPI
00000866: PUSH1 0x00
00000868: DUP1
00000869: REVERT
0000086a: JUMPDEST
0000086b: POP
0000086c: PUSH2 0x0873
0000086f: PUSH2 0x1e21
00000872: JUMP
00000873: JUMPDEST
00000874: PUSH1 0x40
00000876: MLOAD
00000877: DUP1
00000878: DUP3
00000879: DUP2
0000087a: MSTORE
0000087b: PUSH1 0x20
0000087d: ADD
0000087e: SWAP2
0000087f: POP
00000880: POP
00000881: PUSH1 0x40
00000883: MLOAD
00000884: DUP1
00000885: SWAP2
00000886: SUB
00000887: SWAP1
00000888: RETURN
00000889: JUMPDEST
0000088a: PUSH2 0x0891
0000088d: PUSH2 0x1e99
00000890: JUMP
00000891: JUMPDEST
00000892: STOP
00000893: JUMPDEST
00000894: CALLVALUE
00000895: DUP1
00000896: ISZERO
00000897: PUSH2 0x089f
0000089a: JUMPI
0000089b: PUSH1 0x00
0000089d: DUP1
0000089e: REVERT
0000089f: JUMPDEST
000008a0: POP
000008a1: PUSH2 0x08a8
000008a4: PUSH2 0x1fea
000008a7: JUMP
000008a8: JUMPDEST
000008a9: STOP
000008aa: JUMPDEST
000008ab: CALLVALUE
000008ac: DUP1
000008ad: ISZERO
000008ae: PUSH2 0x08b6
000008b1: JUMPI
000008b2: PUSH1 0x00
000008b4: DUP1
000008b5: REVERT
000008b6: JUMPDEST
000008b7: POP
000008b8: PUSH2 0x08bf
000008bb: PUSH2 0x1fef
000008be: JUMP
000008bf: JUMPDEST
000008c0: STOP
000008c1: JUMPDEST
000008c2: CALLVALUE
000008c3: DUP1
000008c4: ISZERO
000008c5: PUSH2 0x08cd
000008c8: JUMPI
000008c9: PUSH1 0x00
000008cb: DUP1
000008cc: REVERT
000008cd: JUMPDEST
000008ce: POP
000008cf: PUSH2 0x0910
000008d2: PUSH1 0x04
000008d4: DUP1
000008d5: CALLDATASIZE
000008d6: SUB
000008d7: PUSH1 0x20
000008d9: DUP2
000008da: LT
000008db: ISZERO
000008dc: PUSH2 0x08e4
000008df: JUMPI
000008e0: PUSH1 0x00
000008e2: DUP1
000008e3: REVERT
000008e4: JUMPDEST
000008e5: DUP2
000008e6: ADD
000008e7: SWAP1
000008e8: DUP1
000008e9: DUP1
000008ea: CALLDATALOAD
000008eb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000900: AND
00000901: SWAP1
00000902: PUSH1 0x20
00000904: ADD
00000905: SWAP1
00000906: SWAP3
00000907: SWAP2
00000908: SWAP1
00000909: POP
0000090a: POP
0000090b: POP
0000090c: PUSH2 0x203e
0000090f: JUMP
00000910: JUMPDEST
00000911: PUSH1 0x40
00000913: MLOAD
00000914: DUP1
00000915: DUP3
00000916: DUP2
00000917: MSTORE
00000918: PUSH1 0x20
0000091a: ADD
0000091b: SWAP2
0000091c: POP
0000091d: POP
0000091e: PUSH1 0x40
00000920: MLOAD
00000921: DUP1
00000922: SWAP2
00000923: SUB
00000924: SWAP1
00000925: RETURN
00000926: JUMPDEST
00000927: CALLVALUE
00000928: DUP1
00000929: ISZERO
0000092a: PUSH2 0x0932
0000092d: JUMPI
0000092e: PUSH1 0x00
00000930: DUP1
00000931: REVERT
00000932: JUMPDEST
00000933: POP
00000934: PUSH2 0x099f
00000937: PUSH1 0x04
00000939: DUP1
0000093a: CALLDATASIZE
0000093b: SUB
0000093c: PUSH1 0x60
0000093e: DUP2
0000093f: LT
00000940: ISZERO
00000941: PUSH2 0x0949
00000944: JUMPI
00000945: PUSH1 0x00
00000947: DUP1
00000948: REVERT
00000949: JUMPDEST
0000094a: DUP2
0000094b: ADD
0000094c: SWAP1
0000094d: DUP1
0000094e: DUP1
0000094f: CALLDATALOAD
00000950: SWAP1
00000951: PUSH1 0x20
00000953: ADD
00000954: SWAP1
00000955: SWAP3
00000956: SWAP2
00000957: SWAP1
00000958: DUP1
00000959: CALLDATALOAD
0000095a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000096f: AND
00000970: SWAP1
00000971: PUSH1 0x20
00000973: ADD
00000974: SWAP1
00000975: SWAP3
00000976: SWAP2
00000977: SWAP1
00000978: DUP1
00000979: CALLDATALOAD
0000097a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000098f: AND
00000990: SWAP1
00000991: PUSH1 0x20
00000993: ADD
00000994: SWAP1
00000995: SWAP3
00000996: SWAP2
00000997: SWAP1
00000998: POP
00000999: POP
0000099a: POP
0000099b: PUSH2 0x213f
0000099e: JUMP
0000099f: JUMPDEST
000009a0: STOP
000009a1: JUMPDEST
000009a2: CALLVALUE
000009a3: DUP1
000009a4: ISZERO
000009a5: PUSH2 0x09ad
000009a8: JUMPI
000009a9: PUSH1 0x00
000009ab: DUP1
000009ac: REVERT
000009ad: JUMPDEST
000009ae: POP
000009af: PUSH2 0x09b6
000009b2: PUSH2 0x0c8a
000009b5: JUMP
000009b6: JUMPDEST
000009b7: PUSH1 0x40
000009b9: MLOAD
000009ba: DUP1
000009bb: DUP3
000009bc: ISZERO
000009bd: ISZERO
000009be: DUP2
000009bf: MSTORE
000009c0: PUSH1 0x20
000009c2: ADD
000009c3: SWAP2
000009c4: POP
000009c5: POP
000009c6: PUSH1 0x40
000009c8: MLOAD
000009c9: DUP1
000009ca: SWAP2
000009cb: SUB
000009cc: SWAP1
000009cd: RETURN
000009ce: JUMPDEST
000009cf: CALLVALUE
000009d0: DUP1
000009d1: ISZERO
000009d2: PUSH2 0x09da
000009d5: JUMPI
000009d6: PUSH1 0x00
000009d8: DUP1
000009d9: REVERT
000009da: JUMPDEST
000009db: POP
000009dc: PUSH2 0x0a1d
000009df: PUSH1 0x04
000009e1: DUP1
000009e2: CALLDATASIZE
000009e3: SUB
000009e4: PUSH1 0x20
000009e6: DUP2
000009e7: LT
000009e8: ISZERO
000009e9: PUSH2 0x09f1
000009ec: JUMPI
000009ed: PUSH1 0x00
000009ef: DUP1
000009f0: REVERT
000009f1: JUMPDEST
000009f2: DUP2
000009f3: ADD
000009f4: SWAP1
000009f5: DUP1
000009f6: DUP1
000009f7: CALLDATALOAD
000009f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a0d: AND
00000a0e: SWAP1
00000a0f: PUSH1 0x20
00000a11: ADD
00000a12: SWAP1
00000a13: SWAP3
00000a14: SWAP2
00000a15: SWAP1
00000a16: POP
00000a17: POP
00000a18: POP
00000a19: PUSH2 0x2563
00000a1c: JUMP
00000a1d: JUMPDEST
00000a1e: STOP
00000a1f: JUMPDEST
00000a20: CALLVALUE
00000a21: DUP1
00000a22: ISZERO
00000a23: PUSH2 0x0a2b
00000a26: JUMPI
00000a27: PUSH1 0x00
00000a29: DUP1
00000a2a: REVERT
00000a2b: JUMPDEST
00000a2c: POP
00000a2d: PUSH2 0x0a34
00000a30: PUSH2 0x2824
00000a33: JUMP
00000a34: JUMPDEST
00000a35: PUSH1 0x40
00000a37: MLOAD
00000a38: DUP1
00000a39: DUP3
00000a3a: DUP2
00000a3b: MSTORE
00000a3c: PUSH1 0x20
00000a3e: ADD
00000a3f: SWAP2
00000a40: POP
00000a41: POP
00000a42: PUSH1 0x40
00000a44: MLOAD
00000a45: DUP1
00000a46: SWAP2
00000a47: SUB
00000a48: SWAP1
00000a49: RETURN
00000a4a: JUMPDEST
00000a4b: CALLVALUE
00000a4c: DUP1
00000a4d: ISZERO
00000a4e: PUSH2 0x0a56
00000a51: JUMPI
00000a52: PUSH1 0x00
00000a54: DUP1
00000a55: REVERT
00000a56: JUMPDEST
00000a57: POP
00000a58: PUSH2 0x0a83
00000a5b: PUSH1 0x04
00000a5d: DUP1
00000a5e: CALLDATASIZE
00000a5f: SUB
00000a60: PUSH1 0x20
00000a62: DUP2
00000a63: LT
00000a64: ISZERO
00000a65: PUSH2 0x0a6d
00000a68: JUMPI
00000a69: PUSH1 0x00
00000a6b: DUP1
00000a6c: REVERT
00000a6d: JUMPDEST
00000a6e: DUP2
00000a6f: ADD
00000a70: SWAP1
00000a71: DUP1
00000a72: DUP1
00000a73: CALLDATALOAD
00000a74: SWAP1
00000a75: PUSH1 0x20
00000a77: ADD
00000a78: SWAP1
00000a79: SWAP3
00000a7a: SWAP2
00000a7b: SWAP1
00000a7c: POP
00000a7d: POP
00000a7e: POP
00000a7f: PUSH2 0x282a
00000a82: JUMP
00000a83: JUMPDEST
00000a84: STOP
00000a85: JUMPDEST
00000a86: CALLVALUE
00000a87: DUP1
00000a88: ISZERO
00000a89: PUSH2 0x0a91
00000a8c: JUMPI
00000a8d: PUSH1 0x00
00000a8f: DUP1
00000a90: REVERT
00000a91: JUMPDEST
00000a92: POP
00000a93: PUSH2 0x0a9a
00000a96: PUSH2 0x2a4c
00000a99: JUMP
00000a9a: JUMPDEST
00000a9b: PUSH1 0x40
00000a9d: MLOAD
00000a9e: DUP1
00000a9f: DUP3
00000aa0: DUP2
00000aa1: MSTORE
00000aa2: PUSH1 0x20
00000aa4: ADD
00000aa5: SWAP2
00000aa6: POP
00000aa7: POP
00000aa8: PUSH1 0x40
00000aaa: MLOAD
00000aab: DUP1
00000aac: SWAP2
00000aad: SUB
00000aae: SWAP1
00000aaf: RETURN
00000ab0: JUMPDEST
00000ab1: CALLVALUE
00000ab2: DUP1
00000ab3: ISZERO
00000ab4: PUSH2 0x0abc
00000ab7: JUMPI
00000ab8: PUSH1 0x00
00000aba: DUP1
00000abb: REVERT
00000abc: JUMPDEST
00000abd: POP
00000abe: PUSH2 0x0ac5
00000ac1: PUSH2 0x2a6f
00000ac4: JUMP
00000ac5: JUMPDEST
00000ac6: STOP
00000ac7: JUMPDEST
00000ac8: CALLVALUE
00000ac9: DUP1
00000aca: ISZERO
00000acb: PUSH2 0x0ad3
00000ace: JUMPI
00000acf: PUSH1 0x00
00000ad1: DUP1
00000ad2: REVERT
00000ad3: JUMPDEST
00000ad4: POP
00000ad5: PUSH2 0x0adc
00000ad8: PUSH2 0x2bd6
00000adb: JUMP
00000adc: JUMPDEST
00000add: PUSH1 0x40
00000adf: MLOAD
00000ae0: DUP1
00000ae1: DUP3
00000ae2: DUP2
00000ae3: MSTORE
00000ae4: PUSH1 0x20
00000ae6: ADD
00000ae7: SWAP2
00000ae8: POP
00000ae9: POP
00000aea: PUSH1 0x40
00000aec: MLOAD
00000aed: DUP1
00000aee: SWAP2
00000aef: SUB
00000af0: SWAP1
00000af1: RETURN
00000af2: JUMPDEST
00000af3: CALLVALUE
00000af4: DUP1
00000af5: ISZERO
00000af6: PUSH2 0x0afe
00000af9: JUMPI
00000afa: PUSH1 0x00
00000afc: DUP1
00000afd: REVERT
00000afe: JUMPDEST
00000aff: POP
00000b00: PUSH2 0x0b07
00000b03: PUSH2 0x2daf
00000b06: JUMP
00000b07: JUMPDEST
00000b08: PUSH1 0x40
00000b0a: MLOAD
00000b0b: DUP1
00000b0c: DUP3
00000b0d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b22: AND
00000b23: DUP2
00000b24: MSTORE
00000b25: PUSH1 0x20
00000b27: ADD
00000b28: SWAP2
00000b29: POP
00000b2a: POP
00000b2b: PUSH1 0x40
00000b2d: MLOAD
00000b2e: DUP1
00000b2f: SWAP2
00000b30: SUB
00000b31: SWAP1
00000b32: RETURN
00000b33: JUMPDEST
00000b34: CALLVALUE
00000b35: DUP1
00000b36: ISZERO
00000b37: PUSH2 0x0b3f
00000b3a: JUMPI
00000b3b: PUSH1 0x00
00000b3d: DUP1
00000b3e: REVERT
00000b3f: JUMPDEST
00000b40: POP
00000b41: PUSH2 0x0b48
00000b44: PUSH2 0x2dd5
00000b47: JUMP
00000b48: JUMPDEST
00000b49: PUSH1 0x40
00000b4b: MLOAD
00000b4c: DUP1
00000b4d: DUP3
00000b4e: DUP2
00000b4f: MSTORE
00000b50: PUSH1 0x20
00000b52: ADD
00000b53: SWAP2
00000b54: POP
00000b55: POP
00000b56: PUSH1 0x40
00000b58: MLOAD
00000b59: DUP1
00000b5a: SWAP2
00000b5b: SUB
00000b5c: SWAP1
00000b5d: RETURN
00000b5e: JUMPDEST
00000b5f: CALLVALUE
00000b60: DUP1
00000b61: ISZERO
00000b62: PUSH2 0x0b6a
00000b65: JUMPI
00000b66: PUSH1 0x00
00000b68: DUP1
00000b69: REVERT
00000b6a: JUMPDEST
00000b6b: POP
00000b6c: PUSH2 0x0b73
00000b6f: PUSH2 0x2ddb
00000b72: JUMP
00000b73: JUMPDEST
00000b74: STOP
00000b75: JUMPDEST
00000b76: CALLVALUE
00000b77: DUP1
00000b78: ISZERO
00000b79: PUSH2 0x0b81
00000b7c: JUMPI
00000b7d: PUSH1 0x00
00000b7f: DUP1
00000b80: REVERT
00000b81: JUMPDEST
00000b82: POP
00000b83: PUSH2 0x0bc4
00000b86: PUSH1 0x04
00000b88: DUP1
00000b89: CALLDATASIZE
00000b8a: SUB
00000b8b: PUSH1 0x20
00000b8d: DUP2
00000b8e: LT
00000b8f: ISZERO
00000b90: PUSH2 0x0b98
00000b93: JUMPI
00000b94: PUSH1 0x00
00000b96: DUP1
00000b97: REVERT
00000b98: JUMPDEST
00000b99: DUP2
00000b9a: ADD
00000b9b: SWAP1
00000b9c: DUP1
00000b9d: DUP1
00000b9e: CALLDATALOAD
00000b9f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bb4: AND
00000bb5: SWAP1
00000bb6: PUSH1 0x20
00000bb8: ADD
00000bb9: SWAP1
00000bba: SWAP3
00000bbb: SWAP2
00000bbc: SWAP1
00000bbd: POP
00000bbe: POP
00000bbf: POP
00000bc0: PUSH2 0x2ef5
00000bc3: JUMP
00000bc4: JUMPDEST
00000bc5: STOP
00000bc6: JUMPDEST
00000bc7: CALLVALUE
00000bc8: DUP1
00000bc9: ISZERO
00000bca: PUSH2 0x0bd2
00000bcd: JUMPI
00000bce: PUSH1 0x00
00000bd0: DUP1
00000bd1: REVERT
00000bd2: JUMPDEST
00000bd3: POP
00000bd4: PUSH2 0x0bdb
00000bd7: PUSH2 0x2f12
00000bda: JUMP
00000bdb: JUMPDEST
00000bdc: STOP
00000bdd: JUMPDEST
00000bde: CALLVALUE
00000bdf: DUP1
00000be0: ISZERO
00000be1: PUSH2 0x0be9
00000be4: JUMPI
00000be5: PUSH1 0x00
00000be7: DUP1
00000be8: REVERT
00000be9: JUMPDEST
00000bea: POP
00000beb: PUSH2 0x0bf2
00000bee: PUSH2 0x0cc7
00000bf1: JUMP
00000bf2: JUMPDEST
00000bf3: PUSH1 0x40
00000bf5: MLOAD
00000bf6: DUP1
00000bf7: DUP3
00000bf8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c0d: AND
00000c0e: DUP2
00000c0f: MSTORE
00000c10: PUSH1 0x20
00000c12: ADD
00000c13: SWAP2
00000c14: POP
00000c15: POP
00000c16: PUSH1 0x40
00000c18: MLOAD
00000c19: DUP1
00000c1a: SWAP2
00000c1b: SUB
00000c1c: SWAP1
00000c1d: RETURN
00000c1e: JUMPDEST
00000c1f: CALLVALUE
00000c20: DUP1
00000c21: ISZERO
00000c22: PUSH2 0x0c2a
00000c25: JUMPI
00000c26: PUSH1 0x00
00000c28: DUP1
00000c29: REVERT
00000c2a: JUMPDEST
00000c2b: POP
00000c2c: PUSH2 0x0c33
00000c2f: PUSH2 0x3183
00000c32: JUMP
00000c33: JUMPDEST
00000c34: PUSH1 0x40
00000c36: MLOAD
00000c37: DUP1
00000c38: DUP3
00000c39: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c4e: AND
00000c4f: DUP2
00000c50: MSTORE
00000c51: PUSH1 0x20
00000c53: ADD
00000c54: SWAP2
00000c55: POP
00000c56: POP
00000c57: PUSH1 0x40
00000c59: MLOAD
00000c5a: DUP1
00000c5b: SWAP2
00000c5c: SUB
00000c5d: SWAP1
00000c5e: RETURN
00000c5f: JUMPDEST
00000c60: CALLVALUE
00000c61: DUP1
00000c62: ISZERO
00000c63: PUSH2 0x0c6b
00000c66: JUMPI
00000c67: PUSH1 0x00
00000c69: DUP1
00000c6a: REVERT
00000c6b: JUMPDEST
00000c6c: POP
00000c6d: PUSH2 0x0c74
00000c70: PUSH2 0x31a9
00000c73: JUMP
00000c74: JUMPDEST
00000c75: PUSH1 0x40
00000c77: MLOAD
00000c78: DUP1
00000c79: DUP3
00000c7a: DUP2
00000c7b: MSTORE
00000c7c: PUSH1 0x20
00000c7e: ADD
00000c7f: SWAP2
00000c80: POP
00000c81: POP
00000c82: PUSH1 0x40
00000c84: MLOAD
00000c85: DUP1
00000c86: SWAP2
00000c87: SUB
00000c88: SWAP1
00000c89: RETURN
00000c8a: JUMPDEST
00000c8b: PUSH1 0x00
00000c8d: PUSH2 0x0c94
00000c90: PUSH2 0x1d9f
00000c93: JUMP
00000c94: JUMPDEST
00000c95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000caa: AND
00000cab: CALLER
00000cac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000cc1: AND
00000cc2: EQ
00000cc3: SWAP1
00000cc4: POP
00000cc5: SWAP1
00000cc6: JUMP
00000cc7: JUMPDEST
00000cc8: PUSH1 0x00
00000cca: PUSH1 0x33
00000ccc: PUSH1 0x00
00000cce: SWAP1
00000ccf: SLOAD
00000cd0: SWAP1
00000cd1: PUSH2 0x0100
00000cd4: EXP
00000cd5: SWAP1
00000cd6: DIV
00000cd7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000cec: AND
00000ced: SWAP1
00000cee: POP
00000cef: SWAP1
00000cf0: JUMP
00000cf1: JUMPDEST
00000cf2: PUSH1 0x00
00000cf4: DUP1
00000cf5: PUSH1 0x00
00000cf7: PUSH32 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
00000d18: PUSH1 0x00
00000d1a: SHL
00000d1b: SWAP1
00000d1c: POP
00000d1d: DUP4
00000d1e: EXTCODEHASH
00000d1f: SWAP2
00000d20: POP
00000d21: DUP1
00000d22: DUP3
00000d23: EQ
00000d24: ISZERO
00000d25: DUP1
00000d26: ISZERO
00000d27: PUSH2 0x0d33
00000d2a: JUMPI
00000d2b: POP
00000d2c: PUSH1 0x00
00000d2e: DUP1
00000d2f: SHL
00000d30: DUP3
00000d31: EQ
00000d32: ISZERO
00000d33: JUMPDEST
00000d34: SWAP3
00000d35: POP
00000d36: POP
00000d37: POP
00000d38: SWAP2
00000d39: SWAP1
00000d3a: POP
00000d3b: JUMP
00000d3c: JUMPDEST
00000d3d: PUSH2 0x0d44
00000d40: PUSH2 0x1dc9
00000d43: JUMP
00000d44: JUMPDEST
00000d45: PUSH2 0x0d4d
00000d48: JUMPI
00000d49: PUSH1 0x00
00000d4b: DUP1
00000d4c: REVERT
00000d4d: JUMPDEST
00000d4e: PUSH1 0x01
00000d50: PUSH1 0x43
00000d52: PUSH1 0x00
00000d54: PUSH2 0x0100
00000d57: EXP
00000d58: DUP2
00000d59: SLOAD
00000d5a: DUP2
00000d5b: PUSH1 0xff
00000d5d: MUL
00000d5e: NOT
00000d5f: AND
00000d60: SWAP1
00000d61: DUP4
00000d62: ISZERO
00000d63: ISZERO
00000d64: MUL
00000d65: OR
00000d66: SWAP1
00000d67: SSTORE
00000d68: POP
00000d69: CALLER
00000d6a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d7f: AND
00000d80: PUSH32 0x253d168400dbaa135c6dbe7f3fd2374b51e13720d19e0211995a106cdb4b7094
00000da1: PUSH1 0x43
00000da3: PUSH1 0x00
00000da5: SWAP1
00000da6: SLOAD
00000da7: SWAP1
00000da8: PUSH2 0x0100
00000dab: EXP
00000dac: SWAP1
00000dad: DIV
00000dae: PUSH1 0xff
00000db0: AND
00000db1: PUSH1 0x40
00000db3: MLOAD
00000db4: DUP1
00000db5: DUP3
00000db6: ISZERO
00000db7: ISZERO
00000db8: DUP2
00000db9: MSTORE
00000dba: PUSH1 0x20
00000dbc: ADD
00000dbd: SWAP2
00000dbe: POP
00000dbf: POP
00000dc0: PUSH1 0x40
00000dc2: MLOAD
00000dc3: DUP1
00000dc4: SWAP2
00000dc5: SUB
00000dc6: SWAP1
00000dc7: LOG2
00000dc8: JUMP
00000dc9: JUMPDEST
00000dca: PUSH1 0x00
00000dcc: PUSH2 0x0dd4
00000dcf: CALLER
00000dd0: PUSH2 0x1740
00000dd3: JUMP
00000dd4: JUMPDEST
00000dd5: SWAP1
00000dd6: POP
00000dd7: PUSH1 0x00
00000dd9: DUP2
00000dda: GT
00000ddb: PUSH2 0x0e2f
00000dde: JUMPI
00000ddf: PUSH1 0x40
00000de1: MLOAD
00000de2: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000e03: DUP2
00000e04: MSTORE
00000e05: PUSH1 0x04
00000e07: ADD
00000e08: DUP1
00000e09: DUP1
00000e0a: PUSH1 0x20
00000e0c: ADD
00000e0d: DUP3
00000e0e: DUP2
00000e0f: SUB
00000e10: DUP3
00000e11: MSTORE
00000e12: PUSH1 0x25
00000e14: DUP2
00000e15: MSTORE
00000e16: PUSH1 0x20
00000e18: ADD
00000e19: DUP1
00000e1a: PUSH2 0x3820
00000e1d: PUSH1 0x25
00000e1f: SWAP2
00000e20: CODECOPY
00000e21: PUSH1 0x40
00000e23: ADD
00000e24: SWAP2
00000e25: POP
00000e26: POP
00000e27: PUSH1 0x40
00000e29: MLOAD
00000e2a: DUP1
00000e2b: SWAP2
00000e2c: SUB
00000e2d: SWAP1
00000e2e: REVERT
00000e2f: JUMPDEST
00000e30: PUSH1 0x00
00000e32: PUSH1 0x42
00000e34: PUSH1 0x00
00000e36: CALLER
00000e37: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e4c: AND
00000e4d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e62: AND
00000e63: DUP2
00000e64: MSTORE
00000e65: PUSH1 0x20
00000e67: ADD
00000e68: SWAP1
00000e69: DUP2
00000e6a: MSTORE
00000e6b: PUSH1 0x20
00000e6d: ADD
00000e6e: PUSH1 0x00
00000e70: KECCAK256
00000e71: SWAP1
00000e72: POP
00000e73: PUSH2 0x0e89
00000e76: DUP3
00000e77: DUP3
00000e78: PUSH1 0x04
00000e7a: ADD
00000e7b: SLOAD
00000e7c: PUSH2 0x31af
00000e7f: SWAP1
00000e80: SWAP2
00000e81: SWAP1
00000e82: PUSH4 0xffffffff
00000e87: AND
00000e88: JUMP
00000e89: JUMPDEST
00000e8a: DUP2
00000e8b: PUSH1 0x04
00000e8d: ADD
00000e8e: DUP2
00000e8f: SWAP1
00000e90: SSTORE
00000e91: POP
00000e92: PUSH2 0x0ea6
00000e95: DUP3
00000e96: PUSH1 0x3f
00000e98: SLOAD
00000e99: PUSH2 0x31af
00000e9c: SWAP1
00000e9d: SWAP2
00000e9e: SWAP1
00000e9f: PUSH4 0xffffffff
00000ea4: AND
00000ea5: JUMP
00000ea6: JUMPDEST
00000ea7: PUSH1 0x3f
00000ea9: DUP2
00000eaa: SWAP1
00000eab: SSTORE
00000eac: POP
00000ead: PUSH2 0x0ed5
00000eb0: DUP3
00000eb1: CALLER
00000eb2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ec7: AND
00000ec8: PUSH2 0x31ce
00000ecb: SWAP1
00000ecc: SWAP2
00000ecd: SWAP1
00000ece: PUSH4 0xffffffff
00000ed3: AND
00000ed4: JUMP
00000ed5: JUMPDEST
00000ed6: CALLER
00000ed7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000eec: AND
00000eed: PUSH32 0xbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d
00000f0e: DUP4
00000f0f: PUSH1 0x40
00000f11: MLOAD
00000f12: DUP1
00000f13: DUP3
00000f14: DUP2
00000f15: MSTORE
00000f16: PUSH1 0x20
00000f18: ADD
00000f19: SWAP2
00000f1a: POP
00000f1b: POP
00000f1c: PUSH1 0x40
00000f1e: MLOAD
00000f1f: DUP1
00000f20: SWAP2
00000f21: SUB
00000f22: SWAP1
00000f23: LOG2
00000f24: POP
00000f25: POP
00000f26: JUMP
00000f27: JUMPDEST
00000f28: PUSH1 0x37
00000f2a: PUSH1 0x00
00000f2c: SWAP1
00000f2d: SLOAD
00000f2e: SWAP1
00000f2f: PUSH2 0x0100
00000f32: EXP
00000f33: SWAP1
00000f34: DIV
00000f35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f4a: AND
00000f4b: DUP2
00000f4c: JUMP
00000f4d: JUMPDEST
00000f4e: PUSH1 0x41
00000f50: SLOAD
00000f51: DUP2
00000f52: JUMP
00000f53: JUMPDEST
00000f54: PUSH1 0x00
00000f56: PUSH1 0x34
00000f58: PUSH1 0x00
00000f5a: SWAP1
00000f5b: SLOAD
00000f5c: SWAP1
00000f5d: PUSH2 0x0100
00000f60: EXP
00000f61: SWAP1
00000f62: DIV
00000f63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f78: AND
00000f79: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f8e: AND
00000f8f: PUSH4 0x70a08231
00000f94: ADDRESS
00000f95: PUSH1 0x40
00000f97: MLOAD
00000f98: DUP3
00000f99: PUSH4 0xffffffff
00000f9e: AND
00000f9f: PUSH1 0xe0
00000fa1: SHL
00000fa2: DUP2
00000fa3: MSTORE
00000fa4: PUSH1 0x04
00000fa6: ADD
00000fa7: DUP1
00000fa8: DUP3
00000fa9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fbe: AND
00000fbf: DUP2
00000fc0: MSTORE
00000fc1: PUSH1 0x20
00000fc3: ADD
00000fc4: SWAP2
00000fc5: POP
00000fc6: POP
00000fc7: PUSH1 0x20
00000fc9: PUSH1 0x40
00000fcb: MLOAD
00000fcc: DUP1
00000fcd: DUP4
00000fce: SUB
00000fcf: DUP2
00000fd0: DUP7
00000fd1: DUP1
00000fd2: EXTCODESIZE
00000fd3: ISZERO
00000fd4: DUP1
00000fd5: ISZERO
00000fd6: PUSH2 0x0fde
00000fd9: JUMPI
00000fda: PUSH1 0x00
00000fdc: DUP1
00000fdd: REVERT
00000fde: JUMPDEST
00000fdf: POP
00000fe0: GAS
00000fe1: STATICCALL
00000fe2: ISZERO
00000fe3: DUP1
00000fe4: ISZERO
00000fe5: PUSH2 0x0ff2
00000fe8: JUMPI
00000fe9: RETURNDATASIZE
00000fea: PUSH1 0x00
00000fec: DUP1
00000fed: RETURNDATACOPY
00000fee: RETURNDATASIZE
00000fef: PUSH1 0x00
00000ff1: REVERT
00000ff2: JUMPDEST
00000ff3: POP
00000ff4: POP
00000ff5: POP
00000ff6: POP
00000ff7: PUSH1 0x40
00000ff9: MLOAD
00000ffa: RETURNDATASIZE
00000ffb: PUSH1 0x20
00000ffd: DUP2
00000ffe: LT
00000fff: ISZERO
00001000: PUSH2 0x1008
00001003: JUMPI
00001004: PUSH1 0x00
00001006: DUP1
00001007: REVERT
00001008: JUMPDEST
00001009: DUP2
0000100a: ADD
0000100b: SWAP1
0000100c: DUP1
0000100d: DUP1
0000100e: MLOAD
0000100f: SWAP1
00001010: PUSH1 0x20
00001012: ADD
00001013: SWAP1
00001014: SWAP3
00001015: SWAP2
00001016: SWAP1
00001017: POP
00001018: POP
00001019: POP
0000101a: SWAP1
0000101b: POP
0000101c: DUP1
0000101d: DUP3
0000101e: GT
0000101f: ISZERO
00001020: PUSH2 0x1074
00001023: JUMPI
00001024: PUSH1 0x40
00001026: MLOAD
00001027: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001048: DUP2
00001049: MSTORE
0000104a: PUSH1 0x04
0000104c: ADD
0000104d: DUP1
0000104e: DUP1
0000104f: PUSH1 0x20
00001051: ADD
00001052: DUP3
00001053: DUP2
00001054: SUB
00001055: DUP3
00001056: MSTORE
00001057: PUSH1 0x21
00001059: DUP2
0000105a: MSTORE
0000105b: PUSH1 0x20
0000105d: ADD
0000105e: DUP1
0000105f: PUSH2 0x37a9
00001062: PUSH1 0x21
00001064: SWAP2
00001065: CODECOPY
00001066: PUSH1 0x40
00001068: ADD
00001069: SWAP2
0000106a: POP
0000106b: POP
0000106c: PUSH1 0x40
0000106e: MLOAD
0000106f: DUP1
00001070: SWAP2
00001071: SUB
00001072: SWAP1
00001073: REVERT
00001074: JUMPDEST
00001075: PUSH1 0x00
00001077: PUSH1 0x42
00001079: PUSH1 0x00
0000107b: CALLER
0000107c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001091: AND
00001092: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010a7: AND
000010a8: DUP2
000010a9: MSTORE
000010aa: PUSH1 0x20
000010ac: ADD
000010ad: SWAP1
000010ae: DUP2
000010af: MSTORE
000010b0: PUSH1 0x20
000010b2: ADD
000010b3: PUSH1 0x00
000010b5: KECCAK256
000010b6: SWAP1
000010b7: POP
000010b8: PUSH2 0x10c0
000010bb: DUP2
000010bc: PUSH2 0x331f
000010bf: JUMP
000010c0: JUMPDEST
000010c1: PUSH1 0x00
000010c3: PUSH2 0x10cb
000010c6: CALLER
000010c7: PUSH2 0x1221
000010ca: JUMP
000010cb: JUMPDEST
000010cc: SWAP1
000010cd: POP
000010ce: DUP1
000010cf: DUP5
000010d0: GT
000010d1: ISZERO
000010d2: PUSH2 0x1126
000010d5: JUMPI
000010d6: PUSH1 0x40
000010d8: MLOAD
000010d9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000010fa: DUP2
000010fb: MSTORE
000010fc: PUSH1 0x04
000010fe: ADD
000010ff: DUP1
00001100: DUP1
00001101: PUSH1 0x20
00001103: ADD
00001104: DUP3
00001105: DUP2
00001106: SUB
00001107: DUP3
00001108: MSTORE
00001109: PUSH1 0x33
0000110b: DUP2
0000110c: MSTORE
0000110d: PUSH1 0x20
0000110f: ADD
00001110: DUP1
00001111: PUSH2 0x3776
00001114: PUSH1 0x33
00001116: SWAP2
00001117: CODECOPY
00001118: PUSH1 0x40
0000111a: ADD
0000111b: SWAP2
0000111c: POP
0000111d: POP
0000111e: PUSH1 0x40
00001120: MLOAD
00001121: DUP1
00001122: SWAP2
00001123: SUB
00001124: SWAP1
00001125: REVERT
00001126: JUMPDEST
00001127: PUSH2 0x113d
0000112a: DUP5
0000112b: DUP4
0000112c: PUSH1 0x01
0000112e: ADD
0000112f: SLOAD
00001130: PUSH2 0x31af
00001133: SWAP1
00001134: SWAP2
00001135: SWAP1
00001136: PUSH4 0xffffffff
0000113b: AND
0000113c: JUMP
0000113d: JUMPDEST
0000113e: DUP3
0000113f: PUSH1 0x01
00001141: ADD
00001142: DUP2
00001143: SWAP1
00001144: SSTORE
00001145: POP
00001146: PUSH2 0x115a
00001149: DUP5
0000114a: PUSH1 0x3b
0000114c: SLOAD
0000114d: PUSH2 0x31af
00001150: SWAP1
00001151: SWAP2
00001152: SWAP1
00001153: PUSH4 0xffffffff
00001158: AND
00001159: JUMP
0000115a: JUMPDEST
0000115b: PUSH1 0x3b
0000115d: DUP2
0000115e: SWAP1
0000115f: SSTORE
00001160: POP
00001161: PUSH2 0x11ad
00001164: CALLER
00001165: DUP6
00001166: PUSH1 0x34
00001168: PUSH1 0x00
0000116a: SWAP1
0000116b: SLOAD
0000116c: SWAP1
0000116d: PUSH2 0x0100
00001170: EXP
00001171: SWAP1
00001172: DIV
00001173: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001188: AND
00001189: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000119e: AND
0000119f: PUSH2 0x3417
000011a2: SWAP1
000011a3: SWAP3
000011a4: SWAP2
000011a5: SWAP1
000011a6: PUSH4 0xffffffff
000011ab: AND
000011ac: JUMP
000011ad: JUMPDEST
000011ae: CALLER
000011af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011c4: AND
000011c5: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa
000011e6: DUP6
000011e7: DUP5
000011e8: PUSH1 0x00
000011ea: ADD
000011eb: SLOAD
000011ec: PUSH1 0x40
000011ee: MLOAD
000011ef: DUP1
000011f0: DUP4
000011f1: DUP2
000011f2: MSTORE
000011f3: PUSH1 0x20
000011f5: ADD
000011f6: DUP3
000011f7: DUP2
000011f8: MSTORE
000011f9: PUSH1 0x20
000011fb: ADD
000011fc: SWAP3
000011fd: POP
000011fe: POP
000011ff: POP
00001200: PUSH1 0x40
00001202: MLOAD
00001203: DUP1
00001204: SWAP2
00001205: SUB
00001206: SWAP1
00001207: LOG2
00001208: POP
00001209: POP
0000120a: POP
0000120b: POP
0000120c: JUMP
0000120d: JUMPDEST
0000120e: PUSH1 0x00
00001210: PUSH1 0x40
00001212: SLOAD
00001213: SWAP1
00001214: POP
00001215: SWAP1
00001216: JUMP
00001217: JUMPDEST
00001218: PUSH1 0x64
0000121a: DUP2
0000121b: JUMP
0000121c: JUMPDEST
0000121d: PUSH1 0x00
0000121f: DUP1
00001220: REVERT
00001221: JUMPDEST
00001222: PUSH1 0x00
00001224: DUP1
00001225: PUSH1 0x39
00001227: SLOAD
00001228: EQ
00001229: ISZERO
0000122a: PUSH2 0x1236
0000122d: JUMPI
0000122e: PUSH1 0x00
00001230: SWAP1
00001231: POP
00001232: PUSH2 0x1309
00001235: JUMP
00001236: JUMPDEST
00001237: PUSH1 0x00
00001239: PUSH2 0x1240
0000123c: PUSH2 0x2a4c
0000123f: JUMP
00001240: JUMPDEST
00001241: SWAP1
00001242: POP
00001243: PUSH1 0x00
00001245: PUSH1 0x42
00001247: PUSH1 0x00
00001249: DUP6
0000124a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000125f: AND
00001260: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001275: AND
00001276: DUP2
00001277: MSTORE
00001278: PUSH1 0x20
0000127a: ADD
0000127b: SWAP1
0000127c: DUP2
0000127d: MSTORE
0000127e: PUSH1 0x20
00001280: ADD
00001281: PUSH1 0x00
00001283: KECCAK256
00001284: SWAP1
00001285: POP
00001286: PUSH1 0x00
00001288: PUSH2 0x128f
0000128b: PUSH2 0x120d
0000128e: JUMP
0000128f: JUMPDEST
00001290: SWAP1
00001291: POP
00001292: PUSH1 0x00
00001294: PUSH2 0x12e6
00001297: PUSH2 0x12ac
0000129a: PUSH1 0x64
0000129c: PUSH1 0x39
0000129e: SLOAD
0000129f: PUSH2 0x34d1
000012a2: SWAP1
000012a3: SWAP2
000012a4: SWAP1
000012a5: PUSH4 0xffffffff
000012aa: AND
000012ab: JUMP
000012ac: JUMPDEST
000012ad: PUSH2 0x12d8
000012b0: DUP5
000012b1: PUSH1 0x64
000012b3: SUB
000012b4: PUSH2 0x12ca
000012b7: DUP8
000012b8: PUSH1 0x00
000012ba: ADD
000012bb: SLOAD
000012bc: DUP10
000012bd: PUSH2 0x34d1
000012c0: SWAP1
000012c1: SWAP2
000012c2: SWAP1
000012c3: PUSH4 0xffffffff
000012c8: AND
000012c9: JUMP
000012ca: JUMPDEST
000012cb: PUSH2 0x34d1
000012ce: SWAP1
000012cf: SWAP2
000012d0: SWAP1
000012d1: PUSH4 0xffffffff
000012d6: AND
000012d7: JUMP
000012d8: JUMPDEST
000012d9: PUSH2 0x350b
000012dc: SWAP1
000012dd: SWAP2
000012de: SWAP1
000012df: PUSH4 0xffffffff
000012e4: AND
000012e5: JUMP
000012e6: JUMPDEST
000012e7: SWAP1
000012e8: POP
000012e9: DUP3
000012ea: PUSH1 0x01
000012ec: ADD
000012ed: SLOAD
000012ee: DUP2
000012ef: GT
000012f0: PUSH2 0x12fa
000012f3: JUMPI
000012f4: PUSH1 0x00
000012f6: PUSH2 0x1302
000012f9: JUMP
000012fa: JUMPDEST
000012fb: DUP3
000012fc: PUSH1 0x01
000012fe: ADD
000012ff: SLOAD
00001300: DUP2
00001301: SUB
00001302: JUMPDEST
00001303: SWAP5
00001304: POP
00001305: POP
00001306: POP
00001307: POP
00001308: POP
00001309: JUMPDEST
0000130a: SWAP2
0000130b: SWAP1
0000130c: POP
0000130d: JUMP
0000130e: JUMPDEST
0000130f: PUSH1 0x00
00001311: DUP1
00001312: REVERT
00001313: JUMPDEST
00001314: PUSH1 0x00
00001316: ADDRESS
00001317: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000132c: AND
0000132d: BALANCE
0000132e: SWAP1
0000132f: POP
00001330: PUSH1 0x00
00001332: PUSH1 0x37
00001334: PUSH1 0x00
00001336: SWAP1
00001337: SLOAD
00001338: SWAP1
00001339: PUSH2 0x0100
0000133c: EXP
0000133d: SWAP1
0000133e: DIV
0000133f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001354: AND
00001355: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000136a: AND
0000136b: PUSH4 0x5707bee5
00001370: ADDRESS
00001371: PUSH1 0x40
00001373: MLOAD
00001374: DUP3
00001375: PUSH4 0xffffffff
0000137a: AND
0000137b: PUSH1 0xe0
0000137d: SHL
0000137e: DUP2
0000137f: MSTORE
00001380: PUSH1 0x04
00001382: ADD
00001383: DUP1
00001384: DUP3
00001385: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000139a: AND
0000139b: DUP2
0000139c: MSTORE
0000139d: PUSH1 0x20
0000139f: ADD
000013a0: SWAP2
000013a1: POP
000013a2: POP
000013a3: PUSH1 0x20
000013a5: PUSH1 0x40
000013a7: MLOAD
000013a8: DUP1
000013a9: DUP4
000013aa: SUB
000013ab: DUP2
000013ac: DUP7
000013ad: DUP1
000013ae: EXTCODESIZE
000013af: ISZERO
000013b0: DUP1
000013b1: ISZERO
000013b2: PUSH2 0x13ba
000013b5: JUMPI
000013b6: PUSH1 0x00
000013b8: DUP1
000013b9: REVERT
000013ba: JUMPDEST
000013bb: POP
000013bc: GAS
000013bd: STATICCALL
000013be: ISZERO
000013bf: DUP1
000013c0: ISZERO
000013c1: PUSH2 0x13ce
000013c4: JUMPI
000013c5: RETURNDATASIZE
000013c6: PUSH1 0x00
000013c8: DUP1
000013c9: RETURNDATACOPY
000013ca: RETURNDATASIZE
000013cb: PUSH1 0x00
000013cd: REVERT
000013ce: JUMPDEST
000013cf: POP
000013d0: POP
000013d1: POP
000013d2: POP
000013d3: PUSH1 0x40
000013d5: MLOAD
000013d6: RETURNDATASIZE
000013d7: PUSH1 0x20
000013d9: DUP2
000013da: LT
000013db: ISZERO
000013dc: PUSH2 0x13e4
000013df: JUMPI
000013e0: PUSH1 0x00
000013e2: DUP1
000013e3: REVERT
000013e4: JUMPDEST
000013e5: DUP2
000013e6: ADD
000013e7: SWAP1
000013e8: DUP1
000013e9: DUP1
000013ea: MLOAD
000013eb: SWAP1
000013ec: PUSH1 0x20
000013ee: ADD
000013ef: SWAP1
000013f0: SWAP3
000013f1: SWAP2
000013f2: SWAP1
000013f3: POP
000013f4: POP
000013f5: POP
000013f6: GT
000013f7: ISZERO
000013f8: PUSH2 0x147e
000013fb: JUMPI
000013fc: PUSH1 0x37
000013fe: PUSH1 0x00
00001400: SWAP1
00001401: SLOAD
00001402: SWAP1
00001403: PUSH2 0x0100
00001406: EXP
00001407: SWAP1
00001408: DIV
00001409: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000141e: AND
0000141f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001434: AND
00001435: PUSH4 0x87a15dc9
0000143a: PUSH1 0x40
0000143c: MLOAD
0000143d: DUP2
0000143e: PUSH4 0xffffffff
00001443: AND
00001444: PUSH1 0xe0
00001446: SHL
00001447: DUP2
00001448: MSTORE
00001449: PUSH1 0x04
0000144b: ADD
0000144c: PUSH1 0x00
0000144e: PUSH1 0x40
00001450: MLOAD
00001451: DUP1
00001452: DUP4
00001453: SUB
00001454: DUP2
00001455: PUSH1 0x00
00001457: DUP8
00001458: DUP1
00001459: EXTCODESIZE
0000145a: ISZERO
0000145b: DUP1
0000145c: ISZERO
0000145d: PUSH2 0x1465
00001460: JUMPI
00001461: PUSH1 0x00
00001463: DUP1
00001464: REVERT
00001465: JUMPDEST
00001466: POP
00001467: GAS
00001468: CALL
00001469: ISZERO
0000146a: DUP1
0000146b: ISZERO
0000146c: PUSH2 0x1479
0000146f: JUMPI
00001470: RETURNDATASIZE
00001471: PUSH1 0x00
00001473: DUP1
00001474: RETURNDATACOPY
00001475: RETURNDATASIZE
00001476: PUSH1 0x00
00001478: REVERT
00001479: JUMPDEST
0000147a: POP
0000147b: POP
0000147c: POP
0000147d: POP
0000147e: JUMPDEST
0000147f: PUSH1 0x37
00001481: PUSH1 0x00
00001483: SWAP1
00001484: SLOAD
00001485: SWAP1
00001486: PUSH2 0x0100
00001489: EXP
0000148a: SWAP1
0000148b: DIV
0000148c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014a1: AND
000014a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014b7: AND
000014b8: PUSH4 0x590e1ae3
000014bd: PUSH1 0x40
000014bf: MLOAD
000014c0: DUP2
000014c1: PUSH4 0xffffffff
000014c6: AND
000014c7: PUSH1 0xe0
000014c9: SHL
000014ca: DUP2
000014cb: MSTORE
000014cc: PUSH1 0x04
000014ce: ADD
000014cf: PUSH1 0x20
000014d1: PUSH1 0x40
000014d3: MLOAD
000014d4: DUP1
000014d5: DUP4
000014d6: SUB
000014d7: DUP2
000014d8: PUSH1 0x00
000014da: DUP8
000014db: DUP1
000014dc: EXTCODESIZE
000014dd: ISZERO
000014de: DUP1
000014df: ISZERO
000014e0: PUSH2 0x14e8
000014e3: JUMPI
000014e4: PUSH1 0x00
000014e6: DUP1
000014e7: REVERT
000014e8: JUMPDEST
000014e9: POP
000014ea: GAS
000014eb: CALL
000014ec: ISZERO
000014ed: DUP1
000014ee: ISZERO
000014ef: PUSH2 0x14fc
000014f2: JUMPI
000014f3: RETURNDATASIZE
000014f4: PUSH1 0x00
000014f6: DUP1
000014f7: RETURNDATACOPY
000014f8: RETURNDATASIZE
000014f9: PUSH1 0x00
000014fb: REVERT
000014fc: JUMPDEST
000014fd: POP
000014fe: POP
000014ff: POP
00001500: POP
00001501: PUSH1 0x40
00001503: MLOAD
00001504: RETURNDATASIZE
00001505: PUSH1 0x20
00001507: DUP2
00001508: LT
00001509: ISZERO
0000150a: PUSH2 0x1512
0000150d: JUMPI
0000150e: PUSH1 0x00
00001510: DUP1
00001511: REVERT
00001512: JUMPDEST
00001513: DUP2
00001514: ADD
00001515: SWAP1
00001516: DUP1
00001517: DUP1
00001518: MLOAD
00001519: SWAP1
0000151a: PUSH1 0x20
0000151c: ADD
0000151d: SWAP1
0000151e: SWAP3
0000151f: SWAP2
00001520: SWAP1
00001521: POP
00001522: POP
00001523: POP
00001524: POP
00001525: PUSH1 0x00
00001527: DUP2
00001528: ADDRESS
00001529: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000153e: AND
0000153f: BALANCE
00001540: SUB
00001541: SWAP1
00001542: POP
00001543: PUSH2 0x1557
00001546: DUP2
00001547: PUSH1 0x3e
00001549: SLOAD
0000154a: PUSH2 0x31af
0000154d: SWAP1
0000154e: SWAP2
0000154f: SWAP1
00001550: PUSH4 0xffffffff
00001555: AND
00001556: JUMP
00001557: JUMPDEST
00001558: PUSH1 0x3e
0000155a: DUP2
0000155b: SWAP1
0000155c: SSTORE
0000155d: POP
0000155e: ADDRESS
0000155f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001574: AND
00001575: PUSH32 0xbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d
00001596: DUP3
00001597: PUSH1 0x40
00001599: MLOAD
0000159a: DUP1
0000159b: DUP3
0000159c: DUP2
0000159d: MSTORE
0000159e: PUSH1 0x20
000015a0: ADD
000015a1: SWAP2
000015a2: POP
000015a3: POP
000015a4: PUSH1 0x40
000015a6: MLOAD
000015a7: DUP1
000015a8: SWAP2
000015a9: SUB
000015aa: SWAP1
000015ab: LOG2
000015ac: POP
000015ad: POP
000015ae: JUMP
000015af: JUMPDEST
000015b0: PUSH1 0x38
000015b2: PUSH1 0x00
000015b4: SWAP1
000015b5: SLOAD
000015b6: SWAP1
000015b7: PUSH2 0x0100
000015ba: EXP
000015bb: SWAP1
000015bc: DIV
000015bd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015d2: AND
000015d3: DUP2
000015d4: JUMP
000015d5: JUMPDEST
000015d6: PUSH2 0x15dd
000015d9: PUSH2 0x1dc9
000015dc: JUMP
000015dd: JUMPDEST
000015de: PUSH2 0x15e6
000015e1: JUMPI
000015e2: PUSH1 0x00
000015e4: DUP1
000015e5: REVERT
000015e6: JUMPDEST
000015e7: PUSH1 0x00
000015e9: PUSH1 0x43
000015eb: PUSH1 0x00
000015ed: PUSH2 0x0100
000015f0: EXP
000015f1: DUP2
000015f2: SLOAD
000015f3: DUP2
000015f4: PUSH1 0xff
000015f6: MUL
000015f7: NOT
000015f8: AND
000015f9: SWAP1
000015fa: DUP4
000015fb: ISZERO
000015fc: ISZERO
000015fd: MUL
000015fe: OR
000015ff: SWAP1
00001600: SSTORE
00001601: POP
00001602: CALLER
00001603: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001618: AND
00001619: PUSH32 0x253d168400dbaa135c6dbe7f3fd2374b51e13720d19e0211995a106cdb4b7094
0000163a: PUSH1 0x43
0000163c: PUSH1 0x00
0000163e: SWAP1
0000163f: SLOAD
00001640: SWAP1
00001641: PUSH2 0x0100
00001644: EXP
00001645: SWAP1
00001646: DIV
00001647: PUSH1 0xff
00001649: AND
0000164a: PUSH1 0x40
0000164c: MLOAD
0000164d: DUP1
0000164e: DUP3
0000164f: ISZERO
00001650: ISZERO
00001651: DUP2
00001652: MSTORE
00001653: PUSH1 0x20
00001655: ADD
00001656: SWAP2
00001657: POP
00001658: POP
00001659: PUSH1 0x40
0000165b: MLOAD
0000165c: DUP1
0000165d: SWAP2
0000165e: SUB
0000165f: SWAP1
00001660: LOG2
00001661: JUMP
00001662: JUMPDEST
00001663: PUSH1 0x3d
00001665: SLOAD
00001666: DUP2
00001667: JUMP
00001668: JUMPDEST
00001669: PUSH1 0x3e
0000166b: SLOAD
0000166c: DUP2
0000166d: JUMP
0000166e: JUMPDEST
0000166f: PUSH2 0x1676
00001672: PUSH2 0x1dc9
00001675: JUMP
00001676: JUMPDEST
00001677: PUSH2 0x167f
0000167a: JUMPI
0000167b: PUSH1 0x00
0000167d: DUP1
0000167e: REVERT
0000167f: JUMPDEST
00001680: PUSH1 0x00
00001682: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001697: AND
00001698: PUSH1 0x35
0000169a: PUSH1 0x00
0000169c: SWAP1
0000169d: SLOAD
0000169e: SWAP1
0000169f: PUSH2 0x0100
000016a2: EXP
000016a3: SWAP1
000016a4: DIV
000016a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016ba: AND
000016bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016d0: AND
000016d1: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
000016f2: PUSH1 0x40
000016f4: MLOAD
000016f5: PUSH1 0x40
000016f7: MLOAD
000016f8: DUP1
000016f9: SWAP2
000016fa: SUB
000016fb: SWAP1
000016fc: LOG3
000016fd: PUSH1 0x00
000016ff: PUSH1 0x35
00001701: PUSH1 0x00
00001703: PUSH2 0x0100
00001706: EXP
00001707: DUP2
00001708: SLOAD
00001709: DUP2
0000170a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000171f: MUL
00001720: NOT
00001721: AND
00001722: SWAP1
00001723: DUP4
00001724: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001739: AND
0000173a: MUL
0000173b: OR
0000173c: SWAP1
0000173d: SSTORE
0000173e: POP
0000173f: JUMP
00001740: JUMPDEST
00001741: PUSH1 0x00
00001743: DUP1
00001744: PUSH1 0x42
00001746: PUSH1 0x00
00001748: DUP5
00001749: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000175e: AND
0000175f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001774: AND
00001775: DUP2
00001776: MSTORE
00001777: PUSH1 0x20
00001779: ADD
0000177a: SWAP1
0000177b: DUP2
0000177c: MSTORE
0000177d: PUSH1 0x20
0000177f: ADD
00001780: PUSH1 0x00
00001782: KECCAK256
00001783: SWAP1
00001784: POP
00001785: PUSH1 0x00
00001787: PUSH2 0x17b3
0000178a: PUSH1 0x3d
0000178c: SLOAD
0000178d: PUSH2 0x17a5
00001790: DUP5
00001791: PUSH1 0x03
00001793: ADD
00001794: SLOAD
00001795: PUSH1 0x3e
00001797: SLOAD
00001798: PUSH2 0x34d1
0000179b: SWAP1
0000179c: SWAP2
0000179d: SWAP1
0000179e: PUSH4 0xffffffff
000017a3: AND
000017a4: JUMP
000017a5: JUMPDEST
000017a6: PUSH2 0x350b
000017a9: SWAP1
000017aa: SWAP2
000017ab: SWAP1
000017ac: PUSH4 0xffffffff
000017b1: AND
000017b2: JUMP
000017b3: JUMPDEST
000017b4: SWAP1
000017b5: POP
000017b6: PUSH1 0x00
000017b8: PUSH2 0x17ce
000017bb: DUP4
000017bc: PUSH1 0x04
000017be: ADD
000017bf: SLOAD
000017c0: DUP4
000017c1: PUSH2 0x3531
000017c4: SWAP1
000017c5: SWAP2
000017c6: SWAP1
000017c7: PUSH4 0xffffffff
000017cc: AND
000017cd: JUMP
000017ce: JUMPDEST
000017cf: SWAP1
000017d0: POP
000017d1: PUSH1 0x00
000017d3: PUSH2 0x17e9
000017d6: PUSH1 0x3f
000017d8: SLOAD
000017d9: PUSH1 0x3e
000017db: SLOAD
000017dc: PUSH2 0x3531
000017df: SWAP1
000017e0: SWAP2
000017e1: SWAP1
000017e2: PUSH4 0xffffffff
000017e7: AND
000017e8: JUMP
000017e9: JUMPDEST
000017ea: SWAP1
000017eb: POP
000017ec: DUP1
000017ed: DUP3
000017ee: GT
000017ef: ISZERO
000017f0: PUSH2 0x17f7
000017f3: JUMPI
000017f4: DUP1
000017f5: SWAP2
000017f6: POP
000017f7: JUMPDEST
000017f8: DUP2
000017f9: SWAP5
000017fa: POP
000017fb: POP
000017fc: POP
000017fd: POP
000017fe: POP
000017ff: SWAP2
00001800: SWAP1
00001801: POP
00001802: JUMP
00001803: JUMPDEST
00001804: PUSH1 0x3a
00001806: SLOAD
00001807: DUP2
00001808: JUMP
00001809: JUMPDEST
0000180a: PUSH1 0x00
0000180c: PUSH1 0x34
0000180e: PUSH1 0x00
00001810: SWAP1
00001811: SLOAD
00001812: SWAP1
00001813: PUSH2 0x0100
00001816: EXP
00001817: SWAP1
00001818: DIV
00001819: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000182e: AND
0000182f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001844: AND
00001845: PUSH4 0x70a08231
0000184a: ADDRESS
0000184b: PUSH1 0x40
0000184d: MLOAD
0000184e: DUP3
0000184f: PUSH4 0xffffffff
00001854: AND
00001855: PUSH1 0xe0
00001857: SHL
00001858: DUP2
00001859: MSTORE
0000185a: PUSH1 0x04
0000185c: ADD
0000185d: DUP1
0000185e: DUP3
0000185f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001874: AND
00001875: DUP2
00001876: MSTORE
00001877: PUSH1 0x20
00001879: ADD
0000187a: SWAP2
0000187b: POP
0000187c: POP
0000187d: PUSH1 0x20
0000187f: PUSH1 0x40
00001881: MLOAD
00001882: DUP1
00001883: DUP4
00001884: SUB
00001885: DUP2
00001886: DUP7
00001887: DUP1
00001888: EXTCODESIZE
00001889: ISZERO
0000188a: DUP1
0000188b: ISZERO
0000188c: PUSH2 0x1894
0000188f: JUMPI
00001890: PUSH1 0x00
00001892: DUP1
00001893: REVERT
00001894: JUMPDEST
00001895: POP
00001896: GAS
00001897: STATICCALL
00001898: ISZERO
00001899: DUP1
0000189a: ISZERO
0000189b: PUSH2 0x18a8
0000189e: JUMPI
0000189f: RETURNDATASIZE
000018a0: PUSH1 0x00
000018a2: DUP1
000018a3: RETURNDATACOPY
000018a4: RETURNDATASIZE
000018a5: PUSH1 0x00
000018a7: REVERT
000018a8: JUMPDEST
000018a9: POP
000018aa: POP
000018ab: POP
000018ac: POP
000018ad: PUSH1 0x40
000018af: MLOAD
000018b0: RETURNDATASIZE
000018b1: PUSH1 0x20
000018b3: DUP2
000018b4: LT
000018b5: ISZERO
000018b6: PUSH2 0x18be
000018b9: JUMPI
000018ba: PUSH1 0x00
000018bc: DUP1
000018bd: REVERT
000018be: JUMPDEST
000018bf: DUP2
000018c0: ADD
000018c1: SWAP1
000018c2: DUP1
000018c3: DUP1
000018c4: MLOAD
000018c5: SWAP1
000018c6: PUSH1 0x20
000018c8: ADD
000018c9: SWAP1
000018ca: SWAP3
000018cb: SWAP2
000018cc: SWAP1
000018cd: POP
000018ce: POP
000018cf: POP
000018d0: SWAP1
000018d1: POP
000018d2: PUSH1 0x00
000018d4: PUSH1 0x42
000018d6: PUSH1 0x00
000018d8: CALLER
000018d9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000018ee: AND
000018ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001904: AND
00001905: DUP2
00001906: MSTORE
00001907: PUSH1 0x20
00001909: ADD
0000190a: SWAP1
0000190b: DUP2
0000190c: MSTORE
0000190d: PUSH1 0x20
0000190f: ADD
00001910: PUSH1 0x00
00001912: KECCAK256
00001913: SWAP1
00001914: POP
00001915: PUSH2 0x191d
00001918: DUP2
00001919: PUSH2 0x331f
0000191c: JUMP
0000191d: JUMPDEST
0000191e: PUSH1 0x00
00001920: PUSH2 0x1928
00001923: CALLER
00001924: PUSH2 0x1221
00001927: JUMP
00001928: JUMPDEST
00001929: SWAP1
0000192a: POP
0000192b: PUSH1 0x00
0000192d: PUSH2 0x1943
00001930: DUP4
00001931: PUSH1 0x00
00001933: ADD
00001934: SLOAD
00001935: DUP4
00001936: PUSH2 0x31af
00001939: SWAP1
0000193a: SWAP2
0000193b: SWAP1
0000193c: PUSH4 0xffffffff
00001941: AND
00001942: JUMP
00001943: JUMPDEST
00001944: SWAP1
00001945: POP
00001946: DUP4
00001947: DUP2
00001948: GT
00001949: ISZERO
0000194a: PUSH2 0x199e
0000194d: JUMPI
0000194e: PUSH1 0x40
00001950: MLOAD
00001951: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001972: DUP2
00001973: MSTORE
00001974: PUSH1 0x04
00001976: ADD
00001977: DUP1
00001978: DUP1
00001979: PUSH1 0x20
0000197b: ADD
0000197c: DUP3
0000197d: DUP2
0000197e: SUB
0000197f: DUP3
00001980: MSTORE
00001981: PUSH1 0x21
00001983: DUP2
00001984: MSTORE
00001985: PUSH1 0x20
00001987: ADD
00001988: DUP1
00001989: PUSH2 0x37a9
0000198c: PUSH1 0x21
0000198e: SWAP2
0000198f: CODECOPY
00001990: PUSH1 0x40
00001992: ADD
00001993: SWAP2
00001994: POP
00001995: POP
00001996: PUSH1 0x40
00001998: MLOAD
00001999: DUP1
0000199a: SWAP2
0000199b: SUB
0000199c: SWAP1
0000199d: REVERT
0000199e: JUMPDEST
0000199f: PUSH1 0x00
000019a1: PUSH2 0x19a8
000019a4: PUSH2 0x1e21
000019a7: JUMP
000019a8: JUMPDEST
000019a9: SWAP1
000019aa: POP
000019ab: PUSH1 0x00
000019ad: PUSH2 0x19b5
000019b0: CALLER
000019b1: PUSH2 0x203e
000019b4: JUMP
000019b5: JUMPDEST
000019b6: SWAP1
000019b7: POP
000019b8: PUSH1 0x00
000019ba: PUSH2 0x19e4
000019bd: PUSH1 0x39
000019bf: SLOAD
000019c0: PUSH2 0x19d6
000019c3: DUP9
000019c4: PUSH1 0x00
000019c6: ADD
000019c7: SLOAD
000019c8: DUP7
000019c9: PUSH2 0x34d1
000019cc: SWAP1
000019cd: SWAP2
000019ce: SWAP1
000019cf: PUSH4 0xffffffff
000019d4: AND
000019d5: JUMP
000019d6: JUMPDEST
000019d7: PUSH2 0x350b
000019da: SWAP1
000019db: SWAP2
000019dc: SWAP1
000019dd: PUSH4 0xffffffff
000019e2: AND
000019e3: JUMP
000019e4: JUMPDEST
000019e5: SWAP1
000019e6: POP
000019e7: PUSH1 0x00
000019e9: DUP2
000019ea: GT
000019eb: ISZERO
000019ec: PUSH2 0x1b43
000019ef: JUMPI
000019f0: DUP7
000019f1: PUSH2 0x1a03
000019f4: DUP3
000019f5: DUP7
000019f6: PUSH2 0x31af
000019f9: SWAP1
000019fa: SWAP2
000019fb: SWAP1
000019fc: PUSH4 0xffffffff
00001a01: AND
00001a02: JUMP
00001a03: JUMPDEST
00001a04: GT
00001a05: ISZERO
00001a06: PUSH2 0x1a5a
00001a09: JUMPI
00001a0a: PUSH1 0x40
00001a0c: MLOAD
00001a0d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001a2e: DUP2
00001a2f: MSTORE
00001a30: PUSH1 0x04
00001a32: ADD
00001a33: DUP1
00001a34: DUP1
00001a35: PUSH1 0x20
00001a37: ADD
00001a38: DUP3
00001a39: DUP2
00001a3a: SUB
00001a3b: DUP3
00001a3c: MSTORE
00001a3d: PUSH1 0x21
00001a3f: DUP2
00001a40: MSTORE
00001a41: PUSH1 0x20
00001a43: ADD
00001a44: DUP1
00001a45: PUSH2 0x37a9
00001a48: PUSH1 0x21
00001a4a: SWAP2
00001a4b: CODECOPY
00001a4c: PUSH1 0x40
00001a4e: ADD
00001a4f: SWAP2
00001a50: POP
00001a51: POP
00001a52: PUSH1 0x40
00001a54: MLOAD
00001a55: DUP1
00001a56: SWAP2
00001a57: SUB
00001a58: SWAP1
00001a59: REVERT
00001a5a: JUMPDEST
00001a5b: PUSH2 0x1ac9
00001a5e: PUSH1 0x38
00001a60: PUSH1 0x00
00001a62: SWAP1
00001a63: SLOAD
00001a64: SWAP1
00001a65: PUSH2 0x0100
00001a68: EXP
00001a69: SWAP1
00001a6a: DIV
00001a6b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a80: AND
00001a81: DUP3
00001a82: PUSH1 0x34
00001a84: PUSH1 0x00
00001a86: SWAP1
00001a87: SLOAD
00001a88: SWAP1
00001a89: PUSH2 0x0100
00001a8c: EXP
00001a8d: SWAP1
00001a8e: DIV
00001a8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001aa4: AND
00001aa5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001aba: AND
00001abb: PUSH2 0x3417
00001abe: SWAP1
00001abf: SWAP3
00001ac0: SWAP2
00001ac1: SWAP1
00001ac2: PUSH4 0xffffffff
00001ac7: AND
00001ac8: JUMP
00001ac9: JUMPDEST
00001aca: PUSH1 0x38
00001acc: PUSH1 0x00
00001ace: SWAP1
00001acf: SLOAD
00001ad0: SWAP1
00001ad1: PUSH2 0x0100
00001ad4: EXP
00001ad5: SWAP1
00001ad6: DIV
00001ad7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001aec: AND
00001aed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b02: AND
00001b03: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa
00001b24: DUP3
00001b25: PUSH1 0x00
00001b27: PUSH1 0x40
00001b29: MLOAD
00001b2a: DUP1
00001b2b: DUP4
00001b2c: DUP2
00001b2d: MSTORE
00001b2e: PUSH1 0x20
00001b30: ADD
00001b31: DUP3
00001b32: DUP2
00001b33: MSTORE
00001b34: PUSH1 0x20
00001b36: ADD
00001b37: SWAP3
00001b38: POP
00001b39: POP
00001b3a: POP
00001b3b: PUSH1 0x40
00001b3d: MLOAD
00001b3e: DUP1
00001b3f: SWAP2
00001b40: SUB
00001b41: SWAP1
00001b42: LOG2
00001b43: JUMPDEST
00001b44: PUSH1 0x00
00001b46: PUSH2 0x1b72
00001b49: PUSH1 0x39
00001b4b: SLOAD
00001b4c: PUSH2 0x1b64
00001b4f: DUP10
00001b50: PUSH1 0x00
00001b52: ADD
00001b53: SLOAD
00001b54: PUSH1 0x41
00001b56: SLOAD
00001b57: PUSH2 0x34d1
00001b5a: SWAP1
00001b5b: SWAP2
00001b5c: SWAP1
00001b5d: PUSH4 0xffffffff
00001b62: AND
00001b63: JUMP
00001b64: JUMPDEST
00001b65: PUSH2 0x350b
00001b68: SWAP1
00001b69: SWAP2
00001b6a: SWAP1
00001b6b: PUSH4 0xffffffff
00001b70: AND
00001b71: JUMP
00001b72: JUMPDEST
00001b73: SWAP1
00001b74: POP
00001b75: PUSH2 0x1b89
00001b78: DUP2
00001b79: PUSH1 0x41
00001b7b: SLOAD
00001b7c: PUSH2 0x3531
00001b7f: SWAP1
00001b80: SWAP2
00001b81: SWAP1
00001b82: PUSH4 0xffffffff
00001b87: AND
00001b88: JUMP
00001b89: JUMPDEST
00001b8a: PUSH1 0x41
00001b8c: DUP2
00001b8d: SWAP1
00001b8e: SSTORE
00001b8f: POP
00001b90: PUSH2 0x1bba
00001b93: DUP8
00001b94: PUSH1 0x01
00001b96: ADD
00001b97: SLOAD
00001b98: PUSH2 0x1bac
00001b9b: DUP4
00001b9c: PUSH1 0x3b
00001b9e: SLOAD
00001b9f: PUSH2 0x3531
00001ba2: SWAP1
00001ba3: SWAP2
00001ba4: SWAP1
00001ba5: PUSH4 0xffffffff
00001baa: AND
00001bab: JUMP
00001bac: JUMPDEST
00001bad: PUSH2 0x3531
00001bb0: SWAP1
00001bb1: SWAP2
00001bb2: SWAP1
00001bb3: PUSH4 0xffffffff
00001bb8: AND
00001bb9: JUMP
00001bba: JUMPDEST
00001bbb: PUSH1 0x3b
00001bbd: DUP2
00001bbe: SWAP1
00001bbf: SSTORE
00001bc0: POP
00001bc1: PUSH2 0x1bd9
00001bc4: DUP8
00001bc5: PUSH1 0x00
00001bc7: ADD
00001bc8: SLOAD
00001bc9: PUSH1 0x39
00001bcb: SLOAD
00001bcc: PUSH2 0x3531
00001bcf: SWAP1
00001bd0: SWAP2
00001bd1: SWAP1
00001bd2: PUSH4 0xffffffff
00001bd7: AND
00001bd8: JUMP
00001bd9: JUMPDEST
00001bda: PUSH1 0x39
00001bdc: DUP2
00001bdd: SWAP1
00001bde: SSTORE
00001bdf: POP
00001be0: PUSH1 0x00
00001be2: DUP8
00001be3: PUSH1 0x01
00001be5: ADD
00001be6: DUP2
00001be7: SWAP1
00001be8: SSTORE
00001be9: POP
00001bea: PUSH1 0x00
00001bec: DUP8
00001bed: PUSH1 0x00
00001bef: ADD
00001bf0: DUP2
00001bf1: SWAP1
00001bf2: SSTORE
00001bf3: POP
00001bf4: PUSH2 0x1c40
00001bf7: CALLER
00001bf8: DUP7
00001bf9: PUSH1 0x34
00001bfb: PUSH1 0x00
00001bfd: SWAP1
00001bfe: SLOAD
00001bff: SWAP1
00001c00: PUSH2 0x0100
00001c03: EXP
00001c04: SWAP1
00001c05: DIV
00001c06: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c1b: AND
00001c1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c31: AND
00001c32: PUSH2 0x3417
00001c35: SWAP1
00001c36: SWAP3
00001c37: SWAP2
00001c38: SWAP1
00001c39: PUSH4 0xffffffff
00001c3e: AND
00001c3f: JUMP
00001c40: JUMPDEST
00001c41: CALLER
00001c42: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c57: AND
00001c58: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa
00001c79: DUP7
00001c7a: PUSH1 0x00
00001c7c: PUSH1 0x40
00001c7e: MLOAD
00001c7f: DUP1
00001c80: DUP4
00001c81: DUP2
00001c82: MSTORE
00001c83: PUSH1 0x20
00001c85: ADD
00001c86: DUP3
00001c87: DUP2
00001c88: MSTORE
00001c89: PUSH1 0x20
00001c8b: ADD
00001c8c: SWAP3
00001c8d: POP
00001c8e: POP
00001c8f: POP
00001c90: PUSH1 0x40
00001c92: MLOAD
00001c93: DUP1
00001c94: SWAP2
00001c95: SUB
00001c96: SWAP1
00001c97: LOG2
00001c98: PUSH2 0x1cb0
00001c9b: DUP8
00001c9c: PUSH1 0x02
00001c9e: ADD
00001c9f: SLOAD
00001ca0: PUSH1 0x3c
00001ca2: SLOAD
00001ca3: PUSH2 0x3531
00001ca6: SWAP1
00001ca7: SWAP2
00001ca8: SWAP1
00001ca9: PUSH4 0xffffffff
00001cae: AND
00001caf: JUMP
00001cb0: JUMPDEST
00001cb1: PUSH1 0x3c
00001cb3: DUP2
00001cb4: SWAP1
00001cb5: SSTORE
00001cb6: POP
00001cb7: PUSH1 0x00
00001cb9: DUP8
00001cba: PUSH1 0x02
00001cbc: ADD
00001cbd: DUP2
00001cbe: SWAP1
00001cbf: SSTORE
00001cc0: POP
00001cc1: PUSH1 0x00
00001cc3: DUP4
00001cc4: GT
00001cc5: ISZERO
00001cc6: PUSH2 0x1d41
00001cc9: JUMPI
00001cca: PUSH2 0x1cf2
00001ccd: DUP4
00001cce: CALLER
00001ccf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ce4: AND
00001ce5: PUSH2 0x31ce
00001ce8: SWAP1
00001ce9: SWAP2
00001cea: SWAP1
00001ceb: PUSH4 0xffffffff
00001cf0: AND
00001cf1: JUMP
00001cf2: JUMPDEST
00001cf3: CALLER
00001cf4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d09: AND
00001d0a: PUSH32 0x94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c
00001d2b: DUP5
00001d2c: PUSH1 0x40
00001d2e: MLOAD
00001d2f: DUP1
00001d30: DUP3
00001d31: DUP2
00001d32: MSTORE
00001d33: PUSH1 0x20
00001d35: ADD
00001d36: SWAP2
00001d37: POP
00001d38: POP
00001d39: PUSH1 0x40
00001d3b: MLOAD
00001d3c: DUP1
00001d3d: SWAP2
00001d3e: SUB
00001d3f: SWAP1
00001d40: LOG2
00001d41: JUMPDEST
00001d42: POP
00001d43: POP
00001d44: POP
00001d45: POP
00001d46: POP
00001d47: POP
00001d48: POP
00001d49: POP
00001d4a: JUMP
00001d4b: JUMPDEST
00001d4c: PUSH1 0x00
00001d4e: DUP1
00001d4f: REVERT
00001d50: JUMPDEST
00001d51: PUSH1 0x3c
00001d53: SLOAD
00001d54: DUP2
00001d55: JUMP
00001d56: JUMPDEST
00001d57: PUSH1 0x42
00001d59: PUSH1 0x20
00001d5b: MSTORE
00001d5c: DUP1
00001d5d: PUSH1 0x00
00001d5f: MSTORE
00001d60: PUSH1 0x40
00001d62: PUSH1 0x00
00001d64: KECCAK256
00001d65: PUSH1 0x00
00001d67: SWAP2
00001d68: POP
00001d69: SWAP1
00001d6a: POP
00001d6b: DUP1
00001d6c: PUSH1 0x00
00001d6e: ADD
00001d6f: SLOAD
00001d70: SWAP1
00001d71: DUP1
00001d72: PUSH1 0x01
00001d74: ADD
00001d75: SLOAD
00001d76: SWAP1
00001d77: DUP1
00001d78: PUSH1 0x02
00001d7a: ADD
00001d7b: SLOAD
00001d7c: SWAP1
00001d7d: DUP1
00001d7e: PUSH1 0x03
00001d80: ADD
00001d81: SLOAD
00001d82: SWAP1
00001d83: DUP1
00001d84: PUSH1 0x04
00001d86: ADD
00001d87: SLOAD
00001d88: SWAP1
00001d89: DUP1
00001d8a: PUSH1 0x05
00001d8c: ADD
00001d8d: PUSH1 0x00
00001d8f: SWAP1
00001d90: SLOAD
00001d91: SWAP1
00001d92: PUSH2 0x0100
00001d95: EXP
00001d96: SWAP1
00001d97: DIV
00001d98: PUSH1 0xff
00001d9a: AND
00001d9b: SWAP1
00001d9c: POP
00001d9d: DUP7
00001d9e: JUMP
00001d9f: JUMPDEST
00001da0: PUSH1 0x00
00001da2: PUSH1 0x35
00001da4: PUSH1 0x00
00001da6: SWAP1
00001da7: SLOAD
00001da8: SWAP1
00001da9: PUSH2 0x0100
00001dac: EXP
00001dad: SWAP1
00001dae: DIV
00001daf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001dc4: AND
00001dc5: SWAP1
00001dc6: POP
00001dc7: SWAP1
00001dc8: JUMP
00001dc9: JUMPDEST
00001dca: PUSH1 0x00
00001dcc: PUSH1 0x35
00001dce: PUSH1 0x00
00001dd0: SWAP1
00001dd1: SLOAD
00001dd2: SWAP1
00001dd3: PUSH2 0x0100
00001dd6: EXP
00001dd7: SWAP1
00001dd8: DIV
00001dd9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001dee: AND
00001def: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e04: AND
00001e05: CALLER
00001e06: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e1b: AND
00001e1c: EQ
00001e1d: SWAP1
00001e1e: POP
00001e1f: SWAP1
00001e20: JUMP
00001e21: JUMPDEST
00001e22: PUSH1 0x00
00001e24: DUP1
00001e25: PUSH2 0x1e2c
00001e28: PUSH2 0x2a4c
00001e2b: JUMP
00001e2c: JUMPDEST
00001e2d: SWAP1
00001e2e: POP
00001e2f: PUSH1 0x00
00001e31: DUP1
00001e32: PUSH1 0x39
00001e34: SLOAD
00001e35: EQ
00001e36: PUSH2 0x1e73
00001e39: JUMPI
00001e3a: PUSH1 0x00
00001e3c: PUSH2 0x1e43
00001e3f: PUSH2 0x120d
00001e42: JUMP
00001e43: JUMPDEST
00001e44: SWAP1
00001e45: POP
00001e46: PUSH2 0x1e6b
00001e49: PUSH1 0x64
00001e4b: PUSH2 0x1e5d
00001e4e: DUP4
00001e4f: DUP7
00001e50: PUSH2 0x34d1
00001e53: SWAP1
00001e54: SWAP2
00001e55: SWAP1
00001e56: PUSH4 0xffffffff
00001e5b: AND
00001e5c: JUMP
00001e5d: JUMPDEST
00001e5e: PUSH2 0x350b
00001e61: SWAP1
00001e62: SWAP2
00001e63: SWAP1
00001e64: PUSH4 0xffffffff
00001e69: AND
00001e6a: JUMP
00001e6b: JUMPDEST
00001e6c: SWAP2
00001e6d: POP
00001e6e: POP
00001e6f: PUSH2 0x1e77
00001e72: JUMP
00001e73: JUMPDEST
00001e74: DUP2
00001e75: SWAP1
00001e76: POP
00001e77: JUMPDEST
00001e78: PUSH1 0x41
00001e7a: SLOAD
00001e7b: DUP2
00001e7c: GT
00001e7d: ISZERO
00001e7e: PUSH2 0x1e8f
00001e81: JUMPI
00001e82: PUSH1 0x41
00001e84: SLOAD
00001e85: DUP2
00001e86: SUB
00001e87: SWAP3
00001e88: POP
00001e89: POP
00001e8a: POP
00001e8b: PUSH2 0x1e96
00001e8e: JUMP
00001e8f: JUMPDEST
00001e90: PUSH1 0x00
00001e92: SWAP3
00001e93: POP
00001e94: POP
00001e95: POP
00001e96: JUMPDEST
00001e97: SWAP1
00001e98: JUMP
00001e99: JUMPDEST
00001e9a: PUSH1 0x00
00001e9c: PUSH1 0x42
00001e9e: PUSH1 0x00
00001ea0: CALLER
00001ea1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001eb6: AND
00001eb7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ecc: AND
00001ecd: DUP2
00001ece: MSTORE
00001ecf: PUSH1 0x20
00001ed1: ADD
00001ed2: SWAP1
00001ed3: DUP2
00001ed4: MSTORE
00001ed5: PUSH1 0x20
00001ed7: ADD
00001ed8: PUSH1 0x00
00001eda: KECCAK256
00001edb: SWAP1
00001edc: POP
00001edd: PUSH2 0x1ef3
00001ee0: CALLVALUE
00001ee1: DUP3
00001ee2: PUSH1 0x03
00001ee4: ADD
00001ee5: SLOAD
00001ee6: PUSH2 0x31af
00001ee9: SWAP1
00001eea: SWAP2
00001eeb: SWAP1
00001eec: PUSH4 0xffffffff
00001ef1: AND
00001ef2: JUMP
00001ef3: JUMPDEST
00001ef4: DUP2
00001ef5: PUSH1 0x03
00001ef7: ADD
00001ef8: DUP2
00001ef9: SWAP1
00001efa: SSTORE
00001efb: POP
00001efc: PUSH2 0x1f10
00001eff: CALLVALUE
00001f00: PUSH1 0x3d
00001f02: SLOAD
00001f03: PUSH2 0x31af
00001f06: SWAP1
00001f07: SWAP2
00001f08: SWAP1
00001f09: PUSH4 0xffffffff
00001f0e: AND
00001f0f: JUMP
00001f10: JUMPDEST
00001f11: PUSH1 0x3d
00001f13: DUP2
00001f14: SWAP1
00001f15: SSTORE
00001f16: POP
00001f17: PUSH1 0x37
00001f19: PUSH1 0x00
00001f1b: SWAP1
00001f1c: SLOAD
00001f1d: SWAP1
00001f1e: PUSH2 0x0100
00001f21: EXP
00001f22: SWAP1
00001f23: DIV
00001f24: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f39: AND
00001f3a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f4f: AND
00001f50: PUSH4 0x1998aeef
00001f55: CALLVALUE
00001f56: PUSH1 0x40
00001f58: MLOAD
00001f59: DUP3
00001f5a: PUSH4 0xffffffff
00001f5f: AND
00001f60: PUSH1 0xe0
00001f62: SHL
00001f63: DUP2
00001f64: MSTORE
00001f65: PUSH1 0x04
00001f67: ADD
00001f68: PUSH1 0x00
00001f6a: PUSH1 0x40
00001f6c: MLOAD
00001f6d: DUP1
00001f6e: DUP4
00001f6f: SUB
00001f70: DUP2
00001f71: DUP6
00001f72: DUP9
00001f73: DUP1
00001f74: EXTCODESIZE
00001f75: ISZERO
00001f76: DUP1
00001f77: ISZERO
00001f78: PUSH2 0x1f80
00001f7b: JUMPI
00001f7c: PUSH1 0x00
00001f7e: DUP1
00001f7f: REVERT
00001f80: JUMPDEST
00001f81: POP
00001f82: GAS
00001f83: CALL
00001f84: ISZERO
00001f85: DUP1
00001f86: ISZERO
00001f87: PUSH2 0x1f94
00001f8a: JUMPI
00001f8b: RETURNDATASIZE
00001f8c: PUSH1 0x00
00001f8e: DUP1
00001f8f: RETURNDATACOPY
00001f90: RETURNDATASIZE
00001f91: PUSH1 0x00
00001f93: REVERT
00001f94: JUMPDEST
00001f95: POP
00001f96: POP
00001f97: POP
00001f98: POP
00001f99: POP
00001f9a: CALLER
00001f9b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001fb0: AND
00001fb1: PUSH32 0xe684a55f31b79eca403df938249029212a5925ec6be8012e099b45bc1019e5d2
00001fd2: CALLVALUE
00001fd3: PUSH1 0x40
00001fd5: MLOAD
00001fd6: DUP1
00001fd7: DUP3
00001fd8: DUP2
00001fd9: MSTORE
00001fda: PUSH1 0x20
00001fdc: ADD
00001fdd: SWAP2
00001fde: POP
00001fdf: POP
00001fe0: PUSH1 0x40
00001fe2: MLOAD
00001fe3: DUP1
00001fe4: SWAP2
00001fe5: SUB
00001fe6: SWAP1
00001fe7: LOG2
00001fe8: POP
00001fe9: JUMP
00001fea: JUMPDEST
00001feb: PUSH1 0x00
00001fed: DUP1
00001fee: REVERT
00001fef: JUMPDEST
00001ff0: PUSH1 0x00
00001ff2: PUSH1 0x42
00001ff4: PUSH1 0x00
00001ff6: CALLER
00001ff7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000200c: AND
0000200d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002022: AND
00002023: DUP2
00002024: MSTORE
00002025: PUSH1 0x20
00002027: ADD
00002028: SWAP1
00002029: DUP2
0000202a: MSTORE
0000202b: PUSH1 0x20
0000202d: ADD
0000202e: PUSH1 0x00
00002030: KECCAK256
00002031: SWAP1
00002032: POP
00002033: PUSH2 0x203b
00002036: DUP2
00002037: PUSH2 0x331f
0000203a: JUMP
0000203b: JUMPDEST
0000203c: POP
0000203d: JUMP
0000203e: JUMPDEST
0000203f: PUSH1 0x00
00002041: DUP1
00002042: PUSH1 0x42
00002044: PUSH1 0x00
00002046: DUP5
00002047: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000205c: AND
0000205d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002072: AND
00002073: DUP2
00002074: MSTORE
00002075: PUSH1 0x20
00002077: ADD
00002078: SWAP1
00002079: DUP2
0000207a: MSTORE
0000207b: PUSH1 0x20
0000207d: ADD
0000207e: PUSH1 0x00
00002080: KECCAK256
00002081: SWAP1
00002082: POP
00002083: PUSH1 0x00
00002085: ADDRESS
00002086: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000209b: AND
0000209c: BALANCE
0000209d: SWAP1
0000209e: POP
0000209f: PUSH2 0x20db
000020a2: PUSH1 0x3e
000020a4: SLOAD
000020a5: PUSH2 0x20cd
000020a8: PUSH1 0x3f
000020aa: SLOAD
000020ab: PUSH2 0x20bf
000020ae: PUSH1 0x3c
000020b0: SLOAD
000020b1: DUP7
000020b2: PUSH2 0x31af
000020b5: SWAP1
000020b6: SWAP2
000020b7: SWAP1
000020b8: PUSH4 0xffffffff
000020bd: AND
000020be: JUMP
000020bf: JUMPDEST
000020c0: PUSH2 0x31af
000020c3: SWAP1
000020c4: SWAP2
000020c5: SWAP1
000020c6: PUSH4 0xffffffff
000020cb: AND
000020cc: JUMP
000020cd: JUMPDEST
000020ce: PUSH2 0x3531
000020d1: SWAP1
000020d2: SWAP2
000020d3: SWAP1
000020d4: PUSH4 0xffffffff
000020d9: AND
000020da: JUMP
000020db: JUMPDEST
000020dc: SWAP1
000020dd: POP
000020de: PUSH1 0x00
000020e0: PUSH2 0x210a
000020e3: PUSH1 0x39
000020e5: SLOAD
000020e6: PUSH2 0x20fc
000020e9: DUP6
000020ea: PUSH1 0x00
000020ec: ADD
000020ed: SLOAD
000020ee: DUP6
000020ef: PUSH2 0x34d1
000020f2: SWAP1
000020f3: SWAP2
000020f4: SWAP1
000020f5: PUSH4 0xffffffff
000020fa: AND
000020fb: JUMP
000020fc: JUMPDEST
000020fd: PUSH2 0x350b
00002100: SWAP1
00002101: SWAP2
00002102: SWAP1
00002103: PUSH4 0xffffffff
00002108: AND
00002109: JUMP
0000210a: JUMPDEST
0000210b: SWAP1
0000210c: POP
0000210d: PUSH1 0x00
0000210f: PUSH2 0x2125
00002112: DUP5
00002113: PUSH1 0x02
00002115: ADD
00002116: SLOAD
00002117: DUP4
00002118: PUSH2 0x3531
0000211b: SWAP1
0000211c: SWAP2
0000211d: SWAP1
0000211e: PUSH4 0xffffffff
00002123: AND
00002124: JUMP
00002125: JUMPDEST
00002126: SWAP1
00002127: POP
00002128: DUP3
00002129: DUP2
0000212a: GT
0000212b: ISZERO
0000212c: PUSH2 0x2133
0000212f: JUMPI
00002130: DUP3
00002131: SWAP1
00002132: POP
00002133: JUMPDEST
00002134: DUP1
00002135: SWAP5
00002136: POP
00002137: POP
00002138: POP
00002139: POP
0000213a: POP
0000213b: SWAP2
0000213c: SWAP1
0000213d: POP
0000213e: JUMP
0000213f: JUMPDEST
00002140: PUSH1 0x00
00002142: PUSH1 0x01
00002144: SWAP1
00002145: SLOAD
00002146: SWAP1
00002147: PUSH2 0x0100
0000214a: EXP
0000214b: SWAP1
0000214c: DIV
0000214d: PUSH1 0xff
0000214f: AND
00002150: DUP1
00002151: PUSH2 0x215e
00002154: JUMPI
00002155: POP
00002156: PUSH2 0x215d
00002159: PUSH2 0x3551
0000215c: JUMP
0000215d: JUMPDEST
0000215e: JUMPDEST
0000215f: DUP1
00002160: PUSH2 0x2174
00002163: JUMPI
00002164: POP
00002165: PUSH1 0x00
00002167: DUP1
00002168: SLOAD
00002169: SWAP1
0000216a: PUSH2 0x0100
0000216d: EXP
0000216e: SWAP1
0000216f: DIV
00002170: PUSH1 0xff
00002172: AND
00002173: ISZERO
00002174: JUMPDEST
00002175: PUSH2 0x21c9
00002178: JUMPI
00002179: PUSH1 0x40
0000217b: MLOAD
0000217c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000219d: DUP2
0000219e: MSTORE
0000219f: PUSH1 0x04
000021a1: ADD
000021a2: DUP1
000021a3: DUP1
000021a4: PUSH1 0x20
000021a6: ADD
000021a7: DUP3
000021a8: DUP2
000021a9: SUB
000021aa: DUP3
000021ab: MSTORE
000021ac: PUSH1 0x2e
000021ae: DUP2
000021af: MSTORE
000021b0: PUSH1 0x20
000021b2: ADD
000021b3: DUP1
000021b4: PUSH2 0x37ca
000021b7: PUSH1 0x2e
000021b9: SWAP2
000021ba: CODECOPY
000021bb: PUSH1 0x40
000021bd: ADD
000021be: SWAP2
000021bf: POP
000021c0: POP
000021c1: PUSH1 0x40
000021c3: MLOAD
000021c4: DUP1
000021c5: SWAP2
000021c6: SUB
000021c7: SWAP1
000021c8: REVERT
000021c9: JUMPDEST
000021ca: PUSH1 0x00
000021cc: DUP1
000021cd: PUSH1 0x01
000021cf: SWAP1
000021d0: SLOAD
000021d1: SWAP1
000021d2: PUSH2 0x0100
000021d5: EXP
000021d6: SWAP1
000021d7: DIV
000021d8: PUSH1 0xff
000021da: AND
000021db: ISZERO
000021dc: SWAP1
000021dd: POP
000021de: DUP1
000021df: ISZERO
000021e0: PUSH2 0x2219
000021e3: JUMPI
000021e4: PUSH1 0x01
000021e6: PUSH1 0x00
000021e8: PUSH1 0x01
000021ea: PUSH2 0x0100
000021ed: EXP
000021ee: DUP2
000021ef: SLOAD
000021f0: DUP2
000021f1: PUSH1 0xff
000021f3: MUL
000021f4: NOT
000021f5: AND
000021f6: SWAP1
000021f7: DUP4
000021f8: ISZERO
000021f9: ISZERO
000021fa: MUL
000021fb: OR
000021fc: SWAP1
000021fd: SSTORE
000021fe: POP
000021ff: PUSH1 0x01
00002201: PUSH1 0x00
00002203: DUP1
00002204: PUSH2 0x0100
00002207: EXP
00002208: DUP2
00002209: SLOAD
0000220a: DUP2
0000220b: PUSH1 0xff
0000220d: MUL
0000220e: NOT
0000220f: AND
00002210: SWAP1
00002211: DUP4
00002212: ISZERO
00002213: ISZERO
00002214: MUL
00002215: OR
00002216: SWAP1
00002217: SSTORE
00002218: POP
00002219: JUMPDEST
0000221a: PUSH1 0x00
0000221c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002231: AND
00002232: DUP3
00002233: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002248: AND
00002249: EQ
0000224a: ISZERO
0000224b: DUP1
0000224c: ISZERO
0000224d: PUSH2 0x2257
00002250: JUMPI
00002251: POP
00002252: PUSH1 0x64
00002254: DUP5
00002255: GT
00002256: ISZERO
00002257: JUMPDEST
00002258: PUSH2 0x2260
0000225b: JUMPI
0000225c: PUSH1 0x00
0000225e: DUP1
0000225f: REVERT
00002260: JUMPDEST
00002261: PUSH2 0x2269
00002264: DUP4
00002265: PUSH2 0x2563
00002268: JUMP
00002269: JUMPDEST
0000226a: PUSH2 0x2272
0000226d: CALLER
0000226e: PUSH2 0x3568
00002271: JUMP
00002272: JUMPDEST
00002273: DUP3
00002274: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002289: AND
0000228a: PUSH4 0xd4b83992
0000228f: PUSH1 0x40
00002291: MLOAD
00002292: DUP2
00002293: PUSH4 0xffffffff
00002298: AND
00002299: PUSH1 0xe0
0000229b: SHL
0000229c: DUP2
0000229d: MSTORE
0000229e: PUSH1 0x04
000022a0: ADD
000022a1: PUSH1 0x20
000022a3: PUSH1 0x40
000022a5: MLOAD
000022a6: DUP1
000022a7: DUP4
000022a8: SUB
000022a9: DUP2
000022aa: DUP7
000022ab: DUP1
000022ac: EXTCODESIZE
000022ad: ISZERO
000022ae: DUP1
000022af: ISZERO
000022b0: PUSH2 0x22b8
000022b3: JUMPI
000022b4: PUSH1 0x00
000022b6: DUP1
000022b7: REVERT
000022b8: JUMPDEST
000022b9: POP
000022ba: GAS
000022bb: STATICCALL
000022bc: ISZERO
000022bd: DUP1
000022be: ISZERO
000022bf: PUSH2 0x22cc
000022c2: JUMPI
000022c3: RETURNDATASIZE
000022c4: PUSH1 0x00
000022c6: DUP1
000022c7: RETURNDATACOPY
000022c8: RETURNDATASIZE
000022c9: PUSH1 0x00
000022cb: REVERT
000022cc: JUMPDEST
000022cd: POP
000022ce: POP
000022cf: POP
000022d0: POP
000022d1: PUSH1 0x40
000022d3: MLOAD
000022d4: RETURNDATASIZE
000022d5: PUSH1 0x20
000022d7: DUP2
000022d8: LT
000022d9: ISZERO
000022da: PUSH2 0x22e2
000022dd: JUMPI
000022de: PUSH1 0x00
000022e0: DUP1
000022e1: REVERT
000022e2: JUMPDEST
000022e3: DUP2
000022e4: ADD
000022e5: SWAP1
000022e6: DUP1
000022e7: DUP1
000022e8: MLOAD
000022e9: SWAP1
000022ea: PUSH1 0x20
000022ec: ADD
000022ed: SWAP1
000022ee: SWAP3
000022ef: SWAP2
000022f0: SWAP1
000022f1: POP
000022f2: POP
000022f3: POP
000022f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002309: AND
0000230a: PUSH4 0xe2fdcc17
0000230f: PUSH1 0x40
00002311: MLOAD
00002312: DUP2
00002313: PUSH4 0xffffffff
00002318: AND
00002319: PUSH1 0xe0
0000231b: SHL
0000231c: DUP2
0000231d: MSTORE
0000231e: PUSH1 0x04
00002320: ADD
00002321: PUSH1 0x20
00002323: PUSH1 0x40
00002325: MLOAD
00002326: DUP1
00002327: DUP4
00002328: SUB
00002329: DUP2
0000232a: DUP7
0000232b: DUP1
0000232c: EXTCODESIZE
0000232d: ISZERO
0000232e: DUP1
0000232f: ISZERO
00002330: PUSH2 0x2338
00002333: JUMPI
00002334: PUSH1 0x00
00002336: DUP1
00002337: REVERT
00002338: JUMPDEST
00002339: POP
0000233a: GAS
0000233b: STATICCALL
0000233c: ISZERO
0000233d: DUP1
0000233e: ISZERO
0000233f: PUSH2 0x234c
00002342: JUMPI
00002343: RETURNDATASIZE
00002344: PUSH1 0x00
00002346: DUP1
00002347: RETURNDATACOPY
00002348: RETURNDATASIZE
00002349: PUSH1 0x00
0000234b: REVERT
0000234c: JUMPDEST
0000234d: POP
0000234e: POP
0000234f: POP
00002350: POP
00002351: PUSH1 0x40
00002353: MLOAD
00002354: RETURNDATASIZE
00002355: PUSH1 0x20
00002357: DUP2
00002358: LT
00002359: ISZERO
0000235a: PUSH2 0x2362
0000235d: JUMPI
0000235e: PUSH1 0x00
00002360: DUP1
00002361: REVERT
00002362: JUMPDEST
00002363: DUP2
00002364: ADD
00002365: SWAP1
00002366: DUP1
00002367: DUP1
00002368: MLOAD
00002369: SWAP1
0000236a: PUSH1 0x20
0000236c: ADD
0000236d: SWAP1
0000236e: SWAP3
0000236f: SWAP2
00002370: SWAP1
00002371: POP
00002372: POP
00002373: POP
00002374: PUSH1 0x36
00002376: PUSH1 0x00
00002378: PUSH2 0x0100
0000237b: EXP
0000237c: DUP2
0000237d: SLOAD
0000237e: DUP2
0000237f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002394: MUL
00002395: NOT
00002396: AND
00002397: SWAP1
00002398: DUP4
00002399: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023ae: AND
000023af: MUL
000023b0: OR
000023b1: SWAP1
000023b2: SSTORE
000023b3: POP
000023b4: DUP3
000023b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023ca: AND
000023cb: PUSH4 0xd4b83992
000023d0: PUSH1 0x40
000023d2: MLOAD
000023d3: DUP2
000023d4: PUSH4 0xffffffff
000023d9: AND
000023da: PUSH1 0xe0
000023dc: SHL
000023dd: DUP2
000023de: MSTORE
000023df: PUSH1 0x04
000023e1: ADD
000023e2: PUSH1 0x20
000023e4: PUSH1 0x40
000023e6: MLOAD
000023e7: DUP1
000023e8: DUP4
000023e9: SUB
000023ea: DUP2
000023eb: DUP7
000023ec: DUP1
000023ed: EXTCODESIZE
000023ee: ISZERO
000023ef: DUP1
000023f0: ISZERO
000023f1: PUSH2 0x23f9
000023f4: JUMPI
000023f5: PUSH1 0x00
000023f7: DUP1
000023f8: REVERT
000023f9: JUMPDEST
000023fa: POP
000023fb: GAS
000023fc: STATICCALL
000023fd: ISZERO
000023fe: DUP1
000023ff: ISZERO
00002400: PUSH2 0x240d
00002403: JUMPI
00002404: RETURNDATASIZE
00002405: PUSH1 0x00
00002407: DUP1
00002408: RETURNDATACOPY
00002409: RETURNDATASIZE
0000240a: PUSH1 0x00
0000240c: REVERT
0000240d: JUMPDEST
0000240e: POP
0000240f: POP
00002410: POP
00002411: POP
00002412: PUSH1 0x40
00002414: MLOAD
00002415: RETURNDATASIZE
00002416: PUSH1 0x20
00002418: DUP2
00002419: LT
0000241a: ISZERO
0000241b: PUSH2 0x2423
0000241e: JUMPI
0000241f: PUSH1 0x00
00002421: DUP1
00002422: REVERT
00002423: JUMPDEST
00002424: DUP2
00002425: ADD
00002426: SWAP1
00002427: DUP1
00002428: DUP1
00002429: MLOAD
0000242a: SWAP1
0000242b: PUSH1 0x20
0000242d: ADD
0000242e: SWAP1
0000242f: SWAP3
00002430: SWAP2
00002431: SWAP1
00002432: POP
00002433: POP
00002434: POP
00002435: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000244a: AND
0000244b: PUSH4 0x1c7fd532
00002450: PUSH1 0x40
00002452: MLOAD
00002453: DUP2
00002454: PUSH4 0xffffffff
00002459: AND
0000245a: PUSH1 0xe0
0000245c: SHL
0000245d: DUP2
0000245e: MSTORE
0000245f: PUSH1 0x04
00002461: ADD
00002462: PUSH1 0x20
00002464: PUSH1 0x40
00002466: MLOAD
00002467: DUP1
00002468: DUP4
00002469: SUB
0000246a: DUP2
0000246b: DUP7
0000246c: DUP1
0000246d: EXTCODESIZE
0000246e: ISZERO
0000246f: DUP1
00002470: ISZERO
00002471: PUSH2 0x2479
00002474: JUMPI
00002475: PUSH1 0x00
00002477: DUP1
00002478: REVERT
00002479: JUMPDEST
0000247a: POP
0000247b: GAS
0000247c: STATICCALL
0000247d: ISZERO
0000247e: DUP1
0000247f: ISZERO
00002480: PUSH2 0x248d
00002483: JUMPI
00002484: RETURNDATASIZE
00002485: PUSH1 0x00
00002487: DUP1
00002488: RETURNDATACOPY
00002489: RETURNDATASIZE
0000248a: PUSH1 0x00
0000248c: REVERT
0000248d: JUMPDEST
0000248e: POP
0000248f: POP
00002490: POP
00002491: POP
00002492: PUSH1 0x40
00002494: MLOAD
00002495: RETURNDATASIZE
00002496: PUSH1 0x20
00002498: DUP2
00002499: LT
0000249a: ISZERO
0000249b: PUSH2 0x24a3
0000249e: JUMPI
0000249f: PUSH1 0x00
000024a1: DUP1
000024a2: REVERT
000024a3: JUMPDEST
000024a4: DUP2
000024a5: ADD
000024a6: SWAP1
000024a7: DUP1
000024a8: DUP1
000024a9: MLOAD
000024aa: SWAP1
000024ab: PUSH1 0x20
000024ad: ADD
000024ae: SWAP1
000024af: SWAP3
000024b0: SWAP2
000024b1: SWAP1
000024b2: POP
000024b3: POP
000024b4: POP
000024b5: PUSH1 0x37
000024b7: PUSH1 0x00
000024b9: PUSH2 0x0100
000024bc: EXP
000024bd: DUP2
000024be: SLOAD
000024bf: DUP2
000024c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024d5: MUL
000024d6: NOT
000024d7: AND
000024d8: SWAP1
000024d9: DUP4
000024da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024ef: AND
000024f0: MUL
000024f1: OR
000024f2: SWAP1
000024f3: SSTORE
000024f4: POP
000024f5: DUP4
000024f6: PUSH1 0x40
000024f8: DUP2
000024f9: SWAP1
000024fa: SSTORE
000024fb: POP
000024fc: DUP2
000024fd: PUSH1 0x38
000024ff: PUSH1 0x00
00002501: PUSH2 0x0100
00002504: EXP
00002505: DUP2
00002506: SLOAD
00002507: DUP2
00002508: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000251d: MUL
0000251e: NOT
0000251f: AND
00002520: SWAP1
00002521: DUP4
00002522: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002537: AND
00002538: MUL
00002539: OR
0000253a: SWAP1
0000253b: SSTORE
0000253c: POP
0000253d: DUP1
0000253e: ISZERO
0000253f: PUSH2 0x255d
00002542: JUMPI
00002543: PUSH1 0x00
00002545: DUP1
00002546: PUSH1 0x01
00002548: PUSH2 0x0100
0000254b: EXP
0000254c: DUP2
0000254d: SLOAD
0000254e: DUP2
0000254f: PUSH1 0xff
00002551: MUL
00002552: NOT
00002553: AND
00002554: SWAP1
00002555: DUP4
00002556: ISZERO
00002557: ISZERO
00002558: MUL
00002559: OR
0000255a: SWAP1
0000255b: SSTORE
0000255c: POP
0000255d: JUMPDEST
0000255e: POP
0000255f: POP
00002560: POP
00002561: POP
00002562: JUMP
00002563: JUMPDEST
00002564: PUSH1 0x00
00002566: PUSH1 0x01
00002568: SWAP1
00002569: SLOAD
0000256a: SWAP1
0000256b: PUSH2 0x0100
0000256e: EXP
0000256f: SWAP1
00002570: DIV
00002571: PUSH1 0xff
00002573: AND
00002574: DUP1
00002575: PUSH2 0x2582
00002578: JUMPI
00002579: POP
0000257a: PUSH2 0x2581
0000257d: PUSH2 0x3551
00002580: JUMP
00002581: JUMPDEST
00002582: JUMPDEST
00002583: DUP1
00002584: PUSH2 0x2598
00002587: JUMPI
00002588: POP
00002589: PUSH1 0x00
0000258b: DUP1
0000258c: SLOAD
0000258d: SWAP1
0000258e: PUSH2 0x0100
00002591: EXP
00002592: SWAP1
00002593: DIV
00002594: PUSH1 0xff
00002596: AND
00002597: ISZERO
00002598: JUMPDEST
00002599: PUSH2 0x25ed
0000259c: JUMPI
0000259d: PUSH1 0x40
0000259f: MLOAD
000025a0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000025c1: DUP2
000025c2: MSTORE
000025c3: PUSH1 0x04
000025c5: ADD
000025c6: DUP1
000025c7: DUP1
000025c8: PUSH1 0x20
000025ca: ADD
000025cb: DUP3
000025cc: DUP2
000025cd: SUB
000025ce: DUP3
000025cf: MSTORE
000025d0: PUSH1 0x2e
000025d2: DUP2
000025d3: MSTORE
000025d4: PUSH1 0x20
000025d6: ADD
000025d7: DUP1
000025d8: PUSH2 0x37ca
000025db: PUSH1 0x2e
000025dd: SWAP2
000025de: CODECOPY
000025df: PUSH1 0x40
000025e1: ADD
000025e2: SWAP2
000025e3: POP
000025e4: POP
000025e5: PUSH1 0x40
000025e7: MLOAD
000025e8: DUP1
000025e9: SWAP2
000025ea: SUB
000025eb: SWAP1
000025ec: REVERT
000025ed: JUMPDEST
000025ee: PUSH1 0x00
000025f0: DUP1
000025f1: PUSH1 0x01
000025f3: SWAP1
000025f4: SLOAD
000025f5: SWAP1
000025f6: PUSH2 0x0100
000025f9: EXP
000025fa: SWAP1
000025fb: DIV
000025fc: PUSH1 0xff
000025fe: AND
000025ff: ISZERO
00002600: SWAP1
00002601: POP
00002602: DUP1
00002603: ISZERO
00002604: PUSH2 0x263d
00002607: JUMPI
00002608: PUSH1 0x01
0000260a: PUSH1 0x00
0000260c: PUSH1 0x01
0000260e: PUSH2 0x0100
00002611: EXP
00002612: DUP2
00002613: SLOAD
00002614: DUP2
00002615: PUSH1 0xff
00002617: MUL
00002618: NOT
00002619: AND
0000261a: SWAP1
0000261b: DUP4
0000261c: ISZERO
0000261d: ISZERO
0000261e: MUL
0000261f: OR
00002620: SWAP1
00002621: SSTORE
00002622: POP
00002623: PUSH1 0x01
00002625: PUSH1 0x00
00002627: DUP1
00002628: PUSH2 0x0100
0000262b: EXP
0000262c: DUP2
0000262d: SLOAD
0000262e: DUP2
0000262f: PUSH1 0xff
00002631: MUL
00002632: NOT
00002633: AND
00002634: SWAP1
00002635: DUP4
00002636: ISZERO
00002637: ISZERO
00002638: MUL
00002639: OR
0000263a: SWAP1
0000263b: SSTORE
0000263c: POP
0000263d: JUMPDEST
0000263e: DUP2
0000263f: PUSH1 0x33
00002641: PUSH1 0x00
00002643: PUSH2 0x0100
00002646: EXP
00002647: DUP2
00002648: SLOAD
00002649: DUP2
0000264a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000265f: MUL
00002660: NOT
00002661: AND
00002662: SWAP1
00002663: DUP4
00002664: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002679: AND
0000267a: MUL
0000267b: OR
0000267c: SWAP1
0000267d: SSTORE
0000267e: POP
0000267f: PUSH1 0x00
00002681: DUP3
00002682: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002697: AND
00002698: PUSH4 0xd4b83992
0000269d: PUSH1 0x40
0000269f: MLOAD
000026a0: DUP2
000026a1: PUSH4 0xffffffff
000026a6: AND
000026a7: PUSH1 0xe0
000026a9: SHL
000026aa: DUP2
000026ab: MSTORE
000026ac: PUSH1 0x04
000026ae: ADD
000026af: PUSH1 0x20
000026b1: PUSH1 0x40
000026b3: MLOAD
000026b4: DUP1
000026b5: DUP4
000026b6: SUB
000026b7: DUP2
000026b8: DUP7
000026b9: DUP1
000026ba: EXTCODESIZE
000026bb: ISZERO
000026bc: DUP1
000026bd: ISZERO
000026be: PUSH2 0x26c6
000026c1: JUMPI
000026c2: PUSH1 0x00
000026c4: DUP1
000026c5: REVERT
000026c6: JUMPDEST
000026c7: POP
000026c8: GAS
000026c9: STATICCALL
000026ca: ISZERO
000026cb: DUP1
000026cc: ISZERO
000026cd: PUSH2 0x26da
000026d0: JUMPI
000026d1: RETURNDATASIZE
000026d2: PUSH1 0x00
000026d4: DUP1
000026d5: RETURNDATACOPY
000026d6: RETURNDATASIZE
000026d7: PUSH1 0x00
000026d9: REVERT
000026da: JUMPDEST
000026db: POP
000026dc: POP
000026dd: POP
000026de: POP
000026df: PUSH1 0x40
000026e1: MLOAD
000026e2: RETURNDATASIZE
000026e3: PUSH1 0x20
000026e5: DUP2
000026e6: LT
000026e7: ISZERO
000026e8: PUSH2 0x26f0
000026eb: JUMPI
000026ec: PUSH1 0x00
000026ee: DUP1
000026ef: REVERT
000026f0: JUMPDEST
000026f1: DUP2
000026f2: ADD
000026f3: SWAP1
000026f4: DUP1
000026f5: DUP1
000026f6: MLOAD
000026f7: SWAP1
000026f8: PUSH1 0x20
000026fa: ADD
000026fb: SWAP1
000026fc: SWAP3
000026fd: SWAP2
000026fe: SWAP1
000026ff: POP
00002700: POP
00002701: POP
00002702: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002717: AND
00002718: PUSH4 0xfc0c546a
0000271d: PUSH1 0x40
0000271f: MLOAD
00002720: DUP2
00002721: PUSH4 0xffffffff
00002726: AND
00002727: PUSH1 0xe0
00002729: SHL
0000272a: DUP2
0000272b: MSTORE
0000272c: PUSH1 0x04
0000272e: ADD
0000272f: PUSH1 0x20
00002731: PUSH1 0x40
00002733: MLOAD
00002734: DUP1
00002735: DUP4
00002736: SUB
00002737: DUP2
00002738: DUP7
00002739: DUP1
0000273a: EXTCODESIZE
0000273b: ISZERO
0000273c: DUP1
0000273d: ISZERO
0000273e: PUSH2 0x2746
00002741: JUMPI
00002742: PUSH1 0x00
00002744: DUP1
00002745: REVERT
00002746: JUMPDEST
00002747: POP
00002748: GAS
00002749: STATICCALL
0000274a: ISZERO
0000274b: DUP1
0000274c: ISZERO
0000274d: PUSH2 0x275a
00002750: JUMPI
00002751: RETURNDATASIZE
00002752: PUSH1 0x00
00002754: DUP1
00002755: RETURNDATACOPY
00002756: RETURNDATASIZE
00002757: PUSH1 0x00
00002759: REVERT
0000275a: JUMPDEST
0000275b: POP
0000275c: POP
0000275d: POP
0000275e: POP
0000275f: PUSH1 0x40
00002761: MLOAD
00002762: RETURNDATASIZE
00002763: PUSH1 0x20
00002765: DUP2
00002766: LT
00002767: ISZERO
00002768: PUSH2 0x2770
0000276b: JUMPI
0000276c: PUSH1 0x00
0000276e: DUP1
0000276f: REVERT
00002770: JUMPDEST
00002771: DUP2
00002772: ADD
00002773: SWAP1
00002774: DUP1
00002775: DUP1
00002776: MLOAD
00002777: SWAP1
00002778: PUSH1 0x20
0000277a: ADD
0000277b: SWAP1
0000277c: SWAP3
0000277d: SWAP2
0000277e: SWAP1
0000277f: POP
00002780: POP
00002781: POP
00002782: SWAP1
00002783: POP
00002784: PUSH1 0x00
00002786: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000279b: AND
0000279c: DUP2
0000279d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000027b2: AND
000027b3: EQ
000027b4: ISZERO
000027b5: PUSH2 0x27bd
000027b8: JUMPI
000027b9: PUSH1 0x00
000027bb: DUP1
000027bc: REVERT
000027bd: JUMPDEST
000027be: DUP1
000027bf: PUSH1 0x34
000027c1: PUSH1 0x00
000027c3: PUSH2 0x0100
000027c6: EXP
000027c7: DUP2
000027c8: SLOAD
000027c9: DUP2
000027ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000027df: MUL
000027e0: NOT
000027e1: AND
000027e2: SWAP1
000027e3: DUP4
000027e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000027f9: AND
000027fa: MUL
000027fb: OR
000027fc: SWAP1
000027fd: SSTORE
000027fe: POP
000027ff: POP
00002800: DUP1
00002801: ISZERO
00002802: PUSH2 0x2820
00002805: JUMPI
00002806: PUSH1 0x00
00002808: DUP1
00002809: PUSH1 0x01
0000280b: PUSH2 0x0100
0000280e: EXP
0000280f: DUP2
00002810: SLOAD
00002811: DUP2
00002812: PUSH1 0xff
00002814: MUL
00002815: NOT
00002816: AND
00002817: SWAP1
00002818: DUP4
00002819: ISZERO
0000281a: ISZERO
0000281b: MUL
0000281c: OR
0000281d: SWAP1
0000281e: SSTORE
0000281f: POP
00002820: JUMPDEST
00002821: POP
00002822: POP
00002823: JUMP
00002824: JUMPDEST
00002825: PUSH1 0x3b
00002827: SLOAD
00002828: DUP2
00002829: JUMP
0000282a: JUMPDEST
0000282b: PUSH1 0x43
0000282d: PUSH1 0x00
0000282f: SWAP1
00002830: SLOAD
00002831: SWAP1
00002832: PUSH2 0x0100
00002835: EXP
00002836: SWAP1
00002837: DIV
00002838: PUSH1 0xff
0000283a: AND
0000283b: PUSH2 0x28ac
0000283e: JUMPI
0000283f: PUSH1 0x40
00002841: MLOAD
00002842: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002863: DUP2
00002864: MSTORE
00002865: PUSH1 0x04
00002867: ADD
00002868: DUP1
00002869: DUP1
0000286a: PUSH1 0x20
0000286c: ADD
0000286d: DUP3
0000286e: DUP2
0000286f: SUB
00002870: DUP3
00002871: MSTORE
00002872: PUSH1 0x17
00002874: DUP2
00002875: MSTORE
00002876: PUSH1 0x20
00002878: ADD
00002879: DUP1
0000287a: PUSH32 0x4465706f736974206d75737420626520656e61626c6564000000000000000000
0000289b: DUP2
0000289c: MSTORE
0000289d: POP
0000289e: PUSH1 0x20
000028a0: ADD
000028a1: SWAP2
000028a2: POP
000028a3: POP
000028a4: PUSH1 0x40
000028a6: MLOAD
000028a7: DUP1
000028a8: SWAP2
000028a9: SUB
000028aa: SWAP1
000028ab: REVERT
000028ac: JUMPDEST
000028ad: PUSH1 0x00
000028af: DUP2
000028b0: GT
000028b1: PUSH2 0x2922
000028b4: JUMPI
000028b5: PUSH1 0x40
000028b7: MLOAD
000028b8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000028d9: DUP2
000028da: MSTORE
000028db: PUSH1 0x04
000028dd: ADD
000028de: DUP1
000028df: DUP1
000028e0: PUSH1 0x20
000028e2: ADD
000028e3: DUP3
000028e4: DUP2
000028e5: SUB
000028e6: DUP3
000028e7: MSTORE
000028e8: PUSH1 0x17
000028ea: DUP2
000028eb: MSTORE
000028ec: PUSH1 0x20
000028ee: ADD
000028ef: DUP1
000028f0: PUSH32 0x56616c7565206d757374206265206e6f7420656d707479000000000000000000
00002911: DUP2
00002912: MSTORE
00002913: POP
00002914: PUSH1 0x20
00002916: ADD
00002917: SWAP2
00002918: POP
00002919: POP
0000291a: PUSH1 0x40
0000291c: MLOAD
0000291d: DUP1
0000291e: SWAP2
0000291f: SUB
00002920: SWAP1
00002921: REVERT
00002922: JUMPDEST
00002923: PUSH2 0x2937
00002926: DUP2
00002927: PUSH1 0x39
00002929: SLOAD
0000292a: PUSH2 0x31af
0000292d: SWAP1
0000292e: SWAP2
0000292f: SWAP1
00002930: PUSH4 0xffffffff
00002935: AND
00002936: JUMP
00002937: JUMPDEST
00002938: PUSH1 0x39
0000293a: DUP2
0000293b: SWAP1
0000293c: SSTORE
0000293d: POP
0000293e: PUSH1 0x00
00002940: PUSH1 0x42
00002942: PUSH1 0x00
00002944: CALLER
00002945: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000295a: AND
0000295b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002970: AND
00002971: DUP2
00002972: MSTORE
00002973: PUSH1 0x20
00002975: ADD
00002976: SWAP1
00002977: DUP2
00002978: MSTORE
00002979: PUSH1 0x20
0000297b: ADD
0000297c: PUSH1 0x00
0000297e: KECCAK256
0000297f: SWAP1
00002980: POP
00002981: PUSH2 0x2997
00002984: DUP3
00002985: DUP3
00002986: PUSH1 0x00
00002988: ADD
00002989: SLOAD
0000298a: PUSH2 0x31af
0000298d: SWAP1
0000298e: SWAP2
0000298f: SWAP1
00002990: PUSH4 0xffffffff
00002995: AND
00002996: JUMP
00002997: JUMPDEST
00002998: DUP2
00002999: PUSH1 0x00
0000299b: ADD
0000299c: DUP2
0000299d: SWAP1
0000299e: SSTORE
0000299f: POP
000029a0: PUSH2 0x29ee
000029a3: CALLER
000029a4: ADDRESS
000029a5: DUP5
000029a6: PUSH1 0x34
000029a8: PUSH1 0x00
000029aa: SWAP1
000029ab: SLOAD
000029ac: SWAP1
000029ad: PUSH2 0x0100
000029b0: EXP
000029b1: SWAP1
000029b2: DIV
000029b3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000029c8: AND
000029c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000029de: AND
000029df: PUSH2 0x3662
000029e2: SWAP1
000029e3: SWAP4
000029e4: SWAP3
000029e5: SWAP2
000029e6: SWAP1
000029e7: PUSH4 0xffffffff
000029ec: AND
000029ed: JUMP
000029ee: JUMPDEST
000029ef: CALLER
000029f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a05: AND
00002a06: PUSH32 0xfdfdcf596161b0e81e3161597d46888dcc88bd83b22dcfb341c76377ca3bbc9e
00002a27: DUP4
00002a28: DUP4
00002a29: PUSH1 0x00
00002a2b: ADD
00002a2c: SLOAD
00002a2d: PUSH1 0x40
00002a2f: MLOAD
00002a30: DUP1
00002a31: DUP4
00002a32: DUP2
00002a33: MSTORE
00002a34: PUSH1 0x20
00002a36: ADD
00002a37: DUP3
00002a38: DUP2
00002a39: MSTORE
00002a3a: PUSH1 0x20
00002a3c: ADD
00002a3d: SWAP3
00002a3e: POP
00002a3f: POP
00002a40: POP
00002a41: PUSH1 0x40
00002a43: MLOAD
00002a44: DUP1
00002a45: SWAP2
00002a46: SUB
00002a47: SWAP1
00002a48: LOG2
00002a49: POP
00002a4a: POP
00002a4b: JUMP
00002a4c: JUMPDEST
00002a4d: PUSH1 0x00
00002a4f: PUSH2 0x2a6a
00002a52: PUSH1 0x3b
00002a54: SLOAD
00002a55: PUSH2 0x2a5c
00002a58: PUSH2 0x2bd6
00002a5b: JUMP
00002a5c: JUMPDEST
00002a5d: PUSH2 0x31af
00002a60: SWAP1
00002a61: SWAP2
00002a62: SWAP1
00002a63: PUSH4 0xffffffff
00002a68: AND
00002a69: JUMP
00002a6a: JUMPDEST
00002a6b: SWAP1
00002a6c: POP
00002a6d: SWAP1
00002a6e: JUMP
00002a6f: JUMPDEST
00002a70: PUSH1 0x00
00002a72: PUSH1 0x42
00002a74: PUSH1 0x00
00002a76: CALLER
00002a77: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a8c: AND
00002a8d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002aa2: AND
00002aa3: DUP2
00002aa4: MSTORE
00002aa5: PUSH1 0x20
00002aa7: ADD
00002aa8: SWAP1
00002aa9: DUP2
00002aaa: MSTORE
00002aab: PUSH1 0x20
00002aad: ADD
00002aae: PUSH1 0x00
00002ab0: KECCAK256
00002ab1: SWAP1
00002ab2: POP
00002ab3: PUSH2 0x2abb
00002ab6: DUP2
00002ab7: PUSH2 0x331f
00002aba: JUMP
00002abb: JUMPDEST
00002abc: PUSH1 0x00
00002abe: PUSH2 0x2ac6
00002ac1: CALLER
00002ac2: PUSH2 0x203e
00002ac5: JUMP
00002ac6: JUMPDEST
00002ac7: SWAP1
00002ac8: POP
00002ac9: PUSH1 0x00
00002acb: DUP2
00002acc: GT
00002acd: PUSH2 0x2b21
00002ad0: JUMPI
00002ad1: PUSH1 0x40
00002ad3: MLOAD
00002ad4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002af5: DUP2
00002af6: MSTORE
00002af7: PUSH1 0x04
00002af9: ADD
00002afa: DUP1
00002afb: DUP1
00002afc: PUSH1 0x20
00002afe: ADD
00002aff: DUP3
00002b00: DUP2
00002b01: SUB
00002b02: DUP3
00002b03: MSTORE
00002b04: PUSH1 0x25
00002b06: DUP2
00002b07: MSTORE
00002b08: PUSH1 0x20
00002b0a: ADD
00002b0b: DUP1
00002b0c: PUSH2 0x3820
00002b0f: PUSH1 0x25
00002b11: SWAP2
00002b12: CODECOPY
00002b13: PUSH1 0x40
00002b15: ADD
00002b16: SWAP2
00002b17: POP
00002b18: POP
00002b19: PUSH1 0x40
00002b1b: MLOAD
00002b1c: DUP1
00002b1d: SWAP2
00002b1e: SUB
00002b1f: SWAP1
00002b20: REVERT
00002b21: JUMPDEST
00002b22: PUSH2 0x2b38
00002b25: DUP2
00002b26: DUP4
00002b27: PUSH1 0x02
00002b29: ADD
00002b2a: SLOAD
00002b2b: PUSH2 0x31af
00002b2e: SWAP1
00002b2f: SWAP2
00002b30: SWAP1
00002b31: PUSH4 0xffffffff
00002b36: AND
00002b37: JUMP
00002b38: JUMPDEST
00002b39: DUP3
00002b3a: PUSH1 0x02
00002b3c: ADD
00002b3d: DUP2
00002b3e: SWAP1
00002b3f: SSTORE
00002b40: POP
00002b41: PUSH2 0x2b55
00002b44: DUP2
00002b45: PUSH1 0x3c
00002b47: SLOAD
00002b48: PUSH2 0x31af
00002b4b: SWAP1
00002b4c: SWAP2
00002b4d: SWAP1
00002b4e: PUSH4 0xffffffff
00002b53: AND
00002b54: JUMP
00002b55: JUMPDEST
00002b56: PUSH1 0x3c
00002b58: DUP2
00002b59: SWAP1
00002b5a: SSTORE
00002b5b: POP
00002b5c: PUSH2 0x2b84
00002b5f: DUP2
00002b60: CALLER
00002b61: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b76: AND
00002b77: PUSH2 0x31ce
00002b7a: SWAP1
00002b7b: SWAP2
00002b7c: SWAP1
00002b7d: PUSH4 0xffffffff
00002b82: AND
00002b83: JUMP
00002b84: JUMPDEST
00002b85: CALLER
00002b86: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b9b: AND
00002b9c: PUSH32 0x94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c
00002bbd: DUP3
00002bbe: PUSH1 0x40
00002bc0: MLOAD
00002bc1: DUP1
00002bc2: DUP3
00002bc3: DUP2
00002bc4: MSTORE
00002bc5: PUSH1 0x20
00002bc7: ADD
00002bc8: SWAP2
00002bc9: POP
00002bca: POP
00002bcb: PUSH1 0x40
00002bcd: MLOAD
00002bce: DUP1
00002bcf: SWAP2
00002bd0: SUB
00002bd1: SWAP1
00002bd2: LOG2
00002bd3: POP
00002bd4: POP
00002bd5: JUMP
00002bd6: JUMPDEST
00002bd7: PUSH1 0x00
00002bd9: DUP1
00002bda: PUSH1 0x36
00002bdc: PUSH1 0x00
00002bde: SWAP1
00002bdf: SLOAD
00002be0: SWAP1
00002be1: PUSH2 0x0100
00002be4: EXP
00002be5: SWAP1
00002be6: DIV
00002be7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002bfc: AND
00002bfd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002c12: AND
00002c13: PUSH4 0x178b6de6
00002c18: ADDRESS
00002c19: PUSH1 0x40
00002c1b: MLOAD
00002c1c: DUP3
00002c1d: PUSH4 0xffffffff
00002c22: AND
00002c23: PUSH1 0xe0
00002c25: SHL
00002c26: DUP2
00002c27: MSTORE
00002c28: PUSH1 0x04
00002c2a: ADD
00002c2b: DUP1
00002c2c: DUP3
00002c2d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002c42: AND
00002c43: DUP2
00002c44: MSTORE
00002c45: PUSH1 0x20
00002c47: ADD
00002c48: SWAP2
00002c49: POP
00002c4a: POP
00002c4b: PUSH1 0x20
00002c4d: PUSH1 0x40
00002c4f: MLOAD
00002c50: DUP1
00002c51: DUP4
00002c52: SUB
00002c53: DUP2
00002c54: DUP7
00002c55: DUP1
00002c56: EXTCODESIZE
00002c57: ISZERO
00002c58: DUP1
00002c59: ISZERO
00002c5a: PUSH2 0x2c62
00002c5d: JUMPI
00002c5e: PUSH1 0x00
00002c60: DUP1
00002c61: REVERT
00002c62: JUMPDEST
00002c63: POP
00002c64: GAS
00002c65: STATICCALL
00002c66: ISZERO
00002c67: DUP1
00002c68: ISZERO
00002c69: PUSH2 0x2c76
00002c6c: JUMPI
00002c6d: RETURNDATASIZE
00002c6e: PUSH1 0x00
00002c70: DUP1
00002c71: RETURNDATACOPY
00002c72: RETURNDATASIZE
00002c73: PUSH1 0x00
00002c75: REVERT
00002c76: JUMPDEST
00002c77: POP
00002c78: POP
00002c79: POP
00002c7a: POP
00002c7b: PUSH1 0x40
00002c7d: MLOAD
00002c7e: RETURNDATASIZE
00002c7f: PUSH1 0x20
00002c81: DUP2
00002c82: LT
00002c83: ISZERO
00002c84: PUSH2 0x2c8c
00002c87: JUMPI
00002c88: PUSH1 0x00
00002c8a: DUP1
00002c8b: REVERT
00002c8c: JUMPDEST
00002c8d: DUP2
00002c8e: ADD
00002c8f: SWAP1
00002c90: DUP1
00002c91: DUP1
00002c92: MLOAD
00002c93: SWAP1
00002c94: PUSH1 0x20
00002c96: ADD
00002c97: SWAP1
00002c98: SWAP3
00002c99: SWAP2
00002c9a: SWAP1
00002c9b: POP
00002c9c: POP
00002c9d: POP
00002c9e: SWAP1
00002c9f: POP
00002ca0: PUSH1 0x00
00002ca2: PUSH1 0x34
00002ca4: PUSH1 0x00
00002ca6: SWAP1
00002ca7: SLOAD
00002ca8: SWAP1
00002ca9: PUSH2 0x0100
00002cac: EXP
00002cad: SWAP1
00002cae: DIV
00002caf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002cc4: AND
00002cc5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002cda: AND
00002cdb: PUSH4 0x70a08231
00002ce0: ADDRESS
00002ce1: PUSH1 0x40
00002ce3: MLOAD
00002ce4: DUP3
00002ce5: PUSH4 0xffffffff
00002cea: AND
00002ceb: PUSH1 0xe0
00002ced: SHL
00002cee: DUP2
00002cef: MSTORE
00002cf0: PUSH1 0x04
00002cf2: ADD
00002cf3: DUP1
00002cf4: DUP3
00002cf5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002d0a: AND
00002d0b: DUP2
00002d0c: MSTORE
00002d0d: PUSH1 0x20
00002d0f: ADD
00002d10: SWAP2
00002d11: POP
00002d12: POP
00002d13: PUSH1 0x20
00002d15: PUSH1 0x40
00002d17: MLOAD
00002d18: DUP1
00002d19: DUP4
00002d1a: SUB
00002d1b: DUP2
00002d1c: DUP7
00002d1d: DUP1
00002d1e: EXTCODESIZE
00002d1f: ISZERO
00002d20: DUP1
00002d21: ISZERO
00002d22: PUSH2 0x2d2a
00002d25: JUMPI
00002d26: PUSH1 0x00
00002d28: DUP1
00002d29: REVERT
00002d2a: JUMPDEST
00002d2b: POP
00002d2c: GAS
00002d2d: STATICCALL
00002d2e: ISZERO
00002d2f: DUP1
00002d30: ISZERO
00002d31: PUSH2 0x2d3e
00002d34: JUMPI
00002d35: RETURNDATASIZE
00002d36: PUSH1 0x00
00002d38: DUP1
00002d39: RETURNDATACOPY
00002d3a: RETURNDATASIZE
00002d3b: PUSH1 0x00
00002d3d: REVERT
00002d3e: JUMPDEST
00002d3f: POP
00002d40: POP
00002d41: POP
00002d42: POP
00002d43: PUSH1 0x40
00002d45: MLOAD
00002d46: RETURNDATASIZE
00002d47: PUSH1 0x20
00002d49: DUP2
00002d4a: LT
00002d4b: ISZERO
00002d4c: PUSH2 0x2d54
00002d4f: JUMPI
00002d50: PUSH1 0x00
00002d52: DUP1
00002d53: REVERT
00002d54: JUMPDEST
00002d55: DUP2
00002d56: ADD
00002d57: SWAP1
00002d58: DUP1
00002d59: DUP1
00002d5a: MLOAD
00002d5b: SWAP1
00002d5c: PUSH1 0x20
00002d5e: ADD
00002d5f: SWAP1
00002d60: SWAP3
00002d61: SWAP2
00002d62: SWAP1
00002d63: POP
00002d64: POP
00002d65: POP
00002d66: SWAP1
00002d67: POP
00002d68: PUSH1 0x00
00002d6a: PUSH2 0x2d90
00002d6d: PUSH1 0x39
00002d6f: SLOAD
00002d70: PUSH2 0x2d82
00002d73: DUP5
00002d74: DUP7
00002d75: PUSH2 0x31af
00002d78: SWAP1
00002d79: SWAP2
00002d7a: SWAP1
00002d7b: PUSH4 0xffffffff
00002d80: AND
00002d81: JUMP
00002d82: JUMPDEST
00002d83: PUSH2 0x3531
00002d86: SWAP1
00002d87: SWAP2
00002d88: SWAP1
00002d89: PUSH4 0xffffffff
00002d8e: AND
00002d8f: JUMP
00002d90: JUMPDEST
00002d91: SWAP1
00002d92: POP
00002d93: DUP2
00002d94: DUP2
00002d95: GT
00002d96: ISZERO
00002d97: PUSH2 0x2da5
00002d9a: JUMPI
00002d9b: DUP2
00002d9c: SWAP4
00002d9d: POP
00002d9e: POP
00002d9f: POP
00002da0: POP
00002da1: PUSH2 0x2dac
00002da4: JUMP
00002da5: JUMPDEST
00002da6: DUP1
00002da7: SWAP4
00002da8: POP
00002da9: POP
00002daa: POP
00002dab: POP
00002dac: JUMPDEST
00002dad: SWAP1
00002dae: JUMP
00002daf: JUMPDEST
00002db0: PUSH1 0x36
00002db2: PUSH1 0x00
00002db4: SWAP1
00002db5: SLOAD
00002db6: SWAP1
00002db7: PUSH2 0x0100
00002dba: EXP
00002dbb: SWAP1
00002dbc: DIV
00002dbd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002dd2: AND
00002dd3: DUP2
00002dd4: JUMP
00002dd5: JUMPDEST
00002dd6: PUSH1 0x3f
00002dd8: SLOAD
00002dd9: DUP2
00002dda: JUMP
00002ddb: JUMPDEST
00002ddc: PUSH1 0x37
00002dde: PUSH1 0x00
00002de0: SWAP1
00002de1: SLOAD
00002de2: SWAP1
00002de3: PUSH2 0x0100
00002de6: EXP
00002de7: SWAP1
00002de8: DIV
00002de9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002dfe: AND
00002dff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002e14: AND
00002e15: PUSH4 0x4e71d92d
00002e1a: PUSH1 0x40
00002e1c: MLOAD
00002e1d: DUP2
00002e1e: PUSH4 0xffffffff
00002e23: AND
00002e24: PUSH1 0xe0
00002e26: SHL
00002e27: DUP2
00002e28: MSTORE
00002e29: PUSH1 0x04
00002e2b: ADD
00002e2c: PUSH1 0x20
00002e2e: PUSH1 0x40
00002e30: MLOAD
00002e31: DUP1
00002e32: DUP4
00002e33: SUB
00002e34: DUP2
00002e35: PUSH1 0x00
00002e37: DUP8
00002e38: DUP1
00002e39: EXTCODESIZE
00002e3a: ISZERO
00002e3b: DUP1
00002e3c: ISZERO
00002e3d: PUSH2 0x2e45
00002e40: JUMPI
00002e41: PUSH1 0x00
00002e43: DUP1
00002e44: REVERT
00002e45: JUMPDEST
00002e46: POP
00002e47: GAS
00002e48: CALL
00002e49: ISZERO
00002e4a: DUP1
00002e4b: ISZERO
00002e4c: PUSH2 0x2e59
00002e4f: JUMPI
00002e50: RETURNDATASIZE
00002e51: PUSH1 0x00
00002e53: DUP1
00002e54: RETURNDATACOPY
00002e55: RETURNDATASIZE
00002e56: PUSH1 0x00
00002e58: REVERT
00002e59: JUMPDEST
00002e5a: POP
00002e5b: POP
00002e5c: POP
00002e5d: POP
00002e5e: PUSH1 0x40
00002e60: MLOAD
00002e61: RETURNDATASIZE
00002e62: PUSH1 0x20
00002e64: DUP2
00002e65: LT
00002e66: ISZERO
00002e67: PUSH2 0x2e6f
00002e6a: JUMPI
00002e6b: PUSH1 0x00
00002e6d: DUP1
00002e6e: REVERT
00002e6f: JUMPDEST
00002e70: DUP2
00002e71: ADD
00002e72: SWAP1
00002e73: DUP1
00002e74: DUP1
00002e75: MLOAD
00002e76: SWAP1
00002e77: PUSH1 0x20
00002e79: ADD
00002e7a: SWAP1
00002e7b: SWAP3
00002e7c: SWAP2
00002e7d: SWAP1
00002e7e: POP
00002e7f: POP
00002e80: POP
00002e81: PUSH1 0x3a
00002e83: DUP2
00002e84: SWAP1
00002e85: SSTORE
00002e86: POP
00002e87: PUSH2 0x2e9d
00002e8a: PUSH1 0x3a
00002e8c: SLOAD
00002e8d: PUSH1 0x39
00002e8f: SLOAD
00002e90: PUSH2 0x31af
00002e93: SWAP1
00002e94: SWAP2
00002e95: SWAP1
00002e96: PUSH4 0xffffffff
00002e9b: AND
00002e9c: JUMP
00002e9d: JUMPDEST
00002e9e: PUSH1 0x39
00002ea0: DUP2
00002ea1: SWAP1
00002ea2: SSTORE
00002ea3: POP
00002ea4: ADDRESS
00002ea5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002eba: AND
00002ebb: PUSH32 0xd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a
00002edc: PUSH1 0x3a
00002ede: SLOAD
00002edf: PUSH1 0x40
00002ee1: MLOAD
00002ee2: DUP1
00002ee3: DUP3
00002ee4: DUP2
00002ee5: MSTORE
00002ee6: PUSH1 0x20
00002ee8: ADD
00002ee9: SWAP2
00002eea: POP
00002eeb: POP
00002eec: PUSH1 0x40
00002eee: MLOAD
00002eef: DUP1
00002ef0: SWAP2
00002ef1: SUB
00002ef2: SWAP1
00002ef3: LOG2
00002ef4: JUMP
00002ef5: JUMPDEST
00002ef6: PUSH2 0x2efd
00002ef9: PUSH2 0x1dc9
00002efc: JUMP
00002efd: JUMPDEST
00002efe: PUSH2 0x2f06
00002f01: JUMPI
00002f02: PUSH1 0x00
00002f04: DUP1
00002f05: REVERT
00002f06: JUMPDEST
00002f07: PUSH2 0x2f0f
00002f0a: DUP2
00002f0b: PUSH2 0x3568
00002f0e: JUMP
00002f0f: JUMPDEST
00002f10: POP
00002f11: JUMP
00002f12: JUMPDEST
00002f13: PUSH1 0x38
00002f15: PUSH1 0x00
00002f17: SWAP1
00002f18: SLOAD
00002f19: SWAP1
00002f1a: PUSH2 0x0100
00002f1d: EXP
00002f1e: SWAP1
00002f1f: DIV
00002f20: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f35: AND
00002f36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f4b: AND
00002f4c: CALLER
00002f4d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f62: AND
00002f63: EQ
00002f64: PUSH2 0x2f6c
00002f67: JUMPI
00002f68: PUSH1 0x00
00002f6a: DUP1
00002f6b: REVERT
00002f6c: JUMPDEST
00002f6d: PUSH1 0x00
00002f6f: PUSH1 0x34
00002f71: PUSH1 0x00
00002f73: SWAP1
00002f74: SLOAD
00002f75: SWAP1
00002f76: PUSH2 0x0100
00002f79: EXP
00002f7a: SWAP1
00002f7b: DIV
00002f7c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f91: AND
00002f92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002fa7: AND
00002fa8: PUSH4 0x70a08231
00002fad: ADDRESS
00002fae: PUSH1 0x40
00002fb0: MLOAD
00002fb1: DUP3
00002fb2: PUSH4 0xffffffff
00002fb7: AND
00002fb8: PUSH1 0xe0
00002fba: SHL
00002fbb: DUP2
00002fbc: MSTORE
00002fbd: PUSH1 0x04
00002fbf: ADD
00002fc0: DUP1
00002fc1: DUP3
00002fc2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002fd7: AND
00002fd8: DUP2
00002fd9: MSTORE
00002fda: PUSH1 0x20
00002fdc: ADD
00002fdd: SWAP2
00002fde: POP
00002fdf: POP
00002fe0: PUSH1 0x20
00002fe2: PUSH1 0x40
00002fe4: MLOAD
00002fe5: DUP1
00002fe6: DUP4
00002fe7: SUB
00002fe8: DUP2
00002fe9: DUP7
00002fea: DUP1
00002feb: EXTCODESIZE
00002fec: ISZERO
00002fed: DUP1
00002fee: ISZERO
00002fef: PUSH2 0x2ff7
00002ff2: JUMPI
00002ff3: PUSH1 0x00
00002ff5: DUP1
00002ff6: REVERT
00002ff7: JUMPDEST
00002ff8: POP
00002ff9: GAS
00002ffa: STATICCALL
00002ffb: ISZERO
00002ffc: DUP1
00002ffd: ISZERO
00002ffe: PUSH2 0x300b
00003001: JUMPI
00003002: RETURNDATASIZE
00003003: PUSH1 0x00
00003005: DUP1
00003006: RETURNDATACOPY
00003007: RETURNDATASIZE
00003008: PUSH1 0x00
0000300a: REVERT
0000300b: JUMPDEST
0000300c: POP
0000300d: POP
0000300e: POP
0000300f: POP
00003010: PUSH1 0x40
00003012: MLOAD
00003013: RETURNDATASIZE
00003014: PUSH1 0x20
00003016: DUP2
00003017: LT
00003018: ISZERO
00003019: PUSH2 0x3021
0000301c: JUMPI
0000301d: PUSH1 0x00
0000301f: DUP1
00003020: REVERT
00003021: JUMPDEST
00003022: DUP2
00003023: ADD
00003024: SWAP1
00003025: DUP1
00003026: DUP1
00003027: MLOAD
00003028: SWAP1
00003029: PUSH1 0x20
0000302b: ADD
0000302c: SWAP1
0000302d: SWAP3
0000302e: SWAP2
0000302f: SWAP1
00003030: POP
00003031: POP
00003032: POP
00003033: SWAP1
00003034: POP
00003035: PUSH1 0x00
00003037: PUSH2 0x303e
0000303a: PUSH2 0x1e21
0000303d: JUMP
0000303e: JUMPDEST
0000303f: SWAP1
00003040: POP
00003041: DUP2
00003042: DUP2
00003043: GT
00003044: ISZERO
00003045: PUSH2 0x304c
00003048: JUMPI
00003049: DUP2
0000304a: SWAP1
0000304b: POP
0000304c: JUMPDEST
0000304d: PUSH1 0x00
0000304f: DUP2
00003050: GT
00003051: PUSH2 0x30a5
00003054: JUMPI
00003055: PUSH1 0x40
00003057: MLOAD
00003058: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00003079: DUP2
0000307a: MSTORE
0000307b: PUSH1 0x04
0000307d: ADD
0000307e: DUP1
0000307f: DUP1
00003080: PUSH1 0x20
00003082: ADD
00003083: DUP3
00003084: DUP2
00003085: SUB
00003086: DUP3
00003087: MSTORE
00003088: PUSH1 0x28
0000308a: DUP2
0000308b: MSTORE
0000308c: PUSH1 0x20
0000308e: ADD
0000308f: DUP1
00003090: PUSH2 0x37f8
00003093: PUSH1 0x28
00003095: SWAP2
00003096: CODECOPY
00003097: PUSH1 0x40
00003099: ADD
0000309a: SWAP2
0000309b: POP
0000309c: POP
0000309d: PUSH1 0x40
0000309f: MLOAD
000030a0: DUP1
000030a1: SWAP2
000030a2: SUB
000030a3: SWAP1
000030a4: REVERT
000030a5: JUMPDEST
000030a6: PUSH2 0x30ba
000030a9: DUP2
000030aa: PUSH1 0x41
000030ac: SLOAD
000030ad: PUSH2 0x31af
000030b0: SWAP1
000030b1: SWAP2
000030b2: SWAP1
000030b3: PUSH4 0xffffffff
000030b8: AND
000030b9: JUMP
000030ba: JUMPDEST
000030bb: PUSH1 0x41
000030bd: DUP2
000030be: SWAP1
000030bf: SSTORE
000030c0: POP
000030c1: PUSH2 0x30d5
000030c4: DUP2
000030c5: PUSH1 0x3b
000030c7: SLOAD
000030c8: PUSH2 0x31af
000030cb: SWAP1
000030cc: SWAP2
000030cd: SWAP1
000030ce: PUSH4 0xffffffff
000030d3: AND
000030d4: JUMP
000030d5: JUMPDEST
000030d6: PUSH1 0x3b
000030d8: DUP2
000030d9: SWAP1
000030da: SSTORE
000030db: POP
000030dc: PUSH2 0x3128
000030df: CALLER
000030e0: DUP3
000030e1: PUSH1 0x34
000030e3: PUSH1 0x00
000030e5: SWAP1
000030e6: SLOAD
000030e7: SWAP1
000030e8: PUSH2 0x0100
000030eb: EXP
000030ec: SWAP1
000030ed: DIV
000030ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003103: AND
00003104: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003119: AND
0000311a: PUSH2 0x3417
0000311d: SWAP1
0000311e: SWAP3
0000311f: SWAP2
00003120: SWAP1
00003121: PUSH4 0xffffffff
00003126: AND
00003127: JUMP
00003128: JUMPDEST
00003129: CALLER
0000312a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000313f: AND
00003140: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa
00003161: DUP3
00003162: PUSH1 0x00
00003164: PUSH1 0x40
00003166: MLOAD
00003167: DUP1
00003168: DUP4
00003169: DUP2
0000316a: MSTORE
0000316b: PUSH1 0x20
0000316d: ADD
0000316e: DUP3
0000316f: DUP2
00003170: MSTORE
00003171: PUSH1 0x20
00003173: ADD
00003174: SWAP3
00003175: POP
00003176: POP
00003177: POP
00003178: PUSH1 0x40
0000317a: MLOAD
0000317b: DUP1
0000317c: SWAP2
0000317d: SUB
0000317e: SWAP1
0000317f: LOG2
00003180: POP
00003181: POP
00003182: JUMP
00003183: JUMPDEST
00003184: PUSH1 0x34
00003186: PUSH1 0x00
00003188: SWAP1
00003189: SLOAD
0000318a: SWAP1
0000318b: PUSH2 0x0100
0000318e: EXP
0000318f: SWAP1
00003190: DIV
00003191: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000031a6: AND
000031a7: DUP2
000031a8: JUMP
000031a9: JUMPDEST
000031aa: PUSH1 0x39
000031ac: SLOAD
000031ad: DUP2
000031ae: JUMP
000031af: JUMPDEST
000031b0: PUSH1 0x00
000031b2: DUP1
000031b3: DUP3
000031b4: DUP5
000031b5: ADD
000031b6: SWAP1
000031b7: POP
000031b8: DUP4
000031b9: DUP2
000031ba: LT
000031bb: ISZERO
000031bc: PUSH2 0x31c4
000031bf: JUMPI
000031c0: PUSH1 0x00
000031c2: DUP1
000031c3: REVERT
000031c4: JUMPDEST
000031c5: DUP1
000031c6: SWAP2
000031c7: POP
000031c8: POP
000031c9: SWAP3
000031ca: SWAP2
000031cb: POP
000031cc: POP
000031cd: JUMP
000031ce: JUMPDEST
000031cf: DUP1
000031d0: ADDRESS
000031d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000031e6: AND
000031e7: BALANCE
000031e8: LT
000031e9: ISZERO
000031ea: PUSH2 0x325b
000031ed: JUMPI
000031ee: PUSH1 0x40
000031f0: MLOAD
000031f1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00003212: DUP2
00003213: MSTORE
00003214: PUSH1 0x04
00003216: ADD
00003217: DUP1
00003218: DUP1
00003219: PUSH1 0x20
0000321b: ADD
0000321c: DUP3
0000321d: DUP2
0000321e: SUB
0000321f: DUP3
00003220: MSTORE
00003221: PUSH1 0x1d
00003223: DUP2
00003224: MSTORE
00003225: PUSH1 0x20
00003227: ADD
00003228: DUP1
00003229: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000
0000324a: DUP2
0000324b: MSTORE
0000324c: POP
0000324d: PUSH1 0x20
0000324f: ADD
00003250: SWAP2
00003251: POP
00003252: POP
00003253: PUSH1 0x40
00003255: MLOAD
00003256: DUP1
00003257: SWAP2
00003258: SUB
00003259: SWAP1
0000325a: REVERT
0000325b: JUMPDEST
0000325c: PUSH1 0x00
0000325e: DUP3
0000325f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003274: AND
00003275: DUP3
00003276: PUSH1 0x40
00003278: MLOAD
00003279: DUP1
0000327a: PUSH1 0x00
0000327c: ADD
0000327d: SWAP1
0000327e: POP
0000327f: PUSH1 0x00
00003281: PUSH1 0x40
00003283: MLOAD
00003284: DUP1
00003285: DUP4
00003286: SUB
00003287: DUP2
00003288: DUP6
00003289: DUP8
0000328a: GAS
0000328b: CALL
0000328c: SWAP3
0000328d: POP
0000328e: POP
0000328f: POP
00003290: RETURNDATASIZE
00003291: DUP1
00003292: PUSH1 0x00
00003294: DUP2
00003295: EQ
00003296: PUSH2 0x32bb
00003299: JUMPI
0000329a: PUSH1 0x40
0000329c: MLOAD
0000329d: SWAP2
0000329e: POP
0000329f: PUSH1 0x1f
000032a1: NOT
000032a2: PUSH1 0x3f
000032a4: RETURNDATASIZE
000032a5: ADD
000032a6: AND
000032a7: DUP3
000032a8: ADD
000032a9: PUSH1 0x40
000032ab: MSTORE
000032ac: RETURNDATASIZE
000032ad: DUP3
000032ae: MSTORE
000032af: RETURNDATASIZE
000032b0: PUSH1 0x00
000032b2: PUSH1 0x20
000032b4: DUP5
000032b5: ADD
000032b6: RETURNDATACOPY
000032b7: PUSH2 0x32c0
000032ba: JUMP
000032bb: JUMPDEST
000032bc: PUSH1 0x60
000032be: SWAP2
000032bf: POP
000032c0: JUMPDEST
000032c1: POP
000032c2: POP
000032c3: SWAP1
000032c4: POP
000032c5: DUP1
000032c6: PUSH2 0x331a
000032c9: JUMPI
000032ca: PUSH1 0x40
000032cc: MLOAD
000032cd: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000032ee: DUP2
000032ef: MSTORE
000032f0: PUSH1 0x04
000032f2: ADD
000032f3: DUP1
000032f4: DUP1
000032f5: PUSH1 0x20
000032f7: ADD
000032f8: DUP3
000032f9: DUP2
000032fa: SUB
000032fb: DUP3
000032fc: MSTORE
000032fd: PUSH1 0x3a
000032ff: DUP2
00003300: MSTORE
00003301: PUSH1 0x20
00003303: ADD
00003304: DUP1
00003305: PUSH2 0x373c
00003308: PUSH1 0x3a
0000330a: SWAP2
0000330b: CODECOPY
0000330c: PUSH1 0x40
0000330e: ADD
0000330f: SWAP2
00003310: POP
00003311: POP
00003312: PUSH1 0x40
00003314: MLOAD
00003315: DUP1
00003316: SWAP2
00003317: SUB
00003318: SWAP1
00003319: REVERT
0000331a: JUMPDEST
0000331b: POP
0000331c: POP
0000331d: POP
0000331e: JUMP
0000331f: JUMPDEST
00003320: PUSH1 0x00
00003322: PUSH1 0x3a
00003324: SLOAD
00003325: EQ
00003326: DUP1
00003327: PUSH2 0x3334
0000332a: JUMPI
0000332b: POP
0000332c: PUSH1 0x00
0000332e: DUP2
0000332f: PUSH1 0x03
00003331: ADD
00003332: SLOAD
00003333: EQ
00003334: JUMPDEST
00003335: DUP1
00003336: PUSH2 0x334d
00003339: JUMPI
0000333a: POP
0000333b: DUP1
0000333c: PUSH1 0x05
0000333e: ADD
0000333f: PUSH1 0x00
00003341: SWAP1
00003342: SLOAD
00003343: SWAP1
00003344: PUSH2 0x0100
00003347: EXP
00003348: SWAP1
00003349: DIV
0000334a: PUSH1 0xff
0000334c: AND
0000334d: JUMPDEST
0000334e: ISZERO
0000334f: PUSH2 0x3357
00003352: JUMPI
00003353: PUSH2 0x3414
00003356: JUMP
00003357: JUMPDEST
00003358: PUSH1 0x00
0000335a: PUSH2 0x3386
0000335d: PUSH1 0x3d
0000335f: SLOAD
00003360: PUSH2 0x3378
00003363: PUSH1 0x3a
00003365: SLOAD
00003366: DUP6
00003367: PUSH1 0x03
00003369: ADD
0000336a: SLOAD
0000336b: PUSH2 0x34d1
0000336e: SWAP1
0000336f: SWAP2
00003370: SWAP1
00003371: PUSH4 0xffffffff
00003376: AND
00003377: JUMP
00003378: JUMPDEST
00003379: PUSH2 0x350b
0000337c: SWAP1
0000337d: SWAP2
0000337e: SWAP1
0000337f: PUSH4 0xffffffff
00003384: AND
00003385: JUMP
00003386: JUMPDEST
00003387: SWAP1
00003388: POP
00003389: PUSH2 0x339f
0000338c: DUP2
0000338d: DUP4
0000338e: PUSH1 0x00
00003390: ADD
00003391: SLOAD
00003392: PUSH2 0x31af
00003395: SWAP1
00003396: SWAP2
00003397: SWAP1
00003398: PUSH4 0xffffffff
0000339d: AND
0000339e: JUMP
0000339f: JUMPDEST
000033a0: DUP3
000033a1: PUSH1 0x00
000033a3: ADD
000033a4: DUP2
000033a5: SWAP1
000033a6: SSTORE
000033a7: POP
000033a8: PUSH1 0x01
000033aa: DUP3
000033ab: PUSH1 0x05
000033ad: ADD
000033ae: PUSH1 0x00
000033b0: PUSH2 0x0100
000033b3: EXP
000033b4: DUP2
000033b5: SLOAD
000033b6: DUP2
000033b7: PUSH1 0xff
000033b9: MUL
000033ba: NOT
000033bb: AND
000033bc: SWAP1
000033bd: DUP4
000033be: ISZERO
000033bf: ISZERO
000033c0: MUL
000033c1: OR
000033c2: SWAP1
000033c3: SSTORE
000033c4: POP
000033c5: CALLER
000033c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000033db: AND
000033dc: PUSH32 0xd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a
000033fd: DUP3
000033fe: PUSH1 0x40
00003400: MLOAD
00003401: DUP1
00003402: DUP3
00003403: DUP2
00003404: MSTORE
00003405: PUSH1 0x20
00003407: ADD
00003408: SWAP2
00003409: POP
0000340a: POP
0000340b: PUSH1 0x40
0000340d: MLOAD
0000340e: DUP1
0000340f: SWAP2
00003410: SUB
00003411: SWAP1
00003412: LOG2
00003413: POP
00003414: JUMPDEST
00003415: POP
00003416: JUMP
00003417: JUMPDEST
00003418: DUP3
00003419: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000342e: AND
0000342f: PUSH4 0xa9059cbb
00003434: DUP4
00003435: DUP4
00003436: PUSH1 0x40
00003438: MLOAD
00003439: DUP4
0000343a: PUSH4 0xffffffff
0000343f: AND
00003440: PUSH1 0xe0
00003442: SHL
00003443: DUP2
00003444: MSTORE
00003445: PUSH1 0x04
00003447: ADD
00003448: DUP1
00003449: DUP4
0000344a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000345f: AND
00003460: DUP2
00003461: MSTORE
00003462: PUSH1 0x20
00003464: ADD
00003465: DUP3
00003466: DUP2
00003467: MSTORE
00003468: PUSH1 0x20
0000346a: ADD
0000346b: SWAP3
0000346c: POP
0000346d: POP
0000346e: POP
0000346f: PUSH1 0x20
00003471: PUSH1 0x40
00003473: MLOAD
00003474: DUP1
00003475: DUP4
00003476: SUB
00003477: DUP2
00003478: PUSH1 0x00
0000347a: DUP8
0000347b: DUP1
0000347c: EXTCODESIZE
0000347d: ISZERO
0000347e: DUP1
0000347f: ISZERO
00003480: PUSH2 0x3488
00003483: JUMPI
00003484: PUSH1 0x00
00003486: DUP1
00003487: REVERT
00003488: JUMPDEST
00003489: POP
0000348a: GAS
0000348b: CALL
0000348c: ISZERO
0000348d: DUP1
0000348e: ISZERO
0000348f: PUSH2 0x349c
00003492: JUMPI
00003493: RETURNDATASIZE
00003494: PUSH1 0x00
00003496: DUP1
00003497: RETURNDATACOPY
00003498: RETURNDATASIZE
00003499: PUSH1 0x00
0000349b: REVERT
0000349c: JUMPDEST
0000349d: POP
0000349e: POP
0000349f: POP
000034a0: POP
000034a1: PUSH1 0x40
000034a3: MLOAD
000034a4: RETURNDATASIZE
000034a5: PUSH1 0x20
000034a7: DUP2
000034a8: LT
000034a9: ISZERO
000034aa: PUSH2 0x34b2
000034ad: JUMPI
000034ae: PUSH1 0x00
000034b0: DUP1
000034b1: REVERT
000034b2: JUMPDEST
000034b3: DUP2
000034b4: ADD
000034b5: SWAP1
000034b6: DUP1
000034b7: DUP1
000034b8: MLOAD
000034b9: SWAP1
000034ba: PUSH1 0x20
000034bc: ADD
000034bd: SWAP1
000034be: SWAP3
000034bf: SWAP2
000034c0: SWAP1
000034c1: POP
000034c2: POP
000034c3: POP
000034c4: PUSH2 0x34cc
000034c7: JUMPI
000034c8: PUSH1 0x00
000034ca: DUP1
000034cb: REVERT
000034cc: JUMPDEST
000034cd: POP
000034ce: POP
000034cf: POP
000034d0: JUMP
000034d1: JUMPDEST
000034d2: PUSH1 0x00
000034d4: DUP1
000034d5: DUP4
000034d6: EQ
000034d7: ISZERO
000034d8: PUSH2 0x34e4
000034db: JUMPI
000034dc: PUSH1 0x00
000034de: SWAP1
000034df: POP
000034e0: PUSH2 0x3505
000034e3: JUMP
000034e4: JUMPDEST
000034e5: PUSH1 0x00
000034e7: DUP3
000034e8: DUP5
000034e9: MUL
000034ea: SWAP1
000034eb: POP
000034ec: DUP3
000034ed: DUP5
000034ee: DUP3
000034ef: DUP2
000034f0: PUSH2 0x34f5
000034f3: JUMPI
000034f4: INVALID
000034f5: JUMPDEST
000034f6: DIV
000034f7: EQ
000034f8: PUSH2 0x3500
000034fb: JUMPI
000034fc: PUSH1 0x00
000034fe: DUP1
000034ff: REVERT
00003500: JUMPDEST
00003501: DUP1
00003502: SWAP2
00003503: POP
00003504: POP
00003505: JUMPDEST
00003506: SWAP3
00003507: SWAP2
00003508: POP
00003509: POP
0000350a: JUMP
0000350b: JUMPDEST
0000350c: PUSH1 0x00
0000350e: DUP1
0000350f: DUP3
00003510: GT
00003511: PUSH2 0x3519
00003514: JUMPI
00003515: PUSH1 0x00
00003517: DUP1
00003518: REVERT
00003519: JUMPDEST
0000351a: PUSH1 0x00
0000351c: DUP3
0000351d: DUP5
0000351e: DUP2
0000351f: PUSH2 0x3524
00003522: JUMPI
00003523: INVALID
00003524: JUMPDEST
00003525: DIV
00003526: SWAP1
00003527: POP
00003528: DUP1
00003529: SWAP2
0000352a: POP
0000352b: POP
0000352c: SWAP3
0000352d: SWAP2
0000352e: POP
0000352f: POP
00003530: JUMP
00003531: JUMPDEST
00003532: PUSH1 0x00
00003534: DUP3
00003535: DUP3
00003536: GT
00003537: ISZERO
00003538: PUSH2 0x3540
0000353b: JUMPI
0000353c: PUSH1 0x00
0000353e: DUP1
0000353f: REVERT
00003540: JUMPDEST
00003541: PUSH1 0x00
00003543: DUP3
00003544: DUP5
00003545: SUB
00003546: SWAP1
00003547: POP
00003548: DUP1
00003549: SWAP2
0000354a: POP
0000354b: POP
0000354c: SWAP3
0000354d: SWAP2
0000354e: POP
0000354f: POP
00003550: JUMP
00003551: JUMPDEST
00003552: PUSH1 0x00
00003554: DUP1
00003555: ADDRESS
00003556: SWAP1
00003557: POP
00003558: PUSH1 0x00
0000355a: DUP2
0000355b: EXTCODESIZE
0000355c: SWAP1
0000355d: POP
0000355e: PUSH1 0x00
00003560: DUP2
00003561: EQ
00003562: SWAP3
00003563: POP
00003564: POP
00003565: POP
00003566: SWAP1
00003567: JUMP
00003568: JUMPDEST
00003569: PUSH1 0x00
0000356b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003580: AND
00003581: DUP2
00003582: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003597: AND
00003598: EQ
00003599: ISZERO
0000359a: PUSH2 0x35a2
0000359d: JUMPI
0000359e: PUSH1 0x00
000035a0: DUP1
000035a1: REVERT
000035a2: JUMPDEST
000035a3: DUP1
000035a4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000035b9: AND
000035ba: PUSH1 0x35
000035bc: PUSH1 0x00
000035be: SWAP1
000035bf: SLOAD
000035c0: SWAP1
000035c1: PUSH2 0x0100
000035c4: EXP
000035c5: SWAP1
000035c6: DIV
000035c7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000035dc: AND
000035dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000035f2: AND
000035f3: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00003614: PUSH1 0x40
00003616: MLOAD
00003617: PUSH1 0x40
00003619: MLOAD
0000361a: DUP1
0000361b: SWAP2
0000361c: SUB
0000361d: SWAP1
0000361e: LOG3
0000361f: DUP1
00003620: PUSH1 0x35
00003622: PUSH1 0x00
00003624: PUSH2 0x0100
00003627: EXP
00003628: DUP2
00003629: SLOAD
0000362a: DUP2
0000362b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003640: MUL
00003641: NOT
00003642: AND
00003643: SWAP1
00003644: DUP4
00003645: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000365a: AND
0000365b: MUL
0000365c: OR
0000365d: SWAP1
0000365e: SSTORE
0000365f: POP
00003660: POP
00003661: JUMP
00003662: JUMPDEST
00003663: DUP4
00003664: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003679: AND
0000367a: PUSH4 0x23b872dd
0000367f: DUP5
00003680: DUP5
00003681: DUP5
00003682: PUSH1 0x40
00003684: MLOAD
00003685: DUP5
00003686: PUSH4 0xffffffff
0000368b: AND
0000368c: PUSH1 0xe0
0000368e: SHL
0000368f: DUP2
00003690: MSTORE
00003691: PUSH1 0x04
00003693: ADD
00003694: DUP1
00003695: DUP5
00003696: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000036ab: AND
000036ac: DUP2
000036ad: MSTORE
000036ae: PUSH1 0x20
000036b0: ADD
000036b1: DUP4
000036b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000036c7: AND
000036c8: DUP2
000036c9: MSTORE
000036ca: PUSH1 0x20
000036cc: ADD
000036cd: DUP3
000036ce: DUP2
000036cf: MSTORE
000036d0: PUSH1 0x20
000036d2: ADD
000036d3: SWAP4
000036d4: POP
000036d5: POP
000036d6: POP
000036d7: POP
000036d8: PUSH1 0x20
000036da: PUSH1 0x40
000036dc: MLOAD
000036dd: DUP1
000036de: DUP4
000036df: SUB
000036e0: DUP2
000036e1: PUSH1 0x00
000036e3: DUP8
000036e4: DUP1
000036e5: EXTCODESIZE
000036e6: ISZERO
000036e7: DUP1
000036e8: ISZERO
000036e9: PUSH2 0x36f1
000036ec: JUMPI
000036ed: PUSH1 0x00
000036ef: DUP1
000036f0: REVERT
000036f1: JUMPDEST
000036f2: POP
000036f3: GAS
000036f4: CALL
000036f5: ISZERO
000036f6: DUP1
000036f7: ISZERO
000036f8: PUSH2 0x3705
000036fb: JUMPI
000036fc: RETURNDATASIZE
000036fd: PUSH1 0x00
000036ff: DUP1
00003700: RETURNDATACOPY
00003701: RETURNDATASIZE
00003702: PUSH1 0x00
00003704: REVERT
00003705: JUMPDEST
00003706: POP
00003707: POP
00003708: POP
00003709: POP
0000370a: PUSH1 0x40
0000370c: MLOAD
0000370d: RETURNDATASIZE
0000370e: PUSH1 0x20
00003710: DUP2
00003711: LT
00003712: ISZERO
00003713: PUSH2 0x371b
00003716: JUMPI
00003717: PUSH1 0x00
00003719: DUP1
0000371a: REVERT
0000371b: JUMPDEST
0000371c: DUP2
0000371d: ADD
0000371e: SWAP1
0000371f: DUP1
00003720: DUP1
00003721: MLOAD
00003722: SWAP1
00003723: PUSH1 0x20
00003725: ADD
00003726: SWAP1
00003727: SWAP3
00003728: SWAP2
00003729: SWAP1
0000372a: POP
0000372b: POP
0000372c: POP
0000372d: PUSH2 0x3735
00003730: JUMPI
00003731: PUSH1 0x00
00003733: DUP1
00003734: REVERT
00003735: JUMPDEST
00003736: POP
00003737: POP
00003738: POP
00003739: POP
0000373a: JUMP
0000373b: INVALID
0000373c: COINBASE
0000373d: PUSH5 0x6472657373
00003743: GASPRICE
00003744: KECCAK256
00003745: PUSH22 0x6e61626c6520746f2073656e642076616c75652c2072
0000375c: PUSH6 0x63697069656e
00003763: PUSH21 0x206d61792068617665207265766572746564526571
00003779: PUSH22 0x657374656420616d6f756e74206f6620746f6b656e73
00003790: KECCAK256
00003791: PUSH6 0x786365656465
00003798: PUSH5 0x20616c6c6f
0000379e: PUSH24 0x656420706f7274696f6e4e6f7420656e6f75676820746f6b
000037b7: PUSH6 0x6e7320696e20
000037be: PUSH21 0x686520636f6e7472616374436f6e74726163742069
000037d4: PUSH15 0x7374616e63652068617320616c7265
000037e4: PUSH2 0x6479
000037e7: KECCAK256
000037e8: PUSH3 0x65656e
000037ec: KECCAK256
000037ed: PUSH10 0x6e697469616c697a6564
000037f8: SLOAD
000037f9: PUSH9 0x657265206973206e6f
00003803: KECCAK256
00003804: PUSH2 0x7661
00003807: PUSH10 0x6c61626c652072657761
00003812: PUSH19 0x6420746f207769746864726177546865726520
00003826: PUSH10 0x73206e6f20617661696c
00003831: PUSH2 0x626c
00003834: PUSH6 0x204554482074
0000383b: PUSH16 0x207769746864726177a2646970667358
0000384c: UNKNOWN(0x22)
0000384d: SLT
0000384e: KECCAK256
0000384f: PUSH5 0x802609b5b6
00003855: UNKNOWN(0x4C)
00003856: ISZERO
00003857: SWAP12
00003858: SDIV
00003859: GASLIMIT
0000385a: UNKNOWN(0xDD)
0000385b: CALLER
0000385c: EQ
0000385d: XOR
0000385e: UNKNOWN(0xC0)
0000385f: BYTE
00003860: SWAP2
00003861: BYTE
00003862: CALLCODE
00003863: PUSH30

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high upgradeability detector Untrusted DELEGATECALL target reachable 55 no no
view
trace_id: 0x0159c8086574cda71a1a3102d0f9ed4c7bec8836d283c99f3611f048409bbcbc
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0x0159c8086574cda71a1a3102d0f9ed4c7bec8836d283c99f3611f048409bbcbc",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xeb85ed73",
            "selector": "0xeb85ed73",
            "calldata_variants": [
                "0xeb85ed73",
                "0xeb85ed730000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf435d2e5",
            "selector": "0xf435d2e5",
            "calldata_variants": [
                "0xf435d2e5",
                "0xf435d2e50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf887ea40",
            "selector": "0xf887ea40",
            "calldata_variants": [
                "0xf887ea40",
                "0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfd012664",
            "selector": "0xfd012664",
            "calldata_variants": [
                "0xfd012664",
                "0xfd0126640000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd49756e",
            "selector": "0xdd49756e",
            "calldata_variants": [
                "0xdd49756e",
                "0xdd49756e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd934e89",
            "selector": "0xdd934e89",
            "calldata_variants": [
                "0xdd934e89",
                "0xdd934e890000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 895,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [
        {
            "pc": 3243,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 7685,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 12108,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
high access_control codex Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract 85 no
view
evidence_json
{
    "evidence": "`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).",
    "locations": [
        "contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73",
        "contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80",
        "contracts/contracts/staking_contracts/AbstractStakingContract.sol:133",
        "contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"
    ],
    "recommendation": "Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.",
    "exploit_scenario": "1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract\u2019s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds)."
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb
call_targets: 0xb9a42d02300f71ca23a100864fef2d5f82f7f833
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xb9a42d02300f71ca23a100864fef2d5f82f7f833"
    ],
    "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": "0xeb85ed73",
            "selector": "0xeb85ed73",
            "calldata_variants": [
                "0xeb85ed73",
                "0xeb85ed730000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf435d2e5",
            "selector": "0xf435d2e5",
            "calldata_variants": [
                "0xf435d2e5",
                "0xf435d2e50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf887ea40",
            "selector": "0xf887ea40",
            "calldata_variants": [
                "0xf887ea40",
                "0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfd012664",
            "selector": "0xfd012664",
            "calldata_variants": [
                "0xfd012664",
                "0xfd0126640000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd49756e",
            "selector": "0xdd49756e",
            "calldata_variants": [
                "0xdd49756e",
                "0xdd49756e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd934e89",
            "selector": "0xdd934e89",
            "calldata_variants": [
                "0xdd934e89",
                "0xdd934e890000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5224,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5355,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8067,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 8,
    "guards_detected": [
        {
            "pc": 3243,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 7685,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 12108,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ],
    "untrusted_call_count": 7
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb
call_targets: 0xb9a42d02300f71ca23a100864fef2d5f82f7f833
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xb9a42d02300f71ca23a100864fef2d5f82f7f833"
    ],
    "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": "0xeb85ed73",
            "selector": "0xeb85ed73",
            "calldata_variants": [
                "0xeb85ed73",
                "0xeb85ed730000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf435d2e5",
            "selector": "0xf435d2e5",
            "calldata_variants": [
                "0xf435d2e5",
                "0xf435d2e50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf887ea40",
            "selector": "0xf887ea40",
            "calldata_variants": [
                "0xf887ea40",
                "0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfd012664",
            "selector": "0xfd012664",
            "calldata_variants": [
                "0xfd012664",
                "0xfd0126640000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd49756e",
            "selector": "0xdd49756e",
            "calldata_variants": [
                "0xdd49756e",
                "0xdd49756e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd934e89",
            "selector": "0xdd934e89",
            "calldata_variants": [
                "0xdd934e89",
                "0xdd934e890000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5224,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5355,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8067,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 8,
    "guards_detected": [
        {
            "pc": 3243,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 7685,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 12108,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ]
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 1
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 21
}
info other cast Heavy EXTCODE*/BALANCE usage 55 no
view
evidence_json
{
    "notes": "frequent external code or balance checks; may indicate introspection or validation logic",
    "ext_balance_count": 25
}