019bab3b-ac0d-70eb-9589-3835283d1f66
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 38695 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 38696 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 38697 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 38698 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 38699 | capability.graph | complete | 1 / 3 | 3 months ago |
| 38700 | detector.run | complete | 1 / 3 | 3 months ago |
| 38701 | validation.fork | complete | 1 / 3 | 3 months ago |
| 39138 | report.consolidate | complete | 1 / 6 | 3 months ago |
| 39139 | tool.slither | complete | 1 / 2 | 3 months ago |
{
"status": "not_proxy"
}
'forge clean' running (wd: /tmp/slither-harvljl4)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-harvljl4)
Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95):
External calls:
- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
State variables written after the call(s):
- withdrawnDividends[user] = _withdrawnAmount (contracts/DividendPayingToken.sol#91-92)
DividendPayingToken.withdrawnDividends (contracts/DividendPayingToken.sol#41-42) can be used in cross function reentrancies:
- DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95)
- DividendPayingToken.withdrawableDividendOf(address) (contracts/DividendPayingToken.sol#110-113)
- DividendPayingToken.withdrawnDividendOf(address) (contracts/DividendPayingToken.sol#118-120)
Reentrancy in FetchInuDividendTracker.process(uint256) (contracts/FetchInuDividendTracker.sol#156-201):
External calls:
- _processAccount(address(account)) (contracts/FetchInuDividendTracker.sol#184-185)
- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
State variables written after the call(s):
- lastProcessedIndex = _lastProcessedIndex (contracts/FetchInuDividendTracker.sol#196-198)
FetchInuDividendTracker.lastProcessedIndex (contracts/FetchInuDividendTracker.sol#10-11) can be used in cross function reentrancies:
- FetchInuDividendTracker._getAccount(address) (contracts/FetchInuDividendTracker.sol#46-88)
- FetchInuDividendTracker.getLastProcessedIndex() (contracts/FetchInuDividendTracker.sol#29-32)
- FetchInuDividendTracker.lastProcessedIndex (contracts/FetchInuDividendTracker.sol#10-11)
- FetchInuDividendTracker.process(uint256) (contracts/FetchInuDividendTracker.sol#156-201)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities
DividendPayingToken.constructor(string,string)._name (contracts/DividendPayingToken.sol#42) shadows:
- ERC20._name (contracts/ERC20.sol#40-41) (state variable)
DividendPayingToken.constructor(string,string)._symbol (contracts/DividendPayingToken.sol#42-46) shadows:
- ERC20._symbol (contracts/ERC20.sol#41-43) (state variable)
DividendPayingToken.dividendOf(address)._owner (contracts/DividendPayingToken.sol#102-103) shadows:
- Ownable._owner (contracts/Ownable.sol#7-8) (state variable)
DividendPayingToken.withdrawableDividendOf(address)._owner (contracts/DividendPayingToken.sol#110-111) shadows:
- Ownable._owner (contracts/Ownable.sol#7-8) (state variable)
DividendPayingToken.withdrawnDividendOf(address)._owner (contracts/DividendPayingToken.sol#118-119) shadows:
- Ownable._owner (contracts/Ownable.sol#7-8) (state variable)
DividendPayingToken.accumulativeDividendOf(address)._owner (contracts/DividendPayingToken.sol#128) shadows:
- Ownable._owner (contracts/Ownable.sol#7-8) (state variable)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing
DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95) has external calls inside a loop: (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
Calls stack containing the loop:
FetchInuDividendTracker.process(uint256)
FetchInuDividendTracker._processAccount(address)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop
Reentrancy in FetchInuDividendTracker._processAccount(address) (contracts/FetchInuDividendTracker.sol#148-154):
External calls:
- amount = _withdrawDividendOfUser(account) (contracts/FetchInuDividendTracker.sol#149-150)
- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
State variables written after the call(s):
- lastClaimTimes[account] = block.timestamp (contracts/FetchInuDividendTracker.sol#153)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2
Reentrancy in FetchInuDividendTracker.processAccount(address) (contracts/FetchInuDividendTracker.sol#139-148):
External calls:
- amount = _withdrawDividendOfUser(account) (contracts/FetchInuDividendTracker.sol#142-145)
- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
Event emitted after the call(s):
- Claim(account,amount) (contracts/FetchInuDividendTracker.sol#145-148)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95) tries to limit the gas of an external call that controls implicit decoding
(success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#return-bomb
FetchInuDividendTracker._getAccount(address) (contracts/FetchInuDividendTracker.sol#46-88) uses timestamp for comparisons
Dangerous comparisons:
- nextClaimTime > block.timestamp (contracts/FetchInuDividendTracker.sol#84-88)
FetchInuDividendTracker.canAutoClaim(uint256) (contracts/FetchInuDividendTracker.sol#201-213) uses timestamp for comparisons
Dangerous comparisons:
- lastClaimTime > block.timestamp (contracts/FetchInuDividendTracker.sol#207)
- block.timestamp.sub(lastClaimTime) >= claimWait (contracts/FetchInuDividendTracker.sol#209-212)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp
Context._msgData() (contracts/Context.sol#17-22) is never used and should be removed
ERC20._transfer(address,address,uint256) (contracts/ERC20.sol#203-221) is never used and should be removed
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code
Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- FullInlinerNonExpressionSplitArgumentEvaluationOrder
- MissingSideEffectsOnSelectorAccess
- AbiReencodingHeadOverflowWithStaticArrayCleanup
- DirtyBytesArrayToStorage
- DataLocationChangeInInternalOverride
- NestedCalldataArrayAbiReencodingSizeValidation
- SignedImmutables
- ABIDecodeTwoDimensionalArrayMemory
- KeccakCaching.
It is used by:
- ^0.8.0 (contracts/Context.sol#2-3)
- ^0.8.0 (contracts/DividendPayingToken.sol#2-3)
- ^0.8.0 (contracts/ERC20.sol#2-3)
- ^0.8.0 (contracts/FetchInuDividendTracker.sol#1-2)
- ^0.8.0 (contracts/IDividendPayingToken.sol#2-3)
- ^0.8.0 (contracts/IDividendPayingTokenOptional.sol#2-3)
- ^0.8.0 (contracts/IERC20.sol#2-3)
- ^0.8.0 (contracts/IERC20Metadata.sol#2-3)
- ^0.8.0 (contracts/IterableMapping.sol#1-2)
- ^0.8.0 (contracts/Ownable.sol#1)
- ^0.8.0 (contracts/SafeMath.sol#2-3)
- ^0.8.0 (contracts/SafeMathInt.sol#24-26)
- ^0.8.0 (contracts/SafeMathUint.sol#2-3)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95):
- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Parameter DividendPayingToken.dividendOf(address)._owner (contracts/DividendPayingToken.sol#102-103) is not in mixedCase
Parameter DividendPayingToken.withdrawableDividendOf(address)._owner (contracts/DividendPayingToken.sol#110-111) is not in mixedCase
Parameter DividendPayingToken.withdrawnDividendOf(address)._owner (contracts/DividendPayingToken.sol#118-119) is not in mixedCase
Parameter DividendPayingToken.accumulativeDividendOf(address)._owner (contracts/DividendPayingToken.sol#128) is not in mixedCase
Constant DividendPayingToken.magnitude (contracts/DividendPayingToken.sol#25-26) is not in UPPER_CASE_WITH_UNDERSCORES
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
Redundant expression "this (contracts/Context.sol#20)" inContext (contracts/Context.sol#13-22)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements
DividendPayingToken.lastAmount (contracts/DividendPayingToken.sol#27-28) is never used in FetchInuDividendTracker (contracts/FetchInuDividendTracker.sol#4-213)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable
DividendPayingToken.lastAmount (contracts/DividendPayingToken.sol#27-28) should be constant
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant
. analyzed (13 contracts with 100 detectors), 26 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.8.0",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.8.0",
"install_stderr": null,
"install_stdout": "Version '0.8.0' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-harvljl4 --allow-paths /tmp/slither-harvljl4,/tmp/slither-harvljl4/lib,/tmp/slither-harvljl4/src",
"remappings": [],
"source_files": [
"contracts/FetchInuDividendTracker.sol",
"contracts/DividendPayingToken.sol",
"contracts/IterableMapping.sol",
"contracts/ERC20.sol",
"contracts/Ownable.sol",
"contracts/SafeMath.sol",
"contracts/SafeMathUint.sol",
"contracts/SafeMathInt.sol",
"contracts/IDividendPayingToken.sol",
"contracts/IDividendPayingTokenOptional.sol",
"contracts/IERC20.sol",
"contracts/IERC20Metadata.sol",
"contracts/Context.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 26,
"workspace_hash": "74d2daf76200bb7d56451d529d9f8aa9f65577ab2506f269dff0bf87098b456c",
"duration_seconds": 1.0371882915496826,
"solc_version_requested": "0.8.0"
}
{"no_findings":false,"summary":"Main risks are external-call ordering in dividend withdrawals, admin-controlled dividend share adjustments, and the fixed gas stipend that can lock dividends for contract wallets.","findings":[{"severity":"low","category":"reentrancy","title":"External ETH transfer before state update can allow reentrant double-claims","exploit_scenario":"A malicious dividend recipient contract can use its fallback to reenter `withdrawDividend` (or a future refactor that increases the call gas) before `withdrawnDividends` is updated, letting it withdraw the same dividends multiple times and drain the pool.","recommendation":"Apply checks-effects-interactions: update `withdrawnDividends` before the external call and revert on failure, or add a reentrancy guard around dividend withdrawals.","evidence":"`_withdrawDividendOfUser` sends ETH to `user` and only updates `withdrawnDividends` after the call succeeds.","locations":["contracts/DividendPayingToken.sol:87","contracts/DividendPayingToken.sol:90","contracts/DividendPayingToken.sol:91","contracts/DividendPayingToken.sol:95"]},{"severity":"low","category":"access_control","title":"Owner can arbitrarily change dividend shares and exclude accounts","exploit_scenario":"If the owner is compromised or malicious, it can call `setBalance` with arbitrary values or `excludeFromDividends` to remove accounts, diverting future dividends or blocking claims; since `withdrawDividend` is disabled, users cannot independently withdraw.","recommendation":"Restrict `setBalance` to a trusted token contract that enforces balance correctness, or add validation against the underlying token balance. Consider a timelock/multisig for owner actions and/or enable user-initiated withdrawals.","evidence":"`setBalance` accepts arbitrary `newBalance` under `onlyOwner`, and `excludeFromDividends` can remove accounts while `withdrawDividend` is disabled.","locations":["contracts/FetchInuDividendTracker.sol:28","contracts/FetchInuDividendTracker.sol:112","contracts/FetchInuDividendTracker.sol:132"]},{"severity":"low","category":"other","title":"Fixed 3000 gas stipend can permanently lock dividends for contract wallets","exploit_scenario":"If a holder is a contract whose fallback requires more than 3000 gas, every dividend payout attempt will fail and remain stuck. `process()` will keep retrying the same accounts, wasting gas and delaying other claims, and users cannot self-withdraw because `withdrawDividend` is disabled.","recommendation":"Remove the fixed 3000 gas stipend and rely on reentrancy protection, or allow users to call a withdrawal function that forwards sufficient gas. Optionally track repeated failures and skip them to avoid gas griefing.","evidence":"Dividend payouts use `call{gas:3000}` and `withdrawDividend` is disabled in the tracker, while `process` routes through `_withdrawDividendOfUser`.","locations":["contracts/DividendPayingToken.sol:91","contracts/FetchInuDividendTracker.sol:28","contracts/FetchInuDividendTracker.sol:153"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-fp25rhuj
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019babcb-abb1-7b21-a6ba-3f75815ebff3
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Reading AUDIT_BUNDLE file**
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-fp25rhuj succeeded in 6ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Context.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
thinking
**Ensuring complete file reading**
I need to confirm I have the full AUDIT_BUNDLE.txt contents since the previous output was truncated mid-ERC20. I'll check file boundaries using ripgrep and then read the file in segments with sed to avoid truncation, making sure I get the entire content before moving forward.
exec
/bin/bash -lc 'rg -n "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-fp25rhuj succeeded in 6ms:
5:FILE: contracts/Context.sol
33:FILE: contracts/DividendPayingToken.sol
219:FILE: contracts/ERC20.sol
546:FILE: contracts/FetchInuDividendTracker.sol
770:FILE: contracts/IDividendPayingToken.sol
815:FILE: contracts/IDividendPayingTokenOptional.sol
844:FILE: contracts/IERC20.sol
929:FILE: contracts/IERC20Metadata.sol
960:FILE: contracts/IterableMapping.sol
1027:FILE: contracts/Ownable.sol
1076:FILE: contracts/SafeMath.sol
1226:FILE: contracts/SafeMathInt.sol
1322:FILE: contracts/SafeMathUint.sol
thinking
**Examining ERC20 and Dividend Tracker segments**
exec
/bin/bash -lc "sed -n '219,545p' AUDIT_BUNDLE.txt" in /tmp/codex-fp25rhuj succeeded in 11ms:
FILE: contracts/ERC20.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
import "./SafeMath.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
thinking
**Examining FetchInuDividendTracker file**
exec
/bin/bash -lc "sed -n '546,769p' AUDIT_BUNDLE.txt" in /tmp/codex-fp25rhuj succeeded in 9ms:
FILE: contracts/FetchInuDividendTracker.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./DividendPayingToken.sol";
import "./IterableMapping.sol";
contract FetchInuDividendTracker is DividendPayingToken {
using SafeMath for uint256;
using SafeMathInt for int256;
using IterableMapping for IterableMapping.Map;
IterableMapping.Map private tokenHoldersMap;
uint256 public lastProcessedIndex;
uint256 public claimWait;
uint256 public immutable minimumTokenBalanceForDividends;
mapping (address => bool) public isExcludedFromDividends;
mapping (address => uint256) public lastClaimTimes;
event ExcludeFromDividends(address indexed account, bool exclude);
thinking
**Analyzing dividend contract risks and access controls**
I'm reviewing DividendPayingToken and FetchInuDividendTracker for reentrancy risks, gas stipend issues, and owner privileges. The 3000 gas low-level call might limit reentrancy but isn't foolproof. Owner control over balance setting and exclusion enables centralized dividend manipulation, which is expected but a risk to note. Withdrawal methods can fail for contracts needing more gas, possibly causing locked dividends, yet no clear exploit arises. Overall, this audit spotlights nuanced trade-offs between gas limits, reentrancy, and admin access.
thinking
**Evaluating reentrancy and access control concerns in dividend tracker**
I'm digging deeper into DividendPayingToken and FetchInuDividendTracker, confirming that the owner’s ability to manipulate balances is an expected centralization risk, not a direct vulnerability. The reused external call before state update in dividend withdrawal remains a potential medium-risk reentrancy point despite gas limits, and relying on gas stipend for protection is brittle. I also note possible denial-of-service if contracts require more gas to accept dividends, causing stalled payouts and wasted processing gas. Overall, reentrancy and admin control are primary concerns to highlight.
thinking
**Listing files with ripgrep**
exec
/bin/bash -lc 'rg --files' in /tmp/codex-fp25rhuj succeeded in 11ms:
codex-output-schema.json
AUDIT_BUNDLE.txt
contracts/IDividendPayingTokenOptional.sol
contracts/SafeMath.sol
contracts/Ownable.sol
contracts/SafeMathUint.sol
contracts/IERC20Metadata.sol
contracts/SafeMathInt.sol
contracts/IDividendPayingToken.sol
contracts/DividendPayingToken.sol
contracts/Context.sol
contracts/FetchInuDividendTracker.sol
contracts/IERC20.sol
contracts/IterableMapping.sol
contracts/ERC20.sol
thinking
**Checking line numbers with nl**
exec
/bin/bash -lc "nl -ba contracts/DividendPayingToken.sol | sed -n '50,200p'" in /tmp/codex-fp25rhuj succeeded in 10ms:
50 receive() external payable {
51 distributeDividends();
52 }
53
54 /// @notice Distributes ether to token holders as dividends.
55 /// @dev It reverts if the total supply of tokens is 0.
56 /// It emits the `DividendsDistributed` event if the amount of received ether is greater than 0.
57 /// About undistributed ether:
58 /// In each distribution, there is a small amount of ether not distributed,
59 /// the magnified amount of which is
60 /// `(msg.value * magnitude) % totalSupply()`.
61 /// With a well-chosen `magnitude`, the amount of undistributed ether
62 /// (de-magnified) in a distribution can be less than 1 wei.
63 /// We can actually keep track of the undistributed ether in a distribution
64 /// and try to distribute it in the next distribution,
65 /// but keeping track of such data on-chain costs much more than
66 /// the saved ether, so we don't do that.
67 function distributeDividends() public override payable {
68 require(totalSupply() > 0,"dividened totalsupply error");
69 if (msg.value > 0) {
thinking
**Checking owner functions in FetchInuDividendTracker**
exec
/bin/bash -lc 'nl -ba contracts/FetchInuDividendTracker.sol' in /tmp/codex-fp25rhuj succeeded in 7ms:
1 // SPDX-License-Identifier: MIT
2 pragma solidity ^0.8.0;
3 import "./DividendPayingToken.sol";
4 import "./IterableMapping.sol";
5 contract FetchInuDividendTracker is DividendPayingToken {
6 using SafeMath for uint256;
7 using SafeMathInt for int256;
8 using IterableMapping for IterableMapping.Map;
9
10 IterableMapping.Map private tokenHoldersMap;
11 uint256 public lastProcessedIndex;
12 uint256 public claimWait;
13 uint256 public immutable minimumTokenBalanceForDividends;
14
15 mapping (address => bool) public isExcludedFromDividends;
16 mapping (address => uint256) public lastClaimTimes;
17
18 event ExcludeFromDividends(address indexed account, bool exclude);
19 event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
20 event Claim(address indexed account, uint256 amount);
thinking
**Summarizing security audit findings**
I'm identifying key security findings focused on reentrancy risks due to external calls before state updates, ownership centralization allowing arbitrary balance manipulation, and the implications of limited gas stipends potentially locking dividends for contract holders. I’m preparing clear exploit scenarios, severity assessments, and recommendations linked to specific code locations to provide a concise audit summary.
thinking
**Detailing external call pattern issue**
This finding highlights how the fixed 3000 gas stipend in external calls can block dividends for contract wallets needing more gas, causing repeated failed attempts and wasting processing gas. I’m focusing on clear exploit scenarios, recommending removing the gas limit or enabling user withdrawals, and pinpointing relevant code lines to support the analysis.
codex
{"no_findings":false,"summary":"Main risks are external-call ordering in dividend withdrawals, admin-controlled dividend share adjustments, and the fixed gas stipend that can lock dividends for contract wallets.","findings":[{"severity":"low","category":"reentrancy","title":"External ETH transfer before state update can allow reentrant double-claims","exploit_scenario":"A malicious dividend recipient contract can use its fallback to reenter `withdrawDividend` (or a future refactor that increases the call gas) before `withdrawnDividends` is updated, letting it withdraw the same dividends multiple times and drain the pool.","recommendation":"Apply checks-effects-interactions: update `withdrawnDividends` before the external call and revert on failure, or add a reentrancy guard around dividend withdrawals.","evidence":"`_withdrawDividendOfUser` sends ETH to `user` and only updates `withdrawnDividends` after the call succeeds.","locations":["contracts/DividendPayingToken.sol:87","contracts/DividendPayingToken.sol:90","contracts/DividendPayingToken.sol:91","contracts/DividendPayingToken.sol:95"]},{"severity":"low","category":"access_control","title":"Owner can arbitrarily change dividend shares and exclude accounts","exploit_scenario":"If the owner is compromised or malicious, it can call `setBalance` with arbitrary values or `excludeFromDividends` to remove accounts, diverting future dividends or blocking claims; since `withdrawDividend` is disabled, users cannot independently withdraw.","recommendation":"Restrict `setBalance` to a trusted token contract that enforces balance correctness, or add validation against the underlying token balance. Consider a timelock/multisig for owner actions and/or enable user-initiated withdrawals.","evidence":"`setBalance` accepts arbitrary `newBalance` under `onlyOwner`, and `excludeFromDividends` can remove accounts while `withdrawDividend` is disabled.","locations":["contracts/FetchInuDividendTracker.sol:28","contracts/FetchInuDividendTracker.sol:112","contracts/FetchInuDividendTracker.sol:132"]},{"severity":"low","category":"other","title":"Fixed 3000 gas stipend can permanently lock dividends for contract wallets","exploit_scenario":"If a holder is a contract whose fallback requires more than 3000 gas, every dividend payout attempt will fail and remain stuck. `process()` will keep retrying the same accounts, wasting gas and delaying other claims, and users cannot self-withdraw because `withdrawDividend` is disabled.","recommendation":"Remove the fixed 3000 gas stipend and rely on reentrancy protection, or allow users to call a withdrawal function that forwards sufficient gas. Optionally track repeated failures and skip them to avoid gas griefing.","evidence":"Dividend payouts use `call{gas:3000}` and `withdrawDividend` is disabled in the tracker, while `process` routes through `_withdrawDividendOfUser`.","locations":["contracts/DividendPayingToken.sol:91","contracts/FetchInuDividendTracker.sol:28","contracts/FetchInuDividendTracker.sol:153"]}]}
tokens used
68,676
{
"codex": {
"ran_at": "2026-01-11T06:47:28.873622+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 13,
"import_count": 12,
"first_party_contracts_count": 13
},
"summary": "Main risks are external-call ordering in dividend withdrawals, admin-controlled dividend share adjustments, and the fixed gas stipend that can lock dividends for contract wallets.",
"raw_final": {
"summary": "Main risks are external-call ordering in dividend withdrawals, admin-controlled dividend share adjustments, and the fixed gas stipend that can lock dividends for contract wallets.",
"findings": [
{
"title": "External ETH transfer before state update can allow reentrant double-claims",
"category": "reentrancy",
"evidence": "`_withdrawDividendOfUser` sends ETH to `user` and only updates `withdrawnDividends` after the call succeeds.",
"severity": "low",
"locations": [
"contracts/DividendPayingToken.sol:87",
"contracts/DividendPayingToken.sol:90",
"contracts/DividendPayingToken.sol:91",
"contracts/DividendPayingToken.sol:95"
],
"recommendation": "Apply checks-effects-interactions: update `withdrawnDividends` before the external call and revert on failure, or add a reentrancy guard around dividend withdrawals.",
"exploit_scenario": "A malicious dividend recipient contract can use its fallback to reenter `withdrawDividend` (or a future refactor that increases the call gas) before `withdrawnDividends` is updated, letting it withdraw the same dividends multiple times and drain the pool."
},
{
"title": "Owner can arbitrarily change dividend shares and exclude accounts",
"category": "access_control",
"evidence": "`setBalance` accepts arbitrary `newBalance` under `onlyOwner`, and `excludeFromDividends` can remove accounts while `withdrawDividend` is disabled.",
"severity": "low",
"locations": [
"contracts/FetchInuDividendTracker.sol:28",
"contracts/FetchInuDividendTracker.sol:112",
"contracts/FetchInuDividendTracker.sol:132"
],
"recommendation": "Restrict `setBalance` to a trusted token contract that enforces balance correctness, or add validation against the underlying token balance. Consider a timelock/multisig for owner actions and/or enable user-initiated withdrawals.",
"exploit_scenario": "If the owner is compromised or malicious, it can call `setBalance` with arbitrary values or `excludeFromDividends` to remove accounts, diverting future dividends or blocking claims; since `withdrawDividend` is disabled, users cannot independently withdraw."
},
{
"title": "Fixed 3000 gas stipend can permanently lock dividends for contract wallets",
"category": "other",
"evidence": "Dividend payouts use `call{gas:3000}` and `withdrawDividend` is disabled in the tracker, while `process` routes through `_withdrawDividendOfUser`.",
"severity": "low",
"locations": [
"contracts/DividendPayingToken.sol:91",
"contracts/FetchInuDividendTracker.sol:28",
"contracts/FetchInuDividendTracker.sol:153"
],
"recommendation": "Remove the fixed 3000 gas stipend and rely on reentrancy protection, or allow users to call a withdrawal function that forwards sufficient gas. Optionally track repeated failures and skip them to avoid gas griefing.",
"exploit_scenario": "If a holder is a contract whose fallback requires more than 3000 gas, every dividend payout attempt will fail and remain stuck. `process()` will keep retrying the same accounts, wasting gas and delaying other claims, and users cannot self-withdraw because `withdrawDividend` is disabled."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0208 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x807ab4f7 00000019: GT 0000001a: PUSH2 0x0118 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xbe10b614 00000024: GT 00000025: PUSH2 0x00a0 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xe7841ec0 0000002f: GT 00000030: PUSH2 0x006f 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xe7841ec0 0000003a: EQ 0000003b: PUSH2 0x05a9 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe98030c7 00000045: EQ 00000046: PUSH2 0x05be 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x05de 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xfbcbc0f1 0000005b: EQ 0000005c: PUSH2 0x05fe 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xffb2c479 00000066: EQ 00000067: PUSH2 0x061e 0000006a: JUMPI 0000006b: PUSH2 0x0217 0000006e: JUMP 0000006f: JUMPDEST 00000070: DUP1 00000071: PUSH4 0xbe10b614 00000076: EQ 00000077: PUSH2 0x0534 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xc705c569 00000081: EQ 00000082: PUSH2 0x0549 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xdd62ed3e 0000008c: EQ 0000008d: PUSH2 0x0569 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0xe30443bc 00000097: EQ 00000098: PUSH2 0x0589 0000009b: JUMPI 0000009c: PUSH2 0x0217 0000009f: JUMP 000000a0: JUMPDEST 000000a1: DUP1 000000a2: PUSH4 0x95d89b41 000000a7: GT 000000a8: PUSH2 0x00e7 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0x95d89b41 000000b2: EQ 000000b3: PUSH2 0x049f 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0xa457c2d7 000000bd: EQ 000000be: PUSH2 0x04b4 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0xa8b9d240 000000c8: EQ 000000c9: PUSH2 0x04d4 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0xa9059cbb 000000d3: EQ 000000d4: PUSH2 0x04f4 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0xaafd847a 000000de: EQ 000000df: PUSH2 0x0514 000000e2: JUMPI 000000e3: PUSH2 0x0217 000000e6: JUMP 000000e7: JUMPDEST 000000e8: DUP1 000000e9: PUSH4 0x807ab4f7 000000ee: EQ 000000ef: PUSH2 0x0428 000000f2: JUMPI 000000f3: DUP1 000000f4: PUSH4 0x85a6b3ae 000000f9: EQ 000000fa: PUSH2 0x0448 000000fd: JUMPI 000000fe: DUP1 000000ff: PUSH4 0x8da5cb5b 00000104: EQ 00000105: PUSH2 0x045d 00000108: JUMPI 00000109: DUP1 0000010a: PUSH4 0x91b89fba 0000010f: EQ 00000110: PUSH2 0x047f 00000113: JUMPI 00000114: PUSH2 0x0217 00000117: JUMP 00000118: JUMPDEST 00000119: DUP1 0000011a: PUSH4 0x27ce0147 0000011f: GT 00000120: PUSH2 0x019b 00000123: JUMPI 00000124: DUP1 00000125: PUSH4 0x42966c68 0000012a: GT 0000012b: PUSH2 0x016a 0000012e: JUMPI 0000012f: DUP1 00000130: PUSH4 0x42966c68 00000135: EQ 00000136: PUSH2 0x038a 00000139: JUMPI 0000013a: DUP1 0000013b: PUSH4 0x5183d6fd 00000140: EQ 00000141: PUSH2 0x03aa 00000144: JUMPI 00000145: DUP1 00000146: PUSH4 0x6a474002 0000014b: EQ 0000014c: PUSH2 0x03de 0000014f: JUMPI 00000150: DUP1 00000151: PUSH4 0x6f2789ec 00000156: EQ 00000157: PUSH2 0x03f3 0000015a: JUMPI 0000015b: DUP1 0000015c: PUSH4 0x70a08231 00000161: EQ 00000162: PUSH2 0x0408 00000165: JUMPI 00000166: PUSH2 0x0217 00000169: JUMP 0000016a: JUMPDEST 0000016b: DUP1 0000016c: PUSH4 0x27ce0147 00000171: EQ 00000172: PUSH2 0x0313 00000175: JUMPI 00000176: DUP1 00000177: PUSH4 0x3009a609 0000017c: EQ 0000017d: PUSH2 0x0333 00000180: JUMPI 00000181: DUP1 00000182: PUSH4 0x313ce567 00000187: EQ 00000188: PUSH2 0x0348 0000018b: JUMPI 0000018c: DUP1 0000018d: PUSH4 0x39509351 00000192: EQ 00000193: PUSH2 0x036a 00000196: JUMPI 00000197: PUSH2 0x0217 0000019a: JUMP 0000019b: JUMPDEST 0000019c: DUP1 0000019d: PUSH4 0x09bbedde 000001a2: GT 000001a3: PUSH2 0x01d7 000001a6: JUMPI 000001a7: DUP1 000001a8: PUSH4 0x09bbedde 000001ad: EQ 000001ae: PUSH2 0x029c 000001b1: JUMPI 000001b2: DUP1 000001b3: PUSH4 0x18160ddd 000001b8: EQ 000001b9: PUSH2 0x02be 000001bc: JUMPI 000001bd: DUP1 000001be: PUSH4 0x226cfa3d 000001c3: EQ 000001c4: PUSH2 0x02d3 000001c7: JUMPI 000001c8: DUP1 000001c9: PUSH4 0x23b872dd 000001ce: EQ 000001cf: PUSH2 0x02f3 000001d2: JUMPI 000001d3: PUSH2 0x0217 000001d6: JUMP 000001d7: JUMPDEST 000001d8: DUP1 000001d9: PUSH4 0x03c83302 000001de: EQ 000001df: PUSH2 0x021c 000001e2: JUMPI 000001e3: DUP1 000001e4: PUSH4 0x0483f7a0 000001e9: EQ 000001ea: PUSH2 0x0224 000001ed: JUMPI 000001ee: DUP1 000001ef: PUSH4 0x06fdde03 000001f4: EQ 000001f5: PUSH2 0x0244 000001f8: JUMPI 000001f9: DUP1 000001fa: PUSH4 0x095ea7b3 000001ff: EQ 00000200: PUSH2 0x026f 00000203: JUMPI 00000204: PUSH2 0x0217 00000207: JUMP 00000208: JUMPDEST 00000209: CALLDATASIZE 0000020a: PUSH2 0x0217 0000020d: JUMPI 0000020e: PUSH2 0x0215 00000211: PUSH2 0x064d 00000214: JUMP 00000215: JUMPDEST 00000216: STOP 00000217: JUMPDEST 00000218: PUSH1 0x00 0000021a: DUP1 0000021b: REVERT 0000021c: JUMPDEST 0000021d: PUSH2 0x0215 00000220: PUSH2 0x064d 00000223: JUMP 00000224: JUMPDEST 00000225: CALLVALUE 00000226: DUP1 00000227: ISZERO 00000228: PUSH2 0x0230 0000022b: JUMPI 0000022c: PUSH1 0x00 0000022e: DUP1 0000022f: REVERT 00000230: JUMPDEST 00000231: POP 00000232: PUSH2 0x0215 00000235: PUSH2 0x023f 00000238: CALLDATASIZE 00000239: PUSH1 0x04 0000023b: PUSH2 0x1c3c 0000023e: JUMP 0000023f: JUMPDEST 00000240: PUSH2 0x070b 00000243: JUMP 00000244: JUMPDEST 00000245: CALLVALUE 00000246: DUP1 00000247: ISZERO 00000248: PUSH2 0x0250 0000024b: JUMPI 0000024c: PUSH1 0x00 0000024e: DUP1 0000024f: REVERT 00000250: JUMPDEST 00000251: POP 00000252: PUSH2 0x0259 00000255: PUSH2 0x0965 00000258: JUMP 00000259: JUMPDEST 0000025a: PUSH1 0x40 0000025c: MLOAD 0000025d: PUSH2 0x0266 00000260: SWAP2 00000261: SWAP1 00000262: PUSH2 0x1d12 00000265: JUMP 00000266: JUMPDEST 00000267: PUSH1 0x40 00000269: MLOAD 0000026a: DUP1 0000026b: SWAP2 0000026c: SUB 0000026d: SWAP1 0000026e: RETURN 0000026f: JUMPDEST 00000270: CALLVALUE 00000271: DUP1 00000272: ISZERO 00000273: PUSH2 0x027b 00000276: JUMPI 00000277: PUSH1 0x00 00000279: DUP1 0000027a: REVERT 0000027b: JUMPDEST 0000027c: POP 0000027d: PUSH2 0x028f 00000280: PUSH2 0x028a 00000283: CALLDATASIZE 00000284: PUSH1 0x04 00000286: PUSH2 0x1c6d 00000289: JUMP 0000028a: JUMPDEST 0000028b: PUSH2 0x09f7 0000028e: JUMP 0000028f: JUMPDEST 00000290: PUSH1 0x40 00000292: MLOAD 00000293: PUSH2 0x0266 00000296: SWAP2 00000297: SWAP1 00000298: PUSH2 0x1d07 0000029b: JUMP 0000029c: JUMPDEST 0000029d: CALLVALUE 0000029e: DUP1 0000029f: ISZERO 000002a0: PUSH2 0x02a8 000002a3: JUMPI 000002a4: PUSH1 0x00 000002a6: DUP1 000002a7: REVERT 000002a8: JUMPDEST 000002a9: POP 000002aa: PUSH2 0x02b1 000002ad: PUSH2 0x0a15 000002b0: JUMP 000002b1: JUMPDEST 000002b2: PUSH1 0x40 000002b4: MLOAD 000002b5: PUSH2 0x0266 000002b8: SWAP2 000002b9: SWAP1 000002ba: PUSH2 0x216d 000002bd: JUMP 000002be: JUMPDEST 000002bf: CALLVALUE 000002c0: DUP1 000002c1: ISZERO 000002c2: PUSH2 0x02ca 000002c5: JUMPI 000002c6: PUSH1 0x00 000002c8: DUP1 000002c9: REVERT 000002ca: JUMPDEST 000002cb: POP 000002cc: PUSH2 0x02b1 000002cf: PUSH2 0x0a1b 000002d2: JUMP 000002d3: JUMPDEST 000002d4: CALLVALUE 000002d5: DUP1 000002d6: ISZERO 000002d7: PUSH2 0x02df 000002da: JUMPI 000002db: PUSH1 0x00 000002dd: DUP1 000002de: REVERT 000002df: JUMPDEST 000002e0: POP 000002e1: PUSH2 0x02b1 000002e4: PUSH2 0x02ee 000002e7: CALLDATASIZE 000002e8: PUSH1 0x04 000002ea: PUSH2 0x1b61 000002ed: JUMP 000002ee: JUMPDEST 000002ef: PUSH2 0x0a21 000002f2: JUMP 000002f3: JUMPDEST 000002f4: CALLVALUE 000002f5: DUP1 000002f6: ISZERO 000002f7: PUSH2 0x02ff 000002fa: JUMPI 000002fb: PUSH1 0x00 000002fd: DUP1 000002fe: REVERT 000002ff: JUMPDEST 00000300: POP 00000301: PUSH2 0x028f 00000304: PUSH2 0x030e 00000307: CALLDATASIZE 00000308: PUSH1 0x04 0000030a: PUSH2 0x1bfc 0000030d: JUMP 0000030e: JUMPDEST 0000030f: PUSH2 0x0a33 00000312: JUMP 00000313: JUMPDEST 00000314: CALLVALUE 00000315: DUP1 00000316: ISZERO 00000317: PUSH2 0x031f 0000031a: JUMPI 0000031b: PUSH1 0x00 0000031d: DUP1 0000031e: REVERT 0000031f: JUMPDEST 00000320: POP 00000321: PUSH2 0x02b1 00000324: PUSH2 0x032e 00000327: CALLDATASIZE 00000328: PUSH1 0x04 0000032a: PUSH2 0x1b61 0000032d: JUMP 0000032e: JUMPDEST 0000032f: PUSH2 0x0aba 00000332: JUMP 00000333: JUMPDEST 00000334: CALLVALUE 00000335: DUP1 00000336: ISZERO 00000337: PUSH2 0x033f 0000033a: JUMPI 0000033b: PUSH1 0x00 0000033d: DUP1 0000033e: REVERT 0000033f: JUMPDEST 00000340: POP 00000341: PUSH2 0x02b1 00000344: PUSH2 0x0b1e 00000347: JUMP 00000348: JUMPDEST 00000349: CALLVALUE 0000034a: DUP1 0000034b: ISZERO 0000034c: PUSH2 0x0354 0000034f: JUMPI 00000350: PUSH1 0x00 00000352: DUP1 00000353: REVERT 00000354: JUMPDEST 00000355: POP 00000356: PUSH2 0x035d 00000359: PUSH2 0x0b24 0000035c: JUMP 0000035d: JUMPDEST 0000035e: PUSH1 0x40 00000360: MLOAD 00000361: PUSH2 0x0266 00000364: SWAP2 00000365: SWAP1 00000366: PUSH2 0x21d0 00000369: JUMP 0000036a: JUMPDEST 0000036b: CALLVALUE 0000036c: DUP1 0000036d: ISZERO 0000036e: PUSH2 0x0376 00000371: JUMPI 00000372: PUSH1 0x00 00000374: DUP1 00000375: REVERT 00000376: JUMPDEST 00000377: POP 00000378: PUSH2 0x028f 0000037b: PUSH2 0x0385 0000037e: CALLDATASIZE 0000037f: PUSH1 0x04 00000381: PUSH2 0x1c6d 00000384: JUMP 00000385: JUMPDEST 00000386: PUSH2 0x0b29 00000389: JUMP 0000038a: JUMPDEST 0000038b: CALLVALUE 0000038c: DUP1 0000038d: ISZERO 0000038e: PUSH2 0x0396 00000391: JUMPI 00000392: PUSH1 0x00 00000394: DUP1 00000395: REVERT 00000396: JUMPDEST 00000397: POP 00000398: PUSH2 0x0215 0000039b: PUSH2 0x03a5 0000039e: CALLDATASIZE 0000039f: PUSH1 0x04 000003a1: PUSH2 0x1c97 000003a4: JUMP 000003a5: JUMPDEST 000003a6: PUSH2 0x0b77 000003a9: JUMP 000003aa: JUMPDEST 000003ab: CALLVALUE 000003ac: DUP1 000003ad: ISZERO 000003ae: PUSH2 0x03b6 000003b1: JUMPI 000003b2: PUSH1 0x00 000003b4: DUP1 000003b5: REVERT 000003b6: JUMPDEST 000003b7: POP 000003b8: PUSH2 0x03ca 000003bb: PUSH2 0x03c5 000003be: CALLDATASIZE 000003bf: PUSH1 0x04 000003c1: PUSH2 0x1c97 000003c4: JUMP 000003c5: JUMPDEST 000003c6: PUSH2 0x0b92 000003c9: JUMP 000003ca: JUMPDEST 000003cb: PUSH1 0x40 000003cd: MLOAD 000003ce: PUSH2 0x0266 000003d1: SWAP9 000003d2: SWAP8 000003d3: SWAP7 000003d4: SWAP6 000003d5: SWAP5 000003d6: SWAP4 000003d7: SWAP3 000003d8: SWAP2 000003d9: SWAP1 000003da: PUSH2 0x1cc6 000003dd: JUMP 000003de: JUMPDEST 000003df: CALLVALUE 000003e0: DUP1 000003e1: ISZERO 000003e2: PUSH2 0x03ea 000003e5: JUMPI 000003e6: PUSH1 0x00 000003e8: DUP1 000003e9: REVERT 000003ea: JUMPDEST 000003eb: POP 000003ec: PUSH2 0x0215 000003ef: PUSH2 0x0d02 000003f2: JUMP 000003f3: JUMPDEST 000003f4: CALLVALUE 000003f5: DUP1 000003f6: ISZERO 000003f7: PUSH2 0x03ff 000003fa: JUMPI 000003fb: PUSH1 0x00 000003fd: DUP1 000003fe: REVERT 000003ff: JUMPDEST 00000400: POP 00000401: PUSH2 0x02b1 00000404: PUSH2 0x0d1a 00000407: JUMP 00000408: JUMPDEST 00000409: CALLVALUE 0000040a: DUP1 0000040b: ISZERO 0000040c: PUSH2 0x0414 0000040f: JUMPI 00000410: PUSH1 0x00 00000412: DUP1 00000413: REVERT 00000414: JUMPDEST 00000415: POP 00000416: PUSH2 0x02b1 00000419: PUSH2 0x0423 0000041c: CALLDATASIZE 0000041d: PUSH1 0x04 0000041f: PUSH2 0x1b61 00000422: JUMP 00000423: JUMPDEST 00000424: PUSH2 0x0d20 00000427: JUMP 00000428: JUMPDEST 00000429: CALLVALUE 0000042a: DUP1 0000042b: ISZERO 0000042c: PUSH2 0x0434 0000042f: JUMPI 00000430: PUSH1 0x00 00000432: DUP1 00000433: REVERT 00000434: JUMPDEST 00000435: POP 00000436: PUSH2 0x0215 00000439: PUSH2 0x0443 0000043c: CALLDATASIZE 0000043d: PUSH1 0x04 0000043f: PUSH2 0x1b61 00000442: JUMP 00000443: JUMPDEST 00000444: PUSH2 0x0d3b 00000447: JUMP 00000448: JUMPDEST 00000449: CALLVALUE 0000044a: DUP1 0000044b: ISZERO 0000044c: PUSH2 0x0454 0000044f: JUMPI 00000450: PUSH1 0x00 00000452: DUP1 00000453: REVERT 00000454: JUMPDEST 00000455: POP 00000456: PUSH2 0x02b1 00000459: PUSH2 0x0dc2 0000045c: JUMP 0000045d: JUMPDEST 0000045e: CALLVALUE 0000045f: DUP1 00000460: ISZERO 00000461: PUSH2 0x0469 00000464: JUMPI 00000465: PUSH1 0x00 00000467: DUP1 00000468: REVERT 00000469: JUMPDEST 0000046a: POP 0000046b: PUSH2 0x0472 0000046e: PUSH2 0x0dc8 00000471: JUMP 00000472: JUMPDEST 00000473: PUSH1 0x40 00000475: MLOAD 00000476: PUSH2 0x0266 00000479: SWAP2 0000047a: SWAP1 0000047b: PUSH2 0x1cb2 0000047e: JUMP 0000047f: JUMPDEST 00000480: CALLVALUE 00000481: DUP1 00000482: ISZERO 00000483: PUSH2 0x048b 00000486: JUMPI 00000487: PUSH1 0x00 00000489: DUP1 0000048a: REVERT 0000048b: JUMPDEST 0000048c: POP 0000048d: PUSH2 0x02b1 00000490: PUSH2 0x049a 00000493: CALLDATASIZE 00000494: PUSH1 0x04 00000496: PUSH2 0x1b61 00000499: JUMP 0000049a: JUMPDEST 0000049b: PUSH2 0x0dd7 0000049e: JUMP 0000049f: JUMPDEST 000004a0: CALLVALUE 000004a1: DUP1 000004a2: ISZERO 000004a3: PUSH2 0x04ab 000004a6: JUMPI 000004a7: PUSH1 0x00 000004a9: DUP1 000004aa: REVERT 000004ab: JUMPDEST 000004ac: POP 000004ad: PUSH2 0x0259 000004b0: PUSH2 0x0de3 000004b3: JUMP 000004b4: JUMPDEST 000004b5: CALLVALUE 000004b6: DUP1 000004b7: ISZERO 000004b8: PUSH2 0x04c0 000004bb: JUMPI 000004bc: PUSH1 0x00 000004be: DUP1 000004bf: REVERT 000004c0: JUMPDEST 000004c1: POP 000004c2: PUSH2 0x028f 000004c5: PUSH2 0x04cf 000004c8: CALLDATASIZE 000004c9: PUSH1 0x04 000004cb: PUSH2 0x1c6d 000004ce: JUMP 000004cf: JUMPDEST 000004d0: PUSH2 0x0df2 000004d3: JUMP 000004d4: JUMPDEST 000004d5: CALLVALUE 000004d6: DUP1 000004d7: ISZERO 000004d8: PUSH2 0x04e0 000004db: JUMPI 000004dc: PUSH1 0x00 000004de: DUP1 000004df: REVERT 000004e0: JUMPDEST 000004e1: POP 000004e2: PUSH2 0x02b1 000004e5: PUSH2 0x04ef 000004e8: CALLDATASIZE 000004e9: PUSH1 0x04 000004eb: PUSH2 0x1b61 000004ee: JUMP 000004ef: JUMPDEST 000004f0: PUSH2 0x0e5a 000004f3: JUMP 000004f4: JUMPDEST 000004f5: CALLVALUE 000004f6: DUP1 000004f7: ISZERO 000004f8: PUSH2 0x0500 000004fb: JUMPI 000004fc: PUSH1 0x00 000004fe: DUP1 000004ff: REVERT 00000500: JUMPDEST 00000501: POP 00000502: PUSH2 0x028f 00000505: PUSH2 0x050f 00000508: CALLDATASIZE 00000509: PUSH1 0x04 0000050b: PUSH2 0x1c6d 0000050e: JUMP 0000050f: JUMPDEST 00000510: PUSH2 0x0e88 00000513: JUMP 00000514: JUMPDEST 00000515: CALLVALUE 00000516: DUP1 00000517: ISZERO 00000518: PUSH2 0x0520 0000051b: JUMPI 0000051c: PUSH1 0x00 0000051e: DUP1 0000051f: REVERT 00000520: JUMPDEST 00000521: POP 00000522: PUSH2 0x02b1 00000525: PUSH2 0x052f 00000528: CALLDATASIZE 00000529: PUSH1 0x04 0000052b: PUSH2 0x1b61 0000052e: JUMP 0000052f: JUMPDEST 00000530: PUSH2 0x0e9c 00000533: JUMP 00000534: JUMPDEST 00000535: CALLVALUE 00000536: DUP1 00000537: ISZERO 00000538: PUSH2 0x0540 0000053b: JUMPI 0000053c: PUSH1 0x00 0000053e: DUP1 0000053f: REVERT 00000540: JUMPDEST 00000541: POP 00000542: PUSH2 0x02b1 00000545: PUSH2 0x0eb7 00000548: JUMP 00000549: JUMPDEST 0000054a: CALLVALUE 0000054b: DUP1 0000054c: ISZERO 0000054d: PUSH2 0x0555 00000550: JUMPI 00000551: PUSH1 0x00 00000553: DUP1 00000554: REVERT 00000555: JUMPDEST 00000556: POP 00000557: PUSH2 0x028f 0000055a: PUSH2 0x0564 0000055d: CALLDATASIZE 0000055e: PUSH1 0x04 00000560: PUSH2 0x1b61 00000563: JUMP 00000564: JUMPDEST 00000565: PUSH2 0x0edb 00000568: JUMP 00000569: JUMPDEST 0000056a: CALLVALUE 0000056b: DUP1 0000056c: ISZERO 0000056d: PUSH2 0x0575 00000570: JUMPI 00000571: PUSH1 0x00 00000573: DUP1 00000574: REVERT 00000575: JUMPDEST 00000576: POP 00000577: PUSH2 0x02b1 0000057a: PUSH2 0x0584 0000057d: CALLDATASIZE 0000057e: PUSH1 0x04 00000580: PUSH2 0x1bc4 00000583: JUMP 00000584: JUMPDEST 00000585: PUSH2 0x0ef0 00000588: JUMP 00000589: JUMPDEST 0000058a: CALLVALUE 0000058b: DUP1 0000058c: ISZERO 0000058d: PUSH2 0x0595 00000590: JUMPI 00000591: PUSH1 0x00 00000593: DUP1 00000594: REVERT 00000595: JUMPDEST 00000596: POP 00000597: PUSH2 0x0215 0000059a: PUSH2 0x05a4 0000059d: CALLDATASIZE 0000059e: PUSH1 0x04 000005a0: PUSH2 0x1b99 000005a3: JUMP 000005a4: JUMPDEST 000005a5: PUSH2 0x0f1b 000005a8: JUMP 000005a9: JUMPDEST 000005aa: CALLVALUE 000005ab: DUP1 000005ac: ISZERO 000005ad: PUSH2 0x05b5 000005b0: JUMPI 000005b1: PUSH1 0x00 000005b3: DUP1 000005b4: REVERT 000005b5: JUMPDEST 000005b6: POP 000005b7: PUSH2 0x02b1 000005ba: PUSH2 0x109d 000005bd: JUMP 000005be: JUMPDEST 000005bf: CALLVALUE 000005c0: DUP1 000005c1: ISZERO 000005c2: PUSH2 0x05ca 000005c5: JUMPI 000005c6: PUSH1 0x00 000005c8: DUP1 000005c9: REVERT 000005ca: JUMPDEST 000005cb: POP 000005cc: PUSH2 0x0215 000005cf: PUSH2 0x05d9 000005d2: CALLDATASIZE 000005d3: PUSH1 0x04 000005d5: PUSH2 0x1c97 000005d8: JUMP 000005d9: JUMPDEST 000005da: PUSH2 0x10a3 000005dd: JUMP 000005de: JUMPDEST 000005df: CALLVALUE 000005e0: DUP1 000005e1: ISZERO 000005e2: PUSH2 0x05ea 000005e5: JUMPI 000005e6: PUSH1 0x00 000005e8: DUP1 000005e9: REVERT 000005ea: JUMPDEST 000005eb: POP 000005ec: PUSH2 0x0215 000005ef: PUSH2 0x05f9 000005f2: CALLDATASIZE 000005f3: PUSH1 0x04 000005f5: PUSH2 0x1b61 000005f8: JUMP 000005f9: JUMPDEST 000005fa: PUSH2 0x115e 000005fd: JUMP 000005fe: JUMPDEST 000005ff: CALLVALUE 00000600: DUP1 00000601: ISZERO 00000602: PUSH2 0x060a 00000605: JUMPI 00000606: PUSH1 0x00 00000608: DUP1 00000609: REVERT 0000060a: JUMPDEST 0000060b: POP 0000060c: PUSH2 0x03ca 0000060f: PUSH2 0x0619 00000612: CALLDATASIZE 00000613: PUSH1 0x04 00000615: PUSH2 0x1b61 00000618: JUMP 00000619: JUMPDEST 0000061a: PUSH2 0x1215 0000061d: JUMP 0000061e: JUMPDEST 0000061f: CALLVALUE 00000620: DUP1 00000621: ISZERO 00000622: PUSH2 0x062a 00000625: JUMPI 00000626: PUSH1 0x00 00000628: DUP1 00000629: REVERT 0000062a: JUMPDEST 0000062b: POP 0000062c: PUSH2 0x063e 0000062f: PUSH2 0x0639 00000632: CALLDATASIZE 00000633: PUSH1 0x04 00000635: PUSH2 0x1c97 00000638: JUMP 00000639: JUMPDEST 0000063a: PUSH2 0x1245 0000063d: JUMP 0000063e: JUMPDEST 0000063f: PUSH1 0x40 00000641: MLOAD 00000642: PUSH2 0x0266 00000645: SWAP4 00000646: SWAP3 00000647: SWAP2 00000648: SWAP1 00000649: PUSH2 0x21ba 0000064c: JUMP 0000064d: JUMPDEST 0000064e: PUSH1 0x00 00000650: PUSH2 0x0657 00000653: PUSH2 0x0a1b 00000656: JUMP 00000657: JUMPDEST 00000658: GT 00000659: PUSH2 0x067d 0000065c: JUMPI 0000065d: PUSH1 0x40 0000065f: MLOAD 00000660: PUSH3 0x461bcd 00000664: PUSH1 0xe5 00000666: SHL 00000667: DUP2 00000668: MSTORE 00000669: PUSH1 0x04 0000066b: ADD 0000066c: PUSH2 0x0674 0000066f: SWAP1 00000670: PUSH2 0x1f23 00000673: JUMP 00000674: JUMPDEST 00000675: PUSH1 0x40 00000677: MLOAD 00000678: DUP1 00000679: SWAP2 0000067a: SUB 0000067b: SWAP1 0000067c: REVERT 0000067d: JUMPDEST 0000067e: CALLVALUE 0000067f: ISZERO 00000680: PUSH2 0x0709 00000683: JUMPI 00000684: PUSH1 0x00 00000686: PUSH2 0x06b1 00000689: PUSH2 0x0690 0000068c: PUSH2 0x0a1b 0000068f: JUMP 00000690: JUMPDEST 00000691: PUSH2 0x069e 00000694: CALLVALUE 00000695: PUSH1 0x01 00000697: PUSH1 0x80 00000699: SHL 0000069a: PUSH2 0x136c 0000069d: JUMP 0000069e: JUMPDEST 0000069f: PUSH2 0x06a8 000006a2: SWAP2 000006a3: SWAP1 000006a4: PUSH2 0x2237 000006a7: JUMP 000006a8: JUMPDEST 000006a9: PUSH1 0x06 000006ab: SLOAD 000006ac: SWAP1 000006ad: PUSH2 0x13b8 000006b0: JUMP 000006b1: JUMPDEST 000006b2: PUSH1 0x06 000006b4: DUP2 000006b5: SWAP1 000006b6: SSTORE 000006b7: PUSH1 0x40 000006b9: MLOAD 000006ba: SWAP1 000006bb: SWAP2 000006bc: POP 000006bd: CALLER 000006be: SWAP1 000006bf: PUSH32 0xa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511 000006e0: SWAP1 000006e1: PUSH2 0x06eb 000006e4: SWAP1 000006e5: CALLVALUE 000006e6: SWAP1 000006e7: PUSH2 0x216d 000006ea: JUMP 000006eb: JUMPDEST 000006ec: PUSH1 0x40 000006ee: MLOAD 000006ef: DUP1 000006f0: SWAP2 000006f1: SUB 000006f2: SWAP1 000006f3: LOG2 000006f4: PUSH1 0x08 000006f6: SLOAD 000006f7: PUSH1 0x00 000006f9: SWAP1 000006fa: PUSH2 0x0703 000006fd: SWAP1 000006fe: CALLVALUE 000006ff: PUSH2 0x13b8 00000702: JUMP 00000703: JUMPDEST 00000704: PUSH1 0x08 00000706: SSTORE 00000707: POP 00000708: POP 00000709: JUMPDEST 0000070a: JUMP 0000070b: JUMPDEST 0000070c: PUSH2 0x0713 0000070f: PUSH2 0x13e7 00000712: JUMP 00000713: JUMPDEST 00000714: PUSH1 0x05 00000716: SLOAD 00000717: PUSH1 0x01 00000719: PUSH1 0x01 0000071b: PUSH1 0xa0 0000071d: SHL 0000071e: SUB 0000071f: SWAP1 00000720: DUP2 00000721: AND 00000722: SWAP2 00000723: AND 00000724: EQ 00000725: PUSH2 0x0740 00000728: JUMPI 00000729: PUSH1 0x40 0000072b: MLOAD 0000072c: PUSH3 0x461bcd 00000730: PUSH1 0xe5 00000732: SHL 00000733: DUP2 00000734: MSTORE 00000735: PUSH1 0x04 00000737: ADD 00000738: PUSH2 0x0674 0000073b: SWAP1 0000073c: PUSH2 0x1fc7 0000073f: JUMP 00000740: JUMPDEST 00000741: PUSH1 0x01 00000743: PUSH1 0x01 00000745: PUSH1 0xa0 00000747: SHL 00000748: SUB 00000749: DUP3 0000074a: AND 0000074b: PUSH1 0x00 0000074d: SWAP1 0000074e: DUP2 0000074f: MSTORE 00000750: PUSH1 0x11 00000752: PUSH1 0x20 00000754: MSTORE 00000755: PUSH1 0x40 00000757: SWAP1 00000758: KECCAK256 00000759: SLOAD 0000075a: PUSH1 0xff 0000075c: AND 0000075d: ISZERO 0000075e: ISZERO 0000075f: DUP2 00000760: ISZERO 00000761: ISZERO 00000762: EQ 00000763: ISZERO 00000764: PUSH2 0x077f 00000767: JUMPI 00000768: PUSH1 0x40 0000076a: MLOAD 0000076b: PUSH3 0x461bcd 0000076f: PUSH1 0xe5 00000771: SHL 00000772: DUP2 00000773: MSTORE 00000774: PUSH1 0x04 00000776: ADD 00000777: PUSH2 0x0674 0000077a: SWAP1 0000077b: PUSH2 0x2107 0000077e: JUMP 0000077f: JUMPDEST 00000780: PUSH1 0x01 00000782: PUSH1 0x01 00000784: PUSH1 0xa0 00000786: SHL 00000787: SUB 00000788: DUP3 00000789: AND 0000078a: PUSH1 0x00 0000078c: SWAP1 0000078d: DUP2 0000078e: MSTORE 0000078f: PUSH1 0x11 00000791: PUSH1 0x20 00000793: MSTORE 00000794: PUSH1 0x40 00000796: DUP2 00000797: KECCAK256 00000798: DUP1 00000799: SLOAD 0000079a: PUSH1 0xff 0000079c: NOT 0000079d: AND 0000079e: DUP4 0000079f: ISZERO 000007a0: ISZERO 000007a1: OR 000007a2: SWAP1 000007a3: SSTORE 000007a4: PUSH2 0x07ab 000007a7: PUSH2 0x0dc8 000007aa: JUMP 000007ab: JUMPDEST 000007ac: PUSH1 0x01 000007ae: PUSH1 0x01 000007b0: PUSH1 0xa0 000007b2: SHL 000007b3: SUB 000007b4: AND 000007b5: PUSH4 0x70a08231 000007ba: DUP5 000007bb: PUSH1 0x40 000007bd: MLOAD 000007be: DUP3 000007bf: PUSH4 0xffffffff 000007c4: AND 000007c5: PUSH1 0xe0 000007c7: SHL 000007c8: DUP2 000007c9: MSTORE 000007ca: PUSH1 0x04 000007cc: ADD 000007cd: PUSH2 0x07d6 000007d0: SWAP2 000007d1: SWAP1 000007d2: PUSH2 0x1cb2 000007d5: JUMP 000007d6: JUMPDEST 000007d7: PUSH1 0x20 000007d9: PUSH1 0x40 000007db: MLOAD 000007dc: DUP1 000007dd: DUP4 000007de: SUB 000007df: DUP2 000007e0: DUP7 000007e1: DUP1 000007e2: EXTCODESIZE 000007e3: ISZERO 000007e4: DUP1 000007e5: ISZERO 000007e6: PUSH2 0x07ee 000007e9: JUMPI 000007ea: PUSH1 0x00 000007ec: DUP1 000007ed: REVERT 000007ee: JUMPDEST 000007ef: POP 000007f0: GAS 000007f1: STATICCALL 000007f2: ISZERO 000007f3: DUP1 000007f4: ISZERO 000007f5: PUSH2 0x0802 000007f8: JUMPI 000007f9: RETURNDATASIZE 000007fa: PUSH1 0x00 000007fc: DUP1 000007fd: RETURNDATACOPY 000007fe: RETURNDATASIZE 000007ff: PUSH1 0x00 00000801: REVERT 00000802: JUMPDEST 00000803: POP 00000804: POP 00000805: POP 00000806: POP 00000807: PUSH1 0x40 00000809: MLOAD 0000080a: RETURNDATASIZE 0000080b: PUSH1 0x1f 0000080d: NOT 0000080e: PUSH1 0x1f 00000810: DUP3 00000811: ADD 00000812: AND 00000813: DUP3 00000814: ADD 00000815: DUP1 00000816: PUSH1 0x40 00000818: MSTORE 00000819: POP 0000081a: DUP2 0000081b: ADD 0000081c: SWAP1 0000081d: PUSH2 0x0826 00000820: SWAP2 00000821: SWAP1 00000822: PUSH2 0x1c7f 00000825: JUMP 00000826: JUMPDEST 00000827: SWAP1 00000828: POP 00000829: DUP2 0000082a: ISZERO 0000082b: PUSH2 0x08a8 0000082e: JUMPI 0000082f: PUSH2 0x0839 00000832: DUP4 00000833: PUSH1 0x00 00000835: PUSH2 0x13eb 00000838: JUMP 00000839: JUMPDEST 0000083a: PUSH1 0x40 0000083c: MLOAD 0000083d: PUSH4 0x131836e7 00000842: PUSH1 0xe2 00000844: SHL 00000845: DUP2 00000846: MSTORE 00000847: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 0000085c: SWAP1 0000085d: PUSH4 0x4c60db9c 00000862: SWAP1 00000863: PUSH2 0x0873 00000866: SWAP1 00000867: PUSH1 0x0b 00000869: SWAP1 0000086a: DUP8 0000086b: SWAP1 0000086c: PUSH1 0x04 0000086e: ADD 0000086f: PUSH2 0x2176 00000872: JUMP 00000873: JUMPDEST 00000874: PUSH1 0x00 00000876: PUSH1 0x40 00000878: MLOAD 00000879: DUP1 0000087a: DUP4 0000087b: SUB 0000087c: DUP2 0000087d: DUP7 0000087e: DUP1 0000087f: EXTCODESIZE 00000880: ISZERO 00000881: DUP1 00000882: ISZERO 00000883: PUSH2 0x088b 00000886: JUMPI 00000887: PUSH1 0x00 00000889: DUP1 0000088a: REVERT 0000088b: JUMPDEST 0000088c: POP 0000088d: GAS 0000088e: DELEGATECALL 0000088f: ISZERO 00000890: DUP1 00000891: ISZERO 00000892: PUSH2 0x089f 00000895: JUMPI 00000896: RETURNDATASIZE 00000897: PUSH1 0x00 00000899: DUP1 0000089a: RETURNDATACOPY 0000089b: RETURNDATASIZE 0000089c: PUSH1 0x00 0000089e: REVERT 0000089f: JUMPDEST 000008a0: POP 000008a1: POP 000008a2: POP 000008a3: POP 000008a4: PUSH2 0x091f 000008a7: JUMP 000008a8: JUMPDEST 000008a9: PUSH2 0x08b2 000008ac: DUP4 000008ad: DUP3 000008ae: PUSH2 0x13eb 000008b1: JUMP 000008b2: JUMPDEST 000008b3: PUSH1 0x40 000008b5: MLOAD 000008b6: PUSH4 0x2f0ad017 000008bb: PUSH1 0xe2 000008bd: SHL 000008be: DUP2 000008bf: MSTORE 000008c0: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 000008d5: SWAP1 000008d6: PUSH4 0xbc2b405c 000008db: SWAP1 000008dc: PUSH2 0x08ee 000008df: SWAP1 000008e0: PUSH1 0x0b 000008e2: SWAP1 000008e3: DUP8 000008e4: SWAP1 000008e5: DUP7 000008e6: SWAP1 000008e7: PUSH1 0x04 000008e9: ADD 000008ea: PUSH2 0x218d 000008ed: JUMP 000008ee: JUMPDEST 000008ef: PUSH1 0x00 000008f1: PUSH1 0x40 000008f3: MLOAD 000008f4: DUP1 000008f5: DUP4 000008f6: SUB 000008f7: DUP2 000008f8: DUP7 000008f9: DUP1 000008fa: EXTCODESIZE 000008fb: ISZERO 000008fc: DUP1 000008fd: ISZERO 000008fe: PUSH2 0x0906 00000901: JUMPI 00000902: PUSH1 0x00 00000904: DUP1 00000905: REVERT 00000906: JUMPDEST 00000907: POP 00000908: GAS 00000909: DELEGATECALL 0000090a: ISZERO 0000090b: DUP1 0000090c: ISZERO 0000090d: PUSH2 0x091a 00000910: JUMPI 00000911: RETURNDATASIZE 00000912: PUSH1 0x00 00000914: DUP1 00000915: RETURNDATACOPY 00000916: RETURNDATASIZE 00000917: PUSH1 0x00 00000919: REVERT 0000091a: JUMPDEST 0000091b: POP 0000091c: POP 0000091d: POP 0000091e: POP 0000091f: JUMPDEST 00000920: DUP3 00000921: PUSH1 0x01 00000923: PUSH1 0x01 00000925: PUSH1 0xa0 00000927: SHL 00000928: SUB 00000929: AND 0000092a: PUSH32 0xa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be 0000094b: DUP4 0000094c: PUSH1 0x40 0000094e: MLOAD 0000094f: PUSH2 0x0958 00000952: SWAP2 00000953: SWAP1 00000954: PUSH2 0x1d07 00000957: JUMP 00000958: JUMPDEST 00000959: PUSH1 0x40 0000095b: MLOAD 0000095c: DUP1 0000095d: SWAP2 0000095e: SUB 0000095f: SWAP1 00000960: LOG2 00000961: POP 00000962: POP 00000963: POP 00000964: JUMP 00000965: JUMPDEST 00000966: PUSH1 0x60 00000968: PUSH1 0x03 0000096a: DUP1 0000096b: SLOAD 0000096c: PUSH2 0x0974 0000096f: SWAP1 00000970: PUSH2 0x22cc 00000973: JUMP 00000974: JUMPDEST 00000975: DUP1 00000976: PUSH1 0x1f 00000978: ADD 00000979: PUSH1 0x20 0000097b: DUP1 0000097c: SWAP2 0000097d: DIV 0000097e: MUL 0000097f: PUSH1 0x20 00000981: ADD 00000982: PUSH1 0x40 00000984: MLOAD 00000985: SWAP1 00000986: DUP2 00000987: ADD 00000988: PUSH1 0x40 0000098a: MSTORE 0000098b: DUP1 0000098c: SWAP3 0000098d: SWAP2 0000098e: SWAP1 0000098f: DUP2 00000990: DUP2 00000991: MSTORE 00000992: PUSH1 0x20 00000994: ADD 00000995: DUP3 00000996: DUP1 00000997: SLOAD 00000998: PUSH2 0x09a0 0000099b: SWAP1 0000099c: PUSH2 0x22cc 0000099f: JUMP 000009a0: JUMPDEST 000009a1: DUP1 000009a2: ISZERO 000009a3: PUSH2 0x09ed 000009a6: JUMPI 000009a7: DUP1 000009a8: PUSH1 0x1f 000009aa: LT 000009ab: PUSH2 0x09c2 000009ae: JUMPI 000009af: PUSH2 0x0100 000009b2: DUP1 000009b3: DUP4 000009b4: SLOAD 000009b5: DIV 000009b6: MUL 000009b7: DUP4 000009b8: MSTORE 000009b9: SWAP2 000009ba: PUSH1 0x20 000009bc: ADD 000009bd: SWAP2 000009be: PUSH2 0x09ed 000009c1: JUMP 000009c2: JUMPDEST 000009c3: DUP3 000009c4: ADD 000009c5: SWAP2 000009c6: SWAP1 000009c7: PUSH1 0x00 000009c9: MSTORE 000009ca: PUSH1 0x20 000009cc: PUSH1 0x00 000009ce: KECCAK256 000009cf: SWAP1 000009d0: JUMPDEST 000009d1: DUP2 000009d2: SLOAD 000009d3: DUP2 000009d4: MSTORE 000009d5: SWAP1 000009d6: PUSH1 0x01 000009d8: ADD 000009d9: SWAP1 000009da: PUSH1 0x20 000009dc: ADD 000009dd: DUP1 000009de: DUP4 000009df: GT 000009e0: PUSH2 0x09d0 000009e3: JUMPI 000009e4: DUP3 000009e5: SWAP1 000009e6: SUB 000009e7: PUSH1 0x1f 000009e9: AND 000009ea: DUP3 000009eb: ADD 000009ec: SWAP2 000009ed: JUMPDEST 000009ee: POP 000009ef: POP 000009f0: POP 000009f1: POP 000009f2: POP 000009f3: SWAP1 000009f4: POP 000009f5: SWAP1 000009f6: JUMP 000009f7: JUMPDEST 000009f8: PUSH1 0x00 000009fa: PUSH2 0x0a0b 000009fd: PUSH2 0x0a04 00000a00: PUSH2 0x13e7 00000a03: JUMP 00000a04: JUMPDEST 00000a05: DUP5 00000a06: DUP5 00000a07: PUSH2 0x1444 00000a0a: JUMP 00000a0b: JUMPDEST 00000a0c: POP 00000a0d: PUSH1 0x01 00000a0f: JUMPDEST 00000a10: SWAP3 00000a11: SWAP2 00000a12: POP 00000a13: POP 00000a14: JUMP 00000a15: JUMPDEST 00000a16: PUSH1 0x0b 00000a18: SLOAD 00000a19: SWAP1 00000a1a: JUMP 00000a1b: JUMPDEST 00000a1c: PUSH1 0x02 00000a1e: SLOAD 00000a1f: SWAP1 00000a20: JUMP 00000a21: JUMPDEST 00000a22: PUSH1 0x12 00000a24: PUSH1 0x20 00000a26: MSTORE 00000a27: PUSH1 0x00 00000a29: SWAP1 00000a2a: DUP2 00000a2b: MSTORE 00000a2c: PUSH1 0x40 00000a2e: SWAP1 00000a2f: KECCAK256 00000a30: SLOAD 00000a31: DUP2 00000a32: JUMP 00000a33: JUMPDEST 00000a34: PUSH1 0x00 00000a36: PUSH2 0x0a40 00000a39: DUP5 00000a3a: DUP5 00000a3b: DUP5 00000a3c: PUSH2 0x14f8 00000a3f: JUMP 00000a40: JUMPDEST 00000a41: PUSH2 0x0ab0 00000a44: DUP5 00000a45: PUSH2 0x0a4c 00000a48: PUSH2 0x13e7 00000a4b: JUMP 00000a4c: JUMPDEST 00000a4d: PUSH2 0x0aab 00000a50: DUP6 00000a51: PUSH1 0x40 00000a53: MLOAD 00000a54: DUP1 00000a55: PUSH1 0x60 00000a57: ADD 00000a58: PUSH1 0x40 00000a5a: MSTORE 00000a5b: DUP1 00000a5c: PUSH1 0x28 00000a5e: DUP2 00000a5f: MSTORE 00000a60: PUSH1 0x20 00000a62: ADD 00000a63: PUSH2 0x2370 00000a66: PUSH1 0x28 00000a68: SWAP2 00000a69: CODECOPY 00000a6a: PUSH1 0x01 00000a6c: PUSH1 0x01 00000a6e: PUSH1 0xa0 00000a70: SHL 00000a71: SUB 00000a72: DUP11 00000a73: AND 00000a74: PUSH1 0x00 00000a76: SWAP1 00000a77: DUP2 00000a78: MSTORE 00000a79: PUSH1 0x01 00000a7b: PUSH1 0x20 00000a7d: MSTORE 00000a7e: PUSH1 0x40 00000a80: DUP2 00000a81: KECCAK256 00000a82: SWAP1 00000a83: PUSH2 0x0a8a 00000a86: PUSH2 0x13e7 00000a89: JUMP 00000a8a: JUMPDEST 00000a8b: PUSH1 0x01 00000a8d: PUSH1 0x01 00000a8f: PUSH1 0xa0 00000a91: SHL 00000a92: SUB 00000a93: AND 00000a94: DUP2 00000a95: MSTORE 00000a96: PUSH1 0x20 00000a98: DUP2 00000a99: ADD 00000a9a: SWAP2 00000a9b: SWAP1 00000a9c: SWAP2 00000a9d: MSTORE 00000a9e: PUSH1 0x40 00000aa0: ADD 00000aa1: PUSH1 0x00 00000aa3: KECCAK256 00000aa4: SLOAD 00000aa5: SWAP2 00000aa6: SWAP1 00000aa7: PUSH2 0x1510 00000aaa: JUMP 00000aab: JUMPDEST 00000aac: PUSH2 0x1444 00000aaf: JUMP 00000ab0: JUMPDEST 00000ab1: POP 00000ab2: PUSH1 0x01 00000ab4: SWAP4 00000ab5: SWAP3 00000ab6: POP 00000ab7: POP 00000ab8: POP 00000ab9: JUMP 00000aba: JUMPDEST 00000abb: PUSH1 0x01 00000abd: PUSH1 0x01 00000abf: PUSH1 0xa0 00000ac1: SHL 00000ac2: SUB 00000ac3: DUP2 00000ac4: AND 00000ac5: PUSH1 0x00 00000ac7: SWAP1 00000ac8: DUP2 00000ac9: MSTORE 00000aca: PUSH1 0x09 00000acc: PUSH1 0x20 00000ace: MSTORE 00000acf: PUSH1 0x40 00000ad1: DUP2 00000ad2: KECCAK256 00000ad3: SLOAD 00000ad4: DUP2 00000ad5: SWAP1 00000ad6: PUSH1 0x01 00000ad8: PUSH1 0x80 00000ada: SHL 00000adb: SWAP1 00000adc: PUSH2 0x0b0b 00000adf: SWAP1 00000ae0: PUSH2 0x0b06 00000ae3: SWAP1 00000ae4: PUSH2 0x0b00 00000ae7: PUSH2 0x0afb 00000aea: PUSH2 0x0af2 00000aed: DUP10 00000aee: PUSH2 0x0d20 00000af1: JUMP 00000af2: JUMPDEST 00000af3: PUSH1 0x06 00000af5: SLOAD 00000af6: SWAP1 00000af7: PUSH2 0x136c 00000afa: JUMP 00000afb: JUMPDEST 00000afc: PUSH2 0x154a 00000aff: JUMP 00000b00: JUMPDEST 00000b01: SWAP1 00000b02: PUSH2 0x156d 00000b05: JUMP 00000b06: JUMPDEST 00000b07: PUSH2 0x15be 00000b0a: JUMP 00000b0b: JUMPDEST 00000b0c: PUSH2 0x0b15 00000b0f: SWAP2 00000b10: SWAP1 00000b11: PUSH2 0x2237 00000b14: JUMP 00000b15: JUMPDEST 00000b16: SWAP2 00000b17: POP 00000b18: POP 00000b19: JUMPDEST 00000b1a: SWAP2 00000b1b: SWAP1 00000b1c: POP 00000b1d: JUMP 00000b1e: JUMPDEST 00000b1f: PUSH1 0x0f 00000b21: SLOAD 00000b22: DUP2 00000b23: JUMP 00000b24: JUMPDEST 00000b25: PUSH1 0x12 00000b27: SWAP1 00000b28: JUMP 00000b29: JUMPDEST 00000b2a: PUSH1 0x00 00000b2c: PUSH2 0x0a0b 00000b2f: PUSH2 0x0b36 00000b32: PUSH2 0x13e7 00000b35: JUMP 00000b36: JUMPDEST 00000b37: DUP5 00000b38: PUSH2 0x0aab 00000b3b: DUP6 00000b3c: PUSH1 0x01 00000b3e: PUSH1 0x00 00000b40: PUSH2 0x0b47 00000b43: PUSH2 0x13e7 00000b46: JUMP 00000b47: JUMPDEST 00000b48: PUSH1 0x01 00000b4a: PUSH1 0x01 00000b4c: PUSH1 0xa0 00000b4e: SHL 00000b4f: SUB 00000b50: SWAP1 00000b51: DUP2 00000b52: AND 00000b53: DUP3 00000b54: MSTORE 00000b55: PUSH1 0x20 00000b57: DUP1 00000b58: DUP4 00000b59: ADD 00000b5a: SWAP4 00000b5b: SWAP1 00000b5c: SWAP4 00000b5d: MSTORE 00000b5e: PUSH1 0x40 00000b60: SWAP2 00000b61: DUP3 00000b62: ADD 00000b63: PUSH1 0x00 00000b65: SWAP1 00000b66: DUP2 00000b67: KECCAK256 00000b68: SWAP2 00000b69: DUP13 00000b6a: AND 00000b6b: DUP2 00000b6c: MSTORE 00000b6d: SWAP3 00000b6e: MSTORE 00000b6f: SWAP1 00000b70: KECCAK256 00000b71: SLOAD 00000b72: SWAP1 00000b73: PUSH2 0x13b8 00000b76: JUMP 00000b77: JUMPDEST 00000b78: PUSH1 0x40 00000b7a: MLOAD 00000b7b: PUSH3 0x461bcd 00000b7f: PUSH1 0xe5 00000b81: SHL 00000b82: DUP2 00000b83: MSTORE 00000b84: PUSH1 0x04 00000b86: ADD 00000b87: PUSH2 0x0674 00000b8a: SWAP1 00000b8b: PUSH2 0x20dc 00000b8e: JUMP 00000b8f: JUMPDEST 00000b90: POP 00000b91: JUMP 00000b92: JUMPDEST 00000b93: PUSH1 0x00 00000b95: DUP1 00000b96: PUSH1 0x00 00000b98: DUP1 00000b99: PUSH1 0x00 00000b9b: DUP1 00000b9c: PUSH1 0x00 00000b9e: DUP1 00000b9f: PUSH1 0x0b 00000ba1: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 00000bb6: PUSH4 0xdeb3d896 00000bbb: SWAP1 00000bbc: SWAP2 00000bbd: PUSH1 0x40 00000bbf: MLOAD 00000bc0: DUP3 00000bc1: PUSH4 0xffffffff 00000bc6: AND 00000bc7: PUSH1 0xe0 00000bc9: SHL 00000bca: DUP2 00000bcb: MSTORE 00000bcc: PUSH1 0x04 00000bce: ADD 00000bcf: PUSH2 0x0bd8 00000bd2: SWAP2 00000bd3: SWAP1 00000bd4: PUSH2 0x216d 00000bd7: JUMP 00000bd8: JUMPDEST 00000bd9: PUSH1 0x20 00000bdb: PUSH1 0x40 00000bdd: MLOAD 00000bde: DUP1 00000bdf: DUP4 00000be0: SUB 00000be1: DUP2 00000be2: DUP7 00000be3: DUP1 00000be4: EXTCODESIZE 00000be5: ISZERO 00000be6: DUP1 00000be7: ISZERO 00000be8: PUSH2 0x0bf0 00000beb: JUMPI 00000bec: PUSH1 0x00 00000bee: DUP1 00000bef: REVERT 00000bf0: JUMPDEST 00000bf1: POP 00000bf2: GAS 00000bf3: DELEGATECALL 00000bf4: ISZERO 00000bf5: DUP1 00000bf6: ISZERO 00000bf7: PUSH2 0x0c04 00000bfa: JUMPI 00000bfb: RETURNDATASIZE 00000bfc: PUSH1 0x00 00000bfe: DUP1 00000bff: RETURNDATACOPY 00000c00: RETURNDATASIZE 00000c01: PUSH1 0x00 00000c03: REVERT 00000c04: JUMPDEST 00000c05: POP 00000c06: POP 00000c07: POP 00000c08: POP 00000c09: PUSH1 0x40 00000c0b: MLOAD 00000c0c: RETURNDATASIZE 00000c0d: PUSH1 0x1f 00000c0f: NOT 00000c10: PUSH1 0x1f 00000c12: DUP3 00000c13: ADD 00000c14: AND 00000c15: DUP3 00000c16: ADD 00000c17: DUP1 00000c18: PUSH1 0x40 00000c1a: MSTORE 00000c1b: POP 00000c1c: DUP2 00000c1d: ADD 00000c1e: SWAP1 00000c1f: PUSH2 0x0c28 00000c22: SWAP2 00000c23: SWAP1 00000c24: PUSH2 0x1c7f 00000c27: JUMP 00000c28: JUMPDEST 00000c29: DUP10 00000c2a: LT 00000c2b: PUSH2 0x0c4d 00000c2e: JUMPI 00000c2f: POP 00000c30: PUSH1 0x00 00000c32: SWAP7 00000c33: POP 00000c34: PUSH1 0x00 00000c36: NOT 00000c37: SWAP6 00000c38: POP 00000c39: DUP6 00000c3a: SWAP5 00000c3b: POP 00000c3c: DUP7 00000c3d: SWAP4 00000c3e: POP 00000c3f: DUP4 00000c40: SWAP3 00000c41: POP 00000c42: DUP3 00000c43: SWAP2 00000c44: POP 00000c45: DUP2 00000c46: SWAP1 00000c47: POP 00000c48: DUP1 00000c49: PUSH2 0x0cf7 00000c4c: JUMP 00000c4d: JUMPDEST 00000c4e: PUSH1 0x40 00000c50: MLOAD 00000c51: PUSH4 0x68d54f3f 00000c56: PUSH1 0xe1 00000c58: SHL 00000c59: DUP2 00000c5a: MSTORE 00000c5b: PUSH1 0x00 00000c5d: SWAP1 00000c5e: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 00000c73: SWAP1 00000c74: PUSH4 0xd1aa9e7e 00000c79: SWAP1 00000c7a: PUSH2 0x0c8a 00000c7d: SWAP1 00000c7e: PUSH1 0x0b 00000c80: SWAP1 00000c81: DUP15 00000c82: SWAP1 00000c83: PUSH1 0x04 00000c85: ADD 00000c86: PUSH2 0x21ac 00000c89: JUMP 00000c8a: JUMPDEST 00000c8b: PUSH1 0x20 00000c8d: PUSH1 0x40 00000c8f: MLOAD 00000c90: DUP1 00000c91: DUP4 00000c92: SUB 00000c93: DUP2 00000c94: DUP7 00000c95: DUP1 00000c96: EXTCODESIZE 00000c97: ISZERO 00000c98: DUP1 00000c99: ISZERO 00000c9a: PUSH2 0x0ca2 00000c9d: JUMPI 00000c9e: PUSH1 0x00 00000ca0: DUP1 00000ca1: REVERT 00000ca2: JUMPDEST 00000ca3: POP 00000ca4: GAS 00000ca5: DELEGATECALL 00000ca6: ISZERO 00000ca7: DUP1 00000ca8: ISZERO 00000ca9: PUSH2 0x0cb6 00000cac: JUMPI 00000cad: RETURNDATASIZE 00000cae: PUSH1 0x00 00000cb0: DUP1 00000cb1: RETURNDATACOPY 00000cb2: RETURNDATASIZE 00000cb3: PUSH1 0x00 00000cb5: REVERT 00000cb6: JUMPDEST 00000cb7: POP 00000cb8: POP 00000cb9: POP 00000cba: POP 00000cbb: PUSH1 0x40 00000cbd: MLOAD 00000cbe: RETURNDATASIZE 00000cbf: PUSH1 0x1f 00000cc1: NOT 00000cc2: PUSH1 0x1f 00000cc4: DUP3 00000cc5: ADD 00000cc6: AND 00000cc7: DUP3 00000cc8: ADD 00000cc9: DUP1 00000cca: PUSH1 0x40 00000ccc: MSTORE 00000ccd: POP 00000cce: DUP2 00000ccf: ADD 00000cd0: SWAP1 00000cd1: PUSH2 0x0cda 00000cd4: SWAP2 00000cd5: SWAP1 00000cd6: PUSH2 0x1b7d 00000cd9: JUMP 00000cda: JUMPDEST 00000cdb: SWAP1 00000cdc: POP 00000cdd: PUSH2 0x0ce5 00000ce0: DUP2 00000ce1: PUSH2 0x15e4 00000ce4: JUMP 00000ce5: JUMPDEST 00000ce6: SWAP9 00000ce7: POP 00000ce8: SWAP9 00000ce9: POP 00000cea: SWAP9 00000ceb: POP 00000cec: SWAP9 00000ced: POP 00000cee: SWAP9 00000cef: POP 00000cf0: SWAP9 00000cf1: POP 00000cf2: SWAP9 00000cf3: POP 00000cf4: SWAP9 00000cf5: POP 00000cf6: POP 00000cf7: JUMPDEST 00000cf8: SWAP2 00000cf9: SWAP4 00000cfa: SWAP6 00000cfb: SWAP8 00000cfc: POP 00000cfd: SWAP2 00000cfe: SWAP4 00000cff: SWAP6 00000d00: SWAP8 00000d01: JUMP 00000d02: JUMPDEST 00000d03: PUSH1 0x40 00000d05: MLOAD 00000d06: PUSH3 0x461bcd 00000d0a: PUSH1 0xe5 00000d0c: SHL 00000d0d: DUP2 00000d0e: MSTORE 00000d0f: PUSH1 0x04 00000d11: ADD 00000d12: PUSH2 0x0674 00000d15: SWAP1 00000d16: PUSH2 0x1eb5 00000d19: JUMP 00000d1a: JUMPDEST 00000d1b: PUSH1 0x10 00000d1d: SLOAD 00000d1e: DUP2 00000d1f: JUMP 00000d20: JUMPDEST 00000d21: PUSH1 0x01 00000d23: PUSH1 0x01 00000d25: PUSH1 0xa0 00000d27: SHL 00000d28: SUB 00000d29: AND 00000d2a: PUSH1 0x00 00000d2c: SWAP1 00000d2d: DUP2 00000d2e: MSTORE 00000d2f: PUSH1 0x20 00000d31: DUP2 00000d32: SWAP1 00000d33: MSTORE 00000d34: PUSH1 0x40 00000d36: SWAP1 00000d37: KECCAK256 00000d38: SLOAD 00000d39: SWAP1 00000d3a: JUMP 00000d3b: JUMPDEST 00000d3c: PUSH2 0x0d43 00000d3f: PUSH2 0x13e7 00000d42: JUMP 00000d43: JUMPDEST 00000d44: PUSH1 0x05 00000d46: SLOAD 00000d47: PUSH1 0x01 00000d49: PUSH1 0x01 00000d4b: PUSH1 0xa0 00000d4d: SHL 00000d4e: SUB 00000d4f: SWAP1 00000d50: DUP2 00000d51: AND 00000d52: SWAP2 00000d53: AND 00000d54: EQ 00000d55: PUSH2 0x0d70 00000d58: JUMPI 00000d59: PUSH1 0x40 00000d5b: MLOAD 00000d5c: PUSH3 0x461bcd 00000d60: PUSH1 0xe5 00000d62: SHL 00000d63: DUP2 00000d64: MSTORE 00000d65: PUSH1 0x04 00000d67: ADD 00000d68: PUSH2 0x0674 00000d6b: SWAP1 00000d6c: PUSH2 0x1fc7 00000d6f: JUMP 00000d70: JUMPDEST 00000d71: PUSH1 0x00 00000d73: PUSH2 0x0d7b 00000d76: DUP3 00000d77: PUSH2 0x1754 00000d7a: JUMP 00000d7b: JUMPDEST 00000d7c: SWAP1 00000d7d: POP 00000d7e: DUP2 00000d7f: PUSH1 0x01 00000d81: PUSH1 0x01 00000d83: PUSH1 0xa0 00000d85: SHL 00000d86: SUB 00000d87: AND 00000d88: PUSH32 0x47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4 00000da9: DUP3 00000daa: PUSH1 0x40 00000dac: MLOAD 00000dad: PUSH2 0x0db6 00000db0: SWAP2 00000db1: SWAP1 00000db2: PUSH2 0x216d 00000db5: JUMP 00000db6: JUMPDEST 00000db7: PUSH1 0x40 00000db9: MLOAD 00000dba: DUP1 00000dbb: SWAP2 00000dbc: SUB 00000dbd: SWAP1 00000dbe: LOG2 00000dbf: POP 00000dc0: POP 00000dc1: JUMP 00000dc2: JUMPDEST 00000dc3: PUSH1 0x08 00000dc5: SLOAD 00000dc6: DUP2 00000dc7: JUMP 00000dc8: JUMPDEST 00000dc9: PUSH1 0x05 00000dcb: SLOAD 00000dcc: PUSH1 0x01 00000dce: PUSH1 0x01 00000dd0: PUSH1 0xa0 00000dd2: SHL 00000dd3: SUB 00000dd4: AND 00000dd5: SWAP1 00000dd6: JUMP 00000dd7: JUMPDEST 00000dd8: PUSH1 0x00 00000dda: DUP1 00000ddb: PUSH2 0x0b15 00000dde: DUP4 00000ddf: PUSH2 0x0e5a 00000de2: JUMP 00000de3: JUMPDEST 00000de4: PUSH1 0x60 00000de6: PUSH1 0x04 00000de8: DUP1 00000de9: SLOAD 00000dea: PUSH2 0x0974 00000ded: SWAP1 00000dee: PUSH2 0x22cc 00000df1: JUMP 00000df2: JUMPDEST 00000df3: PUSH1 0x00 00000df5: PUSH2 0x0a0b 00000df8: PUSH2 0x0dff 00000dfb: PUSH2 0x13e7 00000dfe: JUMP 00000dff: JUMPDEST 00000e00: DUP5 00000e01: PUSH2 0x0aab 00000e04: DUP6 00000e05: PUSH1 0x40 00000e07: MLOAD 00000e08: DUP1 00000e09: PUSH1 0x60 00000e0b: ADD 00000e0c: PUSH1 0x40 00000e0e: MSTORE 00000e0f: DUP1 00000e10: PUSH1 0x25 00000e12: DUP2 00000e13: MSTORE 00000e14: PUSH1 0x20 00000e16: ADD 00000e17: PUSH2 0x2398 00000e1a: PUSH1 0x25 00000e1c: SWAP2 00000e1d: CODECOPY 00000e1e: PUSH1 0x01 00000e20: PUSH1 0x00 00000e22: PUSH2 0x0e29 00000e25: PUSH2 0x13e7 00000e28: JUMP 00000e29: JUMPDEST 00000e2a: PUSH1 0x01 00000e2c: PUSH1 0x01 00000e2e: PUSH1 0xa0 00000e30: SHL 00000e31: SUB 00000e32: SWAP1 00000e33: DUP2 00000e34: AND 00000e35: DUP3 00000e36: MSTORE 00000e37: PUSH1 0x20 00000e39: DUP1 00000e3a: DUP4 00000e3b: ADD 00000e3c: SWAP4 00000e3d: SWAP1 00000e3e: SWAP4 00000e3f: MSTORE 00000e40: PUSH1 0x40 00000e42: SWAP2 00000e43: DUP3 00000e44: ADD 00000e45: PUSH1 0x00 00000e47: SWAP1 00000e48: DUP2 00000e49: KECCAK256 00000e4a: SWAP2 00000e4b: DUP14 00000e4c: AND 00000e4d: DUP2 00000e4e: MSTORE 00000e4f: SWAP3 00000e50: MSTORE 00000e51: SWAP1 00000e52: KECCAK256 00000e53: SLOAD 00000e54: SWAP2 00000e55: SWAP1 00000e56: PUSH2 0x1510 00000e59: JUMP 00000e5a: JUMPDEST 00000e5b: PUSH1 0x01 00000e5d: PUSH1 0x01 00000e5f: PUSH1 0xa0 00000e61: SHL 00000e62: SUB 00000e63: DUP2 00000e64: AND 00000e65: PUSH1 0x00 00000e67: SWAP1 00000e68: DUP2 00000e69: MSTORE 00000e6a: PUSH1 0x0a 00000e6c: PUSH1 0x20 00000e6e: MSTORE 00000e6f: PUSH1 0x40 00000e71: DUP2 00000e72: KECCAK256 00000e73: SLOAD 00000e74: DUP2 00000e75: SWAP1 00000e76: PUSH2 0x0b15 00000e79: SWAP1 00000e7a: PUSH2 0x0e82 00000e7d: DUP6 00000e7e: PUSH2 0x0aba 00000e81: JUMP 00000e82: JUMPDEST 00000e83: SWAP1 00000e84: PUSH2 0x182c 00000e87: JUMP 00000e88: JUMPDEST 00000e89: PUSH1 0x00 00000e8b: PUSH2 0x0a0b 00000e8e: PUSH2 0x0e95 00000e91: PUSH2 0x13e7 00000e94: JUMP 00000e95: JUMPDEST 00000e96: DUP5 00000e97: DUP5 00000e98: PUSH2 0x14f8 00000e9b: JUMP 00000e9c: JUMPDEST 00000e9d: PUSH1 0x01 00000e9f: PUSH1 0x01 00000ea1: PUSH1 0xa0 00000ea3: SHL 00000ea4: SUB 00000ea5: AND 00000ea6: PUSH1 0x00 00000ea8: SWAP1 00000ea9: DUP2 00000eaa: MSTORE 00000eab: PUSH1 0x0a 00000ead: PUSH1 0x20 00000eaf: MSTORE 00000eb0: PUSH1 0x40 00000eb2: SWAP1 00000eb3: KECCAK256 00000eb4: SLOAD 00000eb5: SWAP1 00000eb6: JUMP 00000eb7: JUMPDEST 00000eb8: PUSH32 0x000000000000000000000000000000000000000002d7eb3f96e070d970000000 00000ed9: DUP2 00000eda: JUMP 00000edb: JUMPDEST 00000edc: PUSH1 0x11 00000ede: PUSH1 0x20 00000ee0: MSTORE 00000ee1: PUSH1 0x00 00000ee3: SWAP1 00000ee4: DUP2 00000ee5: MSTORE 00000ee6: PUSH1 0x40 00000ee8: SWAP1 00000ee9: KECCAK256 00000eea: SLOAD 00000eeb: PUSH1 0xff 00000eed: AND 00000eee: DUP2 00000eef: JUMP 00000ef0: JUMPDEST 00000ef1: PUSH1 0x01 00000ef3: PUSH1 0x01 00000ef5: PUSH1 0xa0 00000ef7: SHL 00000ef8: SUB 00000ef9: SWAP2 00000efa: DUP3 00000efb: AND 00000efc: PUSH1 0x00 00000efe: SWAP1 00000eff: DUP2 00000f00: MSTORE 00000f01: PUSH1 0x01 00000f03: PUSH1 0x20 00000f05: SWAP1 00000f06: DUP2 00000f07: MSTORE 00000f08: PUSH1 0x40 00000f0a: DUP1 00000f0b: DUP4 00000f0c: KECCAK256 00000f0d: SWAP4 00000f0e: SWAP1 00000f0f: SWAP5 00000f10: AND 00000f11: DUP3 00000f12: MSTORE 00000f13: SWAP2 00000f14: SWAP1 00000f15: SWAP2 00000f16: MSTORE 00000f17: KECCAK256 00000f18: SLOAD 00000f19: SWAP1 00000f1a: JUMP 00000f1b: JUMPDEST 00000f1c: PUSH2 0x0f23 00000f1f: PUSH2 0x13e7 00000f22: JUMP 00000f23: JUMPDEST 00000f24: PUSH1 0x05 00000f26: SLOAD 00000f27: PUSH1 0x01 00000f29: PUSH1 0x01 00000f2b: PUSH1 0xa0 00000f2d: SHL 00000f2e: SUB 00000f2f: SWAP1 00000f30: DUP2 00000f31: AND 00000f32: SWAP2 00000f33: AND 00000f34: EQ 00000f35: PUSH2 0x0f50 00000f38: JUMPI 00000f39: PUSH1 0x40 00000f3b: MLOAD 00000f3c: PUSH3 0x461bcd 00000f40: PUSH1 0xe5 00000f42: SHL 00000f43: DUP2 00000f44: MSTORE 00000f45: PUSH1 0x04 00000f47: ADD 00000f48: PUSH2 0x0674 00000f4b: SWAP1 00000f4c: PUSH2 0x1fc7 00000f4f: JUMP 00000f50: JUMPDEST 00000f51: PUSH1 0x01 00000f53: PUSH1 0x01 00000f55: PUSH1 0xa0 00000f57: SHL 00000f58: SUB 00000f59: DUP3 00000f5a: AND 00000f5b: PUSH1 0x00 00000f5d: SWAP1 00000f5e: DUP2 00000f5f: MSTORE 00000f60: PUSH1 0x11 00000f62: PUSH1 0x20 00000f64: MSTORE 00000f65: PUSH1 0x40 00000f67: SWAP1 00000f68: KECCAK256 00000f69: SLOAD 00000f6a: PUSH1 0xff 00000f6c: AND 00000f6d: ISZERO 00000f6e: PUSH2 0x0f76 00000f71: JUMPI 00000f72: PUSH2 0x1099 00000f75: JUMP 00000f76: JUMPDEST 00000f77: PUSH32 0x000000000000000000000000000000000000000002d7eb3f96e070d970000000 00000f98: DUP2 00000f99: LT 00000f9a: PUSH2 0x1018 00000f9d: JUMPI 00000f9e: PUSH2 0x0fa7 00000fa1: DUP3 00000fa2: DUP3 00000fa3: PUSH2 0x13eb 00000fa6: JUMP 00000fa7: JUMPDEST 00000fa8: PUSH1 0x40 00000faa: MLOAD 00000fab: PUSH4 0x2f0ad017 00000fb0: PUSH1 0xe2 00000fb2: SHL 00000fb3: DUP2 00000fb4: MSTORE 00000fb5: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 00000fca: SWAP1 00000fcb: PUSH4 0xbc2b405c 00000fd0: SWAP1 00000fd1: PUSH2 0x0fe3 00000fd4: SWAP1 00000fd5: PUSH1 0x0b 00000fd7: SWAP1 00000fd8: DUP7 00000fd9: SWAP1 00000fda: DUP7 00000fdb: SWAP1 00000fdc: PUSH1 0x04 00000fde: ADD 00000fdf: PUSH2 0x218d 00000fe2: JUMP 00000fe3: JUMPDEST 00000fe4: PUSH1 0x00 00000fe6: PUSH1 0x40 00000fe8: MLOAD 00000fe9: DUP1 00000fea: DUP4 00000feb: SUB 00000fec: DUP2 00000fed: DUP7 00000fee: DUP1 00000fef: EXTCODESIZE 00000ff0: ISZERO 00000ff1: DUP1 00000ff2: ISZERO 00000ff3: PUSH2 0x0ffb 00000ff6: JUMPI 00000ff7: PUSH1 0x00 00000ff9: DUP1 00000ffa: REVERT 00000ffb: JUMPDEST 00000ffc: POP 00000ffd: GAS 00000ffe: DELEGATECALL 00000fff: ISZERO 00001000: DUP1 00001001: ISZERO 00001002: PUSH2 0x100f 00001005: JUMPI 00001006: RETURNDATASIZE 00001007: PUSH1 0x00 00001009: DUP1 0000100a: RETURNDATACOPY 0000100b: RETURNDATASIZE 0000100c: PUSH1 0x00 0000100e: REVERT 0000100f: JUMPDEST 00001010: POP 00001011: POP 00001012: POP 00001013: POP 00001014: PUSH2 0x108e 00001017: JUMP 00001018: JUMPDEST 00001019: PUSH2 0x1023 0000101c: DUP3 0000101d: PUSH1 0x00 0000101f: PUSH2 0x13eb 00001022: JUMP 00001023: JUMPDEST 00001024: PUSH1 0x40 00001026: MLOAD 00001027: PUSH4 0x131836e7 0000102c: PUSH1 0xe2 0000102e: SHL 0000102f: DUP2 00001030: MSTORE 00001031: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 00001046: SWAP1 00001047: PUSH4 0x4c60db9c 0000104c: SWAP1 0000104d: PUSH2 0x105d 00001050: SWAP1 00001051: PUSH1 0x0b 00001053: SWAP1 00001054: DUP7 00001055: SWAP1 00001056: PUSH1 0x04 00001058: ADD 00001059: PUSH2 0x2176 0000105c: JUMP 0000105d: JUMPDEST 0000105e: PUSH1 0x00 00001060: PUSH1 0x40 00001062: MLOAD 00001063: DUP1 00001064: DUP4 00001065: SUB 00001066: DUP2 00001067: DUP7 00001068: DUP1 00001069: EXTCODESIZE 0000106a: ISZERO 0000106b: DUP1 0000106c: ISZERO 0000106d: PUSH2 0x1075 00001070: JUMPI 00001071: PUSH1 0x00 00001073: DUP1 00001074: REVERT 00001075: JUMPDEST 00001076: POP 00001077: GAS 00001078: DELEGATECALL 00001079: ISZERO 0000107a: DUP1 0000107b: ISZERO 0000107c: PUSH2 0x1089 0000107f: JUMPI 00001080: RETURNDATASIZE 00001081: PUSH1 0x00 00001083: DUP1 00001084: RETURNDATACOPY 00001085: RETURNDATASIZE 00001086: PUSH1 0x00 00001088: REVERT 00001089: JUMPDEST 0000108a: POP 0000108b: POP 0000108c: POP 0000108d: POP 0000108e: JUMPDEST 0000108f: PUSH2 0x1097 00001092: DUP3 00001093: PUSH2 0x186e 00001096: JUMP 00001097: JUMPDEST 00001098: POP 00001099: JUMPDEST 0000109a: POP 0000109b: POP 0000109c: JUMP 0000109d: JUMPDEST 0000109e: PUSH1 0x0f 000010a0: SLOAD 000010a1: SWAP1 000010a2: JUMP 000010a3: JUMPDEST 000010a4: PUSH2 0x10ab 000010a7: PUSH2 0x13e7 000010aa: JUMP 000010ab: JUMPDEST 000010ac: PUSH1 0x05 000010ae: SLOAD 000010af: PUSH1 0x01 000010b1: PUSH1 0x01 000010b3: PUSH1 0xa0 000010b5: SHL 000010b6: SUB 000010b7: SWAP1 000010b8: DUP2 000010b9: AND 000010ba: SWAP2 000010bb: AND 000010bc: EQ 000010bd: PUSH2 0x10d8 000010c0: JUMPI 000010c1: PUSH1 0x40 000010c3: MLOAD 000010c4: PUSH3 0x461bcd 000010c8: PUSH1 0xe5 000010ca: SHL 000010cb: DUP2 000010cc: MSTORE 000010cd: PUSH1 0x04 000010cf: ADD 000010d0: PUSH2 0x0674 000010d3: SWAP1 000010d4: PUSH2 0x1fc7 000010d7: JUMP 000010d8: JUMPDEST 000010d9: PUSH2 0x0708 000010dc: DUP2 000010dd: LT 000010de: ISZERO 000010df: DUP1 000010e0: ISZERO 000010e1: PUSH2 0x10ed 000010e4: JUMPI 000010e5: POP 000010e6: PUSH3 0x015180 000010ea: DUP2 000010eb: GT 000010ec: ISZERO 000010ed: JUMPDEST 000010ee: PUSH2 0x1109 000010f1: JUMPI 000010f2: PUSH1 0x40 000010f4: MLOAD 000010f5: PUSH3 0x461bcd 000010f9: PUSH1 0xe5 000010fb: SHL 000010fc: DUP2 000010fd: MSTORE 000010fe: PUSH1 0x04 00001100: ADD 00001101: PUSH2 0x0674 00001104: SWAP1 00001105: PUSH2 0x1eec 00001108: JUMP 00001109: JUMPDEST 0000110a: PUSH1 0x10 0000110c: SLOAD 0000110d: DUP2 0000110e: EQ 0000110f: ISZERO 00001110: PUSH2 0x112b 00001113: JUMPI 00001114: PUSH1 0x40 00001116: MLOAD 00001117: PUSH3 0x461bcd 0000111b: PUSH1 0xe5 0000111d: SHL 0000111e: DUP2 0000111f: MSTORE 00001120: PUSH1 0x04 00001122: ADD 00001123: PUSH2 0x0674 00001126: SWAP1 00001127: PUSH2 0x1d65 0000112a: JUMP 0000112b: JUMPDEST 0000112c: PUSH1 0x10 0000112e: SLOAD 0000112f: PUSH1 0x40 00001131: MLOAD 00001132: DUP3 00001133: SWAP1 00001134: PUSH32 0x474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f 00001155: SWAP1 00001156: PUSH1 0x00 00001158: SWAP1 00001159: LOG3 0000115a: PUSH1 0x10 0000115c: SSTORE 0000115d: JUMP 0000115e: JUMPDEST 0000115f: PUSH2 0x1166 00001162: PUSH2 0x13e7 00001165: JUMP 00001166: JUMPDEST 00001167: PUSH1 0x05 00001169: SLOAD 0000116a: PUSH1 0x01 0000116c: PUSH1 0x01 0000116e: PUSH1 0xa0 00001170: SHL 00001171: SUB 00001172: SWAP1 00001173: DUP2 00001174: AND 00001175: SWAP2 00001176: AND 00001177: EQ 00001178: PUSH2 0x1193 0000117b: JUMPI 0000117c: PUSH1 0x40 0000117e: MLOAD 0000117f: PUSH3 0x461bcd 00001183: PUSH1 0xe5 00001185: SHL 00001186: DUP2 00001187: MSTORE 00001188: PUSH1 0x04 0000118a: ADD 0000118b: PUSH2 0x0674 0000118e: SWAP1 0000118f: PUSH2 0x1fc7 00001192: JUMP 00001193: JUMPDEST 00001194: PUSH1 0x01 00001196: PUSH1 0x01 00001198: PUSH1 0xa0 0000119a: SHL 0000119b: SUB 0000119c: DUP2 0000119d: AND 0000119e: PUSH2 0x11b9 000011a1: JUMPI 000011a2: PUSH1 0x40 000011a4: MLOAD 000011a5: PUSH3 0x461bcd 000011a9: PUSH1 0xe5 000011ab: SHL 000011ac: DUP2 000011ad: MSTORE 000011ae: PUSH1 0x04 000011b0: ADD 000011b1: PUSH2 0x0674 000011b4: SWAP1 000011b5: PUSH2 0x1df6 000011b8: JUMP 000011b9: JUMPDEST 000011ba: PUSH1 0x05 000011bc: SLOAD 000011bd: PUSH1 0x40 000011bf: MLOAD 000011c0: PUSH1 0x01 000011c2: PUSH1 0x01 000011c4: PUSH1 0xa0 000011c6: SHL 000011c7: SUB 000011c8: DUP1 000011c9: DUP5 000011ca: AND 000011cb: SWAP3 000011cc: AND 000011cd: SWAP1 000011ce: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000011ef: SWAP1 000011f0: PUSH1 0x00 000011f2: SWAP1 000011f3: LOG3 000011f4: PUSH1 0x05 000011f6: DUP1 000011f7: SLOAD 000011f8: PUSH1 0x01 000011fa: PUSH1 0x01 000011fc: PUSH1 0xa0 000011fe: SHL 000011ff: SUB 00001200: NOT 00001201: AND 00001202: PUSH1 0x01 00001204: PUSH1 0x01 00001206: PUSH1 0xa0 00001208: SHL 00001209: SUB 0000120a: SWAP3 0000120b: SWAP1 0000120c: SWAP3 0000120d: AND 0000120e: SWAP2 0000120f: SWAP1 00001210: SWAP2 00001211: OR 00001212: SWAP1 00001213: SSTORE 00001214: JUMP 00001215: JUMPDEST 00001216: PUSH1 0x00 00001218: DUP1 00001219: PUSH1 0x00 0000121b: DUP1 0000121c: PUSH1 0x00 0000121e: DUP1 0000121f: PUSH1 0x00 00001221: DUP1 00001222: PUSH2 0x122a 00001225: DUP10 00001226: PUSH2 0x15e4 00001229: JUMP 0000122a: JUMPDEST 0000122b: SWAP8 0000122c: POP 0000122d: SWAP8 0000122e: POP 0000122f: SWAP8 00001230: POP 00001231: SWAP8 00001232: POP 00001233: SWAP8 00001234: POP 00001235: SWAP8 00001236: POP 00001237: SWAP8 00001238: POP 00001239: SWAP8 0000123a: POP 0000123b: SWAP2 0000123c: SWAP4 0000123d: SWAP6 0000123e: SWAP8 0000123f: POP 00001240: SWAP2 00001241: SWAP4 00001242: SWAP6 00001243: SWAP8 00001244: JUMP 00001245: JUMPDEST 00001246: PUSH1 0x0b 00001248: SLOAD 00001249: PUSH1 0x00 0000124b: SWAP1 0000124c: DUP2 0000124d: SWAP1 0000124e: DUP2 0000124f: SWAP1 00001250: DUP1 00001251: PUSH2 0x1265 00001254: JUMPI 00001255: POP 00001256: POP 00001257: PUSH1 0x0f 00001259: SLOAD 0000125a: PUSH1 0x00 0000125c: SWAP3 0000125d: POP 0000125e: DUP3 0000125f: SWAP2 00001260: POP 00001261: PUSH2 0x1365 00001264: JUMP 00001265: JUMPDEST 00001266: PUSH1 0x0f 00001268: SLOAD 00001269: PUSH1 0x00 0000126b: DUP1 0000126c: GAS 0000126d: SWAP1 0000126e: POP 0000126f: PUSH1 0x00 00001271: DUP1 00001272: JUMPDEST 00001273: DUP10 00001274: DUP5 00001275: LT 00001276: DUP1 00001277: ISZERO 00001278: PUSH2 0x1280 0000127b: JUMPI 0000127c: POP 0000127d: DUP6 0000127e: DUP3 0000127f: LT 00001280: JUMPDEST 00001281: ISZERO 00001282: PUSH2 0x1354 00001285: JUMPI 00001286: DUP5 00001287: PUSH2 0x128f 0000128a: DUP2 0000128b: PUSH2 0x2307 0000128e: JUMP 0000128f: JUMPDEST 00001290: PUSH1 0x0b 00001292: SLOAD 00001293: SWAP1 00001294: SWAP7 00001295: POP 00001296: DUP7 00001297: LT 00001298: SWAP1 00001299: POP 0000129a: PUSH2 0x12a2 0000129d: JUMPI 0000129e: PUSH1 0x00 000012a0: SWAP5 000012a1: POP 000012a2: JUMPDEST 000012a3: PUSH1 0x00 000012a5: PUSH1 0x0b 000012a7: PUSH1 0x00 000012a9: ADD 000012aa: DUP7 000012ab: DUP2 000012ac: SLOAD 000012ad: DUP2 000012ae: LT 000012af: PUSH2 0x12c8 000012b2: JUMPI 000012b3: PUSH4 0x4e487b71 000012b8: PUSH1 0xe0 000012ba: SHL 000012bb: PUSH1 0x00 000012bd: MSTORE 000012be: PUSH1 0x32 000012c0: PUSH1 0x04 000012c2: MSTORE 000012c3: PUSH1 0x24 000012c5: PUSH1 0x00 000012c7: REVERT 000012c8: JUMPDEST 000012c9: PUSH1 0x00 000012cb: SWAP2 000012cc: DUP3 000012cd: MSTORE 000012ce: PUSH1 0x20 000012d0: DUP1 000012d1: DUP4 000012d2: KECCAK256 000012d3: SWAP1 000012d4: SWAP2 000012d5: ADD 000012d6: SLOAD 000012d7: PUSH1 0x01 000012d9: PUSH1 0x01 000012db: PUSH1 0xa0 000012dd: SHL 000012de: SUB 000012df: AND 000012e0: DUP1 000012e1: DUP4 000012e2: MSTORE 000012e3: PUSH1 0x12 000012e5: SWAP1 000012e6: SWAP2 000012e7: MSTORE 000012e8: PUSH1 0x40 000012ea: SWAP1 000012eb: SWAP2 000012ec: KECCAK256 000012ed: SLOAD 000012ee: SWAP1 000012ef: SWAP2 000012f0: POP 000012f1: PUSH2 0x12f9 000012f4: SWAP1 000012f5: PUSH2 0x18a6 000012f8: JUMP 000012f9: JUMPDEST 000012fa: ISZERO 000012fb: PUSH2 0x131a 000012fe: JUMPI 000012ff: PUSH2 0x1307 00001302: DUP2 00001303: PUSH2 0x186e 00001306: JUMP 00001307: JUMPDEST 00001308: ISZERO 00001309: PUSH2 0x131a 0000130c: JUMPI 0000130d: DUP2 0000130e: PUSH2 0x1316 00001311: DUP2 00001312: PUSH2 0x2307 00001315: JUMP 00001316: JUMPDEST 00001317: SWAP3 00001318: POP 00001319: POP 0000131a: JUMPDEST 0000131b: DUP3 0000131c: PUSH2 0x1324 0000131f: DUP2 00001320: PUSH2 0x2307 00001323: JUMP 00001324: JUMPDEST 00001325: SWAP4 00001326: POP 00001327: POP 00001328: PUSH1 0x00 0000132a: GAS 0000132b: SWAP1 0000132c: POP 0000132d: DUP1 0000132e: DUP6 0000132f: GT 00001330: ISZERO 00001331: PUSH2 0x134b 00001334: JUMPI 00001335: PUSH2 0x1348 00001338: PUSH2 0x1341 0000133b: DUP7 0000133c: DUP4 0000133d: PUSH2 0x182c 00001340: JUMP 00001341: JUMPDEST 00001342: DUP8 00001343: SWAP1 00001344: PUSH2 0x13b8 00001347: JUMP 00001348: JUMPDEST 00001349: SWAP6 0000134a: POP 0000134b: JUMPDEST 0000134c: SWAP4 0000134d: POP 0000134e: PUSH2 0x1272 00001351: SWAP1 00001352: POP 00001353: JUMP 00001354: JUMPDEST 00001355: PUSH1 0x0f 00001357: DUP6 00001358: SWAP1 00001359: SSTORE 0000135a: SWAP1 0000135b: SWAP8 0000135c: POP 0000135d: SWAP6 0000135e: POP 0000135f: SWAP2 00001360: SWAP4 00001361: POP 00001362: POP 00001363: POP 00001364: POP 00001365: JUMPDEST 00001366: SWAP2 00001367: SWAP4 00001368: SWAP1 00001369: SWAP3 0000136a: POP 0000136b: JUMP 0000136c: JUMPDEST 0000136d: PUSH1 0x00 0000136f: DUP3 00001370: PUSH2 0x137b 00001373: JUMPI 00001374: POP 00001375: PUSH1 0x00 00001377: PUSH2 0x0a0f 0000137a: JUMP 0000137b: JUMPDEST 0000137c: PUSH1 0x00 0000137e: PUSH2 0x1387 00001381: DUP4 00001382: DUP6 00001383: PUSH2 0x2257 00001386: JUMP 00001387: JUMPDEST 00001388: SWAP1 00001389: POP 0000138a: DUP3 0000138b: PUSH2 0x1394 0000138e: DUP6 0000138f: DUP4 00001390: PUSH2 0x2237 00001393: JUMP 00001394: JUMPDEST 00001395: EQ 00001396: PUSH2 0x13b1 00001399: JUMPI 0000139a: PUSH1 0x40 0000139c: MLOAD 0000139d: PUSH3 0x461bcd 000013a1: PUSH1 0xe5 000013a3: SHL 000013a4: DUP2 000013a5: MSTORE 000013a6: PUSH1 0x04 000013a8: ADD 000013a9: PUSH2 0x0674 000013ac: SWAP1 000013ad: PUSH2 0x1f86 000013b0: JUMP 000013b1: JUMPDEST 000013b2: SWAP4 000013b3: SWAP3 000013b4: POP 000013b5: POP 000013b6: POP 000013b7: JUMP 000013b8: JUMPDEST 000013b9: PUSH1 0x00 000013bb: DUP1 000013bc: PUSH2 0x13c5 000013bf: DUP4 000013c0: DUP6 000013c1: PUSH2 0x221f 000013c4: JUMP 000013c5: JUMPDEST 000013c6: SWAP1 000013c7: POP 000013c8: DUP4 000013c9: DUP2 000013ca: LT 000013cb: ISZERO 000013cc: PUSH2 0x13b1 000013cf: JUMPI 000013d0: PUSH1 0x40 000013d2: MLOAD 000013d3: PUSH3 0x461bcd 000013d7: PUSH1 0xe5 000013d9: SHL 000013da: DUP2 000013db: MSTORE 000013dc: PUSH1 0x04 000013de: ADD 000013df: PUSH2 0x0674 000013e2: SWAP1 000013e3: PUSH2 0x1e7e 000013e6: JUMP 000013e7: JUMPDEST 000013e8: CALLER 000013e9: SWAP1 000013ea: JUMP 000013eb: JUMPDEST 000013ec: PUSH1 0x00 000013ee: PUSH2 0x13f6 000013f1: DUP4 000013f2: PUSH2 0x0d20 000013f5: JUMP 000013f6: JUMPDEST 000013f7: SWAP1 000013f8: POP 000013f9: DUP1 000013fa: DUP3 000013fb: GT 000013fc: ISZERO 000013fd: PUSH2 0x141e 00001400: JUMPI 00001401: PUSH1 0x00 00001403: PUSH2 0x140c 00001406: DUP4 00001407: DUP4 00001408: PUSH2 0x182c 0000140b: JUMP 0000140c: JUMPDEST 0000140d: SWAP1 0000140e: POP 0000140f: PUSH2 0x1418 00001412: DUP5 00001413: DUP3 00001414: PUSH2 0x18cd 00001417: JUMP 00001418: JUMPDEST 00001419: POP 0000141a: PUSH2 0x1097 0000141d: JUMP 0000141e: JUMPDEST 0000141f: DUP1 00001420: DUP3 00001421: LT 00001422: ISZERO 00001423: PUSH2 0x1097 00001426: JUMPI 00001427: PUSH1 0x00 00001429: PUSH2 0x1432 0000142c: DUP3 0000142d: DUP5 0000142e: PUSH2 0x182c 00001431: JUMP 00001432: JUMPDEST 00001433: SWAP1 00001434: POP 00001435: PUSH2 0x143e 00001438: DUP5 00001439: DUP3 0000143a: PUSH2 0x1934 0000143d: JUMP 0000143e: JUMPDEST 0000143f: POP 00001440: POP 00001441: POP 00001442: POP 00001443: JUMP 00001444: JUMPDEST 00001445: PUSH1 0x01 00001447: PUSH1 0x01 00001449: PUSH1 0xa0 0000144b: SHL 0000144c: SUB 0000144d: DUP4 0000144e: AND 0000144f: PUSH2 0x146a 00001452: JUMPI 00001453: PUSH1 0x40 00001455: MLOAD 00001456: PUSH3 0x461bcd 0000145a: PUSH1 0xe5 0000145c: SHL 0000145d: DUP2 0000145e: MSTORE 0000145f: PUSH1 0x04 00001461: ADD 00001462: PUSH2 0x0674 00001465: SWAP1 00001466: PUSH2 0x206c 00001469: JUMP 0000146a: JUMPDEST 0000146b: PUSH1 0x01 0000146d: PUSH1 0x01 0000146f: PUSH1 0xa0 00001471: SHL 00001472: SUB 00001473: DUP3 00001474: AND 00001475: PUSH2 0x1490 00001478: JUMPI 00001479: PUSH1 0x40 0000147b: MLOAD 0000147c: PUSH3 0x461bcd 00001480: PUSH1 0xe5 00001482: SHL 00001483: DUP2 00001484: MSTORE 00001485: PUSH1 0x04 00001487: ADD 00001488: PUSH2 0x0674 0000148b: SWAP1 0000148c: PUSH2 0x1e3c 0000148f: JUMP 00001490: JUMPDEST 00001491: PUSH1 0x01 00001493: PUSH1 0x01 00001495: PUSH1 0xa0 00001497: SHL 00001498: SUB 00001499: DUP1 0000149a: DUP5 0000149b: AND 0000149c: PUSH1 0x00 0000149e: DUP2 0000149f: DUP2 000014a0: MSTORE 000014a1: PUSH1 0x01 000014a3: PUSH1 0x20 000014a5: SWAP1 000014a6: DUP2 000014a7: MSTORE 000014a8: PUSH1 0x40 000014aa: DUP1 000014ab: DUP4 000014ac: KECCAK256 000014ad: SWAP5 000014ae: DUP8 000014af: AND 000014b0: DUP1 000014b1: DUP5 000014b2: MSTORE 000014b3: SWAP5 000014b4: SWAP1 000014b5: SWAP2 000014b6: MSTORE 000014b7: SWAP1 000014b8: DUP2 000014b9: SWAP1 000014ba: KECCAK256 000014bb: DUP5 000014bc: SWAP1 000014bd: SSTORE 000014be: MLOAD 000014bf: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 000014e0: SWAP1 000014e1: PUSH2 0x14eb 000014e4: SWAP1 000014e5: DUP6 000014e6: SWAP1 000014e7: PUSH2 0x216d 000014ea: JUMP 000014eb: JUMPDEST 000014ec: PUSH1 0x40 000014ee: MLOAD 000014ef: DUP1 000014f0: SWAP2 000014f1: SUB 000014f2: SWAP1 000014f3: LOG3 000014f4: POP 000014f5: POP 000014f6: POP 000014f7: JUMP 000014f8: JUMPDEST 000014f9: PUSH1 0x40 000014fb: MLOAD 000014fc: PUSH3 0x461bcd 00001500: PUSH1 0xe5 00001502: SHL 00001503: DUP2 00001504: MSTORE 00001505: PUSH1 0x04 00001507: ADD 00001508: PUSH2 0x0674 0000150b: SWAP1 0000150c: PUSH2 0x1f5a 0000150f: JUMP 00001510: JUMPDEST 00001511: PUSH1 0x00 00001513: DUP2 00001514: DUP5 00001515: DUP5 00001516: GT 00001517: ISZERO 00001518: PUSH2 0x1534 0000151b: JUMPI 0000151c: PUSH1 0x40 0000151e: MLOAD 0000151f: PUSH3 0x461bcd 00001523: PUSH1 0xe5 00001525: SHL 00001526: DUP2 00001527: MSTORE 00001528: PUSH1 0x04 0000152a: ADD 0000152b: PUSH2 0x0674 0000152e: SWAP2 0000152f: SWAP1 00001530: PUSH2 0x1d12 00001533: JUMP 00001534: JUMPDEST 00001535: POP 00001536: PUSH1 0x00 00001538: PUSH2 0x1541 0000153b: DUP5 0000153c: DUP7 0000153d: PUSH2 0x22b5 00001540: JUMP 00001541: JUMPDEST 00001542: SWAP6 00001543: SWAP5 00001544: POP 00001545: POP 00001546: POP 00001547: POP 00001548: POP 00001549: JUMP 0000154a: JUMPDEST 0000154b: PUSH1 0x00 0000154d: DUP2 0000154e: DUP2 0000154f: DUP2 00001550: SLT 00001551: ISZERO 00001552: PUSH2 0x0a0f 00001555: JUMPI 00001556: PUSH1 0x40 00001558: MLOAD 00001559: PUSH3 0x461bcd 0000155d: PUSH1 0xe5 0000155f: SHL 00001560: DUP2 00001561: MSTORE 00001562: PUSH1 0x04 00001564: ADD 00001565: PUSH2 0x0674 00001568: SWAP1 00001569: PUSH2 0x1dbf 0000156c: JUMP 0000156d: JUMPDEST 0000156e: PUSH1 0x00 00001570: DUP1 00001571: PUSH2 0x157a 00001574: DUP4 00001575: DUP6 00001576: PUSH2 0x21de 00001579: JUMP 0000157a: JUMPDEST 0000157b: SWAP1 0000157c: POP 0000157d: PUSH1 0x00 0000157f: DUP4 00001580: SLT 00001581: ISZERO 00001582: DUP1 00001583: ISZERO 00001584: PUSH2 0x158d 00001587: JUMPI 00001588: POP 00001589: DUP4 0000158a: DUP2 0000158b: SLT 0000158c: ISZERO 0000158d: JUMPDEST 0000158e: DUP1 0000158f: PUSH2 0x15a2 00001592: JUMPI 00001593: POP 00001594: PUSH1 0x00 00001596: DUP4 00001597: SLT 00001598: DUP1 00001599: ISZERO 0000159a: PUSH2 0x15a2 0000159d: JUMPI 0000159e: POP 0000159f: DUP4 000015a0: DUP2 000015a1: SLT 000015a2: JUMPDEST 000015a3: PUSH2 0x13b1 000015a6: JUMPI 000015a7: PUSH1 0x40 000015a9: MLOAD 000015aa: PUSH3 0x461bcd 000015ae: PUSH1 0xe5 000015b0: SHL 000015b1: DUP2 000015b2: MSTORE 000015b3: PUSH1 0x04 000015b5: ADD 000015b6: PUSH2 0x0674 000015b9: SWAP1 000015ba: PUSH2 0x20b0 000015bd: JUMP 000015be: JUMPDEST 000015bf: PUSH1 0x00 000015c1: DUP1 000015c2: DUP3 000015c3: SLT 000015c4: ISZERO 000015c5: PUSH2 0x15e0 000015c8: JUMPI 000015c9: PUSH1 0x40 000015cb: MLOAD 000015cc: PUSH3 0x461bcd 000015d0: PUSH1 0xe5 000015d2: SHL 000015d3: DUP2 000015d4: MSTORE 000015d5: PUSH1 0x04 000015d7: ADD 000015d8: PUSH2 0x0674 000015db: SWAP1 000015dc: PUSH2 0x1ffc 000015df: JUMP 000015e0: JUMPDEST 000015e1: POP 000015e2: SWAP1 000015e3: JUMP 000015e4: JUMPDEST 000015e5: PUSH1 0x00 000015e7: DUP1 000015e8: PUSH1 0x00 000015ea: DUP1 000015eb: PUSH1 0x00 000015ed: DUP1 000015ee: PUSH1 0x00 000015f0: DUP1 000015f1: DUP9 000015f2: SWAP8 000015f3: POP 000015f4: PUSH1 0x0b 000015f6: PUSH20 0x95fcc6006d2a7c02e0eae2859299efa04ee16d19 0000160b: PUSH4 0x17e142d1 00001610: SWAP1 00001611: SWAP2 00001612: DUP11 00001613: PUSH1 0x40 00001615: MLOAD 00001616: DUP4 00001617: PUSH4 0xffffffff 0000161c: AND 0000161d: PUSH1 0xe0 0000161f: SHL 00001620: DUP2 00001621: MSTORE 00001622: PUSH1 0x04 00001624: ADD 00001625: PUSH2 0x162f 00001628: SWAP3 00001629: SWAP2 0000162a: SWAP1 0000162b: PUSH2 0x2176 0000162e: JUMP 0000162f: JUMPDEST 00001630: PUSH1 0x20 00001632: PUSH1 0x40 00001634: MLOAD 00001635: DUP1 00001636: DUP4 00001637: SUB 00001638: DUP2 00001639: DUP7 0000163a: DUP1 0000163b: EXTCODESIZE 0000163c: ISZERO 0000163d: DUP1 0000163e: ISZERO 0000163f: PUSH2 0x1647 00001642: JUMPI 00001643: PUSH1 0x00 00001645: DUP1 00001646: REVERT 00001647: JUMPDEST 00001648: POP 00001649: GAS 0000164a: DELEGATECALL 0000164b: ISZERO 0000164c: DUP1 0000164d: ISZERO 0000164e: PUSH2 0x165b 00001651: JUMPI 00001652: RETURNDATASIZE 00001653: PUSH1 0x00 00001655: DUP1 00001656: RETURNDATACOPY 00001657: RETURNDATASIZE 00001658: PUSH1 0x00 0000165a: REVERT 0000165b: JUMPDEST 0000165c: POP 0000165d: POP 0000165e: POP 0000165f: POP 00001660: PUSH1 0x40 00001662: MLOAD 00001663: RETURNDATASIZE 00001664: PUSH1 0x1f 00001666: NOT 00001667: PUSH1 0x1f 00001669: DUP3 0000166a: ADD 0000166b: AND 0000166c: DUP3 0000166d: ADD 0000166e: DUP1 0000166f: PUSH1 0x40 00001671: MSTORE 00001672: POP 00001673: DUP2 00001674: ADD 00001675: SWAP1 00001676: PUSH2 0x167f 00001679: SWAP2 0000167a: SWAP1 0000167b: PUSH2 0x1c7f 0000167e: JUMP 0000167f: JUMPDEST 00001680: SWAP7 00001681: POP 00001682: PUSH1 0x00 00001684: NOT 00001685: SWAP6 00001686: POP 00001687: PUSH1 0x00 00001689: DUP8 0000168a: SLT 0000168b: PUSH2 0x16e1 0000168e: JUMPI 0000168f: PUSH1 0x0f 00001691: SLOAD 00001692: DUP8 00001693: GT 00001694: ISZERO 00001695: PUSH2 0x16ad 00001698: JUMPI 00001699: PUSH1 0x0f 0000169b: SLOAD 0000169c: PUSH2 0x16a6 0000169f: SWAP1 000016a0: DUP9 000016a1: SWAP1 000016a2: PUSH2 0x197a 000016a5: JUMP 000016a6: JUMPDEST 000016a7: SWAP6 000016a8: POP 000016a9: PUSH2 0x16e1 000016ac: JUMP 000016ad: JUMPDEST 000016ae: PUSH1 0x0f 000016b0: SLOAD 000016b1: PUSH1 0x0b 000016b3: SLOAD 000016b4: PUSH1 0x00 000016b6: SWAP2 000016b7: LT 000016b8: PUSH2 0x16c2 000016bb: JUMPI 000016bc: PUSH1 0x00 000016be: PUSH2 0x16d1 000016c1: JUMP 000016c2: JUMPDEST 000016c3: PUSH1 0x0f 000016c5: SLOAD 000016c6: PUSH1 0x0b 000016c8: SLOAD 000016c9: PUSH2 0x16d1 000016cc: SWAP2 000016cd: PUSH2 0x182c 000016d0: JUMP 000016d1: JUMPDEST 000016d2: SWAP1 000016d3: POP 000016d4: PUSH2 0x16dd 000016d7: DUP9 000016d8: DUP3 000016d9: PUSH2 0x156d 000016dc: JUMP 000016dd: JUMPDEST 000016de: SWAP7 000016df: POP 000016e0: POP 000016e1: JUMPDEST 000016e2: PUSH2 0x16ea 000016e5: DUP9 000016e6: PUSH2 0x0e5a 000016e9: JUMP 000016ea: JUMPDEST 000016eb: SWAP5 000016ec: POP 000016ed: PUSH2 0x16f5 000016f0: DUP9 000016f1: PUSH2 0x0aba 000016f4: JUMP 000016f5: JUMPDEST 000016f6: PUSH1 0x01 000016f8: PUSH1 0x01 000016fa: PUSH1 0xa0 000016fc: SHL 000016fd: SUB 000016fe: DUP10 000016ff: AND 00001700: PUSH1 0x00 00001702: SWAP1 00001703: DUP2 00001704: MSTORE 00001705: PUSH1 0x12 00001707: PUSH1 0x20 00001709: MSTORE 0000170a: PUSH1 0x40 0000170c: SWAP1 0000170d: KECCAK256 0000170e: SLOAD 0000170f: SWAP1 00001710: SWAP5 00001711: POP 00001712: SWAP3 00001713: POP 00001714: DUP3 00001715: PUSH2 0x171f 00001718: JUMPI 00001719: PUSH1 0x00 0000171b: PUSH2 0x172d 0000171e: JUMP 0000171f: JUMPDEST 00001720: PUSH1 0x10 00001722: SLOAD 00001723: PUSH2 0x172d 00001726: SWAP1 00001727: DUP5 00001728: SWAP1 00001729: PUSH2 0x13b8 0000172c: JUMP 0000172d: JUMPDEST 0000172e: SWAP2 0000172f: POP 00001730: TIMESTAMP 00001731: DUP3 00001732: GT 00001733: PUSH2 0x173d 00001736: JUMPI 00001737: PUSH1 0x00 00001739: PUSH2 0x1747 0000173c: JUMP 0000173d: JUMPDEST 0000173e: PUSH2 0x1747 00001741: DUP3 00001742: TIMESTAMP 00001743: PUSH2 0x182c 00001746: JUMP 00001747: JUMPDEST 00001748: SWAP1 00001749: POP 0000174a: SWAP2 0000174b: SWAP4 0000174c: SWAP6 0000174d: SWAP8 0000174e: POP 0000174f: SWAP2 00001750: SWAP4 00001751: SWAP6 00001752: SWAP8 00001753: JUMP 00001754: JUMPDEST 00001755: PUSH1 0x00 00001757: DUP1 00001758: PUSH2 0x1760 0000175b: DUP4 0000175c: PUSH2 0x0e5a 0000175f: JUMP 00001760: JUMPDEST 00001761: SWAP1 00001762: POP 00001763: DUP1 00001764: ISZERO 00001765: PUSH2 0x1823 00001768: JUMPI 00001769: PUSH1 0x01 0000176b: PUSH1 0x01 0000176d: PUSH1 0xa0 0000176f: SHL 00001770: SUB 00001771: DUP4 00001772: AND 00001773: PUSH1 0x00 00001775: SWAP1 00001776: DUP2 00001777: MSTORE 00001778: PUSH1 0x0a 0000177a: PUSH1 0x20 0000177c: MSTORE 0000177d: PUSH1 0x40 0000177f: DUP2 00001780: KECCAK256 00001781: SLOAD 00001782: PUSH2 0x178b 00001785: SWAP1 00001786: DUP4 00001787: PUSH2 0x13b8 0000178a: JUMP 0000178b: JUMPDEST 0000178c: SWAP1 0000178d: POP 0000178e: PUSH1 0x00 00001790: DUP5 00001791: PUSH1 0x01 00001793: PUSH1 0x01 00001795: PUSH1 0xa0 00001797: SHL 00001798: SUB 00001799: AND 0000179a: DUP4 0000179b: PUSH2 0x0bb8 0000179e: SWAP1 0000179f: PUSH1 0x40 000017a1: MLOAD 000017a2: PUSH2 0x17aa 000017a5: SWAP1 000017a6: PUSH2 0x1caf 000017a9: JUMP 000017aa: JUMPDEST 000017ab: PUSH1 0x00 000017ad: PUSH1 0x40 000017af: MLOAD 000017b0: DUP1 000017b1: DUP4 000017b2: SUB 000017b3: DUP2 000017b4: DUP6 000017b5: DUP9 000017b6: DUP9 000017b7: CALL 000017b8: SWAP4 000017b9: POP 000017ba: POP 000017bb: POP 000017bc: POP 000017bd: RETURNDATASIZE 000017be: DUP1 000017bf: PUSH1 0x00 000017c1: DUP2 000017c2: EQ 000017c3: PUSH2 0x17e8 000017c6: JUMPI 000017c7: PUSH1 0x40 000017c9: MLOAD 000017ca: SWAP2 000017cb: POP 000017cc: PUSH1 0x1f 000017ce: NOT 000017cf: PUSH1 0x3f 000017d1: RETURNDATASIZE 000017d2: ADD 000017d3: AND 000017d4: DUP3 000017d5: ADD 000017d6: PUSH1 0x40 000017d8: MSTORE 000017d9: RETURNDATASIZE 000017da: DUP3 000017db: MSTORE 000017dc: RETURNDATASIZE 000017dd: PUSH1 0x00 000017df: PUSH1 0x20 000017e1: DUP5 000017e2: ADD 000017e3: RETURNDATACOPY 000017e4: PUSH2 0x17ed 000017e7: JUMP 000017e8: JUMPDEST 000017e9: PUSH1 0x60 000017eb: SWAP2 000017ec: POP 000017ed: JUMPDEST 000017ee: POP 000017ef: POP 000017f0: SWAP1 000017f1: POP 000017f2: DUP1 000017f3: PUSH2 0x1802 000017f6: JUMPI 000017f7: PUSH1 0x00 000017f9: SWAP4 000017fa: POP 000017fb: POP 000017fc: POP 000017fd: POP 000017fe: PUSH2 0x0b19 00001801: JUMP 00001802: JUMPDEST 00001803: POP 00001804: PUSH1 0x01 00001806: PUSH1 0x01 00001808: PUSH1 0xa0 0000180a: SHL 0000180b: SUB 0000180c: DUP5 0000180d: AND 0000180e: PUSH1 0x00 00001810: SWAP1 00001811: DUP2 00001812: MSTORE 00001813: PUSH1 0x0a 00001815: PUSH1 0x20 00001817: MSTORE 00001818: PUSH1 0x40 0000181a: SWAP1 0000181b: KECCAK256 0000181c: SSTORE 0000181d: SWAP1 0000181e: POP 0000181f: PUSH2 0x0b19 00001822: JUMP 00001823: JUMPDEST 00001824: POP 00001825: PUSH1 0x00 00001827: SWAP3 00001828: SWAP2 00001829: POP 0000182a: POP 0000182b: JUMP 0000182c: JUMPDEST 0000182d: PUSH1 0x00 0000182f: PUSH2 0x13b1 00001832: DUP4 00001833: DUP4 00001834: PUSH1 0x40 00001836: MLOAD 00001837: DUP1 00001838: PUSH1 0x40 0000183a: ADD 0000183b: PUSH1 0x40 0000183d: MSTORE 0000183e: DUP1 0000183f: PUSH1 0x1e 00001841: DUP2 00001842: MSTORE 00001843: PUSH1 0x20 00001845: ADD 00001846: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000 00001867: DUP2 00001868: MSTORE 00001869: POP 0000186a: PUSH2 0x1510 0000186d: JUMP 0000186e: JUMPDEST 0000186f: PUSH1 0x00 00001871: DUP1 00001872: PUSH2 0x187a 00001875: DUP4 00001876: PUSH2 0x1754 00001879: JUMP 0000187a: JUMPDEST 0000187b: SWAP1 0000187c: POP 0000187d: DUP1 0000187e: ISZERO 0000187f: PUSH2 0x1823 00001882: JUMPI 00001883: POP 00001884: POP 00001885: PUSH1 0x01 00001887: PUSH1 0x01 00001889: PUSH1 0xa0 0000188b: SHL 0000188c: SUB 0000188d: DUP2 0000188e: AND 0000188f: PUSH1 0x00 00001891: SWAP1 00001892: DUP2 00001893: MSTORE 00001894: PUSH1 0x12 00001896: PUSH1 0x20 00001898: MSTORE 00001899: PUSH1 0x40 0000189b: SWAP1 0000189c: KECCAK256 0000189d: TIMESTAMP 0000189e: SWAP1 0000189f: SSTORE 000018a0: PUSH1 0x01 000018a2: PUSH2 0x0b19 000018a5: JUMP 000018a6: JUMPDEST 000018a7: PUSH1 0x00 000018a9: TIMESTAMP 000018aa: DUP3 000018ab: GT 000018ac: ISZERO 000018ad: PUSH2 0x18b8 000018b0: JUMPI 000018b1: POP 000018b2: PUSH1 0x00 000018b4: PUSH2 0x0b19 000018b7: JUMP 000018b8: JUMPDEST 000018b9: PUSH1 0x10 000018bb: SLOAD 000018bc: PUSH2 0x18c5 000018bf: TIMESTAMP 000018c0: DUP5 000018c1: PUSH2 0x182c 000018c4: JUMP 000018c5: JUMPDEST 000018c6: LT 000018c7: ISZERO 000018c8: SWAP3 000018c9: SWAP2 000018ca: POP 000018cb: POP 000018cc: JUMP 000018cd: JUMPDEST 000018ce: PUSH2 0x18d7 000018d1: DUP3 000018d2: DUP3 000018d3: PUSH2 0x19cb 000018d6: JUMP 000018d7: JUMPDEST 000018d8: PUSH1 0x00 000018da: PUSH2 0x1913 000018dd: PUSH2 0x18f4 000018e0: PUSH2 0x0afb 000018e3: DUP5 000018e4: PUSH1 0x06 000018e6: SLOAD 000018e7: PUSH2 0x136c 000018ea: SWAP1 000018eb: SWAP2 000018ec: SWAP1 000018ed: PUSH4 0xffffffff 000018f2: AND 000018f3: JUMP 000018f4: JUMPDEST 000018f5: PUSH1 0x01 000018f7: PUSH1 0x01 000018f9: PUSH1 0xa0 000018fb: SHL 000018fc: SUB 000018fd: DUP6 000018fe: AND 000018ff: PUSH1 0x00 00001901: SWAP1 00001902: DUP2 00001903: MSTORE 00001904: PUSH1 0x09 00001906: PUSH1 0x20 00001908: MSTORE 00001909: PUSH1 0x40 0000190b: SWAP1 0000190c: KECCAK256 0000190d: SLOAD 0000190e: SWAP1 0000190f: PUSH2 0x197a 00001912: JUMP 00001913: JUMPDEST 00001914: PUSH1 0x01 00001916: PUSH1 0x01 00001918: PUSH1 0xa0 0000191a: SHL 0000191b: SUB 0000191c: SWAP1 0000191d: SWAP4 0000191e: AND 0000191f: PUSH1 0x00 00001921: SWAP1 00001922: DUP2 00001923: MSTORE 00001924: PUSH1 0x09 00001926: PUSH1 0x20 00001928: MSTORE 00001929: PUSH1 0x40 0000192b: SWAP1 0000192c: KECCAK256 0000192d: SWAP3 0000192e: SWAP1 0000192f: SWAP3 00001930: SSTORE 00001931: POP 00001932: POP 00001933: JUMP 00001934: JUMPDEST 00001935: PUSH2 0x193e 00001938: DUP3 00001939: DUP3 0000193a: PUSH2 0x1a8b 0000193d: JUMP 0000193e: JUMPDEST 0000193f: PUSH1 0x00 00001941: PUSH2 0x1913 00001944: PUSH2 0x195b 00001947: PUSH2 0x0afb 0000194a: DUP5 0000194b: PUSH1 0x06 0000194d: SLOAD 0000194e: PUSH2 0x136c 00001951: SWAP1 00001952: SWAP2 00001953: SWAP1 00001954: PUSH4 0xffffffff 00001959: AND 0000195a: JUMP 0000195b: JUMPDEST 0000195c: PUSH1 0x01 0000195e: PUSH1 0x01 00001960: PUSH1 0xa0 00001962: SHL 00001963: SUB 00001964: DUP6 00001965: AND 00001966: PUSH1 0x00 00001968: SWAP1 00001969: DUP2 0000196a: MSTORE 0000196b: PUSH1 0x09 0000196d: PUSH1 0x20 0000196f: MSTORE 00001970: PUSH1 0x40 00001972: SWAP1 00001973: KECCAK256 00001974: SLOAD 00001975: SWAP1 00001976: PUSH2 0x156d 00001979: JUMP 0000197a: JUMPDEST 0000197b: PUSH1 0x00 0000197d: DUP1 0000197e: PUSH2 0x1987 00001981: DUP4 00001982: DUP6 00001983: PUSH2 0x2276 00001986: JUMP 00001987: JUMPDEST 00001988: SWAP1 00001989: POP 0000198a: PUSH1 0x00 0000198c: DUP4 0000198d: SLT 0000198e: ISZERO 0000198f: DUP1 00001990: ISZERO 00001991: PUSH2 0x199a 00001994: JUMPI 00001995: POP 00001996: DUP4 00001997: DUP2 00001998: SGT 00001999: ISZERO 0000199a: JUMPDEST 0000199b: DUP1 0000199c: PUSH2 0x19af 0000199f: JUMPI 000019a0: POP 000019a1: PUSH1 0x00 000019a3: DUP4 000019a4: SLT 000019a5: DUP1 000019a6: ISZERO 000019a7: PUSH2 0x19af 000019aa: JUMPI 000019ab: POP 000019ac: DUP4 000019ad: DUP2 000019ae: SGT 000019af: JUMPDEST 000019b0: PUSH2 0x13b1 000019b3: JUMPI 000019b4: PUSH1 0x40 000019b6: MLOAD 000019b7: PUSH3 0x461bcd 000019bb: PUSH1 0xe5 000019bd: SHL 000019be: DUP2 000019bf: MSTORE 000019c0: PUSH1 0x04 000019c2: ADD 000019c3: PUSH2 0x0674 000019c6: SWAP1 000019c7: PUSH2 0x1d93 000019ca: JUMP 000019cb: JUMPDEST 000019cc: PUSH1 0x01 000019ce: PUSH1 0x01 000019d0: PUSH1 0xa0 000019d2: SHL 000019d3: SUB 000019d4: DUP3 000019d5: AND 000019d6: PUSH2 0x19f1 000019d9: JUMPI 000019da: PUSH1 0x40 000019dc: MLOAD 000019dd: PUSH3 0x461bcd 000019e1: PUSH1 0xe5 000019e3: SHL 000019e4: DUP2 000019e5: MSTORE 000019e6: PUSH1 0x04 000019e8: ADD 000019e9: PUSH2 0x0674 000019ec: SWAP1 000019ed: PUSH2 0x2136 000019f0: JUMP 000019f1: JUMPDEST 000019f2: PUSH2 0x19fd 000019f5: PUSH1 0x00 000019f7: DUP4 000019f8: DUP4 000019f9: PUSH2 0x1097 000019fc: JUMP 000019fd: JUMPDEST 000019fe: PUSH1 0x02 00001a00: SLOAD 00001a01: PUSH2 0x1a0a 00001a04: SWAP1 00001a05: DUP3 00001a06: PUSH2 0x13b8 00001a09: JUMP 00001a0a: JUMPDEST 00001a0b: PUSH1 0x02 00001a0d: SSTORE 00001a0e: PUSH1 0x01 00001a10: PUSH1 0x01 00001a12: PUSH1 0xa0 00001a14: SHL 00001a15: SUB 00001a16: DUP3 00001a17: AND 00001a18: PUSH1 0x00 00001a1a: SWAP1 00001a1b: DUP2 00001a1c: MSTORE 00001a1d: PUSH1 0x20 00001a1f: DUP2 00001a20: SWAP1 00001a21: MSTORE 00001a22: PUSH1 0x40 00001a24: SWAP1 00001a25: KECCAK256 00001a26: SLOAD 00001a27: PUSH2 0x1a30 00001a2a: SWAP1 00001a2b: DUP3 00001a2c: PUSH2 0x13b8 00001a2f: JUMP 00001a30: JUMPDEST 00001a31: PUSH1 0x01 00001a33: PUSH1 0x01 00001a35: PUSH1 0xa0 00001a37: SHL 00001a38: SUB 00001a39: DUP4 00001a3a: AND 00001a3b: PUSH1 0x00 00001a3d: DUP2 00001a3e: DUP2 00001a3f: MSTORE 00001a40: PUSH1 0x20 00001a42: DUP2 00001a43: SWAP1 00001a44: MSTORE 00001a45: PUSH1 0x40 00001a47: DUP1 00001a48: DUP3 00001a49: KECCAK256 00001a4a: SWAP4 00001a4b: SWAP1 00001a4c: SWAP4 00001a4d: SSTORE 00001a4e: SWAP2 00001a4f: MLOAD 00001a50: SWAP1 00001a51: SWAP2 00001a52: SWAP1 00001a53: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00001a74: SWAP1 00001a75: PUSH2 0x1a7f 00001a78: SWAP1 00001a79: DUP6 00001a7a: SWAP1 00001a7b: PUSH2 0x216d 00001a7e: JUMP 00001a7f: JUMPDEST 00001a80: PUSH1 0x40 00001a82: MLOAD 00001a83: DUP1 00001a84: SWAP2 00001a85: SUB 00001a86: SWAP1 00001a87: LOG3 00001a88: POP 00001a89: POP 00001a8a: JUMP 00001a8b: JUMPDEST 00001a8c: PUSH1 0x01 00001a8e: PUSH1 0x01 00001a90: PUSH1 0xa0 00001a92: SHL 00001a93: SUB 00001a94: DUP3 00001a95: AND 00001a96: PUSH2 0x1ab1 00001a99: JUMPI 00001a9a: PUSH1 0x40 00001a9c: MLOAD 00001a9d: PUSH3 0x461bcd 00001aa1: PUSH1 0xe5 00001aa3: SHL 00001aa4: DUP2 00001aa5: MSTORE 00001aa6: PUSH1 0x04 00001aa8: ADD 00001aa9: PUSH2 0x0674 00001aac: SWAP1 00001aad: PUSH2 0x202b 00001ab0: JUMP 00001ab1: JUMPDEST 00001ab2: PUSH2 0x1abd 00001ab5: DUP3 00001ab6: PUSH1 0x00 00001ab8: DUP4 00001ab9: PUSH2 0x1097 00001abc: JUMP 00001abd: JUMPDEST 00001abe: PUSH2 0x1afa 00001ac1: DUP2 00001ac2: PUSH1 0x40 00001ac4: MLOAD 00001ac5: DUP1 00001ac6: PUSH1 0x60 00001ac8: ADD 00001ac9: PUSH1 0x40 00001acb: MSTORE 00001acc: DUP1 00001acd: PUSH1 0x22 00001acf: DUP2 00001ad0: MSTORE 00001ad1: PUSH1 0x20 00001ad3: ADD 00001ad4: PUSH2 0x234e 00001ad7: PUSH1 0x22 00001ad9: SWAP2 00001ada: CODECOPY 00001adb: PUSH1 0x01 00001add: PUSH1 0x01 00001adf: PUSH1 0xa0 00001ae1: SHL 00001ae2: SUB 00001ae3: DUP6 00001ae4: AND 00001ae5: PUSH1 0x00 00001ae7: SWAP1 00001ae8: DUP2 00001ae9: MSTORE 00001aea: PUSH1 0x20 00001aec: DUP2 00001aed: SWAP1 00001aee: MSTORE 00001aef: PUSH1 0x40 00001af1: SWAP1 00001af2: KECCAK256 00001af3: SLOAD 00001af4: SWAP2 00001af5: SWAP1 00001af6: PUSH2 0x1510 00001af9: JUMP 00001afa: JUMPDEST 00001afb: PUSH1 0x01 00001afd: PUSH1 0x01 00001aff: PUSH1 0xa0 00001b01: SHL 00001b02: SUB 00001b03: DUP4 00001b04: AND 00001b05: PUSH1 0x00 00001b07: SWAP1 00001b08: DUP2 00001b09: MSTORE 00001b0a: PUSH1 0x20 00001b0c: DUP2 00001b0d: SWAP1 00001b0e: MSTORE 00001b0f: PUSH1 0x40 00001b11: SWAP1 00001b12: KECCAK256 00001b13: SSTORE 00001b14: PUSH1 0x02 00001b16: SLOAD 00001b17: PUSH2 0x1b20 00001b1a: SWAP1 00001b1b: DUP3 00001b1c: PUSH2 0x182c 00001b1f: JUMP 00001b20: JUMPDEST 00001b21: PUSH1 0x02 00001b23: SSTORE 00001b24: PUSH1 0x40 00001b26: MLOAD 00001b27: PUSH1 0x00 00001b29: SWAP1 00001b2a: PUSH1 0x01 00001b2c: PUSH1 0x01 00001b2e: PUSH1 0xa0 00001b30: SHL 00001b31: SUB 00001b32: DUP5 00001b33: AND 00001b34: SWAP1 00001b35: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00001b56: SWAP1 00001b57: PUSH2 0x1a7f 00001b5a: SWAP1 00001b5b: DUP6 00001b5c: SWAP1 00001b5d: PUSH2 0x216d 00001b60: JUMP 00001b61: JUMPDEST 00001b62: PUSH1 0x00 00001b64: PUSH1 0x20 00001b66: DUP3 00001b67: DUP5 00001b68: SUB 00001b69: SLT 00001b6a: ISZERO 00001b6b: PUSH2 0x1b72 00001b6e: JUMPI 00001b6f: DUP1 00001b70: DUP2 00001b71: REVERT 00001b72: JUMPDEST 00001b73: DUP2 00001b74: CALLDATALOAD 00001b75: PUSH2 0x13b1 00001b78: DUP2 00001b79: PUSH2 0x2338 00001b7c: JUMP 00001b7d: JUMPDEST 00001b7e: PUSH1 0x00 00001b80: PUSH1 0x20 00001b82: DUP3 00001b83: DUP5 00001b84: SUB 00001b85: SLT 00001b86: ISZERO 00001b87: PUSH2 0x1b8e 00001b8a: JUMPI 00001b8b: DUP1 00001b8c: DUP2 00001b8d: REVERT 00001b8e: JUMPDEST 00001b8f: DUP2 00001b90: MLOAD 00001b91: PUSH2 0x13b1 00001b94: DUP2 00001b95: PUSH2 0x2338 00001b98: JUMP 00001b99: JUMPDEST 00001b9a: PUSH1 0x00 00001b9c: DUP1 00001b9d: PUSH1 0x40 00001b9f: DUP4 00001ba0: DUP6 00001ba1: SUB 00001ba2: SLT 00001ba3: ISZERO 00001ba4: PUSH2 0x1bab 00001ba7: JUMPI 00001ba8: DUP1 00001ba9: DUP2 00001baa: REVERT 00001bab: JUMPDEST 00001bac: DUP3 00001bad: CALLDATALOAD 00001bae: PUSH2 0x1bb6 00001bb1: DUP2 00001bb2: PUSH2 0x2338 00001bb5: JUMP 00001bb6: JUMPDEST 00001bb7: SWAP5 00001bb8: PUSH1 0x20 00001bba: SWAP4 00001bbb: SWAP1 00001bbc: SWAP4 00001bbd: ADD 00001bbe: CALLDATALOAD 00001bbf: SWAP4 00001bc0: POP 00001bc1: POP 00001bc2: POP 00001bc3: JUMP 00001bc4: JUMPDEST 00001bc5: PUSH1 0x00 00001bc7: DUP1 00001bc8: PUSH1 0x40 00001bca: DUP4 00001bcb: DUP6 00001bcc: SUB 00001bcd: SLT 00001bce: ISZERO 00001bcf: PUSH2 0x1bd6 00001bd2: JUMPI 00001bd3: DUP2 00001bd4: DUP3 00001bd5: REVERT 00001bd6: JUMPDEST 00001bd7: DUP3 00001bd8: CALLDATALOAD 00001bd9: PUSH2 0x1be1 00001bdc: DUP2 00001bdd: PUSH2 0x2338 00001be0: JUMP 00001be1: JUMPDEST 00001be2: SWAP2 00001be3: POP 00001be4: PUSH1 0x20 00001be6: DUP4 00001be7: ADD 00001be8: CALLDATALOAD 00001be9: PUSH2 0x1bf1 00001bec: DUP2 00001bed: PUSH2 0x2338 00001bf0: JUMP 00001bf1: JUMPDEST 00001bf2: DUP1 00001bf3: SWAP2 00001bf4: POP 00001bf5: POP 00001bf6: SWAP3 00001bf7: POP 00001bf8: SWAP3 00001bf9: SWAP1 00001bfa: POP 00001bfb: JUMP 00001bfc: JUMPDEST 00001bfd: PUSH1 0x00 00001bff: DUP1 00001c00: PUSH1 0x00 00001c02: PUSH1 0x60 00001c04: DUP5 00001c05: DUP7 00001c06: SUB 00001c07: SLT 00001c08: ISZERO 00001c09: PUSH2 0x1c10 00001c0c: JUMPI 00001c0d: DUP1 00001c0e: DUP2 00001c0f: REVERT 00001c10: JUMPDEST 00001c11: DUP4 00001c12: CALLDATALOAD 00001c13: PUSH2 0x1c1b 00001c16: DUP2 00001c17: PUSH2 0x2338 00001c1a: JUMP 00001c1b: JUMPDEST 00001c1c: SWAP3 00001c1d: POP 00001c1e: PUSH1 0x20 00001c20: DUP5 00001c21: ADD 00001c22: CALLDATALOAD 00001c23: PUSH2 0x1c2b 00001c26: DUP2 00001c27: PUSH2 0x2338 00001c2a: JUMP 00001c2b: JUMPDEST 00001c2c: SWAP3 00001c2d: SWAP6 00001c2e: SWAP3 00001c2f: SWAP5 00001c30: POP 00001c31: POP 00001c32: POP 00001c33: PUSH1 0x40 00001c35: SWAP2 00001c36: SWAP1 00001c37: SWAP2 00001c38: ADD 00001c39: CALLDATALOAD 00001c3a: SWAP1 00001c3b: JUMP 00001c3c: JUMPDEST 00001c3d: PUSH1 0x00 00001c3f: DUP1 00001c40: PUSH1 0x40 00001c42: DUP4 00001c43: DUP6 00001c44: SUB 00001c45: SLT 00001c46: ISZERO 00001c47: PUSH2 0x1c4e 00001c4a: JUMPI 00001c4b: DUP2 00001c4c: DUP3 00001c4d: REVERT 00001c4e: JUMPDEST 00001c4f: DUP3 00001c50: CALLDATALOAD 00001c51: PUSH2 0x1c59 00001c54: DUP2 00001c55: PUSH2 0x2338 00001c58: JUMP 00001c59: JUMPDEST 00001c5a: SWAP2 00001c5b: POP 00001c5c: PUSH1 0x20 00001c5e: DUP4 00001c5f: ADD 00001c60: CALLDATALOAD 00001c61: DUP1 00001c62: ISZERO 00001c63: ISZERO 00001c64: DUP2 00001c65: EQ 00001c66: PUSH2 0x1bf1 00001c69: JUMPI 00001c6a: DUP2 00001c6b: DUP3 00001c6c: REVERT 00001c6d: JUMPDEST 00001c6e: PUSH1 0x00 00001c70: DUP1 00001c71: PUSH1 0x40 00001c73: DUP4 00001c74: DUP6 00001c75: SUB 00001c76: SLT 00001c77: ISZERO 00001c78: PUSH2 0x1bab 00001c7b: JUMPI 00001c7c: DUP2 00001c7d: DUP3 00001c7e: REVERT 00001c7f: JUMPDEST 00001c80: PUSH1 0x00 00001c82: PUSH1 0x20 00001c84: DUP3 00001c85: DUP5 00001c86: SUB 00001c87: SLT 00001c88: ISZERO 00001c89: PUSH2 0x1c90 00001c8c: JUMPI 00001c8d: DUP1 00001c8e: DUP2 00001c8f: REVERT 00001c90: JUMPDEST 00001c91: POP 00001c92: MLOAD 00001c93: SWAP2 00001c94: SWAP1 00001c95: POP 00001c96: JUMP 00001c97: JUMPDEST 00001c98: PUSH1 0x00 00001c9a: PUSH1 0x20 00001c9c: DUP3 00001c9d: DUP5 00001c9e: SUB 00001c9f: SLT 00001ca0: ISZERO 00001ca1: PUSH2 0x1ca8 00001ca4: JUMPI 00001ca5: DUP1 00001ca6: DUP2 00001ca7: REVERT 00001ca8: JUMPDEST 00001ca9: POP 00001caa: CALLDATALOAD 00001cab: SWAP2 00001cac: SWAP1 00001cad: POP 00001cae: JUMP 00001caf: JUMPDEST 00001cb0: SWAP1 00001cb1: JUMP 00001cb2: JUMPDEST 00001cb3: PUSH1 0x01 00001cb5: PUSH1 0x01 00001cb7: PUSH1 0xa0 00001cb9: SHL 00001cba: SUB 00001cbb: SWAP2 00001cbc: SWAP1 00001cbd: SWAP2 00001cbe: AND 00001cbf: DUP2 00001cc0: MSTORE 00001cc1: PUSH1 0x20 00001cc3: ADD 00001cc4: SWAP1 00001cc5: JUMP 00001cc6: JUMPDEST 00001cc7: PUSH1 0x01 00001cc9: PUSH1 0x01 00001ccb: PUSH1 0xa0 00001ccd: SHL 00001cce: SUB 00001ccf: SWAP9 00001cd0: SWAP1 00001cd1: SWAP9 00001cd2: AND 00001cd3: DUP9 00001cd4: MSTORE 00001cd5: PUSH1 0x20 00001cd7: DUP9 00001cd8: ADD 00001cd9: SWAP7 00001cda: SWAP1 00001cdb: SWAP7 00001cdc: MSTORE 00001cdd: PUSH1 0x40 00001cdf: DUP8 00001ce0: ADD 00001ce1: SWAP5 00001ce2: SWAP1 00001ce3: SWAP5 00001ce4: MSTORE 00001ce5: PUSH1 0x60 00001ce7: DUP7 00001ce8: ADD 00001ce9: SWAP3 00001cea: SWAP1 00001ceb: SWAP3 00001cec: MSTORE 00001ced: PUSH1 0x80 00001cef: DUP6 00001cf0: ADD 00001cf1: MSTORE 00001cf2: PUSH1 0xa0 00001cf4: DUP5 00001cf5: ADD 00001cf6: MSTORE 00001cf7: PUSH1 0xc0 00001cf9: DUP4 00001cfa: ADD 00001cfb: MSTORE 00001cfc: PUSH1 0xe0 00001cfe: DUP3 00001cff: ADD 00001d00: MSTORE 00001d01: PUSH2 0x0100 00001d04: ADD 00001d05: SWAP1 00001d06: JUMP 00001d07: JUMPDEST 00001d08: SWAP1 00001d09: ISZERO 00001d0a: ISZERO 00001d0b: DUP2 00001d0c: MSTORE 00001d0d: PUSH1 0x20 00001d0f: ADD 00001d10: SWAP1 00001d11: JUMP 00001d12: JUMPDEST 00001d13: PUSH1 0x00 00001d15: PUSH1 0x20 00001d17: DUP1 00001d18: DUP4 00001d19: MSTORE 00001d1a: DUP4 00001d1b: MLOAD 00001d1c: DUP1 00001d1d: DUP3 00001d1e: DUP6 00001d1f: ADD 00001d20: MSTORE 00001d21: DUP3 00001d22: JUMPDEST 00001d23: DUP2 00001d24: DUP2 00001d25: LT 00001d26: ISZERO 00001d27: PUSH2 0x1d3e 00001d2a: JUMPI 00001d2b: DUP6 00001d2c: DUP2 00001d2d: ADD 00001d2e: DUP4 00001d2f: ADD 00001d30: MLOAD 00001d31: DUP6 00001d32: DUP3 00001d33: ADD 00001d34: PUSH1 0x40 00001d36: ADD 00001d37: MSTORE 00001d38: DUP3 00001d39: ADD 00001d3a: PUSH2 0x1d22 00001d3d: JUMP 00001d3e: JUMPDEST 00001d3f: DUP2 00001d40: DUP2 00001d41: GT 00001d42: ISZERO 00001d43: PUSH2 0x1d4f 00001d46: JUMPI 00001d47: DUP4 00001d48: PUSH1 0x40 00001d4a: DUP4 00001d4b: DUP8 00001d4c: ADD 00001d4d: ADD 00001d4e: MSTORE 00001d4f: JUMPDEST 00001d50: POP 00001d51: PUSH1 0x1f 00001d53: ADD 00001d54: PUSH1 0x1f 00001d56: NOT 00001d57: AND 00001d58: SWAP3 00001d59: SWAP1 00001d5a: SWAP3 00001d5b: ADD 00001d5c: PUSH1 0x40 00001d5e: ADD 00001d5f: SWAP4 00001d60: SWAP3 00001d61: POP 00001d62: POP 00001d63: POP 00001d64: JUMP 00001d65: JUMPDEST 00001d66: PUSH1 0x20 00001d68: DUP1 00001d69: DUP3 00001d6a: MSTORE 00001d6b: PUSH1 0x14 00001d6d: SWAP1 00001d6e: DUP3 00001d6f: ADD 00001d70: MSTORE 00001d71: PUSH20 0x73616d6520636c61696d576169742076616c7565 00001d86: PUSH1 0x60 00001d88: SHL 00001d89: PUSH1 0x40 00001d8b: DUP3 00001d8c: ADD 00001d8d: MSTORE 00001d8e: PUSH1 0x60 00001d90: ADD 00001d91: SWAP1 00001d92: JUMP 00001d93: JUMPDEST 00001d94: PUSH1 0x20 00001d96: DUP1 00001d97: DUP3 00001d98: MSTORE 00001d99: PUSH1 0x12 00001d9b: SWAP1 00001d9c: DUP3 00001d9d: ADD 00001d9e: MSTORE 00001d9f: PUSH18 0x29b0b332a6b0ba341032b93937b91039bab1 00001db2: PUSH1 0x71 00001db4: SHL 00001db5: PUSH1 0x40 00001db7: DUP3 00001db8: ADD 00001db9: MSTORE 00001dba: PUSH1 0x60 00001dbc: ADD 00001dbd: SWAP1 00001dbe: JUMP 00001dbf: JUMPDEST 00001dc0: PUSH1 0x20 00001dc2: DUP1 00001dc3: DUP3 00001dc4: MSTORE 00001dc5: PUSH1 0x1e 00001dc7: SWAP1 00001dc8: DUP3 00001dc9: ADD 00001dca: MSTORE 00001dcb: PUSH32 0x4e65676174697665206e756d626572206973206e6f7420616c6c6f7765640000 00001dec: PUSH1 0x40 00001dee: DUP3 00001def: ADD 00001df0: MSTORE 00001df1: PUSH1 0x60 00001df3: ADD 00001df4: SWAP1 00001df5: JUMP 00001df6: JUMPDEST 00001df7: PUSH1 0x20 00001df9: DUP1 00001dfa: DUP3 00001dfb: MSTORE 00001dfc: PUSH1 0x26 00001dfe: SWAP1 00001dff: DUP3 00001e00: ADD 00001e01: MSTORE 00001e02: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 00001e23: PUSH1 0x40 00001e25: DUP3 00001e26: ADD 00001e27: MSTORE 00001e28: PUSH6 0x646472657373 00001e2f: PUSH1 0xd0 00001e31: SHL 00001e32: PUSH1 0x60 00001e34: DUP3 00001e35: ADD 00001e36: MSTORE 00001e37: PUSH1 0x80 00001e39: ADD 00001e3a: SWAP1 00001e3b: JUMP 00001e3c: JUMPDEST 00001e3d: PUSH1 0x20 00001e3f: DUP1 00001e40: DUP3 00001e41: MSTORE 00001e42: PUSH1 0x22 00001e44: SWAP1 00001e45: DUP3 00001e46: ADD 00001e47: MSTORE 00001e48: PUSH32 0x45524332303a20617070726f766520746f20746865207a65726f206164647265 00001e69: PUSH1 0x40 00001e6b: DUP3 00001e6c: ADD 00001e6d: MSTORE 00001e6e: PUSH2 0x7373 00001e71: PUSH1 0xf0 00001e73: SHL 00001e74: PUSH1 0x60 00001e76: DUP3 00001e77: ADD 00001e78: MSTORE 00001e79: PUSH1 0x80 00001e7b: ADD 00001e7c: SWAP1 00001e7d: JUMP 00001e7e: JUMPDEST 00001e7f: PUSH1 0x20 00001e81: DUP1 00001e82: DUP3 00001e83: MSTORE 00001e84: PUSH1 0x1b 00001e86: SWAP1 00001e87: DUP3 00001e88: ADD 00001e89: MSTORE 00001e8a: PUSH32 0x536166654d6174683a206164646974696f6e206f766572666c6f770000000000 00001eab: PUSH1 0x40 00001ead: DUP3 00001eae: ADD 00001eaf: MSTORE 00001eb0: PUSH1 0x60 00001eb2: ADD 00001eb3: SWAP1 00001eb4: JUMP 00001eb5: JUMPDEST 00001eb6: PUSH1 0x20 00001eb8: DUP1 00001eb9: DUP3 00001eba: MSTORE 00001ebb: PUSH1 0x1e 00001ebd: SWAP1 00001ebe: DUP3 00001ebf: ADD 00001ec0: MSTORE 00001ec1: PUSH32 0x64697361626c65642c207573652027636c61696d272066756e6374696f6e0000 00001ee2: PUSH1 0x40 00001ee4: DUP3 00001ee5: ADD 00001ee6: MSTORE 00001ee7: PUSH1 0x60 00001ee9: ADD 00001eea: SWAP1 00001eeb: JUMP 00001eec: JUMPDEST 00001eed: PUSH1 0x20 00001eef: DUP1 00001ef0: DUP3 00001ef1: MSTORE 00001ef2: PUSH1 0x1d 00001ef4: SWAP1 00001ef5: DUP3 00001ef6: ADD 00001ef7: MSTORE 00001ef8: PUSH32 0x6d7573742062652075706461746564203120746f20323420686f757273000000 00001f19: PUSH1 0x40 00001f1b: DUP3 00001f1c: ADD 00001f1d: MSTORE 00001f1e: PUSH1 0x60 00001f20: ADD 00001f21: SWAP1 00001f22: JUMP 00001f23: JUMPDEST 00001f24: PUSH1 0x20 00001f26: DUP1 00001f27: DUP3 00001f28: MSTORE 00001f29: PUSH1 0x1b 00001f2b: SWAP1 00001f2c: DUP3 00001f2d: ADD 00001f2e: MSTORE 00001f2f: PUSH32 0x6469766964656e656420746f74616c737570706c79206572726f720000000000 00001f50: PUSH1 0x40 00001f52: DUP3 00001f53: ADD 00001f54: MSTORE 00001f55: PUSH1 0x60 00001f57: ADD 00001f58: SWAP1 00001f59: JUMP 00001f5a: JUMPDEST 00001f5b: PUSH1 0x20 00001f5d: DUP1 00001f5e: DUP3 00001f5f: MSTORE 00001f60: PUSH1 0x12 00001f62: SWAP1 00001f63: DUP3 00001f64: ADD 00001f65: MSTORE 00001f66: PUSH18 0x1d1c985b9cd9995c881a5b985b1b1bddd959 00001f79: PUSH1 0x72 00001f7b: SHL 00001f7c: PUSH1 0x40 00001f7e: DUP3 00001f7f: ADD 00001f80: MSTORE 00001f81: PUSH1 0x60 00001f83: ADD 00001f84: SWAP1 00001f85: JUMP 00001f86: JUMPDEST 00001f87: PUSH1 0x20 00001f89: DUP1 00001f8a: DUP3 00001f8b: MSTORE 00001f8c: PUSH1 0x21 00001f8e: SWAP1 00001f8f: DUP3 00001f90: ADD 00001f91: MSTORE 00001f92: PUSH32 0x536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f 00001fb3: PUSH1 0x40 00001fb5: DUP3 00001fb6: ADD 00001fb7: MSTORE 00001fb8: PUSH1 0x77 00001fba: PUSH1 0xf8 00001fbc: SHL 00001fbd: PUSH1 0x60 00001fbf: DUP3 00001fc0: ADD 00001fc1: MSTORE 00001fc2: PUSH1 0x80 00001fc4: ADD 00001fc5: SWAP1 00001fc6: JUMP 00001fc7: JUMPDEST 00001fc8: PUSH1 0x20 00001fca: DUP1 00001fcb: DUP3 00001fcc: MSTORE 00001fcd: DUP2 00001fce: DUP2 00001fcf: ADD 00001fd0: MSTORE 00001fd1: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00001ff2: PUSH1 0x40 00001ff4: DUP3 00001ff5: ADD 00001ff6: MSTORE 00001ff7: PUSH1 0x60 00001ff9: ADD 00001ffa: SWAP1 00001ffb: JUMP 00001ffc: JUMPDEST 00001ffd: PUSH1 0x20 00001fff: DUP1 00002000: DUP3 00002001: MSTORE 00002002: PUSH1 0x15 00002004: SWAP1 00002005: DUP3 00002006: ADD 00002007: MSTORE 00002008: PUSH21 0x29b0b332a6b0ba34103a37aab4b73a1032b93937b9 0000201e: PUSH1 0x59 00002020: SHL 00002021: PUSH1 0x40 00002023: DUP3 00002024: ADD 00002025: MSTORE 00002026: PUSH1 0x60 00002028: ADD 00002029: SWAP1 0000202a: JUMP 0000202b: JUMPDEST 0000202c: PUSH1 0x20 0000202e: DUP1 0000202f: DUP3 00002030: MSTORE 00002031: PUSH1 0x21 00002033: SWAP1 00002034: DUP3 00002035: ADD 00002036: MSTORE 00002037: PUSH32 0x45524332303a206275726e2066726f6d20746865207a65726f20616464726573 00002058: PUSH1 0x40 0000205a: DUP3 0000205b: ADD 0000205c: MSTORE 0000205d: PUSH1 0x73 0000205f: PUSH1 0xf8 00002061: SHL 00002062: PUSH1 0x60 00002064: DUP3 00002065: ADD 00002066: MSTORE 00002067: PUSH1 0x80 00002069: ADD 0000206a: SWAP1 0000206b: JUMP 0000206c: JUMPDEST 0000206d: PUSH1 0x20 0000206f: DUP1 00002070: DUP3 00002071: MSTORE 00002072: PUSH1 0x24 00002074: SWAP1 00002075: DUP3 00002076: ADD 00002077: MSTORE 00002078: PUSH32 0x45524332303a20617070726f76652066726f6d20746865207a65726f20616464 00002099: PUSH1 0x40 0000209b: DUP3 0000209c: ADD 0000209d: MSTORE 0000209e: PUSH4 0x72657373 000020a3: PUSH1 0xe0 000020a5: SHL 000020a6: PUSH1 0x60 000020a8: DUP3 000020a9: ADD 000020aa: MSTORE 000020ab: PUSH1 0x80 000020ad: ADD 000020ae: SWAP1 000020af: JUMP 000020b0: JUMPDEST 000020b1: PUSH1 0x20 000020b3: DUP1 000020b4: DUP3 000020b5: MSTORE 000020b6: PUSH1 0x12 000020b8: SWAP1 000020b9: DUP3 000020ba: ADD 000020bb: MSTORE 000020bc: PUSH18 0x14d8599953585d1a08195c9c9bdc88185919 000020cf: PUSH1 0x72 000020d1: SHL 000020d2: PUSH1 0x40 000020d4: DUP3 000020d5: ADD 000020d6: MSTORE 000020d7: PUSH1 0x60 000020d9: ADD 000020da: SWAP1 000020db: JUMP 000020dc: JUMPDEST 000020dd: PUSH1 0x20 000020df: DUP1 000020e0: DUP3 000020e1: MSTORE 000020e2: PUSH1 0x11 000020e4: SWAP1 000020e5: DUP3 000020e6: ADD 000020e7: MSTORE 000020e8: PUSH17 0x189d5c9b9a5b99c81d5b985b1b1bddd959 000020fa: PUSH1 0x7a 000020fc: SHL 000020fd: PUSH1 0x40 000020ff: DUP3 00002100: ADD 00002101: MSTORE 00002102: PUSH1 0x60 00002104: ADD 00002105: SWAP1 00002106: JUMP 00002107: JUMPDEST 00002108: PUSH1 0x20 0000210a: DUP1 0000210b: DUP3 0000210c: MSTORE 0000210d: PUSH1 0x15 0000210f: SWAP1 00002110: DUP3 00002111: ADD 00002112: MSTORE 00002113: PUSH21 0x616c726561647920686173206265656e2073657421 00002129: PUSH1 0x58 0000212b: SHL 0000212c: PUSH1 0x40 0000212e: DUP3 0000212f: ADD 00002130: MSTORE 00002131: PUSH1 0x60 00002133: ADD 00002134: SWAP1 00002135: JUMP 00002136: JUMPDEST 00002137: PUSH1 0x20 00002139: DUP1 0000213a: DUP3 0000213b: MSTORE 0000213c: PUSH1 0x1f 0000213e: SWAP1 0000213f: DUP3 00002140: ADD 00002141: MSTORE 00002142: PUSH32 0x45524332303a206d696e7420746f20746865207a65726f206164647265737300 00002163: PUSH1 0x40 00002165: DUP3 00002166: ADD 00002167: MSTORE 00002168: PUSH1 0x60 0000216a: ADD 0000216b: SWAP1 0000216c: JUMP 0000216d: JUMPDEST 0000216e: SWAP1 0000216f: DUP2 00002170: MSTORE 00002171: PUSH1 0x20 00002173: ADD 00002174: SWAP1 00002175: JUMP 00002176: JUMPDEST 00002177: SWAP2 00002178: DUP3 00002179: MSTORE 0000217a: PUSH1 0x01 0000217c: PUSH1 0x01 0000217e: PUSH1 0xa0 00002180: SHL 00002181: SUB 00002182: AND 00002183: PUSH1 0x20 00002185: DUP3 00002186: ADD 00002187: MSTORE 00002188: PUSH1 0x40 0000218a: ADD 0000218b: SWAP1 0000218c: JUMP 0000218d: JUMPDEST 0000218e: SWAP3 0000218f: DUP4 00002190: MSTORE 00002191: PUSH1 0x01 00002193: PUSH1 0x01 00002195: PUSH1 0xa0 00002197: SHL 00002198: SUB 00002199: SWAP2 0000219a: SWAP1 0000219b: SWAP2 0000219c: AND 0000219d: PUSH1 0x20 0000219f: DUP4 000021a0: ADD 000021a1: MSTORE 000021a2: PUSH1 0x40 000021a4: DUP3 000021a5: ADD 000021a6: MSTORE 000021a7: PUSH1 0x60 000021a9: ADD 000021aa: SWAP1 000021ab: JUMP 000021ac: JUMPDEST 000021ad: SWAP2 000021ae: DUP3 000021af: MSTORE 000021b0: PUSH1 0x20 000021b2: DUP3 000021b3: ADD 000021b4: MSTORE 000021b5: PUSH1 0x40 000021b7: ADD 000021b8: SWAP1 000021b9: JUMP 000021ba: JUMPDEST 000021bb: SWAP3 000021bc: DUP4 000021bd: MSTORE 000021be: PUSH1 0x20 000021c0: DUP4 000021c1: ADD 000021c2: SWAP2 000021c3: SWAP1 000021c4: SWAP2 000021c5: MSTORE 000021c6: PUSH1 0x40 000021c8: DUP3 000021c9: ADD 000021ca: MSTORE 000021cb: PUSH1 0x60 000021cd: ADD 000021ce: SWAP1 000021cf: JUMP 000021d0: JUMPDEST 000021d1: PUSH1 0xff 000021d3: SWAP2 000021d4: SWAP1 000021d5: SWAP2 000021d6: AND 000021d7: DUP2 000021d8: MSTORE 000021d9: PUSH1 0x20 000021db: ADD 000021dc: SWAP1 000021dd: JUMP 000021de: JUMPDEST 000021df: PUSH1 0x00 000021e1: DUP1 000021e2: DUP3 000021e3: SLT 000021e4: DUP1 000021e5: ISZERO 000021e6: PUSH1 0x01 000021e8: PUSH1 0x01 000021ea: PUSH1 0xff 000021ec: SHL 000021ed: SUB 000021ee: DUP5 000021ef: SWAP1 000021f0: SUB 000021f1: DUP6 000021f2: SGT 000021f3: AND 000021f4: ISZERO 000021f5: PUSH2 0x2200 000021f8: JUMPI 000021f9: PUSH2 0x2200 000021fc: PUSH2 0x2322 000021ff: JUMP 00002200: JUMPDEST 00002201: PUSH1 0x01 00002203: PUSH1 0xff 00002205: SHL 00002206: DUP4 00002207: SWAP1 00002208: SUB 00002209: DUP5 0000220a: SLT 0000220b: DUP2 0000220c: AND 0000220d: ISZERO 0000220e: PUSH2 0x2219 00002211: JUMPI 00002212: PUSH2 0x2219 00002215: PUSH2 0x2322 00002218: JUMP 00002219: JUMPDEST 0000221a: POP 0000221b: POP 0000221c: ADD 0000221d: SWAP1 0000221e: JUMP 0000221f: JUMPDEST 00002220: PUSH1 0x00 00002222: DUP3 00002223: NOT 00002224: DUP3 00002225: GT 00002226: ISZERO 00002227: PUSH2 0x2232 0000222a: JUMPI 0000222b: PUSH2 0x2232 0000222e: PUSH2 0x2322 00002231: JUMP 00002232: JUMPDEST 00002233: POP 00002234: ADD 00002235: SWAP1 00002236: JUMP 00002237: JUMPDEST 00002238: PUSH1 0x00 0000223a: DUP3 0000223b: PUSH2 0x2252 0000223e: JUMPI 0000223f: PUSH4 0x4e487b71 00002244: PUSH1 0xe0 00002246: SHL 00002247: DUP2 00002248: MSTORE 00002249: PUSH1 0x12 0000224b: PUSH1 0x04 0000224d: MSTORE 0000224e: PUSH1 0x24 00002250: DUP2 00002251: REVERT 00002252: JUMPDEST 00002253: POP 00002254: DIV 00002255: SWAP1 00002256: JUMP 00002257: JUMPDEST 00002258: PUSH1 0x00 0000225a: DUP2 0000225b: PUSH1 0x00 0000225d: NOT 0000225e: DIV 0000225f: DUP4 00002260: GT 00002261: DUP3 00002262: ISZERO 00002263: ISZERO 00002264: AND 00002265: ISZERO 00002266: PUSH2 0x2271 00002269: JUMPI 0000226a: PUSH2 0x2271 0000226d: PUSH2 0x2322 00002270: JUMP 00002271: JUMPDEST 00002272: POP 00002273: MUL 00002274: SWAP1 00002275: JUMP 00002276: JUMPDEST 00002277: PUSH1 0x00 00002279: DUP1 0000227a: DUP4 0000227b: SLT 0000227c: DUP1 0000227d: ISZERO 0000227e: PUSH1 0x01 00002280: PUSH1 0xff 00002282: SHL 00002283: DUP6 00002284: ADD 00002285: DUP5 00002286: SLT 00002287: AND 00002288: ISZERO 00002289: PUSH2 0x2294 0000228c: JUMPI 0000228d: PUSH2 0x2294 00002290: PUSH2 0x2322 00002293: JUMP 00002294: JUMPDEST 00002295: PUSH1 0x01 00002297: PUSH1 0x01 00002299: PUSH1 0xff 0000229b: SHL 0000229c: SUB 0000229d: DUP5 0000229e: ADD 0000229f: DUP4 000022a0: SGT 000022a1: DUP2 000022a2: AND 000022a3: ISZERO 000022a4: PUSH2 0x22af 000022a7: JUMPI 000022a8: PUSH2 0x22af 000022ab: PUSH2 0x2322 000022ae: JUMP 000022af: JUMPDEST 000022b0: POP 000022b1: POP 000022b2: SUB 000022b3: SWAP1 000022b4: JUMP 000022b5: JUMPDEST 000022b6: PUSH1 0x00 000022b8: DUP3 000022b9: DUP3 000022ba: LT 000022bb: ISZERO 000022bc: PUSH2 0x22c7 000022bf: JUMPI 000022c0: PUSH2 0x22c7 000022c3: PUSH2 0x2322 000022c6: JUMP 000022c7: JUMPDEST 000022c8: POP 000022c9: SUB 000022ca: SWAP1 000022cb: JUMP 000022cc: JUMPDEST 000022cd: PUSH1 0x02 000022cf: DUP2 000022d0: DIV 000022d1: PUSH1 0x01 000022d3: DUP3 000022d4: AND 000022d5: DUP1 000022d6: PUSH2 0x22e0 000022d9: JUMPI 000022da: PUSH1 0x7f 000022dc: DUP3 000022dd: AND 000022de: SWAP2 000022df: POP 000022e0: JUMPDEST 000022e1: PUSH1 0x20 000022e3: DUP3 000022e4: LT 000022e5: DUP2 000022e6: EQ 000022e7: ISZERO 000022e8: PUSH2 0x2301 000022eb: JUMPI 000022ec: PUSH4 0x4e487b71 000022f1: PUSH1 0xe0 000022f3: SHL 000022f4: PUSH1 0x00 000022f6: MSTORE 000022f7: PUSH1 0x22 000022f9: PUSH1 0x04 000022fb: MSTORE 000022fc: PUSH1 0x24 000022fe: PUSH1 0x00 00002300: REVERT 00002301: JUMPDEST 00002302: POP 00002303: SWAP2 00002304: SWAP1 00002305: POP 00002306: JUMP 00002307: JUMPDEST 00002308: PUSH1 0x00 0000230a: PUSH1 0x00 0000230c: NOT 0000230d: DUP3 0000230e: EQ 0000230f: ISZERO 00002310: PUSH2 0x231b 00002313: JUMPI 00002314: PUSH2 0x231b 00002317: PUSH2 0x2322 0000231a: JUMP 0000231b: JUMPDEST 0000231c: POP 0000231d: PUSH1 0x01 0000231f: ADD 00002320: SWAP1 00002321: JUMP 00002322: JUMPDEST 00002323: PUSH4 0x4e487b71 00002328: PUSH1 0xe0 0000232a: SHL 0000232b: PUSH1 0x00 0000232d: MSTORE 0000232e: PUSH1 0x11 00002330: PUSH1 0x04 00002332: MSTORE 00002333: PUSH1 0x24 00002335: PUSH1 0x00 00002337: REVERT 00002338: JUMPDEST 00002339: PUSH1 0x01 0000233b: PUSH1 0x01 0000233d: PUSH1 0xa0 0000233f: SHL 00002340: SUB 00002341: DUP2 00002342: AND 00002343: DUP2 00002344: EQ 00002345: PUSH2 0x0b8f 00002348: JUMPI 00002349: PUSH1 0x00 0000234b: DUP1 0000234c: REVERT 0000234d: INVALID 0000234e: GASLIMIT 0000234f: MSTORE 00002350: NUMBER 00002351: ORIGIN 00002352: ADDRESS 00002353: GASPRICE 00002354: KECCAK256 00002355: PUSH3 0x75726e 00002359: KECCAK256 0000235a: PUSH2 0x6d6f 0000235d: PUSH22 0x6e7420657863656564732062616c616e636545524332 00002374: ADDRESS 00002375: GASPRICE 00002376: KECCAK256 00002377: PUSH21 0x72616e7366657220616d6f756e7420657863656564 0000238d: PUSH20 0x20616c6c6f77616e636545524332303a20646563 000023a2: PUSH19 0x656173656420616c6c6f77616e63652062656c 000023b6: PUSH16 0x77207a65726fa2646970667358221220 000023c7: UNKNOWN(0xDE) 000023c8: SWAP15 000023c9: BLOCKHASH 000023ca: UNKNOWN(0x2B) 000023cb: UNKNOWN(0xA8) 000023cc: UNKNOWN(0x26) 000023cd: CALLDATACOPY 000023ce: UNKNOWN(0xDE) 000023cf: UNKNOWN(0xAA) 000023d0: PUSH8 0x123699ec3517dfbb 000023d9: UNKNOWN(0xAD) 000023da: STOP 000023db: UNKNOWN(0xC0) 000023dc: UNKNOWN(0xE4) 000023dd: UNKNOWN(0xB4) 000023de: UNKNOWN(0xB1) 000023df: UNKNOWN(0xE7) 000023e0: PUSH27
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | reentrancy | slither | Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "_withdrawDividendOfUser",
"type": "function",
"source_mapping": {
"lines": [
86,
87,
88,
89,
90,
91,
92,
93,
94,
95
],
"start": 4278,
"length": 509,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 18,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"type_specific_fields": {
"parent": {
"name": "DividendPayingToken",
"type": "contract",
"source_mapping": {
"lines": [
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176
],
"start": 641,
"length": 8125,
"ending_column": 9,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 105,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
}
},
"signature": "_withdrawDividendOfUser(address)"
}
},
{
"name": "(success,None) = user.call{gas: 3000,value: _withdrawableDividend}()",
"type": "node",
"source_mapping": {
"lines": [
90
],
"start": 4557,
"length": 71,
"ending_column": 75,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "_withdrawDividendOfUser",
"type": "function",
"source_mapping": {
"lines": [
86,
87,
88,
89,
90,
91,
92,
93,
94,
95
],
"start": 4278,
"length": 509,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 18,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"type_specific_fields": {
"parent": {
"name": "DividendPayingToken",
"type": "contract",
"source_mapping": {
"lines": [
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176
],
"start": 641,
"length": 8125,
"ending_column": 9,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 105,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
}
},
"signature": "_withdrawDividendOfUser(address)"
}
}
}
},
{
"name": "withdrawnDividends[user] = _withdrawnAmount",
"type": "node",
"source_mapping": {
"lines": [
91,
92
],
"start": 4683,
"length": 43,
"ending_column": 6,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"additional_fields": {
"variable_name": "withdrawnDividends",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "_withdrawDividendOfUser",
"type": "function",
"source_mapping": {
"lines": [
86,
87,
88,
89,
90,
91,
92,
93,
94,
95
],
"start": 4278,
"length": 509,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 18,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"type_specific_fields": {
"parent": {
"name": "DividendPayingToken",
"type": "contract",
"source_mapping": {
"lines": [
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176
],
"start": 641,
"length": 8125,
"ending_column": 9,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 105,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
}
},
"signature": "_withdrawDividendOfUser(address)"
}
}
}
}
],
"locations": [
{
"file": "contracts/DividendPayingToken.sol",
"name": "_withdrawDividendOfUser",
"type": "function",
"lines": [
86,
87,
88,
89,
90,
91,
92,
93,
94,
95
]
},
{
"file": "contracts/DividendPayingToken.sol",
"name": "(success,None) = user.call{gas: 3000,value: _withdrawableDividend}()",
"type": "node",
"lines": [
90
]
},
{
"file": "contracts/DividendPayingToken.sol",
"name": "withdrawnDividends[user] = _withdrawnAmount",
"type": "node",
"lines": [
91,
92
]
}
],
"description": "Reentrancy in DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95):\n\tExternal calls:\n\t- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)\n\tState variables written after the call(s):\n\t- withdrawnDividends[user] = _withdrawnAmount (contracts/DividendPayingToken.sol#91-92)\n\tDividendPayingToken.withdrawnDividends (contracts/DividendPayingToken.sol#41-42) can be used in cross function reentrancies:\n\t- DividendPayingToken._withdrawDividendOfUser(address) (contracts/DividendPayingToken.sol#86-95)\n\t- DividendPayingToken.withdrawableDividendOf(address) (contracts/DividendPayingToken.sol#110-113)\n\t- DividendPayingToken.withdrawnDividendOf(address) (contracts/DividendPayingToken.sol#118-120)"
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x70556dd2e9aa589037da06fdf6ffadeaea5fc80d445dd15b4a6bcf746b7ce7d8
call_targets:
0x95fcc6006d2a7c02e0eae2859299efa04ee16d19
target_varies:
no
classification:
constant_target
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "sink_reached",
"attempts": 38,
"trace_id": "0x70556dd2e9aa589037da06fdf6ffadeaea5fc80d445dd15b4a6bcf746b7ce7d8",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x95fcc6006d2a7c02e0eae2859299efa04ee16d19"
],
"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": "0xe7841ec0",
"selector": "0xe7841ec0",
"calldata_variants": [
"0xe7841ec0",
"0xe7841ec00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe98030c7",
"selector": "0xe98030c7",
"calldata_variants": [
"0xe98030c7",
"0xe98030c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xffb2c479",
"selector": "0xffb2c479",
"calldata_variants": [
"0xffb2c479",
"0xffb2c4790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc705c569",
"selector": "0xc705c569",
"calldata_variants": [
"0xc705c569",
"0xc705c5690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2190,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 2313,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 3059,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 9041,
"type": "tx_origin_used"
}
],
"delegatecall_count": 7,
"untrusted_delegatecall_count": 7
}
|
| high | reentrancy | slither | Reentrancy in FetchInuDividendTracker.process(uint256) (contracts/FetchInuDividendTracker.sol#156-201): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "process",
"type": "function",
"source_mapping": {
"lines": [
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201
],
"start": 5631,
"length": 1102,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
},
"type_specific_fields": {
"parent": {
"name": "FetchInuDividendTracker",
"type": "contract",
"source_mapping": {
"lines": [
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213
],
"start": 124,
"length": 6845,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 30,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
}
},
"signature": "process(uint256)"
}
},
{
"name": "_processAccount(address(account))",
"type": "node",
"source_mapping": {
"lines": [
184,
185
],
"start": 6360,
"length": 33,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 50,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "process",
"type": "function",
"source_mapping": {
"lines": [
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201
],
"start": 5631,
"length": 1102,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
},
"type_specific_fields": {
"parent": {
"name": "FetchInuDividendTracker",
"type": "contract",
"source_mapping": {
"lines": [
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213
],
"start": 124,
"length": 6845,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 30,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
}
},
"signature": "process(uint256)"
}
}
}
},
{
"name": "(success,None) = user.call{gas: 3000,value: _withdrawableDividend}()",
"type": "node",
"source_mapping": {
"lines": [
90
],
"start": 4557,
"length": 71,
"ending_column": 75,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_withdrawDividendOfUser",
"type": "function",
"source_mapping": {
"lines": [
86,
87,
88,
89,
90,
91,
92,
93,
94,
95
],
"start": 4278,
"length": 509,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 18,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
},
"type_specific_fields": {
"parent": {
"name": "DividendPayingToken",
"type": "contract",
"source_mapping": {
"lines": [
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176
],
"start": 641,
"length": 8125,
"ending_column": 9,
"is_dependency": false,
"filename_short": "contracts/DividendPayingToken.sol",
"starting_column": 105,
"filename_absolute": "/tmp/slither-harvljl4/contracts/DividendPayingToken.sol",
"filename_relative": "contracts/DividendPayingToken.sol"
}
},
"signature": "_withdrawDividendOfUser(address)"
}
}
}
},
{
"name": "lastProcessedIndex = _lastProcessedIndex",
"type": "node",
"source_mapping": {
"lines": [
196,
197,
198
],
"start": 6631,
"length": 40,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
},
"additional_fields": {
"variable_name": "lastProcessedIndex",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "process",
"type": "function",
"source_mapping": {
"lines": [
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201
],
"start": 5631,
"length": 1102,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
},
"type_specific_fields": {
"parent": {
"name": "FetchInuDividendTracker",
"type": "contract",
"source_mapping": {
"lines": [
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213
],
"start": 124,
"length": 6845,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/FetchInuDividendTracker.sol",
"starting_column": 30,
"filename_absolute": "/tmp/slither-harvljl4/contracts/FetchInuDividendTracker.sol",
"filename_relative": "contracts/FetchInuDividendTracker.sol"
}
},
"signature": "process(uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/FetchInuDividendTracker.sol",
"name": "process",
"type": "function",
"lines": [
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201
]
},
{
"file": "contracts/FetchInuDividendTracker.sol",
"name": "_processAccount(address(account))",
"type": "node",
"lines": [
184,
185
]
},
{
"file": "contracts/DividendPayingToken.sol",
"name": "(success,None) = user.call{gas: 3000,value: _withdrawableDividend}()",
"type": "node",
"lines": [
90
]
},
{
"file": "contracts/FetchInuDividendTracker.sol",
"name": "lastProcessedIndex = _lastProcessedIndex",
"type": "node",
"lines": [
196,
197,
198
]
}
],
"description": "Reentrancy in FetchInuDividendTracker.process(uint256) (contracts/FetchInuDividendTracker.sol#156-201):\n\tExternal calls:\n\t- _processAccount(address(account)) (contracts/FetchInuDividendTracker.sol#184-185)\n\t\t- (success,None) = user.call{gas: 3000,value: _withdrawableDividend}() (contracts/DividendPayingToken.sol#90)\n\tState variables written after the call(s):\n\t- lastProcessedIndex = _lastProcessedIndex (contracts/FetchInuDividendTracker.sol#196-198)\n\tFetchInuDividendTracker.lastProcessedIndex (contracts/FetchInuDividendTracker.sol#10-11) can be used in cross function reentrancies:\n\t- FetchInuDividendTracker._getAccount(address) (contracts/FetchInuDividendTracker.sol#46-88)\n\t- FetchInuDividendTracker.getLastProcessedIndex() (contracts/FetchInuDividendTracker.sol#29-32)\n\t- FetchInuDividendTracker.lastProcessedIndex (contracts/FetchInuDividendTracker.sol#10-11)\n\t- FetchInuDividendTracker.process(uint256) (contracts/FetchInuDividendTracker.sol#156-201)"
}
|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe7841ec0",
"selector": "0xe7841ec0",
"calldata_variants": [
"0xe7841ec0",
"0xe7841ec00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe98030c7",
"selector": "0xe98030c7",
"calldata_variants": [
"0xe98030c7",
"0xe98030c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xffb2c479",
"selector": "0xffb2c479",
"calldata_variants": [
"0xffb2c479",
"0xffb2c4790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc705c569",
"selector": "0xc705c569",
"calldata_variants": [
"0xc705c569",
"0xc705c5690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 9041,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xa3a857d387375d3c8b61d8ed6e5ae7150e8f384f1fa4cd677f6242bdd0eb9f7d
call_targets:
0x456fa3183d33497b290a3d24b98ddbc902ae1da5
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xa3a857d387375d3c8b61d8ed6e5ae7150e8f384f1fa4cd677f6242bdd0eb9f7d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x456fa3183d33497b290a3d24b98ddbc902ae1da5"
],
"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": "0xe7841ec0",
"selector": "0xe7841ec0",
"calldata_variants": [
"0xe7841ec0",
"0xe7841ec00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe98030c7",
"selector": "0xe98030c7",
"calldata_variants": [
"0xe98030c7",
"0xe98030c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xffb2c479",
"selector": "0xffb2c479",
"calldata_variants": [
"0xffb2c479",
"0xffb2c4790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc705c569",
"selector": "0xc705c569",
"calldata_variants": [
"0xc705c569",
"0xc705c5690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6071,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": [
{
"pc": 9041,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xa3a857d387375d3c8b61d8ed6e5ae7150e8f384f1fa4cd677f6242bdd0eb9f7d
call_targets:
0x456fa3183d33497b290a3d24b98ddbc902ae1da5
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xa3a857d387375d3c8b61d8ed6e5ae7150e8f384f1fa4cd677f6242bdd0eb9f7d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x456fa3183d33497b290a3d24b98ddbc902ae1da5"
],
"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": "0xe7841ec0",
"selector": "0xe7841ec0",
"calldata_variants": [
"0xe7841ec0",
"0xe7841ec00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe98030c7",
"selector": "0xe98030c7",
"calldata_variants": [
"0xe98030c7",
"0xe98030c70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xffb2c479",
"selector": "0xffb2c479",
"calldata_variants": [
"0xffb2c479",
"0xffb2c4790000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc705c569",
"selector": "0xc705c569",
"calldata_variants": [
"0xc705c569",
"0xc705c5690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6071,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [
{
"pc": 9041,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 1
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 7
}
|
| low | access_control | codex | Owner can arbitrarily change dividend shares and exclude accounts | 65 | no | — |
viewevidence_json{
"evidence": "`setBalance` accepts arbitrary `newBalance` under `onlyOwner`, and `excludeFromDividends` can remove accounts while `withdrawDividend` is disabled.",
"locations": [
"contracts/FetchInuDividendTracker.sol:28",
"contracts/FetchInuDividendTracker.sol:112",
"contracts/FetchInuDividendTracker.sol:132"
],
"recommendation": "Restrict `setBalance` to a trusted token contract that enforces balance correctness, or add validation against the underlying token balance. Consider a timelock/multisig for owner actions and/or enable user-initiated withdrawals.",
"exploit_scenario": "If the owner is compromised or malicious, it can call `setBalance` with arbitrary values or `excludeFromDividends` to remove accounts, diverting future dividends or blocking claims; since `withdrawDividend` is disabled, users cannot independently withdraw."
}
|
| low | other | codex | Fixed 3000 gas stipend can permanently lock dividends for contract wallets | 65 | no | — |
viewevidence_json{
"evidence": "Dividend payouts use `call{gas:3000}` and `withdrawDividend` is disabled in the tracker, while `process` routes through `_withdrawDividendOfUser`.",
"locations": [
"contracts/DividendPayingToken.sol:91",
"contracts/FetchInuDividendTracker.sol:28",
"contracts/FetchInuDividendTracker.sol:153"
],
"recommendation": "Remove the fixed 3000 gas stipend and rely on reentrancy protection, or allow users to call a withdrawal function that forwards sufficient gas. Optionally track repeated failures and skip them to avoid gas griefing.",
"exploit_scenario": "If a holder is a contract whose fallback requires more than 3000 gas, every dividend payout attempt will fail and remain stuck. `process()` will keep retrying the same accounts, wasting gas and delaying other claims, and users cannot self-withdraw because `withdrawDividend` is disabled."
}
|
| low | reentrancy | codex | External ETH transfer before state update can allow reentrant double-claims | 65 | no | — |
viewevidence_json{
"evidence": "`_withdrawDividendOfUser` sends ETH to `user` and only updates `withdrawnDividends` after the call succeeds.",
"locations": [
"contracts/DividendPayingToken.sol:87",
"contracts/DividendPayingToken.sol:90",
"contracts/DividendPayingToken.sol:91",
"contracts/DividendPayingToken.sol:95"
],
"recommendation": "Apply checks-effects-interactions: update `withdrawnDividends` before the external call and revert on failure, or add a reentrancy guard around dividend withdrawals.",
"exploit_scenario": "A malicious dividend recipient contract can use its fallback to reenter `withdrawDividend` (or a future refactor that increases the call gas) before `withdrawnDividends` is updated, letting it withdraw the same dividends multiple times and drain the pool."
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 8
}
|